Details
-
Bug
-
Resolution: Community Answered
-
Major - P3
-
None
-
5.0.0, 5.0.1
-
None
-
ALL
-
-
(copied to CRM)
Description
TheĀ rs.addArb command doesn't work in MongoDB 5.x.
rs.addArb('mongodb-arbiter:27017')
|
We have a replicaSet with 1 primary node, 1 secondary node and are trying to add the arbiter to the replicaSet. However, when running the rs.addArb command, we get this error message
Error: assert.soon failed: function() {
|
var cfg = hostport;
|
|
|
var local = db.getSiblingDB("local");
|
assert(local.system.replset.count() <= 1,
|
"error: local.system.replset has unexpected contents");
|
var c = local.system.replset.findOne();
|
assert(c, "no config object retrievable from local.system.replset");
|
|
|
const attemptedVersion = c.version++;
|
|
|
var max = 0;
|
for (var i in c.members) {
|
// Omit 'newlyAdded' field if it exists in the config.
|
delete c.members[i].newlyAdded;
|
if (c.members[i]._id > max)
|
max = c.members[i]._id;
|
}
|
if (isString(hostport)) {
|
cfg = {_id: max + 1, host: hostport};
|
if (arb)
|
cfg.arbiterOnly = true;
|
} else if (arb == true) {
|
throw Error(
|
"Expected first parameter to be a host-and-port string of arbiter, but got " +
|
tojson(hostport));
|
}
|
|
|
if (cfg._id == null) {
|
cfg._id = max + 1;
|
}
|
c.members.push(cfg);
|
|
|
res = self._runCmd({replSetReconfig: c});
|
if (res === "") {
|
// _runCmd caught an exception.
|
return true;
|
}
|
if (res.ok) {
|
return true;
|
}
|
if (res.code === ErrorCodes.ConfigurationInProgress ||
|
res.code === ErrorCodes.CurrentConfigNotCommittedYet) {
|
return false; // keep retrying
|
}
|
if (res.code === ErrorCodes.NewReplicaSetConfigurationIncompatible) {
|
// We will retry only if this error was due to our config version being too low.
|
const cfgState = local.system.replset.findOne();
|
if (cfgState.version >= attemptedVersion) {
|
return false; // keep retrying
|
}
|
}
|
// Take no action on other errors.
|
return true;
|
} : {
|
"ok" : 0,
|
"errmsg" : "Reconfig attempted to install a config that would change the implicit default write concern. Use the setDefaultRWConcern command to set a cluster-wide write concern and try the reconfig again.",
|
"code" : 103,
|
"codeName" : "NewReplicaSetConfigurationIncompatible",
|
"$clusterTime" : {
|
"clusterTime" : Timestamp(1627634005, 1),
|
"signature" : {
|
"hash" : BinData(0,"0HvodHFBd9MboNymy6f1RCY2YZs="),
|
"keyId" : NumberLong("6990612431667986435")
|
}
|
},
|
"operationTime" : Timestamp(1627634005, 1)
|
} The hang analyzer is automatically called in assert.soon functions. If you are *expecting* assert.soon to possibly fail, call assert.soon with {runHangAnalyzer: false} as the fifth argument (you can fill unused arguments with `undefined`). :
|
doassert@src/mongo/shell/assert.js:20:14
|
assert.soon@src/mongo/shell/assert.js:382:17
|
rs.add@src/mongo/shell/utils.js:1624:5
|
rs.addArb@src/mongo/shell/utils.js:1696:12
|
@(shell):1:1
|
The version of MongoDB we are currently using is 5.0.1 and the scripts we use to configure the replicaSet work properly with MongoDB 4.x. We also tried to use rs.add('mongodb-secondary:27017', true) but got the same error. I can confirm that there is connectivity between the primary/secondary node and the arbiter one.