You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by at...@apache.org on 2021/06/11 18:56:30 UTC

[solr] branch main updated: SOLR-14588: Add Validation for Circuit Breaker Thresholds

This is an automated email from the ASF dual-hosted git repository.

atri pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/main by this push:
     new db968d7  SOLR-14588: Add Validation for Circuit Breaker Thresholds
db968d7 is described below

commit db968d788b180a20e2ebbf6ed27ce8ddddbe7688
Author: Atri Sharma <at...@gmail.com>
AuthorDate: Sat Jun 12 00:14:18 2021 +0530

    SOLR-14588: Add Validation for Circuit Breaker Thresholds
    
    This commit introduces validation for the thresholds set for memory and CPU circuit breakers.
---
 .../solr/util/circuitbreaker/CircuitBreaker.java   | 25 ++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/solr/core/src/java/org/apache/solr/util/circuitbreaker/CircuitBreaker.java b/solr/core/src/java/org/apache/solr/util/circuitbreaker/CircuitBreaker.java
index 90fda7a..86ce17d 100644
--- a/solr/core/src/java/org/apache/solr/util/circuitbreaker/CircuitBreaker.java
+++ b/solr/core/src/java/org/apache/solr/util/circuitbreaker/CircuitBreaker.java
@@ -61,6 +61,12 @@ public abstract class CircuitBreaker {
   public abstract String getErrorMessage();
 
   public static class CircuitBreakerConfig {
+    private static final int MEM_CB_THRESHOLD_LOWER_BOUND = 50;
+    private static final int MEM_CB_THRESHOLD_UPPER_BOUND = 95;
+
+    // CPU Circuit Breaker threshold is unbounded
+    private static final int CPU_CB_THRESHOLD_LOWER_BOUND = 0;
+
     private final boolean enabled;
     private final boolean memCBEnabled;
     private final int memCBThreshold;
@@ -69,6 +75,8 @@ public abstract class CircuitBreaker {
 
     public CircuitBreakerConfig(final boolean enabled, final boolean memCBEnabled, final int memCBThreshold,
                                   final boolean cpuCBEnabled, final int cpuCBThreshold) {
+      validateCircuitBreakerThresholds(memCBEnabled, memCBThreshold, cpuCBEnabled, cpuCBThreshold);
+
       this.enabled = enabled;
       this.memCBEnabled = memCBEnabled;
       this.memCBThreshold = memCBThreshold;
@@ -95,5 +103,22 @@ public abstract class CircuitBreaker {
     public int getCpuCBThreshold() {
       return cpuCBThreshold;
     }
+
+    private static void validateCircuitBreakerThresholds(final boolean memCBEnabled, final int memCBThreshold,
+                                                         final boolean cpuCBEnabled, final int cpuCBThreshold) {
+
+      if (cpuCBEnabled) {
+        if (cpuCBThreshold < CPU_CB_THRESHOLD_LOWER_BOUND) {
+          throw new IllegalArgumentException("CPU Circuit Breaker threshold cannot be less than " + CPU_CB_THRESHOLD_LOWER_BOUND);
+        }
+      }
+
+      if (memCBEnabled) {
+        if (memCBThreshold < MEM_CB_THRESHOLD_LOWER_BOUND || memCBThreshold > MEM_CB_THRESHOLD_UPPER_BOUND) {
+          throw new IllegalArgumentException("Memory Circuit Breaker threshold needs to be in the range of " + MEM_CB_THRESHOLD_LOWER_BOUND
+                  + "," + MEM_CB_THRESHOLD_UPPER_BOUND);
+        }
+      }
+    }
   }
 }
\ No newline at end of file