summaryrefslogtreecommitdiff
path: root/src/mongo/s/config_server_catalog_cache_loader.cpp
diff options
context:
space:
mode:
authorjannaerin <golden.janna@gmail.com>2018-04-03 13:30:30 -0400
committerjannaerin <golden.janna@gmail.com>2018-04-05 20:29:05 -0400
commit7a48a263485a585dac1e1289c830eafd35a3d54b (patch)
tree38544c586218bfa72bf7fd842c3ed6019e788ae3 /src/mongo/s/config_server_catalog_cache_loader.cpp
parent265a38952f11a5d9a6144a22f10dc59b138e0b69 (diff)
downloadmongo-7a48a263485a585dac1e1289c830eafd35a3d54b.tar.gz
SERVER-34145 Persist database version on shard
Diffstat (limited to 'src/mongo/s/config_server_catalog_cache_loader.cpp')
-rw-r--r--src/mongo/s/config_server_catalog_cache_loader.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/mongo/s/config_server_catalog_cache_loader.cpp b/src/mongo/s/config_server_catalog_cache_loader.cpp
index 68a6817ec83..eaa2669b072 100644
--- a/src/mongo/s/config_server_catalog_cache_loader.cpp
+++ b/src/mongo/s/config_server_catalog_cache_loader.cpp
@@ -200,13 +200,21 @@ void ConfigServerCatalogCacheLoader::getDatabase(
stdx::function<void(OperationContext*, StatusWith<DatabaseType>)> callbackFn) {
if (MONGO_FAIL_POINT(callShardServerCallbackFn)) {
- uassertStatusOK(_threadPool.schedule([ dbName, callbackFn ]() noexcept {
+ uassertStatusOK(_threadPool.schedule([ name = dbName.toString(), callbackFn ]() noexcept {
auto opCtx = Client::getCurrent()->makeOperationContext();
- const auto dbVersion = Versioning::newDatabaseVersion();
- DatabaseType dbt(dbName.toString(), ShardId("PrimaryShard"), false, dbVersion);
+ auto swDbt = [&]() -> StatusWith<DatabaseType> {
+ try {
- callbackFn(opCtx.get(), dbt);
+ const auto dbVersion = Versioning::newDatabaseVersion();
+ DatabaseType dbt(std::move(name), ShardId("PrimaryShard"), false, dbVersion);
+ return dbt;
+ } catch (const DBException& ex) {
+ return ex.toStatus();
+ }
+ }();
+
+ callbackFn(opCtx.get(), swDbt);
}));
}
}