diff options
author | XueruiFa <xuerui.fa@mongodb.com> | 2020-07-20 20:41:32 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-09-08 21:50:53 +0000 |
commit | 103b545528e7cf05537bd68bda4bc8235bf6fefa (patch) | |
tree | f61e51f20249b714b4e636c419ea83504368bf94 /src | |
parent | 020b0463d95f8b3d337351955598842528b38c47 (diff) | |
download | mongo-103b545528e7cf05537bd68bda4bc8235bf6fefa.tar.gz |
SERVER-49730: Replace usages of waitForDrainFinish
(cherry picked from commit f8be36eca7f5d17b0cbea557e8825046352eea19)
Diffstat (limited to 'src')
11 files changed, 2 insertions, 98 deletions
diff --git a/src/mongo/db/repl/repl_set_commands.cpp b/src/mongo/db/repl/repl_set_commands.cpp index 89ecc3aeb13..f6942eb59ae 100644 --- a/src/mongo/db/repl/repl_set_commands.cpp +++ b/src/mongo/db/repl/repl_set_commands.cpp @@ -135,20 +135,6 @@ public: uassertStatusOK(status); return true; - } else if (cmdObj.hasElement("waitForDrainFinish")) { - long long timeoutMillis; - auto status = bsonExtractIntegerField(cmdObj, "waitForDrainFinish", &timeoutMillis); - uassertStatusOK(status); - Milliseconds timeout(timeoutMillis); - LOGV2(21575, - "replSetTest: waiting {timeout} for applier buffer to finish draining", - "replSetTest: waiting for applier buffer to finish draining", - "timeout"_attr = timeout); - - status = replCoord->waitForDrainFinish(timeout); - - uassertStatusOK(status); - return true; } else if (cmdObj.hasElement("getLastStableRecoveryTimestamp")) { boost::optional<Timestamp> ts = StorageInterface::get(getGlobalServiceContext()) diff --git a/src/mongo/db/repl/replication_coordinator.h b/src/mongo/db/repl/replication_coordinator.h index cec8785f9e8..15f90b521bd 100644 --- a/src/mongo/db/repl/replication_coordinator.h +++ b/src/mongo/db/repl/replication_coordinator.h @@ -567,15 +567,6 @@ public: virtual void signalDrainComplete(OperationContext* opCtx, long long termWhenBufferIsEmpty) = 0; /** - * Waits duration of 'timeout' for applier to finish draining its buffer of operations. - * Returns OK if we are not in drain mode. - * Returns ErrorCodes::ExceededTimeLimit if we timed out waiting for the applier to drain its - * buffer. - * Returns ErrorCodes::BadValue if timeout is negative. - */ - virtual Status waitForDrainFinish(Milliseconds timeout) = 0; - - /** * Signals the sync source feedback thread to wake up and send a handshake and * replSetUpdatePosition command to our sync source. */ diff --git a/src/mongo/db/repl/replication_coordinator_impl.cpp b/src/mongo/db/repl/replication_coordinator_impl.cpp index d732fa5faeb..257f567ab7f 100644 --- a/src/mongo/db/repl/replication_coordinator_impl.cpp +++ b/src/mongo/db/repl/replication_coordinator_impl.cpp @@ -1182,21 +1182,6 @@ void ReplicationCoordinatorImpl::signalDrainComplete(OperationContext* opCtx, _externalState->startNoopWriter(_getMyLastAppliedOpTime_inlock()); } -Status ReplicationCoordinatorImpl::waitForDrainFinish(Milliseconds timeout) { - if (timeout < Milliseconds(0)) { - return Status(ErrorCodes::BadValue, "Timeout duration cannot be negative"); - } - - stdx::unique_lock<Latch> lk(_mutex); - auto pred = [this]() { return _applierState != ApplierState::Draining; }; - if (!_drainFinishedCond.wait_for(lk, timeout.toSystemDuration(), pred)) { - return Status(ErrorCodes::ExceededTimeLimit, - "Timed out waiting to finish draining applier buffer"); - } - - return Status::OK(); -} - void ReplicationCoordinatorImpl::signalUpstreamUpdater() { _externalState->forwardSlaveProgress(); } diff --git a/src/mongo/db/repl/replication_coordinator_impl.h b/src/mongo/db/repl/replication_coordinator_impl.h index bde6f3136b8..3a3ee224169 100644 --- a/src/mongo/db/repl/replication_coordinator_impl.h +++ b/src/mongo/db/repl/replication_coordinator_impl.h @@ -207,8 +207,6 @@ public: virtual void signalDrainComplete(OperationContext* opCtx, long long termWhenBufferIsEmpty) override; - virtual Status waitForDrainFinish(Milliseconds timeout) override; - virtual void signalUpstreamUpdater() override; virtual Status resyncData(OperationContext* opCtx, bool waitUntilCompleted) override; diff --git a/src/mongo/db/repl/replication_coordinator_impl_test.cpp b/src/mongo/db/repl/replication_coordinator_impl_test.cpp index 14fcdc02acd..b982b6a672b 100644 --- a/src/mongo/db/repl/replication_coordinator_impl_test.cpp +++ b/src/mongo/db/repl/replication_coordinator_impl_test.cpp @@ -1674,8 +1674,8 @@ TEST_F(ReplCoordTest, DrainCompletionMidStepDown) { // Now wait for stepdown to complete getReplExec()->waitForEvent(updateTermEvh); - // By now drain mode should be cancelled. - ASSERT_OK(getReplCoord()->waitForDrainFinish(Milliseconds(0))); + // By now, the node should have left drain mode. + ASSERT(ReplicationCoordinator::ApplierState::Draining != getReplCoord()->getApplierState()); ASSERT_TRUE(getReplCoord()->getMemberState().secondary()); // ASSERT_EQUALS(2, getReplCoord()->getTerm()); // SERVER-28290 @@ -7228,43 +7228,6 @@ TEST_F(ReplCoordTest, WaitForMemberState) { replCoord->waitForMemberState(MemberState::RS_ARBITER, Milliseconds(0))); } -TEST_F(ReplCoordTest, WaitForDrainFinish) { - init("mySet"); - - assertStartSuccess(BSON("_id" - << "mySet" - << "version" << 1 << "members" - << BSON_ARRAY(BSON("_id" << 0 << "host" - << "test1:1234"))), - HostAndPort("test1", 1234)); - auto replCoord = getReplCoord(); - auto initialTerm = replCoord->getTerm(); - replCoordSetMyLastAppliedOpTime(OpTime(Timestamp(1, 1), 0), Date_t() + Seconds(100)); - replCoordSetMyLastDurableOpTime(OpTime(Timestamp(1, 1), 0), Date_t() + Seconds(100)); - ASSERT_OK(replCoord->setFollowerMode(MemberState::RS_SECONDARY)); - - // Single node cluster - this node should start election on setFollowerMode() completion. - replCoord->waitForElectionFinish_forTest(); - - // Successful dry run election increases term. - ASSERT_EQUALS(initialTerm + 1, replCoord->getTerm()); - - auto timeout = Milliseconds(1); - ASSERT_OK(replCoord->waitForMemberState(MemberState::RS_PRIMARY, timeout)); - - ASSERT(replCoord->getApplierState() == ReplicationCoordinator::ApplierState::Draining); - ASSERT_EQUALS(ErrorCodes::ExceededTimeLimit, replCoord->waitForDrainFinish(timeout)); - - ASSERT_EQUALS(ErrorCodes::BadValue, replCoord->waitForDrainFinish(Milliseconds(-1))); - - const auto opCtx = makeOperationContext(); - signalDrainComplete(opCtx.get()); - ASSERT_OK(replCoord->waitForDrainFinish(timeout)); - - // Zero timeout is fine. - ASSERT_OK(replCoord->waitForDrainFinish(Milliseconds(0))); -} - TEST_F( ReplCoordTest, PopulateUnsetWriteConcernOptionsSyncModeReturnsInputWithSyncModeNoneIfUnsetAndWriteConcernMajorityJournalDefaultIsFalse) { diff --git a/src/mongo/db/repl/replication_coordinator_mock.cpp b/src/mongo/db/repl/replication_coordinator_mock.cpp index a06f8acf20e..f598ba1c273 100644 --- a/src/mongo/db/repl/replication_coordinator_mock.cpp +++ b/src/mongo/db/repl/replication_coordinator_mock.cpp @@ -307,11 +307,6 @@ ReplicationCoordinator::ApplierState ReplicationCoordinatorMock::getApplierState void ReplicationCoordinatorMock::signalDrainComplete(OperationContext*, long long) {} -Status ReplicationCoordinatorMock::waitForDrainFinish(Milliseconds timeout) { - MONGO_UNREACHABLE; - return Status::OK(); -} - void ReplicationCoordinatorMock::signalUpstreamUpdater() {} Status ReplicationCoordinatorMock::resyncData(OperationContext* opCtx, bool waitUntilCompleted) { diff --git a/src/mongo/db/repl/replication_coordinator_mock.h b/src/mongo/db/repl/replication_coordinator_mock.h index bd43047be54..628e2cdd201 100644 --- a/src/mongo/db/repl/replication_coordinator_mock.h +++ b/src/mongo/db/repl/replication_coordinator_mock.h @@ -174,8 +174,6 @@ public: virtual void signalDrainComplete(OperationContext*, long long); - virtual Status waitForDrainFinish(Milliseconds timeout) override; - virtual void signalUpstreamUpdater(); virtual Status resyncData(OperationContext* opCtx, bool waitUntilCompleted) override; diff --git a/src/mongo/db/repl/replication_coordinator_noop.cpp b/src/mongo/db/repl/replication_coordinator_noop.cpp index a591118079e..84727c19b04 100644 --- a/src/mongo/db/repl/replication_coordinator_noop.cpp +++ b/src/mongo/db/repl/replication_coordinator_noop.cpp @@ -187,10 +187,6 @@ void ReplicationCoordinatorNoOp::signalDrainComplete(OperationContext*, long lon MONGO_UNREACHABLE; } -Status ReplicationCoordinatorNoOp::waitForDrainFinish(Milliseconds) { - MONGO_UNREACHABLE; -} - void ReplicationCoordinatorNoOp::signalUpstreamUpdater() { MONGO_UNREACHABLE; } diff --git a/src/mongo/db/repl/replication_coordinator_noop.h b/src/mongo/db/repl/replication_coordinator_noop.h index 59d16ef5f89..91f49315f74 100644 --- a/src/mongo/db/repl/replication_coordinator_noop.h +++ b/src/mongo/db/repl/replication_coordinator_noop.h @@ -154,8 +154,6 @@ public: void signalDrainComplete(OperationContext*, long long) final; - Status waitForDrainFinish(Milliseconds) final; - void signalUpstreamUpdater() final; Status resyncData(OperationContext*, bool) final; diff --git a/src/mongo/embedded/replication_coordinator_embedded.cpp b/src/mongo/embedded/replication_coordinator_embedded.cpp index 0f3505ac042..5b93a2c1fb5 100644 --- a/src/mongo/embedded/replication_coordinator_embedded.cpp +++ b/src/mongo/embedded/replication_coordinator_embedded.cpp @@ -194,10 +194,6 @@ void ReplicationCoordinatorEmbedded::signalDrainComplete(OperationContext*, long UASSERT_NOT_IMPLEMENTED; } -Status ReplicationCoordinatorEmbedded::waitForDrainFinish(Milliseconds) { - UASSERT_NOT_IMPLEMENTED; -} - void ReplicationCoordinatorEmbedded::signalUpstreamUpdater() { UASSERT_NOT_IMPLEMENTED; } diff --git a/src/mongo/embedded/replication_coordinator_embedded.h b/src/mongo/embedded/replication_coordinator_embedded.h index e8f55226073..8d96e050617 100644 --- a/src/mongo/embedded/replication_coordinator_embedded.h +++ b/src/mongo/embedded/replication_coordinator_embedded.h @@ -161,8 +161,6 @@ public: void signalDrainComplete(OperationContext*, long long) override; - Status waitForDrainFinish(Milliseconds) override; - void signalUpstreamUpdater() override; Status resyncData(OperationContext*, bool) override; |