You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2011/02/25 21:31:12 UTC

svn commit: r1074685 - in /cassandra/branches/cassandra-0.7: CHANGES.txt src/java/org/apache/cassandra/db/ColumnFamilyStore.java src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java

Author: jbellis
Date: Fri Feb 25 20:31:12 2011
New Revision: 1074685

URL: http://svn.apache.org/viewvc?rev=1074685&view=rev
Log:
add [get|set][row|key]cacheSavePeriod to JMX
patch by Jon Hermes; reviewed by jbellis for CASSANDRA-2100

Modified:
    cassandra/branches/cassandra-0.7/CHANGES.txt
    cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
    cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java

Modified: cassandra/branches/cassandra-0.7/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/CHANGES.txt?rev=1074685&r1=1074684&r2=1074685&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.7/CHANGES.txt Fri Feb 25 20:31:12 2011
@@ -33,6 +33,7 @@
    from supercolumn's (CASSANDRA-2104)
  * fix starting up on Windows when CASSANDRA_HOME contains whitespace
    (CASSANDRA-2237)
+ * add [get|set][row|key]cacheSavePeriod to JMX (CASSANDRA-2100)
 
 
 0.7.2

Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1074685&r1=1074684&r2=1074685&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Fri Feb 25 20:31:12 2011
@@ -26,6 +26,7 @@ import java.util.concurrent.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.regex.Pattern;
+import javax.management.JMX;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
@@ -133,6 +134,12 @@ public class ColumnFamilyStore implement
     private volatile DefaultInteger memtime;
     private volatile DefaultInteger memsize;
     private volatile DefaultDouble memops;
+    private volatile DefaultInteger rowCacheSaveInSeconds;
+    private volatile DefaultInteger keyCacheSaveInSeconds;
+
+    // Locally held row/key cache scheduled tasks
+    private volatile ScheduledFuture<?> saveRowCacheTask;
+    private volatile ScheduledFuture<?> saveKeyCacheTask;
 
     public void reload()
     {
@@ -149,8 +156,13 @@ public class ColumnFamilyStore implement
             memsize = new DefaultInteger(metadata.getMemtableThroughputInMb());
         if (!memops.isModified())
             memops = new DefaultDouble(metadata.getMemtableOperationsInMillions());
+        if (!rowCacheSaveInSeconds.isModified())
+            rowCacheSaveInSeconds = new DefaultInteger(metadata.getRowCacheSavePeriodInSeconds());
+        if (!keyCacheSaveInSeconds.isModified())
+            keyCacheSaveInSeconds = new DefaultInteger(metadata.getKeyCacheSavePeriodInSeconds());
         
         ssTables.updateCacheSizes();
+        scheduleCacheSaving(rowCacheSaveInSeconds.value(), keyCacheSaveInSeconds.value());
         
         // figure out what needs to be added and dropped.
         // future: if/when we have modifiable settings for secondary indexes, they'll need to be handled here.
@@ -186,6 +198,8 @@ public class ColumnFamilyStore implement
         this.memtime = new DefaultInteger(metadata.getMemtableFlushAfterMins());
         this.memsize = new DefaultInteger(metadata.getMemtableThroughputInMb());
         this.memops = new DefaultDouble(metadata.getMemtableOperationsInMillions());
+        this.rowCacheSaveInSeconds = new DefaultInteger(metadata.getRowCacheSavePeriodInSeconds());
+        this.keyCacheSaveInSeconds = new DefaultInteger(metadata.getKeyCacheSavePeriodInSeconds());
         this.partitioner = partitioner;
         fileIndexGenerator.set(generation);
         memtable = new Memtable(this);
@@ -529,6 +543,16 @@ public class ColumnFamilyStore implement
                                       ssTables.getRowCache().getSize(),
                                       table.name,
                                       columnFamily));
+        scheduleCacheSaving(rowCacheSavePeriodInSeconds, keyCacheSavePeriodInSeconds);
+    }
+
+    public void scheduleCacheSaving(int rowCacheSavePeriodInSeconds, int keyCacheSavePeriodInSeconds)
+    {
+        if (saveRowCacheTask != null)
+        {
+            saveRowCacheTask.cancel(false); // Do not interrupt an in-progress save
+            saveRowCacheTask = null;
+        }
         if (rowCacheSavePeriodInSeconds > 0)
         {
             Runnable runnable = new WrappedRunnable()
@@ -538,12 +562,17 @@ public class ColumnFamilyStore implement
                     submitRowCacheWrite();
                 }
             };
-            StorageService.scheduledTasks.scheduleWithFixedDelay(runnable,
-                                                                 rowCacheSavePeriodInSeconds,
-                                                                 rowCacheSavePeriodInSeconds,
-                                                                 TimeUnit.SECONDS);
+            saveRowCacheTask = StorageService.scheduledTasks.scheduleWithFixedDelay(runnable,
+                                                                                    rowCacheSavePeriodInSeconds,
+                                                                                    rowCacheSavePeriodInSeconds,
+                                                                                    TimeUnit.SECONDS);
         }
 
