Skip to content

Commit 1382681

Browse files
fix compaction policy modification (#12384)
1 parent 2020867 commit 1382681

File tree

4 files changed

+25
-2
lines changed

4 files changed

+25
-2
lines changed

ydb/core/tx/columnshard/engines/storage/optimizer/lcbuckets/constructor/constructor.cpp

+10-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,14 @@ bool TOptimizerPlannerConstructor::DoApplyToCurrentObject(IOptimizerPlanner& cur
1818
bool TOptimizerPlannerConstructor::DoIsEqualTo(const IOptimizerPlannerConstructor& item) const {
1919
const auto* itemClass = dynamic_cast<const TOptimizerPlannerConstructor*>(&item);
2020
AFL_VERIFY(itemClass);
21+
if (Levels.size() != itemClass->Levels.size()) {
22+
return false;
23+
}
24+
for (ui32 i = 0; i < Levels.size(); ++i) {
25+
if (!Levels[i]->IsEqualTo(*itemClass->Levels[i].GetObjectPtrVerified())) {
26+
return false;
27+
}
28+
}
2129
return true;
2230
}
2331

@@ -61,8 +69,8 @@ NKikimr::TConclusionStatus TOptimizerPlannerConstructor::DoDeserializeFromJson(c
6169
if (!level) {
6270
return TConclusionStatus::Fail("incorrect level class_name: " + className);
6371
}
64-
if (!level->DeserializeFromJson(i["description"])) {
65-
return TConclusionStatus::Fail("cannot parse level: " + className + ": " + i["description"].GetStringRobust());
72+
if (!level->DeserializeFromJson(i)) {
73+
return TConclusionStatus::Fail("cannot parse level: " + i.GetStringRobust());
6674
}
6775
Levels.emplace_back(TLevelConstructorContainer(std::shared_ptr<ILevelConstructor>(level.Release())));
6876
}

ydb/core/tx/columnshard/engines/storage/optimizer/lcbuckets/constructor/constructor.h

+8
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,21 @@ class ILevelConstructor {
1212
virtual TConclusionStatus DoDeserializeFromJson(const NJson::TJsonValue& json) = 0;
1313
virtual bool DoDeserializeFromProto(const NKikimrSchemeOp::TCompactionLevelConstructorContainer& proto) = 0;
1414
virtual void DoSerializeToProto(NKikimrSchemeOp::TCompactionLevelConstructorContainer& proto) const = 0;
15+
virtual bool IsEqualToSameClass(const ILevelConstructor& item) const = 0;
1516

1617
public:
1718
using TFactory = NObjectFactory::TObjectFactory<ILevelConstructor, TString>;
1819
using TProto = NKikimrSchemeOp::TCompactionLevelConstructorContainer;
1920

2021
virtual ~ILevelConstructor() = default;
2122

23+
bool IsEqualTo(const ILevelConstructor& item) const {
24+
if (GetClassName() != item.GetClassName()) {
25+
return false;
26+
}
27+
return IsEqualToSameClass(item);
28+
}
29+
2230
std::shared_ptr<IPortionsLevel> BuildLevel(
2331
const std::shared_ptr<IPortionsLevel>& nextLevel, const ui32 indexLevel, const TLevelCounters& counters) const {
2432
return DoBuildLevel(nextLevel, indexLevel, counters);

ydb/core/tx/columnshard/engines/storage/optimizer/lcbuckets/constructor/zero_level.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
namespace NKikimr::NOlap::NStorageOptimizer::NLCBuckets {
66

77
TConclusionStatus TZeroLevelConstructor::DoDeserializeFromJson(const NJson::TJsonValue& json) {
8+
if (!json.IsMap()) {
9+
return TConclusionStatus::Fail("incorrect level description");
10+
}
811
if (json.Has("portions_live_duration")) {
912
const auto& jsonValue = json["portions_live_duration"];
1013
if (!jsonValue.IsString()) {

ydb/core/tx/columnshard/engines/storage/optimizer/lcbuckets/constructor/zero_level.h

+4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ class TZeroLevelConstructor: public ILevelConstructor {
1818
virtual TConclusionStatus DoDeserializeFromJson(const NJson::TJsonValue& json) override;
1919
virtual bool DoDeserializeFromProto(const NKikimrSchemeOp::TCompactionLevelConstructorContainer& proto) override;
2020
virtual void DoSerializeToProto(NKikimrSchemeOp::TCompactionLevelConstructorContainer& proto) const override;
21+
virtual bool IsEqualToSameClass(const ILevelConstructor& item) const override {
22+
const auto& itemCast = dynamic_cast<const TZeroLevelConstructor&>(item);
23+
return PortionsLiveDuration == itemCast.PortionsLiveDuration && ExpectedBlobsSize == itemCast.ExpectedBlobsSize;
24+
}
2125

2226
static const inline TFactory::TRegistrator<TZeroLevelConstructor> Registrator = TFactory::TRegistrator<TZeroLevelConstructor>(GetClassNameStatic());
2327

0 commit comments

Comments
 (0)