public class org.apache.hc.client.http.impl.classic.AIMDBackoffManager extends java.lang.Object implements org.apache.hc.client.http.classic.BackoffManager
{
private final org.apache.hc.core.pool.ConnPoolControl connPerRoute;
private final org.apache.hc.client.http.impl.classic.Clock clock;
private final java.util.Map lastRouteProbes;
private final java.util.Map lastRouteBackoffs;
private org.apache.hc.core.util.TimeValue coolDown;
private double backoffFactor;
private int cap;
public void <init>(org.apache.hc.core.pool.ConnPoolControl)
{
org.apache.hc.client.http.impl.classic.AIMDBackoffManager v;
org.apache.hc.client.http.impl.classic.SystemClock v;
org.apache.hc.core.pool.ConnPoolControl v;
v := @this: org.apache.hc.client.http.impl.classic.AIMDBackoffManager;
v := @parameter: org.apache.hc.core.pool.ConnPoolControl;
v = new org.apache.hc.client.http.impl.classic.SystemClock;
specialinvoke v.<org.apache.hc.client.http.impl.classic.SystemClock: void <init>()>();
specialinvoke v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: void <init>(org.apache.hc.core.pool.ConnPoolControl,org.apache.hc.client.http.impl.classic.Clock)>(v, v);
return;
}
void <init>(org.apache.hc.core.pool.ConnPoolControl, org.apache.hc.client.http.impl.classic.Clock)
{
org.apache.hc.core.util.TimeValue v;
org.apache.hc.client.http.impl.classic.AIMDBackoffManager v;
org.apache.hc.core.pool.ConnPoolControl v;
org.apache.hc.client.http.impl.classic.Clock v;
java.util.HashMap v, v;
v := @this: org.apache.hc.client.http.impl.classic.AIMDBackoffManager;
v := @parameter: org.apache.hc.core.pool.ConnPoolControl;
v := @parameter: org.apache.hc.client.http.impl.classic.Clock;
specialinvoke v.<java.lang.Object: void <init>()>();
v = staticinvoke <org.apache.hc.core.util.TimeValue: org.apache.hc.core.util.TimeValue ofSeconds(long)>(5L);
v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: org.apache.hc.core.util.TimeValue coolDown> = v;
v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: double backoffFactor> = 0.5;
v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: int cap> = 2;
v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: org.apache.hc.client.http.impl.classic.Clock clock> = v;
v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: org.apache.hc.core.pool.ConnPoolControl connPerRoute> = v;
v = new java.util.HashMap;
specialinvoke v.<java.util.HashMap: void <init>()>();
v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: java.util.Map lastRouteProbes> = v;
v = new java.util.HashMap;
specialinvoke v.<java.util.HashMap: void <init>()>();
v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: java.util.Map lastRouteBackoffs> = v;
return;
}
public void backOff(org.apache.hc.client.http.HttpRoute)
{
java.lang.Throwable v;
long v, v, v, v;
byte v;
java.lang.Long v, v;
java.util.Map v, v;
int v, v;
org.apache.hc.core.util.TimeValue v;
org.apache.hc.client.http.impl.classic.AIMDBackoffManager v;
org.apache.hc.core.pool.ConnPoolControl v, v, v;
org.apache.hc.client.http.impl.classic.Clock v;
org.apache.hc.client.http.HttpRoute v;
v := @this: org.apache.hc.client.http.impl.classic.AIMDBackoffManager;
v := @parameter: org.apache.hc.client.http.HttpRoute;
v = v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: org.apache.hc.core.pool.ConnPoolControl connPerRoute>;
entermonitor v;
label:
v = v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: org.apache.hc.core.pool.ConnPoolControl connPerRoute>;
v = interfaceinvoke v.<org.apache.hc.core.pool.ConnPoolControl: int getMaxPerRoute(java.lang.Object)>(v);
v = v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: java.util.Map lastRouteBackoffs>;
v = specialinvoke v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: java.lang.Long getLastUpdate(java.util.Map,org.apache.hc.client.http.HttpRoute)>(v, v);
v = v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: org.apache.hc.client.http.impl.classic.Clock clock>;
v = interfaceinvoke v.<org.apache.hc.client.http.impl.classic.Clock: long getCurrentTime()>();
v = virtualinvoke v.<java.lang.Long: long longValue()>();
v = v - v;
v = v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: org.apache.hc.core.util.TimeValue coolDown>;
v = virtualinvoke v.<org.apache.hc.core.util.TimeValue: long toMilliseconds()>();
v = v cmp v;
if v >= 0 goto label;
exitmonitor v;
label:
return;
label:
v = v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: org.apache.hc.core.pool.ConnPoolControl connPerRoute>;
v = specialinvoke v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: int getBackedOffPoolSize(int)>(v);
interfaceinvoke v.<org.apache.hc.core.pool.ConnPoolControl: void setMaxPerRoute(java.lang.Object,int)>(v, v);
v = v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: java.util.Map lastRouteBackoffs>;
v = staticinvoke <java.lang.Long: java.lang.Long valueOf(long)>(v);
interfaceinvoke v.<java.util.Map: java.lang.Object put(java.lang.Object,java.lang.Object)>(v, 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;
catch java.lang.Throwable from label to label with label;
}
private int getBackedOffPoolSize(int)
{
org.apache.hc.client.http.impl.classic.AIMDBackoffManager v;
int v;
double v, v, v;
v := @this: org.apache.hc.client.http.impl.classic.AIMDBackoffManager;
v := @parameter: int;
if v > 1 goto label;
return 1;
label:
v = v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: double backoffFactor>;
v = v * v;
v = staticinvoke <java.lang.Math: double floor(double)>(v);
return v;
}
public void probe(org.apache.hc.client.http.HttpRoute)
{
java.lang.Throwable v;
long v, v, v, v, v, v, v;
byte v, v;
java.lang.Long v, v, v;
java.util.Map v, v, v;
int v, v, v;
org.apache.hc.core.util.TimeValue v, v;
org.apache.hc.client.http.impl.classic.AIMDBackoffManager v;
org.apache.hc.core.pool.ConnPoolControl v, v, v;
org.apache.hc.client.http.impl.classic.Clock v;
org.apache.hc.client.http.HttpRoute v;
v := @this: org.apache.hc.client.http.impl.classic.AIMDBackoffManager;
v := @parameter: org.apache.hc.client.http.HttpRoute;
v = v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: org.apache.hc.core.pool.ConnPoolControl connPerRoute>;
entermonitor v;
label:
v = v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: org.apache.hc.core.pool.ConnPoolControl connPerRoute>;
v = interfaceinvoke v.<org.apache.hc.core.pool.ConnPoolControl: int getMaxPerRoute(java.lang.Object)>(v);
v = v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: int cap>;
if v < v goto label;
v = v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: int cap>;
goto label;
label:
v = v + 1;
label:
v = v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: java.util.Map lastRouteProbes>;
v = specialinvoke v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: java.lang.Long getLastUpdate(java.util.Map,org.apache.hc.client.http.HttpRoute)>(v, v);
v = v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: java.util.Map lastRouteBackoffs>;
v = specialinvoke v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: java.lang.Long getLastUpdate(java.util.Map,org.apache.hc.client.http.HttpRoute)>(v, v);
v = v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: org.apache.hc.client.http.impl.classic.Clock clock>;
v = interfaceinvoke v.<org.apache.hc.client.http.impl.classic.Clock: long getCurrentTime()>();
v = virtualinvoke v.<java.lang.Long: long longValue()>();
v = v - v;
v = v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: org.apache.hc.core.util.TimeValue coolDown>;
v = virtualinvoke v.<org.apache.hc.core.util.TimeValue: long toMilliseconds()>();
v = v cmp v;
if v < 0 goto label;
v = virtualinvoke v.<java.lang.Long: long longValue()>();
v = v - v;
v = v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: org.apache.hc.core.util.TimeValue coolDown>;
v = virtualinvoke v.<org.apache.hc.core.util.TimeValue: long toMilliseconds()>();
v = v cmp v;
if v >= 0 goto label;
label:
exitmonitor v;
label:
return;
label:
v = v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: org.apache.hc.core.pool.ConnPoolControl connPerRoute>;
interfaceinvoke v.<org.apache.hc.core.pool.ConnPoolControl: void setMaxPerRoute(java.lang.Object,int)>(v, v);
v = v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: java.util.Map lastRouteProbes>;
v = staticinvoke <java.lang.Long: java.lang.Long valueOf(long)>(v);
interfaceinvoke v.<java.util.Map: java.lang.Object put(java.lang.Object,java.lang.Object)>(v, 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;
catch java.lang.Throwable from label to label with label;
}
private java.lang.Long getLastUpdate(java.util.Map, org.apache.hc.client.http.HttpRoute)
{
org.apache.hc.client.http.HttpRoute v;
org.apache.hc.client.http.impl.classic.AIMDBackoffManager v;
java.util.Map v;
java.lang.Object v;
v := @this: org.apache.hc.client.http.impl.classic.AIMDBackoffManager;
v := @parameter: java.util.Map;
v := @parameter: org.apache.hc.client.http.HttpRoute;
v = interfaceinvoke v.<java.util.Map: java.lang.Object get(java.lang.Object)>(v);
if v != null goto label;
v = staticinvoke <java.lang.Long: java.lang.Long valueOf(long)>(0L);
label:
return v;
}
public void setBackoffFactor(double)
{
org.apache.hc.client.http.impl.classic.AIMDBackoffManager v;
byte v, v;
boolean v;
double v;
v := @this: org.apache.hc.client.http.impl.classic.AIMDBackoffManager;
v := @parameter: double;
v = v cmpl 0.0;
if v <= 0 goto label;
v = v cmpg 1.0;
if v >= 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
staticinvoke <org.apache.hc.core.util.Args: void check(boolean,java.lang.String)>(v, "Backoff factor must be 0.0 < f < 1.0");
v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: double backoffFactor> = v;
return;
}
public void setCoolDown(org.apache.hc.core.util.TimeValue)
{
long v;
org.apache.hc.core.util.TimeValue v;
org.apache.hc.client.http.impl.classic.AIMDBackoffManager v;
v := @this: org.apache.hc.client.http.impl.classic.AIMDBackoffManager;
v := @parameter: org.apache.hc.core.util.TimeValue;
v = virtualinvoke v.<org.apache.hc.core.util.TimeValue: long getDuration()>();
staticinvoke <org.apache.hc.core.util.Args: long positive(long,java.lang.String)>(v, "coolDown");
v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: org.apache.hc.core.util.TimeValue coolDown> = v;
return;
}
public void setPerHostConnectionCap(int)
{
int v;
org.apache.hc.client.http.impl.classic.AIMDBackoffManager v;
v := @this: org.apache.hc.client.http.impl.classic.AIMDBackoffManager;
v := @parameter: int;
staticinvoke <org.apache.hc.core.util.Args: int positive(int,java.lang.String)>(v, "Per host connection cap");
v.<org.apache.hc.client.http.impl.classic.AIMDBackoffManager: int cap> = v;
return;
}
}