2013-03-08 53 views
0

當我重新配置Mongo複製品時,我最終得到了一個隨機遞增的版本號。一切正常,但我擔心這個數字最終可能會溢出,因爲它似乎正在以幾何級數遞增。reconfig Mongo replicaset隨機增加版本

如果我做的:

conf = rs.conf() 

,並檢查我會看到​​ 後來我做:

conf['members'][0]['priority'] = 2 
rs.reconfig(conf, {force:1}) 

和它的作品,我複製集已被重新配置,但是當我做:

conf = rs.conf() 

conf['version']就像24956。如果我再做一次,它會變成83584,然後變成282961等等(它並不總是那些確切的數字,但模式是相同的,隨機的大增量,通常加倍或更差)。

發生這種情況,即使我指定這樣的版本號:

conf['members'][0]['priority'] = 2 
conf['version'] = conf['version'] + 1 
rs.reconfig(conf, {force:1}) 

有誰知道是怎麼回事,與底層蒙戈,我怎麼才能得到它具有可靠的版本號的增量? (我在Ubuntu上運行Mongo 2.0.2)。

順便說一下,如果我通過Mongo shell或使用Pymongo conn.admin.command('replSetReconfig', config)通過Python腳本執行此操作,就會發生這種情況。

回答

2

大的隨機增量是如何實施力標誌。

https://github.com/mongodb/mongo/blob/master/src/mongo/db/repl/rs_config.cpp#L653

void ReplSetConfig::init(BSONObj cfg, bool force) { 
    _constructed = false; 
    clear(); 
    from(cfg); 
    if(force) { 
     version += rand() % 100000 + 10000; 
    } 
    configAssert(version < 0 /*unspecified*/ || (version >= 1)); 
    if(version < 1) 
     version = 1; 
    _ok = true; 
    _constructed = true; 
} 

副本始終設置使用最高版本的配置。如果您已經獲得最高版本,則不需要強制。即使該集合中的另一個成員具有比正在更新的更新版本更新的版本,這個大躍進也試圖確保新配置總是最高版本。