summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlake Oler <blake.oler@mongodb.com>2020-11-17 20:20:37 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-11-24 21:01:35 +0000
commit5f72078a11a072b2af8cae30b195038945e49755 (patch)
treeaa94fa057dd2babf5426af8954b767d52ab2953e
parent0e69ddaa39b360d4083a55041b2f792c1cd61ec5 (diff)
downloadmongo-5f72078a11a072b2af8cae30b195038945e49755.tar.gz
SERVER-52802 Remove kDropping from the ReshardingCoordinator
-rw-r--r--src/mongo/db/s/collection_metadata.cpp2
-rw-r--r--src/mongo/db/s/resharding/resharding_coordinator_observer.h12
-rw-r--r--src/mongo/db/s/resharding/resharding_coordinator_service.cpp55
-rw-r--r--src/mongo/db/s/resharding/resharding_coordinator_service.h18
-rw-r--r--src/mongo/db/s/resharding/resharding_coordinator_test.cpp2
-rw-r--r--src/mongo/s/resharding/common_types.idl1
6 files changed, 39 insertions, 51 deletions
diff --git a/src/mongo/db/s/collection_metadata.cpp b/src/mongo/db/s/collection_metadata.cpp
index a8598ce826b..d72b013b9ac 100644
--- a/src/mongo/db/s/collection_metadata.cpp
+++ b/src/mongo/db/s/collection_metadata.cpp
@@ -70,7 +70,6 @@ boost::optional<ShardKeyPattern> CollectionMetadata::getReshardingKeyIfShouldFor
case CoordinatorStateEnum::kMirroring:
case CoordinatorStateEnum::kCommitted:
case CoordinatorStateEnum::kRenaming:
- case CoordinatorStateEnum::kDropping:
case CoordinatorStateEnum::kDone:
case CoordinatorStateEnum::kError:
return boost::none;
@@ -109,7 +108,6 @@ bool CollectionMetadata::writesShouldRunInDistributedTransaction(const OID& orig
return true;
case CoordinatorStateEnum::kRenaming:
break;
- case CoordinatorStateEnum::kDropping:
case CoordinatorStateEnum::kDone:
case CoordinatorStateEnum::kError:
return false;
diff --git a/src/mongo/db/s/resharding/resharding_coordinator_observer.h b/src/mongo/db/s/resharding/resharding_coordinator_observer.h
index b3e1e4acf35..27a64fa53be 100644
--- a/src/mongo/db/s/resharding/resharding_coordinator_observer.h
+++ b/src/mongo/db/s/resharding/resharding_coordinator_observer.h
@@ -92,18 +92,18 @@ public:
SharedSemiFuture<ReshardingCoordinatorDocument> awaitAllRecipientsInStrictConsistency();
/**
- * Fulfills the '_allDonorsDroppedOriginalCollection' promise when the last donor writes that it
- * is in 'done' state.
- */
- SharedSemiFuture<ReshardingCoordinatorDocument> awaitAllDonorsDroppedOriginalCollection();
-
- /**
* Fulfills the '_allRecipientsRenamedCollection' promise when the last recipient writes
* that it is in 'done' state.
*/
SharedSemiFuture<ReshardingCoordinatorDocument> awaitAllRecipientsRenamedCollection();
/**
+ * Fulfills the '_allDonorsDroppedOriginalCollection' promise when the last donor writes that it
+ * is in 'done' state.
+ */
+ SharedSemiFuture<ReshardingCoordinatorDocument> awaitAllDonorsDroppedOriginalCollection();
+
+ /**
* Sets errors on any promises that have not yet been fulfilled.
*/
void interrupt(Status status);
diff --git a/src/mongo/db/s/resharding/resharding_coordinator_service.cpp b/src/mongo/db/s/resharding/resharding_coordinator_service.cpp
index b90af097d0b..2e9b66818b6 100644
--- a/src/mongo/db/s/resharding/resharding_coordinator_service.cpp
+++ b/src/mongo/db/s/resharding/resharding_coordinator_service.cpp
@@ -44,6 +44,7 @@
#include "mongo/s/grid.h"
#include "mongo/s/shard_id.h"
#include "mongo/s/write_ops/batched_command_response.h"
+#include "mongo/util/future_util.h"
#include "mongo/util/string_map.h"
#include "mongo/util/uuid.h"
@@ -398,17 +399,16 @@ std::vector<ShardId> extractShardIds(const std::vector<T>& participantShardEntri
/**
* Maps which participants are to be notified when the coordinator transitions into a given state.
*/
-enum class ParticipantsToNofityEnum { kDonors, kRecipientsTempNss, kRecipientsOrigNss, kNone };
+enum class ParticipantsToNofityEnum { kDonors, kRecipients, kAllParticipantsPostCommit, kNone };
stdx::unordered_map<CoordinatorStateEnum, ParticipantsToNofityEnum> notifyForStateTransition{
{CoordinatorStateEnum::kUnused, ParticipantsToNofityEnum::kNone},
{CoordinatorStateEnum::kInitializing, ParticipantsToNofityEnum::kNone},
{CoordinatorStateEnum::kPreparingToDonate, ParticipantsToNofityEnum::kDonors},
- {CoordinatorStateEnum::kCloning, ParticipantsToNofityEnum::kRecipientsTempNss},
+ {CoordinatorStateEnum::kCloning, ParticipantsToNofityEnum::kRecipients},
{CoordinatorStateEnum::kApplying, ParticipantsToNofityEnum::kDonors},
{CoordinatorStateEnum::kMirroring, ParticipantsToNofityEnum::kDonors},
{CoordinatorStateEnum::kCommitted, ParticipantsToNofityEnum::kNone},
- {CoordinatorStateEnum::kRenaming, ParticipantsToNofityEnum::kRecipientsOrigNss},
- {CoordinatorStateEnum::kDropping, ParticipantsToNofityEnum::kDonors},
+ {CoordinatorStateEnum::kRenaming, ParticipantsToNofityEnum::kAllParticipantsPostCommit},
{CoordinatorStateEnum::kDone, ParticipantsToNofityEnum::kNone},
{CoordinatorStateEnum::kError, ParticipantsToNofityEnum::kNone},
};
@@ -462,7 +462,7 @@ void bumpShardVersionsThenExecuteStateTransitionAndMetadataChangesInTxn(
updatedCoordinatorDoc.getNss(),
extractShardIds(updatedCoordinatorDoc.getDonorShards()),
std::move(changeMetadataFunc));
- } else if (participantsToNotify == ParticipantsToNofityEnum::kRecipientsTempNss) {
+ } else if (participantsToNotify == ParticipantsToNofityEnum::kRecipients) {
// Bump the recipient shard versions for the temporary resharding namespace along with
// updating the metadata.
ShardingCatalogManager::get(opCtx)->bumpCollShardVersionsAndChangeMetadataInTxn(
@@ -470,9 +470,10 @@ void bumpShardVersionsThenExecuteStateTransitionAndMetadataChangesInTxn(
updatedCoordinatorDoc.getTempReshardingNss(),
extractShardIds(updatedCoordinatorDoc.getRecipientShards()),
std::move(changeMetadataFunc));
- } else if (participantsToNotify == ParticipantsToNofityEnum::kRecipientsOrigNss) {
+ } else if (participantsToNotify == ParticipantsToNofityEnum::kAllParticipantsPostCommit) {
// Bump the recipient shard versions for the original resharding namespace along with
- // updating the metadata.
+ // updating the metadata. Only the recipient shards will have chunks for the namespace
+ // after commit, bumping chunk versions on the donor shards would not apply.
ShardingCatalogManager::get(opCtx)->bumpCollShardVersionsAndChangeMetadataInTxn(
opCtx,
updatedCoordinatorDoc.getNss(),
@@ -678,11 +679,10 @@ SemiFuture<void> ReshardingCoordinatorService::ReshardingCoordinator::run(
_coordinatorDoc);
return;
})
- .then([this, executor] { _tellAllRecipientsToRefresh(executor); })
- .then([this, executor] { return _awaitAllRecipientsRenamedCollection(executor); })
- .then([this, executor] { _tellAllDonorsToRefresh(executor); })
- .then([this, executor] { return _awaitAllDonorsDroppedOriginalCollection(executor); })
.then([this, executor] { _tellAllParticipantsToRefresh(executor); })
+ .then([this, executor] {
+ return _awaitAllParticipantShardsRenamedOrDroppedOriginalCollection(executor);
+ })
.onError([this, executor](Status status) {
stdx::lock_guard<Latch> lg(_mutex);
if (_completionPromise.getFuture().isReady()) {
@@ -859,33 +859,26 @@ Future<void> ReshardingCoordinatorService::ReshardingCoordinator::_commit(
return Status::OK();
};
-ExecutorFuture<void>
-ReshardingCoordinatorService::ReshardingCoordinator::_awaitAllRecipientsRenamedCollection(
- const std::shared_ptr<executor::ScopedTaskExecutor>& executor) {
+ExecutorFuture<void> ReshardingCoordinatorService::ReshardingCoordinator::
+ _awaitAllParticipantShardsRenamedOrDroppedOriginalCollection(
+ const std::shared_ptr<executor::ScopedTaskExecutor>& executor) {
if (_coordinatorDoc.getState() > CoordinatorStateEnum::kRenaming) {
return ExecutorFuture<void>(**executor, Status::OK());
}
- return _reshardingCoordinatorObserver->awaitAllRecipientsRenamedCollection()
- .thenRunOn(**executor)
- .then([this](ReshardingCoordinatorDocument coordinatorDocChangedOnDisk) {
- _updateCoordinatorDocStateAndCatalogEntries(CoordinatorStateEnum::kDropping,
- coordinatorDocChangedOnDisk);
- });
-}
-
-ExecutorFuture<void>
-ReshardingCoordinatorService::ReshardingCoordinator::_awaitAllDonorsDroppedOriginalCollection(
- const std::shared_ptr<executor::ScopedTaskExecutor>& executor) {
- if (_coordinatorDoc.getState() > CoordinatorStateEnum::kDropping) {
- return ExecutorFuture<void>(**executor, Status::OK());
- }
+ std::vector<ExecutorFuture<ReshardingCoordinatorDocument>> futures;
+ futures.emplace_back(
+ _reshardingCoordinatorObserver->awaitAllRecipientsRenamedCollection().thenRunOn(
+ **executor));
+ futures.emplace_back(
+ _reshardingCoordinatorObserver->awaitAllDonorsDroppedOriginalCollection().thenRunOn(
+ **executor));
- return _reshardingCoordinatorObserver->awaitAllDonorsDroppedOriginalCollection()
+ return whenAllSucceed(std::move(futures))
.thenRunOn(**executor)
- .then([this](ReshardingCoordinatorDocument coordinatorDocChangedOnDisk) {
+ .then([this, executor](const auto& coordinatorDocsChangedOnDisk) {
_updateCoordinatorDocStateAndCatalogEntries(CoordinatorStateEnum::kDone,
- coordinatorDocChangedOnDisk);
+ coordinatorDocsChangedOnDisk[1]);
});
}
diff --git a/src/mongo/db/s/resharding/resharding_coordinator_service.h b/src/mongo/db/s/resharding/resharding_coordinator_service.h
index 26cca998bea..833a9f4450d 100644
--- a/src/mongo/db/s/resharding/resharding_coordinator_service.h
+++ b/src/mongo/db/s/resharding/resharding_coordinator_service.h
@@ -182,17 +182,15 @@ private:
Future<void> _commit(const ReshardingCoordinatorDocument& updatedDoc);
/**
- * Waits on _reshardingCoordinatorObserver to notify that all recipients have renamed the
- * temporary collection to the original collection namespace. Transitions to 'kDropping'.
- */
- ExecutorFuture<void> _awaitAllRecipientsRenamedCollection(
- const std::shared_ptr<executor::ScopedTaskExecutor>& executor);
-
- /**
- * Waits on _reshardingCoordinatorObserver to notify that all donors have dropped the
- * original collection. Transitions to 'kDone'.
+ * Waits on _reshardingCoordinatorObserver to notify that:
+ * 1. All recipient shards have renamed the temporary collection to the original collection
+ * namespace, and
+ * 2. All donor shards that were not also recipient shards have dropped the original
+ * collection.
+ *
+ * Transitions to 'kDone'.
*/
- ExecutorFuture<void> _awaitAllDonorsDroppedOriginalCollection(
+ ExecutorFuture<void> _awaitAllParticipantShardsRenamedOrDroppedOriginalCollection(
const std::shared_ptr<executor::ScopedTaskExecutor>& executor);
/**
diff --git a/src/mongo/db/s/resharding/resharding_coordinator_test.cpp b/src/mongo/db/s/resharding/resharding_coordinator_test.cpp
index 4810d2710ef..3c455384ceb 100644
--- a/src/mongo/db/s/resharding/resharding_coordinator_test.cpp
+++ b/src/mongo/db/s/resharding/resharding_coordinator_test.cpp
@@ -681,7 +681,7 @@ TEST_F(ReshardingCoordinatorPersistenceTest, PersistTransitionToErrorSucceeds) {
TEST_F(ReshardingCoordinatorPersistenceTest, PersistTransitionToDoneSucceeds) {
auto coordinatorDoc =
- insertStateAndCatalogEntries(CoordinatorStateEnum::kDropping, _finalEpoch);
+ insertStateAndCatalogEntries(CoordinatorStateEnum::kRenaming, _finalEpoch);
// Persist the updates on disk
auto expectedCoordinatorDoc = coordinatorDoc;
diff --git a/src/mongo/s/resharding/common_types.idl b/src/mongo/s/resharding/common_types.idl
index 6928129a6ff..41368c2c60a 100644
--- a/src/mongo/s/resharding/common_types.idl
+++ b/src/mongo/s/resharding/common_types.idl
@@ -49,7 +49,6 @@ enums:
kMirroring: "mirroring"
kCommitted: "committed"
kRenaming: "renaming"
- kDropping: "dropping"
kDone: "done"
kError: "error"