summaryrefslogtreecommitdiff
path: root/src/mongo/s/sharding_initialization.cpp
diff options
context:
space:
mode:
authorMoustafa Maher <m.maher@10gen.com>2021-07-09 19:10:29 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-07-13 20:41:22 +0000
commit4bdbcf59c1a071b996bfcc95e13ad488ef8d7dea (patch)
treefd19cf4cb6cd92606b455714897f855dc5a49ffd /src/mongo/s/sharding_initialization.cpp
parentbbd0b90085c06de2882e48d68812ac822a4412f9 (diff)
downloadmongo-4bdbcf59c1a071b996bfcc95e13ad488ef8d7dea.tar.gz
SERVER-56844 Fassert shard server on startup if DWCF=w:1 and no CWWC set
Diffstat (limited to 'src/mongo/s/sharding_initialization.cpp')
-rw-r--r--src/mongo/s/sharding_initialization.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/mongo/s/sharding_initialization.cpp b/src/mongo/s/sharding_initialization.cpp
index 6f00ec751e4..11d55bfa79c 100644
--- a/src/mongo/s/sharding_initialization.cpp
+++ b/src/mongo/s/sharding_initialization.cpp
@@ -41,6 +41,7 @@
#include "mongo/db/keys_collection_client_sharded.h"
#include "mongo/db/keys_collection_manager.h"
#include "mongo/db/logical_time_validator.h"
+#include "mongo/db/repl/replication_coordinator.h"
#include "mongo/db/server_options.h"
#include "mongo/db/service_context.h"
#include "mongo/db/time_proof_service.h"
@@ -207,6 +208,14 @@ Status initializeGlobalShardingState(OperationContext* opCtx,
return Status::OK();
}
+void loadCWWCFromConfigServerForReplication(OperationContext* opCtx) {
+ if (serverGlobalParams.clusterRole != ClusterRole::ShardServer) {
+ return;
+ }
+
+ repl::ReplicationCoordinator::get(opCtx)->recordIfCWWCIsSetOnConfigServerOnStartup(opCtx);
+}
+
Status waitForShardRegistryReload(OperationContext* opCtx) {
if (serverGlobalParams.clusterRole == ClusterRole::ConfigServer) {
return Status::OK();
@@ -221,6 +230,8 @@ Status waitForShardRegistryReload(OperationContext* opCtx) {
try {
uassertStatusOK(ClusterIdentityLoader::get(opCtx)->loadClusterId(
opCtx, repl::ReadConcernLevel::kMajorityReadConcern));
+ // Assert will be raised on failure to talk to config server.
+ loadCWWCFromConfigServerForReplication(opCtx);
if (Grid::get(opCtx)->shardRegistry()->isUp()) {
return Status::OK();
}