2013-03-08 64 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; 
} 

副本始终设置使用最高版本的配置。如果您已经获得最高版本,则不需要强制。即使该集合中的另一个成员具有比正在更新的更新版本更新的版本,这个大跃进也试图确保新配置总是最高版本。