diff --git a/src/java/org/apache/cassandra/cache/InstrumentingCache.java b/src/java/org/apache/cassandra/cache/InstrumentingCache.java index 494dbbc561..d657d64adf 100644 --- a/src/java/org/apache/cassandra/cache/InstrumentingCache.java +++ b/src/java/org/apache/cassandra/cache/InstrumentingCache.java @@ -28,6 +28,7 @@ public class InstrumentingCache { private final ICache map; private final String type; + private volatile boolean enabled; private CacheMetrics metrics; @@ -35,6 +36,7 @@ public class InstrumentingCache { this.map = map; this.type = type; + enabled = !(map instanceof NopCacheProvider.NopCache) && map.capacity() > 0; this.metrics = new CacheMetrics(type, map); } @@ -82,6 +84,12 @@ public class InstrumentingCache public void setCapacity(long capacity) { map.setCapacity(capacity); + enabled = capacity > 0; + } + + public boolean enabled() + { + return enabled; } public int size() diff --git a/src/java/org/apache/cassandra/cache/NopCacheProvider.java b/src/java/org/apache/cassandra/cache/NopCacheProvider.java index 9b8a3dcdf1..22fd6456cd 100644 --- a/src/java/org/apache/cassandra/cache/NopCacheProvider.java +++ b/src/java/org/apache/cassandra/cache/NopCacheProvider.java @@ -27,7 +27,7 @@ public class NopCacheProvider implements CacheProvider + static class NopCache implements ICache { public long capacity() { diff --git a/src/java/org/apache/cassandra/io/sstable/format/SSTableReader.java b/src/java/org/apache/cassandra/io/sstable/format/SSTableReader.java index f26cf65c93..ccdaf593a4 100644 --- a/src/java/org/apache/cassandra/io/sstable/format/SSTableReader.java +++ b/src/java/org/apache/cassandra/io/sstable/format/SSTableReader.java @@ -519,7 +519,7 @@ public abstract class SSTableReader extends SSTable implements UnfilteredSource, if (validate) sstable.validate(); - if (sstable.getKeyCache() != null) + if (logger.isTraceEnabled() && sstable.getKeyCache() != null && sstable.getKeyCache().enabled()) logger.trace("key cache contains {}/{} keys", sstable.getKeyCache().size(), sstable.getKeyCache().getCapacity()); return sstable; @@ -717,7 +717,7 @@ public abstract class SSTableReader extends SSTable implements UnfilteredSource, // e.g. by BulkLoader, which does not initialize the cache. As a kludge, we set up the cache // here when we know we're being wired into the rest of the server infrastructure. InstrumentingCache maybeKeyCache = CacheService.instance.keyCache; - if (maybeKeyCache.getCapacity() > 0) + if (maybeKeyCache.enabled()) keyCache = maybeKeyCache; final ColumnFamilyStore cfs = Schema.instance.getColumnFamilyStoreInstance(metadata().id); @@ -1333,7 +1333,7 @@ public abstract class SSTableReader extends SSTable implements UnfilteredSource, { CachingParams caching = metadata().params.caching; - if (!caching.cacheKeys() || keyCache == null || keyCache.getCapacity() == 0) + if (!caching.cacheKeys() || keyCache == null || !keyCache.enabled()) return; KeyCacheKey cacheKey = new KeyCacheKey(metadata(), descriptor, key.getKey());