我正在將我們的引用mongo資源的代碼庫遷移到使用複製,並且我看到MongoReplicaSetClient出現了一些意外的行爲。客戶工作正常,除非我在選舉新主人的時候嘗試寫信。MongoReplicaSetClient在初選期間意外失敗
的簡單測試我運行是:
*啓動一個3節點副本集
*與MongoReplicaSetClient連接( '本地主機:27017,本地主機:27018,本地主機:27017',replicaSet = 'RS0'
*執行寫入
*殺主,並立即執行寫入
*初選已經完成
所有上述步驟,做工精細,除了倒數第二個,其中主要是下來以後再執行一次寫操作。根據到我的文檔MongoReplicaSetClient ld期望在沒有主存在時執行的所有寫入嘗試都會拋出AutoReconnect錯誤。但是,我所看到的是一個通用的AssertionError。
db = MongoReplicaSetClient('localhost:27017,localhost:27018,localhost:27017', replicaSet='rs0', w=2).testdb
db.testcol.save({'test': 1})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "build/bdist.linux-x86_64/egg/pymongo/collection.py", line 266, in save
File "build/bdist.linux-x86_64/egg/pymongo/collection.py", line 362, in insert
File "build/bdist.linux-x86_64/egg/pymongo/message.py", line 248, in _do_batched_insert
File "build/bdist.linux-x86_64/egg/pymongo/mongo_replica_set_client.py", line 1456, in _send_message
File "build/bdist.linux-x86_64/egg/pymongo/pool.py", line 397, in maybe_return_socket
AssertionError
有誰知道這是否是預期的行爲?我想正確處理這類事件,甚至在選舉完成之前阻止所有寫入。
我不完全確定是否連接錯誤,而不是「沒有候選服務器發現」將作爲連接錯誤下去連接錯誤 – Sammaye
這是一個錯誤:https:/ /jira.mongodb.org/browse/PYTHON-601 – zero323
此時MongoClient和MongoReplicaSetClient之間是否有區別?該文檔指出它運行一個監視線程來保持副本集上的選項卡。不過,我使用MongoClient進行了與上面相同的測試,並且它能夠很好地檢測到主要更改。它還在初選期間按預期拋出了適當的AutoReconnect錯誤。我想知道文檔是否過時,MongoReplicaSetClient是否處於棄用路徑。 –