You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flume.apache.org by hs...@apache.org on 2013/08/11 09:13:05 UTC

git commit: FLUME-2156. Unregister then re-register MonitoredCounterGroup JMX MBeans on reconfigure

Updated Branches:
  refs/heads/trunk f9da62be2 -> 507ff1371


FLUME-2156. Unregister then re-register MonitoredCounterGroup JMX MBeans on reconfigure

(Mike Percy via Hari Shreedharan)


Project: http://git-wip-us.apache.org/repos/asf/flume/repo
Commit: http://git-wip-us.apache.org/repos/asf/flume/commit/507ff137
Tree: http://git-wip-us.apache.org/repos/asf/flume/tree/507ff137
Diff: http://git-wip-us.apache.org/repos/asf/flume/diff/507ff137

Branch: refs/heads/trunk
Commit: 507ff137160021dda2c4a08199746228827c9432
Parents: f9da62b
Author: Hari Shreedharan <hs...@apache.org>
Authored: Sun Aug 11 00:11:48 2013 -0700
Committer: Hari Shreedharan <hs...@apache.org>
Committed: Sun Aug 11 00:12:55 2013 -0700

----------------------------------------------------------------------
 .../instrumentation/MonitoredCounterGroup.java  | 20 +++++++++++++-----
 .../TestMonitoredCounterGroup.java              | 22 ++++++++++++++++++++
 2 files changed, 37 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flume/blob/507ff137/flume-ng-core/src/main/java/org/apache/flume/instrumentation/MonitoredCounterGroup.java
----------------------------------------------------------------------
diff --git a/flume-ng-core/src/main/java/org/apache/flume/instrumentation/MonitoredCounterGroup.java b/flume-ng-core/src/main/java/org/apache/flume/instrumentation/MonitoredCounterGroup.java
index c5c2956..1d3f0f1 100644
--- a/flume-ng-core/src/main/java/org/apache/flume/instrumentation/MonitoredCounterGroup.java
+++ b/flume-ng-core/src/main/java/org/apache/flume/instrumentation/MonitoredCounterGroup.java
@@ -29,6 +29,7 @@ import java.util.concurrent.atomic.AtomicLong;
 
 import javax.management.ObjectName;
 
+import com.google.common.annotations.VisibleForTesting;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -95,20 +96,29 @@ public abstract class MonitoredCounterGroup {
   }
 
   /**
-   * Registers the counter. This method should be used only for testing, and
-   * there should be no need for any implementations to directly call this
-   * method.
+   * Registers the counter.
+   * This method is exposed only for testing, and there should be no need for
+   * any implementations to call this method directly.
    */
+  @VisibleForTesting
   void register() {
     if (!registered) {
       try {
         ObjectName objName = new ObjectName("org.apache.flume."
                 + type.name().toLowerCase() + ":type=" + this.name);
 
+        if (ManagementFactory.getPlatformMBeanServer().isRegistered(objName)) {
+          logger.debug("Monitored counter group for type: " + type + ", name: "
+              + name + ": Another MBean is already registered with this name. "
+              + "Unregistering that pre-existing MBean now...");
+          ManagementFactory.getPlatformMBeanServer().unregisterMBean(objName);
+          logger.debug("Monitored counter group for type: " + type + ", name: "
+              + name + ": Successfully unregistered pre-existing MBean.");
+        }
         ManagementFactory.getPlatformMBeanServer().registerMBean(this, objName);
+        logger.info("Monitored counter group for type: " + type + ", name: "
+            + name + ": Successfully registered new MBean.");
         registered = true;
-        logger.info("Monitoried counter group for type: " + type + ", name: " + name
-                + ", registered successfully.");
       } catch (Exception ex) {
         logger.error("Failed to register monitored counter group for type: "
                 + type + ", name: " + name, ex);

http://git-wip-us.apache.org/repos/asf/flume/blob/507ff137/flume-ng-core/src/test/java/org/apache/flume/instrumentation/TestMonitoredCounterGroup.java
----------------------------------------------------------------------
diff --git a/flume-ng-core/src/test/java/org/apache/flume/instrumentation/TestMonitoredCounterGroup.java b/flume-ng-core/src/test/java/org/apache/flume/instrumentation/TestMonitoredCounterGroup.java
index e417fb3..b1f637f 100644
--- a/flume-ng-core/src/test/java/org/apache/flume/instrumentation/TestMonitoredCounterGroup.java
+++ b/flume-ng-core/src/test/java/org/apache/flume/instrumentation/TestMonitoredCounterGroup.java
@@ -314,6 +314,28 @@ public class TestMonitoredCounterGroup {
         0L, 0L, 0L, 0L);
   }
 
+  @Test
+  public void testRegisterTwice() throws Exception {
+    String name = "re-register-" + getRandomName();
+
+    SourceCounter c1 = new SourceCounter(name);
+    c1.register();
+    ObjectName on = new ObjectName(SOURCE_OBJ_NAME_PREFIX + name);
+
+    Assert.assertEquals("StartTime", 0L, getStartTime(on));
+    Assert.assertEquals("StopTime", 0L, getStopTime(on));
+    c1.start();
+    c1.stop();
+    Assert.assertTrue("StartTime", getStartTime(on) > 0L);
+    Assert.assertTrue("StopTime", getStopTime(on) > 0L);
+
+    SourceCounter c2 = new SourceCounter(name);
+    c2.register();
+
+    Assert.assertEquals("StartTime", 0L, getStartTime(on));
+    Assert.assertEquals("StopTime", 0L, getStopTime(on));
+  }
+
   private void assertSrcCounterState(ObjectName on, long eventReceivedCount,
       long eventAcceptedCount, long appendReceivedCount,
       long appendAcceptedCount, long appendBatchReceivedCount,