You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by gd...@apache.org on 2010/08/18 21:15:16 UTC

svn commit: r986862 - in /cassandra/trunk/src/java/org/apache/cassandra/db: ColumnFamilyStore.java Table.java

Author: gdusbabek
Date: Wed Aug 18 19:15:16 2010
New Revision: 986862

URL: http://svn.apache.org/viewvc?rev=986862&view=rev
Log:
make CFS responsible for registering/unregistering mbeans. patch by gdusbabek, reviewed by jbellis. CASSANDRA-1385

Modified:
    cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
    cassandra/trunk/src/java/org/apache/cassandra/db/Table.java

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=986862&r1=986861&r2=986862&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Wed Aug 18 19:15:16 2010
@@ -22,6 +22,7 @@ import java.io.File;
 import java.io.FilenameFilter;
 import java.io.IOError;
 import java.io.IOException;
+import java.lang.management.ManagementFactory;
 import java.util.*;
 import java.util.concurrent.*;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -65,6 +66,9 @@ import org.apache.cassandra.utils.FBUtil
 import org.apache.cassandra.utils.LatencyTracker;
 import org.apache.cassandra.utils.WrappedRunnable;
 
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+
 public class ColumnFamilyStore implements ColumnFamilyStoreMBean
 {
     private static Logger logger_ = LoggerFactory.getLogger(ColumnFamilyStore.class);
@@ -113,6 +117,7 @@ public class ColumnFamilyStore implement
     public final String table_;
     public final String columnFamily_;
     public final IPartitioner partitioner_;
+    private final String mbeanName;
 
     private volatile int memtableSwitchCount = 0;
 
@@ -217,11 +222,39 @@ public class ColumnFamilyStore implement
                                                                                      indexedCfMetadata);
             indexedColumns_.put(column, indexedCfs);
         }
+        
+        String type = this.partitioner_ instanceof LocalPartitioner ? "IndexColumnFamilies" : "ColumnFamilies";
+        mbeanName = "org.apache.cassandra.db:type=" + type + ",keyspace=" + table_ + ",columnfamily=" + columnFamily_;
+        try
+        {
+            MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
+            ObjectName nameObj = new ObjectName(mbeanName);
+            mbs.registerMBean(this, nameObj);
+        }
+        catch (Exception e)
+        {
+            throw new RuntimeException(e);
+        }
     }
     
-    String getMBeanName()
+    // called when dropping or renaming a CF. Performs mbean housekeeping.
+    void unregisterMBean()
     {
-        return "org.apache.cassandra.db:type=ColumnFamilyStores,keyspace=" + table_ + ",columnfamily=" + columnFamily_;
+        try
+        {
+            
+            MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
+            ObjectName nameObj = new ObjectName(mbeanName);
+            if (mbs.isRegistered(nameObj))
+                mbs.unregisterMBean(nameObj);
+            for (ColumnFamilyStore index : indexedColumns_.values())
+                index.unregisterMBean();
+        }
+        catch (Exception e)
+        {
+            // this shouldn't block anything.
+            logger_.warn(e.getMessage(), e);
+        }
     }
 
     public long getMinRowSize()

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java?rev=986862&r1=986861&r2=986862&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/Table.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/Table.java Wed Aug 18 19:15:16 2010
@@ -250,22 +250,10 @@ public class Table
             }
         }
 
-        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
         for (CFMetaData cfm : new ArrayList<CFMetaData>(DatabaseDescriptor.getTableDefinition(table).cfMetaData().values()))
         {
             ColumnFamilyStore cfs = ColumnFamilyStore.createColumnFamilyStore(table, cfm.cfName);
             columnFamilyStores.put(cfm.cfId, cfs);
-            try
-            {
-                ObjectName mbeanName = new ObjectName(cfs.getMBeanName());
-                if (mbs.isRegistered(mbeanName))
-                    mbs.unregisterMBean(mbeanName);
-                mbs.registerMBean(cfs, mbeanName);
-            }
-            catch (Exception e)
-            {
-                throw new RuntimeException(e);
-            }
         }
 
         // check 10x as often as the lifetime, so we can exceed lifetime by 10% at most
@@ -303,19 +291,7 @@ public class Table
                 throw new IOException(e);
             }
             
-            // unregister mbean.
-            try
-            {
-                MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
-                ObjectName mbeanName = new ObjectName(cfs.getMBeanName());
-                if (mbs.isRegistered(mbeanName))
-                    mbs.unregisterMBean(mbeanName);
-            }
-            catch (Exception e)
-            {
-                // I'm not going to let this block the drop.
-                logger.warn(e.getMessage(), e);
-            }
+            cfs.unregisterMBean();
         }
     }