diff options
author | Jordi Serra Torrens <jordi.serra-torrens@mongodb.com> | 2022-03-28 15:12:07 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-03-28 17:18:51 +0000 |
commit | c980f4a1d181398a9a1f607f28a50a0022edd13b (patch) | |
tree | a49ee62a7b3030dd4ce6e2734223b63ee3bb997b /src/mongo/db/s/shardsvr_set_user_write_block_mode_command.cpp | |
parent | b355fd53d1b13d217e32061c92d5ca902d6209c3 (diff) | |
download | mongo-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.cpp | 21 |
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: |