You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kafka.apache.org by ij...@apache.org on 2018/05/14 21:12:38 UTC

[kafka] branch 0.11.0 updated: KAFKA-6307: Fix KafkaMbean leak in JmxReporter (#4307)

This is an automated email from the ASF dual-hosted git repository.

ijuma pushed a commit to branch 0.11.0
in repository https://gitbox.apache.org/repos/asf/kafka.git


The following commit(s) were added to refs/heads/0.11.0 by this push:
     new 70fb5a4  KAFKA-6307: Fix KafkaMbean leak in JmxReporter (#4307)
70fb5a4 is described below

commit 70fb5a42f4a0bbf8a55be424842d14c17b374966
Author: tedyu <yu...@gmail.com>
AuthorDate: Mon Jan 1 02:16:07 2018 -0800

    KAFKA-6307: Fix KafkaMbean leak in JmxReporter (#4307)
    
    We should remove the map entry from mbeans if it becomes
    empty during metric removal.
    
    Reviewers: Manikumar Reddy <ma...@gmail.com>, Satish Duggana <sa...@gmail.com>, Ismael Juma <is...@juma.me.uk>
    
    The tests were excluded from the backport to the 0.11.0
    branch due to conflicts.
---
 .../java/org/apache/kafka/common/metrics/JmxReporter.java | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/clients/src/main/java/org/apache/kafka/common/metrics/JmxReporter.java b/clients/src/main/java/org/apache/kafka/common/metrics/JmxReporter.java
index 67dfaa8..90ffbeb 100644
--- a/clients/src/main/java/org/apache/kafka/common/metrics/JmxReporter.java
+++ b/clients/src/main/java/org/apache/kafka/common/metrics/JmxReporter.java
@@ -74,6 +74,9 @@ public class JmxReporter implements MetricsReporter {
         }
     }
 
+    boolean containsMbean(String mbeanName) {
+        return mbeans.containsKey(mbeanName);
+    }
     @Override
     public void metricChange(KafkaMetric metric) {
         synchronized (LOCK) {
@@ -85,19 +88,21 @@ public class JmxReporter implements MetricsReporter {
     @Override
     public void metricRemoval(KafkaMetric metric) {
         synchronized (LOCK) {
-            KafkaMbean mbean = removeAttribute(metric);
+            MetricName metricName = metric.metricName();
+            String mBeanName = getMBeanName(prefix, metricName);
+            KafkaMbean mbean = removeAttribute(metric, mBeanName);
             if (mbean != null) {
-                if (mbean.metrics.isEmpty())
+                if (mbean.metrics.isEmpty()) {
                     unregister(mbean);
-                else
+                    mbeans.remove(mBeanName);
+                } else
                     reregister(mbean);
             }
         }
     }
 
-    private KafkaMbean removeAttribute(KafkaMetric metric) {
+    private KafkaMbean removeAttribute(KafkaMetric metric, String mBeanName) {
         MetricName metricName = metric.metricName();
-        String mBeanName = getMBeanName(prefix, metricName);
         KafkaMbean mbean = this.mbeans.get(mBeanName);
         if (mbean != null)
             mbean.removeAttribute(metricName.name());

-- 
To stop receiving notification emails like this one, please contact
ijuma@apache.org.