diff options
author | Sviatlana Zuiko <sviatlana.zuiko@mongodb.com> | 2022-06-30 19:32:15 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-06-30 22:33:22 +0000 |
commit | ff5ce6771bd53616ed644ee794ba69c2fe6d91c3 (patch) | |
tree | d5d6b4ff5490b44085446dd5c0289dd2924ab656 /src/mongo/db/index/index_access_method.cpp | |
parent | 17f49ab8b16a6f45371771d8c152cfbf4ed186af (diff) | |
download | mongo-ff5ce6771bd53616ed644ee794ba69c2fe6d91c3.tar.gz |
Revert "SERVER-65481 Bulk shredding and loading for column store indexes"
This reverts commit cb9472afc30d32d1c18691d64899c1aa72cdc43d.
Diffstat (limited to 'src/mongo/db/index/index_access_method.cpp')
-rw-r--r-- | src/mongo/db/index/index_access_method.cpp | 110 |
1 files changed, 50 insertions, 60 deletions
diff --git a/src/mongo/db/index/index_access_method.cpp b/src/mongo/db/index/index_access_method.cpp index 0144e00d973..150558bfb69 100644 --- a/src/mongo/db/index/index_access_method.cpp +++ b/src/mongo/db/index/index_access_method.cpp @@ -50,6 +50,7 @@ #include "mongo/db/operation_context.h" #include "mongo/db/repl/replication_coordinator.h" #include "mongo/db/repl/timestamp_block.h" +#include "mongo/db/sorter/sorter.h" #include "mongo/db/storage/execution_context.h" #include "mongo/db/storage/storage_options.h" #include "mongo/logv2/log.h" @@ -127,12 +128,12 @@ bool isMultikeyFromPaths(const MultikeyPaths& multikeyPaths) { [](const MultikeyComponents& components) { return !components.empty(); }); } -SortOptions makeSortOptions(size_t maxMemoryUsageBytes, StringData dbName, SorterFileStats* stats) { +SortOptions makeSortOptions(size_t maxMemoryUsageBytes, StringData dbName) { return SortOptions() .TempDir(storageGlobalParams.dbpath + "/_tmp") .ExtSortAllowed() .MaxMemoryUsageBytes(maxMemoryUsageBytes) - .FileStats(stats) + .FileStats(&indexBulkBuilderSSS.sorterFileStats) .DBName(dbName.toString()); } @@ -609,51 +610,6 @@ Ident* SortedDataIndexAccessMethod::getIdentPtr() const { return this->_newInterface.get(); } -void IndexAccessMethod::BulkBuilder::countNewBuildInStats() { - indexBulkBuilderSSS.count.addAndFetch(1); -} - -void IndexAccessMethod::BulkBuilder::countResumedBuildInStats() { - indexBulkBuilderSSS.count.addAndFetch(1); - indexBulkBuilderSSS.resumed.addAndFetch(1); -} - -SorterFileStats* IndexAccessMethod::BulkBuilder::bulkBuilderFileStats() { - return &indexBulkBuilderSSS.sorterFileStats; -} - -void IndexAccessMethod::BulkBuilder::yield(OperationContext* opCtx, - const Yieldable* yieldable, - const NamespaceString& ns) { - // Releasing locks means a new snapshot should be acquired when restored. - opCtx->recoveryUnit()->abandonSnapshot(); - yieldable->yield(); - - auto locker = opCtx->lockState(); - Locker::LockSnapshot snapshot; - if (locker->saveLockStateAndUnlock(&snapshot)) { - - // Track the number of yields in CurOp. - CurOp::get(opCtx)->yielded(); - - auto failPointHang = [opCtx, &ns](FailPoint* fp) { - fp->executeIf( - [fp](auto&&) { - LOGV2(5180600, "Hanging index build during bulk load yield"); - fp->pauseWhileSet(); - }, - [opCtx, &ns](auto&& config) { - return config.getStringField("namespace") == ns.ns(); - }); - }; - failPointHang(&hangDuringIndexBuildBulkLoadYield); - failPointHang(&hangDuringIndexBuildBulkLoadYieldSecond); - - locker->restoreLockState(opCtx, snapshot); - } - yieldable->restore(); -} - class SortedDataIndexAccessMethod::BulkBuilderImpl final : public IndexAccessMethod::BulkBuilder { public: using Sorter = mongo::Sorter<KeyString::Value, mongo::NullValue>; @@ -690,6 +646,9 @@ public: IndexStateInfo persistDataForShutdown() final; private: + void _yield(OperationContext* opCtx, + const Yieldable* yieldable, + const NamespaceString& ns) const; void _insertMultikeyMetadataKeysIntoSorter(); Sorter* _makeSorter( @@ -730,7 +689,7 @@ SortedDataIndexAccessMethod::BulkBuilderImpl::BulkBuilderImpl(SortedDataIndexAcc size_t maxMemoryUsageBytes, StringData dbName) : _iam(iam), _sorter(_makeSorter(maxMemoryUsageBytes, dbName)) { - countNewBuildInStats(); + indexBulkBuilderSSS.count.addAndFetch(1); } SortedDataIndexAccessMethod::BulkBuilderImpl::BulkBuilderImpl(SortedDataIndexAccessMethod* iam, @@ -743,7 +702,8 @@ SortedDataIndexAccessMethod::BulkBuilderImpl::BulkBuilderImpl(SortedDataIndexAcc _keysInserted(stateInfo.getNumKeys().value_or(0)), _isMultiKey(stateInfo.getIsMultikey()), _indexMultikeyPaths(createMultikeyPaths(stateInfo.getMultikeyPaths())) { - countResumedBuildInStats(); + indexBulkBuilderSSS.count.addAndFetch(1); + indexBulkBuilderSSS.resumed.addAndFetch(1); } Status SortedDataIndexAccessMethod::BulkBuilderImpl::insert( @@ -865,16 +825,46 @@ SortedDataIndexAccessMethod::BulkBuilderImpl::_makeSorter( StringData dbName, boost::optional<StringData> fileName, const boost::optional<std::vector<SorterRange>>& ranges) const { - return fileName - ? Sorter::makeFromExistingRanges( - fileName->toString(), - *ranges, - makeSortOptions(maxMemoryUsageBytes, dbName, bulkBuilderFileStats()), - BtreeExternalSortComparison(), - _makeSorterSettings()) - : Sorter::make(makeSortOptions(maxMemoryUsageBytes, dbName, bulkBuilderFileStats()), - BtreeExternalSortComparison(), - _makeSorterSettings()); + return fileName ? Sorter::makeFromExistingRanges(fileName->toString(), + *ranges, + makeSortOptions(maxMemoryUsageBytes, dbName), + BtreeExternalSortComparison(), + _makeSorterSettings()) + : Sorter::make(makeSortOptions(maxMemoryUsageBytes, dbName), + BtreeExternalSortComparison(), + _makeSorterSettings()); +} + +void SortedDataIndexAccessMethod::BulkBuilderImpl::_yield(OperationContext* opCtx, + const Yieldable* yieldable, + const NamespaceString& ns) const { + // Releasing locks means a new snapshot should be acquired when restored. + opCtx->recoveryUnit()->abandonSnapshot(); + yieldable->yield(); + + auto locker = opCtx->lockState(); + Locker::LockSnapshot snapshot; + if (locker->saveLockStateAndUnlock(&snapshot)) { + + // Track the number of yields in CurOp. + CurOp::get(opCtx)->yielded(); + + auto failPointHang = [opCtx, &ns](FailPoint* fp) { + fp->executeIf( + [fp](auto&&) { + LOGV2(5180600, "Hanging index build during bulk load yield"); + fp->pauseWhileSet(); + }, + [opCtx, &ns](auto&& config) { + return config.getStringField("namespace") == ns.ns(); + }); + }; + failPointHang(&hangDuringIndexBuildBulkLoadYield); + failPointHang(&hangDuringIndexBuildBulkLoadYieldSecond); + + locker->restoreLockState(opCtx, snapshot); + } + yieldable->restore(); } Status SortedDataIndexAccessMethod::BulkBuilderImpl::commit( @@ -989,7 +979,7 @@ Status SortedDataIndexAccessMethod::BulkBuilderImpl::commit( // Starts yielding locks after the first non-zero 'yieldIterations' inserts. if (yieldIterations && (i + 1) % yieldIterations == 0) { - yield(opCtx, &collection, ns); + _yield(opCtx, &collection, ns); } // If we're here either it's a dup and we're cool with it or the addKey went just fine. |