public class org.apache.zookeeper.server.watch.WatcherCleaner extends java.lang.Thread
{
private static final org.slf4j.Logger LOG;
private final org.apache.zookeeper.server.RateLogger RATE_LOGGER;
private volatile boolean stopped;
private final java.lang.Object cleanEvent;
private final java.lang.Object processingCompletedEvent;
private final org.apache.zookeeper.server.WorkerService cleaners;
private final java.util.Set deadWatchers;
private final org.apache.zookeeper.server.watch.IDeadWatcherListener listener;
private final int watcherCleanThreshold;
private final int watcherCleanIntervalInSeconds;
private final int maxInProcessingDeadWatchers;
private final java.util.concurrent.atomic.AtomicInteger totalDeadWatchers;
public void <init>(org.apache.zookeeper.server.watch.IDeadWatcherListener)
{
org.apache.zookeeper.server.watch.IDeadWatcherListener v;
java.lang.Integer v, v, v, v;
org.apache.zookeeper.server.watch.WatcherCleaner v;
int v, v, v, v, v;
v := @this: org.apache.zookeeper.server.watch.WatcherCleaner;
v := @parameter: org.apache.zookeeper.server.watch.IDeadWatcherListener;
v = staticinvoke <java.lang.Integer: java.lang.Integer getInteger(java.lang.String,int)>("zookeeper.watcherCleanThreshold", 1000);
v = virtualinvoke v.<java.lang.Integer: int intValue()>();
v = staticinvoke <java.lang.Integer: java.lang.Integer getInteger(java.lang.String,int)>("zookeeper.watcherCleanIntervalInSeconds", 600);
v = virtualinvoke v.<java.lang.Integer: int intValue()>();
v = staticinvoke <java.lang.Integer: java.lang.Integer getInteger(java.lang.String,int)>("zookeeper.watcherCleanThreadsNum", 2);
v = virtualinvoke v.<java.lang.Integer: int intValue()>();
v = (int) -1;
v = staticinvoke <java.lang.Integer: java.lang.Integer getInteger(java.lang.String,int)>("zookeeper.maxInProcessingDeadWatchers", v);
v = virtualinvoke v.<java.lang.Integer: int intValue()>();
specialinvoke v.<org.apache.zookeeper.server.watch.WatcherCleaner: void <init>(org.apache.zookeeper.server.watch.IDeadWatcherListener,int,int,int,int)>(v, v, v, v, v);
return;
}
public void <init>(org.apache.zookeeper.server.watch.IDeadWatcherListener, int, int, int, int)
{
org.apache.zookeeper.server.watch.IDeadWatcherListener v;
java.lang.Object[] v;
org.apache.zookeeper.server.RateLogger v;
java.lang.Integer v, v, v, v, v;
java.util.HashSet v;
java.util.concurrent.atomic.AtomicInteger v;
int v, v, v, v, v;
org.apache.zookeeper.server.WorkerService v;
org.slf4j.Logger v, v, v;
org.apache.zookeeper.server.watch.WatcherCleaner v;
java.lang.Object v, v;
v := @this: org.apache.zookeeper.server.watch.WatcherCleaner;
v := @parameter: org.apache.zookeeper.server.watch.IDeadWatcherListener;
v := @parameter: int;
v := @parameter: int;
v := @parameter: int;
v := @parameter: int;
specialinvoke v.<java.lang.Thread: void <init>()>();
v = new org.apache.zookeeper.server.RateLogger;
v = <org.apache.zookeeper.server.watch.WatcherCleaner: org.slf4j.Logger LOG>;
specialinvoke v.<org.apache.zookeeper.server.RateLogger: void <init>(org.slf4j.Logger)>(v);
v.<org.apache.zookeeper.server.watch.WatcherCleaner: org.apache.zookeeper.server.RateLogger RATE_LOGGER> = v;
v.<org.apache.zookeeper.server.watch.WatcherCleaner: boolean stopped> = 0;
v = new java.lang.Object;
specialinvoke v.<java.lang.Object: void <init>()>();
v.<org.apache.zookeeper.server.watch.WatcherCleaner: java.lang.Object cleanEvent> = v;
v = new java.lang.Object;
specialinvoke v.<java.lang.Object: void <init>()>();
v.<org.apache.zookeeper.server.watch.WatcherCleaner: java.lang.Object processingCompletedEvent> = v;
v = new java.util.concurrent.atomic.AtomicInteger;
specialinvoke v.<java.util.concurrent.atomic.AtomicInteger: void <init>()>();
v.<org.apache.zookeeper.server.watch.WatcherCleaner: java.util.concurrent.atomic.AtomicInteger totalDeadWatchers> = v;
v.<org.apache.zookeeper.server.watch.WatcherCleaner: org.apache.zookeeper.server.watch.IDeadWatcherListener listener> = v;
v.<org.apache.zookeeper.server.watch.WatcherCleaner: int watcherCleanThreshold> = v;
v.<org.apache.zookeeper.server.watch.WatcherCleaner: int watcherCleanIntervalInSeconds> = v;
v = v * v;
if v <= 0 goto label;
if v >= v goto label;
v = v;
v = <org.apache.zookeeper.server.watch.WatcherCleaner: org.slf4j.Logger LOG>;
v = staticinvoke <java.lang.Integer: java.lang.Integer valueOf(int)>(v);
interfaceinvoke v.<org.slf4j.Logger: void info(java.lang.String,java.lang.Object)>("The maxInProcessingDeadWatchers config is smaller than the suggested one, change it to use {}", v);
label:
v.<org.apache.zookeeper.server.watch.WatcherCleaner: int maxInProcessingDeadWatchers> = v;
v = new java.util.HashSet;
specialinvoke v.<java.util.HashSet: void <init>()>();
v.<org.apache.zookeeper.server.watch.WatcherCleaner: java.util.Set deadWatchers> = v;
v = new org.apache.zookeeper.server.WorkerService;
specialinvoke v.<org.apache.zookeeper.server.WorkerService: void <init>(java.lang.String,int,boolean)>("DeadWatcherCleanner", v, 0);
v.<org.apache.zookeeper.server.watch.WatcherCleaner: org.apache.zookeeper.server.WorkerService cleaners> = v;
v = <org.apache.zookeeper.server.watch.WatcherCleaner: org.slf4j.Logger LOG>;
v = newarray (java.lang.Object)[4];
v = staticinvoke <java.lang.Integer: java.lang.Integer valueOf(int)>(v);
v[0] = v;
v = staticinvoke <java.lang.Integer: java.lang.Integer valueOf(int)>(v);
v[1] = v;
v = staticinvoke <java.lang.Integer: java.lang.Integer valueOf(int)>(v);
v[2] = v;
v = staticinvoke <java.lang.Integer: java.lang.Integer valueOf(int)>(v);
v[3] = v;
interfaceinvoke v.<org.slf4j.Logger: void info(java.lang.String,java.lang.Object[])>("watcherCleanThreshold={}, watcherCleanIntervalInSeconds={}, watcherCleanThreadsNum={}, maxInProcessingDeadWatchers={}", v);
return;
}
public void addDeadWatcher(int)
{
java.lang.Throwable v, v, v;
org.apache.zookeeper.metrics.Counter v, v;
org.apache.zookeeper.server.RateLogger v;
long v, v, v;
java.lang.Integer v;
java.util.concurrent.atomic.AtomicInteger v, v;
org.apache.zookeeper.server.ServerMetrics v, v;
int v, v, v, v, v, v;
boolean v, v;
org.slf4j.Logger v;
java.util.Set v, v;
org.apache.zookeeper.server.watch.WatcherCleaner v;
java.lang.InterruptedException v;
java.lang.Object v, v, v, v;
v := @this: org.apache.zookeeper.server.watch.WatcherCleaner;
v := @parameter: int;
label:
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: int maxInProcessingDeadWatchers>;
if v <= 0 goto label;
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: boolean stopped>;
if v != 0 goto label;
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: java.util.concurrent.atomic.AtomicInteger totalDeadWatchers>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicInteger: int get()>();
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: int maxInProcessingDeadWatchers>;
if v < v goto label;
label:
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: org.apache.zookeeper.server.RateLogger RATE_LOGGER>;
virtualinvoke v.<org.apache.zookeeper.server.RateLogger: void rateLimitLog(java.lang.String)>("Waiting for dead watchers cleaning");
v = staticinvoke <org.apache.zookeeper.common.Time: long currentElapsedTime()>();
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: java.lang.Object processingCompletedEvent>;
entermonitor v;
label:
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: java.lang.Object processingCompletedEvent>;
virtualinvoke v.<java.lang.Object: void wait(long)>(100L);
exitmonitor v;
label:
goto label;
label:
v := @caughtexception;
exitmonitor v;
throw v;
label:
v = staticinvoke <org.apache.zookeeper.common.Time: long currentElapsedTime()>();
v = v - v;
v = staticinvoke <org.apache.zookeeper.server.ServerMetrics: org.apache.zookeeper.server.ServerMetrics getMetrics()>();
v = v.<org.apache.zookeeper.server.ServerMetrics: org.apache.zookeeper.metrics.Counter ADD_DEAD_WATCHER_STALL_TIME>;
interfaceinvoke v.<org.apache.zookeeper.metrics.Counter: void add(long)>(v);
label:
goto label;
label:
v := @caughtexception;
v = <org.apache.zookeeper.server.watch.WatcherCleaner: org.slf4j.Logger LOG>;
interfaceinvoke v.<org.slf4j.Logger: void info(java.lang.String)>("Got interrupted while waiting for dead watches queue size");
label:
entermonitor v;
label:
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: java.util.Set deadWatchers>;
v = staticinvoke <java.lang.Integer: java.lang.Integer valueOf(int)>(v);
v = interfaceinvoke v.<java.util.Set: boolean add(java.lang.Object)>(v);
if v == 0 goto label;
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: java.util.concurrent.atomic.AtomicInteger totalDeadWatchers>;
virtualinvoke v.<java.util.concurrent.atomic.AtomicInteger: int incrementAndGet()>();
v = staticinvoke <org.apache.zookeeper.server.ServerMetrics: org.apache.zookeeper.server.ServerMetrics getMetrics()>();
v = v.<org.apache.zookeeper.server.ServerMetrics: org.apache.zookeeper.metrics.Counter DEAD_WATCHERS_QUEUED>;
interfaceinvoke v.<org.apache.zookeeper.metrics.Counter: void add(long)>(1L);
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: java.util.Set deadWatchers>;
v = interfaceinvoke v.<java.util.Set: int size()>();
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: int watcherCleanThreshold>;
if v < v goto label;
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: java.lang.Object cleanEvent>;
entermonitor v;
label:
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: java.lang.Object cleanEvent>;
virtualinvoke v.<java.lang.Object: void notifyAll()>();
exitmonitor v;
label:
goto label;
label:
v := @caughtexception;
exitmonitor v;
throw v;
label:
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.InterruptedException from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
}
public void run()
{
java.lang.Throwable v, v;
java.lang.Integer v;
java.util.HashSet v;
org.apache.zookeeper.server.watch.WatcherCleaner$1 v;
java.util.concurrent.ThreadLocalRandom v;
int v, v, v, v, v, v, v, v, v, v;
org.apache.zookeeper.server.WorkerService v;
boolean v, v, v;
org.slf4j.Logger v, v, v;
java.util.Set v, v, v, v;
org.apache.zookeeper.server.watch.WatcherCleaner v;
java.lang.InterruptedException v;
java.lang.Object v, v;
v := @this: org.apache.zookeeper.server.watch.WatcherCleaner;
label:
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: boolean stopped>;
if v != 0 goto label;
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: java.lang.Object cleanEvent>;
entermonitor v;
label:
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: boolean stopped>;
if v != 0 goto label;
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: java.util.Set deadWatchers>;
v = interfaceinvoke v.<java.util.Set: int size()>();
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: int watcherCleanThreshold>;
if v >= v goto label;
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: int watcherCleanIntervalInSeconds>;
v = staticinvoke <java.util.concurrent.ThreadLocalRandom: java.util.concurrent.ThreadLocalRandom current()>();
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: int watcherCleanIntervalInSeconds>;
v = v / 2;
v = v + 1;
v = virtualinvoke v.<java.util.concurrent.ThreadLocalRandom: int nextInt(int)>(v);
v = v + v;
v = v * 1000;
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: java.lang.Object cleanEvent>;
virtualinvoke v.<java.lang.Object: void wait(long)>(v);
label:
goto label;
label:
v := @caughtexception;
v = <org.apache.zookeeper.server.watch.WatcherCleaner: org.slf4j.Logger LOG>;
interfaceinvoke v.<org.slf4j.Logger: void info(java.lang.String)>("Received InterruptedException while waiting for cleanEvent");
exitmonitor v;
label:
goto label;
label:
exitmonitor v;
label:
goto label;
label:
v := @caughtexception;
exitmonitor v;
throw v;
label:
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: java.util.Set deadWatchers>;
v = interfaceinvoke v.<java.util.Set: boolean isEmpty()>();
if v != 0 goto label;
entermonitor v;
label:
v = new java.util.HashSet;
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: java.util.Set deadWatchers>;
specialinvoke v.<java.util.HashSet: void <init>(java.util.Collection)>(v);
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: java.util.Set deadWatchers>;
interfaceinvoke v.<java.util.Set: void clear()>();
v = interfaceinvoke v.<java.util.Set: int size()>();
v = <org.apache.zookeeper.server.watch.WatcherCleaner: org.slf4j.Logger LOG>;
v = staticinvoke <java.lang.Integer: java.lang.Integer valueOf(int)>(v);
interfaceinvoke v.<org.slf4j.Logger: void info(java.lang.String,java.lang.Object)>("Processing {} dead watchers", v);
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: org.apache.zookeeper.server.WorkerService cleaners>;
v = new org.apache.zookeeper.server.watch.WatcherCleaner$1;
specialinvoke v.<org.apache.zookeeper.server.watch.WatcherCleaner$1: void <init>(org.apache.zookeeper.server.watch.WatcherCleaner,java.util.Set,int)>(v, v, v);
virtualinvoke v.<org.apache.zookeeper.server.WorkerService: void schedule(org.apache.zookeeper.server.WorkerService$WorkRequest)>(v);
exitmonitor v;
label:
goto label;
label:
v := @caughtexception;
exitmonitor v;
throw v;
label:
v = <org.apache.zookeeper.server.watch.WatcherCleaner: org.slf4j.Logger LOG>;
interfaceinvoke v.<org.slf4j.Logger: void info(java.lang.String)>("WatcherCleaner thread exited");
return;
catch java.lang.InterruptedException from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
}
public void shutdown()
{
org.slf4j.Logger v, v;
java.util.Set v;
org.apache.zookeeper.server.WorkerService v;
boolean v;
org.apache.zookeeper.server.watch.WatcherCleaner v;
v := @this: org.apache.zookeeper.server.watch.WatcherCleaner;
v.<org.apache.zookeeper.server.watch.WatcherCleaner: boolean stopped> = 1;
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: java.util.Set deadWatchers>;
interfaceinvoke v.<java.util.Set: void clear()>();
v = v.<org.apache.zookeeper.server.watch.WatcherCleaner: org.apache.zookeeper.server.WorkerService cleaners>;
virtualinvoke v.<org.apache.zookeeper.server.WorkerService: void stop()>();
virtualinvoke v.<org.apache.zookeeper.server.watch.WatcherCleaner: void interrupt()>();
v = <org.apache.zookeeper.server.watch.WatcherCleaner: org.slf4j.Logger LOG>;
v = interfaceinvoke v.<org.slf4j.Logger: boolean isInfoEnabled()>();
if v == 0 goto label;
v = <org.apache.zookeeper.server.watch.WatcherCleaner: org.slf4j.Logger LOG>;
interfaceinvoke v.<org.slf4j.Logger: void info(java.lang.String)>("WatcherCleaner thread shutdown is initiated");
label:
return;
}
static void <clinit>()
{
org.slf4j.Logger v;
v = staticinvoke <org.slf4j.LoggerFactory: org.slf4j.Logger getLogger(java.lang.Class)>(class "Lorg/apache/zookeeper/server/watch/WatcherCleaner;");
<org.apache.zookeeper.server.watch.WatcherCleaner: org.slf4j.Logger LOG> = v;
return;
}
}