|
Yes, I believe so — something like priority 1 votes 0, priority 0 votes 0, arbiter. In 3.2 and higher this is prohibited as an invalid config (SERVER-17528), and trying to initiate or reconfig with such a config returns errmsg: "priority must be 0 when non-voting (votes:0)". I confirmed that this is the case by retesting just now against 3.4.2 and 3.2.12.
However, 3.0.14 accepts this config, and has the symptoms originally described, where w:majority writes are acknowledged (when I would expect them to fail or "hang"). So the v3.0 branch is affected.
> rs.initiate(c)
|
{ "ok" : 1 }
|
replset:OTHER> rs.status()
|
{
|
"set" : "replset",
|
"date" : ISODate("2017-03-16T03:01:34.706Z"),
|
"myState" : 1,
|
"members" : [
|
{
|
"_id" : 0,
|
"name" : "devkev-1:12345",
|
"health" : 1,
|
"state" : 1,
|
"stateStr" : "PRIMARY",
|
"uptime" : 90,
|
"optime" : Timestamp(1489633262, 1),
|
"optimeDate" : ISODate("2017-03-16T03:01:02Z"),
|
"electionTime" : Timestamp(1489633266, 1),
|
"electionDate" : ISODate("2017-03-16T03:01:06Z"),
|
"configVersion" : 1,
|
"self" : true,
|
"repllag" : 0,
|
"repllagHrs" : 0
|
},
|
{
|
"_id" : 1,
|
"name" : "devkev-1:12346",
|
"health" : 1,
|
"state" : 2,
|
"stateStr" : "SECONDARY",
|
"uptime" : 31,
|
"optime" : Timestamp(1489633262, 1),
|
"optimeDate" : ISODate("2017-03-16T03:01:02Z"),
|
"lastHeartbeat" : ISODate("2017-03-16T03:01:33.006Z"),
|
"lastHeartbeatRecv" : ISODate("2017-03-16T03:01:33.009Z"),
|
"pingMs" : 0,
|
"lastHeartbeatMessage" : "could not find member to sync from",
|
"configVersion" : 1,
|
"repllag" : 0,
|
"repllagHrs" : 0
|
},
|
{
|
"_id" : 2,
|
"name" : "devkev-1:12347",
|
"health" : 1,
|
"state" : 7,
|
"stateStr" : "ARBITER",
|
"uptime" : 31,
|
"lastHeartbeat" : ISODate("2017-03-16T03:01:33.006Z"),
|
"lastHeartbeatRecv" : ISODate("2017-03-16T03:01:33.011Z"),
|
"pingMs" : 0,
|
"configVersion" : 1
|
}
|
],
|
"ok" : 1
|
}
|
replset:PRIMARY> rs.conf()
|
{
|
"_id" : "replset",
|
"version" : 1,
|
"members" : [
|
{
|
"_id" : 0,
|
"host" : "devkev-1:12345",
|
"arbiterOnly" : false,
|
"buildIndexes" : true,
|
"hidden" : false,
|
"priority" : 1,
|
"tags" : {
|
|
},
|
"slaveDelay" : 0,
|
"votes" : 0
|
},
|
{
|
"_id" : 1,
|
"host" : "devkev-1:12346",
|
"arbiterOnly" : false,
|
"buildIndexes" : true,
|
"hidden" : false,
|
"priority" : 0,
|
"tags" : {
|
|
},
|
"slaveDelay" : 0,
|
"votes" : 0
|
},
|
{
|
"_id" : 2,
|
"host" : "devkev-1:12347",
|
"arbiterOnly" : true,
|
"buildIndexes" : true,
|
"hidden" : false,
|
"priority" : 1,
|
"tags" : {
|
|
},
|
"slaveDelay" : 0,
|
"votes" : 1
|
}
|
],
|
"settings" : {
|
"chainingAllowed" : true,
|
"heartbeatTimeoutSecs" : 10,
|
"getLastErrorModes" : {
|
|
},
|
"getLastErrorDefaults" : {
|
"w" : 1,
|
"wtimeout" : 0
|
}
|
}
|
}
|
replset:PRIMARY> db.version()
|
3.0.14
|
replset:PRIMARY> db.test.insert({})
|
WriteResult({ "nInserted" : 1 })
|
replset:PRIMARY> db.test.insert({}, { writeConcern: { w: "majority" } } )
|
WriteResult({ "nInserted" : 1 })
|
replset:PRIMARY> db.test.insert({}, { writeConcern: { w: 2 } } )
|
WriteResult({ "nInserted" : 1 })
|
replset:PRIMARY> db.test.insert({}, { writeConcern: { w: 3 } } )
|
WriteResult({
|
"nInserted" : 1,
|
"writeConcernError" : {
|
"code" : 100,
|
"errmsg" : "Not enough data-bearing nodes"
|
}
|
})
|
replset:PRIMARY>
|
replset:PRIMARY>
|
replset:PRIMARY> rs.status()
|
{
|
"set" : "replset",
|
"date" : ISODate("2017-03-16T03:07:38.327Z"),
|
"myState" : 1,
|
"members" : [
|
{
|
"_id" : 0,
|
"name" : "devkev-1:12345",
|
"health" : 1,
|
"state" : 1,
|
"stateStr" : "PRIMARY",
|
"uptime" : 454,
|
"optime" : Timestamp(1489633383, 1),
|
"optimeDate" : ISODate("2017-03-16T03:03:03Z"),
|
"electionTime" : Timestamp(1489633266, 1),
|
"electionDate" : ISODate("2017-03-16T03:01:06Z"),
|
"configVersion" : 1,
|
"self" : true,
|
"repllag" : 0,
|
"repllagHrs" : 0
|
},
|
{
|
"_id" : 1,
|
"name" : "devkev-1:12346",
|
"health" : 0,
|
"state" : 8,
|
"stateStr" : "(not reachable/healthy)",
|
"uptime" : 0,
|
"optime" : Timestamp(0, 0),
|
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
|
"lastHeartbeat" : ISODate("2017-03-16T03:07:37.438Z"),
|
"lastHeartbeatRecv" : ISODate("2017-03-16T03:07:27.070Z"),
|
"pingMs" : 0,
|
"lastHeartbeatMessage" : "Failed attempt to connect to devkev-1:12346; couldn't connect to server devkev-1:12346 (172.31.0.248), connection attempt failed",
|
"configVersion" : -1,
|
"repllag" : 1489633383,
|
"repllagHrs" : 413787.05083333334
|
},
|
{
|
"_id" : 2,
|
"name" : "devkev-1:12347",
|
"health" : 1,
|
"state" : 7,
|
"stateStr" : "ARBITER",
|
"uptime" : 395,
|
"lastHeartbeat" : ISODate("2017-03-16T03:07:37.075Z"),
|
"lastHeartbeatRecv" : ISODate("2017-03-16T03:07:37.095Z"),
|
"pingMs" : 0,
|
"configVersion" : 1
|
}
|
],
|
"ok" : 1
|
}
|
replset:PRIMARY>
|
replset:PRIMARY>
|
replset:PRIMARY> db.test.insert({})
|
WriteResult({ "nInserted" : 1 })
|
replset:PRIMARY> db.test.insert({}, { writeConcern: { w: "majority" } } )
|
WriteResult({ "nInserted" : 1 })
|
replset:PRIMARY> db.test.insert({}, { writeConcern: { w: 3 } } )
|
WriteResult({
|
"nInserted" : 1,
|
"writeConcernError" : {
|
"code" : 100,
|
"errmsg" : "Not enough data-bearing nodes"
|
}
|
})
|
replset:PRIMARY> db.test.insert({}, { writeConcern: { w: 2 } } )
|
^C
|
do you want to kill the current op(s) on the server? (y/n): y
|
|