summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordi Serra Torrens <jordi.serra-torrens@mongodb.com>2022-03-30 07:10:07 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-03-30 07:46:36 +0000
commit92ec20cd6fc72f85d68a8ecb5682d1a5a7a1500b (patch)
treeebaac21d8085dbfd7fb6c005d8aacba0f13df04a
parentdca101cdb1370e25ebf1730a46467a820919c1d5 (diff)
downloadmongo-92ec20cd6fc72f85d68a8ecb5682d1a5a7a1500b.tar.gz
SERVER-65012 Avoid invariant when converting write-blocked shard to replicaSet
-rw-r--r--src/mongo/db/s/global_user_write_block_state.cpp1
-rw-r--r--src/mongo/db/user_write_block_mode_op_observer.cpp4
2 files changed, 3 insertions, 2 deletions
diff --git a/src/mongo/db/s/global_user_write_block_state.cpp b/src/mongo/db/s/global_user_write_block_state.cpp
index ec3dbf11f7e..af9adf72b3d 100644
--- a/src/mongo/db/s/global_user_write_block_state.cpp
+++ b/src/mongo/db/s/global_user_write_block_state.cpp
@@ -71,7 +71,6 @@ bool GlobalUserWriteBlockState::isUserWriteBlockingEnabled(OperationContext* opC
}
void GlobalUserWriteBlockState::enableUserShardedDDLBlocking(OperationContext* opCtx) {
- invariant(serverGlobalParams.clusterRole == ClusterRole::ShardServer);
_userShardedDDLBlocked.store(true);
}
diff --git a/src/mongo/db/user_write_block_mode_op_observer.cpp b/src/mongo/db/user_write_block_mode_op_observer.cpp
index b58f48c623a..93a7fb2749c 100644
--- a/src/mongo/db/user_write_block_mode_op_observer.cpp
+++ b/src/mongo/db/user_write_block_mode_op_observer.cpp
@@ -177,7 +177,9 @@ void UserWriteBlockModeOpObserver::_onReplicationRollback(OperationContext* opCt
void UserWriteBlockModeOpObserver::_checkWriteAllowed(OperationContext* opCtx,
const NamespaceString& nss) {
- if (isStandaloneOrPrimary(opCtx)) {
+ // Evaluate write blocking only on replica set primaries.
+ const auto replCoord = repl::ReplicationCoordinator::get(opCtx);
+ if (replCoord->isReplEnabled() && isStandaloneOrPrimary(opCtx)) {
GlobalUserWriteBlockState::get(opCtx)->checkUserWritesAllowed(opCtx, nss);
}
}