summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/topology_coordinator_impl_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/repl/topology_coordinator_impl_test.cpp')
-rw-r--r--src/mongo/db/repl/topology_coordinator_impl_test.cpp113
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());
}