diff options
Diffstat (limited to 'src/mongo/db/exec/sbe/stages/sort.cpp')
-rw-r--r-- | src/mongo/db/exec/sbe/stages/sort.cpp | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/mongo/db/exec/sbe/stages/sort.cpp b/src/mongo/db/exec/sbe/stages/sort.cpp index 42db5e6163a..5acf73afe8d 100644 --- a/src/mongo/db/exec/sbe/stages/sort.cpp +++ b/src/mongo/db/exec/sbe/stages/sort.cpp @@ -34,11 +34,18 @@ #include "mongo/db/exec/sbe/expressions/expression.h" #include "mongo/db/exec/sbe/size_estimator.h" #include "mongo/db/exec/trial_run_tracker.h" -#include "mongo/db/sorter/factory.h" -#include "mongo/db/sorter/options.h" #include "mongo/db/stats/resource_consumption_metrics.h" #include "mongo/util/str.h" +namespace { +std::string nextFileName() { + static mongo::AtomicWord<unsigned> sortExecutorFileCounter; + return "extsort-sort-sbe." + std::to_string(sortExecutorFileCounter.fetchAndAdd(1)); +} +} // namespace + +#include "mongo/db/sorter/sorter.cpp" + namespace mongo { namespace sbe { SortStage::SortStage(std::unique_ptr<PlanStage> input, @@ -113,13 +120,13 @@ value::SlotAccessor* SortStage::getAccessor(CompileCtx& ctx, value::SlotId slot) } void SortStage::makeSorter() { - sorter::Options opts; - if (_allowDiskUse) { - opts.tempDir = storageGlobalParams.dbpath + "/_tmp"; - } + SortOptions opts; + opts.tempDir = storageGlobalParams.dbpath + "/_tmp"; opts.maxMemoryUsageBytes = _specificStats.maxMemoryUsageBytes; + opts.extSortAllowed = _allowDiskUse; opts.limit = _specificStats.limit != std::numeric_limits<size_t>::max() ? _specificStats.limit : 0; + opts.moveSortedDataIntoIterator = true; auto comp = [&](const SorterData& lhs, const SorterData& rhs) { auto size = lhs.first.size(); @@ -139,8 +146,7 @@ void SortStage::makeSorter() { return 0; }; - _sorter = - sorter::make<value::MaterializedRow, value::MaterializedRow>("sort-sbe", opts, comp, {}); + _sorter.reset(Sorter<value::MaterializedRow, value::MaterializedRow>::make(opts, comp, {})); _mergeIt.reset(); } @@ -188,7 +194,7 @@ void SortStage::open(bool reOpen) { vals.reset(idx++, true, cTag, cVal); } - _sorter->addOwned(std::move(keys), std::move(vals)); + _sorter->emplace(std::move(keys), std::move(vals)); if (_tracker && _tracker->trackProgress<TrialRunTracker::kNumResults>(1)) { // If we either hit the maximum number of document to return during the trial run, or @@ -206,7 +212,7 @@ void SortStage::open(bool reOpen) { } _specificStats.totalDataSizeBytes += _sorter->totalDataSizeSorted(); - _mergeIt = _sorter->done(); + _mergeIt.reset(_sorter->done()); _specificStats.spills += _sorter->numSpills(); _specificStats.keysSorted += _sorter->numSorted(); auto& metricsCollector = ResourceConsumption::MetricsCollector::get(_opCtx); |