final class org.apache.camel.util.backoff.BackOffTimerTask extends java.lang.Object implements org.apache.camel.util.backoff.BackOffTimer$Task, java.lang.Runnable
{
private final org.apache.camel.util.backoff.BackOff backOff;
private final java.util.concurrent.ScheduledExecutorService scheduler;
private final org.apache.camel.util.function.ThrowingFunction function;
private final java.util.concurrent.atomic.AtomicReference futureRef;
private final java.util.List consumers;
private org.apache.camel.util.backoff.BackOffTimer$Task$Status status;
private long currentAttempts;
private long currentDelay;
private long currentElapsedTime;
private long lastAttemptTime;
private long nextAttemptTime;
void <init>(org.apache.camel.util.backoff.BackOff, java.util.concurrent.ScheduledExecutorService, org.apache.camel.util.function.ThrowingFunction)
{
org.apache.camel.util.backoff.BackOff v;
org.apache.camel.util.function.ThrowingFunction v;
long v;
java.util.concurrent.atomic.AtomicReference v;
java.util.ArrayList v;
java.time.Duration v;
java.util.concurrent.ScheduledExecutorService v;
org.apache.camel.util.backoff.BackOffTimerTask v;
org.apache.camel.util.backoff.BackOffTimer$Task$Status v;
v := @this: org.apache.camel.util.backoff.BackOffTimerTask;
v := @parameter: org.apache.camel.util.backoff.BackOff;
v := @parameter: java.util.concurrent.ScheduledExecutorService;
v := @parameter: org.apache.camel.util.function.ThrowingFunction;
specialinvoke v.<java.lang.Object: void <init>()>();
v.<org.apache.camel.util.backoff.BackOffTimerTask: org.apache.camel.util.backoff.BackOff backOff> = v;
v.<org.apache.camel.util.backoff.BackOffTimerTask: java.util.concurrent.ScheduledExecutorService scheduler> = v;
v = <org.apache.camel.util.backoff.BackOffTimer$Task$Status: org.apache.camel.util.backoff.BackOffTimer$Task$Status Active>;
v.<org.apache.camel.util.backoff.BackOffTimerTask: org.apache.camel.util.backoff.BackOffTimer$Task$Status status> = v;
v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentAttempts> = 0L;
v = virtualinvoke v.<org.apache.camel.util.backoff.BackOff: java.time.Duration getDelay()>();
v = virtualinvoke v.<java.time.Duration: long toMillis()>();
v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentDelay> = v;
v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentElapsedTime> = 0L;
v.<org.apache.camel.util.backoff.BackOffTimerTask: long lastAttemptTime> = -1L;
v.<org.apache.camel.util.backoff.BackOffTimerTask: long nextAttemptTime> = -1L;
v.<org.apache.camel.util.backoff.BackOffTimerTask: org.apache.camel.util.function.ThrowingFunction function> = v;
v = new java.util.ArrayList;
specialinvoke v.<java.util.ArrayList: void <init>()>();
v.<org.apache.camel.util.backoff.BackOffTimerTask: java.util.List consumers> = v;
v = new java.util.concurrent.atomic.AtomicReference;
specialinvoke v.<java.util.concurrent.atomic.AtomicReference: void <init>()>();
v.<org.apache.camel.util.backoff.BackOffTimerTask: java.util.concurrent.atomic.AtomicReference futureRef> = v;
return;
}
public org.apache.camel.util.backoff.BackOff getBackOff()
{
org.apache.camel.util.backoff.BackOff v;
org.apache.camel.util.backoff.BackOffTimerTask v;
v := @this: org.apache.camel.util.backoff.BackOffTimerTask;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: org.apache.camel.util.backoff.BackOff backOff>;
return v;
}
public org.apache.camel.util.backoff.BackOffTimer$Task$Status getStatus()
{
org.apache.camel.util.backoff.BackOffTimerTask v;
org.apache.camel.util.backoff.BackOffTimer$Task$Status v;
v := @this: org.apache.camel.util.backoff.BackOffTimerTask;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: org.apache.camel.util.backoff.BackOffTimer$Task$Status status>;
return v;
}
public long getCurrentAttempts()
{
org.apache.camel.util.backoff.BackOffTimerTask v;
long v;
v := @this: org.apache.camel.util.backoff.BackOffTimerTask;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentAttempts>;
return v;
}
public long getCurrentDelay()
{
org.apache.camel.util.backoff.BackOffTimerTask v;
long v;
v := @this: org.apache.camel.util.backoff.BackOffTimerTask;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentDelay>;
return v;
}
public long getCurrentElapsedTime()
{
org.apache.camel.util.backoff.BackOffTimerTask v;
long v;
v := @this: org.apache.camel.util.backoff.BackOffTimerTask;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentElapsedTime>;
return v;
}
public long getLastAttemptTime()
{
org.apache.camel.util.backoff.BackOffTimerTask v;
long v;
v := @this: org.apache.camel.util.backoff.BackOffTimerTask;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: long lastAttemptTime>;
return v;
}
public long getNextAttemptTime()
{
org.apache.camel.util.backoff.BackOffTimerTask v;
long v;
v := @this: org.apache.camel.util.backoff.BackOffTimerTask;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: long nextAttemptTime>;
return v;
}
public void reset()
{
org.apache.camel.util.backoff.BackOffTimerTask v;
org.apache.camel.util.backoff.BackOffTimer$Task$Status v;
v := @this: org.apache.camel.util.backoff.BackOffTimerTask;
v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentAttempts> = 0L;
v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentDelay> = 0L;
v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentElapsedTime> = 0L;
v.<org.apache.camel.util.backoff.BackOffTimerTask: long lastAttemptTime> = -1L;
v.<org.apache.camel.util.backoff.BackOffTimerTask: long nextAttemptTime> = -1L;
v = <org.apache.camel.util.backoff.BackOffTimer$Task$Status: org.apache.camel.util.backoff.BackOffTimer$Task$Status Active>;
v.<org.apache.camel.util.backoff.BackOffTimerTask: org.apache.camel.util.backoff.BackOffTimer$Task$Status status> = v;
return;
}
public void cancel()
{
org.apache.camel.util.backoff.BackOffTimerTask v;
java.lang.Object v;
java.util.concurrent.atomic.AtomicReference v;
v := @this: org.apache.camel.util.backoff.BackOffTimerTask;
virtualinvoke v.<org.apache.camel.util.backoff.BackOffTimerTask: void stop()>();
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: java.util.concurrent.atomic.AtomicReference futureRef>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicReference: java.lang.Object get()>();
if v == null goto label;
interfaceinvoke v.<java.util.concurrent.ScheduledFuture: boolean cancel(boolean)>(1);
label:
virtualinvoke v.<org.apache.camel.util.backoff.BackOffTimerTask: void complete(java.lang.Throwable)>(null);
return;
}
public void whenComplete(java.util.function.BiConsumer)
{
java.lang.Throwable v;
java.util.List v, v;
java.util.function.BiConsumer v;
org.apache.camel.util.backoff.BackOffTimerTask v;
v := @this: org.apache.camel.util.backoff.BackOffTimerTask;
v := @parameter: java.util.function.BiConsumer;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: java.util.List consumers>;
entermonitor v;
label:
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: java.util.List consumers>;
interfaceinvoke v.<java.util.List: boolean add(java.lang.Object)>(v);
exitmonitor v;
label:
goto label;
label:
v := @caughtexception;
exitmonitor v;
throw v;
label:
return;
catch java.lang.Throwable from label to label with label;
}
public void run()
{
java.util.concurrent.ScheduledFuture v;
org.apache.camel.util.function.ThrowingFunction v;
long v, v, v, v;
java.util.concurrent.atomic.AtomicReference v;
java.util.concurrent.ScheduledExecutorService v;
org.apache.camel.util.backoff.BackOffTimer$Task$Status v, v, v, v;
boolean v;
java.lang.Exception v;
java.util.concurrent.TimeUnit v;
org.apache.camel.util.backoff.BackOffTimerTask v;
java.lang.Object v;
v := @this: org.apache.camel.util.backoff.BackOffTimerTask;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: org.apache.camel.util.backoff.BackOffTimer$Task$Status status>;
v = <org.apache.camel.util.backoff.BackOffTimer$Task$Status: org.apache.camel.util.backoff.BackOffTimer$Task$Status Active>;
if v != v goto label;
label:
v = staticinvoke <java.lang.System: long currentTimeMillis()>();
v.<org.apache.camel.util.backoff.BackOffTimerTask: long lastAttemptTime> = v;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: org.apache.camel.util.function.ThrowingFunction function>;
v = interfaceinvoke v.<org.apache.camel.util.function.ThrowingFunction: java.lang.Object apply(java.lang.Object)>(v);
v = virtualinvoke v.<java.lang.Boolean: boolean booleanValue()>();
if v == 0 goto label;
v = virtualinvoke v.<org.apache.camel.util.backoff.BackOffTimerTask: long next()>();
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: org.apache.camel.util.backoff.BackOffTimer$Task$Status status>;
v = <org.apache.camel.util.backoff.BackOffTimer$Task$Status: org.apache.camel.util.backoff.BackOffTimer$Task$Status Active>;
if v == v goto label;
virtualinvoke v.<org.apache.camel.util.backoff.BackOffTimerTask: void complete(java.lang.Throwable)>(null);
goto label;
label:
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: long lastAttemptTime>;
v = v + v;
v.<org.apache.camel.util.backoff.BackOffTimerTask: long nextAttemptTime> = v;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: java.util.concurrent.atomic.AtomicReference futureRef>;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: java.util.concurrent.ScheduledExecutorService scheduler>;
v = <java.util.concurrent.TimeUnit: java.util.concurrent.TimeUnit MILLISECONDS>;
v = interfaceinvoke v.<java.util.concurrent.ScheduledExecutorService: java.util.concurrent.ScheduledFuture schedule(java.lang.Runnable,long,java.util.concurrent.TimeUnit)>(v, v, v);
virtualinvoke v.<java.util.concurrent.atomic.AtomicReference: void lazySet(java.lang.Object)>(v);
goto label;
label:
virtualinvoke v.<org.apache.camel.util.backoff.BackOffTimerTask: void stop()>();
virtualinvoke v.<org.apache.camel.util.backoff.BackOffTimerTask: void complete(java.lang.Throwable)>(null);
label:
goto label;
label:
v := @caughtexception;
virtualinvoke v.<org.apache.camel.util.backoff.BackOffTimerTask: void stop()>();
virtualinvoke v.<org.apache.camel.util.backoff.BackOffTimerTask: void complete(java.lang.Throwable)>(v);
label:
return;
catch java.lang.Exception from label to label with label;
}
void stop()
{
org.apache.camel.util.backoff.BackOffTimerTask v;
org.apache.camel.util.backoff.BackOffTimer$Task$Status v;
v := @this: org.apache.camel.util.backoff.BackOffTimerTask;
v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentAttempts> = 0L;
v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentDelay> = -1L;
v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentElapsedTime> = 0L;
v.<org.apache.camel.util.backoff.BackOffTimerTask: long lastAttemptTime> = -1L;
v.<org.apache.camel.util.backoff.BackOffTimerTask: long nextAttemptTime> = -1L;
v = <org.apache.camel.util.backoff.BackOffTimer$Task$Status: org.apache.camel.util.backoff.BackOffTimer$Task$Status Inactive>;
v.<org.apache.camel.util.backoff.BackOffTimerTask: org.apache.camel.util.backoff.BackOffTimer$Task$Status status> = v;
return;
}
void complete(java.lang.Throwable)
{
java.lang.Throwable v, v;
java.util.function.Consumer v;
java.util.List v, v;
org.apache.camel.util.backoff.BackOffTimerTask v;
v := @this: org.apache.camel.util.backoff.BackOffTimerTask;
v := @parameter: java.lang.Throwable;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: java.util.List consumers>;
entermonitor v;
label:
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: java.util.List consumers>;
v = staticinvoke <org.apache.camel.util.backoff.BackOffTimerTask$lambda_complete_0__547: java.util.function.Consumer bootstrap$(org.apache.camel.util.backoff.BackOffTimerTask,java.lang.Throwable)>(v, v);
interfaceinvoke v.<java.util.List: void forEach(java.util.function.Consumer)>(v);
exitmonitor v;
label:
goto label;
label:
v := @caughtexception;
exitmonitor v;
throw v;
label:
return;
catch java.lang.Throwable from label to label with label;
}
long next()
{
java.lang.Double v;
long v, v, v, v, v, v, v, v, v, v, v, v, v;
byte v, v, v;
java.lang.Long v;
java.time.Duration v, v;
org.apache.camel.util.backoff.BackOffTimer$Task$Status v, v, v, v;
double v, v;
org.apache.camel.util.backoff.BackOff v, v, v, v;
org.apache.camel.util.backoff.BackOffTimerTask v;
v := @this: org.apache.camel.util.backoff.BackOffTimerTask;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: org.apache.camel.util.backoff.BackOffTimer$Task$Status status>;
v = <org.apache.camel.util.backoff.BackOffTimer$Task$Status: org.apache.camel.util.backoff.BackOffTimer$Task$Status Active>;
if v != v goto label;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentAttempts>;
v = v + 1L;
v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentAttempts> = v;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentAttempts>;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: org.apache.camel.util.backoff.BackOff backOff>;
v = virtualinvoke v.<org.apache.camel.util.backoff.BackOff: java.lang.Long getMaxAttempts()>();
v = virtualinvoke v.<java.lang.Long: long longValue()>();
v = v cmp v;
if v <= 0 goto label;
v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentDelay> = -1L;
v = <org.apache.camel.util.backoff.BackOffTimer$Task$Status: org.apache.camel.util.backoff.BackOffTimer$Task$Status Exhausted>;
v.<org.apache.camel.util.backoff.BackOffTimerTask: org.apache.camel.util.backoff.BackOffTimer$Task$Status status> = v;
goto label;
label:
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentElapsedTime>;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: org.apache.camel.util.backoff.BackOff backOff>;
v = virtualinvoke v.<org.apache.camel.util.backoff.BackOff: java.time.Duration getMaxElapsedTime()>();
v = virtualinvoke v.<java.time.Duration: long toMillis()>();
v = v cmp v;
if v <= 0 goto label;
v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentDelay> = -1L;
v = <org.apache.camel.util.backoff.BackOffTimer$Task$Status: org.apache.camel.util.backoff.BackOffTimer$Task$Status Exhausted>;
v.<org.apache.camel.util.backoff.BackOffTimerTask: org.apache.camel.util.backoff.BackOffTimer$Task$Status status> = v;
goto label;
label:
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentDelay>;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: org.apache.camel.util.backoff.BackOff backOff>;
v = virtualinvoke v.<org.apache.camel.util.backoff.BackOff: java.time.Duration getMaxDelay()>();
v = virtualinvoke v.<java.time.Duration: long toMillis()>();
v = v cmp v;
if v > 0 goto label;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentDelay>;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: org.apache.camel.util.backoff.BackOff backOff>;
v = virtualinvoke v.<org.apache.camel.util.backoff.BackOff: java.lang.Double getMultiplier()>();
v = virtualinvoke v.<java.lang.Double: double doubleValue()>();
v = v * v;
v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentDelay> = v;
label:
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentElapsedTime>;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentDelay>;
v = v + v;
v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentElapsedTime> = v;
label:
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentDelay>;
return v;
}
public java.lang.String toString()
{
long v, v, v, v, v;
org.apache.camel.util.backoff.BackOffTimerTask v;
org.apache.camel.util.backoff.BackOffTimer$Task$Status v;
java.lang.String v;
v := @this: org.apache.camel.util.backoff.BackOffTimerTask;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: org.apache.camel.util.backoff.BackOffTimer$Task$Status status>;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentAttempts>;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentDelay>;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: long currentElapsedTime>;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: long lastAttemptTime>;
v = v.<org.apache.camel.util.backoff.BackOffTimerTask: long nextAttemptTime>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (org.apache.camel.util.backoff.BackOffTimer$Task$Status,long,long,long,long,long)>(v, v, v, v, v, v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("BackOffTimerTask[status=\u, currentAttempts=\u, currentDelay=\u, currentElapsedTime=\u, lastAttemptTime=\u, nextAttemptTime=\u]");
return v;
}
}