From 23233b384aede963c883a937adf94859edbd7f02 Mon Sep 17 00:00:00 2001 From: Aleksey Yeschenko Date: Fri, 15 Aug 2014 22:14:17 +0300 Subject: [PATCH] Invalidate all caches on table drop patch by Aleksey Yeschenko; reviewed by Benedict Elliott Smith for CASSANDRA-7561 --- CHANGES.txt | 1 + .../org/apache/cassandra/db/ColumnFamilyStore.java | 10 +++------- .../org/apache/cassandra/service/CacheService.java | 11 +++++++++++ 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index dfe9c478b8..5b5283f020 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.1.0-rc6 + * Invalidate all caches on table drop (CASSANDRA-7561) * Skip strict endpoint selection for ranges if RF == nodes (CASSANRA-7765) * Fix Thrift range filtering without 2ary index lookups (CASSANDRA-7741) * Add tracing entries about concurrent range requests (CASSANDRA-7599) diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java index a0860a7d05..4842285cdb 100644 --- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java +++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java @@ -372,8 +372,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean data.unreferenceSSTables(); indexManager.invalidate(); - CacheService.instance.invalidateRowCacheForCf(metadata.cfId); - CacheService.instance.invalidateKeyCacheForCf(metadata.cfId); + invalidateCaches(); } /** @@ -2286,15 +2285,12 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean private void invalidateCaches() { + CacheService.instance.invalidateKeyCacheForCf(metadata.cfId); CacheService.instance.invalidateRowCacheForCf(metadata.cfId); - if (metadata.isCounter()) - for (CounterCacheKey key : CacheService.instance.counterCache.getKeySet()) - if (key.cfId == metadata.cfId) - CacheService.instance.counterCache.remove(key); + CacheService.instance.invalidateCounterCacheForCf(metadata.cfId); } - /** * @return true if @param key is contained in the row cache */ diff --git a/src/java/org/apache/cassandra/service/CacheService.java b/src/java/org/apache/cassandra/service/CacheService.java index f51a166555..1b93c2cb06 100644 --- a/src/java/org/apache/cassandra/service/CacheService.java +++ b/src/java/org/apache/cassandra/service/CacheService.java @@ -310,6 +310,17 @@ public class CacheService implements CacheServiceMBean } } + public void invalidateCounterCacheForCf(UUID cfId) + { + Iterator counterCacheIterator = counterCache.getKeySet().iterator(); + while (counterCacheIterator.hasNext()) + { + CounterCacheKey counterCacheKey = counterCacheIterator.next(); + if (counterCacheKey.cfId.equals(cfId)) + counterCacheIterator.remove(); + } + } + public void invalidateCounterCache() { counterCache.clear();