diff options
author | Pierlauro Sciarelli <pierlauro.sciarelli@mongodb.com> | 2021-12-03 16:51:52 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-12-03 17:44:19 +0000 |
commit | c379649913d701e406bec73b51a85ea6b618f677 (patch) | |
tree | c5341cd3f447c99fccfc1d9b4f17241d4588e903 | |
parent | af32ff175cba00d4fb4e20102c8e7cc202c80ebc (diff) | |
download | mongo-c379649913d701e406bec73b51a85ea6b618f677.tar.gz |
SERVER-61214 Ensure having the latest known entry of the catalog cache when creating config.system.sessions
-rw-r--r-- | src/mongo/db/s/sessions_collection_config_server.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/mongo/db/s/sessions_collection_config_server.cpp b/src/mongo/db/s/sessions_collection_config_server.cpp index ebd7ae37eed..48374167b41 100644 --- a/src/mongo/db/s/sessions_collection_config_server.cpp +++ b/src/mongo/db/s/sessions_collection_config_server.cpp @@ -74,14 +74,25 @@ void SessionsCollectionConfigServer::_generateIndexesIfNeeded(OperationContext* nss, "SessionsCollectionConfigServer::_generateIndexesIfNeeded", [&] { - auto routingInfo = uassertStatusOK( - Grid::get(opCtx)->catalogCache()->getCollectionRoutingInfo(opCtx, nss)); + const ChunkManager cm = [&]() { + // (SERVER-61214) wait for the catalog cache to acknowledge that the sessions + // collection is sharded in order to be sure to get a valid routing table + while (true) { + auto cm = uassertStatusOK( + Grid::get(opCtx)->catalogCache()->getCollectionRoutingInfoWithRefresh(opCtx, + nss)); + + if (cm.isSharded()) { + return cm; + } + } + }(); scatterGatherVersionedTargetByRoutingTable( opCtx, nss.db(), nss, - routingInfo, + cm, SessionsCollection::generateCreateIndexesCmd(), ReadPreferenceSetting(ReadPreference::PrimaryOnly), Shard::RetryPolicy::kNoRetry, |