+        if (saveKeyCacheTask != null)
+        {
+            saveKeyCacheTask.cancel(false); // Do not interrupt an in-progress save
+            saveKeyCacheTask = null;
+        }
         if (keyCacheSavePeriodInSeconds > 0)
         {
             Runnable runnable = new WrappedRunnable()
@@ -553,10 +582,10 @@ public class ColumnFamilyStore implement
                     submitKeyCacheWrite();
                 }
             };
-            StorageService.scheduledTasks.scheduleWithFixedDelay(runnable,
-                                                                 keyCacheSavePeriodInSeconds,
-                                                                 keyCacheSavePeriodInSeconds,
-                                                                 TimeUnit.SECONDS);
+            saveKeyCacheTask = StorageService.scheduledTasks.scheduleWithFixedDelay(runnable,
+                                                                                    keyCacheSavePeriodInSeconds,
+                                                                                    keyCacheSavePeriodInSeconds,
+                                                                                    TimeUnit.SECONDS);
         }
     }
 
@@ -1909,6 +1938,22 @@ public class ColumnFamilyStore implement
                ')';
     }
 
+    public void disableAutoCompaction()
+    {
+        minCompactionThreshold.set(0);
+        maxCompactionThreshold.set(0);
+    }
+
+    /*
+     JMX getters and setters for the Default<T>s.
+       - get/set minCompactionThreshold
+       - get/set maxCompactionThreshold
+       - get     memsize
+       - get     memops
+       - get/set memtime
+       - get/set rowCacheSavePeriodInSeconds
+       - get/set keyCacheSavePeriodInSeconds
+     */
     public int getMinimumCompactionThreshold()
     {
         return minCompactionThreshold.value();
@@ -1916,7 +1961,8 @@ public class ColumnFamilyStore implement
     
     public void setMinimumCompactionThreshold(int minCompactionThreshold)
     {
-        if ((minCompactionThreshold > this.maxCompactionThreshold.value()) && this.maxCompactionThreshold.value() != 0) {
+        if ((minCompactionThreshold > this.maxCompactionThreshold.value()) && this.maxCompactionThreshold.value() != 0)
+        {
             throw new RuntimeException("The min_compaction_threshold cannot be larger than the max.");
         }
         this.minCompactionThreshold.set(minCompactionThreshold);
@@ -1929,25 +1975,21 @@ public class ColumnFamilyStore implement
 
     public void setMaximumCompactionThreshold(int maxCompactionThreshold)
     {
-        if (maxCompactionThreshold < this.minCompactionThreshold.value()) {
+        if (maxCompactionThreshold < this.minCompactionThreshold.value())
+        {
             throw new RuntimeException("The max_compaction_threshold cannot be smaller than the min.");
         }
         this.maxCompactionThreshold.set(maxCompactionThreshold);
     }
 
-    public void disableAutoCompaction()
-    {
-        minCompactionThreshold.set(0);
-        maxCompactionThreshold.set(0);
-    }
-
     public int getMemtableFlushAfterMins()
     {
         return memtime.value();
     }
     public void setMemtableFlushAfterMins(int time)
     {
-        if (time <= 0) {
+        if (time <= 0)
+        {
             throw new RuntimeException("MemtableFlushAfterMins must be greater than 0.");
         }
         this.memtime.set(time);
@@ -1973,6 +2015,35 @@ public class ColumnFamilyStore implement
         memops.set(ops);
     }
 
+    public int getRowCacheSavePeriodInSeconds()
+    {
+        return rowCacheSaveInSeconds.value();
+    }
+    public void setRowCacheSavePeriodInSeconds(int rcspis)
+    {
+        if (rcspis < 0)
+        {
+            throw new RuntimeException("RowCacheSavePeriodInSeconds must be non-negative.");
+        }
+        this.rowCacheSaveInSeconds.set(rcspis);
+        scheduleCacheSaving(rowCacheSaveInSeconds.value(), keyCacheSaveInSeconds.value());
+    }
+
+    public int getKeyCacheSavePeriodInSeconds()
+    {
+        return keyCacheSaveInSeconds.value();
+    }
+    public void setKeyCacheSavePeriodInSeconds(int kcspis)
+    {
+        if (kcspis < 0)
+        {
+            throw new RuntimeException("KeyCacheSavePeriodInSeconds must be non-negative.");
+        }
+        this.keyCacheSaveInSeconds.set(kcspis);
+        scheduleCacheSaving(rowCacheSaveInSeconds.value(), keyCacheSaveInSeconds.value());
+    }
+    // End JMX get/set.
+
     public long estimateKeys()
     {
         return ssTables.estimatedKeys();

Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java?rev=1074685&r1=1074684&r2=1074685&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java Fri Feb 25 20:31:12 2011
@@ -228,4 +228,10 @@ public interface ColumnFamilyStoreMBean
      * @return list of the index names
      */
     public List<String> getBuiltIndexes();
+
+    public int getRowCacheSavePeriodInSeconds();
+    public void setRowCacheSavePeriodInSeconds(int rcspis);
+
+    public int getKeyCacheSavePeriodInSeconds();
+    public void setKeyCacheSavePeriodInSeconds(int kcspis);
 }