diff options
author | Henrik Edin <henrik.edin@mongodb.com> | 2021-11-01 20:27:51 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-11-01 21:22:52 +0000 |
commit | 5d1078c60e8f24e027dc72d7ceeac4dab49908b9 (patch) | |
tree | 0d81f98332343167a56a7c350f1f3deb8c6da2a7 /src/mongo | |
parent | 8ac4553c3d5c7509ea708c31a7f0232b2b3d4f4f (diff) | |
download | mongo-5d1078c60e8f24e027dc72d7ceeac4dab49908b9.tar.gz |
SERVER-61094 Use a dedicated pooled KeyString builder per index
This avoids underlying SharedBuffer to be shared for KeyString for
separate indexes. Allows indexes that need to spill to disk to
independently free memory instead of being pinned by unrelated other
indexes.
Diffstat (limited to 'src/mongo')
-rw-r--r-- | src/mongo/db/catalog/index_build_block.cpp | 10 | ||||
-rw-r--r-- | src/mongo/db/catalog/index_build_block.h | 9 | ||||
-rw-r--r-- | src/mongo/db/catalog/index_catalog_impl.cpp | 6 | ||||
-rw-r--r-- | src/mongo/db/catalog/multi_index_block.cpp | 1 | ||||
-rw-r--r-- | src/mongo/db/catalog/validate_adaptor.cpp | 13 | ||||
-rw-r--r-- | src/mongo/db/exec/working_set_common.cpp | 3 | ||||
-rw-r--r-- | src/mongo/db/index/index_access_method.cpp | 17 | ||||
-rw-r--r-- | src/mongo/db/index/index_access_method.h | 3 | ||||
-rw-r--r-- | src/mongo/db/index/skipped_record_tracker.cpp | 11 | ||||
-rw-r--r-- | src/mongo/db/query/sbe_stage_builder.cpp | 4 | ||||
-rw-r--r-- | src/mongo/db/storage/execution_context.cpp | 6 | ||||
-rw-r--r-- | src/mongo/db/storage/execution_context.h | 6 | ||||
-rw-r--r-- | src/mongo/dbtests/validate_tests.cpp | 62 |
13 files changed, 91 insertions, 60 deletions
diff --git a/src/mongo/db/catalog/index_build_block.cpp b/src/mongo/db/catalog/index_build_block.cpp index 5ab08b553f4..463ad2b88a7 100644 --- a/src/mongo/db/catalog/index_build_block.cpp +++ b/src/mongo/db/catalog/index_build_block.cpp @@ -45,6 +45,7 @@ #include "mongo/db/query/collection_index_usage_tracker_decoration.h" #include "mongo/db/query/collection_query_info.h" #include "mongo/db/storage/durable_catalog.h" +#include "mongo/db/storage/storage_parameters_gen.h" #include "mongo/db/ttl_collection_cache.h" #include "mongo/db/vector_clock.h" #include "mongo/logv2/log.h" @@ -58,7 +59,14 @@ IndexBuildBlock::IndexBuildBlock(const NamespaceString& nss, const BSONObj& spec, IndexBuildMethod method, boost::optional<UUID> indexBuildUUID) - : _nss(nss), _spec(spec.getOwned()), _method(method), _buildUUID(indexBuildUUID) {} + : _nss(nss), + _spec(spec.getOwned()), + _method(method), + _buildUUID(indexBuildUUID), + _pooledBuilder( + gOperationMemoryPoolBlockInitialSizeKB.loadRelaxed() * static_cast<size_t>(1024), + SharedBufferFragmentBuilder::DoubleGrowStrategy( + gOperationMemoryPoolBlockMaxSizeKB.loadRelaxed() * static_cast<size_t>(1024))) {} void IndexBuildBlock::keepTemporaryTables() { if (_indexBuildInterceptor) { diff --git a/src/mongo/db/catalog/index_build_block.h b/src/mongo/db/catalog/index_build_block.h index b1086aac5ed..48d0f6e49af 100644 --- a/src/mongo/db/catalog/index_build_block.h +++ b/src/mongo/db/catalog/index_build_block.h @@ -111,6 +111,13 @@ public: return _spec; } + /** + * Returns a memory pool for creating temporary objects for this index build. + */ + SharedBufferFragmentBuilder& getPooledBuilder() { + return _pooledBuilder; + } + private: void _completeInit(OperationContext* opCtx, Collection* collection); @@ -124,5 +131,7 @@ private: std::string _indexNamespace; std::unique_ptr<IndexBuildInterceptor> _indexBuildInterceptor; + + SharedBufferFragmentBuilder _pooledBuilder; }; } // namespace mongo diff --git a/src/mongo/db/catalog/index_catalog_impl.cpp b/src/mongo/db/catalog/index_catalog_impl.cpp index 325014761dc..1bc87aee0e6 100644 --- a/src/mongo/db/catalog/index_catalog_impl.cpp +++ b/src/mongo/db/catalog/index_catalog_impl.cpp @@ -1420,6 +1420,7 @@ Status IndexCatalogImpl::_indexFilteredRecords(OperationContext* opCtx, const IndexCatalogEntry* index, const std::vector<BsonRecord>& bsonRecords, int64_t* keysInsertedOut) const { + SharedBufferFragmentBuilder pooledBuilder(KeyString::HeapBuilder::kHeapAllocatorDefaultBytes); auto& executionCtx = StorageExecutionContext::get(opCtx); InsertDeleteOptions options; @@ -1440,7 +1441,7 @@ Status IndexCatalogImpl::_indexFilteredRecords(OperationContext* opCtx, index->accessMethod()->getKeys(opCtx, coll, - executionCtx.pooledBufferBuilder(), + pooledBuilder, *bsonRecord.docPtr, options.getKeysMode, IndexAccessMethod::GetKeysContext::kAddingKeys, @@ -1605,6 +1606,7 @@ void IndexCatalogImpl::_unindexRecord(OperationContext* opCtx, const RecordId& loc, bool logIfError, int64_t* keysDeletedOut) const { + SharedBufferFragmentBuilder pooledBuilder(KeyString::HeapBuilder::kHeapAllocatorDefaultBytes); auto& executionCtx = StorageExecutionContext::get(opCtx); // There's no need to compute the prefixes of the indexed fields that cause the index to be @@ -1613,7 +1615,7 @@ void IndexCatalogImpl::_unindexRecord(OperationContext* opCtx, auto keys = executionCtx.keys(); entry->accessMethod()->getKeys(opCtx, collection, - executionCtx.pooledBufferBuilder(), + pooledBuilder, obj, IndexAccessMethod::GetKeysMode::kRelaxConstraintsUnfiltered, IndexAccessMethod::GetKeysContext::kRemovingKeys, diff --git a/src/mongo/db/catalog/multi_index_block.cpp b/src/mongo/db/catalog/multi_index_block.cpp index 2d4bf748a29..bcfc70b604d 100644 --- a/src/mongo/db/catalog/multi_index_block.cpp +++ b/src/mongo/db/catalog/multi_index_block.cpp @@ -719,6 +719,7 @@ Status MultiIndexBlock::_insert(OperationContext* opCtx, try { idxStatus = _indexes[i].bulk->insert(opCtx, collection, + _indexes[i].block->getPooledBuilder(), doc, loc, _indexes[i].options, diff --git a/src/mongo/db/catalog/validate_adaptor.cpp b/src/mongo/db/catalog/validate_adaptor.cpp index f1e0ae2901b..2ca946b753c 100644 --- a/src/mongo/db/catalog/validate_adaptor.cpp +++ b/src/mongo/db/catalog/validate_adaptor.cpp @@ -128,6 +128,7 @@ Status ValidateAdaptor::validateRecord(OperationContext* opCtx, } auto& executionCtx = StorageExecutionContext::get(opCtx); + SharedBufferFragmentBuilder pool(KeyString::HeapBuilder::kHeapAllocatorDefaultBytes); for (const auto& index : _validateState->getIndexes()) { const IndexDescriptor* descriptor = index->descriptor(); @@ -142,7 +143,7 @@ Status ValidateAdaptor::validateRecord(OperationContext* opCtx, iam->getKeys(opCtx, coll, - executionCtx.pooledBufferBuilder(), + pool, recordBson, IndexAccessMethod::GetKeysMode::kEnforceConstraints, IndexAccessMethod::GetKeysContext::kAddingKeys, @@ -318,13 +319,9 @@ void ValidateAdaptor::traverseIndex(OperationContext* opCtx, const KeyString::Version version = index->accessMethod()->getSortedDataInterface()->getKeyStringVersion(); - auto& executionCtx = StorageExecutionContext::get(opCtx); - KeyString::PooledBuilder firstKeyStringBuilder(executionCtx.pooledBufferBuilder(), - version, - BSONObj(), - indexInfo.ord, - KeyString::Discriminator::kExclusiveBefore); - KeyString::Value firstKeyString = firstKeyStringBuilder.release(); + KeyString::Builder firstKeyStringBuilder( + version, BSONObj(), indexInfo.ord, KeyString::Discriminator::kExclusiveBefore); + KeyString::Value firstKeyString = firstKeyStringBuilder.getValueCopy(); KeyString::Value prevIndexKeyStringValue; // Ensure that this index has an open index cursor. diff --git a/src/mongo/db/exec/working_set_common.cpp b/src/mongo/db/exec/working_set_common.cpp index fc0d26ab71d..f2e38b0fa5a 100644 --- a/src/mongo/db/exec/working_set_common.cpp +++ b/src/mongo/db/exec/working_set_common.cpp @@ -140,6 +140,7 @@ bool WorkingSetCommon::fetch(OperationContext* opCtx, } auto keys = executionCtx.keys(); + SharedBufferFragmentBuilder pool(KeyString::HeapBuilder::kHeapAllocatorDefaultBytes); // There's no need to compute the prefixes of the indexed fields that cause the // index to be multikey when ensuring the keyData is still valid. KeyStringSet* multikeyMetadataKeys = nullptr; @@ -147,7 +148,7 @@ bool WorkingSetCommon::fetch(OperationContext* opCtx, auto* iam = workingSet->retrieveIndexAccessMethod(memberKey.indexId); iam->getKeys(opCtx, collection, - executionCtx.pooledBufferBuilder(), + pool, member->doc.value().toBson(), IndexAccessMethod::GetKeysMode::kEnforceConstraints, IndexAccessMethod::GetKeysContext::kValidatingKeys, diff --git a/src/mongo/db/index/index_access_method.cpp b/src/mongo/db/index/index_access_method.cpp index dec7fc3ca28..7e71b8a7bd3 100644 --- a/src/mongo/db/index/index_access_method.cpp +++ b/src/mongo/db/index/index_access_method.cpp @@ -120,6 +120,7 @@ AbstractIndexAccessMethod::AbstractIndexAccessMethod(const IndexCatalogEntry* bt // Find the keys for obj, put them in the tree pointing to loc. Status AbstractIndexAccessMethod::insert(OperationContext* opCtx, + SharedBufferFragmentBuilder& pooledBufferBuilder, const CollectionPtr& coll, const BSONObj& obj, const RecordId& loc, @@ -136,7 +137,7 @@ Status AbstractIndexAccessMethod::insert(OperationContext* opCtx, getKeys(opCtx, coll, - executionCtx.pooledBufferBuilder(), + pooledBufferBuilder, obj, options.getKeysMode, GetKeysContext::kAddingKeys, @@ -276,6 +277,8 @@ RecordId AbstractIndexAccessMethod::findSingle(OperationContext* opCtx, KeyString::Value actualKey = [&]() { if (_indexCatalogEntry->getCollator()) { // For performance, call get keys only if there is a non-simple collation. + SharedBufferFragmentBuilder pooledBuilder( + KeyString::HeapBuilder::kHeapAllocatorDefaultBytes); auto& executionCtx = StorageExecutionContext::get(opCtx); auto keys = executionCtx.keys(); KeyStringSet* multikeyMetadataKeys = nullptr; @@ -283,7 +286,7 @@ RecordId AbstractIndexAccessMethod::findSingle(OperationContext* opCtx, getKeys(opCtx, collection, - executionCtx.pooledBufferBuilder(), + pooledBuilder, requestedKey, GetKeysMode::kEnforceConstraints, GetKeysContext::kAddingKeys, @@ -391,7 +394,7 @@ void AbstractIndexAccessMethod::prepareUpdate(OperationContext* opCtx, const RecordId& record, const InsertDeleteOptions& options, UpdateTicket* ticket) const { - auto& executionCtx = StorageExecutionContext::get(opCtx); + SharedBufferFragmentBuilder pooledBuilder(KeyString::HeapBuilder::kHeapAllocatorDefaultBytes); const MatchExpression* indexFilter = index->getFilterExpression(); if (!indexFilter || indexFilter->matchesBSON(from)) { // Override key constraints when generating keys for removal. This only applies to keys @@ -405,7 +408,7 @@ void AbstractIndexAccessMethod::prepareUpdate(OperationContext* opCtx, // metadata isn't updated when keys are deleted. getKeys(opCtx, collection, - executionCtx.pooledBufferBuilder(), + pooledBuilder, from, getKeysMode, GetKeysContext::kRemovingKeys, @@ -419,7 +422,7 @@ void AbstractIndexAccessMethod::prepareUpdate(OperationContext* opCtx, if (!indexFilter || indexFilter->matchesBSON(to)) { getKeys(opCtx, collection, - executionCtx.pooledBufferBuilder(), + pooledBuilder, to, options.getKeysMode, GetKeysContext::kAddingKeys, @@ -499,6 +502,7 @@ public: Status insert(OperationContext* opCtx, const CollectionPtr& collection, + SharedBufferFragmentBuilder& pooledBuilder, const BSONObj& obj, const RecordId& loc, const InsertDeleteOptions& options, @@ -576,6 +580,7 @@ AbstractIndexAccessMethod::BulkBuilderImpl::BulkBuilderImpl(const IndexCatalogEn Status AbstractIndexAccessMethod::BulkBuilderImpl::insert( OperationContext* opCtx, const CollectionPtr& collection, + SharedBufferFragmentBuilder& pooledBuilder, const BSONObj& obj, const RecordId& loc, const InsertDeleteOptions& options, @@ -590,7 +595,7 @@ Status AbstractIndexAccessMethod::BulkBuilderImpl::insert( _indexCatalogEntry->accessMethod()->getKeys( opCtx, collection, - executionCtx.pooledBufferBuilder(), + pooledBuilder, obj, options.getKeysMode, GetKeysContext::kAddingKeys, diff --git a/src/mongo/db/index/index_access_method.h b/src/mongo/db/index/index_access_method.h index 9ef5f340947..3a650b7f1de 100644 --- a/src/mongo/db/index/index_access_method.h +++ b/src/mongo/db/index/index_access_method.h @@ -88,6 +88,7 @@ public: * The behavior of the insertion can be specified through 'options'. */ virtual Status insert(OperationContext* opCtx, + SharedBufferFragmentBuilder& pooledBufferBuilder, const CollectionPtr& coll, const BSONObj& obj, const RecordId& loc, @@ -253,6 +254,7 @@ public: */ virtual Status insert(OperationContext* opCtx, const CollectionPtr& collection, + SharedBufferFragmentBuilder& pooledBuilder, const BSONObj& obj, const RecordId& loc, const InsertDeleteOptions& options, @@ -478,6 +480,7 @@ public: std::unique_ptr<SortedDataInterface> btree); Status insert(OperationContext* opCtx, + SharedBufferFragmentBuilder& pooledBufferBuilder, const CollectionPtr& coll, const BSONObj& obj, const RecordId& loc, diff --git a/src/mongo/db/index/skipped_record_tracker.cpp b/src/mongo/db/index/skipped_record_tracker.cpp index f6bbbf18c9a..52b1de46ea8 100644 --- a/src/mongo/db/index/skipped_record_tracker.cpp +++ b/src/mongo/db/index/skipped_record_tracker.cpp @@ -133,6 +133,7 @@ Status SkippedRecordTracker::retrySkippedRecords(OperationContext* opCtx, CurOp::get(opCtx)->setProgress_inlock(curopMessage, _skippedRecordCounter.load(), 1)); } + SharedBufferFragmentBuilder pooledBuilder(KeyString::HeapBuilder::kHeapAllocatorDefaultBytes); auto recordStore = _skippedRecordsTable->rs(); auto cursor = recordStore->getCursor(opCtx); int resolved = 0; @@ -158,8 +159,14 @@ Status SkippedRecordTracker::retrySkippedRecords(OperationContext* opCtx, // Because constraint enforcement is set, this will throw if there are any indexing // errors, instead of writing back to the skipped records table, which would // normally happen if constraints were relaxed. - auto status = _indexCatalogEntry->accessMethod()->insert( - opCtx, collection, skippedDoc, skippedRecordId, options, nullptr, nullptr); + auto status = _indexCatalogEntry->accessMethod()->insert(opCtx, + pooledBuilder, + collection, + skippedDoc, + skippedRecordId, + options, + nullptr, + nullptr); if (!status.isOK()) { return status; } diff --git a/src/mongo/db/query/sbe_stage_builder.cpp b/src/mongo/db/query/sbe_stage_builder.cpp index 83a9fda3500..ac5ce09aab0 100644 --- a/src/mongo/db/query/sbe_stage_builder.cpp +++ b/src/mongo/db/query/sbe_stage_builder.cpp @@ -585,6 +585,8 @@ bool indexKeyConsistencyCheckCallback(OperationContext* opCtx, auto& executionCtx = StorageExecutionContext::get(opCtx); auto keys = executionCtx.keys(); + SharedBufferFragmentBuilder pooledBuilder( + KeyString::HeapBuilder::kHeapAllocatorDefaultBytes); // There's no need to compute the prefixes of the indexed fields that cause the // index to be multikey when ensuring the keyData is still valid. @@ -593,7 +595,7 @@ bool indexKeyConsistencyCheckCallback(OperationContext* opCtx, iam->getKeys(opCtx, collection, - executionCtx.pooledBufferBuilder(), + pooledBuilder, nextRecord.data.toBson(), IndexAccessMethod::GetKeysMode::kEnforceConstraints, IndexAccessMethod::GetKeysContext::kValidatingKeys, diff --git a/src/mongo/db/storage/execution_context.cpp b/src/mongo/db/storage/execution_context.cpp index b6035493734..a18cd3edc16 100644 --- a/src/mongo/db/storage/execution_context.cpp +++ b/src/mongo/db/storage/execution_context.cpp @@ -34,10 +34,6 @@ namespace mongo { const OperationContext::Decoration<StorageExecutionContext> StorageExecutionContext::get = OperationContext::declareDecoration<StorageExecutionContext>(); -StorageExecutionContext::StorageExecutionContext() - : _pooledBufferBuilder( - gOperationMemoryPoolBlockInitialSizeKB.loadRelaxed() * static_cast<size_t>(1024), - SharedBufferFragmentBuilder::DoubleGrowStrategy( - gOperationMemoryPoolBlockMaxSizeKB.loadRelaxed() * static_cast<size_t>(1024))) {} +StorageExecutionContext::StorageExecutionContext() {} } // namespace mongo diff --git a/src/mongo/db/storage/execution_context.h b/src/mongo/db/storage/execution_context.h index 962eeffe4e5..28479f833b9 100644 --- a/src/mongo/db/storage/execution_context.h +++ b/src/mongo/db/storage/execution_context.h @@ -33,7 +33,6 @@ #include "mongo/db/operation_context.h" #include "mongo/db/storage/key_string.h" #include "mongo/util/auto_clear_ptr.h" -#include "mongo/util/shared_buffer_fragment.h" namespace mongo { @@ -53,10 +52,6 @@ public: StorageExecutionContext& operator=(const StorageExecutionContext&) = delete; StorageExecutionContext& operator=(StorageExecutionContext&&) = delete; - SharedBufferFragmentBuilder& pooledBufferBuilder() { - return _pooledBufferBuilder; - } - AutoClearPtr<KeyStringSet> keys() { return makeAutoClearPtr(&_keys); } @@ -68,7 +63,6 @@ public: } private: - SharedBufferFragmentBuilder _pooledBufferBuilder; KeyStringSet _keys; KeyStringSet _multikeyMetadataKeys; MultikeyPaths _multikeyPaths; diff --git a/src/mongo/dbtests/validate_tests.cpp b/src/mongo/dbtests/validate_tests.cpp index 60f4fd089c0..859348bd8d2 100644 --- a/src/mongo/dbtests/validate_tests.cpp +++ b/src/mongo/dbtests/validate_tests.cpp @@ -809,7 +809,8 @@ public: return; } - auto& executionCtx = StorageExecutionContext::get(&_opCtx); + SharedBufferFragmentBuilder pooledBuilder( + KeyString::HeapBuilder::kHeapAllocatorDefaultBytes); // Create a new collection, insert three records and check it's valid. lockDb(MODE_X); @@ -863,7 +864,7 @@ public: KeyStringSet keys; iam->getKeys(&_opCtx, coll, - executionCtx.pooledBufferBuilder(), + pooledBuilder, actualKey, IndexAccessMethod::GetKeysMode::kRelaxConstraintsUnfiltered, IndexAccessMethod::GetKeysContext::kAddingKeys, @@ -875,8 +876,8 @@ public: auto removeStatus = iam->removeKeys(&_opCtx, {keys.begin(), keys.end()}, id1, options, &numDeleted); - auto insertStatus = - iam->insert(&_opCtx, coll, badKey, id1, options, nullptr, &numInserted); + auto insertStatus = iam->insert( + &_opCtx, pooledBuilder, coll, badKey, id1, options, nullptr, &numInserted); ASSERT_EQUALS(numDeleted, 1); ASSERT_EQUALS(numInserted, 1); @@ -1207,7 +1208,8 @@ public: return; } - auto& executionCtx = StorageExecutionContext::get(&_opCtx); + SharedBufferFragmentBuilder pooledBuilder( + KeyString::HeapBuilder::kHeapAllocatorDefaultBytes); // Create a new collection. lockDb(MODE_X); @@ -1267,7 +1269,7 @@ public: KeyStringSet keys; iam->getKeys(&_opCtx, coll, - executionCtx.pooledBufferBuilder(), + pooledBuilder, actualKey, IndexAccessMethod::GetKeysMode::kRelaxConstraintsUnfiltered, IndexAccessMethod::GetKeysContext::kRemovingKeys, @@ -1591,7 +1593,8 @@ public: ValidateMissingIndexEntryRepair() : ValidateBase(/*full=*/false, /*background=*/false) {} void run() { - auto& executionCtx = StorageExecutionContext::get(&_opCtx); + SharedBufferFragmentBuilder pooledBuilder( + KeyString::HeapBuilder::kHeapAllocatorDefaultBytes); // Create a new collection. lockDb(MODE_X); @@ -1651,7 +1654,7 @@ public: KeyStringSet keys; iam->getKeys(&_opCtx, coll, - executionCtx.pooledBufferBuilder(), + pooledBuilder, actualKey, IndexAccessMethod::GetKeysMode::kRelaxConstraintsUnfiltered, IndexAccessMethod::GetKeysContext::kRemovingKeys, @@ -1926,7 +1929,8 @@ public: : ValidateBase(/*full=*/false, /*background=*/false) {} void run() { - auto& executionCtx = StorageExecutionContext::get(&_opCtx); + SharedBufferFragmentBuilder pooledBuilder( + KeyString::HeapBuilder::kHeapAllocatorDefaultBytes); // Create a new collection and insert a document. lockDb(MODE_X); @@ -1998,7 +2002,7 @@ public: KeyStringSet keys; iam->getKeys(&_opCtx, coll, - executionCtx.pooledBufferBuilder(), + pooledBuilder, dupObj, IndexAccessMethod::GetKeysMode::kRelaxConstraints, IndexAccessMethod::GetKeysContext::kAddingKeys, @@ -2049,7 +2053,7 @@ public: KeyStringSet keys; iam->getKeys(&_opCtx, coll, - executionCtx.pooledBufferBuilder(), + pooledBuilder, actualKey, IndexAccessMethod::GetKeysMode::kRelaxConstraintsUnfiltered, IndexAccessMethod::GetKeysContext::kRemovingKeys, @@ -2140,8 +2144,8 @@ public: : ValidateBase(/*full=*/false, /*background=*/false) {} void run() { - - auto& executionCtx = StorageExecutionContext::get(&_opCtx); + SharedBufferFragmentBuilder pooledBuilder( + KeyString::HeapBuilder::kHeapAllocatorDefaultBytes); // Create a new collection and insert non-multikey document. lockDb(MODE_X); @@ -2188,7 +2192,7 @@ public: KeyStringSet keys; iam->getKeys(&_opCtx, coll, - executionCtx.pooledBufferBuilder(), + pooledBuilder, doc, IndexAccessMethod::GetKeysMode::kRelaxConstraintsUnfiltered, IndexAccessMethod::GetKeysContext::kRemovingKeys, @@ -2321,7 +2325,8 @@ public: ValidateDuplicateDocumentIndexKeySet() : ValidateBase(/*full=*/false, /*background=*/false) {} void run() { - auto& executionCtx = StorageExecutionContext::get(&_opCtx); + SharedBufferFragmentBuilder pooledBuilder( + KeyString::HeapBuilder::kHeapAllocatorDefaultBytes); // Create a new collection. lockDb(MODE_X); @@ -2393,7 +2398,7 @@ public: KeyStringSet keys; iam->getKeys(&_opCtx, coll, - executionCtx.pooledBufferBuilder(), + pooledBuilder, actualKey, IndexAccessMethod::GetKeysMode::kRelaxConstraintsUnfiltered, IndexAccessMethod::GetKeysContext::kRemovingKeys, @@ -2432,7 +2437,7 @@ public: KeyStringSet keys; iam->getKeys(&_opCtx, coll, - executionCtx.pooledBufferBuilder(), + pooledBuilder, actualKey, IndexAccessMethod::GetKeysMode::kRelaxConstraintsUnfiltered, IndexAccessMethod::GetKeysContext::kRemovingKeys, @@ -2469,7 +2474,8 @@ public: return; } - auto& executionCtx = StorageExecutionContext::get(&_opCtx); + SharedBufferFragmentBuilder pooledBuilder( + KeyString::HeapBuilder::kHeapAllocatorDefaultBytes); // Create a new collection. lockDb(MODE_X); @@ -2547,7 +2553,7 @@ public: KeyStringSet keys; iam->getKeys(&_opCtx, coll, - executionCtx.pooledBufferBuilder(), + pooledBuilder, dupObj, IndexAccessMethod::GetKeysMode::kRelaxConstraints, IndexAccessMethod::GetKeysContext::kAddingKeys, @@ -2594,7 +2600,7 @@ public: KeyStringSet keys; iam->getKeys(&_opCtx, coll, - executionCtx.pooledBufferBuilder(), + pooledBuilder, dupObj, IndexAccessMethod::GetKeysMode::kRelaxConstraints, IndexAccessMethod::GetKeysContext::kAddingKeys, @@ -2892,8 +2898,8 @@ public: ValidateIndexWithMultikeyDocRepair() : ValidateBase(/*full=*/false, /*background=*/false) {} void run() { - - auto& executionCtx = StorageExecutionContext::get(&_opCtx); + SharedBufferFragmentBuilder pooledBuilder( + KeyString::HeapBuilder::kHeapAllocatorDefaultBytes); // Create a new collection and insert non-multikey document. lockDb(MODE_X); @@ -2940,7 +2946,7 @@ public: KeyStringSet keys; iam->getKeys(&_opCtx, coll, - executionCtx.pooledBufferBuilder(), + pooledBuilder, doc, IndexAccessMethod::GetKeysMode::kRelaxConstraintsUnfiltered, IndexAccessMethod::GetKeysContext::kRemovingKeys, @@ -2976,7 +2982,7 @@ public: MultikeyPaths multikeyPaths; iam->getKeys(&_opCtx, coll, - executionCtx.pooledBufferBuilder(), + pooledBuilder, mkDoc, IndexAccessMethod::GetKeysMode::kRelaxConstraintsUnfiltered, IndexAccessMethod::GetKeysContext::kAddingKeys, @@ -3118,8 +3124,8 @@ public: ValidateMultikeyPathCoverageRepair() : ValidateBase(/*full=*/false, /*background=*/false) {} void run() { - - auto& executionCtx = StorageExecutionContext::get(&_opCtx); + SharedBufferFragmentBuilder pooledBuilder( + KeyString::HeapBuilder::kHeapAllocatorDefaultBytes); // Create a new collection and insert multikey document. lockDb(MODE_X); @@ -3169,7 +3175,7 @@ public: KeyStringSet keys; iam->getKeys(&_opCtx, coll, - executionCtx.pooledBufferBuilder(), + pooledBuilder, doc1, IndexAccessMethod::GetKeysMode::kRelaxConstraintsUnfiltered, IndexAccessMethod::GetKeysContext::kRemovingKeys, @@ -3206,7 +3212,7 @@ public: KeyStringSet keys; iam->getKeys(&_opCtx, coll, - executionCtx.pooledBufferBuilder(), + pooledBuilder, doc2, IndexAccessMethod::GetKeysMode::kRelaxConstraintsUnfiltered, IndexAccessMethod::GetKeysContext::kAddingKeys, |