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 2013/09/19 17:22:55 UTC

[2/7] git commit: Allow cache-keys-to-save to be set at runtime patch by Chris Burroughs; reviewed by jbellis for CASSANDRA-5980

Allow cache-keys-to-save to be set at runtime
patch by Chris Burroughs; reviewed by jbellis for CASSANDRA-5980


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

Branch: refs/heads/trunk
Commit: df046d6b4262c3a879b60d1b6f082aea792e09a0
Parents: 9375363
Author: Jonathan Ellis <jb...@apache.org>
Authored: Thu Sep 19 10:18:07 2013 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Thu Sep 19 10:18:07 2013 -0500

----------------------------------------------------------------------
 CHANGES.txt                                     |  4 ++
 .../cassandra/config/DatabaseDescriptor.java    | 10 +++++
 .../apache/cassandra/service/CacheService.java  | 42 ++++++++++++++++----
 .../cassandra/service/CacheServiceMBean.java    |  6 +++
 .../org/apache/cassandra/tools/NodeCmd.java     |  8 +++-
 .../org/apache/cassandra/tools/NodeProbe.java   | 16 ++++++++
 .../apache/cassandra/tools/NodeToolHelp.yaml    |  3 ++
 7 files changed, 80 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/df046d6b/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index f853cce..27e6f24 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,3 +1,7 @@
+1.2.11
+ * Allow cache-keys-to-save to be set at runtime (CASSANDRA-5980)
+
+
 1.2.10
  * Avoid second-guessing out-of-space state (CASSANDRA-5605)
  * Tuning knobs for dealing with large blobs and many CFs (CASSANDRA-5982)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/df046d6b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
index 8e3cbe2..22de2d6 100644
--- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
+++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
@@ -1251,6 +1251,11 @@ public class DatabaseDescriptor
         return conf.key_cache_keys_to_save;
     }
 
+    public static void setKeyCacheKeysToSave(int keyCacheKeysToSave)
+    {
+        conf.key_cache_keys_to_save = keyCacheKeysToSave;
+    }
+
     public static long getRowCacheSizeInMB()
     {
         return conf.row_cache_size_in_mb;
@@ -1271,6 +1276,11 @@ public class DatabaseDescriptor
         return conf.row_cache_keys_to_save;
     }
 
+    public static void setRowCacheKeysToSave(int rowCacheKeysToSave)
+    {
+        conf.row_cache_keys_to_save = rowCacheKeysToSave;
+    }
+
     public static IRowCacheProvider getRowCacheProvider()
     {
         return rowCacheProvider;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/df046d6b/src/java/org/apache/cassandra/service/CacheService.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/CacheService.java b/src/java/org/apache/cassandra/service/CacheService.java
index 34864f2..5d3dc72 100644
--- a/src/java/org/apache/cassandra/service/CacheService.java
+++ b/src/java/org/apache/cassandra/service/CacheService.java
@@ -207,13 +207,13 @@ public class CacheService implements CacheServiceMBean
         return DatabaseDescriptor.getRowCacheSavePeriod();
     }
 
-    public void setRowCacheSavePeriodInSeconds(int rcspis)
+    public void setRowCacheSavePeriodInSeconds(int seconds)
     {
-        if (rcspis < 0)
+        if (seconds < 0)
             throw new RuntimeException("RowCacheSavePeriodInSeconds must be non-negative.");
 
-        DatabaseDescriptor.setRowCacheSavePeriod(rcspis);
-        rowCache.scheduleSaving(rcspis, DatabaseDescriptor.getRowCacheKeysToSave());
+        DatabaseDescriptor.setRowCacheSavePeriod(seconds);
+        rowCache.scheduleSaving(seconds, DatabaseDescriptor.getRowCacheKeysToSave());
     }
 
     public int getKeyCacheSavePeriodInSeconds()
@@ -221,13 +221,39 @@ public class CacheService implements CacheServiceMBean
         return DatabaseDescriptor.getKeyCacheSavePeriod();
     }
 
-    public void setKeyCacheSavePeriodInSeconds(int kcspis)
+    public void setKeyCacheSavePeriodInSeconds(int seconds)
     {
-        if (kcspis < 0)
+        if (seconds < 0)
             throw new RuntimeException("KeyCacheSavePeriodInSeconds must be non-negative.");
 
-        DatabaseDescriptor.setKeyCacheSavePeriod(kcspis);
-        keyCache.scheduleSaving(kcspis, DatabaseDescriptor.getKeyCacheKeysToSave());
+        DatabaseDescriptor.setKeyCacheSavePeriod(seconds);
+        keyCache.scheduleSaving(seconds, DatabaseDescriptor.getKeyCacheKeysToSave());
+    }
+
+    public int getRowCacheKeysToSave()
+    {
+        return DatabaseDescriptor.getRowCacheKeysToSave();
+    }
+
+    public void setRowCacheKeysToSave(int count)
+    {
+        if (count < 0)
+            throw new RuntimeException("RowCacheKeysToSave must be non-negative.");
+        DatabaseDescriptor.setRowCacheKeysToSave(count);
+        rowCache.scheduleSaving(getRowCacheSavePeriodInSeconds(), count);
+    }
+
+    public int getKeyCacheKeysToSave()
+    {
+        return DatabaseDescriptor.getKeyCacheKeysToSave();
+    }
+
+    public void setKeyCacheKeysToSave(int count)
+    {
+        if (count < 0)
+            throw new RuntimeException("KeyCacheKeysToSave must be non-negative.");
+        DatabaseDescriptor.setKeyCacheKeysToSave(count);
+        keyCache.scheduleSaving(getKeyCacheSavePeriodInSeconds(), count);
     }
 
     public void invalidateKeyCache()

