aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsnaury <snaury@ydb.tech>2023-02-20 11:16:06 +0300
committersnaury <snaury@ydb.tech>2023-02-20 11:16:06 +0300
commit5ccde54e571dd13c3c37f6ceb1c7613b0b6682ea (patch)
tree54a1e05a60d7314ff2cb6486b593e2aacb16c1a1
parent2169b4de60762aca596fd4df574ce1ff26c921fb (diff)
downloadydb-5ccde54e571dd13c3c37f6ceb1c7613b0b6682ea.tar.gz
Fix changes tracking when applying schema entries
-rw-r--r--ydb/core/tablet_flat/flat_dbase_apply.cpp47
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)