diff options
author | jannaerin <golden.janna@gmail.com> | 2018-04-03 13:30:30 -0400 |
---|---|---|
committer | jannaerin <golden.janna@gmail.com> | 2018-04-05 20:29:05 -0400 |
commit | 7a48a263485a585dac1e1289c830eafd35a3d54b (patch) | |
tree | 38544c586218bfa72bf7fd842c3ed6019e788ae3 /src/mongo/s/config_server_catalog_cache_loader.cpp | |
parent | 265a38952f11a5d9a6144a22f10dc59b138e0b69 (diff) | |
download | mongo-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.cpp | 16 |
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); })); } } |