diff options
author | snaury <snaury@ydb.tech> | 2023-02-20 11:16:06 +0300 |
---|---|---|
committer | snaury <snaury@ydb.tech> | 2023-02-20 11:16:06 +0300 |
commit | 5ccde54e571dd13c3c37f6ceb1c7613b0b6682ea (patch) | |
tree | 54a1e05a60d7314ff2cb6486b593e2aacb16c1a1 | |
parent | 2169b4de60762aca596fd4df574ce1ff26c921fb (diff) | |
download | ydb-5ccde54e571dd13c3c37f6ceb1c7613b0b6682ea.tar.gz |
Fix changes tracking when applying schema entries
-rw-r--r-- | ydb/core/tablet_flat/flat_dbase_apply.cpp | 47 |
1 files changed, 31 insertions, 16 deletions
diff --git a/ydb/core/tablet_flat/flat_dbase_apply.cpp b/ydb/core/tablet_flat/flat_dbase_apply.cpp index dc23becc89..5ae145e7dc 100644 --- a/ydb/core/tablet_flat/flat_dbase_apply.cpp +++ b/ydb/core/tablet_flat/flat_dbase_apply.cpp @@ -6,6 +6,24 @@ namespace NKikimr { namespace NTable { +namespace { + class TChanges { + public: + explicit operator bool() const { + return Value; + } + + TChanges& operator|=(bool value) { + if (value) { + Value = true; + } + return *this; + } + + private: + bool Value = false; + }; +} TSchemeModifier::TSchemeModifier(TScheme &scheme, TSchemeRollbackState *rollbackState) : Scheme(scheme) @@ -18,12 +36,12 @@ bool TSchemeModifier::Apply(const TAlterRecord &delta) { const auto table = delta.HasTableId() ? delta.GetTableId() : Max<ui32>(); const auto action = delta.GetDeltaType(); - bool changes = false; + TChanges changes; if (action == TAlterRecord::AddTable) { - changes = AddTable(delta.GetTableName(), table); + changes |= AddTable(delta.GetTableName(), table); } else if (action == TAlterRecord::DropTable) { - changes = DropTable(table); + changes |= DropTable(table); } else if (action == TAlterRecord::AddColumn) { TCell null; @@ -36,29 +54,29 @@ bool TSchemeModifier::Apply(const TAlterRecord &delta) auto typeInfoMod = NScheme::TypeInfoModFromProtoColumnType(delta.GetColumnType(), delta.HasColumnTypeInfo() ? &delta.GetColumnTypeInfo() : nullptr); ui32 pgTypeId = NPg::PgTypeIdFromTypeDesc(typeInfoMod.TypeInfo.GetTypeDesc()); - changes = AddPgColumn(table, delta.GetColumnName(), delta.GetColumnId(), + changes |= AddPgColumn(table, delta.GetColumnName(), delta.GetColumnId(), delta.GetColumnType(), pgTypeId, typeInfoMod.TypeMod, delta.GetNotNull(), null); } else if (action == TAlterRecord::DropColumn) { - changes = DropColumn(table, delta.GetColumnId()); + changes |= DropColumn(table, delta.GetColumnId()); } else if (action == TAlterRecord::AddColumnToKey) { - changes = AddColumnToKey(table, delta.GetColumnId()); + changes |= AddColumnToKey(table, delta.GetColumnId()); } else if (action == TAlterRecord::AddFamily) { auto &tableInfo = *Table(table); if (!tableInfo.Families.contains(delta.GetFamilyId())) { PreserveTable(table); - changes = true; + changes |= true; } auto &family = tableInfo.Families[delta.GetFamilyId()]; const ui32 room = delta.GetRoomId(); - changes = ChangeTableSetting(table, family.Room, room); + changes |= ChangeTableSetting(table, family.Room, room); } else if (action == TAlterRecord::SetFamily) { auto &tableInfo = *Table(table); if (!tableInfo.Families.contains(delta.GetFamilyId())) { PreserveTable(table); - changes = true; + changes |= true; } auto &family = tableInfo.Families[delta.GetFamilyId()]; @@ -74,20 +92,18 @@ bool TSchemeModifier::Apply(const TAlterRecord &delta) ui32 large = delta.HasLarge() ? delta.GetLarge() : family.Large; Y_VERIFY(ui32(cache) <= 2, "Invalid pages cache policy value"); -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wbitwise-instead-of-logical" changes |= ChangeTableSetting(table, family.Cache, cache); changes |= ChangeTableSetting(table, family.Codec, codec); changes |= ChangeTableSetting(table, family.Small, small); changes |= ChangeTableSetting(table, family.Large, large); } else if (action == TAlterRecord::AddColumnToFamily) { - changes = AddColumnToFamily(table, delta.GetColumnId(), delta.GetFamilyId()); + changes |= AddColumnToFamily(table, delta.GetColumnId(), delta.GetFamilyId()); } else if (action == TAlterRecord::SetRoom) { auto &tableInfo = *Table(table); if (!tableInfo.Rooms.contains(delta.GetRoomId())) { PreserveTable(table); - changes = true; + changes |= true; } auto &room = tableInfo.Rooms[delta.GetRoomId()]; @@ -98,7 +114,6 @@ bool TSchemeModifier::Apply(const TAlterRecord &delta) changes |= ChangeTableSetting(table, room.Main, main); changes |= ChangeTableSetting(table, room.Blobs, blobs); changes |= ChangeTableSetting(table, room.Outer, outer); -#pragma clang diagnostic pop } else if (action == TAlterRecord::SetRedo) { const ui32 annex = delta.HasAnnex() ? delta.GetAnnex() : 0; @@ -142,14 +157,14 @@ bool TSchemeModifier::Apply(const TAlterRecord &delta) if (delta.HasExecutorLogFastCommitTactic()) changes |= SetExecutorLogFastCommitTactic(delta.GetExecutorLogFastCommitTactic()); } else if (action == TAlterRecord::SetCompactionPolicy) { - changes = SetCompactionPolicy(table, delta.GetCompactionPolicy()); + changes |= SetCompactionPolicy(table, delta.GetCompactionPolicy()); } else { Y_FAIL("unknown scheme delta record type"); } if (delta.HasTableId() && changes) Affects.insert(table); - return changes; + return bool(changes); } bool TSchemeModifier::AddColumnToFamily(ui32 tid, ui32 cid, ui32 family) |