@@ -152,7 +152,36 @@ class TColumnChunksCleaner: public NYDBTest::ILocalDBModifier {
152152 }
153153};
154154
155- class TPortionsCleaner : public NYDBTest ::ILocalDBModifier {
155+ class TSchemaVersionsCleaner : public NYDBTest ::ILocalDBModifier {
156+ public:
157+ virtual void Apply (NTabletFlatExecutor::TTransactionContext& txc) const override {
158+ using namespace NColumnShard ;
159+ NIceDb::TNiceDb db (txc.DB );
160+ auto rowset = db.Table <Schema::IndexPortions>().Select ();
161+ UNIT_ASSERT (rowset.IsReady ());
162+
163+ ui64 minVersion = (ui64)-1 ;
164+ while (!rowset.EndOfSet ()) {
165+ auto version = rowset.GetValue <Schema::IndexPortions::SchemaVersion>();
166+ if (version < minVersion) {
167+ minVersion = version;
168+ }
169+ UNIT_ASSERT (rowset.Next ());
170+ }
171+
172+ // Add invalid widow schema, if SchemaVersionCleaner will not erase it, then test will fail
173+ TString serialized;
174+ NKikimrTxColumnShard::TSchemaPresetVersionInfo info;
175+ info.MutableSchema ()->SetVersion (minVersion - 1 );
176+ Y_ABORT_UNLESS (info.SerializeToString (&serialized));
177+ db.Table <Schema::SchemaPresetVersionInfo>().Key (11 , 1 , 1 ).Update (NIceDb::TUpdate<Schema::SchemaPresetVersionInfo::InfoProto>(serialized));
178+
179+ db.Table <Schema::SchemaPresetInfo>().Key (10 ).Update (NIceDb::TUpdate<Schema::SchemaPresetInfo::Name>(" default" ));
180+
181+ }
182+ };
183+
184+ class TPortionsCleaner : public NYDBTest ::ILocalDBModifier {
156185public:
157186 virtual void Apply (NTabletFlatExecutor::TTransactionContext& txc) const override {
158187 using namespace NColumnShard ;
@@ -259,6 +288,11 @@ Y_UNIT_TEST_SUITE(Normalizers) {
259288 TTestBasicRuntime runtime;
260289 TTester::Setup (runtime);
261290
291+ auto * repair = runtime.GetAppData ().ColumnShardConfig .MutableRepairs ()->Add ();
292+ repair->SetClassName (" SchemaVersionCleaner" );
293+ repair->SetDescription (" Removing unused schema versions" );
294+
295+ const ui64 ownerId = 0 ;
262296 const ui64 tableId = 1 ;
263297 const std::vector<NArrow::NTest::TTestColumn> schema = { NArrow::NTest::TTestColumn (" key1" , TTypeInfo (NTypeIds::Uint64)),
264298 NArrow::NTest::TTestColumn (" key2" , TTypeInfo (NTypeIds::Uint64)), NArrow::NTest::TTestColumn (" field" , TTypeInfo (NTypeIds::Utf8)) };
@@ -308,10 +342,15 @@ Y_UNIT_TEST_SUITE(Normalizers) {
308342 TestNormalizerImpl<TPortionsCleaner>();
309343 }
310344
345+ Y_UNIT_TEST (SchemaVersionsNormalizer) {
346+ TestNormalizerImpl<TSchemaVersionsCleaner>();
347+ }
348+
311349 Y_UNIT_TEST (CleanEmptyPortionsNormalizer) {
312350 TestNormalizerImpl<TEmptyPortionsCleaner>();
313351 }
314352
353+
315354 Y_UNIT_TEST (EmptyTablesNormalizer) {
316355 class TLocalNormalizerChecker : public TNormalizerChecker {
317356 public:
0 commit comments