diff options
6 files changed, 12 insertions, 5 deletions
diff --git a/jstests/noPassthrough/auth_reject_mismatching_logical_times.js b/jstests/noPassthrough/auth_reject_mismatching_logical_times.js index 6fdf4a17a44..13b971c7bc5 100644 --- a/jstests/noPassthrough/auth_reject_mismatching_logical_times.js +++ b/jstests/noPassthrough/auth_reject_mismatching_logical_times.js @@ -4,7 +4,6 @@ * @tags: [ * requires_replication, * requires_sharding, - * two_phase_index_builds_unsupported, * ] */ (function() { diff --git a/jstests/noPassthrough/backup_restore_fsync_lock.js b/jstests/noPassthrough/backup_restore_fsync_lock.js index 2f0eeab6f84..f6f720377aa 100644 --- a/jstests/noPassthrough/backup_restore_fsync_lock.js +++ b/jstests/noPassthrough/backup_restore_fsync_lock.js @@ -14,7 +14,6 @@ * @tags: [ * requires_persistence, * requires_replication, - * two_phase_index_builds_unsupported, * ] */ diff --git a/jstests/noPassthrough/backup_restore_rolling.js b/jstests/noPassthrough/backup_restore_rolling.js index e6ac0e69188..63f6b1a7cd2 100644 --- a/jstests/noPassthrough/backup_restore_rolling.js +++ b/jstests/noPassthrough/backup_restore_rolling.js @@ -14,7 +14,6 @@ * @tags: [ * requires_persistence, * requires_wiredtiger, - * two_phase_index_builds_unsupported, * ] */ diff --git a/jstests/noPassthrough/backup_restore_stop_start.js b/jstests/noPassthrough/backup_restore_stop_start.js index 8ef9e9e30e1..2598b8670ab 100644 --- a/jstests/noPassthrough/backup_restore_stop_start.js +++ b/jstests/noPassthrough/backup_restore_stop_start.js @@ -14,7 +14,6 @@ * @tags: [ * requires_persistence, * requires_replication, - * two_phase_index_builds_unsupported, * ] */ diff --git a/jstests/noPassthrough/comment_field_passthrough.js b/jstests/noPassthrough/comment_field_passthrough.js index 13fe13b4cbf..6e00d61f360 100644 --- a/jstests/noPassthrough/comment_field_passthrough.js +++ b/jstests/noPassthrough/comment_field_passthrough.js @@ -7,7 +7,6 @@ * requires_replication, * requires_sharding, * requires_wiredtiger, - * two_phase_index_builds_unsupported, * ] */ (function() { diff --git a/src/mongo/db/index_builds_coordinator.cpp b/src/mongo/db/index_builds_coordinator.cpp index 964ddc13942..6b7c49a9a6a 100644 --- a/src/mongo/db/index_builds_coordinator.cpp +++ b/src/mongo/db/index_builds_coordinator.cpp @@ -1015,6 +1015,18 @@ void IndexBuildsCoordinator::_buildIndex( if (supportsTwoPhaseIndexBuild() && indexBuildOptions.replSetAndNotPrimary && IndexBuildProtocol::kTwoPhase == replState->protocol) { + + log() << "Index build waiting for commit or abort before completing final phase: " + << replState->buildUUID; + + // Yield locks and storage engine resources before blocking. + opCtx->recoveryUnit()->abandonSnapshot(); + Lock::TempRelease release(opCtx->lockState()); + invariant(!opCtx->lockState()->isLocked(), + str::stream() + << "failed to yield locks for index build while waiting for commit or abort: " + << replState->buildUUID); + stdx::unique_lock<Latch> lk(replState->mutex); auto isReadyToCommitOrAbort = [rs = replState] { return rs->isCommitReady || rs->aborted; }; opCtx->waitForConditionOrInterrupt(replState->condVar, lk, isReadyToCommitOrAbort); |