SERVER-115036 Add tempDir, dbName, and ChecksumVersion to the FileBasedSorterStorage constructor (#44951)

GitOrigin-RevId: 831a9a28e49756e49296dde469a554ec93a1858b
This commit is contained in:
Stephanie 2025-12-09 13:46:43 -05:00 committed by MongoDB Bot
parent 0e4b035959
commit 1a6adfa86d
8 changed files with 53 additions and 17 deletions

View File

@ -106,7 +106,7 @@ void SpoolStage::spill() {
auto opts = SortOptions().TempDir(expCtx()->getTempDir()); auto opts = SortOptions().TempDir(expCtx()->getTempDir());
opts.FileStats(_spillStats.get()); opts.FileStats(_spillStats.get());
FileBasedSorterStorage<RecordId, NullValue> sorterStorage(_file); FileBasedSorterStorage<RecordId, NullValue> sorterStorage(_file, expCtx()->getTempDir());
std::unique_ptr<SortedStorageWriter<RecordId, NullValue>> writer = std::unique_ptr<SortedStorageWriter<RecordId, NullValue>> writer =
sorterStorage.makeWriter(opts); sorterStorage.makeWriter(opts);
// Do not spill the records that have been already consumed. // Do not spill the records that have been already consumed.

View File

@ -255,7 +255,7 @@ void GroupProcessor::spill() {
_file = std::make_shared<SorterFile>(sorter::nextFileName(_expCtx->getTempDir()), _file = std::make_shared<SorterFile>(sorter::nextFileName(_expCtx->getTempDir()),
_spillStats.get()); _spillStats.get());
} }
FileBasedSorterStorage<Value, Value> sorterStorage(_file); FileBasedSorterStorage<Value, Value> sorterStorage(_file, _expCtx->getTempDir());
std::unique_ptr<SortedStorageWriter<Value, Value>> writer = std::unique_ptr<SortedStorageWriter<Value, Value>> writer =
sorterStorage.makeWriter(SortOptions().TempDir(_expCtx->getTempDir())); sorterStorage.makeWriter(SortOptions().TempDir(_expCtx->getTempDir()));
switch (_accumulatedFields.size()) { // same as ptrs[i]->second.size() for all i. switch (_accumulatedFields.size()) { // same as ptrs[i]->second.size() for all i.

View File

@ -83,7 +83,7 @@ void AccuratePercentile::spill() {
_numTotalValuesSpilled += _accumulatedValues.size(); _numTotalValuesSpilled += _accumulatedValues.size();
FileBasedSorterStorage<Value, Value> sorterStorage(_spillFile); FileBasedSorterStorage<Value, Value> sorterStorage(_spillFile, _expCtx->getTempDir());
std::unique_ptr<SortedStorageWriter<Value, Value>> writer = std::unique_ptr<SortedStorageWriter<Value, Value>> writer =
sorterStorage.makeWriter(SortOptions().TempDir(_expCtx->getTempDir())); sorterStorage.makeWriter(SortOptions().TempDir(_expCtx->getTempDir()));

View File

@ -461,7 +461,11 @@ public:
typename Value::SorterDeserializeSettings> typename Value::SorterDeserializeSettings>
Settings; Settings;
explicit FileBasedSorterStorage(std::shared_ptr<SorterFile> file); explicit FileBasedSorterStorage(
std::shared_ptr<SorterFile> file,
boost::optional<boost::filesystem::path> pathToSpillDir,
boost::optional<DatabaseName> dbName = boost::none,
SorterChecksumVersion checksumVersion = SorterChecksumVersion::v2);
std::unique_ptr<SortedStorageWriter<Key, Value>> makeWriter( std::unique_ptr<SortedStorageWriter<Key, Value>> makeWriter(
const SortOptions& opts, const Settings& settings = Settings()) override; const SortOptions& opts, const Settings& settings = Settings()) override;
@ -474,8 +478,17 @@ public:
size_t getIteratorSize() override; size_t getIteratorSize() override;
boost::optional<boost::filesystem::path> getSpillDirPath();
boost::optional<DatabaseName> getDbName();
SorterChecksumVersion getChecksumVersion();
private: private:
std::shared_ptr<SorterFile> _file; std::shared_ptr<SorterFile> _file;
boost::optional<boost::filesystem::path> _pathToSpillDir;
boost::optional<DatabaseName> _dbName;
SorterChecksumVersion _checksumVersion;
}; };
/** /**

View File

@ -77,7 +77,7 @@ private:
int currentBufSize = 0; int currentBufSize = 0;
// TODO(SERVER-114085): Remove after adding SorterStorage to SortOptions. // TODO(SERVER-114085): Remove after adding SorterStorage to SortOptions.
// TODO(SERVER-114080): Ensure testing of non-file-based sorter storage is comprehensive. // TODO(SERVER-114080): Ensure testing of non-file-based sorter storage is comprehensive.
FileBasedSorterStorage<IntWrapper, IntWrapper> sorterStorage(makeFile()); FileBasedSorterStorage<IntWrapper, IntWrapper> sorterStorage(makeFile(), *opts->tempDir);
std::unique_ptr<SortedStorageWriter<IntWrapper, IntWrapper>> sorter = std::unique_ptr<SortedStorageWriter<IntWrapper, IntWrapper>> sorter =
sorterStorage.makeWriter(*opts); sorterStorage.makeWriter(*opts);
for (int i = 0; i < range; ++i) { for (int i = 0; i < range; ++i) {

View File

@ -196,12 +196,12 @@ public:
opts.tempDir); opts.tempDir);
uassertStatusOK(ensureSufficientDiskSpaceForSpilling( uassertStatusOK(ensureSufficientDiskSpaceForSpilling(
*(opts.tempDir), internalQuerySpillingMinAvailableDiskSpaceBytes.load())); *opts.tempDir, internalQuerySpillingMinAvailableDiskSpaceBytes.load()));
auto spillsFile = auto spillsFile =
std::make_shared<SorterFile>(nextFileName(*(opts.tempDir)), opts.sorterFileStats); std::make_shared<SorterFile>(nextFileName(*opts.tempDir), opts.sorterFileStats);
// TODO(SERVER-114085): Remove after adding SorterStorage to SortOptions. // TODO(SERVER-114085): Remove after adding SorterStorage to SortOptions.
FileBasedSorterStorage<Key, Value> sorterStorage(spillsFile); FileBasedSorterStorage<Key, Value> sorterStorage(spillsFile, *opts.tempDir);
std::unique_ptr<SortedStorageWriter<Key, Value>> writer = std::unique_ptr<SortedStorageWriter<Key, Value>> writer =
sorterStorage.makeWriter(opts, settings); sorterStorage.makeWriter(opts, settings);
@ -701,7 +701,7 @@ protected:
iterators.swap(this->_iters); iterators.swap(this->_iters);
std::shared_ptr<File> newSpillsFile = std::make_shared<File>( std::shared_ptr<File> newSpillsFile = std::make_shared<File>(
nextFileName(*(this->_opts.tempDir)), this->_opts.sorterFileStats); nextFileName(*this->_opts.tempDir), this->_opts.sorterFileStats);
LOGV2_DEBUG(6033103, LOGV2_DEBUG(6033103,
1, 1,
@ -733,7 +733,8 @@ protected:
auto mergeIterator = Iterator::merge(spillsToMerge, this->_opts, _comp); auto mergeIterator = Iterator::merge(spillsToMerge, this->_opts, _comp);
// TODO(SERVER-114085): Remove after adding SorterStorage to SortOptions. // TODO(SERVER-114085): Remove after adding SorterStorage to SortOptions.
FileBasedSorterStorage<Key, Value> sorterStorage(newSpillsFile); FileBasedSorterStorage<Key, Value> sorterStorage(newSpillsFile,
*this->_opts.tempDir);
std::unique_ptr<SortedStorageWriter<Key, Value>> writer = std::unique_ptr<SortedStorageWriter<Key, Value>> writer =
sorterStorage.makeWriter(this->_opts, _settings); sorterStorage.makeWriter(this->_opts, _settings);
uint64_t pairCount = 0; uint64_t pairCount = 0;
@ -954,7 +955,7 @@ private:
sort(); sort();
// TODO(SERVER-114085): Remove after adding SorterStorage to SortOptions. // TODO(SERVER-114085): Remove after adding SorterStorage to SortOptions.
FileBasedSorterStorage<Key, Value> sorterStorage(this->_file); FileBasedSorterStorage<Key, Value> sorterStorage(this->_file, *this->_opts.tempDir);
std::unique_ptr<SortedStorageWriter<Key, Value>> writer = std::unique_ptr<SortedStorageWriter<Key, Value>> writer =
sorterStorage.makeWriter(this->_opts, this->_settings); sorterStorage.makeWriter(this->_opts, this->_settings);
for (auto& data : _data) { for (auto& data : _data) {
@ -1398,8 +1399,15 @@ typename Sorter<Key, Value>::PersistedState Sorter<Key, Value>::persistDataForSh
// //
template <typename Key, typename Value> template <typename Key, typename Value>
FileBasedSorterStorage<Key, Value>::FileBasedSorterStorage(std::shared_ptr<SorterFile> file) FileBasedSorterStorage<Key, Value>::FileBasedSorterStorage(
: _file(std::move(file)){}; std::shared_ptr<SorterFile> file,
boost::optional<boost::filesystem::path> pathToSpillDir,
boost::optional<DatabaseName> dbName,
SorterChecksumVersion checksumVersion)
: _file(std::move(file)),
_pathToSpillDir(pathToSpillDir),
_dbName(dbName),
_checksumVersion(checksumVersion) {}
template <typename Key, typename Value> template <typename Key, typename Value>
std::unique_ptr<SortedStorageWriter<Key, Value>> FileBasedSorterStorage<Key, Value>::makeWriter( std::unique_ptr<SortedStorageWriter<Key, Value>> FileBasedSorterStorage<Key, Value>::makeWriter(
@ -1425,6 +1433,21 @@ size_t FileBasedSorterStorage<Key, Value>::getIteratorSize() {
return sizeof(sorter::FileIterator<Key, Value>); return sizeof(sorter::FileIterator<Key, Value>);
} }
template <typename Key, typename Value>
boost::optional<boost::filesystem::path> FileBasedSorterStorage<Key, Value>::getSpillDirPath() {
return _pathToSpillDir;
}
template <typename Key, typename Value>
boost::optional<DatabaseName> FileBasedSorterStorage<Key, Value>::getDbName() {
return _dbName;
}
template <typename Key, typename Value>
SorterChecksumVersion FileBasedSorterStorage<Key, Value>::getChecksumVersion() {
return _checksumVersion;
}
// //
// SorterFile members // SorterFile members
// //
@ -1878,7 +1901,7 @@ void BoundedSorter<Key, Value, Comparator, BoundMaker>::_spill(size_t maxMemoryU
// Write out all the values from the heap in sorted order. // Write out all the values from the heap in sorted order.
// TODO(SERVER-114085): Remove after adding SorterStorage to SortOptions. // TODO(SERVER-114085): Remove after adding SorterStorage to SortOptions.
FileBasedSorterStorage<Key, Value> sorterStorage(_file); FileBasedSorterStorage<Key, Value> sorterStorage(_file, _opts.tempDir);
std::unique_ptr<SortedStorageWriter<Key, Value>> writer = sorterStorage.makeWriter(_opts, {}); std::unique_ptr<SortedStorageWriter<Key, Value>> writer = sorterStorage.makeWriter(_opts, {});
while (!_heap.empty()) { while (!_heap.empty()) {
writer->addAlreadySorted(_heap.top().first, _heap.top().second); writer->addAlreadySorted(_heap.top().first, _heap.top().second);

View File

@ -171,7 +171,7 @@ private:
int currentBufSize = 0; int currentBufSize = 0;
// TODO(SERVER-114085): Remove after adding SorterStorage to SortOptions. // TODO(SERVER-114085): Remove after adding SorterStorage to SortOptions.
// TODO(SERVER-114080): Ensure testing of non-file-based sorter storage is comprehensive. // TODO(SERVER-114080): Ensure testing of non-file-based sorter storage is comprehensive.
FileBasedSorterStorage<IntWrapper, IntWrapper> sorterStorage(makeFile()); FileBasedSorterStorage<IntWrapper, IntWrapper> sorterStorage(makeFile(), *opts->tempDir);
std::unique_ptr<SortedStorageWriter<IntWrapper, IntWrapper>> sorter = std::unique_ptr<SortedStorageWriter<IntWrapper, IntWrapper>> sorter =
sorterStorage.makeWriter(*opts); sorterStorage.makeWriter(*opts);
for (int i = 0; i < range; ++i) { for (int i = 0; i < range; ++i) {
@ -435,7 +435,7 @@ TEST_F(SorterMakeFromExistingRangesTest, NextWithDeferredValues) {
std::make_shared<SorterFile>(sorter::nextFileName(*(opts.tempDir)), opts.sorterFileStats); std::make_shared<SorterFile>(sorter::nextFileName(*(opts.tempDir)), opts.sorterFileStats);
// TODO(SERVER-114085): Remove after adding SorterStorage to SortOptions. // TODO(SERVER-114085): Remove after adding SorterStorage to SortOptions.
// TODO(SERVER-114080): Ensure testing of non-file-based sorter storage is comprehensive. // TODO(SERVER-114080): Ensure testing of non-file-based sorter storage is comprehensive.
FileBasedSorterStorage<IntWrapper, IntWrapper> sorterStorage(spillFile); FileBasedSorterStorage<IntWrapper, IntWrapper> sorterStorage(spillFile, *opts.tempDir);
std::unique_ptr<SortedStorageWriter<IntWrapper, IntWrapper>> writer = std::unique_ptr<SortedStorageWriter<IntWrapper, IntWrapper>> writer =
sorterStorage.makeWriter(opts); sorterStorage.makeWriter(opts);
writer->addAlreadySorted(pair1.first, pair1.second); writer->addAlreadySorted(pair1.first, pair1.second);

View File

@ -257,7 +257,7 @@ std::shared_ptr<IWIterator> spillToFile(IteratorPtr inputIter, const unittest::T
std::make_shared<SorterFile>(sorter::nextFileName(*(opts.tempDir)), opts.sorterFileStats); std::make_shared<SorterFile>(sorter::nextFileName(*(opts.tempDir)), opts.sorterFileStats);
// TODO(SERVER-114085): Remove after adding SorterStorage to SortOptions. // TODO(SERVER-114085): Remove after adding SorterStorage to SortOptions.
// TODO(SERVER-114080): Ensure testing of non-file-based sorter storage is comprehensive. // TODO(SERVER-114080): Ensure testing of non-file-based sorter storage is comprehensive.
FileBasedSorterStorage<IntWrapper, IntWrapper> sorterStorage(spillFile); FileBasedSorterStorage<IntWrapper, IntWrapper> sorterStorage(spillFile, *opts.tempDir);
std::unique_ptr<SortedStorageWriter<IntWrapper, IntWrapper>> writer = std::unique_ptr<SortedStorageWriter<IntWrapper, IntWrapper>> writer =
sorterStorage.makeWriter(opts); sorterStorage.makeWriter(opts);
while (inputIter->more()) { while (inputIter->more()) {