Merge 'service: assert that tables updated via group0 use schema commitlog' from Aleksandra Martyniuk
Set enable_schema_commitlog for each group0 tables.
Assert that group0 tables use schema commitlog in ensure_group0_schema
(per each command).
Fixes: https://scylladb.atlassian.net/browse/SCYLLADB-914.
Needs backport to all live releases as all are vulnerable
Closes scylladb/scylladb#28876
* github.com:scylladb/scylladb:
test: add test_group0_tables_use_schema_commitlog
db: service: remove group0 tables from schema commitlog schema initializer
service: ensure that tables updated via group0 use schema commitlog
db: schema: remove set_is_group0_table param
(cherry picked from commit b90fe19a42)
Closes scylladb/scylladb#28916
This commit is contained in:
@@ -105,7 +105,7 @@ namespace {
|
||||
schema_builder::register_schema_initializer([](schema_builder& builder) {
|
||||
if (builder.ks_name() == schema_tables::NAME) {
|
||||
// all schema tables are group0 tables
|
||||
builder.set_is_group0_table(true);
|
||||
builder.set_is_group0_table();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -87,31 +87,15 @@ namespace {
|
||||
static const std::unordered_set<sstring> tables = {
|
||||
schema_tables::SCYLLA_TABLE_SCHEMA_HISTORY,
|
||||
system_keyspace::BROADCAST_KV_STORE,
|
||||
system_keyspace::CDC_GENERATIONS_V3,
|
||||
system_keyspace::RAFT,
|
||||
system_keyspace::RAFT_SNAPSHOTS,
|
||||
system_keyspace::RAFT_SNAPSHOT_CONFIG,
|
||||
system_keyspace::GROUP0_HISTORY,
|
||||
system_keyspace::DISCOVERY,
|
||||
system_keyspace::TABLETS,
|
||||
system_keyspace::TOPOLOGY,
|
||||
system_keyspace::TOPOLOGY_REQUESTS,
|
||||
system_keyspace::LOCAL,
|
||||
system_keyspace::PEERS,
|
||||
system_keyspace::SCYLLA_LOCAL,
|
||||
system_keyspace::COMMITLOG_CLEANUPS,
|
||||
system_keyspace::SERVICE_LEVELS_V2,
|
||||
system_keyspace::VIEW_BUILD_STATUS_V2,
|
||||
system_keyspace::CDC_STREAMS_STATE,
|
||||
system_keyspace::CDC_STREAMS_HISTORY,
|
||||
system_keyspace::ROLES,
|
||||
system_keyspace::ROLE_MEMBERS,
|
||||
system_keyspace::ROLE_ATTRIBUTES,
|
||||
system_keyspace::ROLE_PERMISSIONS,
|
||||
system_keyspace::CDC_LOCAL,
|
||||
system_keyspace::DICTS,
|
||||
system_keyspace::VIEW_BUILDING_TASKS,
|
||||
system_keyspace::CLIENT_ROUTES,
|
||||
};
|
||||
if (builder.ks_name() == system_keyspace::NAME && tables.contains(builder.cf_name())) {
|
||||
builder.enable_schema_commitlog();
|
||||
@@ -143,7 +127,7 @@ namespace {
|
||||
system_keyspace::REPAIR_TASKS,
|
||||
};
|
||||
if (builder.ks_name() == system_keyspace::NAME && tables.contains(builder.cf_name())) {
|
||||
builder.set_is_group0_table(true);
|
||||
builder.set_is_group0_table();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -263,8 +263,9 @@ public:
|
||||
void enable_schema_commitlog() {
|
||||
_static_props.enable_schema_commitlog();
|
||||
}
|
||||
void set_is_group0_table(bool enabled = true) {
|
||||
_static_props.is_group0_table = enabled;
|
||||
void set_is_group0_table() {
|
||||
_static_props.is_group0_table = true;
|
||||
enable_schema_commitlog();
|
||||
}
|
||||
|
||||
class default_names {
|
||||
|
||||
@@ -350,6 +350,10 @@ static void ensure_group0_schema(const group0_command& cmd, const replica::datab
|
||||
if (!schema->static_props().is_group0_table) {
|
||||
on_internal_error(slogger, fmt::format("ensure_group0_schema: schema is not group0: {}", schema->cf_name()));
|
||||
}
|
||||
|
||||
if (!schema->static_props().use_schema_commitlog) {
|
||||
on_internal_error(slogger, fmt::format("ensure_group0_schema: group0 table {} does not use schema commitlog", schema->cf_name()));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -1857,7 +1857,7 @@ SEASTAR_THREAD_TEST_CASE(test_tombstone_gc_state_snapshot) {
|
||||
|
||||
schema_builder::register_schema_initializer([] (schema_builder& builder) {
|
||||
if (builder.ks_name() == "test" && builder.cf_name() == "table_gc_mode_group0") {
|
||||
builder.set_is_group0_table(true);
|
||||
builder.set_is_group0_table();
|
||||
}
|
||||
});
|
||||
auto table_gc_mode_group0 = schema_builder("test", "table_gc_mode_group0")
|
||||
|
||||
@@ -252,7 +252,7 @@ SEASTAR_TEST_CASE(test_group0_batch) {
|
||||
// (group0 mutations are not allowed on non-group0 tables)
|
||||
schema_builder::register_schema_initializer([](schema_builder& builder) {
|
||||
if (builder.cf_name() == "test_group0_batch") {
|
||||
builder.set_is_group0_table(true);
|
||||
builder.set_is_group0_table();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -345,4 +345,29 @@ SEASTAR_TEST_CASE(test_group0_batch) {
|
||||
});
|
||||
}
|
||||
|
||||
SEASTAR_TEST_CASE(test_group0_tables_use_schema_commitlog) {
|
||||
return do_with_cql_env([] (cql_test_env& e) {
|
||||
schema_builder::register_schema_initializer([](schema_builder& builder) {
|
||||
if (builder.cf_name() == "test_group0_tables_use_schema_commitlog1") {
|
||||
builder.set_is_group0_table();
|
||||
}
|
||||
});
|
||||
|
||||
auto test_group0_tables_use_schema_commitlog1 = schema_builder("test", "test_group0_tables_use_schema_commitlog1")
|
||||
.with_column("pk", utf8_type, column_kind::partition_key)
|
||||
.build();
|
||||
|
||||
auto test_group0_tables_use_schema_commitlog2 = schema_builder("test", "test_group0_tables_use_schema_commitlog2")
|
||||
.with_column("pk", utf8_type, column_kind::partition_key)
|
||||
.build();
|
||||
|
||||
BOOST_REQUIRE(test_group0_tables_use_schema_commitlog1->static_props().is_group0_table);
|
||||
BOOST_REQUIRE(test_group0_tables_use_schema_commitlog1->static_props().use_schema_commitlog);
|
||||
BOOST_REQUIRE(!test_group0_tables_use_schema_commitlog2->static_props().is_group0_table);
|
||||
BOOST_REQUIRE(!test_group0_tables_use_schema_commitlog2->static_props().use_schema_commitlog);
|
||||
|
||||
return make_ready_future();
|
||||
});
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
Reference in New Issue
Block a user