cpoerschke commented on code in PR #96:
URL: https://github.com/apache/solr/pull/96#discussion_r1311918794


##########
solr/core/src/java/org/apache/solr/util/circuitbreaker/CPUCircuitBreaker.java:
##########
@@ -17,54 +17,49 @@
 
 package org.apache.solr.util.circuitbreaker;
 
+import com.codahale.metrics.Gauge;
+import com.codahale.metrics.Metric;
 import java.lang.invoke.MethodHandles;
-import java.lang.management.ManagementFactory;
-import java.lang.management.OperatingSystemMXBean;
+import org.apache.solr.core.SolrCore;
+import org.apache.solr.metrics.SolrMetricManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
  * Tracks current CPU usage and triggers if the specified threshold is 
breached.
  *
- * <p>This circuit breaker gets the average CPU load over the last minute and 
uses that data to take
- * a decision. We depend on OperatingSystemMXBean which does not allow a 
configurable interval of
- * collection of data. //TODO: Use Codahale Meter to calculate the value 
locally.
- *
- * <p>The configuration to define which mode to use and the trigger threshold 
are defined in
- * solrconfig.xml
+ * <p>This circuit breaker gets the recent average CPU usage and uses that 
data to take a decision.
+ * We depend on OperatingSystemMXBean which does not allow a configurable 
interval of collection of
+ * data.
  */
 public class CPUCircuitBreaker extends CircuitBreaker {
   private static final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-  private static final OperatingSystemMXBean operatingSystemMXBean =
-      ManagementFactory.getOperatingSystemMXBean();
 
+  private static boolean warningLogged = false;

Review Comment:
   So an alternative to `boolean` would be `AtomicBoolean` then, say. Since the 
variable is only read (and set) in an error scenario there then maybe wouldn't 
be any concern re: atomic being more expensive.
   
   But actually, I wonder, if failure to acquire the inputs is systemic, 
wouldn't one want to know as early as possible e.g. in the constructor and to 
at least log a warning there, maybe an error or to throw an exception even?
   * That's not specific to this class I guess.
   * In the case of a search circuit breaker one could imagine ping-like 
behaviour resulting in the warning being logged ahead of 'real' traffic 
reaching the core.
   * In the case of an update circuit breaker would it conceptually only be the 
first real update request that results in a warning and that could be confusing 
or undesirable, whereas a warning on startup is more harmless?
   
   If the constructor made a `isTripped(true)` call then no `warningLogged` 
member variable would be needed and that would also help with the _the value of 
these parameters will be set correctly before invoking getDebugInfo()_ 
assumption at line 42/43.
   
   ```
   public boolean isTripped() {
     return isTripped(false);
   }
   
   private boolean isTripped(boolean logWarning) {
     ...
   }
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


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

Reply via email to