You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by xe...@apache.org on 2012/03/27 22:15:34 UTC
[3/7] git commit: Adds posibility to autoconfigure size of the
KeyCache patch by Pavel Yaskevich;
reviewed by Yuki Morishita for CASSANDRA-4087
Adds posibility to autoconfigure size of the KeyCache
patch by Pavel Yaskevich; reviewed by Yuki Morishita for CASSANDRA-4087
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/a59a5f59
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/a59a5f59
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/a59a5f59
Branch: refs/heads/trunk
Commit: a59a5f59ce3042324b68a37b2392775cb191712e
Parents: 42a0a46
Author: Pavel Yaskevich <xe...@apache.org>
Authored: Tue Mar 27 13:57:07 2012 +0300
Committer: Pavel Yaskevich <xe...@apache.org>
Committed: Tue Mar 27 23:10:04 2012 +0300
----------------------------------------------------------------------
CHANGES.txt | 2 +
conf/cassandra.yaml | 4 +-
src/java/org/apache/cassandra/config/Config.java | 2 +-
.../cassandra/config/DatabaseDescriptor.java | 19 ++++++++++++++-
4 files changed, 23 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a59a5f59/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 8cad485..047890b 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -7,6 +7,8 @@
1.1-dev
* Adds caching and bloomFilterFpChange to CQL options (CASSANDRA-4042)
+ * Adds posibility to autoconfigure size of the KeyCache (CASSANDRA-4087)
+
1.1-beta2
* rename loaded sstables to avoid conflicts with local snapshots
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a59a5f59/conf/cassandra.yaml
----------------------------------------------------------------------
diff --git a/conf/cassandra.yaml b/conf/cassandra.yaml
index fa4ee9f..4010d74 100644
--- a/conf/cassandra.yaml
+++ b/conf/cassandra.yaml
@@ -77,8 +77,8 @@ commitlog_directory: /var/lib/cassandra/commitlog
#
# NOTE: if you reduce the size, you may not get you hottest keys loaded on startup.
#
-# Default value is 2 (call hold > 200000 keys). Set to 0 to disable key cache.
-key_cache_size_in_mb: 2
+# Default value is "auto" (min(5% of Heap (in MB), 100MB)). Set to 0 to disable key cache.
+key_cache_size_in_mb: auto
# Duration in seconds after which Cassandra should
# safe the keys cache. Caches are saved to saved_caches_directory as
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a59a5f59/src/java/org/apache/cassandra/config/Config.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/Config.java b/src/java/org/apache/cassandra/config/Config.java
index 1131721..a9b9964 100644
--- a/src/java/org/apache/cassandra/config/Config.java
+++ b/src/java/org/apache/cassandra/config/Config.java
@@ -128,7 +128,7 @@ public class Config
public boolean trickle_fsync = false;
public int trickle_fsync_interval_in_kb = 10240;
- public int key_cache_size_in_mb = 2;
+ public String key_cache_size_in_mb = "auto";
public int key_cache_save_period = 14400;
public int key_cache_keys_to_save = Integer.MAX_VALUE;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a59a5f59/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 60b4724..11543ff 100644
--- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
+++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
@@ -83,6 +83,7 @@ public class DatabaseDescriptor
private static RequestSchedulerId requestSchedulerId;
private static RequestSchedulerOptions requestSchedulerOptions;
+ private static int keyCacheSizeInMB;
private static IRowCacheProvider rowCacheProvider;
/**
@@ -414,6 +415,22 @@ public class DatabaseDescriptor
if (conf.initial_token != null)
partitioner.getTokenFactory().validate(conf.initial_token);
+ try
+ {
+ // if key_cache_size_in_mb option was set to "auto" then size of the cache should be "min(5% of Heap (in MB), 100MB)
+ keyCacheSizeInMB = "auto".equalsIgnoreCase(conf.key_cache_size_in_mb)
+ ? Math.min((int) (Runtime.getRuntime().totalMemory() * 0.05 / 1024 / 1024), 100)
+ : Integer.valueOf(conf.key_cache_size_in_mb);
+
+ if (keyCacheSizeInMB < 0)
+ throw new NumberFormatException(); // to escape duplicating error message
+ }
+ catch (NumberFormatException e)
+ {
+ throw new ConfigurationException("key_cache_size_in_mb option was set incorrectly to '"
+ + conf.key_cache_size_in_mb + "', supported values are 'auto' and <integer> >= 0.");
+ }
+
rowCacheProvider = FBUtilities.newCacheProvider(conf.row_cache_provider);
// Hardcoded system tables
@@ -998,7 +1015,7 @@ public class DatabaseDescriptor
public static int getKeyCacheSizeInMB()
{
- return conf.key_cache_size_in_mb;
+ return keyCacheSizeInMB;
}
public static int getKeyCacheSavePeriod()