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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]