diff options
| author | Moustafa Maher <m.maher@10gen.com> | 2021-07-09 19:10:29 +0000 |
|---|---|---|
| committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-07-13 20:41:22 +0000 |
| commit | 4bdbcf59c1a071b996bfcc95e13ad488ef8d7dea (patch) | |
| tree | fd19cf4cb6cd92606b455714897f855dc5a49ffd /src/mongo/s/sharding_initialization.cpp | |
| parent | bbd0b90085c06de2882e48d68812ac822a4412f9 (diff) | |
| download | mongo-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.cpp | 11 |
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(); } |
