This is an automated email from the ASF dual-hosted git repository. slfan1989 pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/trunk by this push: new f93aff5b68f HADOOP-19597. Log warning message on every set/get of a deprecated configuration property (#7766) Contributed by Stamatis Zampetakis. f93aff5b68f is described below commit f93aff5b68f7cdc25dfa6f6605e01480f1ff614b Author: Stamatis Zampetakis <zabe...@gmail.com> AuthorDate: Fri Jul 4 09:55:36 2025 +0200 HADOOP-19597. Log warning message on every set/get of a deprecated configuration property (#7766) Contributed by Stamatis Zampetakis. * HADOOP-19597. Log warning message on every set/get of a deprecated configuration property Reviewed-by: Shilun Fan <slfan1...@apache.org> Signed-off-by: Shilun Fan <slfan1...@apache.org> --- .../java/org/apache/hadoop/conf/Configuration.java | 36 +++++++--------------- .../org/apache/hadoop/conf/TestConfiguration.java | 30 ++++++++++++++++++ 2 files changed, 41 insertions(+), 25 deletions(-) diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java index a0473015ad0..2e112eed8c8 100755 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java @@ -379,10 +379,6 @@ private static class DeprecatedKeyInfo { this.customMessage = customMessage; } - private final String getWarningMessage(String key) { - return getWarningMessage(key, null); - } - /** * Method to provide the warning message. It gives the custom message if * non-null, and default message otherwise. @@ -412,12 +408,9 @@ private String getWarningMessage(String key, String source) { return warningMessage; } - boolean getAndSetAccessed() { - return accessed.getAndSet(true); - } - - public void clearAccessed() { - accessed.set(false); + void logDeprecation(String name, String source) { + LOG_DEPRECATION.info(getWarningMessage(name, source)); + this.accessed.set(true); } } @@ -728,12 +721,10 @@ private String[] handleDeprecation(DeprecationContext deprecations, } // Initialize the return value with requested name String[] names = new String[]{name}; - // Deprecated keys are logged once and an updated names are returned + // Deprecated keys are logged and updated names are returned DeprecatedKeyInfo keyInfo = deprecations.getDeprecatedKeyMap().get(name); if (keyInfo != null) { - if (!keyInfo.getAndSetAccessed()) { - logDeprecation(keyInfo.getWarningMessage(name)); - } + keyInfo.logDeprecation(name, null); // Override return value for deprecated keys names = keyInfo.newKeys; } @@ -1462,13 +1453,6 @@ void logDeprecation(String message) { LOG_DEPRECATION.info(message); } - void logDeprecationOnce(String name, String source) { - DeprecatedKeyInfo keyInfo = getDeprecatedKeyInfo(name); - if (keyInfo != null && !keyInfo.getAndSetAccessed()) { - LOG_DEPRECATION.info(keyInfo.getWarningMessage(name, source)); - } - } - /** * Unset a previously set property. * @param name the property name @@ -2448,7 +2432,10 @@ private CredentialEntry getCredentialEntry(CredentialProvider provider, if (oldName != null) { entry = provider.getCredentialEntry(oldName); if (entry != null) { - logDeprecationOnce(oldName, provider.toString()); + DeprecatedKeyInfo ki = getDeprecatedKeyInfo(oldName); + if (ki != null) { + ki.logDeprecation(oldName, provider.toString()); + } return entry; } } @@ -2459,7 +2446,7 @@ private CredentialEntry getCredentialEntry(CredentialProvider provider, for (String newName : keyInfo.newKeys) { entry = provider.getCredentialEntry(newName); if (entry != null) { - logDeprecationOnce(name, null); + keyInfo.logDeprecation(name, null); return entry; } } @@ -3433,8 +3420,7 @@ void handleEndProperty() { deprecations.getDeprecatedKeyMap().get(confName); if (keyInfo != null) { - logDeprecation(keyInfo.getWarningMessage(confName, wrapper.toString())); - keyInfo.clearAccessed(); + keyInfo.logDeprecation(confName, wrapper.toString()); for (String key : keyInfo.newKeys) { // update new keys with deprecated key's value results.add(new ParsedItem( diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java index 4268e526ae4..fa0301b2517 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java @@ -384,6 +384,36 @@ public void testDeprecatedPropertyInXMLFileGeneratesLogMessage(@TempDir java.nio assertTrue(hasDeprecationMessage); } + @Test + public void testDeprecatedPropertyLogsWarningOnEveryUse(){ + String oldProp = "test.deprecation.old.conf.b"; + String newProp = "test.deprecation.new.conf.b"; + Configuration.addDeprecation(oldProp, newProp); + + TestAppender appender = new TestAppender(); + Logger deprecationLogger = Logger.getLogger("org.apache.hadoop.conf.Configuration.deprecation"); + deprecationLogger.addAppender(appender); + + try { + conf.set(oldProp, "b1"); + conf.get(oldProp); + conf.set(oldProp, "b2"); + conf.get(oldProp); + // Using the new property should not log a warning + conf.set(newProp, "b3"); + conf.get(newProp); + conf.set(newProp, "b4"); + conf.get(newProp); + } finally { + deprecationLogger.removeAppender(appender); + } + + Pattern deprecationMsgPattern = Pattern.compile(oldProp + " is deprecated"); + long count = appender.log.stream().map(LoggingEvent::getRenderedMessage) + .filter(msg -> deprecationMsgPattern.matcher(msg).find()).count(); + assertEquals(4, count, "Expected exactly four warnings for deprecated property usage"); + } + /** * A simple appender for white box testing. */ --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org