public class com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl implements com.netflix.hystrix.HystrixCircuitBreaker
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl
  super_class: java.lang.Object
{
  private final com.netflix.hystrix.HystrixCommandProperties properties;
    descriptor: Lcom/netflix/hystrix/HystrixCommandProperties;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.netflix.hystrix.HystrixCommandMetrics metrics;
    descriptor: Lcom/netflix/hystrix/HystrixCommandMetrics;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private java.util.concurrent.atomic.AtomicBoolean circuitOpen;
    descriptor: Ljava/util/concurrent/atomic/AtomicBoolean;
    flags: (0x0002) ACC_PRIVATE

  private java.util.concurrent.atomic.AtomicLong circuitOpenedOrLastTestedTime;
    descriptor: Ljava/util/concurrent/atomic/AtomicLong;
    flags: (0x0002) ACC_PRIVATE

  protected void <init>(com.netflix.hystrix.HystrixCommandKey, com.netflix.hystrix.HystrixCommandGroupKey, com.netflix.hystrix.HystrixCommandProperties, com.netflix.hystrix.HystrixCommandMetrics);
    descriptor: (Lcom/netflix/hystrix/HystrixCommandKey;Lcom/netflix/hystrix/HystrixCommandGroupKey;Lcom/netflix/hystrix/HystrixCommandProperties;Lcom/netflix/hystrix/HystrixCommandMetrics;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=4, locals=5, args_size=5
        start local 0 // com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl this
        start local 1 // com.netflix.hystrix.HystrixCommandKey key
        start local 2 // com.netflix.hystrix.HystrixCommandGroupKey commandGroup
        start local 3 // com.netflix.hystrix.HystrixCommandProperties properties
        start local 4 // com.netflix.hystrix.HystrixCommandMetrics metrics
         0: .line 133
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 128
            aload 0 /* this */
            new java.util.concurrent.atomic.AtomicBoolean
            dup
            iconst_0
            invokespecial java.util.concurrent.atomic.AtomicBoolean.<init>:(Z)V
            putfield com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl.circuitOpen:Ljava/util/concurrent/atomic/AtomicBoolean;
         2: .line 131
            aload 0 /* this */
            new java.util.concurrent.atomic.AtomicLong
            dup
            invokespecial java.util.concurrent.atomic.AtomicLong.<init>:()V
            putfield com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl.circuitOpenedOrLastTestedTime:Ljava/util/concurrent/atomic/AtomicLong;
         3: .line 134
            aload 0 /* this */
            aload 3 /* properties */
            putfield com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl.properties:Lcom/netflix/hystrix/HystrixCommandProperties;
         4: .line 135
            aload 0 /* this */
            aload 4 /* metrics */
            putfield com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl.metrics:Lcom/netflix/hystrix/HystrixCommandMetrics;
         5: .line 136
            return
        end local 4 // com.netflix.hystrix.HystrixCommandMetrics metrics
        end local 3 // com.netflix.hystrix.HystrixCommandProperties properties
        end local 2 // com.netflix.hystrix.HystrixCommandGroupKey commandGroup
        end local 1 // com.netflix.hystrix.HystrixCommandKey key
        end local 0 // com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    6     0          this  Lcom/netflix/hystrix/HystrixCircuitBreaker$HystrixCircuitBreakerImpl;
            0    6     1           key  Lcom/netflix/hystrix/HystrixCommandKey;
            0    6     2  commandGroup  Lcom/netflix/hystrix/HystrixCommandGroupKey;
            0    6     3    properties  Lcom/netflix/hystrix/HystrixCommandProperties;
            0    6     4       metrics  Lcom/netflix/hystrix/HystrixCommandMetrics;
    MethodParameters:
              Name  Flags
      key           
      commandGroup  
      properties    
      metrics       

  public void markSuccess();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl this
         0: .line 139
            aload 0 /* this */
            getfield com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl.circuitOpen:Ljava/util/concurrent/atomic/AtomicBoolean;
            invokevirtual java.util.concurrent.atomic.AtomicBoolean.get:()Z
            ifeq 3
         1: .line 140
            aload 0 /* this */
            getfield com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl.circuitOpen:Ljava/util/concurrent/atomic/AtomicBoolean;
            iconst_1
            iconst_0
            invokevirtual java.util.concurrent.atomic.AtomicBoolean.compareAndSet:(ZZ)Z
            ifeq 3
         2: .line 144
            aload 0 /* this */
            getfield com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl.metrics:Lcom/netflix/hystrix/HystrixCommandMetrics;
            invokevirtual com.netflix.hystrix.HystrixCommandMetrics.resetStream:()V
         3: .line 147
      StackMap locals:
      StackMap stack:
            return
        end local 0 // com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lcom/netflix/hystrix/HystrixCircuitBreaker$HystrixCircuitBreakerImpl;

  public boolean allowRequest();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl this
         0: .line 151
            aload 0 /* this */
            getfield com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl.properties:Lcom/netflix/hystrix/HystrixCommandProperties;
            invokevirtual com.netflix.hystrix.HystrixCommandProperties.circuitBreakerForceOpen:()Lcom/netflix/hystrix/strategy/properties/HystrixProperty;
            invokeinterface com.netflix.hystrix.strategy.properties.HystrixProperty.get:()Ljava/lang/Object;
            checkcast java.lang.Boolean
            invokevirtual java.lang.Boolean.booleanValue:()Z
            ifeq 2
         1: .line 153
            iconst_0
            ireturn
         2: .line 155
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl.properties:Lcom/netflix/hystrix/HystrixCommandProperties;
            invokevirtual com.netflix.hystrix.HystrixCommandProperties.circuitBreakerForceClosed:()Lcom/netflix/hystrix/strategy/properties/HystrixProperty;
            invokeinterface com.netflix.hystrix.strategy.properties.HystrixProperty.get:()Ljava/lang/Object;
            checkcast java.lang.Boolean
            invokevirtual java.lang.Boolean.booleanValue:()Z
            ifeq 5
         3: .line 157
            aload 0 /* this */
            invokevirtual com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl.isOpen:()Z
            pop
         4: .line 159
            iconst_1
            ireturn
         5: .line 161
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl.isOpen:()Z
            ifeq 6
            aload 0 /* this */
            invokevirtual com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl.allowSingleTest:()Z
            ifne 6
            iconst_0
            ireturn
      StackMap locals:
      StackMap stack:
         6: iconst_1
            ireturn
        end local 0 // com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Lcom/netflix/hystrix/HystrixCircuitBreaker$HystrixCircuitBreakerImpl;

  public boolean allowSingleTest();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=3, args_size=1
        start local 0 // com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl this
         0: .line 165
            aload 0 /* this */
            getfield com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl.circuitOpenedOrLastTestedTime:Ljava/util/concurrent/atomic/AtomicLong;
            invokevirtual java.util.concurrent.atomic.AtomicLong.get:()J
            lstore 1 /* timeCircuitOpenedOrWasLastTested */
        start local 1 // long timeCircuitOpenedOrWasLastTested
         1: .line 168
            aload 0 /* this */
            getfield com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl.circuitOpen:Ljava/util/concurrent/atomic/AtomicBoolean;
            invokevirtual java.util.concurrent.atomic.AtomicBoolean.get:()Z
            ifeq 4
            invokestatic java.lang.System.currentTimeMillis:()J
            lload 1 /* timeCircuitOpenedOrWasLastTested */
            aload 0 /* this */
            getfield com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl.properties:Lcom/netflix/hystrix/HystrixCommandProperties;
            invokevirtual com.netflix.hystrix.HystrixCommandProperties.circuitBreakerSleepWindowInMilliseconds:()Lcom/netflix/hystrix/strategy/properties/HystrixProperty;
            invokeinterface com.netflix.hystrix.strategy.properties.HystrixProperty.get:()Ljava/lang/Object;
            checkcast java.lang.Integer
            invokevirtual java.lang.Integer.intValue:()I
            i2l
            ladd
            lcmp
            ifle 4
         2: .line 171
            aload 0 /* this */
            getfield com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl.circuitOpenedOrLastTestedTime:Ljava/util/concurrent/atomic/AtomicLong;
            lload 1 /* timeCircuitOpenedOrWasLastTested */
            invokestatic java.lang.System.currentTimeMillis:()J
            invokevirtual java.util.concurrent.atomic.AtomicLong.compareAndSet:(JJ)Z
            ifeq 4
         3: .line 174
            iconst_1
            ireturn
         4: .line 177
      StackMap locals: long
      StackMap stack:
            iconst_0
            ireturn
        end local 1 // long timeCircuitOpenedOrWasLastTested
        end local 0 // com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl this
      LocalVariableTable:
        Start  End  Slot                              Name  Signature
            0    5     0                              this  Lcom/netflix/hystrix/HystrixCircuitBreaker$HystrixCircuitBreakerImpl;
            1    5     1  timeCircuitOpenedOrWasLastTested  J

  public boolean isOpen();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=1
        start local 0 // com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl this
         0: .line 182
            aload 0 /* this */
            getfield com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl.circuitOpen:Ljava/util/concurrent/atomic/AtomicBoolean;
            invokevirtual java.util.concurrent.atomic.AtomicBoolean.get:()Z
            ifeq 2
         1: .line 184
            iconst_1
            ireturn
         2: .line 188
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl.metrics:Lcom/netflix/hystrix/HystrixCommandMetrics;
            invokevirtual com.netflix.hystrix.HystrixCommandMetrics.getHealthCounts:()Lcom/netflix/hystrix/HystrixCommandMetrics$HealthCounts;
            astore 1 /* health */
        start local 1 // com.netflix.hystrix.HystrixCommandMetrics$HealthCounts health
         3: .line 191
            aload 1 /* health */
            invokevirtual com.netflix.hystrix.HystrixCommandMetrics$HealthCounts.getTotalRequests:()J
            aload 0 /* this */
            getfield com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl.properties:Lcom/netflix/hystrix/HystrixCommandProperties;
            invokevirtual com.netflix.hystrix.HystrixCommandProperties.circuitBreakerRequestVolumeThreshold:()Lcom/netflix/hystrix/strategy/properties/HystrixProperty;
            invokeinterface com.netflix.hystrix.strategy.properties.HystrixProperty.get:()Ljava/lang/Object;
            checkcast java.lang.Integer
            invokevirtual java.lang.Integer.intValue:()I
            i2l
            lcmp
            ifge 5
         4: .line 193
            iconst_0
            ireturn
         5: .line 196
      StackMap locals: com.netflix.hystrix.HystrixCommandMetrics$HealthCounts
      StackMap stack:
            aload 1 /* health */
            invokevirtual com.netflix.hystrix.HystrixCommandMetrics$HealthCounts.getErrorPercentage:()I
            aload 0 /* this */
            getfield com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl.properties:Lcom/netflix/hystrix/HystrixCommandProperties;
            invokevirtual com.netflix.hystrix.HystrixCommandProperties.circuitBreakerErrorThresholdPercentage:()Lcom/netflix/hystrix/strategy/properties/HystrixProperty;
            invokeinterface com.netflix.hystrix.strategy.properties.HystrixProperty.get:()Ljava/lang/Object;
            checkcast java.lang.Integer
            invokevirtual java.lang.Integer.intValue:()I
            if_icmpge 7
         6: .line 197
            iconst_0
            ireturn
         7: .line 200
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl.circuitOpen:Ljava/util/concurrent/atomic/AtomicBoolean;
            iconst_0
            iconst_1
            invokevirtual java.util.concurrent.atomic.AtomicBoolean.compareAndSet:(ZZ)Z
            ifeq 10
         8: .line 202
            aload 0 /* this */
            getfield com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl.circuitOpenedOrLastTestedTime:Ljava/util/concurrent/atomic/AtomicLong;
            invokestatic java.lang.System.currentTimeMillis:()J
            invokevirtual java.util.concurrent.atomic.AtomicLong.set:(J)V
         9: .line 203
            iconst_1
            ireturn
        10: .line 208
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
        end local 1 // com.netflix.hystrix.HystrixCommandMetrics$HealthCounts health
        end local 0 // com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   11     0    this  Lcom/netflix/hystrix/HystrixCircuitBreaker$HystrixCircuitBreakerImpl;
            3   11     1  health  Lcom/netflix/hystrix/HystrixCommandMetrics$HealthCounts;
}
SourceFile: "HystrixCircuitBreaker.java"
NestHost: com.netflix.hystrix.HystrixCircuitBreaker
InnerClasses:
  public HystrixCircuitBreakerImpl = com.netflix.hystrix.HystrixCircuitBreaker$HystrixCircuitBreakerImpl of com.netflix.hystrix.HystrixCircuitBreaker
  public HealthCounts = com.netflix.hystrix.HystrixCommandMetrics$HealthCounts of com.netflix.hystrix.HystrixCommandMetrics