http://git-wip-us.apache.org/repos/asf/cassandra/blob/df046d6b/src/java/org/apache/cassandra/service/CacheServiceMBean.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/CacheServiceMBean.java b/src/java/org/apache/cassandra/service/CacheServiceMBean.java
index 8b8adf2..0225db2 100644
--- a/src/java/org/apache/cassandra/service/CacheServiceMBean.java
+++ b/src/java/org/apache/cassandra/service/CacheServiceMBean.java
@@ -27,6 +27,12 @@ public interface CacheServiceMBean
     public int getKeyCacheSavePeriodInSeconds();
     public void setKeyCacheSavePeriodInSeconds(int kcspis);
 
+    public int getRowCacheKeysToSave();
+    public void setRowCacheKeysToSave(int rckts);
+
+    public int getKeyCacheKeysToSave();
+    public void setKeyCacheKeysToSave(int kckts);
+
     /**
      * invalidate the key cache; for use after invalidating row cache
      */

http://git-wip-us.apache.org/repos/asf/cassandra/blob/df046d6b/src/java/org/apache/cassandra/tools/NodeCmd.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/NodeCmd.java b/src/java/org/apache/cassandra/tools/NodeCmd.java
index 7a770bb..26cc50e 100644
--- a/src/java/org/apache/cassandra/tools/NodeCmd.java
+++ b/src/java/org/apache/cassandra/tools/NodeCmd.java
@@ -164,7 +164,8 @@ public class NodeCmd
         RESETLOCALSCHEMA,
         PREDICTCONSISTENCY,
         ENABLEBACKUP,
-        DISABLEBACKUP
+        DISABLEBACKUP,
+        SETCACHEKEYSTOSAVE
     }
 
 
@@ -1271,6 +1272,11 @@ public class NodeCmd
                     probe.setCacheCapacities(Integer.parseInt(arguments[0]), Integer.parseInt(arguments[1]));
                     break;
 
+                case SETCACHEKEYSTOSAVE :
+                    if (arguments.length != 2) { badUse("setcachekeystosave requires key-cache-keys-to-save, and row-cache-keys-to-save args."); }
+                    probe.setCacheKeysToSave(Integer.parseInt(arguments[0]), Integer.parseInt(arguments[1]));
+                    break;
+
                 case SETCOMPACTIONTHRESHOLD :
                     if (arguments.length != 4) { badUse("setcompactionthreshold requires ks, cf, min, and max threshold args."); }
                     int minthreshold = Integer.parseInt(arguments[2]);

http://git-wip-us.apache.org/repos/asf/cassandra/blob/df046d6b/src/java/org/apache/cassandra/tools/NodeProbe.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/NodeProbe.java b/src/java/org/apache/cassandra/tools/NodeProbe.java
index e7cf592..7829b60 100644
--- a/src/java/org/apache/cassandra/tools/NodeProbe.java
+++ b/src/java/org/apache/cassandra/tools/NodeProbe.java
@@ -526,6 +526,22 @@ public class NodeProbe
         }
     }
 
+    public void setCacheKeysToSave(int keyCacheKeysToSave, int rowCacheKeysToSave)
+    {
+        try
+        {
+            String keyCachePath = "org.apache.cassandra.db:type=Caches";
+            CacheServiceMBean cacheMBean = JMX.newMBeanProxy(mbeanServerConn, new ObjectName(keyCachePath), CacheServiceMBean.class);
+            cacheMBean.setKeyCacheKeysToSave(keyCacheKeysToSave);
+            cacheMBean.setRowCacheKeysToSave(rowCacheKeysToSave);
+        }
+        catch (MalformedObjectNameException e)
+        {
+            throw new RuntimeException(e);
+        }
+    }
+
+
     public List<InetAddress> getEndpoints(String keyspace, String cf, String key)
     {
         return ssProxy.getNaturalEndpoints(keyspace, cf, key);

http://git-wip-us.apache.org/repos/asf/cassandra/blob/df046d6b/src/resources/org/apache/cassandra/tools/NodeToolHelp.yaml
----------------------------------------------------------------------
diff --git a/src/resources/org/apache/cassandra/tools/NodeToolHelp.yaml b/src/resources/org/apache/cassandra/tools/NodeToolHelp.yaml
index b540b2c..6feb7b4 100644
--- a/src/resources/org/apache/cassandra/tools/NodeToolHelp.yaml
+++ b/src/resources/org/apache/cassandra/tools/NodeToolHelp.yaml
@@ -185,6 +185,9 @@ commands:
   - name: setcachecapacity <key-cache-capacity> <row-cache-capacity>
     help: |
       Set global key and row cache capacities (in MB units).
+  - name: setcachekeystosave <key-cache-keys-to-save> <row-cache-keys-to-save>
+    help: |
+      Set number of keys saved by each cache for faster post-restart warmup. 0 to disable.
   - name: getendpoints <keyspace> <cf> <key>
     help: |
       Print the end points that owns the key