Class ChildMemoryCircuitBreaker

All Implemented Interfaces:

public class ChildMemoryCircuitBreaker extends Object implements CircuitBreaker
Breaker that will check a parent's when incrementing
  • Constructor Details

    • ChildMemoryCircuitBreaker

      public ChildMemoryCircuitBreaker(BreakerSettings settings, org.apache.logging.log4j.Logger logger, HierarchyCircuitBreakerService parent, String name)
      Create a circuit breaker that will break if the number of estimated bytes grows above the limit. All estimations will be multiplied by the given overheadConstant. Uses the given oldBreaker to initialize the starting offset.
      settings - settings to configure this breaker
      parent - parent circuit breaker service to delegate tripped breakers to
      name - the name of the breaker
  • Method Details

    • circuitBreak

      public void circuitBreak(String fieldName, long bytesNeeded)
      Method used to trip the breaker, delegates to the parent to determine whether to trip the breaker or not
      Specified by:
      circuitBreak in interface CircuitBreaker
      fieldName - name of the field responsible for tripping the breaker
      bytesNeeded - bytes asked for but unable to be allocated
    • addEstimateBytesAndMaybeBreak

      public void addEstimateBytesAndMaybeBreak(long bytes, String label) throws CircuitBreakingException
      Add a number of bytes, tripping the circuit breaker if the aggregated estimates are above the limit. Automatically trips the breaker if the memory limit is set to 0. Will never trip the breaker if the limit is set to -1, but can still be used to aggregate estimations.
      Specified by:
      addEstimateBytesAndMaybeBreak in interface CircuitBreaker
      bytes - number of bytes to add to the breaker
      label - thing requesting the bytes being added that is included in the exception if the breaker is tripped
    • addWithoutBreaking

      public void addWithoutBreaking(long bytes)
      Add an exact number of bytes, not checking for tripping the circuit breaker. This bypasses the overheadConstant multiplication. Also does not check with the parent breaker to see if the parent limit has been exceeded.
      Specified by:
      addWithoutBreaking in interface CircuitBreaker
      bytes - number of bytes to add to the breaker
    • getUsed

      public long getUsed()
      Specified by:
      getUsed in interface CircuitBreaker
      the number of aggregated "used" bytes so far
    • getLimit

      public long getLimit()
      Specified by:
      getLimit in interface CircuitBreaker
      the number of bytes that can be added before the breaker trips
    • getOverhead

      public double getOverhead()
      Specified by:
      getOverhead in interface CircuitBreaker
      the constant multiplier the breaker uses for aggregations
    • getTrippedCount

      public long getTrippedCount()
      Specified by:
      getTrippedCount in interface CircuitBreaker
      the number of times the breaker has been tripped
    • getName

      public String getName()
      Specified by:
      getName in interface CircuitBreaker
      the name of the breaker
    • getDurability

      public CircuitBreaker.Durability getDurability()
      Specified by:
      getDurability in interface CircuitBreaker
      whether a tripped circuit breaker will reset itself (transient) or requires manual intervention (permanent).
    • setLimitAndOverhead

      public void setLimitAndOverhead(long limit, double overhead)
      Description copied from interface: CircuitBreaker
      sets the new limit and overhead values for the circuit breaker. The resulting write should be readable by other threads.
      Specified by:
      setLimitAndOverhead in interface CircuitBreaker
      limit - the desired limit
      overhead - the desired overhead constant