summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/shardsvr_set_user_write_block_mode_command.cpp
diff options
context:
space:
mode:
authorJordi Serra Torrens <jordi.serra-torrens@mongodb.com>2022-03-28 15:12:07 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-03-28 17:18:51 +0000
commitc980f4a1d181398a9a1f607f28a50a0022edd13b (patch)
treea49ee62a7b3030dd4ce6e2734223b63ee3bb997b /src/mongo/db/s/shardsvr_set_user_write_block_mode_command.cpp
parentb355fd53d1b13d217e32061c92d5ca902d6209c3 (diff)
downloadmongo-c980f4a1d181398a9a1f607f28a50a0022edd13b.tar.gz
SERVER-63955 Ensure movePrimary works when user write blocking is enabled
Diffstat (limited to 'src/mongo/db/s/shardsvr_set_user_write_block_mode_command.cpp')
-rw-r--r--src/mongo/db/s/shardsvr_set_user_write_block_mode_command.cpp21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/mongo/db/s/shardsvr_set_user_write_block_mode_command.cpp b/src/mongo/db/s/shardsvr_set_user_write_block_mode_command.cpp
index e5b7515398f..ef4f067f483 100644
--- a/src/mongo/db/s/shardsvr_set_user_write_block_mode_command.cpp
+++ b/src/mongo/db/s/shardsvr_set_user_write_block_mode_command.cpp
@@ -81,14 +81,25 @@ public:
// the user-write-blocking bypass enabled -- the ones allowed to bypass user
// write blocking don't care about the write blocking state.
{
- const auto mayNotBypassUserWriteBlockPred =
+ const auto shouldWaitPred =
[](const ShardingDDLCoordinator& coordinatorInstance) -> bool {
- return !coordinatorInstance.getForwardableOpMetadata()
- .getMayBypassWriteBlocking();
+ // No need to wait for coordinators that do not modify user data.
+ if (coordinatorInstance.canAlwaysStartWhenUserWritesAreDisabled()) {
+ return false;
+ }
+
+ // Don't wait for coordinator instances that are allowed to bypass
+ // user write blocking.
+ if (coordinatorInstance.getForwardableOpMetadata()
+ .getMayBypassWriteBlocking()) {
+ return false;
+ }
+
+ return true;
};
+
ShardingDDLCoordinatorService::getService(opCtx)
- ->waitForOngoingCoordinatorsToFinish(
- opCtx, mayNotBypassUserWriteBlockPred);
+ ->waitForOngoingCoordinatorsToFinish(opCtx, shouldWaitPred);
}
break;
case ShardsvrSetUserWriteBlockModePhaseEnum::kComplete: