summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierlauro Sciarelli <pierlauro.sciarelli@mongodb.com>2021-12-03 16:51:52 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-12-03 17:44:19 +0000
commitc379649913d701e406bec73b51a85ea6b618f677 (patch)
treec5341cd3f447c99fccfc1d9b4f17241d4588e903
parentaf32ff175cba00d4fb4e20102c8e7cc202c80ebc (diff)
downloadmongo-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.cpp17
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,