diff options
author | Esha Maharishi <esha.maharishi@mongodb.com> | 2018-04-13 08:52:44 -0400 |
---|---|---|
committer | Esha Maharishi <esha.maharishi@mongodb.com> | 2018-04-13 15:08:34 -0400 |
commit | 3a8494c12ecaf85f4456ba7da54b5623e60dacbf (patch) | |
tree | e340429a2f457e02d76ebe6cf624fd08bb7e92ee /src/mongo/s/config_server_catalog_cache_loader.cpp | |
parent | 8cca1f4c2b19c5f430ed3cb330fd2ef7a925b12f (diff) | |
download | mongo-3a8494c12ecaf85f4456ba7da54b5623e60dacbf.tar.gz |
SERVER-34163 Make refreshing a database entry in the CatalogCache asynchronous
Diffstat (limited to 'src/mongo/s/config_server_catalog_cache_loader.cpp')
-rw-r--r-- | src/mongo/s/config_server_catalog_cache_loader.cpp | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/src/mongo/s/config_server_catalog_cache_loader.cpp b/src/mongo/s/config_server_catalog_cache_loader.cpp index f9baadd0d02..e6c7ecc138c 100644 --- a/src/mongo/s/config_server_catalog_cache_loader.cpp +++ b/src/mongo/s/config_server_catalog_cache_loader.cpp @@ -42,7 +42,6 @@ namespace mongo { using CollectionAndChangedChunks = CatalogCacheLoader::CollectionAndChangedChunks; -MONGO_FP_DECLARE(callShardServerCallbackFn); namespace { @@ -198,25 +197,24 @@ std::shared_ptr<Notification<void>> ConfigServerCatalogCacheLoader::getChunksSin void ConfigServerCatalogCacheLoader::getDatabase( StringData dbName, stdx::function<void(OperationContext*, StatusWith<DatabaseType>)> callbackFn) { + uassertStatusOK(_threadPool.schedule([ name = dbName.toString(), callbackFn ]() noexcept { + auto opCtx = Client::getCurrent()->makeOperationContext(); - if (MONGO_FAIL_POINT(callShardServerCallbackFn)) { - uassertStatusOK(_threadPool.schedule([ name = dbName.toString(), callbackFn ]() noexcept { - auto opCtx = Client::getCurrent()->makeOperationContext(); - - auto swDbt = [&]() -> StatusWith<DatabaseType> { - try { - - const auto dbVersion = databaseVersion::makeNew(); - DatabaseType dbt(std::move(name), ShardId("PrimaryShard"), false, dbVersion); - return dbt; - } catch (const DBException& ex) { - return ex.toStatus(); - } - }(); + auto swDbt = [&]() -> StatusWith<DatabaseType> { + try { + return uassertStatusOK( + Grid::get(opCtx.get()) + ->catalogClient() + ->getDatabase( + opCtx.get(), name, repl::ReadConcernLevel::kMajorityReadConcern)) + .value; + } catch (const DBException& ex) { + return ex.toStatus(); + } + }(); - callbackFn(opCtx.get(), swDbt); - })); - } + callbackFn(opCtx.get(), std::move(swDbt)); + })); } } // namespace mongo |