Skip to content

Commit cde0b15

Browse files
committed
fix allocation size calc
1 parent e520246 commit cde0b15

File tree

3 files changed

+15
-17
lines changed

3 files changed

+15
-17
lines changed

ydb/core/tx/columnshard/engines/reader/common_reader/iterator/columns_set.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,15 @@ class TColumnsSetIds {
8585
}
8686
return result;
8787
}
88+
89+
TColumnsSetIds& operator+=(const TColumnsSetIds& external) {
90+
return (*this = *this + external);
91+
}
92+
93+
TColumnsSetIds& operator-=(const TColumnsSetIds& external) {
94+
return (*this = *this - external);
95+
}
96+
8897
bool IsEmpty() const {
8998
return ColumnIds.empty();
9099
}

ydb/core/tx/columnshard/engines/reader/common_reader/iterator/fetch_steps.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,10 @@ void TAllocateMemoryStep::TFetchingStepAllocation::DoOnAllocationImpossible(cons
7575

7676
TConclusion<bool> TAllocateMemoryStep::DoExecuteInplace(const std::shared_ptr<IDataSource>& source, const TFetchingScriptCursor& step) const {
7777
ui64 size = PredefinedSize.value_or(0);
78-
for (auto&& i : Packs) {
79-
ui32 sizeLocal = source->GetColumnsVolume(i.GetColumns().GetColumnIds(), i.GetMemType());
80-
if (source->GetStageData().GetUseFilter() && i.GetMemType() != EMemType::Blob && source->GetContext()->GetReadMetadata()->HasLimit() &&
81-
(HasAppData() && !AppDataVerified().ColumnShardConfig.GetUseSlicesFilter())) {
78+
for (auto&& [memType, columns] : ColumnsByMemType) {
79+
ui32 sizeLocal = source->GetColumnsVolume(columns.GetColumnIds(), static_cast<EMemType>(memType));
80+
if (source->GetStageData().GetUseFilter() && static_cast<EMemType>(memType) != EMemType::Blob &&
81+
source->GetContext()->GetReadMetadata()->HasLimit() && (HasAppData() && !AppDataVerified().ColumnShardConfig.GetUseSlicesFilter())) {
8282
const ui32 filtered =
8383
source->GetStageData().GetFilteredCount(source->GetRecordsCount(), source->GetContext()->GetReadMetadata()->GetLimitRobust());
8484
if (filtered < source->GetRecordsCount()) {

ydb/core/tx/columnshard/engines/reader/common_reader/iterator/fetch_steps.h

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,7 @@ namespace NKikimr::NOlap::NReader::NCommon {
88
class TAllocateMemoryStep: public IFetchingStep {
99
private:
1010
using TBase = IFetchingStep;
11-
class TColumnsPack {
12-
private:
13-
YDB_READONLY_DEF(TColumnsSetIds, Columns);
14-
YDB_READONLY(EMemType, MemType, EMemType::Blob);
15-
16-
public:
17-
TColumnsPack(const TColumnsSetIds& columns, const EMemType memType)
18-
: Columns(columns)
19-
, MemType(memType) {
20-
}
21-
};
22-
std::vector<TColumnsPack> Packs;
11+
THashMap<ui32, TColumnsSetIds> ColumnsByMemType;
2312
const EStageFeaturesIndexes StageIndex;
2413
const std::optional<ui64> PredefinedSize;
2514

@@ -50,7 +39,7 @@ class TAllocateMemoryStep: public IFetchingStep {
5039
if (!ids.GetColumnsCount()) {
5140
return;
5241
}
53-
Packs.emplace_back(ids, memType);
42+
ColumnsByMemType[(ui32)memType] += ids;
5443
}
5544
EStageFeaturesIndexes GetStage() const {
5645
return StageIndex;

0 commit comments

Comments
 (0)