public class oadd.org.apache.drill.exec.memory.Accountant extends java.lang.Object implements java.lang.AutoCloseable
{
private static final org.slf4j.Logger logger;
public static final java.lang.String ALLOW_LENIENT_ALLOCATION;
public static final int GRACE_MARGIN;
public static final int MAX_GRACE;
public static final boolean ALLOW_LENIENCY;
private boolean lenient;
protected final oadd.org.apache.drill.exec.memory.Accountant parent;
protected final long reservation;
private final java.util.concurrent.atomic.AtomicLong peakAllocation;
private final java.util.concurrent.atomic.AtomicLong allocationLimit;
private final java.util.concurrent.atomic.AtomicLong locallyHeldMemory;
public void <init>(oadd.org.apache.drill.exec.memory.Accountant, long, long)
{
java.lang.Object[] v;
long v, v;
byte v, v, v, v, v;
java.lang.Long v;
java.lang.String v, v;
boolean v, v, v, v, v;
java.util.concurrent.atomic.AtomicLong v, v, v, v;
oadd.org.apache.drill.exec.memory.Accountant v, v;
oadd.org.apache.drill.exec.exception.OutOfMemoryException v;
oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome v;
v := @this: oadd.org.apache.drill.exec.memory.Accountant;
v := @parameter: oadd.org.apache.drill.exec.memory.Accountant;
v := @parameter: long;
v := @parameter: long;
specialinvoke v.<java.lang.Object: void <init>()>();
v.<oadd.org.apache.drill.exec.memory.Accountant: boolean lenient> = 0;
v = new java.util.concurrent.atomic.AtomicLong;
specialinvoke v.<java.util.concurrent.atomic.AtomicLong: void <init>()>();
v.<oadd.org.apache.drill.exec.memory.Accountant: java.util.concurrent.atomic.AtomicLong peakAllocation> = v;
v = new java.util.concurrent.atomic.AtomicLong;
specialinvoke v.<java.util.concurrent.atomic.AtomicLong: void <init>()>();
v.<oadd.org.apache.drill.exec.memory.Accountant: java.util.concurrent.atomic.AtomicLong allocationLimit> = v;
v = new java.util.concurrent.atomic.AtomicLong;
specialinvoke v.<java.util.concurrent.atomic.AtomicLong: void <init>()>();
v.<oadd.org.apache.drill.exec.memory.Accountant: java.util.concurrent.atomic.AtomicLong locallyHeldMemory> = v;
v = v cmp 0L;
if v < 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
staticinvoke <org.apache.drill.shaded.guava.com.google.common.base.Preconditions: void checkArgument(boolean,java.lang.Object)>(v, "The initial reservation size must be non-negative.");
v = v cmp 0L;
if v < 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
staticinvoke <org.apache.drill.shaded.guava.com.google.common.base.Preconditions: void checkArgument(boolean,java.lang.Object)>(v, "The maximum allocation limit must be non-negative.");
v = v cmp v;
if v > 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
staticinvoke <org.apache.drill.shaded.guava.com.google.common.base.Preconditions: void checkArgument(boolean,java.lang.Object)>(v, "The initial reservation size must be <= the maximum allocation.");
v = v cmp 0L;
if v == 0 goto label;
if v == null goto label;
label:
v = 1;
goto label;
label:
v = 0;
label:
staticinvoke <org.apache.drill.shaded.guava.com.google.common.base.Preconditions: void checkArgument(boolean,java.lang.Object)>(v, "The root accountant can\'t reserve memory.");
v.<oadd.org.apache.drill.exec.memory.Accountant: oadd.org.apache.drill.exec.memory.Accountant parent> = v;
v.<oadd.org.apache.drill.exec.memory.Accountant: long reservation> = v;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: java.util.concurrent.atomic.AtomicLong allocationLimit>;
virtualinvoke v.<java.util.concurrent.atomic.AtomicLong: void set(long)>(v);
v = v cmp 0L;
if v == 0 goto label;
v = virtualinvoke v.<oadd.org.apache.drill.exec.memory.Accountant: oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome allocateBytes(long)>(v);
v = virtualinvoke v.<oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome: boolean isOk()>();
if v != 0 goto label;
v = new oadd.org.apache.drill.exec.exception.OutOfMemoryException;
v = newarray (java.lang.Object)[2];
v = staticinvoke <java.lang.Long: java.lang.Long valueOf(long)>(v);
v[0] = v;
v = virtualinvoke v.<oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome: java.lang.String name()>();
v[1] = v;
v = staticinvoke <java.lang.String: java.lang.String format(java.lang.String,java.lang.Object[])>("Failure trying to allocate initial reservation for Allocator. Attempted to allocate %d bytes and received an outcome of %s.", v);
specialinvoke v.<oadd.org.apache.drill.exec.exception.OutOfMemoryException: void <init>(java.lang.String)>(v);
throw v;
label:
return;
}
public boolean setLenient()
{
oadd.org.apache.drill.exec.memory.Accountant v;
boolean v, v;
v := @this: oadd.org.apache.drill.exec.memory.Accountant;
v = <oadd.org.apache.drill.exec.memory.Accountant: boolean ALLOW_LENIENCY>;
v.<oadd.org.apache.drill.exec.memory.Accountant: boolean lenient> = v;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: boolean lenient>;
return v;
}
public void forceLenient()
{
oadd.org.apache.drill.exec.memory.Accountant v;
v := @this: oadd.org.apache.drill.exec.memory.Accountant;
v.<oadd.org.apache.drill.exec.memory.Accountant: boolean lenient> = 1;
return;
}
oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome allocateBytes(long)
{
oadd.org.apache.drill.exec.memory.Accountant v;
oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome v;
long v;
boolean v;
v := @this: oadd.org.apache.drill.exec.memory.Accountant;
v := @parameter: long;
v = specialinvoke v.<oadd.org.apache.drill.exec.memory.Accountant: oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome allocate(long,boolean,boolean)>(v, 1, 0);
v = virtualinvoke v.<oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome: boolean isOk()>();
if v != 0 goto label;
virtualinvoke v.<oadd.org.apache.drill.exec.memory.Accountant: void releaseBytes(long)>(v);
label:
return v;
}
private void updatePeak()
{
long v, v;
java.util.concurrent.atomic.AtomicLong v, v, v;
oadd.org.apache.drill.exec.memory.Accountant v;
byte v;
boolean v;
v := @this: oadd.org.apache.drill.exec.memory.Accountant;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: java.util.concurrent.atomic.AtomicLong locallyHeldMemory>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicLong: long get()>();
label:
v = v.<oadd.org.apache.drill.exec.memory.Accountant: java.util.concurrent.atomic.AtomicLong peakAllocation>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicLong: long get()>();
v = v cmp v;
if v <= 0 goto label;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: java.util.concurrent.atomic.AtomicLong peakAllocation>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicLong: boolean compareAndSet(long,long)>(v, v);
if v == 0 goto label;
label:
return;
}
boolean forceAllocate(long)
{
oadd.org.apache.drill.exec.memory.Accountant v;
oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome v;
long v;
boolean v;
v := @this: oadd.org.apache.drill.exec.memory.Accountant;
v := @parameter: long;
v = specialinvoke v.<oadd.org.apache.drill.exec.memory.Accountant: oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome allocate(long,boolean,boolean)>(v, 1, 1);
v = virtualinvoke v.<oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome: boolean isOk()>();
return v;
}
private oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome allocate(long, boolean, boolean)
{
byte v, v, v;
java.lang.Long v, v, v, v;
boolean v, v, v, v, v, v, v, v, v;
oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome v, v, v;
java.lang.Object[] v;
long v, v, v, v, v, v, v, v, v, v, v, v;
org.slf4j.Logger v;
java.util.concurrent.atomic.AtomicLong v, v, v, v, v;
oadd.org.apache.drill.exec.memory.Accountant v, v, v;
v := @this: oadd.org.apache.drill.exec.memory.Accountant;
v := @parameter: long;
v := @parameter: boolean;
v := @parameter: boolean;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: java.util.concurrent.atomic.AtomicLong locallyHeldMemory>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicLong: long addAndGet(long)>(v);
v = v.<oadd.org.apache.drill.exec.memory.Accountant: long reservation>;
v = v - v;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: java.util.concurrent.atomic.AtomicLong allocationLimit>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicLong: long get()>();
v = v cmp v;
if v <= 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
v = v;
if v == 0 goto label;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: boolean lenient>;
if v == 0 goto label;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: java.util.concurrent.atomic.AtomicLong allocationLimit>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicLong: long get()>();
v = v * 1L;
v = staticinvoke <java.lang.Math: long min(long,long)>(104857600L, v);
v = v.<oadd.org.apache.drill.exec.memory.Accountant: java.util.concurrent.atomic.AtomicLong allocationLimit>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicLong: long get()>();
v = v + v;
v = v cmp v;
if v <= 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
v = v;
if v != 0 goto label;
v = <oadd.org.apache.drill.exec.memory.Accountant: org.slf4j.Logger logger>;
v = newarray (java.lang.Object)[4];
v = staticinvoke <java.lang.Long: java.lang.Long valueOf(long)>(v);
v[0] = v;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: java.util.concurrent.atomic.AtomicLong allocationLimit>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicLong: long get()>();
v = staticinvoke <java.lang.Long: java.lang.Long valueOf(long)>(v);
v[1] = v;
v = staticinvoke <java.lang.Long: java.lang.Long valueOf(long)>(v);
v[2] = v;
v = staticinvoke <java.lang.Long: java.lang.Long valueOf(long)>(v);
v[3] = v;
interfaceinvoke v.<org.slf4j.Logger: void warn(java.lang.String,java.lang.Object[])>("Excess allocation of {} bytes beyond limit of {}, within grace of {}, new total allocation: {}", v);
label:
if v != 0 goto label;
if v == 0 goto label;
if v != 0 goto label;
label:
v = 1;
goto label;
label:
v = 0;
label:
v = v;
v = <oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome: oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome SUCCESS>;
v = v cmp 0L;
if v <= 0 goto label;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: oadd.org.apache.drill.exec.memory.Accountant parent>;
if v == null goto label;
v = staticinvoke <java.lang.Math: long min(long,long)>(v, v);
v = v.<oadd.org.apache.drill.exec.memory.Accountant: oadd.org.apache.drill.exec.memory.Accountant parent>;
v = specialinvoke v.<oadd.org.apache.drill.exec.memory.Accountant: oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome allocate(long,boolean,boolean)>(v, v, v);
label:
if v == 0 goto label;
v = <oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome: oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome FAILED_LOCAL>;
goto label;
label:
v = v.<oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome: boolean ok>;
if v == 0 goto label;
v = <oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome: oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome SUCCESS>;
goto label;
label:
v = <oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome: oadd.org.apache.drill.exec.memory.Accountant$AllocationOutcome FAILED_PARENT>;
label:
v = v;
if v == 0 goto label;
specialinvoke v.<oadd.org.apache.drill.exec.memory.Accountant: void updatePeak()>();
label:
return v;
}
public void releaseBytes(long)
{
long v, v, v, v, v, v, v, v;
java.util.concurrent.atomic.AtomicLong v;
oadd.org.apache.drill.exec.memory.Accountant v, v, v;
byte v, v;
boolean v;
v := @this: oadd.org.apache.drill.exec.memory.Accountant;
v := @parameter: long;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: java.util.concurrent.atomic.AtomicLong locallyHeldMemory>;
v = neg v;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicLong: long addAndGet(long)>(v);
v = v cmp 0L;
if v < 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
staticinvoke <org.apache.drill.shaded.guava.com.google.common.base.Preconditions: void checkArgument(boolean,java.lang.Object)>(v, "Accounted size went negative.");
v = v + v;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: long reservation>;
v = v cmp v;
if v <= 0 goto label;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: oadd.org.apache.drill.exec.memory.Accountant parent>;
if v == null goto label;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: long reservation>;
v = v - v;
v = staticinvoke <java.lang.Math: long min(long,long)>(v, v);
v = v.<oadd.org.apache.drill.exec.memory.Accountant: oadd.org.apache.drill.exec.memory.Accountant parent>;
virtualinvoke v.<oadd.org.apache.drill.exec.memory.Accountant: void releaseBytes(long)>(v);
label:
return;
}
public void setLimit(long)
{
java.util.concurrent.atomic.AtomicLong v;
oadd.org.apache.drill.exec.memory.Accountant v;
long v;
v := @this: oadd.org.apache.drill.exec.memory.Accountant;
v := @parameter: long;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: java.util.concurrent.atomic.AtomicLong allocationLimit>;
virtualinvoke v.<java.util.concurrent.atomic.AtomicLong: void set(long)>(v);
return;
}
public boolean isOverLimit()
{
long v, v;
oadd.org.apache.drill.exec.memory.Accountant v, v, v;
byte v;
boolean v, v;
v := @this: oadd.org.apache.drill.exec.memory.Accountant;
v = virtualinvoke v.<oadd.org.apache.drill.exec.memory.Accountant: long getAllocatedMemory()>();
v = virtualinvoke v.<oadd.org.apache.drill.exec.memory.Accountant: long getLimit()>();
v = v cmp v;
if v > 0 goto label;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: oadd.org.apache.drill.exec.memory.Accountant parent>;
if v == null goto label;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: oadd.org.apache.drill.exec.memory.Accountant parent>;
v = virtualinvoke v.<oadd.org.apache.drill.exec.memory.Accountant: boolean isOverLimit()>();
if v == 0 goto label;
label:
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
public void close()
{
oadd.org.apache.drill.exec.memory.Accountant v, v, v;
long v;
v := @this: oadd.org.apache.drill.exec.memory.Accountant;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: oadd.org.apache.drill.exec.memory.Accountant parent>;
if v == null goto label;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: oadd.org.apache.drill.exec.memory.Accountant parent>;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: long reservation>;
virtualinvoke v.<oadd.org.apache.drill.exec.memory.Accountant: void releaseBytes(long)>(v);
label:
return;
}
public long getLimit()
{
java.util.concurrent.atomic.AtomicLong v;
oadd.org.apache.drill.exec.memory.Accountant v;
long v;
v := @this: oadd.org.apache.drill.exec.memory.Accountant;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: java.util.concurrent.atomic.AtomicLong allocationLimit>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicLong: long get()>();
return v;
}
public long getAllocatedMemory()
{
java.util.concurrent.atomic.AtomicLong v;
oadd.org.apache.drill.exec.memory.Accountant v;
long v;
v := @this: oadd.org.apache.drill.exec.memory.Accountant;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: java.util.concurrent.atomic.AtomicLong locallyHeldMemory>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicLong: long get()>();
return v;
}
public long getPeakMemoryAllocation()
{
java.util.concurrent.atomic.AtomicLong v;
oadd.org.apache.drill.exec.memory.Accountant v;
long v;
v := @this: oadd.org.apache.drill.exec.memory.Accountant;
v = v.<oadd.org.apache.drill.exec.memory.Accountant: java.util.concurrent.atomic.AtomicLong peakAllocation>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicLong: long get()>();
return v;
}
static void <clinit>()
{
org.slf4j.Logger v;
java.lang.String v, v;
boolean v, v;
v = staticinvoke <org.slf4j.LoggerFactory: org.slf4j.Logger getLogger(java.lang.Class)>(class "Loadd/org/apache/drill/exec/memory/Accountant;");
<oadd.org.apache.drill.exec.memory.Accountant: org.slf4j.Logger logger> = v;
v = staticinvoke <java.lang.System: java.lang.String getProperty(java.lang.String)>("drill.memory.lenient.allocator");
if v != null goto label;
v = staticinvoke <oadd.org.apache.drill.exec.util.AssertionUtil: boolean isAssertionsEnabled()>();
if v != 0 goto label;
v = 1;
goto label;
label:
v = 0;
goto label;
label:
v = staticinvoke <java.lang.System: java.lang.String getProperty(java.lang.String)>("drill.memory.lenient.allocator");
v = staticinvoke <java.lang.Boolean: boolean parseBoolean(java.lang.String)>(v);
label:
<oadd.org.apache.drill.exec.memory.Accountant: boolean ALLOW_LENIENCY> = v;
return;
}
}