2013-12-17 32 views
0

你好,希望這不會太微不足道。「隨機」SocketError /連接拒絕py2neo查詢的錯誤

我堆棧的相關部分是Gunicorn/Celery,neomodel(0.3.6)和py2neo(1.5)。 Neo4j版本是1.9.4,綁定在0.0.0.0:7474(所有這些都在linux上,Ubuntu 13.04我認爲)

所以我的gunicorn /芹菜服務器在大多數情況下都很好,除了偶爾,我得到以下錯誤:

ConnectionRefusedError(111, 'Connection refused') 

Stacktrace (most recent call last): 
    File "flask/app.py", line 1817, in wsgi_app 
    response = self.full_dispatch_request() 
    File "flask/app.py", line 1477, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "flask/app.py", line 1381, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "flask/_compat.py", line 33, in reraise 
    raise value 
    File "flask/app.py", line 1475, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "flask/app.py", line 1461, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "Noomsa/web/core/util.py", line 156, in inner 
    user = UserMixin().get_logged_in() 
    File "Noomsa/web/core/util.py", line 117, in get_logged_in 
    user = models.User.index.get(username=flask.session["user"]) 
    File "neomodel/index.py", line 50, in get 
    nodes = self.search(query=query, **kwargs) 
    File "neomodel/index.py", line 41, in search 
    return [self.node_class.inflate(n) for n in self._execute(str(query))] 
    File "neomodel/index.py", line 28, in _execute 
    return self.__index__.query(query) 
    File "py2neo/neo4j.py", line 2044, in query 
    self.__uri__, quote(query, "") 
    File "py2neo/rest.py", line 430, in _send 
    raise SocketError(err) 

所以,你可以看到,我做User.index.get呼叫(在請求響應的第一次調用),並得到一個套接字錯誤。有時。大多數時候,它連接好。這個錯誤發生在所有使用neo4j連接的Flask視圖/ Celery任務中(而不僅僅是做User.index.get;))。

到目前爲止,我採取的步驟涉及moneky修補neomodel連接函數,以檢查每個線程創建了GraphDatabaseService對象,並且每隔30秒左右自動重新連接(並驗證)到neo4j服務器。這可能會減少錯誤的頻率,但它們仍然會發生。

在網上尋找錯誤,似乎大多數人試圖連接到錯誤的接口/ IP /端口。但是,鑑於我的大部分請求都經過了,我不認爲這是這種情況。

任何想法?我不認爲它是相關的,但我的數據庫似乎有38k孤兒節點;這本身可能值得另一個問題。

編輯︰我應該補充說,這似乎消失時運行gunicorn /芹菜workers=1,而不是workers=$CPU_N。不明白爲什麼它應該很重要,因爲顯然neo4j默認設置爲處理$N_CPU*10連接。

回答

1

這看起來像一個網絡或web堆棧配置問題,所以我不認爲我可以從py2neo的角度幫助。我建議升級到py2neo 1.6,但由於客戶端HTTP代碼已被完全重寫,並且可能會更優雅地處理重新連接。

+0

是的,正如我懷疑的那樣,固定它(或者至少暫時)。另外,該死的你更改Node.id到Node._id;) – BluePeppers

+0

這是因爲節點ID通常不應該直接使用:-P –