Repository: cassandra Updated Branches: refs/heads/cassandra-3.0 659be5f5e -> 0bb133e39 refs/heads/cassandra-3.9 9501c64f6 -> 79fbdbe6c refs/heads/trunk 0f6461849 -> d8ca69c01
Add option to override compaction space check Patch by Sankalp Kohli; reviewed by Carl Yeksigian for CASSANDRA-12180 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/0bb133e3 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/0bb133e3 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/0bb133e3 Branch: refs/heads/cassandra-3.0 Commit: 0bb133e39d95486a897ff375f081cc814f78181b Parents: 659be5f Author: Carl Yeksigian <[email protected]> Authored: Tue Jul 26 08:49:56 2016 -0400 Committer: Carl Yeksigian <[email protected]> Committed: Tue Jul 26 08:49:56 2016 -0400 ---------------------------------------------------------------------- CHANGES.txt | 1 + src/java/org/apache/cassandra/config/Config.java | 1 + .../org/apache/cassandra/config/DatabaseDescriptor.java | 5 +++++ src/java/org/apache/cassandra/db/ColumnFamilyStore.java | 12 ++++++++++++ .../org/apache/cassandra/db/ColumnFamilyStoreMBean.java | 10 ++++++++++ src/java/org/apache/cassandra/db/Directories.java | 3 ++- .../apache/cassandra/db/compaction/CompactionTask.java | 6 ++++++ 7 files changed, 37 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/0bb133e3/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index e9f41fb..342382e 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.0.9 + * Add option to override compaction space check (CASSANDRA-12180) * Faster startup by only scanning each directory for temporary files once (CASSANDRA-12114) * Respond with v1/v2 protocol header when responding to driver that attempts to connect with too low of a protocol version (CASSANDRA-11464) http://git-wip-us.apache.org/repos/asf/cassandra/blob/0bb133e3/src/java/org/apache/cassandra/config/Config.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/config/Config.java b/src/java/org/apache/cassandra/config/Config.java index 2bd23b5..e6c56cb 100644 --- a/src/java/org/apache/cassandra/config/Config.java +++ b/src/java/org/apache/cassandra/config/Config.java @@ -171,6 +171,7 @@ public class Config public Integer concurrent_compactors; public volatile Integer compaction_throughput_mb_per_sec = 16; public volatile Integer compaction_large_partition_warning_threshold_mb = 100; + public Integer min_free_space_per_drive_in_mb = 50; public Integer max_streaming_retries = 3; http://git-wip-us.apache.org/repos/asf/cassandra/blob/0bb133e3/src/java/org/apache/cassandra/config/DatabaseDescriptor.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java index b71ebf6..f0ec5d0 100644 --- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java +++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java @@ -1209,6 +1209,11 @@ public class DatabaseDescriptor public static int getCompactionLargePartitionWarningThreshold() { return conf.compaction_large_partition_warning_threshold_mb * 1024 * 1024; } + public static long getMinFreeSpacePerDriveInBytes() + { + return conf.min_free_space_per_drive_in_mb * 1024L * 1024L; + } + public static boolean getDisableSTCSInL0() { return Boolean.getBoolean("cassandra.disable_stcs_in_l0"); http://git-wip-us.apache.org/repos/asf/cassandra/blob/0bb133e3/src/java/org/apache/cassandra/db/ColumnFamilyStore.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java index f34a2d5..1e52b13 100644 --- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java +++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java @@ -222,6 +222,8 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean public volatile long sampleLatencyNanos; private final ScheduledFuture<?> latencyCalculator; + private volatile boolean compactionSpaceCheck = true; + public static void shutdownPostFlushExecutor() throws InterruptedException { postFlushExecutor.shutdown(); @@ -1597,6 +1599,16 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean samplerResults.cardinality, result}); } + public boolean isCompactionDiskSpaceCheckEnabled() + { + return compactionSpaceCheck; + } + + public void compactionDiskSpaceCheck(boolean enable) + { + compactionSpaceCheck = enable; + } + public void cleanupCache() { Collection<Range<Token>> ranges = StorageService.instance.getLocalRanges(keyspace.getName()); http://git-wip-us.apache.org/repos/asf/cassandra/blob/0bb133e3/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java b/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java index c900442..a74316e 100644 --- a/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java +++ b/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java @@ -161,4 +161,14 @@ public interface ColumnFamilyStoreMBean * @return top <i>count</i> items for the sampler since beginLocalSampling was called */ public CompositeData finishLocalSampling(String sampler, int count) throws OpenDataException; + + /* + Is Compaction space check enabled + */ + public boolean isCompactionDiskSpaceCheckEnabled(); + + /* + Enable/Disable compaction space check + */ + public void compactionDiskSpaceCheck(boolean enable); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/0bb133e3/src/java/org/apache/cassandra/db/Directories.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/Directories.java b/src/java/org/apache/cassandra/db/Directories.java index f7bb390..01ffd52 100644 --- a/src/java/org/apache/cassandra/db/Directories.java +++ b/src/java/org/apache/cassandra/db/Directories.java @@ -516,7 +516,8 @@ public class Directories public long getAvailableSpace() { - return location.getUsableSpace(); + long availableSpace = location.getUsableSpace() - DatabaseDescriptor.getMinFreeSpacePerDriveInBytes(); + return availableSpace > 0 ? availableSpace : 0; } @Override http://git-wip-us.apache.org/repos/asf/cassandra/blob/0bb133e3/src/java/org/apache/cassandra/db/compaction/CompactionTask.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionTask.java b/src/java/org/apache/cassandra/db/compaction/CompactionTask.java index be81c80..9a7aa98 100644 --- a/src/java/org/apache/cassandra/db/compaction/CompactionTask.java +++ b/src/java/org/apache/cassandra/db/compaction/CompactionTask.java @@ -268,6 +268,12 @@ public class CompactionTask extends AbstractCompactionTask protected void checkAvailableDiskSpace(long estimatedSSTables, long expectedWriteSize) { + if(!cfs.isCompactionDiskSpaceCheckEnabled() && compactionType == OperationType.COMPACTION) + { + logger.info("Compaction space check is disabled"); + return; + } + while (!getDirectories().hasAvailableDiskSpace(estimatedSSTables, expectedWriteSize)) { if (!reduceScopeForLimitedSpace())
