Repository: cassandra
Updated Branches:
  refs/heads/trunk d2cb90fc5 -> 8028d4bdd


Add configurable upper bound for validation executor threads

Patch by Blake Eggleston; Reviewed by Jeff Jirsa for CASSANDRA-13521


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/8028d4bd
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/8028d4bd
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/8028d4bd

Branch: refs/heads/trunk
Commit: 8028d4bdd646058f18f45cad10b5de74efc415e6
Parents: d2cb90f
Author: Blake Eggleston <bdeggles...@gmail.com>
Authored: Wed May 10 13:10:14 2017 -0700
Committer: Blake Eggleston <bdeggles...@gmail.com>
Committed: Thu May 18 16:15:33 2017 -0700

----------------------------------------------------------------------
 CHANGES.txt                                           |  1 +
 conf/cassandra.yaml                                   |  4 ++++
 src/java/org/apache/cassandra/config/Config.java      |  2 ++
 .../apache/cassandra/config/DatabaseDescriptor.java   | 14 ++++++++++++++
 .../cassandra/db/compaction/CompactionManager.java    |  8 +++++++-
 .../org/apache/cassandra/service/StorageService.java  | 11 +++++++++++
 .../apache/cassandra/service/StorageServiceMBean.java |  3 +++
 7 files changed, 42 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/8028d4bd/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 9d1323d..a5afb86 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 4.0
+ * Add configurable upper bound for validation executor threads 
(CASSANDRA-13521)
  * Bring back maxHintTTL propery (CASSANDRA-12982)
  * Add testing guidelines (CASSANDRA-13497)
  * Add more repair metrics (CASSANDRA-13531)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8028d4bd/conf/cassandra.yaml
----------------------------------------------------------------------
diff --git a/conf/cassandra.yaml b/conf/cassandra.yaml
index e968b0c..bdc68d1 100644
--- a/conf/cassandra.yaml
+++ b/conf/cassandra.yaml
@@ -748,6 +748,10 @@ column_index_cache_size_in_kb: 2
 # to the number of cores.
 #concurrent_compactors: 1
 
+# Number of simultaneous repair validations to allow. Default is unbounded
+# Values less than one are interpreted as unbounded (the default)
+# concurrent_validations: 0
+
 # Throttles compaction to the given total throughput across the entire
 # system. The faster you insert data, the faster you need to compact in
 # order to keep the sstable count down, but in general, setting this to

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8028d4bd/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 e76284d..b7bacde 100644
--- a/src/java/org/apache/cassandra/config/Config.java
+++ b/src/java/org/apache/cassandra/config/Config.java
@@ -171,6 +171,8 @@ public class Config
     public volatile int compaction_large_partition_warning_threshold_mb = 100;
     public int min_free_space_per_drive_in_mb = 50;
 
+    public volatile int concurrent_validations = Integer.MAX_VALUE;
+
     /**
      * @deprecated retry support removed on CASSANDRA-10992
      */

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8028d4bd/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 85f070f..2d4f191 100644
--- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
+++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
@@ -562,6 +562,9 @@ public class DatabaseDescriptor
         if (conf.concurrent_compactors == null)
             conf.concurrent_compactors = Math.min(8, Math.max(2, 
Math.min(FBUtilities.getAvailableProcessors(), 
conf.data_file_directories.length)));
 
+        if (conf.concurrent_validations < 1)
+            conf.concurrent_validations = Integer.MAX_VALUE;
+
         if (conf.concurrent_compactors <= 0)
             throw new ConfigurationException("concurrent_compactors should be 
strictly greater than 0, but was " + conf.concurrent_compactors, false);
 
@@ -1400,6 +1403,17 @@ public class DatabaseDescriptor
 
     public static int getCompactionLargePartitionWarningThreshold() { return 
conf.compaction_large_partition_warning_threshold_mb * 1024 * 1024; }
 
+    public static int getConcurrentValidations()
+    {
+        return conf.concurrent_validations;
+    }
+
+    public static void setConcurrentValidations(int value)
+    {
+        value = value > 0 ? value : Integer.MAX_VALUE;
+        conf.concurrent_validations = value;
+    }
+
     public static long getMinFreeSpacePerDriveInBytes()
     {
         return conf.min_free_space_per_drive_in_mb * 1024L * 1024L;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8028d4bd/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java 
b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
index 8efeeb0..71417b6 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
@@ -1854,7 +1854,7 @@ public class CompactionManager implements 
CompactionManagerMBean
     {
         public ValidationExecutor()
         {
-            super(1, Integer.MAX_VALUE, "ValidationExecutor", new 
SynchronousQueue<Runnable>());
+            super(1, DatabaseDescriptor.getConcurrentValidations(), 
"ValidationExecutor", new SynchronousQueue<Runnable>());
         }
     }
 
@@ -1975,6 +1975,12 @@ public class CompactionManager implements 
CompactionManagerMBean
         }
     }
 
+    public void setConcurrentValidations(int value)
+    {
+        value = value > 0 ? value : Integer.MAX_VALUE;
+        validationExecutor.setMaximumPoolSize(value);
+    }
+
     public int getCoreCompactorThreads()
     {
         return executor.getCorePoolSize();

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8028d4bd/src/java/org/apache/cassandra/service/StorageService.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageService.java 
b/src/java/org/apache/cassandra/service/StorageService.java
index b8bbea0..8914440 100644
--- a/src/java/org/apache/cassandra/service/StorageService.java
+++ b/src/java/org/apache/cassandra/service/StorageService.java
@@ -1363,6 +1363,17 @@ public class StorageService extends 
NotificationBroadcasterSupport implements IE
         CompactionManager.instance.setConcurrentCompactors(value);
     }
 
+    public int getConcurrentValidators()
+    {
+        return DatabaseDescriptor.getConcurrentValidations();
+    }
+
+    public void setConcurrentValidators(int value)
+    {
+        DatabaseDescriptor.setConcurrentValidations(value);
+        
CompactionManager.instance.setConcurrentValidations(DatabaseDescriptor.getConcurrentValidations());
+    }
+
     public boolean isIncrementalBackupsEnabled()
     {
         return DatabaseDescriptor.isIncrementalBackupsEnabled();

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8028d4bd/src/java/org/apache/cassandra/service/StorageServiceMBean.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageServiceMBean.java 
b/src/java/org/apache/cassandra/service/StorageServiceMBean.java
index 348610a..d94c263 100644
--- a/src/java/org/apache/cassandra/service/StorageServiceMBean.java
+++ b/src/java/org/apache/cassandra/service/StorageServiceMBean.java
@@ -508,6 +508,9 @@ public interface StorageServiceMBean extends 
NotificationEmitter
     public int getConcurrentCompactors();
     public void setConcurrentCompactors(int value);
 
+    public int getConcurrentValidators();
+    public void setConcurrentValidators(int value);
+
     public boolean isIncrementalBackupsEnabled();
     public void setIncrementalBackupsEnabled(boolean value);
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to