日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

pymongo bugfix后记

發布時間:2023/12/13 综合教程 36 生活家
生活随笔 收集整理的這篇文章主要介紹了 pymongo bugfix后记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

有網友反饋py-mongo-sync同步異常,檢查發現curosr[0]取查詢結果第一個文檔時報錯”no such item for Cursor instance”。

這里的邏輯是,根據timestamp查詢oplog起始位置,cursor類型是TAILABLE,然后取出第一條oplog,驗證timestamp是否一致。

對方mongo版本是v3.4,同步工具在v3.2及更早版本的MongoDB上還沒出過類似問題。
使用pymongo 3.5.1(最新版本)分別用v3.2和v3.4跑同步測試,在query結果非空的情況下,v3.2正常,v3.4報錯,懷疑是不是v3.4做了什么改動,導致dirver不兼容。

進一步排查,cursor[0]讀取文檔,db端返回了一個錯誤,意思說tailable和singleBatch兩個選項沖突。

{'number_returned': 1, 'data': [SON([(u'ok', 0.0), (u'errmsg', u"cannot use tailable option with the 'singleBatch' option"), (u'code', 2), (u'codeName', u'BadValue')])], 'starting_from': 0, 'cursor_id': 0}

cursor.__getitem__(self, index)方法,如果取單個文檔,首先對當前cursor進行clone,將limit設置為-1(db返回一條文檔并關閉cursor,可參考ntoreturn vs batchSize),表示只讀取一條文檔。

 577         if isinstance(index, integer_types):                                                                                                                                            
 578             if index < 0:                                                                                                                                                               
 579                 raise IndexError("Cursor instances do not support negative "                                                                                                            
 580                                  "indices")                                                                                                                                             
 581             clone = self.clone()                                                                                                                                                        
 582             clone.skip(index + self.__skip)                                                                                                                                             
 583             clone.limit(-1)  # use a hard limit                                                                                                                                         
 584             for doc in clone:                                                                                                                                                       大專欄 pymongo bugfix后記     
 585                 return doc                                                                                                                                                              
 586             raise IndexError("no such item for Cursor instance")                                                                                                                        
 587         raise TypeError("index %r cannot be applied to Cursor "                                                                                                                         
 588                         "instances" % index)

cursor類型是TAILABLE或TAILABLE_AWAIT,所以query的tailable選項為True;
cursor.limit設置為-1,導致query的singleBatch選項為True;
二者皆為True,引發沖突。

因為只讀取一條文檔,limit必須為-1,所以需要把TAILABLE和TAILABLE_AWAIT設置為0,避免選項沖突。

clone.limit(-1)  # use a hard limit  
clone.__query_flags &= ~CursorType.TAILABLE_AWAIT  # PYTHON-1371

至此,問題解決,說說幾點收獲:

盡量不要使用cursor索引訪問文檔,除非是一次性操作

 # 以下是原代碼邏輯
 coll = self._src_mc['local'].get_collection('oplog.rs', codec_options=bson.codec_options.CodecOptions(document_class=bson.son.SON))
 cursor = coll.find({'ts': {'$gte': oplog_start}}, cursor_type=pymongo.cursor.CursorType.TAILABLE_AWAIT, no_cursor_timeout=True)
		
 if cursor[0]['ts'] == oplog_start: # 這里對原始cursor進行clone,執行查詢(第一次),然后關閉cursor_cloned

     # 之前在跑同步時,時間戳一致,但此處可能仍有時間長短不一的等待,始終不明所以
     # 原因是下面在調用cursor.next()時會重新執行查詢

     while True:
         oplog = cursor.next() # 這里使用原始cursor,執行查詢(第二次)
         # handle oplog

提交PR前,確保本地跑通test case,當時僅考慮到TAILABLE的情況,而忽略了TAILABLE_AWAIT
掌握PR流程:提交PR后,如果review未通過,需要修改代碼,在你的local分支下繼續commit并push到GitHub,新commit會自動追加到該PR,最后由項目維護者完成merge,可以參考collaborating-with-issues-and-pull-requests
最后,很高興PR能被官方merge :)

總結

以上是生活随笔為你收集整理的pymongo bugfix后记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

歡迎分享!

轉載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:pymongo bugfix后记

主站蜘蛛池模板: 亚洲av永久一区二区三区蜜桃 | 成人激情视频在线播放 | 依人99| 狠狠艹狠狠干 | 日韩一区免费观看 | 亚洲天堂免费在线观看视频 | 亚洲看片网 | 性免费视频 | 国产成人小视频在线观看 | 婷婷综合久久 | 国产精品专区在线观看 | 亚洲国产日韩精品 | 美女张开腿让男人桶爽 | 天堂一区在线 | 干美女少妇 | 99这里只有精品视频 | 成人综合精品 | 久久久精品一区 | 中文字幕有码在线视频 | 久久久久久久久久艹 | 亲子伦视频一区二区三区 | 麻豆天天躁天天揉揉av | 少妇又色又紧又黄又刺激免费 | www.在线播放| 婷婷色影院 | 大尺度做爰无遮挡露器官 | 欧美特一级片 | 超碰偷拍 | 国产激情网址 | 欧美日韩精品一区二区三区四区 | 少妇一级淫片免费放播放 | 色综合天天综合网天天狠天天 | 亚洲一区二区视频在线 | 欧美成人一二三 | 亚洲欧美自拍偷拍 | 美国性生活大片 | 麻豆网| 日本三级日本三级日本三级极 | 一区www | 国产黄色网络 | 污网站免费看 | 日本不卡视频一区二区三区 | 玉米地疯狂的吸允她的奶视频 | 日韩欧美成人精品 | 麻豆免费在线播放 | 秘密基地在线观看完整版免费 | av大片免费在线观看 | 日本中文字幕成人 | 狠狠干香蕉 | 国产成人小视频在线观看 | 成人午夜精品 | 青娱乐欧美| 午夜成人免费电影 | 很黄的网站在线观看 | 欧美激情天堂 | 午夜影视免费 | 亚洲av综合一区 | 我们的2018在线观看免费高清 | 欧美亚洲综合另类 | 有码一区二区 | 女人被男人操 | 欧美不卡一区 | 欧美videos另类极品 | 亚洲九九爱 | 亚洲网站免费观看 | 色一五月| 国产精品1234区 | wwwwxxx日本 | 欧美无砖砖区免费 | 日韩深夜视频 | 一级免费观看 | 久久精品国产亚洲AV无码麻豆 | 涩涩涩涩av | 日本一区视频在线观看 | 欧美bbbbb| 国产精品成人aaaa在线 | 亚洲色图36p | 韩日一级片 | 在线免费av播放 | 欧美极品videos精品 | 99国产精品白浆在线观看免费 | 久久免费看少妇高潮v片特黄 | 男人添女人下部高潮全视频 | 久久精品噜噜噜成人88aⅴ | 欧美激情一二区 | 精品国产一区二区三区在线观看 | 中文精品无码中文字幕无码专区 | 精品一区二区三区四区五区 | 综合久久亚洲 | 日韩精品第一 | 超碰人人人人 | 欧日韩不卡在线视频 | 亚洲免费av一区二区 | 6080av| 精品久久久影院 | 日本成片网 | 国产夫妻久久 | 精品久久人妻av中文字幕 | 麻豆91在线播放 |