Skip to content

Commit 6924b5b

Browse files
authored
Merge pull request redpanda-data#24107 from oleiman/euse/core-8102/schema-validation-sanctions-alter-followup
[CORE-8102] Separate key and value schema ID validation sanctions
2 parents 39638eb + 2856989 commit 6924b5b

File tree

2 files changed

+50
-5
lines changed

2 files changed

+50
-5
lines changed

src/v/cluster/topics_frontend.cc

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -116,14 +116,24 @@ std::vector<std::string_view> get_enterprise_features(
116116
features.emplace_back("tiered storage");
117117
}
118118

119-
constexpr auto schema_id_validation_enabled =
119+
static constexpr auto key_schema_id_validation_enabled =
120120
[](const cluster::topic_properties& pp) -> bool {
121121
return pp.record_key_schema_id_validation.value_or(false)
122-
|| pp.record_key_schema_id_validation_compat.value_or(false)
123-
|| pp.record_value_schema_id_validation.value_or(false)
122+
|| pp.record_key_schema_id_validation_compat.value_or(false);
123+
};
124+
125+
static constexpr auto value_schema_id_validation_enabled =
126+
[](const cluster::topic_properties& pp) -> bool {
127+
return pp.record_value_schema_id_validation.value_or(false)
124128
|| pp.record_value_schema_id_validation_compat.value_or(false);
125129
};
126130

131+
static constexpr auto schema_id_validation_enabled =
132+
[](const cluster::topic_properties& pp) -> bool {
133+
return key_schema_id_validation_enabled(pp)
134+
|| value_schema_id_validation_enabled(pp);
135+
};
136+
127137
constexpr auto unset_or_unchanged =
128138
[](
129139
const reflection::is_std_optional auto& curr,
@@ -152,8 +162,9 @@ std::vector<std::string_view> get_enterprise_features(
152162
};
153163

154164
if (
155-
(schema_id_validation_enabled(properties)
156-
< schema_id_validation_enabled(updated_properties))
165+
((key_schema_id_validation_enabled(properties)
166+
< key_schema_id_validation_enabled(updated_properties))
167+
|| (value_schema_id_validation_enabled(properties) < value_schema_id_validation_enabled(updated_properties)))
157168
|| (schema_id_validation_enabled(updated_properties) && sns_modified())) {
158169
features.emplace_back("schema id validation");
159170
}

src/v/kafka/server/tests/alter_config_test.cc

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1396,6 +1396,40 @@ FIXTURE_TEST(test_unlicensed_alter_configs, alter_config_test_fixture) {
13961396
},
13971397
failure);
13981398

1399+
const auto key_validation = props_t{
1400+
with(kafka::topic_property_record_key_schema_id_validation, true),
1401+
};
1402+
test_cases.emplace_back(
1403+
"set_value_after_key",
1404+
key_validation,
1405+
alter_props_t{{set(
1406+
kafka::topic_property_record_value_schema_id_validation_compat,
1407+
true)}},
1408+
failure);
1409+
test_cases.emplace_back(
1410+
"unset_key",
1411+
key_validation,
1412+
alter_props_t{{set(
1413+
kafka::topic_property_record_key_schema_id_validation, false)}},
1414+
success);
1415+
1416+
const auto value_validation = props_t{
1417+
with(kafka::topic_property_record_value_schema_id_validation, true),
1418+
};
1419+
test_cases.emplace_back(
1420+
"set_key_after_value",
1421+
value_validation,
1422+
alter_props_t{{set(
1423+
kafka::topic_property_record_key_schema_id_validation_compat,
1424+
true)}},
1425+
failure);
1426+
test_cases.emplace_back(
1427+
"unset_value",
1428+
value_validation,
1429+
alter_props_t{{set(
1430+
kafka::topic_property_record_value_schema_id_validation, false)}},
1431+
success);
1432+
13991433
const auto validation_with_strat = props_t{
14001434
with(kafka::topic_property_record_key_schema_id_validation, true),
14011435
with(kafka::topic_property_record_value_schema_id_validation, true),

0 commit comments

Comments
 (0)