mirror of https://github.com/apache/cassandra
Adds posibility to autoconfigure size of the KeyCache
patch by Pavel Yaskevich; reviewed by Yuki Morishita for CASSANDRA-4087
This commit is contained in:
parent
e3c4c095f0
commit
731af1a432
|
|
@ -1,5 +1,7 @@
|
|||
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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -126,7 +126,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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -993,7 +1010,7 @@ public class DatabaseDescriptor
|
|||
|
||||
public static int getKeyCacheSizeInMB()
|
||||
{
|
||||
return conf.key_cache_size_in_mb;
|
||||
return keyCacheSizeInMB;
|
||||
}
|
||||
|
||||
public static int getKeyCacheSavePeriod()
|
||||
|
|
|
|||
Loading…
Reference in New Issue