From a5f64592a382b7d10c89d64df737053695ee8314 Mon Sep 17 00:00:00 2001 From: Pratik Mallya Date: Mon, 24 Aug 2026 12:48:32 -0500 Subject: [PATCH] feat: recognize message.timestamp.after.max.ms and before.max.ms settings These Kafka 3.6+ topic configs bound how far a message timestamp can diverge from broker time in either direction. topicctl's config validator didn't have entries for them, so any topic YAML explicitly setting these keys failed with "not recognized topic config setting" even though brokers (including Confluent Cloud) support and return them (see #191). Add validators using the same non-negative int64 pattern as sibling settings like delete.retention.ms. --- pkg/config/settings.go | 14 ++++++++++++++ pkg/config/settings_test.go | 8 ++++++++ 2 files changed, 22 insertions(+) diff --git a/pkg/config/settings.go b/pkg/config/settings.go index b48cbcd1..e637f869 100644 --- a/pkg/config/settings.go +++ b/pkg/config/settings.go @@ -155,6 +155,20 @@ var keyValidators = map[string]configValidator{ "2.6-IV0", ) }, + "message.timestamp.after.max.ms": func(v string) bool { + intVal, err := strconv.ParseInt(v, 10, 64) + if err != nil { + return false + } + return intVal >= 0 + }, + "message.timestamp.before.max.ms": func(v string) bool { + intVal, err := strconv.ParseInt(v, 10, 64) + if err != nil { + return false + } + return intVal >= 0 + }, "message.timestamp.difference.max.ms": func(v string) bool { intVal, err := strconv.ParseInt(v, 10, 64) if err != nil { diff --git a/pkg/config/settings_test.go b/pkg/config/settings_test.go index f9d48812..1c91d42a 100644 --- a/pkg/config/settings_test.go +++ b/pkg/config/settings_test.go @@ -72,6 +72,14 @@ func TestValidateSettings(t *testing.T) { }, expError: true, }, + { + description: "message timestamp bounds", + settings: TopicSettings{ + "message.timestamp.after.max.ms": 9223372036854775807, + "message.timestamp.before.max.ms": "86400000", + }, + expError: false, + }, { description: "non-matching string", settings: TopicSettings{