diff options
Diffstat (limited to 'src/mongo/s/catalog/replset/sharding_catalog_manager_impl.cpp')
-rw-r--r-- | src/mongo/s/catalog/replset/sharding_catalog_manager_impl.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/mongo/s/catalog/replset/sharding_catalog_manager_impl.cpp b/src/mongo/s/catalog/replset/sharding_catalog_manager_impl.cpp index aac7bed4935..2b982106dc5 100644 --- a/src/mongo/s/catalog/replset/sharding_catalog_manager_impl.cpp +++ b/src/mongo/s/catalog/replset/sharding_catalog_manager_impl.cpp @@ -1408,12 +1408,15 @@ Status ShardingCatalogManagerImpl::initializeConfigDatabaseIfNeeded(OperationCon } } - Status status = _initConfigVersion(txn); + Status status = _initConfigIndexes(txn); if (!status.isOK()) { return status; } - status = _initConfigIndexes(txn); + // Make sure to write config.version last since we detect rollbacks of config.version and + // will re-run initializeConfigDatabaseIfNeeded if that happens, but we don't detect rollback + // of the index builds. + status = _initConfigVersion(txn); if (!status.isOK()) { return status; } @@ -1424,6 +1427,11 @@ Status ShardingCatalogManagerImpl::initializeConfigDatabaseIfNeeded(OperationCon return Status::OK(); } +void ShardingCatalogManagerImpl::discardCachedConfigDatabaseInitializationState() { + stdx::lock_guard<stdx::mutex> lk(_mutex); + _configInitialized = false; +} + Status ShardingCatalogManagerImpl::_initConfigVersion(OperationContext* txn) { auto versionStatus = _catalogClient->getConfigVersion(txn, repl::ReadConcernLevel::kLocalReadConcern); |