summaryrefslogtreecommitdiff
path: root/src/mongo/db/index/index_build_interceptor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/index/index_build_interceptor.cpp')
-rw-r--r--src/mongo/db/index/index_build_interceptor.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/mongo/db/index/index_build_interceptor.cpp b/src/mongo/db/index/index_build_interceptor.cpp
index f569fc00e46..12f339894f6 100644
--- a/src/mongo/db/index/index_build_interceptor.cpp
+++ b/src/mongo/db/index/index_build_interceptor.cpp
@@ -53,14 +53,14 @@
namespace mongo {
namespace {
-void checkDrainPhaseFailPoint(FailPoint* fp, long long iteration) {
+void checkDrainPhaseFailPoint(OperationContext* opCtx, FailPoint* fp, long long iteration) {
fp->executeIf(
[=](const BSONObj& data) {
LOGV2(4841800,
"Hanging index build during drain writes phase",
"iteration"_attr = iteration);
- fp->pauseWhileSet();
+ fp->pauseWhileSet(opCtx);
},
[iteration](const BSONObj& data) { return iteration == data["iteration"].numberLong(); });
}
@@ -115,12 +115,13 @@ IndexBuildInterceptor::IndexBuildInterceptor(OperationContext* opCtx,
boost::optional<StringData> duplicateKeyTrackerIdent,
boost::optional<StringData> skippedRecordTrackerIdent)
: _indexCatalogEntry(entry),
+ _sideWritesTable(
+ opCtx->getServiceContext()->getStorageEngine()->makeTemporaryRecordStoreFromExistingIdent(
+ opCtx, sideWritesIdent)),
_skippedRecordTracker(opCtx, entry, skippedRecordTrackerIdent),
- _sideWritesCounter(std::make_shared<AtomicWord<long long>>()) {
+ _sideWritesCounter(
+ std::make_shared<AtomicWord<long long>>(_sideWritesTable->rs()->numRecords(opCtx))) {
- _sideWritesTable =
- opCtx->getServiceContext()->getStorageEngine()->makeTemporaryRecordStoreFromExistingIdent(
- opCtx, sideWritesIdent);
auto finalizeTableOnFailure = makeGuard([&] {
_sideWritesTable->finalizeTemporaryTable(opCtx,
TemporaryRecordStore::FinalizationAction::kDelete);
@@ -241,8 +242,8 @@ Status IndexBuildInterceptor::drainWritesIntoIndex(OperationContext* opCtx,
}
const long long iteration = _numApplied + batchSize;
- checkDrainPhaseFailPoint(&hangIndexBuildDuringDrainWritesPhase, iteration);
- checkDrainPhaseFailPoint(&hangIndexBuildDuringDrainWritesPhaseSecond, iteration);
+ checkDrainPhaseFailPoint(opCtx, &hangIndexBuildDuringDrainWritesPhase, iteration);
+ checkDrainPhaseFailPoint(opCtx, &hangIndexBuildDuringDrainWritesPhaseSecond, iteration);
batchSize += 1;
batchSizeBytes += objSize;