You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kafka.apache.org by cm...@apache.org on 2021/06/15 23:06:24 UTC
[kafka] branch trunk updated: KAFKA-12877: Make flexibleVersions
mandatory (#10804)
This is an automated email from the ASF dual-hosted git repository.
cmccabe pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/kafka.git
The following commit(s) were added to refs/heads/trunk by this push:
new 135de58 KAFKA-12877: Make flexibleVersions mandatory (#10804)
135de58 is described below
commit 135de5801ecaa1812e1677588025bb42878e0611
Author: Colin Patrick McCabe <cm...@confluent.io>
AuthorDate: Tue Jun 15 16:04:30 2021 -0700
KAFKA-12877: Make flexibleVersions mandatory (#10804)
Many Kafka protocol JSON files were accidentally configured to not use
flexible versions, since it was not on by default. This PR requires
JSON files to specify a flexibleVersions value. If the JSON file does
not specify the flexibleVersions value, display an error message
suggesting the correct value to use for new messages.
Reviewers: Jason Gustafson <ja...@confluent.io>
---
.../src/main/resources/common/message/BeginQuorumEpochRequest.json | 1 +
.../src/main/resources/common/message/BeginQuorumEpochResponse.json | 1 +
.../src/main/resources/common/message/ConsumerProtocolAssignment.json | 1 +
.../main/resources/common/message/ConsumerProtocolSubscription.json | 1 +
clients/src/main/resources/common/message/EndQuorumEpochRequest.json | 1 +
clients/src/main/resources/common/message/EndQuorumEpochResponse.json | 1 +
clients/src/main/resources/common/message/OffsetDeleteRequest.json | 1 +
clients/src/main/resources/common/message/OffsetDeleteResponse.json | 1 +
clients/src/main/resources/common/message/SaslHandshakeRequest.json | 1 +
clients/src/main/resources/common/message/SaslHandshakeResponse.json | 1 +
core/src/main/resources/common/message/GroupMetadataKey.json | 1 +
core/src/main/resources/common/message/GroupMetadataValue.json | 1 +
core/src/main/resources/common/message/OffsetCommitKey.json | 1 +
core/src/main/resources/common/message/OffsetCommitValue.json | 1 +
core/src/main/resources/common/message/TransactionLogKey.json | 1 +
core/src/main/resources/common/message/TransactionLogValue.json | 1 +
generator/src/main/java/org/apache/kafka/message/MessageSpec.java | 4 ++++
.../test/java/org/apache/kafka/message/MessageDataGeneratorTest.java | 4 ++++
.../src/test/java/org/apache/kafka/message/StructRegistryTest.java | 4 ++++
metadata/src/main/resources/common/metadata/ConfigRecord.json | 1 +
.../src/main/resources/common/metadata/DelegationTokenRecord.json | 1 +
metadata/src/main/resources/common/metadata/FeatureLevelRecord.json | 1 +
metadata/src/main/resources/common/metadata/FenceBrokerRecord.json | 1 +
metadata/src/main/resources/common/metadata/PartitionRecord.json | 1 +
metadata/src/main/resources/common/metadata/ProducerIdsRecord.json | 1 +
metadata/src/main/resources/common/metadata/QuotaRecord.json | 1 +
metadata/src/main/resources/common/metadata/RegisterBrokerRecord.json | 1 +
metadata/src/main/resources/common/metadata/RemoveTopicRecord.json | 1 +
metadata/src/main/resources/common/metadata/TopicRecord.json | 1 +
metadata/src/main/resources/common/metadata/UnfenceBrokerRecord.json | 1 +
.../src/main/resources/common/metadata/UnregisterBrokerRecord.json | 1 +
.../src/main/resources/common/metadata/UserScramCredentialRecord.json | 1 +
streams/src/main/resources/common/message/SubscriptionInfoData.json | 1 +
33 files changed, 42 insertions(+)
diff --git a/clients/src/main/resources/common/message/BeginQuorumEpochRequest.json b/clients/src/main/resources/common/message/BeginQuorumEpochRequest.json
index f419589..d9d6d92 100644
--- a/clients/src/main/resources/common/message/BeginQuorumEpochRequest.json
+++ b/clients/src/main/resources/common/message/BeginQuorumEpochRequest.json
@@ -19,6 +19,7 @@
"listeners": ["controller"],
"name": "BeginQuorumEpochRequest",
"validVersions": "0",
+ "flexibleVersions": "none",
"fields": [
{ "name": "ClusterId", "type": "string", "versions": "0+",
"nullableVersions": "0+", "default": "null"},
diff --git a/clients/src/main/resources/common/message/BeginQuorumEpochResponse.json b/clients/src/main/resources/common/message/BeginQuorumEpochResponse.json
index 923cd1d..4b7d7f5 100644
--- a/clients/src/main/resources/common/message/BeginQuorumEpochResponse.json
+++ b/clients/src/main/resources/common/message/BeginQuorumEpochResponse.json
@@ -18,6 +18,7 @@
"type": "response",
"name": "BeginQuorumEpochResponse",
"validVersions": "0",
+ "flexibleVersions": "none",
"fields": [
{ "name": "ErrorCode", "type": "int16", "versions": "0+",
"about": "The top level error code."},
diff --git a/clients/src/main/resources/common/message/ConsumerProtocolAssignment.json b/clients/src/main/resources/common/message/ConsumerProtocolAssignment.json
index d148085..50a9706 100644
--- a/clients/src/main/resources/common/message/ConsumerProtocolAssignment.json
+++ b/clients/src/main/resources/common/message/ConsumerProtocolAssignment.json
@@ -22,6 +22,7 @@
// it encounters a newer version, it parses it using the current format. This basically means
// that new versions cannot remove or reorder any of the existing fields.
"validVersions": "0-1",
+ "flexibleVersions": "none",
"fields": [
{ "name": "AssignedPartitions", "type": "[]TopicPartition", "versions": "0+",
"fields": [
diff --git a/clients/src/main/resources/common/message/ConsumerProtocolSubscription.json b/clients/src/main/resources/common/message/ConsumerProtocolSubscription.json
index 81ed7f7..e33c16f 100644
--- a/clients/src/main/resources/common/message/ConsumerProtocolSubscription.json
+++ b/clients/src/main/resources/common/message/ConsumerProtocolSubscription.json
@@ -22,6 +22,7 @@
// it encounters a newer version, it parses it using the current format. This basically means
// that new versions cannot remove or reorder any of the existing fields.
"validVersions": "0-1",
+ "flexibleVersions": "none",
"fields": [
{ "name": "Topics", "type": "[]string", "versions": "0+" },
{ "name": "UserData", "type": "bytes", "versions": "0+", "nullableVersions": "0+",
diff --git a/clients/src/main/resources/common/message/EndQuorumEpochRequest.json b/clients/src/main/resources/common/message/EndQuorumEpochRequest.json
index 25bb57a..a6e4076 100644
--- a/clients/src/main/resources/common/message/EndQuorumEpochRequest.json
+++ b/clients/src/main/resources/common/message/EndQuorumEpochRequest.json
@@ -19,6 +19,7 @@
"listeners": ["controller"],
"name": "EndQuorumEpochRequest",
"validVersions": "0",
+ "flexibleVersions": "none",
"fields": [
{ "name": "ClusterId", "type": "string", "versions": "0+",
"nullableVersions": "0+", "default": "null"},
diff --git a/clients/src/main/resources/common/message/EndQuorumEpochResponse.json b/clients/src/main/resources/common/message/EndQuorumEpochResponse.json
index 62f67bd..cd23247 100644
--- a/clients/src/main/resources/common/message/EndQuorumEpochResponse.json
+++ b/clients/src/main/resources/common/message/EndQuorumEpochResponse.json
@@ -18,6 +18,7 @@
"type": "response",
"name": "EndQuorumEpochResponse",
"validVersions": "0",
+ "flexibleVersions": "none",
"fields": [
{ "name": "ErrorCode", "type": "int16", "versions": "0+",
"about": "The top level error code."},
diff --git a/clients/src/main/resources/common/message/OffsetDeleteRequest.json b/clients/src/main/resources/common/message/OffsetDeleteRequest.json
index 394d1bb..4a9dea6 100644
--- a/clients/src/main/resources/common/message/OffsetDeleteRequest.json
+++ b/clients/src/main/resources/common/message/OffsetDeleteRequest.json
@@ -19,6 +19,7 @@
"listeners": ["zkBroker", "broker"],
"name": "OffsetDeleteRequest",
"validVersions": "0",
+ "flexibleVersions": "none",
"fields": [
{ "name": "GroupId", "type": "string", "versions": "0+", "entityType": "groupId",
"about": "The unique group identifier." },
diff --git a/clients/src/main/resources/common/message/OffsetDeleteResponse.json b/clients/src/main/resources/common/message/OffsetDeleteResponse.json
index 1cdc6ad..d32b36f 100644
--- a/clients/src/main/resources/common/message/OffsetDeleteResponse.json
+++ b/clients/src/main/resources/common/message/OffsetDeleteResponse.json
@@ -18,6 +18,7 @@
"type": "response",
"name": "OffsetDeleteResponse",
"validVersions": "0",
+ "flexibleVersions": "none",
"fields": [
{ "name": "ErrorCode", "type": "int16", "versions": "0+",
"about": "The top-level error code, or 0 if there was no error." },
diff --git a/clients/src/main/resources/common/message/SaslHandshakeRequest.json b/clients/src/main/resources/common/message/SaslHandshakeRequest.json
index 3384db8..a370a80 100644
--- a/clients/src/main/resources/common/message/SaslHandshakeRequest.json
+++ b/clients/src/main/resources/common/message/SaslHandshakeRequest.json
@@ -23,6 +23,7 @@
// client negotiation for clients <= 2.4.
// See https://issues.apache.org/jira/browse/KAFKA-9577
"validVersions": "0-1",
+ "flexibleVersions": "none",
"fields": [
{ "name": "Mechanism", "type": "string", "versions": "0+",
"about": "The SASL mechanism chosen by the client." }
diff --git a/clients/src/main/resources/common/message/SaslHandshakeResponse.json b/clients/src/main/resources/common/message/SaslHandshakeResponse.json
index 039841f..a1567c6 100644
--- a/clients/src/main/resources/common/message/SaslHandshakeResponse.json
+++ b/clients/src/main/resources/common/message/SaslHandshakeResponse.json
@@ -22,6 +22,7 @@
// client negotiation for clients <= 2.4.
// See https://issues.apache.org/jira/browse/KAFKA-9577
"validVersions": "0-1",
+ "flexibleVersions": "none",
"fields": [
{ "name": "ErrorCode", "type": "int16", "versions": "0+",
"about": "The error code, or 0 if there was no error." },
diff --git a/core/src/main/resources/common/message/GroupMetadataKey.json b/core/src/main/resources/common/message/GroupMetadataKey.json
index 2c39e68..fa0c9ff 100644
--- a/core/src/main/resources/common/message/GroupMetadataKey.json
+++ b/core/src/main/resources/common/message/GroupMetadataKey.json
@@ -17,6 +17,7 @@
"type": "data",
"name": "GroupMetadataKey",
"validVersions": "2",
+ "flexibleVersions": "none",
"fields": [
{ "name": "group", "type": "string", "versions": "2" }
]
diff --git a/core/src/main/resources/common/message/GroupMetadataValue.json b/core/src/main/resources/common/message/GroupMetadataValue.json
index 4d0f34d..826a7c8 100644
--- a/core/src/main/resources/common/message/GroupMetadataValue.json
+++ b/core/src/main/resources/common/message/GroupMetadataValue.json
@@ -17,6 +17,7 @@
"type": "data",
"name": "GroupMetadataValue",
"validVersions": "0-3",
+ "flexibleVersions": "none",
"fields": [
{ "name": "protocolType", "versions": "0+", "type": "string"},
{ "name": "generation", "versions": "0+", "type": "int32" },
diff --git a/core/src/main/resources/common/message/OffsetCommitKey.json b/core/src/main/resources/common/message/OffsetCommitKey.json
index 1ddd20a..a9d1bc3 100644
--- a/core/src/main/resources/common/message/OffsetCommitKey.json
+++ b/core/src/main/resources/common/message/OffsetCommitKey.json
@@ -17,6 +17,7 @@
"type": "data",
"name": "OffsetCommitKey",
"validVersions": "0-1",
+ "flexibleVersions": "none",
"fields": [
{ "name": "group", "type": "string", "versions": "0-1" },
{ "name": "topic", "type": "string", "versions": "0-1" },
diff --git a/core/src/main/resources/common/message/OffsetCommitValue.json b/core/src/main/resources/common/message/OffsetCommitValue.json
index df524d0..db8a628 100644
--- a/core/src/main/resources/common/message/OffsetCommitValue.json
+++ b/core/src/main/resources/common/message/OffsetCommitValue.json
@@ -17,6 +17,7 @@
"type": "data",
"name": "OffsetCommitValue",
"validVersions": "0-3",
+ "flexibleVersions": "none",
"fields": [
{ "name": "offset", "type": "int64", "versions": "0+" },
{ "name": "leaderEpoch", "type": "int32", "versions": "3+", "default": -1, "ignorable": true},
diff --git a/core/src/main/resources/common/message/TransactionLogKey.json b/core/src/main/resources/common/message/TransactionLogKey.json
index f6fdbfb..7a5d3e5 100644
--- a/core/src/main/resources/common/message/TransactionLogKey.json
+++ b/core/src/main/resources/common/message/TransactionLogKey.json
@@ -17,6 +17,7 @@
"type": "data",
"name": "TransactionLogKey",
"validVersions": "0",
+ "flexibleVersions": "none",
"fields": [
{ "name": "TransactionalId", "type": "string", "versions": "0"}
]
diff --git a/core/src/main/resources/common/message/TransactionLogValue.json b/core/src/main/resources/common/message/TransactionLogValue.json
index 153dc31..7915c3d 100644
--- a/core/src/main/resources/common/message/TransactionLogValue.json
+++ b/core/src/main/resources/common/message/TransactionLogValue.json
@@ -17,6 +17,7 @@
"type": "data",
"name": "TransactionLogValue",
"validVersions": "0",
+ "flexibleVersions": "none",
"fields": [
{ "name": "ProducerId", "type": "int64", "versions": "0",
"about": "Producer id in use by the transactional id"},
diff --git a/generator/src/main/java/org/apache/kafka/message/MessageSpec.java b/generator/src/main/java/org/apache/kafka/message/MessageSpec.java
index fdcd7cd..82866be 100644
--- a/generator/src/main/java/org/apache/kafka/message/MessageSpec.java
+++ b/generator/src/main/java/org/apache/kafka/message/MessageSpec.java
@@ -53,6 +53,10 @@ public final class MessageSpec {
this.type = Objects.requireNonNull(type);
this.commonStructs = commonStructs == null ? Collections.emptyList() :
Collections.unmodifiableList(new ArrayList<>(commonStructs));
+ if (flexibleVersions == null) {
+ throw new RuntimeException("You must specify a value for flexibleVersions. " +
+ "Please use 0+ for all new messages.");
+ }
this.flexibleVersions = Versions.parse(flexibleVersions, Versions.NONE);
if ((!this.flexibleVersions().empty()) &&
(this.flexibleVersions.highest() < Short.MAX_VALUE)) {
diff --git a/generator/src/test/java/org/apache/kafka/message/MessageDataGeneratorTest.java b/generator/src/test/java/org/apache/kafka/message/MessageDataGeneratorTest.java
index 5d2d442..a51aacc 100644
--- a/generator/src/test/java/org/apache/kafka/message/MessageDataGeneratorTest.java
+++ b/generator/src/test/java/org/apache/kafka/message/MessageDataGeneratorTest.java
@@ -36,6 +36,7 @@ public class MessageDataGeneratorTest {
" \"type\": \"request\",",
" \"name\": \"FooBar\",",
" \"validVersions\": \"0-2\",",
+ " \"flexibleVersions\": \"none\",",
" \"fields\": [",
" { \"name\": \"field1\", \"type\": \"int32\", \"versions\": \"0+\" },",
" { \"name\": \"field2\", \"type\": \"[]TestStruct\", \"versions\": \"1+\", ",
@@ -61,6 +62,7 @@ public class MessageDataGeneratorTest {
" \"type\": \"request\",",
" \"name\": \"FooBar\",",
" \"validVersions\": \"0-2\",",
+ " \"flexibleVersions\": \"none\",",
" \"fields\": [",
" { \"name\": \"field1\", \"type\": \"int32\", \"versions\": \"0+\", \"default\": \"null\" }",
" ]",
@@ -78,6 +80,7 @@ public class MessageDataGeneratorTest {
" \"type\": \"request\",",
" \"name\": \"FooBar\",",
" \"validVersions\": \"0-2\",",
+ " \"flexibleVersions\": \"none\",",
" \"fields\": [",
" { \"name\": \"field1\", \"type\": \"[]int32\", \"versions\": \"0+\", \"nullableVersions\": \"1+\", ",
" \"default\": \"null\" }",
@@ -103,6 +106,7 @@ public class MessageDataGeneratorTest {
" \"type\": \"request\",",
" \"name\": \"FooBar\",",
" \"validVersions\": \"0-2\",",
+ " \"flexibleVersions\": \"0+\",",
" \"fields\": [",
" { \"name\": \"_badName\", \"type\": \"[]int32\", \"versions\": \"0+\" }",
" ]",
diff --git a/generator/src/test/java/org/apache/kafka/message/StructRegistryTest.java b/generator/src/test/java/org/apache/kafka/message/StructRegistryTest.java
index 9a2f8e3..478a72a 100644
--- a/generator/src/test/java/org/apache/kafka/message/StructRegistryTest.java
+++ b/generator/src/test/java/org/apache/kafka/message/StructRegistryTest.java
@@ -38,6 +38,7 @@ public class StructRegistryTest {
" \"type\": \"request\",",
" \"name\": \"LeaderAndIsrRequest\",",
" \"validVersions\": \"0-2\",",
+ " \"flexibleVersions\": \"0+\",",
" \"fields\": [",
" { \"name\": \"field1\", \"type\": \"int32\", \"versions\": \"0+\" },",
" { \"name\": \"field2\", \"type\": \"[]TestCommonStruct\", \"versions\": \"1+\" },",
@@ -68,6 +69,7 @@ public class StructRegistryTest {
" \"type\": \"request\",",
" \"name\": \"LeaderAndIsrRequest\",",
" \"validVersions\": \"0-2\",",
+ " \"flexibleVersions\": \"0+\",",
" \"fields\": [",
" { \"name\": \"field1\", \"type\": \"int32\", \"versions\": \"0+\" },",
" { \"name\": \"field2\", \"type\": \"[]TestCommonStruct\", \"versions\": \"0+\", ",
@@ -98,6 +100,7 @@ public class StructRegistryTest {
" \"type\": \"request\",",
" \"name\": \"LeaderAndIsrRequest\",",
" \"validVersions\": \"0-2\",",
+ " \"flexibleVersions\": \"0+\",",
" \"fields\": [",
" { \"name\": \"field1\", \"type\": \"int32\", \"versions\": \"0+\" }",
" ],",
@@ -126,6 +129,7 @@ public class StructRegistryTest {
" \"type\": \"request\",",
" \"name\": \"LeaderAndIsrRequest\",",
" \"validVersions\": \"0-2\",",
+ " \"flexibleVersions\": \"0+\",",
" \"fields\": [",
" { \"name\": \"field1\", \"type\": \"int32\", \"versions\": \"0+\" },",
" { \"name\": \"field2\", \"type\": \"TestInlineStruct\", \"versions\": \"0+\", ",
diff --git a/metadata/src/main/resources/common/metadata/ConfigRecord.json b/metadata/src/main/resources/common/metadata/ConfigRecord.json
index 5a3d97e..27140ab 100644
--- a/metadata/src/main/resources/common/metadata/ConfigRecord.json
+++ b/metadata/src/main/resources/common/metadata/ConfigRecord.json
@@ -18,6 +18,7 @@
"type": "metadata",
"name": "ConfigRecord",
"validVersions": "0",
+ "flexibleVersions": "none",
"fields": [
{ "name": "ResourceType", "type": "int8", "versions": "0+",
"about": "The type of resource this configuration applies to." },
diff --git a/metadata/src/main/resources/common/metadata/DelegationTokenRecord.json b/metadata/src/main/resources/common/metadata/DelegationTokenRecord.json
index d9d2ea6..77f4b3c 100644
--- a/metadata/src/main/resources/common/metadata/DelegationTokenRecord.json
+++ b/metadata/src/main/resources/common/metadata/DelegationTokenRecord.json
@@ -18,6 +18,7 @@
"type": "metadata",
"name": "DelegationTokenRecord",
"validVersions": "0",
+ "flexibleVersions": "none",
"fields": [
{ "name": "Owner", "type": "string", "versions": "0+",
"about": "The delegation token owner." },
diff --git a/metadata/src/main/resources/common/metadata/FeatureLevelRecord.json b/metadata/src/main/resources/common/metadata/FeatureLevelRecord.json
index 542578a..53876c2 100644
--- a/metadata/src/main/resources/common/metadata/FeatureLevelRecord.json
+++ b/metadata/src/main/resources/common/metadata/FeatureLevelRecord.json
@@ -18,6 +18,7 @@
"type": "metadata",
"name": "FeatureLevelRecord",
"validVersions": "0",
+ "flexibleVersions": "none",
"fields": [
{ "name": "Name", "type": "string", "versions": "0+",
"about": "The feature name." },
diff --git a/metadata/src/main/resources/common/metadata/FenceBrokerRecord.json b/metadata/src/main/resources/common/metadata/FenceBrokerRecord.json
index e8be19e..d784395 100644
--- a/metadata/src/main/resources/common/metadata/FenceBrokerRecord.json
+++ b/metadata/src/main/resources/common/metadata/FenceBrokerRecord.json
@@ -18,6 +18,7 @@
"type": "metadata",
"name": "FenceBrokerRecord",
"validVersions": "0",
+ "flexibleVersions": "none",
"fields": [
{ "name": "Id", "type": "int32", "versions": "0+", "entityType": "brokerId",
"about": "The broker ID to fence. It will be removed from all ISRs." },
diff --git a/metadata/src/main/resources/common/metadata/PartitionRecord.json b/metadata/src/main/resources/common/metadata/PartitionRecord.json
index 4dc924a..243fde8 100644
--- a/metadata/src/main/resources/common/metadata/PartitionRecord.json
+++ b/metadata/src/main/resources/common/metadata/PartitionRecord.json
@@ -18,6 +18,7 @@
"type": "metadata",
"name": "PartitionRecord",
"validVersions": "0",
+ "flexibleVersions": "none",
"fields": [
{ "name": "PartitionId", "type": "int32", "versions": "0+", "default": "-1",
"about": "The partition id." },
diff --git a/metadata/src/main/resources/common/metadata/ProducerIdsRecord.json b/metadata/src/main/resources/common/metadata/ProducerIdsRecord.json
index 09e6b53..0467871 100644
--- a/metadata/src/main/resources/common/metadata/ProducerIdsRecord.json
+++ b/metadata/src/main/resources/common/metadata/ProducerIdsRecord.json
@@ -18,6 +18,7 @@
"type": "metadata",
"name": "ProducerIdsRecord",
"validVersions": "0",
+ "flexibleVersions": "0+",
"fields": [
{ "name": "BrokerId", "type": "int32", "versions": "0+", "entityType": "brokerId",
"about": "The ID of the requesting broker" },
diff --git a/metadata/src/main/resources/common/metadata/QuotaRecord.json b/metadata/src/main/resources/common/metadata/QuotaRecord.json
index efdb9f6..a6eed74 100644
--- a/metadata/src/main/resources/common/metadata/QuotaRecord.json
+++ b/metadata/src/main/resources/common/metadata/QuotaRecord.json
@@ -18,6 +18,7 @@
"type": "metadata",
"name": "QuotaRecord",
"validVersions": "0",
+ "flexibleVersions": "none",
"fields": [
{ "name": "Entity", "type": "[]EntityData", "versions": "0+",
"about": "The quota entity to alter.", "fields": [
diff --git a/metadata/src/main/resources/common/metadata/RegisterBrokerRecord.json b/metadata/src/main/resources/common/metadata/RegisterBrokerRecord.json
index b457093..ba9a0d3 100644
--- a/metadata/src/main/resources/common/metadata/RegisterBrokerRecord.json
+++ b/metadata/src/main/resources/common/metadata/RegisterBrokerRecord.json
@@ -18,6 +18,7 @@
"type": "metadata",
"name": "RegisterBrokerRecord",
"validVersions": "0",
+ "flexibleVersions": "none",
"fields": [
{ "name": "BrokerId", "type": "int32", "versions": "0+", "entityType": "brokerId",
"about": "The broker id." },
diff --git a/metadata/src/main/resources/common/metadata/RemoveTopicRecord.json b/metadata/src/main/resources/common/metadata/RemoveTopicRecord.json
index 8a11329..efc4ad6 100644
--- a/metadata/src/main/resources/common/metadata/RemoveTopicRecord.json
+++ b/metadata/src/main/resources/common/metadata/RemoveTopicRecord.json
@@ -18,6 +18,7 @@
"type": "metadata",
"name": "RemoveTopicRecord",
"validVersions": "0",
+ "flexibleVersions": "none",
"fields": [
{ "name": "TopicId", "type": "uuid", "versions": "0+",
"about": "The topic to remove. All associated partitions will be removed as well." }
diff --git a/metadata/src/main/resources/common/metadata/TopicRecord.json b/metadata/src/main/resources/common/metadata/TopicRecord.json
index dae550f..de4f7a7 100644
--- a/metadata/src/main/resources/common/metadata/TopicRecord.json
+++ b/metadata/src/main/resources/common/metadata/TopicRecord.json
@@ -18,6 +18,7 @@
"type": "metadata",
"name": "TopicRecord",
"validVersions": "0",
+ "flexibleVersions": "none",
"fields": [
{ "name": "Name", "type": "string", "versions": "0+", "entityType": "topicName",
"about": "The topic name." },
diff --git a/metadata/src/main/resources/common/metadata/UnfenceBrokerRecord.json b/metadata/src/main/resources/common/metadata/UnfenceBrokerRecord.json
index 23ed22a..15e3f90c 100644
--- a/metadata/src/main/resources/common/metadata/UnfenceBrokerRecord.json
+++ b/metadata/src/main/resources/common/metadata/UnfenceBrokerRecord.json
@@ -18,6 +18,7 @@
"type": "metadata",
"name": "UnfenceBrokerRecord",
"validVersions": "0",
+ "flexibleVersions": "none",
"fields": [
{ "name": "Id", "type": "int32", "versions": "0+", "entityType": "brokerId",
"about": "The broker ID to unfence." },
diff --git a/metadata/src/main/resources/common/metadata/UnregisterBrokerRecord.json b/metadata/src/main/resources/common/metadata/UnregisterBrokerRecord.json
index 5f5989af..58569bf 100644
--- a/metadata/src/main/resources/common/metadata/UnregisterBrokerRecord.json
+++ b/metadata/src/main/resources/common/metadata/UnregisterBrokerRecord.json
@@ -18,6 +18,7 @@
"type": "metadata",
"name": "UnregisterBrokerRecord",
"validVersions": "0",
+ "flexibleVersions": "none",
"fields": [
{ "name": "BrokerId", "type": "int32", "versions": "0+", "entityType": "brokerId",
"about": "The broker id." },
diff --git a/metadata/src/main/resources/common/metadata/UserScramCredentialRecord.json b/metadata/src/main/resources/common/metadata/UserScramCredentialRecord.json
index 1dd7e0a..264e92c 100644
--- a/metadata/src/main/resources/common/metadata/UserScramCredentialRecord.json
+++ b/metadata/src/main/resources/common/metadata/UserScramCredentialRecord.json
@@ -18,6 +18,7 @@
"type": "metadata",
"name": "UserScramCredentialRecord",
"validVersions": "0",
+ "flexibleVersions": "none",
"fields": [
{ "name": "Name", "type": "string", "versions": "0+",
"about": "The user name." },
diff --git a/streams/src/main/resources/common/message/SubscriptionInfoData.json b/streams/src/main/resources/common/message/SubscriptionInfoData.json
index 1586863..f9a830e 100644
--- a/streams/src/main/resources/common/message/SubscriptionInfoData.json
+++ b/streams/src/main/resources/common/message/SubscriptionInfoData.json
@@ -16,6 +16,7 @@
{
"name": "SubscriptionInfoData",
"validVersions": "1-10",
+ "flexibleVersions": "none",
"fields": [
{
"name": "version",