from doc:
w: “majority” Behavior
Starting in MongoDB 4.4, replica set members in the STARTUP2 state do not participate in write majorities.
but i test,i find that STARTUP2 state still participate in write majorities.
i’m psa replication.when i add new node to it. the new node state is startup2.
but replication writableVotingMembersCount from 2 to 3.
so i insert data with writeConcern that is hang or timeout.
the follwoing is my test:
shard1:PRIMARY> rs.status();
{
“set” : “shard1”,
“date” : ISODate(“2022-11-21T05:02:51.701Z”),
“myState” : 1,
“term” : NumberLong(2),
“syncSourceHost” : “”,
“syncSourceId” : -1,
“heartbeatIntervalMillis” : NumberLong(2000),
“majorityVoteCount” : 2,
“writeMajorityCount” : 2,
“votingMembersCount” : 3,
“writableVotingMembersCount” : 2,
"members" : [
{
"_id" : 0,
"name" : "100.130.10.149:41001",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 200,
"optime" : {
"ts" : Timestamp(1669006964, 1),
"t" : NumberLong(2)
},
"optimeDurable" : {
"ts" : Timestamp(1669006964, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2022-11-21T05:02:44Z"),
"optimeDurableDate" : ISODate("2022-11-21T05:02:44Z"),
"lastHeartbeat" : ISODate("2022-11-21T05:02:50.799Z"),
"lastHeartbeatRecv" : ISODate("2022-11-21T05:02:49.782Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncSourceHost" : "100.130.9.150:41001",
"syncSourceId" : 1,
"infoMessage" : "",
"configVersion" : 1,
"configTerm" : 2
},
{
"_id" : 1,
"name" : "100.130.9.150:41001",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 5797,
"optime" : {
"ts" : Timestamp(1669006964, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2022-11-21T05:02:44Z"),
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"electionTime" : Timestamp(1669005454, 1),
"electionDate" : ISODate("2022-11-21T04:37:34Z"),
"configVersion" : 1,
"configTerm" : 2,
"self" : true,
"lastHeartbeatMessage" : ""
},
{
"_id" : 2,
"name" : "100.130.10.150:41001",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 5399,
"lastHeartbeat" : ISODate("2022-11-21T05:02:50.151Z"),
"lastHeartbeatRecv" : ISODate("2022-11-21T05:02:50.159Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"configVersion" : 1,
"configTerm" : 2
}
],
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1669006964, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1669006964, 1)
}
shard1:PRIMARY> rs.printSlaveReplicationInfo()
source: 100.130.10.149:41001
syncedTo: Mon Nov 21 2022 13:03:54 GMT+0800 (CST)
0 secs (0 hrs) behind the primary
shard1:PRIMARY> db.POCCOLL.insert({_id:1,name:“testWriteConcern”},{writeConcern:{w:“majority”,wtimeout:5000}})
WriteResult({ “nInserted” : 1 })
shard1:PRIMARY> rs.add(“100.130.9.149:41001”)
{
“ok” : 1,
“$clusterTime” : {
“clusterTime” : Timestamp(1669007243, 1),
“signature” : {
“hash” : BinData(0,“AAAAAAAAAAAAAAAAAAAAAAAAAAA=”),
“keyId” : NumberLong(0)
}
},
“operationTime” : Timestamp(1669007243, 1)
}
shard1:PRIMARY> rs.printSlaveReplicationInfo()
source: 100.130.10.149:41001
syncedTo: Mon Nov 21 2022 13:07:23 GMT+0800 (CST)
0 secs (0 hrs) behind the primary
source: 100.130.9.149:41001
syncedTo: Thu Jan 01 1970 08:00:00 GMT+0800 (CST)
1669007243 secs (463613.12 hrs) behind the primary
shard1:PRIMARY> rs.status();
{
“set” : “shard1”,
“date” : ISODate(“2022-11-21T05:07:36.186Z”),
“myState” : 1,
“term” : NumberLong(2),
“syncSourceHost” : “”,
“syncSourceId” : -1,
“heartbeatIntervalMillis” : NumberLong(2000),
“majorityVoteCount” : 3,
“writeMajorityCount” : 3,
“votingMembersCount” : 4,
“writableVotingMembersCount” : 3,
“members” : [
{
“_id” : 0,
“name” : “100.130.10.149:41001”,
“health” : 1,
“state” : 2,
“stateStr” : “SECONDARY”,
“uptime” : 485,
“optime” : {
“ts” : Timestamp(1669007254, 1),
“t” : NumberLong(2)
},
“optimeDurable” : {
“ts” : Timestamp(1669007254, 1),
“t” : NumberLong(2)
},
“optimeDate” : ISODate(“2022-11-21T05:07:34Z”),
“optimeDurableDate” : ISODate(“2022-11-21T05:07:34Z”),
“lastHeartbeat” : ISODate(“2022-11-21T05:07:35.802Z”),
“lastHeartbeatRecv” : ISODate(“2022-11-21T05:07:35.807Z”),
“pingMs” : NumberLong(0),
“lastHeartbeatMessage” : “”,
“syncSourceHost” : “100.130.9.150:41001”,
“syncSourceId” : 1,
“infoMessage” : “”,
“configVersion” : 2,
“configTerm” : 2
},
{
“_id” : 1,
“name” : “100.130.9.150:41001”,
“health” : 1,
“state” : 1,
“stateStr” : “PRIMARY”,
“uptime” : 6082,
“optime” : {
“ts” : Timestamp(1669007254, 1),
“t” : NumberLong(2)
},
“optimeDate” : ISODate(“2022-11-21T05:07:34Z”),
“syncSourceHost” : “”,
“syncSourceId” : -1,
“infoMessage” : “”,
“electionTime” : Timestamp(1669005454, 1),
“electionDate” : ISODate(“2022-11-21T04:37:34Z”),
“configVersion” : 2,
“configTerm” : 2,
“self” : true,
“lastHeartbeatMessage” : “”
},
{
“_id” : 2,
“name” : “100.130.10.150:41001”,
“health” : 1,
“state” : 7,
“stateStr” : “ARBITER”,
“uptime” : 5684,
“lastHeartbeat” : ISODate(“2022-11-21T05:07:35.802Z”),
“lastHeartbeatRecv” : ISODate(“2022-11-21T05:07:35.805Z”),
“pingMs” : NumberLong(0),
“lastHeartbeatMessage” : “”,
“syncSourceHost” : “”,
“syncSourceId” : -1,
“infoMessage” : “”,
“configVersion” : 2,
“configTerm” : 2
},
{
“_id” : 3,
“name” : “100.130.9.149:41001”,
“health” : 1,
“state” : 5,
“stateStr” : “STARTUP2”,
“uptime” : 12,
“optime” : {
“ts” : Timestamp(0, 0),
“t” : NumberLong(-1)
},
“optimeDurable” : {
“ts” : Timestamp(0, 0),
“t” : NumberLong(-1)
},
“optimeDate” : ISODate(“1970-01-01T00:00:00Z”),
“optimeDurableDate” : ISODate(“1970-01-01T00:00:00Z”),
“lastHeartbeat” : ISODate(“2022-11-21T05:07:35.813Z”),
“lastHeartbeatRecv” : ISODate(“2022-11-21T05:07:35.327Z”),
“pingMs” : NumberLong(0),
“lastHeartbeatMessage” : “”,
“syncSourceHost” : “100.130.9.150:41001”,
“syncSourceId” : 1,
“infoMessage” : “”,
“configVersion” : 2,
“configTerm” : 2
}
],
}
so now i insert data again ,startup2 state participate in write majorities.
so it is bug for it or other reason?
shard1:PRIMARY> db.POCCOLL.insert({_id:3,name:“testWriteConcern”},{writeConcern:{w:“majority”,wtimeout:5000}})
WriteResult({
“nInserted” : 1,
“writeConcernError” : {
“code” : 64,
“codeName” : “WriteConcernFailed”,
“errmsg” : “waiting for replication timed out”,
“errInfo” : {
“wtimeout” : true,
“writeConcern” : {
“w” : “majority”,
“wtimeout” : 5000,
“provenance” : “clientSupplied”
}
}
}
})