diff options
author | Vishnu Kaushik <vishnu.kaushik@mongodb.com> | 2020-09-16 16:06:48 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-09-16 17:13:00 +0000 |
commit | cc248c4286d45eee06e2d66cdd52cd7cbae5b593 (patch) | |
tree | 98b3f9e21e9444c652db7b2c79c79edd813ce045 /src/mongo/db/index_builds_coordinator_mongod.cpp | |
parent | 31b68dc5a867db96e33a33fc8f4d3f2ceb22a9f9 (diff) | |
download | mongo-cc248c4286d45eee06e2d66cdd52cd7cbae5b593.tar.gz |
SERVER-48293 change update to upsert to mitigate race condition leading to orphaned system.indexBuilds
Diffstat (limited to 'src/mongo/db/index_builds_coordinator_mongod.cpp')
-rw-r--r-- | src/mongo/db/index_builds_coordinator_mongod.cpp | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/mongo/db/index_builds_coordinator_mongod.cpp b/src/mongo/db/index_builds_coordinator_mongod.cpp index f503f4f572d..89627a1f42e 100644 --- a/src/mongo/db/index_builds_coordinator_mongod.cpp +++ b/src/mongo/db/index_builds_coordinator_mongod.cpp @@ -391,8 +391,7 @@ Status IndexBuildsCoordinatorMongod::voteCommitIndexBuild(OperationContext* opCt // commit quorum on (i.e., commit value set as non-zero or a valid tag) and vice-versa. So, // after this point, it's not possible for the index build's commit quorum value to get updated // to CommitQuorumOptions::kDisabled. - - Status upsertStatus(ErrorCodes::InternalError, "Uninitialized value"); + Status persistStatus = Status::OK(); IndexBuildEntry indexbuildEntry( buildUUID, replState->collectionUUID, CommitQuorumOptions(), replState->indexNames); @@ -400,15 +399,16 @@ Status IndexBuildsCoordinatorMongod::voteCommitIndexBuild(OperationContext* opCt indexbuildEntry.setCommitReadyMembers(votersList); { - // Upserts doesn't need to acquire pbwm lock. + // Updates don't need to acquire pbwm lock. ShouldNotConflictWithSecondaryBatchApplicationBlock noPBWMBlock(opCtx->lockState()); - upsertStatus = indexbuildentryhelpers::persistCommitReadyMemberInfo(opCtx, indexbuildEntry); + persistStatus = + indexbuildentryhelpers::persistCommitReadyMemberInfo(opCtx, indexbuildEntry); } - if (upsertStatus.isOK()) { + if (persistStatus.isOK()) { _signalIfCommitQuorumIsSatisfied(opCtx, replState); } - return upsertStatus; + return persistStatus; } void IndexBuildsCoordinatorMongod::setSignalAndCancelVoteRequestCbkIfActive( |