diff options
Diffstat (limited to 'src/mongo/db/repl/topology_coordinator_impl_test.cpp')
-rw-r--r-- | src/mongo/db/repl/topology_coordinator_impl_test.cpp | 113 |
1 files changed, 67 insertions, 46 deletions
diff --git a/src/mongo/db/repl/topology_coordinator_impl_test.cpp b/src/mongo/db/repl/topology_coordinator_impl_test.cpp index 3cba188212c..c4888c697bb 100644 --- a/src/mongo/db/repl/topology_coordinator_impl_test.cpp +++ b/src/mongo/db/repl/topology_coordinator_impl_test.cpp @@ -1322,6 +1322,7 @@ TEST_F(TopoCoordTest, ReplSetGetStatus) { Timestamp electionTime(1, 2); OpTime oplogProgress(Timestamp(3, 4), 0); OpTime lastCommittedOpTime(Timestamp(2, 3), -1); + OpTime readConcernMajorityOpTime(Timestamp(4, 5), -1); std::string setName = "mySet"; ReplSetHeartbeatResponse hb; @@ -1369,20 +1370,25 @@ TEST_F(TopoCoordTest, ReplSetGetStatus) { // Now node 0 is down, node 1 is up, and for node 2 we have no heartbeat data yet. BSONObjBuilder statusBuilder; Status resultStatus(ErrorCodes::InternalError, "prepareStatusResponse didn't set result"); - getTopoCoord().prepareStatusResponse(cbData(), - curTime, - durationCount<Seconds>(uptimeSecs), - oplogProgress, - lastCommittedOpTime, - &statusBuilder, - &resultStatus); + getTopoCoord().prepareStatusResponse( + cbData(), + TopologyCoordinator::ReplSetStatusArgs{ + curTime, + static_cast<unsigned>(durationCount<Seconds>(uptimeSecs)), + oplogProgress, + lastCommittedOpTime, + readConcernMajorityOpTime}, + &statusBuilder, + &resultStatus); ASSERT_OK(resultStatus); BSONObj rsStatus = statusBuilder.obj(); // Test results for all non-self members ASSERT_EQUALS(setName, rsStatus["set"].String()); ASSERT_EQUALS(curTime.asInt64(), rsStatus["date"].Date().asInt64()); - ASSERT_EQUALS(lastCommittedOpTime.toBSON(), rsStatus["lastCommittedOpTime"].Obj()); + ASSERT_EQUALS(lastCommittedOpTime.toBSON(), rsStatus["OpTimes"]["lastCommittedOpTime"].Obj()); + ASSERT_EQUALS(readConcernMajorityOpTime.toBSON(), + rsStatus["OpTimes"]["readConcernMajorityOpTime"].Obj()); std::vector<BSONElement> memberArray = rsStatus["members"].Array(); ASSERT_EQUALS(4U, memberArray.size()); BSONObj member0Status = memberArray[0].Obj(); @@ -1474,13 +1480,16 @@ TEST_F(TopoCoordTest, NodeReturnsInvalidReplicaSetConfigInResponseToGetStatusWhe BSONObjBuilder statusBuilder; Status resultStatus(ErrorCodes::InternalError, "prepareStatusResponse didn't set result"); - getTopoCoord().prepareStatusResponse(cbData(), - curTime, - durationCount<Seconds>(uptimeSecs), - oplogProgress, - OpTime(), - &statusBuilder, - &resultStatus); + getTopoCoord().prepareStatusResponse( + cbData(), + TopologyCoordinator::ReplSetStatusArgs{ + curTime, + static_cast<unsigned>(durationCount<Seconds>(uptimeSecs)), + oplogProgress, + OpTime(), + OpTime()}, + &statusBuilder, + &resultStatus); ASSERT_NOT_OK(resultStatus); ASSERT_EQUALS(ErrorCodes::InvalidReplicaSetConfig, resultStatus); } @@ -2169,13 +2178,15 @@ public: // Ensure a single failed heartbeat did not cause the node to be marked down BSONObjBuilder statusBuilder; Status resultStatus(ErrorCodes::InternalError, "prepareStatusResponse didn't set result"); - getTopoCoord().prepareStatusResponse(cbData(), - _firstRequestDate + Milliseconds(4000), - 10, - OpTime(Timestamp(100, 0), 0), - OpTime(), - &statusBuilder, - &resultStatus); + getTopoCoord().prepareStatusResponse( + cbData(), + TopologyCoordinator::ReplSetStatusArgs{_firstRequestDate + Milliseconds(4000), + 10, + OpTime(Timestamp(100, 0), 0), + OpTime(), + OpTime()}, + &statusBuilder, + &resultStatus); ASSERT_OK(resultStatus); BSONObj rsStatus = statusBuilder.obj(); std::vector<BSONElement> memberArray = rsStatus["members"].Array(); @@ -2185,8 +2196,9 @@ public: ASSERT_EQUALS(1, member1Status["health"].Double()); ASSERT_EQUALS(Timestamp(0, 0), - Timestamp(rsStatus["lastCommittedOpTime"]["ts"].timestampValue())); - ASSERT_EQUALS(-1LL, rsStatus["lastCommittedOpTime"]["t"].numberLong()); + Timestamp(rsStatus["OpTimes"]["lastCommittedOpTime"]["ts"].timestampValue())); + ASSERT_EQUALS(-1LL, rsStatus["OpTimes"]["lastCommittedOpTime"]["t"].numberLong()); + ASSERT_FALSE(rsStatus["OpTimes"].Obj().hasField("readConcernMajorityOpTime")); } Date_t firstRequestDate() { @@ -2229,13 +2241,15 @@ public: // Ensure a second failed heartbeat did not cause the node to be marked down BSONObjBuilder statusBuilder; Status resultStatus(ErrorCodes::InternalError, "prepareStatusResponse didn't set result"); - getTopoCoord().prepareStatusResponse(cbData(), - firstRequestDate() + Seconds(4), - 10, - OpTime(Timestamp(100, 0), 0), - OpTime(), - &statusBuilder, - &resultStatus); + getTopoCoord().prepareStatusResponse( + cbData(), + TopologyCoordinator::ReplSetStatusArgs{firstRequestDate() + Seconds(4), + 10, + OpTime(Timestamp(100, 0), 0), + OpTime(), + OpTime()}, + &statusBuilder, + &resultStatus); ASSERT_OK(resultStatus); BSONObj rsStatus = statusBuilder.obj(); std::vector<BSONElement> memberArray = rsStatus["members"].Array(); @@ -2543,13 +2557,15 @@ TEST_F(HeartbeatResponseTestTwoRetries, NodeDoesNotRetryHeartbeatsAfterFailingTw // Ensure a third failed heartbeat caused the node to be marked down BSONObjBuilder statusBuilder; Status resultStatus(ErrorCodes::InternalError, "prepareStatusResponse didn't set result"); - getTopoCoord().prepareStatusResponse(cbData(), - firstRequestDate() + Milliseconds(4900), - 10, - OpTime(Timestamp(100, 0), 0), - OpTime(), - &statusBuilder, - &resultStatus); + getTopoCoord().prepareStatusResponse( + cbData(), + TopologyCoordinator::ReplSetStatusArgs{firstRequestDate() + Milliseconds(4900), + 10, + OpTime(Timestamp(100, 0), 0), + OpTime(), + OpTime()}, + &statusBuilder, + &resultStatus); ASSERT_OK(resultStatus); BSONObj rsStatus = statusBuilder.obj(); std::vector<BSONElement> memberArray = rsStatus["members"].Array(); @@ -2782,13 +2798,15 @@ TEST_F(HeartbeatResponseTestTwoRetries, // Ensure a third nonconsecutive heartbeat failure did not cause the node to be marked down BSONObjBuilder statusBuilder; Status resultStatus(ErrorCodes::InternalError, "prepareStatusResponse didn't set result"); - getTopoCoord().prepareStatusResponse(cbData(), - firstRequestDate() + Milliseconds(7000), - 600, - OpTime(Timestamp(100, 0), 0), - OpTime(), - &statusBuilder, - &resultStatus); + getTopoCoord().prepareStatusResponse( + cbData(), + TopologyCoordinator::ReplSetStatusArgs{firstRequestDate() + Milliseconds(7000), + 600, + OpTime(Timestamp(100, 0), 0), + OpTime(), + OpTime()}, + &statusBuilder, + &resultStatus); ASSERT_OK(resultStatus); BSONObj rsStatus = statusBuilder.obj(); std::vector<BSONElement> memberArray = rsStatus["members"].Array(); @@ -4236,7 +4254,10 @@ TEST_F(ShutdownInProgressTest, NodeReturnsShutDownInProgressWhenGetReplSetStatus Status result = Status::OK(); BSONObjBuilder response; getTopoCoord().prepareStatusResponse( - cbData(), Date_t(), 0, OpTime(), OpTime(), &response, &result); + cbData(), + TopologyCoordinator::ReplSetStatusArgs{Date_t(), 0, OpTime(), OpTime(), OpTime()}, + &response, + &result); ASSERT_EQUALS(ErrorCodes::ShutdownInProgress, result); ASSERT_TRUE(response.obj().isEmpty()); } |