summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIurii Kravchenko <[email protected]>2026-07-16 19:05:15 +0200
committerGitHub <[email protected]>2026-07-16 17:05:15 +0000
commit3e157dfd8397c17228018cac27cf5930711c05ec (patch)
treebb175317c33d8ac33b56703d375970d823e0e8cc
parent6ce360afd2f5ac54014906188105787285695bed (diff)
Tiling++ json (#46813)
-rw-r--r--ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/abstract.h2
-rw-r--r--ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/levels.h20
-rw-r--r--ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/tiling.h12
-rw-r--r--ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/wrapper.cpp22
4 files changed, 54 insertions, 2 deletions
diff --git a/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/abstract.h b/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/abstract.h
index b54484b952b..b35617ec0ae 100644
--- a/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/abstract.h
+++ b/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/abstract.h
@@ -71,6 +71,8 @@ struct ICompactionUnit {
virtual TOptimizationPriority DoGetUsefulMetric() const = 0;
+ virtual NJson::TJsonValue DoSerializeToJsonVisual() const = 0;
+
protected:
virtual void DoAddPortion(typename TPortion::TPtr p) = 0;
virtual void DoRemovePortion(typename TPortion::TConstPtr p) = 0;
diff --git a/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/levels.h b/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/levels.h
index f89cade5075..23f50e6b86e 100644
--- a/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/levels.h
+++ b/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/levels.h
@@ -118,6 +118,13 @@ struct LastLevel: ICompactionUnit<TKey, TPortion> {
auto [begin, end] = Borders(p);
return std::distance(begin, end);
}
+
+ NJson::TJsonValue DoSerializeToJsonVisual() const override {
+ NJson::TJsonValue result = NJson::JSON_MAP;
+ result.InsertValue("Candidates", Candidates.size());
+ result.InsertValue("Portions", Portions.size());
+ return result;
+ }
};
template <std::totally_ordered TKey, typename TPortion>
@@ -175,6 +182,12 @@ struct Accumulator: ICompactionUnit<TKey, TPortion> {
TOptimizationPriority DoGetUsefulMetric() const override {
return BuildPriority(0);
}
+
+ NJson::TJsonValue DoSerializeToJsonVisual() const override {
+ NJson::TJsonValue result = NJson::JSON_MAP;
+ result.InsertValue("Portions", Portions.size());
+ return result;
+ }
};
template <std::totally_ordered TKey, typename TPortion>
@@ -255,6 +268,13 @@ struct MiddleLevel: ICompactionUnit<TKey, TPortion> {
TOptimizationPriority DoGetUsefulMetric() const override {
return BuildPriority();
}
+
+ NJson::TJsonValue DoSerializeToJsonVisual() const override {
+ NJson::TJsonValue result = NJson::JSON_MAP;
+ result.InsertValue("Height", Intersections.GetMaxCount());
+ result.InsertValue("Portions", PortionById.size());
+ return result;
+ }
};
} // namespace NKikimr::NOlap::NStorageOptimizer::NTiling
diff --git a/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/tiling.h b/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/tiling.h
index 574fa7ad453..a7a526f540c 100644
--- a/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/tiling.h
+++ b/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/tiling.h
@@ -368,6 +368,18 @@ struct Tiling: ICompactionUnit<TKey, TPortion> {
}
return true;
}
+
+ NJson::TJsonValue DoSerializeToJsonVisual() const override {
+ NJson::TJsonValue tiling_info = NJson::JSON_MAP;
+ tiling_info.InsertValue("Accumulator", Accumulator.DoSerializeToJsonVisual());
+ NJson::TJsonValue levels = NJson::JSON_ARRAY;
+ for (auto& [_, level] : MiddleLevels) {
+ levels.AppendValue(level.DoSerializeToJsonVisual());
+ }
+ tiling_info.InsertValue("MiddleLevels", levels);
+ tiling_info.InsertValue("LastLevel", LastLevel.DoSerializeToJsonVisual());
+ return tiling_info;
+ }
};
} // namespace NKikimr::NOlap::NStorageOptimizer::NTiling
diff --git a/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/wrapper.cpp b/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/wrapper.cpp
index 47fa5afd2a3..ec4baed0a8d 100644
--- a/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/wrapper.cpp
+++ b/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/wrapper.cpp
@@ -30,7 +30,7 @@ struct TPlannerSettings {
ui64 PortionExpectedSize = 4ULL * 1024 * 1024;
ui32 CompactionThreads = 2;
- void SerializeToProto(NKikimrSchemeOp::TCompactionPlannerConstructorContainer::TTilingOptimizer& proto) const {
+ NJson::TJsonValue SerializeToJson() const {
NJson::TJsonValue json(NJson::JSON_MAP);
json["accumulator_portion_size_limit"] = TilingSettings.AccumulatorPortionSizeLimit;
json["k"] = (ui64)TilingSettings.K;
@@ -50,7 +50,11 @@ struct TPlannerSettings {
json["aging_max_portion_promotion"] = TilingSettings.AgingSettings.MaxPortionPromotion;
json["compaction_threads"] = CompactionThreads;
json["enable_compatibility_mode"] = TilingSettings.EnableCompatibilityMode;
- proto.SetJson(NJson::WriteJson(json, /*formatOutput=*/false));
+ return json;
+ }
+
+ void SerializeToProto(NKikimrSchemeOp::TCompactionPlannerConstructorContainer::TTilingOptimizer& proto) const {
+ proto.SetJson(NJson::WriteJson(SerializeToJson(), /*formatOutput=*/false));
}
TConclusionStatus DeserializeFromProto(const NKikimrSchemeOp::TCompactionPlannerConstructorContainer::TTilingOptimizer& proto) {
@@ -184,6 +188,7 @@ TTilingSettings MakeCoreSettings(const TPlannerSettings& settings) {
class TOptimizerPlannerAdapter: public IOptimizerPlanner {
private:
using TBase = IOptimizerPlanner;
+ TPlannerSettings Settings;
TCounters Counters;
TCoreTiling Core;
std::shared_ptr<IStoragesManager> StoragesManager;
@@ -252,11 +257,24 @@ protected:
return {};
}
+ TString DoDebugString() const override {
+ return DoSerializeToJsonVisual().GetString();
+ }
+
+ NJson::TJsonValue DoSerializeToJsonVisual() const override {
+ NJson::TJsonValue compaction_info = NJson::JSON_MAP;
+ compaction_info.InsertValue("1-Name", "TILING++");
+ compaction_info.InsertValue("2-Settings", Settings.SerializeToJson());
+ compaction_info.InsertValue("3-Levels", Core.DoSerializeToJsonVisual());
+ return compaction_info;
+ }
+
public:
TOptimizerPlannerAdapter(const TInternalPathId pathId, const std::shared_ptr<IStoragesManager>& storagesManager,
const std::shared_ptr<arrow::Schema>& /*primaryKeysSchema*/, const TPlannerSettings& settings,
const std::optional<ui64>& nodePortionsCountLimit)
: TBase(pathId, nodePortionsCountLimit)
+ , Settings(settings)
, Counters()
, Core(MakeCoreSettings(settings), Counters)
, StoragesManager(storagesManager)