CouchDB останавливается с ошибкой сокета 54 в процессе первого индексирования
Я пытаюсь отсортировать ~13 000 документов в локальной базе данных CouchDB моего Mac по дате, но каждый раз он зацикливается на документе 5407. Я пытался увеличить время ожидания на Futon, но безрезультатно. Это сообщение об ошибке, которое я получаю:
для строки в db.view('index15/by_date_time', startkey=start, endkey=end): файл "/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/client.py", строка 984, в файле iter " /Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/client.py ", строка 1003, в строках файла" /Library/Python/2.6 /site-packages/CouchDB-0.8-py2.6.egg/couchdb/client.py ", строка 990, в _fetch File "/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/client.py", строка 880, в файле _exec"/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/http.py", строка 393, в файле get_json" / Библиотека / Python / 2.6 / site-packages / CouchDB-0.8-py2.6.egg / couchdb / http.py ", строка 374, в файле get" /Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg / couchdb / http.py ", строка 419, в файле _request"/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/http.py", строка 239, в файле запроса "/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/http.py", строка 205, в _try_request_with_retries soc кет.ошибка: 54
кстати, это то же самое сообщение об ошибке, которое появляется, когда в моем скрипте есть опечатка.
Я использую couchpy для создания вида следующим образом:
def dateTimeToDocMapper (doc):
from dateutil.parser import parse
from datetime import datetime as dt
if doc.get('Date'):
# [year, month, day, hour, min, sec]
_date = list(dt.timetuple(parse(doc['Date']))[:-3])
yield (_date, doc)
пока он работает, я могу открыть оболочку Python и, используя server.tasks(), увидеть, что индексация действительно происходит.
>>> server.tasks()
[{u'status ': u' Обработано 75 из 13567 изменений (0%)', u'pid': u'<0.451.0>', u'task': u'gmail2 _design/index11', u'type': u'Просмотреть индексатор групп'}]
но каждый раз, когда он застревает в процессе 5407 из 13567 изменений (это займет ~8 минут, чтобы продвинуться так далеко). Я изучил то, что я считаю документом 5407, и он, похоже, не является чем-то необычным.
Кстати, если я пытаюсь перезапустить процесс после его остановки, я получаю этот ответ от server.tasks()
>>> server.tasks()
[{u'status ': u' Обработано 0 из 8160 изменений (0%)', u'pid': u'<0.1224.0>', u'task': u'gmail2 _design/index11', u'type': u'Просмотреть индексатор групп'}]
другими словами, couchDB, кажется, признал, что он уже обработал первые 5407 из 13567 изменений и теперь у него осталось только 8160.
но затем он почти сразу выходит и дает мне тот же сокет. Ошибка: 54
Я искал в интернете последние несколько часов, но безрезультатно. Я попытался начать индексирование из других мест, таких как Futon. Как я уже упоминал, одной из моих ошибок была ошибка тайм-аута ОС, и увеличение порогов time_out в конфигурации Futon, похоже, помогло с этим.
Пожалуйста, если бы кто-нибудь смог пролить свет на этот вопрос, я был бы очень очень признателен. Мне интересно, есть ли способ перезапустить процесс после того, как он уже проиндексировал 5407 документов, или еще лучше, если есть способ не допустить, чтобы вещь вышла из 1/3 пути в первую очередь.
Спасибо.
1 ответ
Исходя из того, что я понял, CouchDB создает содержимое вашего представления, отправляя все документы на ваш сервер представления couchpy, который запускает ваш код Python для этого документа. Если по какой-либо причине этот код не работает, CouchDB будет уведомлен о том, что что-то пошло не так, что остановит обновление содержимого представления.
Итак, что-то не так с документом 5408, из-за которого ваш код Python ведет себя неправильно. Если вам нужна дополнительная помощь, я предлагаю вам опубликовать этот документ здесь. В качестве альтернативы просмотрите журналы вашего сервера просмотра couchpy: они могут содержать информацию о том, как ваш код провалился.