CouchDB останавливается с ошибкой сокета 54 в процессе первого индексирования - PullRequest
0 голосов
/ 04 августа 2011

Я пытаюсь отсортировать ~ 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 Файл "/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 Файл "/Library/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 socket.error: 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'View Group Indexer'}]

но каждый раз, когда он застревает в процессе 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'View Group Indexer'}]

Другими словами, couchDB, похоже, осознал, что он уже обработал первые 5407 из 13567 изменений и теперь у него осталось только 8160.

но затем он почти сразу выходит и выдает мне тот же сокет. Ошибка: 54

Я искал в интернете последние несколько часов, но безрезультатно. Я попытался начать индексацию из других мест, таких как Futon. Как я уже упоминал, одной из моих ошибок была ошибка тайм-аута ОС, и увеличение порогов time_out в конфигурации Футона, похоже, помогло в этом.

Пожалуйста, если бы кто-нибудь мог пролить свет на этот вопрос, я был бы очень очень благодарен. Мне интересно, есть ли способ перезапустить процесс после того, как он уже проиндексировал 5407 документов, или еще лучше, если есть способ не допустить, чтобы вещь вышла из 1/3 пути в первую очередь.

Большое спасибо.

1 Ответ

0 голосов
/ 06 августа 2011

Исходя из того, что я понял, CouchDB создает содержимое вашего представления, отправляя все документы на ваш сервер представления couchpy, который запускает ваш код Python для этого документа. Если по какой-либо причине произойдет сбой этого кода, CouchDB будет уведомлен о том, что что-то пошло не так, что остановит обновление содержимого представления.

Итак, что-то не так с документом 5408, из-за которого ваш код Python ведет себя неправильно. Если вам нужна дополнительная помощь, я предлагаю вам опубликовать этот документ здесь. В качестве альтернативы просмотрите журналы вашего сервера просмотра couchpy: они могут содержать информацию о том, как ваш код провалился.

...