From f9ad6fccede219f5286817ea87f1034870969278 Mon Sep 17 00:00:00 2001 From: horizonzy Date: Tue, 21 Feb 2023 21:41:16 +0800 Subject: [PATCH 1/7] Pick the higher leak detection level between netty and bookkeeper. --- .../common/allocator/LeakDetectionPolicy.java | 12 ++++- .../conf/AbstractConfiguration.java | 16 +++++- .../conf/AbstractConfigurationTest.java | 50 +++++++++++++++++++ 3 files changed, 75 insertions(+), 3 deletions(-) diff --git a/bookkeeper-common-allocator/src/main/java/org/apache/bookkeeper/common/allocator/LeakDetectionPolicy.java b/bookkeeper-common-allocator/src/main/java/org/apache/bookkeeper/common/allocator/LeakDetectionPolicy.java index f5c99a7e030..54ba5db5198 100644 --- a/bookkeeper-common-allocator/src/main/java/org/apache/bookkeeper/common/allocator/LeakDetectionPolicy.java +++ b/bookkeeper-common-allocator/src/main/java/org/apache/bookkeeper/common/allocator/LeakDetectionPolicy.java @@ -43,5 +43,15 @@ public enum LeakDetectionPolicy { * stack traces of places where the buffer was used. Introduce very * significant overhead. */ - Paranoid, + Paranoid; + + public static LeakDetectionPolicy parseLevel(String levelStr) { + String trimmedLevelStr = levelStr.trim(); + for (LeakDetectionPolicy policy : values()) { + if (trimmedLevelStr.equalsIgnoreCase(policy.name())) { + return policy; + } + } + return LeakDetectionPolicy.Disabled; + } } diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java index 21bde894a36..08f6d83cee3 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java @@ -26,6 +26,9 @@ import java.util.List; import java.util.Map; import javax.net.ssl.SSLEngine; + +import io.netty.util.ResourceLeakDetector; +import io.netty.util.internal.SystemPropertyUtil; import lombok.extern.slf4j.Slf4j; import org.apache.bookkeeper.common.allocator.LeakDetectionPolicy; import org.apache.bookkeeper.common.allocator.OutOfMemoryPolicy; @@ -1129,8 +1132,17 @@ public T setAllocatorOutOfMemoryPolicy(OutOfMemoryPolicy oomPolicy) { * Return the configured leak detection policy for the allocator. */ public LeakDetectionPolicy getAllocatorLeakDetectionPolicy() { - return LeakDetectionPolicy - .valueOf(this.getString(ALLOCATOR_LEAK_DETECTION_POLICY, LeakDetectionPolicy.Disabled.toString())); + //see: https://lists.apache.org/thread/d3zw8bxhlg0wxfhocyjglq0nbxrww3sg + String nettyLevelStr = SystemPropertyUtil.get("io.netty.leakDetectionLevel", ResourceLeakDetector.Level.DISABLED.name()); + nettyLevelStr = SystemPropertyUtil.get("io.netty.leakDetection.level", nettyLevelStr); + String bkLevelStr = getString(ALLOCATOR_LEAK_DETECTION_POLICY, LeakDetectionPolicy.Disabled.toString()); + LeakDetectionPolicy nettyLevel = LeakDetectionPolicy.parseLevel(nettyLevelStr); + LeakDetectionPolicy bkLevel = LeakDetectionPolicy.parseLevel(bkLevelStr); + if (nettyLevel.ordinal() >= bkLevel.ordinal()) { + return nettyLevel; + } else { + return bkLevel; + } } /** diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/conf/AbstractConfigurationTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/conf/AbstractConfigurationTest.java index 54e07bd5992..b183f303923 100644 --- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/conf/AbstractConfigurationTest.java +++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/conf/AbstractConfigurationTest.java @@ -22,6 +22,7 @@ import static org.mockito.Mockito.CALLS_REAL_METHODS; import static org.mockito.Mockito.mock; +import org.apache.bookkeeper.common.allocator.LeakDetectionPolicy; import org.apache.bookkeeper.meta.AbstractZkLedgerManagerFactory; import org.apache.bookkeeper.meta.HierarchicalLedgerManagerFactory; import org.apache.bookkeeper.meta.LedgerManagerFactory; @@ -129,5 +130,54 @@ public void testUnknownZkLedgerManagerFactory() throws Exception { conf.setLedgerManagerFactoryClass(mockZkFactory.getClass()); conf.getMetadataServiceUri(); } + + @Test + public void testAllocatorLeakDetectionPolicy() { + String nettyOldLevelKey = "io.netty.leakDetectionLevel"; + String nettyLevelKey = "io.netty.leakDetection.level"; + + String nettyOldLevelStr = System.getProperty(nettyOldLevelKey); + String nettyLevelStr = System.getProperty(nettyLevelKey); + + //Remove netty property for test. + System.getProperties().remove(nettyOldLevelKey); + System.getProperties().remove(nettyLevelKey); + + assertEquals(LeakDetectionPolicy.Disabled, conf.getAllocatorLeakDetectionPolicy()); + + System.getProperties().put(nettyOldLevelKey, "zazaza"); + assertEquals(LeakDetectionPolicy.Disabled, conf.getAllocatorLeakDetectionPolicy()); + + conf.setProperty(AbstractConfiguration.ALLOCATOR_LEAK_DETECTION_POLICY, "zazaza"); + assertEquals(LeakDetectionPolicy.Disabled, conf.getAllocatorLeakDetectionPolicy()); + + System.getProperties().put(nettyOldLevelKey, "simple"); + assertEquals(LeakDetectionPolicy.Simple, conf.getAllocatorLeakDetectionPolicy()); + + System.getProperties().put(nettyLevelKey, "disabled"); + assertEquals(LeakDetectionPolicy.Disabled, conf.getAllocatorLeakDetectionPolicy()); + + System.getProperties().put(nettyLevelKey, "advanCed"); + assertEquals(LeakDetectionPolicy.Advanced, conf.getAllocatorLeakDetectionPolicy()); + + conf.setProperty(AbstractConfiguration.ALLOCATOR_LEAK_DETECTION_POLICY, "simPle"); + assertEquals(LeakDetectionPolicy.Advanced, conf.getAllocatorLeakDetectionPolicy()); + + conf.setProperty(AbstractConfiguration.ALLOCATOR_LEAK_DETECTION_POLICY, "advanCed"); + assertEquals(LeakDetectionPolicy.Advanced, conf.getAllocatorLeakDetectionPolicy()); + + conf.setProperty(AbstractConfiguration.ALLOCATOR_LEAK_DETECTION_POLICY, "paranoiD"); + assertEquals(LeakDetectionPolicy.Paranoid, conf.getAllocatorLeakDetectionPolicy()); + + System.getProperties().remove(nettyOldLevelKey); + System.getProperties().remove(nettyLevelKey); + //Revert the netty properties. + if (nettyOldLevelStr != null) { + System.getProperties().put(nettyOldLevelKey, nettyOldLevelStr); + } + if (nettyLevelStr != null) { + System.getProperties().put(nettyLevelKey, nettyLevelStr); + } + } } From 0e8862a6bb8d61f87e40877cdf00e0d2aeddb89b Mon Sep 17 00:00:00 2001 From: horizonzy Date: Tue, 21 Feb 2023 21:51:09 +0800 Subject: [PATCH 2/7] Fix style. --- .../apache/bookkeeper/common/allocator/LeakDetectionPolicy.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookkeeper-common-allocator/src/main/java/org/apache/bookkeeper/common/allocator/LeakDetectionPolicy.java b/bookkeeper-common-allocator/src/main/java/org/apache/bookkeeper/common/allocator/LeakDetectionPolicy.java index 54ba5db5198..c14ea709af8 100644 --- a/bookkeeper-common-allocator/src/main/java/org/apache/bookkeeper/common/allocator/LeakDetectionPolicy.java +++ b/bookkeeper-common-allocator/src/main/java/org/apache/bookkeeper/common/allocator/LeakDetectionPolicy.java @@ -44,7 +44,7 @@ public enum LeakDetectionPolicy { * significant overhead. */ Paranoid; - + public static LeakDetectionPolicy parseLevel(String levelStr) { String trimmedLevelStr = levelStr.trim(); for (LeakDetectionPolicy policy : values()) { From ffabe49818b6cdcb07e3ceea76df235973a3ef2d Mon Sep 17 00:00:00 2001 From: horizonzy Date: Tue, 21 Feb 2023 22:00:42 +0800 Subject: [PATCH 3/7] Fix style. --- .../conf/AbstractConfiguration.java | 8 +++--- .../conf/AbstractConfigurationTest.java | 25 +++++++++---------- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java index 08f6d83cee3..8f675dc921e 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java @@ -20,15 +20,14 @@ import static org.apache.bookkeeper.conf.ClientConfiguration.CLIENT_AUTH_PROVIDER_FACTORY_CLASS; import io.netty.buffer.PooledByteBufAllocator; +import io.netty.util.ResourceLeakDetector; +import io.netty.util.internal.SystemPropertyUtil; import java.net.URL; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.net.ssl.SSLEngine; - -import io.netty.util.ResourceLeakDetector; -import io.netty.util.internal.SystemPropertyUtil; import lombok.extern.slf4j.Slf4j; import org.apache.bookkeeper.common.allocator.LeakDetectionPolicy; import org.apache.bookkeeper.common.allocator.OutOfMemoryPolicy; @@ -1133,7 +1132,8 @@ public T setAllocatorOutOfMemoryPolicy(OutOfMemoryPolicy oomPolicy) { */ public LeakDetectionPolicy getAllocatorLeakDetectionPolicy() { //see: https://lists.apache.org/thread/d3zw8bxhlg0wxfhocyjglq0nbxrww3sg - String nettyLevelStr = SystemPropertyUtil.get("io.netty.leakDetectionLevel", ResourceLeakDetector.Level.DISABLED.name()); + String nettyLevelStr = SystemPropertyUtil.get("io.netty.leakDetectionLevel", + ResourceLeakDetector.Level.DISABLED.name()); nettyLevelStr = SystemPropertyUtil.get("io.netty.leakDetection.level", nettyLevelStr); String bkLevelStr = getString(ALLOCATOR_LEAK_DETECTION_POLICY, LeakDetectionPolicy.Disabled.toString()); LeakDetectionPolicy nettyLevel = LeakDetectionPolicy.parseLevel(nettyLevelStr); diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/conf/AbstractConfigurationTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/conf/AbstractConfigurationTest.java index b183f303923..eb25b8a5044 100644 --- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/conf/AbstractConfigurationTest.java +++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/conf/AbstractConfigurationTest.java @@ -135,40 +135,40 @@ public void testUnknownZkLedgerManagerFactory() throws Exception { public void testAllocatorLeakDetectionPolicy() { String nettyOldLevelKey = "io.netty.leakDetectionLevel"; String nettyLevelKey = "io.netty.leakDetection.level"; - + String nettyOldLevelStr = System.getProperty(nettyOldLevelKey); String nettyLevelStr = System.getProperty(nettyLevelKey); - + //Remove netty property for test. System.getProperties().remove(nettyOldLevelKey); System.getProperties().remove(nettyLevelKey); - + assertEquals(LeakDetectionPolicy.Disabled, conf.getAllocatorLeakDetectionPolicy()); - + System.getProperties().put(nettyOldLevelKey, "zazaza"); assertEquals(LeakDetectionPolicy.Disabled, conf.getAllocatorLeakDetectionPolicy()); - + conf.setProperty(AbstractConfiguration.ALLOCATOR_LEAK_DETECTION_POLICY, "zazaza"); assertEquals(LeakDetectionPolicy.Disabled, conf.getAllocatorLeakDetectionPolicy()); - + System.getProperties().put(nettyOldLevelKey, "simple"); assertEquals(LeakDetectionPolicy.Simple, conf.getAllocatorLeakDetectionPolicy()); - + System.getProperties().put(nettyLevelKey, "disabled"); assertEquals(LeakDetectionPolicy.Disabled, conf.getAllocatorLeakDetectionPolicy()); - + System.getProperties().put(nettyLevelKey, "advanCed"); assertEquals(LeakDetectionPolicy.Advanced, conf.getAllocatorLeakDetectionPolicy()); - + conf.setProperty(AbstractConfiguration.ALLOCATOR_LEAK_DETECTION_POLICY, "simPle"); assertEquals(LeakDetectionPolicy.Advanced, conf.getAllocatorLeakDetectionPolicy()); - + conf.setProperty(AbstractConfiguration.ALLOCATOR_LEAK_DETECTION_POLICY, "advanCed"); assertEquals(LeakDetectionPolicy.Advanced, conf.getAllocatorLeakDetectionPolicy()); - + conf.setProperty(AbstractConfiguration.ALLOCATOR_LEAK_DETECTION_POLICY, "paranoiD"); assertEquals(LeakDetectionPolicy.Paranoid, conf.getAllocatorLeakDetectionPolicy()); - + System.getProperties().remove(nettyOldLevelKey); System.getProperties().remove(nettyLevelKey); //Revert the netty properties. @@ -179,5 +179,4 @@ public void testAllocatorLeakDetectionPolicy() { System.getProperties().put(nettyLevelKey, nettyLevelStr); } } - } From d969540292428c76499792f776b50e25b9f794fd Mon Sep 17 00:00:00 2001 From: horizonzy Date: Tue, 21 Feb 2023 22:33:20 +0800 Subject: [PATCH 4/7] Fix check style. --- .../org/apache/bookkeeper/conf/AbstractConfiguration.java | 5 ++--- .../apache/bookkeeper/conf/AbstractConfigurationTest.java | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java index 8f675dc921e..6a8f24925be 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java @@ -21,7 +21,6 @@ import io.netty.buffer.PooledByteBufAllocator; import io.netty.util.ResourceLeakDetector; -import io.netty.util.internal.SystemPropertyUtil; import java.net.URL; import java.util.HashMap; import java.util.Iterator; @@ -1132,9 +1131,9 @@ public T setAllocatorOutOfMemoryPolicy(OutOfMemoryPolicy oomPolicy) { */ public LeakDetectionPolicy getAllocatorLeakDetectionPolicy() { //see: https://lists.apache.org/thread/d3zw8bxhlg0wxfhocyjglq0nbxrww3sg - String nettyLevelStr = SystemPropertyUtil.get("io.netty.leakDetectionLevel", + String nettyLevelStr = System.getProperty("io.netty.leakDetectionLevel", ResourceLeakDetector.Level.DISABLED.name()); - nettyLevelStr = SystemPropertyUtil.get("io.netty.leakDetection.level", nettyLevelStr); + nettyLevelStr = System.getProperty("io.netty.leakDetection.level", nettyLevelStr); String bkLevelStr = getString(ALLOCATOR_LEAK_DETECTION_POLICY, LeakDetectionPolicy.Disabled.toString()); LeakDetectionPolicy nettyLevel = LeakDetectionPolicy.parseLevel(nettyLevelStr); LeakDetectionPolicy bkLevel = LeakDetectionPolicy.parseLevel(bkLevelStr); diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/conf/AbstractConfigurationTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/conf/AbstractConfigurationTest.java index eb25b8a5044..a6333a47d32 100644 --- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/conf/AbstractConfigurationTest.java +++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/conf/AbstractConfigurationTest.java @@ -130,7 +130,7 @@ public void testUnknownZkLedgerManagerFactory() throws Exception { conf.setLedgerManagerFactoryClass(mockZkFactory.getClass()); conf.getMetadataServiceUri(); } - + @Test public void testAllocatorLeakDetectionPolicy() { String nettyOldLevelKey = "io.netty.leakDetectionLevel"; From f828eab988ddba78b38e4d258d77bb5f4ab06960 Mon Sep 17 00:00:00 2001 From: horizonzy Date: Wed, 22 Feb 2023 10:05:28 +0800 Subject: [PATCH 5/7] Fix check style. --- .../bookkeeper/common/allocator/LeakDetectionPolicy.java | 5 +++++ .../org/apache/bookkeeper/conf/AbstractConfiguration.java | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/bookkeeper-common-allocator/src/main/java/org/apache/bookkeeper/common/allocator/LeakDetectionPolicy.java b/bookkeeper-common-allocator/src/main/java/org/apache/bookkeeper/common/allocator/LeakDetectionPolicy.java index c14ea709af8..fcaf4e9a5bd 100644 --- a/bookkeeper-common-allocator/src/main/java/org/apache/bookkeeper/common/allocator/LeakDetectionPolicy.java +++ b/bookkeeper-common-allocator/src/main/java/org/apache/bookkeeper/common/allocator/LeakDetectionPolicy.java @@ -17,9 +17,12 @@ */ package org.apache.bookkeeper.common.allocator; +import lombok.extern.slf4j.Slf4j; + /** * Define the policy for the Netty leak detector. */ +@Slf4j public enum LeakDetectionPolicy { /** @@ -52,6 +55,8 @@ public static LeakDetectionPolicy parseLevel(String levelStr) { return policy; } } + log.warn("Parse leak detection policy level failed. Use the default level: " + + LeakDetectionPolicy.Disabled.name()); return LeakDetectionPolicy.Disabled; } } diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java index 6a8f24925be..d92a86f1ce1 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java @@ -1134,7 +1134,7 @@ public LeakDetectionPolicy getAllocatorLeakDetectionPolicy() { String nettyLevelStr = System.getProperty("io.netty.leakDetectionLevel", ResourceLeakDetector.Level.DISABLED.name()); nettyLevelStr = System.getProperty("io.netty.leakDetection.level", nettyLevelStr); - String bkLevelStr = getString(ALLOCATOR_LEAK_DETECTION_POLICY, LeakDetectionPolicy.Disabled.toString()); + String bkLevelStr = getString(ALLOCATOR_LEAK_DETECTION_POLICY, LeakDetectionPolicy.Disabled.name()); LeakDetectionPolicy nettyLevel = LeakDetectionPolicy.parseLevel(nettyLevelStr); LeakDetectionPolicy bkLevel = LeakDetectionPolicy.parseLevel(bkLevelStr); if (nettyLevel.ordinal() >= bkLevel.ordinal()) { From e7147061801155621b4727ae885a6b5a9ffdb07d Mon Sep 17 00:00:00 2001 From: horizonzy Date: Wed, 22 Feb 2023 17:31:04 +0800 Subject: [PATCH 6/7] Hint the log info. --- .../bookkeeper/common/allocator/LeakDetectionPolicy.java | 2 +- .../org/apache/bookkeeper/conf/AbstractConfiguration.java | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/bookkeeper-common-allocator/src/main/java/org/apache/bookkeeper/common/allocator/LeakDetectionPolicy.java b/bookkeeper-common-allocator/src/main/java/org/apache/bookkeeper/common/allocator/LeakDetectionPolicy.java index fcaf4e9a5bd..1773197c632 100644 --- a/bookkeeper-common-allocator/src/main/java/org/apache/bookkeeper/common/allocator/LeakDetectionPolicy.java +++ b/bookkeeper-common-allocator/src/main/java/org/apache/bookkeeper/common/allocator/LeakDetectionPolicy.java @@ -55,7 +55,7 @@ public static LeakDetectionPolicy parseLevel(String levelStr) { return policy; } } - log.warn("Parse leak detection policy level failed. Use the default level: " + log.warn("Parse leak detection policy levelStr " + levelStr + " failed. Use the default level: " + LeakDetectionPolicy.Disabled.name()); return LeakDetectionPolicy.Disabled; } diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java index d92a86f1ce1..438dc40983e 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/AbstractConfiguration.java @@ -20,7 +20,6 @@ import static org.apache.bookkeeper.conf.ClientConfiguration.CLIENT_AUTH_PROVIDER_FACTORY_CLASS; import io.netty.buffer.PooledByteBufAllocator; -import io.netty.util.ResourceLeakDetector; import java.net.URL; import java.util.HashMap; import java.util.Iterator; @@ -1131,8 +1130,7 @@ public T setAllocatorOutOfMemoryPolicy(OutOfMemoryPolicy oomPolicy) { */ public LeakDetectionPolicy getAllocatorLeakDetectionPolicy() { //see: https://lists.apache.org/thread/d3zw8bxhlg0wxfhocyjglq0nbxrww3sg - String nettyLevelStr = System.getProperty("io.netty.leakDetectionLevel", - ResourceLeakDetector.Level.DISABLED.name()); + String nettyLevelStr = System.getProperty("io.netty.leakDetectionLevel", LeakDetectionPolicy.Disabled.name()); nettyLevelStr = System.getProperty("io.netty.leakDetection.level", nettyLevelStr); String bkLevelStr = getString(ALLOCATOR_LEAK_DETECTION_POLICY, LeakDetectionPolicy.Disabled.name()); LeakDetectionPolicy nettyLevel = LeakDetectionPolicy.parseLevel(nettyLevelStr); From 47f181d273594caca886218a25866fa83c728873 Mon Sep 17 00:00:00 2001 From: horizonzy Date: Tue, 14 Mar 2023 10:07:35 +0800 Subject: [PATCH 7/7] Address the comments. --- .../bookkeeper/common/allocator/LeakDetectionPolicy.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bookkeeper-common-allocator/src/main/java/org/apache/bookkeeper/common/allocator/LeakDetectionPolicy.java b/bookkeeper-common-allocator/src/main/java/org/apache/bookkeeper/common/allocator/LeakDetectionPolicy.java index 1773197c632..90d19a4aeef 100644 --- a/bookkeeper-common-allocator/src/main/java/org/apache/bookkeeper/common/allocator/LeakDetectionPolicy.java +++ b/bookkeeper-common-allocator/src/main/java/org/apache/bookkeeper/common/allocator/LeakDetectionPolicy.java @@ -55,8 +55,8 @@ public static LeakDetectionPolicy parseLevel(String levelStr) { return policy; } } - log.warn("Parse leak detection policy levelStr " + levelStr + " failed. Use the default level: " - + LeakDetectionPolicy.Disabled.name()); + log.warn("Parse leak detection policy level {} failed. Use the default level: {}", levelStr, + LeakDetectionPolicy.Disabled.name()); return LeakDetectionPolicy.Disabled; } }