From 26838030f0aedd4437effcb0418e5c4d6c53f538 Mon Sep 17 00:00:00 2001 From: mathisbessamdb Date: Fri, 25 Mar 2022 22:19:24 +0000 Subject: SERVER-64661 Fix validation on shutdown failing due to a re routing issue. --- src/mongo/db/serverless/shard_split_utils.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'src/mongo/db/serverless/shard_split_utils.cpp') diff --git a/src/mongo/db/serverless/shard_split_utils.cpp b/src/mongo/db/serverless/shard_split_utils.cpp index 00910164810..966d9aa5e86 100644 --- a/src/mongo/db/serverless/shard_split_utils.cpp +++ b/src/mongo/db/serverless/shard_split_utils.cpp @@ -238,7 +238,7 @@ bool shouldRemoveStateDocumentOnRecipient(OperationContext* opCtx, auto recipientSetName = *stateDocument.getRecipientSetName(); auto config = repl::ReplicationCoordinator::get(cc().getServiceContext())->getConfig(); return recipientSetName == config.getReplSetName() && - stateDocument.getState() == ShardSplitDonorStateEnum::kBlocking; + stateDocument.getState() >= ShardSplitDonorStateEnum::kBlocking; } Status validateRecipientNodesForShardSplit(const ShardSplitDonorDocument& stateDocument, @@ -306,20 +306,24 @@ RecipientAcceptSplitListener::RecipientAcceptSplitListener( void RecipientAcceptSplitListener::onServerHeartbeatSucceededEvent(const HostAndPort& hostAndPort, const BSONObj reply) { - if (_fulfilled.load() || !reply["setName"]) { + stdx::lock_guard lg(_mutex); + if (_fulfilled || !reply["setName"]) { return; } - stdx::lock_guard lg(_mutex); _reportedSetNames[hostAndPort] = reply["setName"].str(); + if (!_hasPrimary && reply["ismaster"].booleanSafe()) { + _hasPrimary = true; + } + auto allReportCorrectly = std::all_of(_reportedSetNames.begin(), _reportedSetNames.end(), [&](const auto& entry) { return entry.second == _recipientSetName; }) && _reportedSetNames.size() == _numberOfRecipient; - if (allReportCorrectly) { - _fulfilled.store(true); + if (allReportCorrectly && _hasPrimary) { + _fulfilled = true; _promise.emplaceValue(); } } -- cgit v1.2.1