diff --git a/clients/src/main/java/org/apache/kafka/common/config/AbstractConfig.java b/clients/src/main/java/org/apache/kafka/common/config/AbstractConfig.java index 8270f22b65c..9188b1687a8 100644 --- a/clients/src/main/java/org/apache/kafka/common/config/AbstractConfig.java +++ b/clients/src/main/java/org/apache/kafka/common/config/AbstractConfig.java @@ -109,8 +109,7 @@ public class AbstractConfig { */ @SuppressWarnings({"this-escape"}) public AbstractConfig(ConfigDef definition, Map originals, Map configProviderProps, boolean doLog) { - Map originalMap = Utils.castToStringObjectMap(originals); - preProcessParsedConfig(originalMap); + Map originalMap = preProcessParsedConfig(Collections.unmodifiableMap(Utils.castToStringObjectMap(originals))); this.originals = resolveConfigVariables(configProviderProps, originalMap); this.values = definition.parse(this.originals); Map configUpdates = postProcessParsedConfig(Collections.unmodifiableMap(this.values)); @@ -144,7 +143,6 @@ public class AbstractConfig { */ public AbstractConfig(ConfigDef definition, Map originals, boolean doLog) { this(definition, originals, Collections.emptyMap(), doLog); - } /** @@ -155,7 +153,7 @@ public class AbstractConfig { * @return a map of updates that should be applied to the configuration (will be validated to prevent bad updates) */ protected Map preProcessParsedConfig(Map parsedValues) { - return Map.of(); + return parsedValues; } /** diff --git a/clients/src/test/java/org/apache/kafka/common/config/AbstractConfigTest.java b/clients/src/test/java/org/apache/kafka/common/config/AbstractConfigTest.java index 31ffdfb7117..8669156d7c3 100644 --- a/clients/src/test/java/org/apache/kafka/common/config/AbstractConfigTest.java +++ b/clients/src/test/java/org/apache/kafka/common/config/AbstractConfigTest.java @@ -114,6 +114,13 @@ public class AbstractConfigTest { assertEquals(expected, originalsWithPrefix); } + @Test + public void testPreprocessConfig() { + Properties props = new Properties(); + TestConfig config = new TestConfig(props); + assertEquals("success", config.get("preprocess")); + } + @Test public void testValuesWithPrefixOverride() { String prefix = "prefix."; @@ -702,17 +709,32 @@ public class AbstractConfigTest { public static final String METRIC_REPORTER_CLASSES_CONFIG = "metric.reporters"; private static final String METRIC_REPORTER_CLASSES_DOC = "A list of classes to use as metrics reporters."; + public static final String PREPROCESSOR_CONFIG = "preprocess"; + private static final String PREPROCESSOR_CONFIG_DOC = "Override from preprocess step."; + static { CONFIG = new ConfigDef().define(METRIC_REPORTER_CLASSES_CONFIG, Type.LIST, "", Importance.LOW, - METRIC_REPORTER_CLASSES_DOC); + METRIC_REPORTER_CLASSES_DOC) + .define(PREPROCESSOR_CONFIG, + Type.STRING, + "", + Importance.LOW, + PREPROCESSOR_CONFIG_DOC); } public TestConfig(Map props) { super(CONFIG, props); } + + @Override + protected Map preProcessParsedConfig(Map parsedValues) { + Map ret = new HashMap<>(parsedValues); + ret.put("preprocess", "success"); + return ret; + } } public static class ConfiguredFakeMetricsReporter extends FakeMetricsReporter {