Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/java/org/apache/cassandra/config/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,7 @@ public static class SSTableConfig
public volatile DataStorageSpec.IntMebibytesBound sstable_preemptive_open_interval = new DataStorageSpec.IntMebibytesBound("50MiB");

public volatile boolean key_cache_migrate_during_compaction = true;
public volatile boolean key_cache_invalidate_after_sstable_deletion = false;
public volatile int key_cache_keys_to_save = Integer.MAX_VALUE;
@Replaces(oldName = "key_cache_size_in_mb", converter = Converters.MEBIBYTES_DATA_STORAGE_LONG, deprecated = true)
public DataStorageSpec.LongMebibytesBound key_cache_size = null;
Expand Down
10 changes: 10 additions & 0 deletions src/java/org/apache/cassandra/config/DatabaseDescriptor.java
Original file line number Diff line number Diff line change
Expand Up @@ -3760,6 +3760,16 @@ public static void setMigrateKeycacheOnCompaction(boolean migrateCacheEntry)
conf.key_cache_migrate_during_compaction = migrateCacheEntry;
}

public static boolean shouldInvalidateKeycacheOnSSTableDeletion()
{
return conf.key_cache_invalidate_after_sstable_deletion;
}

public static void setInvalidateKeycacheOnSSTableDeletion(boolean invalidateCacheEntry)
{
conf.key_cache_invalidate_after_sstable_deletion = invalidateCacheEntry;
}

/** This method can return negative number for disabled */
public static int getSSTablePreemptiveOpenIntervalInMiB()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -247,13 +247,16 @@ public void delete(Descriptor desc)
{
try
{
// remove key cache entries for the sstable being deleted
Iterator<KeyCacheKey> it = CacheService.instance.keyCache.keyIterator();
while (it.hasNext())
if (DatabaseDescriptor.shouldInvalidateKeycacheOnSSTableDeletion())
{
KeyCacheKey key = it.next();
if (key.desc.equals(desc))
it.remove();
// remove key cache entries for the sstable being deleted
Iterator<KeyCacheKey> it = CacheService.instance.keyCache.keyIterator();
while (it.hasNext())
{
KeyCacheKey key = it.next();
if (key.desc.equals(desc))
it.remove();
}
}

delete(desc, Lists.newArrayList(Sets.intersection(allComponents(), desc.discoverComponents())));
Expand Down
10 changes: 10 additions & 0 deletions src/java/org/apache/cassandra/service/StorageService.java
Original file line number Diff line number Diff line change
Expand Up @@ -6646,6 +6646,16 @@ public void setMigrateKeycacheOnCompaction(boolean invalidateKeyCacheOnCompactio
DatabaseDescriptor.setMigrateKeycacheOnCompaction(invalidateKeyCacheOnCompaction);
}

public boolean getInvalidateKeycacheOnSSTableDeletion()
{
return DatabaseDescriptor.shouldInvalidateKeycacheOnSSTableDeletion();
}

public void setInvalidateKeycacheOnSSTableDeletion(boolean invalidate)
{
DatabaseDescriptor.setInvalidateKeycacheOnSSTableDeletion(invalidate);
}

public int getTombstoneWarnThreshold()
{
return DatabaseDescriptor.getTombstoneWarnThreshold();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -833,6 +833,8 @@ default int upgradeSSTables(String keyspaceName, boolean excludeCurrentVersion,

public boolean getMigrateKeycacheOnCompaction();
public void setMigrateKeycacheOnCompaction(boolean invalidateKeyCacheOnCompaction);
public boolean getInvalidateKeycacheOnSSTableDeletion();
public void setInvalidateKeycacheOnSSTableDeletion(boolean invalidate);

public int getConcurrentViewBuilders();
public void setConcurrentViewBuilders(int value);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -350,14 +350,14 @@ private void testKeyCache(String cf) throws ExecutionException, InterruptedExcep

LifecycleTransaction.waitForDeletions();

// after releasing the reference this should drop to 2
assertKeyCacheSize(2, KEYSPACE1, cf);
// after releasing the reference this should drop to 2, unless we don't invalidate keycache on sstable deletion
assertKeyCacheSize(DatabaseDescriptor.shouldInvalidateKeycacheOnSSTableDeletion() ? 2 : 4, KEYSPACE1, cf);

// re-read same keys to verify that key cache didn't grow further
Util.getAll(Util.cmd(cfs, "key1").build());
Util.getAll(Util.cmd(cfs, "key2").build());

assertKeyCacheSize( 2, KEYSPACE1, cf);
assertKeyCacheSize( DatabaseDescriptor.shouldInvalidateKeycacheOnSSTableDeletion() ? 2 : 4, KEYSPACE1, cf);
}

@Test
Expand Down