CouchDB在第一次索引中途停止,插槽错误54

时间:2011-08-04 08:30:12

标签: couchdb couchdb-python

我正在尝试按日期在Mac的本地CouchDB数据库中对~13,000个文档进行排序,但每次都会在文档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行,行   在_fetch中输入文件“/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/client.py”,第990行   在_exec中输入文件“/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/client.py”,第880行   在get_json中输入文件“/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/http.py”,第393行   文件“/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/http.py”,第374行,获取   在_request中输入文件“/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/http.py”,第419行   请求文件“/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/http.py”,第239行   在_try_request_with_retries中输入文件“/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/http.py”,第205行 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 shell并使用server.tasks()我可以看到索引确实正在发生。

  
    
      

>>> server.tasks()

             

[{u'status':u'Processed 75 of 13567 change(0%)',u'pid':u'< 0.451.0>',u'task':u'gmail2 _design / index11' ,u'type':u'View Group Indexer'}]

    
  

但每次它都停留在13567的过程5407变化(这需要约8分钟才能达到这个目标)。我已经检查过我认为是5407号文件的内容,看起来并不是什么特别之处。

顺便说一句,如果我尝试在停止后重新启动进程,我会从server.tasks()获得此响应

  
    
      

>>> server.tasks()

             

[{u'status':u'Processed 0 of 8160 changes(0%)',u'pid':u'< 0.1224.0>',u'task':u'gmail2 _design / index11' ,u'type':u'View Group Indexer'}]

    
  

换句话说,couchDB似乎已经认识到它已经处理了13567更改的第一个5407,现在只剩下8160了。

然后它几乎立即退出并给了我相同的socket.error:54

过去几个小时我一直在网上搜索无济于事。我已经尝试从其他位置启动索引,例如Futon。正如我所提到的,我的一个错误是OS超时错误,并且在Futon的配置中增加time_out阈值似乎对此有所帮助。

如果有人能说清楚这个问题,我将非常感激。我想知道是否有一种方法可以在已经编入索引的5407文档后重新启动该过程,或者更好的是,如果有办法防止该东西在第一时间退出1/3。

非常感谢。

1 个答案:

答案 0 :(得分:0)

从我收集的内容来看,CouchDB通过将所有文档发送到您的平板视图服务器来构建您的视图内容,该服务器在该文档上运行您的Python代码。如果该代码因任何原因失败,将通知CouchDB出现问题,这将停止更新视图内容。

因此,文档5408出现问题导致Python代码出现异常。如果您需要更多帮助,我建议您在此处发布该文档。或者,查看couchpy视图服务器的日志:它们可能包含有关代码失败的信息。