Author: jbellis Date: Mon May 17 19:07:39 2010 New Revision: 945315 URL: http://svn.apache.org/viewvc?rev=945315&view=rev Log: do not recalculate cache capacity post-compaction if it's been manually modified. patch by jbellis; reviewed by Ryan King for CASSANDRA-1079
Modified: cassandra/branches/cassandra-0.6/CHANGES.txt cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/cache/InstrumentedCache.java cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/io/SSTableTracker.java Modified: cassandra/branches/cassandra-0.6/CHANGES.txt URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/CHANGES.txt?rev=945315&r1=945314&r2=945315&view=diff ============================================================================== --- cassandra/branches/cassandra-0.6/CHANGES.txt (original) +++ cassandra/branches/cassandra-0.6/CHANGES.txt Mon May 17 19:07:39 2010 @@ -18,6 +18,8 @@ finished (CASSANDRA-1076) * added Collections.shuffle(splits) before returning the splits in ColumnFamilyInputFormat (CASSANDRA-1096) + * do not recalculate cache capacity post-compaction if it's been manually + modified (CASSANDRA-1079) 0.6.1 Modified: cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/cache/InstrumentedCache.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/cache/InstrumentedCache.java?rev=945315&r1=945314&r2=945315&view=diff ============================================================================== --- cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/cache/InstrumentedCache.java (original) +++ cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/cache/InstrumentedCache.java Mon May 17 19:07:39 2010 @@ -33,6 +33,7 @@ public class InstrumentedCache<K, V> private final AtomicLong hits = new AtomicLong(0); private final AtomicLong lastRequests = new AtomicLong(0); private final AtomicLong lastHits = new AtomicLong(0); + private volatile boolean capacityModified; public InstrumentedCache(int capacity) { @@ -69,10 +70,16 @@ public class InstrumentedCache<K, V> return capacity; } + public boolean isCapacityModified() + { + return capacityModified; + } + public void setCapacity(int capacity) { map.setCapacity(capacity); this.capacity = capacity; + capacityModified = true; } public int getSize() Modified: cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/io/SSTableTracker.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/io/SSTableTracker.java?rev=945315&r1=945314&r2=945315&view=diff ============================================================================== --- cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/io/SSTableTracker.java (original) +++ cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/io/SSTableTracker.java Mon May 17 19:07:39 2010 @@ -106,22 +106,28 @@ public class SSTableTracker implements I public synchronized void updateCacheSizes() { long keys = estimatedKeys(); - - int keyCacheSize = DatabaseDescriptor.getKeysCachedFor(ksname, cfname, keys); - if (keyCacheSize != keyCache.getCapacity()) + + if (!keyCache.isCapacityModified()) { - // update cache size for the new key volume - if (logger.isDebugEnabled()) - logger.debug("key cache capacity for " + cfname + " is " + keyCacheSize); - keyCache.setCapacity(keyCacheSize); + int keyCacheSize = DatabaseDescriptor.getKeysCachedFor(ksname, cfname, keys); + if (keyCacheSize != keyCache.getCapacity()) + { + // update cache size for the new key volume + if (logger.isDebugEnabled()) + logger.debug("key cache capacity for " + cfname + " is " + keyCacheSize); + keyCache.setCapacity(keyCacheSize); + } } - int rowCacheSize = DatabaseDescriptor.getRowsCachedFor(ksname, cfname, keys); - if (rowCacheSize != rowCache.getCapacity()) - { - if (logger.isDebugEnabled()) - logger.debug("row cache capacity for " + cfname + " is " + rowCacheSize); - rowCache.setCapacity(rowCacheSize); + if (!rowCache.isCapacityModified()) + { + int rowCacheSize = DatabaseDescriptor.getRowsCachedFor(ksname, cfname, keys); + if (rowCacheSize != rowCache.getCapacity()) + { + if (logger.isDebugEnabled()) + logger.debug("row cache capacity for " + cfname + " is " + rowCacheSize); + rowCache.setCapacity(rowCacheSize); + } } }