diff options
22 files changed, 70 insertions, 621 deletions
diff --git a/jstests/noPassthroughWithMongod/initial_sync_replSetGetStatus.js b/jstests/noPassthroughWithMongod/initial_sync_replSetGetStatus.js deleted file mode 100644 index df5600dc5a6..00000000000 --- a/jstests/noPassthroughWithMongod/initial_sync_replSetGetStatus.js +++ /dev/null @@ -1,109 +0,0 @@ -/** - * This test tests that replSetGetStatus returns initial sync stats while initial sync is in - * progress. - */ - -(function() { - "use strict"; - // If the parameter is already set, don't run this test. - var parameters = db.adminCommand({getCmdLineOpts: 1}).parsed.setParameter; - if (parameters.use3dot2InitialSync || parameters.initialSyncOplogBuffer) { - jsTest.log("Skipping initial_sync_parameters.js because use3dot2InitialSync or " + - "initialSyncOplogBuffer was already provided."); - return; - } - - var name = 'initial_sync_replSetGetStatus'; - var replSet = new ReplSetTest({ - name: name, - nodes: 1, - }); - - replSet.startSet(); - replSet.initiate(); - var primary = replSet.getPrimary(); - - var coll = primary.getDB('test').foo; - assert.writeOK(coll.insert({a: 1})); - assert.writeOK(coll.insert({a: 2})); - - // Add a secondary node but make it hang before copying databases. - var secondary = replSet.add( - {setParameter: {use3dot2InitialSync: false, initialSyncOplogBuffer: "collection"}}); - secondary.setSlaveOk(); - - assert.commandWorked(secondary.getDB('admin').runCommand( - {configureFailPoint: 'initialSyncHangBeforeCopyingDatabases', mode: 'alwaysOn'})); - assert.commandWorked(secondary.getDB('admin').runCommand( - {configureFailPoint: 'initialSyncHangBeforeFinish', mode: 'alwaysOn'})); - replSet.reInitiate(); - - // Wait for fail point message to be logged. - var checkLog = function(node, msg) { - assert.soon(function() { - var logMessages = assert.commandWorked(node.adminCommand({getLog: 'global'})).log; - for (var i = 0; i < logMessages.length; i++) { - if (logMessages[i].indexOf(msg) != -1) { - return true; - } - } - return false; - }, 'Did not see a log entry containing the following message: ' + msg, 10000, 1000); - }; - - // Wait for initial sync to pause before it copies the databases. - checkLog(secondary, 'initial sync - initialSyncHangBeforeCopyingDatabases fail point enabled'); - - // Test that replSetGetStatus returns the correct results while initial sync is in progress. - var res = assert.commandWorked(secondary.adminCommand({replSetGetStatus: 1})); - assert(!res.initialSyncStatus, - "Response should not have an 'initialSyncStatus' field: " + tojson(res)); - - res = assert.commandWorked(secondary.adminCommand({replSetGetStatus: 1, initialSync: 1})); - assert(res.initialSyncStatus, - "Response should have an 'initialSyncStatus' field: " + tojson(res)); - - assert.commandFailed(secondary.adminCommand({replSetGetStatus: 1, initialSync: "t"}), - ErrorCodes.TypeMismatch); - - assert.writeOK(coll.insert({a: 3})); - assert.writeOK(coll.insert({a: 4})); - - // Let initial sync continue working. - assert.commandWorked(secondary.getDB('admin').runCommand( - {configureFailPoint: 'initialSyncHangBeforeCopyingDatabases', mode: 'off'})); - - // Wait for initial sync to pause right before it finishes. - checkLog(secondary, 'initial sync - initialSyncHangBeforeFinish fail point enabled'); - - // Test that replSetGetStatus returns the correct results when initial sync is at the very end. - res = assert.commandWorked(secondary.adminCommand({replSetGetStatus: 1, initialSync: 1})); - assert(res.initialSyncStatus, "Response should have an 'initialSyncStatus' field."); - assert.eq(res.initialSyncStatus.fetchedMissingDocs, 0); - assert.eq(res.initialSyncStatus.appliedOps, 2); - assert.eq(res.initialSyncStatus.failedInitialSyncAttempts, 0); - assert.eq(res.initialSyncStatus.maxFailedInitialSyncAttempts, 10); - assert.eq(res.initialSyncStatus.databases.databasesCloned, 1); - assert.eq(res.initialSyncStatus.databases.test.collections, 1); - assert.eq(res.initialSyncStatus.databases.test.clonedCollections, 1); - assert.eq(res.initialSyncStatus.databases.test["test.foo"].documents, 4); - assert.eq(res.initialSyncStatus.databases.test["test.foo"].indexes, 1); - assert.eq(res.initialSyncStatus.databases.test["test.foo"].fetchedBatches, 1); - - // Let initial sync finish and get into secondary state. - assert.commandWorked(secondary.getDB('admin').runCommand( - {configureFailPoint: 'initialSyncHangBeforeFinish', mode: 'off'})); - replSet.awaitSecondaryNodes(60 * 1000); - - // Test that replSetGetStatus returns the correct results after initial sync is finished. - res = assert.commandWorked(secondary.adminCommand({replSetGetStatus: 1})); - assert(!res.initialSyncStatus, - "Response should not have an 'initialSyncStatus' field: " + tojson(res)); - - res = assert.commandWorked(secondary.adminCommand({replSetGetStatus: 1, initialSync: 1})); - assert(!res.initialSyncStatus, - "Response should not have an 'initialSyncStatus' field: " + tojson(res)); - - assert.commandFailedWithCode(secondary.adminCommand({replSetGetStatus: 1, initialSync: "m"}), - ErrorCodes.TypeMismatch); -})(); diff --git a/src/mongo/db/repl/collection_cloner.cpp b/src/mongo/db/repl/collection_cloner.cpp index fa85b2b2fcc..a5bab29f76d 100644 --- a/src/mongo/db/repl/collection_cloner.cpp +++ b/src/mongo/db/repl/collection_cloner.cpp @@ -128,7 +128,6 @@ CollectionCloner::CollectionCloner(executor::TaskExecutor* executor, uassertStatusOK(options.validate()); uassert(ErrorCodes::BadValue, "callback function cannot be null", onCompletion); uassert(ErrorCodes::BadValue, "storage interface cannot be null", storageInterface); - _stats.ns = _sourceNss.ns(); } CollectionCloner::~CollectionCloner() { @@ -436,24 +435,16 @@ std::string CollectionCloner::Stats::toString() const { BSONObj CollectionCloner::Stats::toBSON() const { BSONObjBuilder bob; - bob.append("ns", ns); - append(&bob); + bob.appendNumber("documents", documents); + bob.appendNumber("indexes", indexes); + bob.appendNumber("fetchedBatches", fetchBatches); + bob.appendDate("start", start); + bob.appendDate("end", end); + auto elapsed = end - start; + long long elapsedMillis = duration_cast<Milliseconds>(elapsed).count(); + bob.appendNumber("elapsedMillis", elapsedMillis); return bob.obj(); } -void CollectionCloner::Stats::append(BSONObjBuilder* builder) const { - builder->appendNumber("documents", documents); - builder->appendNumber("indexes", indexes); - builder->appendNumber("fetchedBatches", fetchBatches); - if (start != Date_t()) { - builder->appendDate("start", start); - if (end != Date_t()) { - builder->appendDate("end", end); - auto elapsed = end - start; - long long elapsedMillis = duration_cast<Milliseconds>(elapsed).count(); - builder->appendNumber("elapsedMillis", elapsedMillis); - } - } -} } // namespace repl } // namespace mongo diff --git a/src/mongo/db/repl/collection_cloner.h b/src/mongo/db/repl/collection_cloner.h index 0f9c0bc103a..02c7d872ed9 100644 --- a/src/mongo/db/repl/collection_cloner.h +++ b/src/mongo/db/repl/collection_cloner.h @@ -61,7 +61,6 @@ class CollectionCloner : public BaseCloner { public: struct Stats { - std::string ns; Date_t start; Date_t end; size_t documents{0}; @@ -70,7 +69,6 @@ public: std::string toString() const; BSONObj toBSON() const; - void append(BSONObjBuilder* builder) const; }; /** * Type of function to schedule storage interface tasks with the executor. diff --git a/src/mongo/db/repl/data_replicator.cpp b/src/mongo/db/repl/data_replicator.cpp index d3b999521ac..d3052f667c1 100644 --- a/src/mongo/db/repl/data_replicator.cpp +++ b/src/mongo/db/repl/data_replicator.cpp @@ -60,6 +60,7 @@ #include "mongo/util/mongoutils/str.h" #include "mongo/util/scopeguard.h" #include "mongo/util/time_support.h" +#include "mongo/util/timer.h" namespace mongo { namespace repl { @@ -340,32 +341,6 @@ std::string DataReplicator::getDiagnosticString() const { return out; } -BSONObj DataReplicator::getInitialSyncProgress() const { - LockGuard lk(_mutex); - return _getInitialSyncProgress_inlock(); -} - -BSONObj DataReplicator::_getInitialSyncProgress_inlock() const { - BSONObjBuilder bob; - try { - _stats.append(&bob); - if (_initialSyncState) { - bob.appendNumber("fetchedMissingDocs", _initialSyncState->fetchedMissingDocs); - bob.appendNumber("appliedOps", _initialSyncState->appliedOps); - if (_initialSyncState->dbsCloner) { - BSONObjBuilder dbsBuilder(bob.subobjStart("databases")); - _initialSyncState->dbsCloner->getStats().append(&dbsBuilder); - dbsBuilder.doneFast(); - } - } - } catch (const DBException& e) { - bob.resetToEmpty(); - bob.append("error", e.toString()); - log() << "Error creating initial sync progress object: " << e.toString(); - } - return bob.obj(); -} - Status DataReplicator::resume(bool wait) { CBHStatus handle = _exec->scheduleWork( stdx::bind(&DataReplicator::_resumeFinish, this, stdx::placeholders::_1)); @@ -647,13 +622,13 @@ Status DataReplicator::_runInitialSyncAttempt_inlock(OperationContext* txn, StatusWith<OpTimeWithHash> DataReplicator::doInitialSync(OperationContext* txn, std::size_t maxRetries) { + Timer t; if (!txn) { std::string msg = "Initial Sync attempted but no OperationContext*, so aborting."; error() << msg; return Status{ErrorCodes::InitialSyncFailure, msg}; } UniqueLock lk(_mutex); - _stats.initialSyncStart = _exec->now(); if (_state != DataReplicatorState::Uninitialized) { if (_state == DataReplicatorState::InitialSync) return {ErrorCodes::InitialSyncActive, @@ -688,9 +663,9 @@ StatusWith<OpTimeWithHash> DataReplicator::doInitialSync(OperationContext* txn, _storage->setInitialSyncFlag(txn); lk.lock(); - _stats.maxFailedInitialSyncAttempts = maxRetries + 1; - _stats.failedInitialSyncAttempts = 0; - while (_stats.failedInitialSyncAttempts < _stats.maxFailedInitialSyncAttempts) { + const auto maxFailedAttempts = maxRetries + 1; + std::size_t failedAttempts = 0; + while (failedAttempts < maxFailedAttempts) { Status attemptErrorStatus(Status::OK()); _setState_inlock(DataReplicatorState::InitialSync); _reporterPaused = true; @@ -729,27 +704,6 @@ StatusWith<OpTimeWithHash> DataReplicator::doInitialSync(OperationContext* txn, } } - auto runTime = _initialSyncState ? _initialSyncState->timer.millis() : 0; - _stats.initialSyncAttemptInfos.emplace_back( - DataReplicator::InitialSyncAttemptInfo{runTime, attemptErrorStatus, _syncSource}); - - // If the status is ok now then initial sync is over. We must do this before we reset - // _initialSyncState and lose the DatabasesCloner's stats. - if (attemptErrorStatus.isOK()) { - _stats.initialSyncEnd = _exec->now(); - log() << "Initial Sync Statistics: " << _getInitialSyncProgress_inlock(); - if (MONGO_FAIL_POINT(initialSyncHangBeforeFinish)) { - lk.unlock(); - // This log output is used in js tests so please leave it. - log() << "initial sync - initialSyncHangBeforeFinish fail point " - "enabled. Blocking until fail point is disabled."; - while (MONGO_FAIL_POINT(initialSyncHangBeforeFinish)) { - mongo::sleepsecs(1); - } - lk.lock(); - } - } - // Cleanup _cancelAllHandles_inlock(); _waitOnAndResetAll_inlock(&lk); @@ -759,22 +713,19 @@ StatusWith<OpTimeWithHash> DataReplicator::doInitialSync(OperationContext* txn, break; } - ++_stats.failedInitialSyncAttempts; + ++failedAttempts; error() << "Initial sync attempt failed -- attempts left: " - << (_stats.maxFailedInitialSyncAttempts - _stats.failedInitialSyncAttempts) - << " cause: " << attemptErrorStatus; + << (maxFailedAttempts - failedAttempts) << " cause: " << attemptErrorStatus; // Check if need to do more retries. - if (_stats.failedInitialSyncAttempts >= _stats.maxFailedInitialSyncAttempts) { + if (failedAttempts >= maxFailedAttempts) { const std::string err = "The maximum number of retries" " have been exhausted for initial sync."; severe() << err; _setState_inlock(DataReplicatorState::Uninitialized); - _stats.initialSyncEnd = _exec->now(); - log() << "Initial Sync Statistics: " << _getInitialSyncProgress_inlock(); return attemptErrorStatus; } @@ -784,6 +735,16 @@ StatusWith<OpTimeWithHash> DataReplicator::doInitialSync(OperationContext* txn, lk.lock(); } + if (MONGO_FAIL_POINT(initialSyncHangBeforeFinish)) { + lk.unlock(); + // This log output is used in js tests so please leave it. + log() << "initial sync - initialSyncHangBeforeFinish fail point " + "enabled. Blocking until fail point is disabled."; + while (MONGO_FAIL_POINT(initialSyncHangBeforeFinish)) { + mongo::sleepsecs(1); + } + lk.lock(); + } _reporterPaused = false; _fetcherPaused = false; _applierPaused = false; @@ -794,8 +755,7 @@ StatusWith<OpTimeWithHash> DataReplicator::doInitialSync(OperationContext* txn, _storage->clearInitialSyncFlag(txn); _storage->setMinValid(txn, _lastApplied.opTime, DurableRequirement::Strong); _opts.setMyLastOptime(_lastApplied.opTime); - log() << "initial sync done; took " << _stats.initialSyncEnd - _stats.initialSyncStart - << " milliseconds."; + log() << "initial sync done; took " << t.millis() << " milliseconds."; return _lastApplied; } @@ -1492,50 +1452,5 @@ void DataReplicator::_rollbackOperations(const CallbackArgs& cbData) { _doNextActions(); }; -std::string DataReplicator::Stats::toString() const { - return toBSON().toString(); -} - -BSONObj DataReplicator::Stats::toBSON() const { - BSONObjBuilder bob; - append(&bob); - return bob.obj(); -} - -void DataReplicator::Stats::append(BSONObjBuilder* builder) const { - builder->appendNumber("failedInitialSyncAttempts", failedInitialSyncAttempts); - builder->appendNumber("maxFailedInitialSyncAttempts", maxFailedInitialSyncAttempts); - if (initialSyncStart != Date_t()) { - builder->appendDate("initialSyncStart", initialSyncStart); - if (initialSyncEnd != Date_t()) { - builder->appendDate("initialSyncEnd", initialSyncEnd); - auto elapsed = initialSyncEnd - initialSyncStart; - long long elapsedMillis = duration_cast<Milliseconds>(elapsed).count(); - builder->appendNumber("initialSyncElapsedMillis", elapsedMillis); - } - } - BSONArrayBuilder arrBuilder(builder->subarrayStart("initialSyncAttempts")); - for (unsigned int i = 0; i < initialSyncAttemptInfos.size(); ++i) { - arrBuilder.append(initialSyncAttemptInfos[i].toBSON()); - } - arrBuilder.doneFast(); -} - -std::string DataReplicator::InitialSyncAttemptInfo::toString() const { - return toBSON().toString(); -} - -BSONObj DataReplicator::InitialSyncAttemptInfo::toBSON() const { - BSONObjBuilder bob; - append(&bob); - return bob.obj(); -} - -void DataReplicator::InitialSyncAttemptInfo::append(BSONObjBuilder* builder) const { - builder->appendNumber("durationMillis", durationMillis); - builder->append("status", status.toString()); - builder->append("syncSource", syncSource.toString()); -} - } // namespace repl } // namespace mongo diff --git a/src/mongo/db/repl/data_replicator.h b/src/mongo/db/repl/data_replicator.h index 17e2bc0e110..568a5d23944 100644 --- a/src/mongo/db/repl/data_replicator.h +++ b/src/mongo/db/repl/data_replicator.h @@ -178,28 +178,6 @@ struct DataReplicatorOptions { */ class DataReplicator { public: - struct InitialSyncAttemptInfo { - int durationMillis; - Status status; - HostAndPort syncSource; - - std::string toString() const; - BSONObj toBSON() const; - void append(BSONObjBuilder* builder) const; - }; - - struct Stats { - size_t failedInitialSyncAttempts; - size_t maxFailedInitialSyncAttempts; - Date_t initialSyncStart; - Date_t initialSyncEnd; - std::vector<DataReplicator::InitialSyncAttemptInfo> initialSyncAttemptInfos; - - std::string toString() const; - BSONObj toBSON() const; - void append(BSONObjBuilder* builder) const; - }; - DataReplicator(DataReplicatorOptions opts, std::unique_ptr<DataReplicatorExternalState> dataReplicatorExternalState, StorageInterface* storage); @@ -264,12 +242,6 @@ public: std::string getDiagnosticString() const; - /** - * Returns stats about the progress of initial sync. If initial sync is not in progress it - * returns summary statistics for what occurred during initial sync. - */ - BSONObj getInitialSyncProgress() const; - // For testing only void _resetState_inlock(OperationContext* txn, OpTimeWithHash lastAppliedOpTime); @@ -311,8 +283,6 @@ private: void _doNextActions_Rollback_inlock(); void _doNextActions_Steady_inlock(); - BSONObj _getInitialSyncProgress_inlock() const; - // Applies up till the specified Timestamp and pauses automatic application Timestamp _applyUntilAndPause(Timestamp); Timestamp _applyUntil(Timestamp); @@ -378,7 +348,6 @@ private: Event _onShutdown; // (M) Timestamp _rollbackCommonOptime; // (MX) CollectionCloner::ScheduleDbWorkFn _scheduleDbWorkFn; // (M) - Stats _stats; // (M) }; } // namespace repl diff --git a/src/mongo/db/repl/data_replicator_test.cpp b/src/mongo/db/repl/data_replicator_test.cpp index 6d50bb97613..1625f864db7 100644 --- a/src/mongo/db/repl/data_replicator_test.cpp +++ b/src/mongo/db/repl/data_replicator_test.cpp @@ -464,10 +464,6 @@ public: _condVar.wait(lk); } - BSONObj getInitialSyncProgress() { - return _dr->getInitialSyncProgress(); - } - private: void _run() { setThreadName("InitialSyncRunner"); @@ -675,10 +671,6 @@ protected: ASSERT_EQ(_isbr->getResult(net).getStatus().code(), code) << "status codes differ"; } - BSONObj getInitialSyncProgress() { - return _isbr->getInitialSyncProgress(); - } - // Generate at least one getMore response. std::size_t numGetMoreOplogEntries = 0; std::size_t numGetMoreOplogEntriesMax = 1; @@ -1245,194 +1237,6 @@ TEST_F(InitialSyncTest, InitialSyncStateIsResetAfterFailure) { verifySync(getNet(), ErrorCodes::UnrecoverableRollbackError); } -TEST_F(InitialSyncTest, GetInitialSyncProgressReturnsCorrectProgress) { - const Responses failedResponses = { - {"replSetGetRBID", fromjson(str::stream() << "{ok: 1, rbid:1}")}, - // get latest oplog ts - {"find", - fromjson( - str::stream() << "{ok:1, cursor:{id:NumberLong(0), ns:'local.oplog.rs', firstBatch:[" - "{ts:Timestamp(1,1), h:NumberLong(1), ns:'a.a', v:" - << OplogEntry::kOplogVersion - << ", op:'i', o:{_id:1, a:1}}]}}")}, - // oplog fetcher find - {"find", - fromjson( - str::stream() << "{ok:1, cursor:{id:NumberLong(1), ns:'local.oplog.rs', firstBatch:[" - "{ts:Timestamp(1,1), h:NumberLong(1), ns:'a.a', v:" - << OplogEntry::kOplogVersion - << ", op:'i', o:{_id:1, a:1}}]}}")}, - // Clone Start - // listDatabases - {"listDatabases", - fromjson("{ok:0, errmsg:'fail on clone -- listDBs injected failure', code:9}")}, - // rollback checker. - {"replSetGetRBID", fromjson(str::stream() << "{ok: 1, rbid:1}")}, - }; - - const Responses successfulResponses = - { - {"replSetGetRBID", fromjson(str::stream() << "{ok: 1, rbid:1}")}, - // get latest oplog ts - {"find", - fromjson(str::stream() - << "{ok:1, cursor:{id:NumberLong(0), ns:'local.oplog.rs', firstBatch:[" - "{ts:Timestamp(1,1), h:NumberLong(1), ns:'a.a', v:" - << OplogEntry::kOplogVersion - << ", op:'i', o:{_id:1, a:1}}]}}")}, - // oplog fetcher find - {"find", - fromjson(str::stream() - << "{ok:1, cursor:{id:NumberLong(1), ns:'local.oplog.rs', firstBatch:[" - "{ts:Timestamp(1,1), h:NumberLong(1), ns:'a.a', v:" - << OplogEntry::kOplogVersion - << ", op:'i', o:{_id:1, a:1}}]}}")}, - // Clone Start - // listDatabases - {"listDatabases", fromjson("{ok:1, databases:[{name:'a'}]}")}, - // listCollections for "a" - {"listCollections", - fromjson("{ok:1, cursor:{id:NumberLong(0), ns:'a.$cmd.listCollections', firstBatch:[" - "{name:'a', options:{}} " - "]}}")}, - // listIndexes:a - {"listIndexes", - fromjson(str::stream() - << "{ok:1, cursor:{id:NumberLong(0), ns:'a.$cmd.listIndexes.a', firstBatch:[" - "{v:" - << OplogEntry::kOplogVersion - << ", key:{_id:1}, name:'_id_', ns:'a.a'}]}}")}, - // find:a - {"find", - fromjson("{ok:1, cursor:{id:NumberLong(0), ns:'a.a', firstBatch:[" - "{_id:1, a:1} " - "]}}")}, - // Clone Done - // get latest oplog ts - {"find", - fromjson(str::stream() - << "{ok:1, cursor:{id:NumberLong(0), ns:'local.oplog.rs', firstBatch:[" - "{ts:Timestamp(7,1), h:NumberLong(1), ns:'a.a', v:" - << OplogEntry::kOplogVersion - << ", op:'i', o:{_id:5, a:2}}]}}")}, - {"replSetGetRBID", fromjson(str::stream() << "{ok: 1, rbid:1}")}, - // Applier starts ... - }; - - startSync(1); - - BSONObj progress = getInitialSyncProgress(); - ASSERT_EQUALS(progress.nFields(), 4); - ASSERT_EQUALS(progress.getIntField("failedInitialSyncAttempts"), 0); - ASSERT_EQUALS(progress.getIntField("maxFailedInitialSyncAttempts"), 2); - ASSERT_EQUALS(progress["initialSyncStart"].type(), Date); - ASSERT_EQUALS(progress.getObjectField("initialSyncAttempts"), BSONObj()); - - // Play first response to ensure data replicator has entered initial sync state. - setResponses({failedResponses.begin(), failedResponses.begin() + 1}); - numGetMoreOplogEntriesMax = 7; - playResponses(false); - log() << "Done playing first failed response"; - - progress = getInitialSyncProgress(); - ASSERT_EQUALS(progress.nFields(), 7); - ASSERT_EQUALS(progress.getIntField("failedInitialSyncAttempts"), 0); - ASSERT_EQUALS(progress.getIntField("maxFailedInitialSyncAttempts"), 2); - ASSERT_EQUALS(progress["initialSyncStart"].type(), Date); - ASSERT_EQUALS(progress.getObjectField("initialSyncAttempts"), BSONObj()); - ASSERT_EQUALS(progress.getIntField("fetchedMissingDocs"), 0); - ASSERT_EQUALS(progress.getIntField("appliedOps"), 0); - ASSERT_EQUALS(progress.getObjectField("databases"), BSON("databasesCloned" << 0)); - - // Play rest of the failed round of responses. - setResponses({failedResponses.begin() + 1, failedResponses.end()}); - playResponses(false); - log() << "Done playing failed responses"; - - // Play the first response of the successful round of responses. - setResponses({successfulResponses.begin(), successfulResponses.begin() + 1}); - playResponses(false); - log() << "Done playing first successful response"; - - progress = getInitialSyncProgress(); - ASSERT_EQUALS(progress.nFields(), 7); - ASSERT_EQUALS(progress.getIntField("failedInitialSyncAttempts"), 1); - ASSERT_EQUALS(progress.getIntField("maxFailedInitialSyncAttempts"), 2); - ASSERT_EQUALS(progress["initialSyncStart"].type(), Date); - ASSERT_EQUALS(progress.getIntField("fetchedMissingDocs"), 0); - ASSERT_EQUALS(progress.getIntField("appliedOps"), 0); - ASSERT_EQUALS(progress.getObjectField("databases"), BSON("databasesCloned" << 0)); - - BSONObj attempts = progress["initialSyncAttempts"].Obj(); - ASSERT_EQUALS(attempts.nFields(), 1); - BSONObj attempt0 = attempts["0"].Obj(); - ASSERT_EQUALS(attempt0.nFields(), 3); - ASSERT_EQUALS(attempt0.getStringField("status"), - std::string("FailedToParse: fail on clone -- listDBs injected failure")); - ASSERT_EQUALS(attempt0["durationMillis"].type(), NumberInt); - ASSERT_EQUALS(attempt0.getStringField("syncSource"), std::string("localhost:27017")); - - // Play all but last of the successful round of responses. - setResponses({successfulResponses.begin() + 1, successfulResponses.end() - 1}); - playResponses(false); - log() << "Done playing all but last successful response"; - - progress = getInitialSyncProgress(); - ASSERT_EQUALS(progress.nFields(), 7); - ASSERT_EQUALS(progress.getIntField("failedInitialSyncAttempts"), 1); - ASSERT_EQUALS(progress.getIntField("maxFailedInitialSyncAttempts"), 2); - ASSERT_EQUALS(progress["initialSyncStart"].type(), Date); - ASSERT_EQUALS(progress.getIntField("fetchedMissingDocs"), 0); - ASSERT_EQUALS(progress.getIntField("appliedOps"), 4); - ASSERT_EQUALS(progress.getObjectField("databases"), - fromjson(str::stream() << "{databasesCloned: 1, a: {collections: 1, " - "clonedCollections: 1, start: new Date(1406851200000), " - "end: new Date(1406851200000), elapsedMillis: 0, " - "'a.a': {documents: 1, indexes: 1, fetchedBatches: 1, " - "start: new Date(1406851200000), end: new " - "Date(1406851200000), elapsedMillis: 0}}}")); - - attempts = progress["initialSyncAttempts"].Obj(); - ASSERT_EQUALS(attempts.nFields(), 1); - attempt0 = attempts["0"].Obj(); - ASSERT_EQUALS(attempt0.nFields(), 3); - ASSERT_EQUALS(attempt0.getStringField("status"), - std::string("FailedToParse: fail on clone -- listDBs injected failure")); - ASSERT_EQUALS(attempt0["durationMillis"].type(), NumberInt); - ASSERT_EQUALS(attempt0.getStringField("syncSource"), std::string("localhost:27017")); - - // Play last successful response. - setResponses({successfulResponses.end() - 1, successfulResponses.end()}); - playResponses(true); - - log() << "waiting for initial sync to verify it completed OK"; - verifySync(getNet()); - - progress = getInitialSyncProgress(); - ASSERT_EQUALS(progress.nFields(), 6); - ASSERT_EQUALS(progress.getIntField("failedInitialSyncAttempts"), 1); - ASSERT_EQUALS(progress.getIntField("maxFailedInitialSyncAttempts"), 2); - ASSERT_EQUALS(progress["initialSyncStart"].type(), Date); - ASSERT_EQUALS(progress["initialSyncEnd"].type(), Date); - ASSERT_EQUALS(progress["initialSyncElapsedMillis"].type(), NumberInt); - - attempts = progress["initialSyncAttempts"].Obj(); - ASSERT_EQUALS(attempts.nFields(), 2); - - attempt0 = attempts["0"].Obj(); - ASSERT_EQUALS(attempt0.nFields(), 3); - ASSERT_EQUALS(attempt0.getStringField("status"), - std::string("FailedToParse: fail on clone -- listDBs injected failure")); - ASSERT_EQUALS(attempt0["durationMillis"].type(), NumberInt); - ASSERT_EQUALS(attempt0.getStringField("syncSource"), std::string("localhost:27017")); - - BSONObj attempt1 = attempts["1"].Obj(); - ASSERT_EQUALS(attempt1.nFields(), 3); - ASSERT_EQUALS(attempt1.getStringField("status"), std::string("OK")); - ASSERT_EQUALS(attempt1["durationMillis"].type(), NumberInt); - ASSERT_EQUALS(attempt1.getStringField("syncSource"), std::string("localhost:27017")); -} - class TestSyncSourceSelector2 : public SyncSourceSelector { diff --git a/src/mongo/db/repl/database_cloner.cpp b/src/mongo/db/repl/database_cloner.cpp index baf4eeb4fce..8888b958fba 100644 --- a/src/mongo/db/repl/database_cloner.cpp +++ b/src/mongo/db/repl/database_cloner.cpp @@ -126,8 +126,6 @@ DatabaseCloner::DatabaseCloner(executor::TaskExecutor* executor, uassert(ErrorCodes::BadValue, "storage interface cannot be null", si); uassert(ErrorCodes::BadValue, "collection callback function cannot be null", collWork); uassert(ErrorCodes::BadValue, "callback function cannot be null", onCompletion); - - _stats.dbname = _dbname; } DatabaseCloner::~DatabaseCloner() { @@ -196,12 +194,8 @@ void DatabaseCloner::shutdown() { } DatabaseCloner::Stats DatabaseCloner::getStats() const { - LockGuard lk(_mutex); - DatabaseCloner::Stats stats = _stats; - for (auto&& collectionCloner : _collectionCloners) { - stats.collectionStats.emplace_back(collectionCloner.getStats()); - } - return stats; + stdx::unique_lock<stdx::mutex> lk(_mutex); + return _stats; } void DatabaseCloner::join() { @@ -240,11 +234,11 @@ void DatabaseCloner::_listCollectionsCallback(const StatusWith<Fetcher::QueryRes UniqueLock lk(_mutex); // We may be called with multiple batches leading to a need to grow _collectionInfos. _collectionInfos.reserve(_collectionInfos.size() + documents.size()); + _stats.collections += documents.size(); std::copy_if(documents.begin(), documents.end(), std::back_inserter(_collectionInfos), _listCollectionsPredicate); - _stats.collections += _collectionInfos.size(); // The fetcher will continue to call with kGetMore until an error or the last batch. if (*nextAction == Fetcher::NextAction::kGetMore) { @@ -420,9 +414,6 @@ void DatabaseCloner::_finishCallback_inlock(UniqueLock& lk, const Status& status _finishCallback(status); } -std::string DatabaseCloner::getDBName() const { - return _dbname; -} std::string DatabaseCloner::Stats::toString() const { return toBSON().toString(); @@ -430,30 +421,15 @@ std::string DatabaseCloner::Stats::toString() const { BSONObj DatabaseCloner::Stats::toBSON() const { BSONObjBuilder bob; - bob.append("dbname", dbname); - append(&bob); + bob.appendNumber("collections", collections); + bob.appendNumber("clonedCollections", clonedCollections); + bob.appendDate("start", start); + bob.appendDate("end", end); + auto elapsed = end - start; + long long elapsedMillis = duration_cast<Milliseconds>(elapsed).count(); + bob.appendNumber("elapsedMillis", elapsedMillis); return bob.obj(); } -void DatabaseCloner::Stats::append(BSONObjBuilder* builder) const { - builder->appendNumber("collections", collections); - builder->appendNumber("clonedCollections", clonedCollections); - if (start != Date_t()) { - builder->appendDate("start", start); - if (end != Date_t()) { - builder->appendDate("end", end); - auto elapsed = end - start; - long long elapsedMillis = duration_cast<Milliseconds>(elapsed).count(); - builder->appendNumber("elapsedMillis", elapsedMillis); - } - } - - for (auto&& collection : collectionStats) { - BSONObjBuilder collectionBuilder(builder->subobjStart(collection.ns)); - collection.append(&collectionBuilder); - collectionBuilder.doneFast(); - } -} - } // namespace repl } // namespace mongo diff --git a/src/mongo/db/repl/database_cloner.h b/src/mongo/db/repl/database_cloner.h index d89bcea8b3e..c5f3996b8c2 100644 --- a/src/mongo/db/repl/database_cloner.h +++ b/src/mongo/db/repl/database_cloner.h @@ -62,16 +62,13 @@ class DatabaseCloner : public BaseCloner { public: struct Stats { - std::string dbname; Date_t start; Date_t end; size_t collections{0}; size_t clonedCollections{0}; - std::vector<CollectionCloner::Stats> collectionStats; std::string toString() const; BSONObj toBSON() const; - void append(BSONObjBuilder* builder) const; }; /** @@ -141,8 +138,6 @@ public: DatabaseCloner::Stats getStats() const; - std::string getDBName() const; - // // Testing only functions below. // diff --git a/src/mongo/db/repl/databases_cloner.cpp b/src/mongo/db/repl/databases_cloner.cpp index f92ca3c9215..d4823608fee 100644 --- a/src/mongo/db/repl/databases_cloner.cpp +++ b/src/mongo/db/repl/databases_cloner.cpp @@ -90,11 +90,10 @@ DatabasesCloner::~DatabasesCloner() { } std::string DatabasesCloner::toString() const { - LockGuard lk(_mutex); return str::stream() << "initial sync --" << " active:" << _active << " status:" << _status.toString() << " source:" << _source.toString() - << " db cloners completed:" << _stats.databasesCloned + << " db cloners completed:" << _currentClonerIndex << " db count:" << _databaseCloners.size(); } @@ -137,34 +136,6 @@ Status DatabasesCloner::getStatus() { return _status; } -DatabasesCloner::Stats DatabasesCloner::getStats() const { - LockGuard lk(_mutex); - DatabasesCloner::Stats stats = _stats; - for (auto&& databaseCloner : _databaseCloners) { - stats.databaseStats.emplace_back(databaseCloner->getStats()); - } - return stats; -} - -std::string DatabasesCloner::Stats::toString() const { - return toBSON().toString(); -} - -BSONObj DatabasesCloner::Stats::toBSON() const { - BSONObjBuilder bob; - append(&bob); - return bob.obj(); -} - -void DatabasesCloner::Stats::append(BSONObjBuilder* builder) const { - builder->appendNumber("databasesCloned", databasesCloned); - for (auto&& db : databaseStats) { - BSONObjBuilder dbBuilder(builder->subobjStart(db.dbname)); - db.append(&dbBuilder); - dbBuilder.doneFast(); - } -} - Status DatabasesCloner::startup() { UniqueLock lk(_mutex); invariant(!_active); @@ -320,7 +291,7 @@ RemoteCommandRetryScheduler* DatabasesCloner::_getListDatabasesScheduler() const void DatabasesCloner::_onEachDBCloneFinish(const Status& status, const std::string& name) { UniqueLock lk(_mutex); if (!status.isOK()) { - warning() << "database '" << name << "' (" << (_stats.databasesCloned + 1) << " of " + warning() << "database '" << name << "' (" << (_currentClonerIndex + 1) << " of " << _databaseCloners.size() << ") clone failed due to " << status.toString(); _setStatus_inlock(status); _failed_inlock(lk); @@ -349,9 +320,9 @@ void DatabasesCloner::_onEachDBCloneFinish(const Status& status, const std::stri } } - _stats.databasesCloned++; + _currentClonerIndex++; - if (_stats.databasesCloned == _databaseCloners.size()) { + if (_currentClonerIndex == _databaseCloners.size()) { _active = false; // All cloners are done, trigger event. LOG(2) << "All database clones finished, calling _finishFn."; @@ -361,12 +332,11 @@ void DatabasesCloner::_onEachDBCloneFinish(const Status& status, const std::stri } // Start next database cloner. - auto&& dbCloner = _databaseCloners[_stats.databasesCloned]; + auto&& dbCloner = _databaseCloners[_currentClonerIndex]; auto startStatus = dbCloner->startup(); if (!startStatus.isOK()) { - warning() << "failed to schedule database '" << name << "' (" - << (_stats.databasesCloned + 1) << " of " << _databaseCloners.size() - << ") due to " << startStatus.toString(); + warning() << "failed to schedule database '" << name << "' (" << (_currentClonerIndex + 1) + << " of " << _databaseCloners.size() << ") due to " << startStatus.toString(); _setStatus_inlock(startStatus); _failed_inlock(lk); return; diff --git a/src/mongo/db/repl/databases_cloner.h b/src/mongo/db/repl/databases_cloner.h index 4bfe44b1c16..170ba2b7489 100644 --- a/src/mongo/db/repl/databases_cloner.h +++ b/src/mongo/db/repl/databases_cloner.h @@ -63,15 +63,6 @@ using UniqueLock = stdx::unique_lock<stdx::mutex>; */ class DatabasesCloner { public: - struct Stats { - size_t databasesCloned = 0U; - std::vector<DatabaseCloner::Stats> databaseStats; - - std::string toString() const; - BSONObj toBSON() const; - void append(BSONObjBuilder* builder) const; - }; - using IncludeDbFilterFn = stdx::function<bool(const BSONObj& dbInfo)>; using OnFinishFn = stdx::function<void(const Status&)>; DatabasesCloner(StorageInterface* si, @@ -87,7 +78,6 @@ public: bool isActive(); void join(); void shutdown(); - DatabasesCloner::Stats getStats() const; /** * Returns the status after completion. If multiple error occur, only one is recorded/returned. @@ -143,9 +133,10 @@ private: mutable stdx::mutex _mutex; // (S) Status _status{ErrorCodes::NotYetInitialized, ""}; // (M) If it is not OK, we stop everything. executor::TaskExecutor* _exec; // (R) executor to schedule things with - OldThreadPool* _dbWorkThreadPool; // (R) db worker thread pool for collection cloning. - HostAndPort _source; // (R) The source to use, until we get an error - bool _active = false; // (M) false until we start + OldThreadPool* _dbWorkThreadPool; // (R) db worker thread pool for collection cloning. + HostAndPort _source; // (R) The source to use, until we get an error + bool _active = false; // (M) false until we start + std::size_t _currentClonerIndex = 0U; // (M) Index of currently active database cloner. CollectionCloner::ScheduleDbWorkFn _scheduleDbWorkFn; // (M) const IncludeDbFilterFn _includeDbFn; // (R) function which decides which dbs are cloned. @@ -154,7 +145,6 @@ private: std::unique_ptr<RemoteCommandRetryScheduler> _listDBsScheduler; // (M) scheduler for listDBs. std::vector<std::shared_ptr<DatabaseCloner>> _databaseCloners; // (M) database cloners by name - Stats _stats; // (M) }; diff --git a/src/mongo/db/repl/initial_sync_state.h b/src/mongo/db/repl/initial_sync_state.h index cb607824171..5d014ece0f2 100644 --- a/src/mongo/db/repl/initial_sync_state.h +++ b/src/mongo/db/repl/initial_sync_state.h @@ -58,7 +58,6 @@ struct InitialSyncState { Timestamp stopTimestamp; // Referred to as minvalid, or the place we can transition states. Event finishEvent; // event fired on completion, either successful or not. Status status; // final status, only valid after the finishEvent fires. - Timer timer; // Timer for timing how long each initial sync attempt takes. size_t fetchedMissingDocs = 0; size_t appliedOps = 0; }; diff --git a/src/mongo/db/repl/replication_coordinator.h b/src/mongo/db/repl/replication_coordinator.h index b0d699d075b..af164c0d4d8 100644 --- a/src/mongo/db/repl/replication_coordinator.h +++ b/src/mongo/db/repl/replication_coordinator.h @@ -440,14 +440,10 @@ public: virtual StatusWith<BSONObj> prepareReplSetUpdatePositionCommand( ReplSetUpdatePositionCommandStyle commandStyle) const = 0; - enum class ReplSetGetStatusResponseStyle { kBasic, kInitialSync }; - /** - * Handles an incoming replSetGetStatus command. Adds BSON to 'result'. If kInitialSync is - * requested but initial sync is not running, kBasic will be used. + * Handles an incoming replSetGetStatus command. Adds BSON to 'result'. */ - virtual Status processReplSetGetStatus(BSONObjBuilder* result, - ReplSetGetStatusResponseStyle responseStyle) = 0; + virtual Status processReplSetGetStatus(BSONObjBuilder* result) = 0; /** * Does an initial sync of data, after dropping existing data. diff --git a/src/mongo/db/repl/replication_coordinator_impl.cpp b/src/mongo/db/repl/replication_coordinator_impl.cpp index 393e85b8850..f8d95b157be 100644 --- a/src/mongo/db/repl/replication_coordinator_impl.cpp +++ b/src/mongo/db/repl/replication_coordinator_impl.cpp @@ -2071,17 +2071,7 @@ StatusWith<BSONObj> ReplicationCoordinatorImpl::prepareReplSetUpdatePositionComm return cmdBuilder.obj(); } -Status ReplicationCoordinatorImpl::processReplSetGetStatus( - BSONObjBuilder* response, ReplSetGetStatusResponseStyle responseStyle) { - - BSONObj initialSyncProgress; - if (responseStyle == ReplSetGetStatusResponseStyle::kInitialSync) { - LockGuard lk(_mutex); - if (_dr) { - initialSyncProgress = _dr->getInitialSyncProgress(); - } - } - +Status ReplicationCoordinatorImpl::processReplSetGetStatus(BSONObjBuilder* response) { LockGuard topoLock(_topoMutex); Status result(ErrorCodes::InternalError, "didn't set status in prepareStatusResponse"); @@ -2092,8 +2082,7 @@ Status ReplicationCoordinatorImpl::processReplSetGetStatus( getMyLastAppliedOpTime(), getMyLastDurableOpTime(), getLastCommittedOpTime(), - getCurrentCommittedSnapshotOpTime(), - initialSyncProgress}, + getCurrentCommittedSnapshotOpTime()}, response, &result); return result; diff --git a/src/mongo/db/repl/replication_coordinator_impl.h b/src/mongo/db/repl/replication_coordinator_impl.h index a2361cccbbb..5087898b260 100644 --- a/src/mongo/db/repl/replication_coordinator_impl.h +++ b/src/mongo/db/repl/replication_coordinator_impl.h @@ -212,8 +212,7 @@ public: virtual StatusWith<BSONObj> prepareReplSetUpdatePositionCommand( ReplSetUpdatePositionCommandStyle commandStyle) const override; - virtual Status processReplSetGetStatus(BSONObjBuilder* result, - ReplSetGetStatusResponseStyle responseStyle) override; + virtual Status processReplSetGetStatus(BSONObjBuilder* result) override; virtual void fillIsMasterForReplSet(IsMasterResponse* result) override; @@ -1323,7 +1322,7 @@ private: // Storage interface used by data replicator. StorageInterface* _storage; // (PS) // Data Replicator used to replicate data - std::unique_ptr<DataReplicator> _dr; // (M) + std::unique_ptr<DataReplicator> _dr; // (S) // Hands out the next snapshot name. AtomicUInt64 _snapshotNameGenerator; // (S) diff --git a/src/mongo/db/repl/replication_coordinator_impl_heartbeat_v1_test.cpp b/src/mongo/db/repl/replication_coordinator_impl_heartbeat_v1_test.cpp index f9d12233c3f..2290786e343 100644 --- a/src/mongo/db/repl/replication_coordinator_impl_heartbeat_v1_test.cpp +++ b/src/mongo/db/repl/replication_coordinator_impl_heartbeat_v1_test.cpp @@ -447,8 +447,7 @@ TEST_F(ReplCoordHBV1Test, IgnoreTheContentsOfMetadataWhenItsReplicaSetIdDoesNotM ASSERT_NOT_EQUALS(opTime.getTerm(), getTopoCoord().getTerm()); BSONObjBuilder statusBuilder; - ASSERT_OK(getReplCoord()->processReplSetGetStatus( - &statusBuilder, ReplicationCoordinator::ReplSetGetStatusResponseStyle::kBasic)); + ASSERT_OK(getReplCoord()->processReplSetGetStatus(&statusBuilder)); auto statusObj = statusBuilder.obj(); unittest::log() << "replica set status = " << statusObj; diff --git a/src/mongo/db/repl/replication_coordinator_mock.cpp b/src/mongo/db/repl/replication_coordinator_mock.cpp index 0d9b6747aad..f1c884fc2f0 100644 --- a/src/mongo/db/repl/replication_coordinator_mock.cpp +++ b/src/mongo/db/repl/replication_coordinator_mock.cpp @@ -249,8 +249,7 @@ void ReplicationCoordinatorMock::processReplSetMetadata(const rpc::ReplSetMetada void ReplicationCoordinatorMock::cancelAndRescheduleElectionTimeout() {} -Status ReplicationCoordinatorMock::processReplSetGetStatus(BSONObjBuilder*, - ReplSetGetStatusResponseStyle) { +Status ReplicationCoordinatorMock::processReplSetGetStatus(BSONObjBuilder* result) { return Status::OK(); } diff --git a/src/mongo/db/repl/replication_coordinator_mock.h b/src/mongo/db/repl/replication_coordinator_mock.h index 287ca6e8e57..c079843d3e3 100644 --- a/src/mongo/db/repl/replication_coordinator_mock.h +++ b/src/mongo/db/repl/replication_coordinator_mock.h @@ -143,7 +143,7 @@ public: virtual StatusWith<BSONObj> prepareReplSetUpdatePositionCommand( ReplSetUpdatePositionCommandStyle commandStyle) const override; - virtual Status processReplSetGetStatus(BSONObjBuilder*, ReplSetGetStatusResponseStyle); + virtual Status processReplSetGetStatus(BSONObjBuilder* result); virtual void fillIsMasterForReplSet(IsMasterResponse* result); diff --git a/src/mongo/db/repl/replset_commands.cpp b/src/mongo/db/repl/replset_commands.cpp index 54a482fdd8e..7011b1e9b9e 100644 --- a/src/mongo/db/repl/replset_commands.cpp +++ b/src/mongo/db/repl/replset_commands.cpp @@ -201,18 +201,7 @@ public: if (!status.isOK()) return appendCommandStatus(result, status); - bool includeInitialSync = false; - Status initialSyncStatus = - bsonExtractBooleanFieldWithDefault(cmdObj, "initialSync", false, &includeInitialSync); - if (!initialSyncStatus.isOK()) { - return appendCommandStatus(result, initialSyncStatus); - } - - auto responseStyle = ReplicationCoordinator::ReplSetGetStatusResponseStyle::kBasic; - if (includeInitialSync) { - responseStyle = ReplicationCoordinator::ReplSetGetStatusResponseStyle::kInitialSync; - } - status = getGlobalReplicationCoordinator()->processReplSetGetStatus(&result, responseStyle); + status = getGlobalReplicationCoordinator()->processReplSetGetStatus(&result); return appendCommandStatus(result, status); } diff --git a/src/mongo/db/repl/topology_coordinator.h b/src/mongo/db/repl/topology_coordinator.h index 82427211e1b..72c21024684 100644 --- a/src/mongo/db/repl/topology_coordinator.h +++ b/src/mongo/db/repl/topology_coordinator.h @@ -249,7 +249,6 @@ public: const OpTime& lastOpDurable; const OpTime& lastCommittedOpTime; const OpTime& readConcernMajorityOpTime; - const BSONObj& initialSyncStatus; }; // produce a reply to a status request diff --git a/src/mongo/db/repl/topology_coordinator_impl.cpp b/src/mongo/db/repl/topology_coordinator_impl.cpp index b5be182acbc..d4f591e92f9 100644 --- a/src/mongo/db/repl/topology_coordinator_impl.cpp +++ b/src/mongo/db/repl/topology_coordinator_impl.cpp @@ -1513,7 +1513,6 @@ void TopologyCoordinatorImpl::prepareStatusResponse(const ReplSetStatusArgs& rsS const Date_t now = rsStatusArgs.now; const OpTime& lastOpApplied = rsStatusArgs.lastOpApplied; const OpTime& lastOpDurable = rsStatusArgs.lastOpDurable; - const BSONObj& initialSyncStatus = rsStatusArgs.initialSyncStatus; if (_selfIndex == -1) { // We're REMOVED or have an invalid config @@ -1666,9 +1665,6 @@ void TopologyCoordinatorImpl::prepareStatusResponse(const ReplSetStatusArgs& rsS appendOpTime(&optimes, "durableOpTime", lastOpDurable, _rsConfig.getProtocolVersion()); response->append("optimes", optimes.obj()); - if (!initialSyncStatus.isEmpty()) { - response->append("initialSyncStatus", initialSyncStatus); - } response->append("members", membersOut); *result = Status::OK(); diff --git a/src/mongo/db/repl/topology_coordinator_impl_test.cpp b/src/mongo/db/repl/topology_coordinator_impl_test.cpp index ef019e242ea..ada5a794c9c 100644 --- a/src/mongo/db/repl/topology_coordinator_impl_test.cpp +++ b/src/mongo/db/repl/topology_coordinator_impl_test.cpp @@ -1502,8 +1502,7 @@ TEST_F(TopoCoordTest, ReplSetGetStatus) { oplogProgress, oplogDurable, lastCommittedOpTime, - readConcernMajorityOpTime, - BSONObj()}, + readConcernMajorityOpTime}, &statusBuilder, &resultStatus); ASSERT_OK(resultStatus); @@ -1583,7 +1582,6 @@ TEST_F(TopoCoordTest, ReplSetGetStatus) { ASSERT_TRUE(selfStatus.hasField("optimeDate")); ASSERT_EQUALS(Date_t::fromMillisSinceEpoch(oplogProgress.getSecs() * 1000ULL), selfStatus["optimeDate"].Date()); - ASSERT_FALSE(rsStatus.hasField("initialSyncStatus")); ASSERT_EQUALS(2000, rsStatus["heartbeatIntervalMillis"].numberInt()); @@ -1619,8 +1617,7 @@ TEST_F(TopoCoordTest, NodeReturnsInvalidReplicaSetConfigInResponseToGetStatusWhe oplogProgress, oplogProgress, OpTime(), - OpTime(), - BSONObj()}, + OpTime()}, &statusBuilder, &resultStatus); ASSERT_NOT_OK(resultStatus); @@ -2384,8 +2381,7 @@ public: OpTime(Timestamp(100, 0), 0), OpTime(Timestamp(100, 0), 0), OpTime(), - OpTime(), - BSONObj()}, + OpTime()}, &statusBuilder, &resultStatus); ASSERT_OK(resultStatus); @@ -2448,8 +2444,7 @@ public: OpTime(Timestamp(100, 0), 0), OpTime(Timestamp(100, 0), 0), OpTime(), - OpTime(), - BSONObj()}, + OpTime()}, &statusBuilder, &resultStatus); ASSERT_OK(resultStatus); @@ -2771,8 +2766,7 @@ TEST_F(HeartbeatResponseTestTwoRetries, NodeDoesNotRetryHeartbeatsAfterFailingTw OpTime(Timestamp(100, 0), 0), OpTime(Timestamp(100, 0), 0), OpTime(), - OpTime(), - BSONObj()}, + OpTime()}, &statusBuilder, &resultStatus); ASSERT_OK(resultStatus); @@ -3016,8 +3010,7 @@ TEST_F(HeartbeatResponseTestTwoRetries, OpTime(Timestamp(100, 0), 0), OpTime(Timestamp(100, 0), 0), OpTime(), - OpTime(), - BSONObj()}, + OpTime()}, &statusBuilder, &resultStatus); ASSERT_OK(resultStatus); diff --git a/src/mongo/db/repl/topology_coordinator_impl_v1_test.cpp b/src/mongo/db/repl/topology_coordinator_impl_v1_test.cpp index c8479a8735a..4a25ff9d2fc 100644 --- a/src/mongo/db/repl/topology_coordinator_impl_v1_test.cpp +++ b/src/mongo/db/repl/topology_coordinator_impl_v1_test.cpp @@ -1449,7 +1449,6 @@ TEST_F(TopoCoordTest, ReplSetGetStatus) { OpTime oplogDurable(Timestamp(3, 4), 1); OpTime lastCommittedOpTime(Timestamp(2, 3), 6); OpTime readConcernMajorityOpTime(Timestamp(4, 5), 7); - BSONObj initialSyncStatus = BSON("failedInitialSyncAttempts" << 1); std::string setName = "mySet"; ReplSetHeartbeatResponse hb; @@ -1504,8 +1503,7 @@ TEST_F(TopoCoordTest, ReplSetGetStatus) { oplogProgress, oplogDurable, lastCommittedOpTime, - readConcernMajorityOpTime, - initialSyncStatus}, + readConcernMajorityOpTime}, &statusBuilder, &resultStatus); ASSERT_OK(resultStatus); @@ -1587,7 +1585,6 @@ TEST_F(TopoCoordTest, ReplSetGetStatus) { selfStatus["optimeDate"].Date()); ASSERT_EQUALS(2000, rsStatus["heartbeatIntervalMillis"].numberInt()); - ASSERT_EQUALS(initialSyncStatus, rsStatus["initialSyncStatus"].Obj()); // TODO(spencer): Test electionTime and pingMs are set properly } @@ -1621,8 +1618,7 @@ TEST_F(TopoCoordTest, NodeReturnsInvalidReplicaSetConfigInResponseToGetStatusWhe oplogProgress, oplogProgress, OpTime(), - OpTime(), - BSONObj()}, + OpTime()}, &statusBuilder, &resultStatus); ASSERT_NOT_OK(resultStatus); @@ -4391,8 +4387,7 @@ public: OpTime(Timestamp(100, 0), 0), OpTime(Timestamp(100, 0), 0), OpTime(), - OpTime(), - BSONObj()}, + OpTime()}, &statusBuilder, &resultStatus); ASSERT_OK(resultStatus); @@ -4475,8 +4470,7 @@ public: OpTime(Timestamp(100, 0), 0), OpTime(Timestamp(100, 0), 0), OpTime(), - OpTime(), - BSONObj()}, + OpTime()}, &statusBuilder, &resultStatus); ASSERT_OK(resultStatus); @@ -4524,8 +4518,7 @@ TEST_F(HeartbeatResponseTestTwoRetriesV1, NodeDoesNotRetryHeartbeatsAfterFailing OpTime(Timestamp(100, 0), 0), OpTime(Timestamp(100, 0), 0), OpTime(), - OpTime(), - BSONObj()}, + OpTime()}, &statusBuilder, &resultStatus); ASSERT_OK(resultStatus); @@ -4585,8 +4578,7 @@ TEST_F(HeartbeatResponseTestTwoRetriesV1, HeartbeatThreeNonconsecutiveFailures) OpTime(Timestamp(100, 0), 0), OpTime(Timestamp(100, 0), 0), OpTime(), - OpTime(), - BSONObj()}, + OpTime()}, &statusBuilder, &resultStatus); ASSERT_OK(resultStatus); |
