Mongodb reconfig Mongo replicaset随机增加版本

Mongodb reconfig Mongo replicaset随机增加版本,mongodb,Mongodb,当我重新配置Mongo ReplicateSets时,结果是replset的版本号随机递增。一切正常,但我担心这个数字最终可能会溢出,因为它似乎在以几何级数递增 如果我这样做: conf = rs.conf() 并检查我将看到conf['version']=1 那么我会: conf['members'][0]['priority'] = 2 rs.reconfig(conf, {force:1}) 它工作正常,我的回复集已重新配置,但当我重新配置时: conf = rs.conf() co

当我重新配置Mongo ReplicateSets时,结果是replset的版本号随机递增。一切正常,但我担心这个数字最终可能会溢出,因为它似乎在以几何级数递增

如果我这样做:

conf = rs.conf()
并检查我将看到
conf['version']=1
那么我会:

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})
有人知道底层Mongo的情况吗?我如何让它有可靠的版本号增量?(我正在Ubuntu上运行Mongo2.0.2)


顺便说一句,如果我通过Mongo shell或使用Pymongo
conn.admin.command('replSetReconfig',config)
使用Python脚本来完成,就会发生这种情况

大随机增量是如何实现强制标志的

:

void ReplSetConfig::init(BSONObj cfg,bool force){
_构造=假;
清除();
from(cfg);
如果(强制){
版本+=兰德()%100000+10000;
}
configAssert(版本<0/*未指定*/| |(版本>=1));
如果(版本<1)
版本=1;
_ok=正确;
_构造=真;
}
副本集始终使用具有最高版本的配置。如果您已经获得了最高版本,则不需要强制。大飞跃试图确保新配置始终是最高版本,即使集合中的另一个成员的版本比正在更新的版本更新

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;
}