summaryrefslogtreecommitdiff
path: root/src/mongo/db/index
diff options
context:
space:
mode:
authorVarun Ravichandran <varun.ravichandran@mongodb.com>2021-01-08 02:18:10 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-01-20 19:28:03 +0000
commit45a54bbac81ff1146f307afb2d04c94c694a1163 (patch)
tree7aae292c66cab6bedf43d89d6db7f07122788cce /src/mongo/db/index
parent6308db5c83a3e95f4532c63df8b635b8090036ae (diff)
downloadmongo-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.cpp38
-rw-r--r--src/mongo/db/index/index_access_method.h9
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,