Skip to content

Commit ee07055

Browse files
fix compaction intervals construction (#7176) (#7208)
Co-authored-by: ivanmorozov333 <ivanmorozov@ydb.tech>
1 parent d96c0fd commit ee07055

File tree

2 files changed

+29
-9
lines changed

2 files changed

+29
-9
lines changed

ydb/core/formats/arrow/reader/position.h

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ class TSortableBatchPosition {
407407
class TIntervalPosition {
408408
private:
409409
TSortableBatchPosition Position;
410-
const bool LeftIntervalInclude;
410+
bool LeftIntervalInclude;
411411
public:
412412
const TSortableBatchPosition& GetPosition() const {
413413
return Position;
@@ -459,21 +459,41 @@ class TIntervalPositions {
459459
return Positions.end();
460460
}
461461

462-
void AddPosition(TSortableBatchPosition&& position, const bool includeLeftInterval) {
463-
TIntervalPosition intervalPosition(std::move(position), includeLeftInterval);
464-
if (Positions.size()) {
465-
AFL_VERIFY(Positions.back() < intervalPosition)("back", Positions.back().DebugJson())("pos", intervalPosition.DebugJson());
466-
}
462+
void InsertPosition(TIntervalPosition&& intervalPosition) {
467463
Positions.emplace_back(std::move(intervalPosition));
464+
ui32 index = Positions.size() - 1;
465+
while (index >= 1 && Positions[index] < Positions[index - 1]) {
466+
std::swap(Positions[index], Positions[index - 1]);
467+
index = index - 1;
468+
}
469+
}
470+
471+
void InsertPosition(TSortableBatchPosition&& position, const bool includePositionToLeftInterval) {
472+
TIntervalPosition intervalPosition(std::move(position), includePositionToLeftInterval);
473+
InsertPosition(std::move(intervalPosition));
468474
}
469475

470-
void AddPosition(const TSortableBatchPosition& position, const bool includeLeftInterval) {
471-
TIntervalPosition intervalPosition(position, includeLeftInterval);
476+
void InsertPosition(const TSortableBatchPosition& position, const bool includePositionToLeftInterval) {
477+
TIntervalPosition intervalPosition(position, includePositionToLeftInterval);
478+
InsertPosition(std::move(intervalPosition));
479+
}
480+
481+
void AddPosition(TIntervalPosition&& intervalPosition) {
472482
if (Positions.size()) {
473483
AFL_VERIFY(Positions.back() < intervalPosition)("back", Positions.back().DebugJson())("pos", intervalPosition.DebugJson());
474484
}
475485
Positions.emplace_back(std::move(intervalPosition));
476486
}
487+
488+
void AddPosition(TSortableBatchPosition&& position, const bool includePositionToLeftInterval) {
489+
TIntervalPosition intervalPosition(std::move(position), includePositionToLeftInterval);
490+
AddPosition(std::move(intervalPosition));
491+
}
492+
493+
void AddPosition(const TSortableBatchPosition& position, const bool includePositionToLeftInterval) {
494+
TIntervalPosition intervalPosition(position, includePositionToLeftInterval);
495+
AddPosition(std::move(intervalPosition));
496+
}
477497
};
478498

479499
class TRWSortableBatchPosition: public TSortableBatchPosition, public TMoveOnly {

ydb/core/tx/columnshard/engines/changes/general_compaction.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ NColumnShard::ECumulativeCounters TGeneralCompactColumnEngineChanges::GetCounter
213213

214214
void TGeneralCompactColumnEngineChanges::AddCheckPoint(
215215
const NArrow::NMerger::TSortableBatchPosition& position, const bool include) {
216-
CheckPoints.AddPosition(position, include);
216+
CheckPoints.InsertPosition(position, include);
217217
}
218218

219219
std::shared_ptr<TGeneralCompactColumnEngineChanges::IMemoryPredictor> TGeneralCompactColumnEngineChanges::BuildMemoryPredictor() {

0 commit comments

Comments
 (0)