public abstract class org.apache.kafkaesque.common.utils.Shell extends java.lang.Object
{
private static final org.slf4j.Logger LOG;
private final long timeout;
private int exitCode;
private java.lang.Process process;
private volatile java.util.concurrent.atomic.AtomicBoolean completed;
protected abstract java.lang.String[] execString();
protected abstract void parseExecResult(java.io.BufferedReader) throws java.io.IOException;
public void <init>(long)
{
long v;
org.apache.kafkaesque.common.utils.Shell v;
v := @this: org.apache.kafkaesque.common.utils.Shell;
v := @parameter: long;
specialinvoke v.<java.lang.Object: void <init>()>();
v.<org.apache.kafkaesque.common.utils.Shell: long timeout> = v;
return;
}
public int exitCode()
{
int v;
org.apache.kafkaesque.common.utils.Shell v;
v := @this: org.apache.kafkaesque.common.utils.Shell;
v = v.<org.apache.kafkaesque.common.utils.Shell: int exitCode>;
return v;
}
public java.lang.Process process()
{
org.apache.kafkaesque.common.utils.Shell v;
java.lang.Process v;
v := @this: org.apache.kafkaesque.common.utils.Shell;
v = v.<org.apache.kafkaesque.common.utils.Shell: java.lang.Process process>;
return v;
}
protected void run() throws java.io.IOException
{
org.apache.kafkaesque.common.utils.Shell v;
v := @this: org.apache.kafkaesque.common.utils.Shell;
v.<org.apache.kafkaesque.common.utils.Shell: int exitCode> = 0;
specialinvoke v.<org.apache.kafkaesque.common.utils.Shell: void runCommand()>();
return;
}
private void runCommand() throws java.io.IOException
{
java.util.Timer v, v;
byte v;
boolean v, v;
java.lang.Process v, v, v, v, v, v;
org.apache.kafkaesque.common.utils.Shell$ShellTimeoutTimerTask v;
org.apache.kafkaesque.common.utils.Shell v;
org.apache.kafkaesque.common.utils.Shell$ExitCodeException v;
java.lang.Throwable v;
java.util.concurrent.atomic.AtomicBoolean v, v, v, v;
java.lang.String[] v;
long v, v;
java.nio.charset.Charset v, v;
java.lang.StringBuffer v;
int v, v, v;
java.lang.ProcessBuilder v;
java.lang.String v, v;
org.apache.kafkaesque.common.utils.KafkaThread v;
org.slf4j.Logger v;
java.io.IOException v;
java.io.InputStreamReader v, v;
java.lang.InterruptedException v, v;
org.apache.kafkaesque.common.utils.Shell$1 v;
java.io.BufferedReader v, v;
java.io.InputStream v, v;
v := @this: org.apache.kafkaesque.common.utils.Shell;
v = new java.lang.ProcessBuilder;
v = virtualinvoke v.<org.apache.kafkaesque.common.utils.Shell: java.lang.String[] execString()>();
specialinvoke v.<java.lang.ProcessBuilder: void <init>(java.lang.String[])>(v);
v = null;
v = new java.util.concurrent.atomic.AtomicBoolean;
specialinvoke v.<java.util.concurrent.atomic.AtomicBoolean: void <init>(boolean)>(0);
v.<org.apache.kafkaesque.common.utils.Shell: java.util.concurrent.atomic.AtomicBoolean completed> = v;
v = virtualinvoke v.<java.lang.ProcessBuilder: java.lang.Process start()>();
v.<org.apache.kafkaesque.common.utils.Shell: java.lang.Process process> = v;
v = v.<org.apache.kafkaesque.common.utils.Shell: long timeout>;
v = v cmp -1L;
if v <= 0 goto label;
v = new java.util.Timer;
specialinvoke v.<java.util.Timer: void <init>()>();
v = v;
v = new org.apache.kafkaesque.common.utils.Shell$ShellTimeoutTimerTask;
specialinvoke v.<org.apache.kafkaesque.common.utils.Shell$ShellTimeoutTimerTask: void <init>(org.apache.kafkaesque.common.utils.Shell)>(v);
v = v.<org.apache.kafkaesque.common.utils.Shell: long timeout>;
virtualinvoke v.<java.util.Timer: void schedule(java.util.TimerTask,long)>(v, v);
label:
v = new java.io.BufferedReader;
v = new java.io.InputStreamReader;
v = v.<org.apache.kafkaesque.common.utils.Shell: java.lang.Process process>;
v = virtualinvoke v.<java.lang.Process: java.io.InputStream getErrorStream()>();
v = <java.nio.charset.StandardCharsets: java.nio.charset.Charset UTF_8>;
specialinvoke v.<java.io.InputStreamReader: void <init>(java.io.InputStream,java.nio.charset.Charset)>(v, v);
specialinvoke v.<java.io.BufferedReader: void <init>(java.io.Reader)>(v);
v = new java.io.BufferedReader;
v = new java.io.InputStreamReader;
v = v.<org.apache.kafkaesque.common.utils.Shell: java.lang.Process process>;
v = virtualinvoke v.<java.lang.Process: java.io.InputStream getInputStream()>();
v = <java.nio.charset.StandardCharsets: java.nio.charset.Charset UTF_8>;
specialinvoke v.<java.io.InputStreamReader: void <init>(java.io.InputStream,java.nio.charset.Charset)>(v, v);
specialinvoke v.<java.io.BufferedReader: void <init>(java.io.Reader)>(v);
v = new java.lang.StringBuffer;
specialinvoke v.<java.lang.StringBuffer: void <init>()>();
v = new org.apache.kafkaesque.common.utils.Shell$1;
specialinvoke v.<org.apache.kafkaesque.common.utils.Shell$1: void <init>(org.apache.kafkaesque.common.utils.Shell,java.io.BufferedReader,java.lang.StringBuffer)>(v, v, v);
v = staticinvoke <org.apache.kafkaesque.common.utils.KafkaThread: org.apache.kafkaesque.common.utils.KafkaThread nonDaemon(java.lang.String,java.lang.Runnable)>("kafka-shell-thread", v);
virtualinvoke v.<java.lang.Thread: void start()>();
label:
virtualinvoke v.<org.apache.kafkaesque.common.utils.Shell: void parseExecResult(java.io.BufferedReader)>(v);
v = v.<org.apache.kafkaesque.common.utils.Shell: java.lang.Process process>;
v = virtualinvoke v.<java.lang.Process: int waitFor()>();
v.<org.apache.kafkaesque.common.utils.Shell: int exitCode> = v;
label:
virtualinvoke v.<java.lang.Thread: void join()>();
label:
goto label;
label:
v := @caughtexception;
v = <org.apache.kafkaesque.common.utils.Shell: org.slf4j.Logger LOG>;
interfaceinvoke v.<org.slf4j.Logger: void warn(java.lang.String,java.lang.Throwable)>("Interrupted while reading the error stream", v);
label:
v = v.<org.apache.kafkaesque.common.utils.Shell: java.util.concurrent.atomic.AtomicBoolean completed>;
virtualinvoke v.<java.util.concurrent.atomic.AtomicBoolean: void set(boolean)>(1);
v = v.<org.apache.kafkaesque.common.utils.Shell: int exitCode>;
if v == 0 goto label;
v = new org.apache.kafkaesque.common.utils.Shell$ExitCodeException;
v = v.<org.apache.kafkaesque.common.utils.Shell: int exitCode>;
v = virtualinvoke v.<java.lang.StringBuffer: java.lang.String toString()>();
specialinvoke v.<org.apache.kafkaesque.common.utils.Shell$ExitCodeException: void <init>(int,java.lang.String)>(v, v);
throw v;
label:
if v == null goto label;
virtualinvoke v.<java.util.Timer: void cancel()>();
label:
v = v.<org.apache.kafkaesque.common.utils.Shell: java.util.concurrent.atomic.AtomicBoolean completed>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicBoolean: boolean get()>();
if v != 0 goto label;
virtualinvoke v.<java.lang.Thread: void interrupt()>();
label:
v = v.<org.apache.kafkaesque.common.utils.Shell: java.lang.Process process>;
virtualinvoke v.<java.lang.Process: void destroy()>();
goto label;
label:
v := @caughtexception;
v = new java.io.IOException;
v = virtualinvoke v.<java.lang.InterruptedException: java.lang.String toString()>();
specialinvoke v.<java.io.IOException: void <init>(java.lang.String)>(v);
throw v;
label:
v := @caughtexception;
if v == null goto label;
virtualinvoke v.<java.util.Timer: void cancel()>();
label:
v = v.<org.apache.kafkaesque.common.utils.Shell: java.util.concurrent.atomic.AtomicBoolean completed>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicBoolean: boolean get()>();
if v != 0 goto label;
virtualinvoke v.<java.lang.Thread: void interrupt()>();
label:
v = v.<org.apache.kafkaesque.common.utils.Shell: java.lang.Process process>;
virtualinvoke v.<java.lang.Process: void destroy()>();
throw v;
label:
return;
catch java.lang.InterruptedException 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;
}
public static transient java.lang.String execCommand(java.lang.String[]) throws java.io.IOException
{
java.lang.String[] v;
java.lang.String v;
v := @parameter: java.lang.String[];
v = staticinvoke <org.apache.kafkaesque.common.utils.Shell: java.lang.String execCommand(java.lang.String[],long)>(v, -1L);
return v;
}
public static java.lang.String execCommand(java.lang.String[], long) throws java.io.IOException
{
java.lang.String[] v;
long v;
java.lang.String v;
org.apache.kafkaesque.common.utils.Shell$ShellCommandExecutor v;
v := @parameter: java.lang.String[];
v := @parameter: long;
v = new org.apache.kafkaesque.common.utils.Shell$ShellCommandExecutor;
specialinvoke v.<org.apache.kafkaesque.common.utils.Shell$ShellCommandExecutor: void <init>(java.lang.String[],long)>(v, v);
virtualinvoke v.<org.apache.kafkaesque.common.utils.Shell$ShellCommandExecutor: void execute()>();
v = virtualinvoke v.<org.apache.kafkaesque.common.utils.Shell$ShellCommandExecutor: java.lang.String output()>();
return v;
}
static void <clinit>()
{
org.slf4j.Logger v;
v = staticinvoke <org.slf4j.LoggerFactory: org.slf4j.Logger getLogger(java.lang.Class)>(class "Lorg/apache/kafkaesque/common/utils/Shell;");
<org.apache.kafkaesque.common.utils.Shell: org.slf4j.Logger LOG> = v;
return;
}
}