diff options
author | Varun Ravichandran <varun.ravichandran@mongodb.com> | 2021-01-08 02:18:10 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-01-20 19:28:03 +0000 |
commit | 45a54bbac81ff1146f307afb2d04c94c694a1163 (patch) | |
tree | 7aae292c66cab6bedf43d89d6db7f07122788cce /src/mongo/db/index | |
parent | 6308db5c83a3e95f4532c63df8b635b8090036ae (diff) | |
download | mongo-45a54bbac81ff1146f307afb2d04c94c694a1163.tar.gz |
SERVER-50644, SERVER-50479: Add resumable index build support for ESE by using persistent key for Sorter temp file encryption
Diffstat (limited to 'src/mongo/db/index')
-rw-r--r-- | src/mongo/db/index/index_access_method.cpp | 38 | ||||
-rw-r--r-- | src/mongo/db/index/index_access_method.h | 9 |
2 files changed, 31 insertions, 16 deletions
diff --git a/src/mongo/db/index/index_access_method.cpp b/src/mongo/db/index/index_access_method.cpp index 2d340cbc997..4de61819671 100644 --- a/src/mongo/db/index/index_access_method.cpp +++ b/src/mongo/db/index/index_access_method.cpp @@ -84,11 +84,12 @@ bool isMultikeyFromPaths(const MultikeyPaths& multikeyPaths) { [](const MultikeyComponents& components) { return !components.empty(); }); } -SortOptions makeSortOptions(size_t maxMemoryUsageBytes) { +SortOptions makeSortOptions(size_t maxMemoryUsageBytes, StringData dbName) { return SortOptions() .TempDir(storageGlobalParams.dbpath + "/_tmp") .ExtSortAllowed() - .MaxMemoryUsageBytes(maxMemoryUsageBytes); + .MaxMemoryUsageBytes(maxMemoryUsageBytes) + .DBName(dbName.toString()); } MultikeyPaths createMultikeyPaths(const std::vector<MultikeyPath>& multikeyPathsVec) { @@ -479,11 +480,14 @@ Status AbstractIndexAccessMethod::compact(OperationContext* opCtx) { class AbstractIndexAccessMethod::BulkBuilderImpl : public IndexAccessMethod::BulkBuilder { public: - BulkBuilderImpl(IndexCatalogEntry* indexCatalogEntry, size_t maxMemoryUsageBytes); + BulkBuilderImpl(IndexCatalogEntry* indexCatalogEntry, + size_t maxMemoryUsageBytes, + StringData dbName); BulkBuilderImpl(IndexCatalogEntry* index, size_t maxMemoryUsageBytes, - const IndexStateInfo& stateInfo); + const IndexStateInfo& stateInfo, + StringData dbName); Status insert(OperationContext* opCtx, const BSONObj& obj, @@ -513,6 +517,7 @@ private: Sorter* _makeSorter( size_t maxMemoryUsageBytes, + StringData dbName, boost::optional<StringData> fileName = boost::none, const boost::optional<std::vector<SorterRange>>& ranges = boost::none) const; @@ -536,21 +541,27 @@ private: }; std::unique_ptr<IndexAccessMethod::BulkBuilder> AbstractIndexAccessMethod::initiateBulk( - size_t maxMemoryUsageBytes, const boost::optional<IndexStateInfo>& stateInfo) { + size_t maxMemoryUsageBytes, + const boost::optional<IndexStateInfo>& stateInfo, + StringData dbName) { return stateInfo - ? std::make_unique<BulkBuilderImpl>(_indexCatalogEntry, maxMemoryUsageBytes, *stateInfo) - : std::make_unique<BulkBuilderImpl>(_indexCatalogEntry, maxMemoryUsageBytes); + ? std::make_unique<BulkBuilderImpl>( + _indexCatalogEntry, maxMemoryUsageBytes, *stateInfo, dbName) + : std::make_unique<BulkBuilderImpl>(_indexCatalogEntry, maxMemoryUsageBytes, dbName); } AbstractIndexAccessMethod::BulkBuilderImpl::BulkBuilderImpl(IndexCatalogEntry* index, - size_t maxMemoryUsageBytes) - : _indexCatalogEntry(index), _sorter(_makeSorter(maxMemoryUsageBytes)) {} + size_t maxMemoryUsageBytes, + StringData dbName) + : _indexCatalogEntry(index), _sorter(_makeSorter(maxMemoryUsageBytes, dbName)) {} AbstractIndexAccessMethod::BulkBuilderImpl::BulkBuilderImpl(IndexCatalogEntry* index, size_t maxMemoryUsageBytes, - const IndexStateInfo& stateInfo) + const IndexStateInfo& stateInfo, + StringData dbName) : _indexCatalogEntry(index), - _sorter(_makeSorter(maxMemoryUsageBytes, stateInfo.getFileName(), stateInfo.getRanges())), + _sorter( + _makeSorter(maxMemoryUsageBytes, dbName, stateInfo.getFileName(), stateInfo.getRanges())), _keysInserted(stateInfo.getNumKeys().value_or(0)), _isMultiKey(stateInfo.getIsMultikey()), _indexMultikeyPaths(createMultikeyPaths(stateInfo.getMultikeyPaths())) {} @@ -663,14 +674,15 @@ AbstractIndexAccessMethod::BulkBuilderImpl::_makeSorterSettings() const { AbstractIndexAccessMethod::BulkBuilderImpl::Sorter* AbstractIndexAccessMethod::BulkBuilderImpl::_makeSorter( size_t maxMemoryUsageBytes, + StringData dbName, boost::optional<StringData> fileName, const boost::optional<std::vector<SorterRange>>& ranges) const { return fileName ? Sorter::makeFromExistingRanges(fileName->toString(), *ranges, - makeSortOptions(maxMemoryUsageBytes), + makeSortOptions(maxMemoryUsageBytes, dbName), BtreeExternalSortComparison(), _makeSorterSettings()) - : Sorter::make(makeSortOptions(maxMemoryUsageBytes), + : Sorter::make(makeSortOptions(maxMemoryUsageBytes, dbName), BtreeExternalSortComparison(), _makeSorterSettings()); } diff --git a/src/mongo/db/index/index_access_method.h b/src/mongo/db/index/index_access_method.h index 5aee4fad6e4..4653fffa7a3 100644 --- a/src/mongo/db/index/index_access_method.h +++ b/src/mongo/db/index/index_access_method.h @@ -290,7 +290,9 @@ public: * new index build. */ virtual std::unique_ptr<BulkBuilder> initiateBulk( - size_t maxMemoryUsageBytes, const boost::optional<IndexStateInfo>& stateInfo) = 0; + size_t maxMemoryUsageBytes, + const boost::optional<IndexStateInfo>& stateInfo, + StringData dbName) = 0; /** * Call this when you are ready to finish your bulk work. @@ -541,8 +543,9 @@ public: KeyStringSet multikeyMetadataKeys, MultikeyPaths paths) final; - std::unique_ptr<BulkBuilder> initiateBulk( - size_t maxMemoryUsageBytes, const boost::optional<IndexStateInfo>& stateInfo) final; + std::unique_ptr<BulkBuilder> initiateBulk(size_t maxMemoryUsageBytes, + const boost::optional<IndexStateInfo>& stateInfo, + StringData dbName) final; Status commitBulk(OperationContext* opCtx, BulkBuilder* bulk, |