summaryrefslogtreecommitdiff
path: root/src/mongo/s/catalog/replset/sharding_catalog_manager_impl.cpp
diff options
context:
space:
mode:
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.cpp12
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);