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