AssertionError on shutdown
Opened this issue · 0 comments
recunius commented
When assertions are enabled (-ea flag) shutting down Gearman is throwing an exception. If assertions are disabled the server appears to shutdown and the java process terminates successfully.
Here is a fairly simple test case:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import org.gearman.Gearman;
import org.gearman.GearmanClient;
import org.gearman.GearmanFunction;
import org.gearman.GearmanFunctionCallback;
import org.gearman.GearmanJobEvent;
import org.gearman.GearmanJobEventCallback;
import org.gearman.GearmanJoin;
import org.gearman.GearmanServer;
import org.gearman.GearmanWorker;
public class GearmanLifecycleCli {
public void run() throws Exception {
Gearman gearman = Gearman.createGearman();
GearmanWorker worker = gearman.createGearmanWorker();
GearmanClient client = gearman.createGearmanClient();
GearmanServer server = gearman.createGearmanServer("localhost", 4730);
client.addServer(server);
worker.addServer(server);
worker.addFunction("echo", new EchoFunction());
ByteArrayOutputStream bos = new ByteArrayOutputStream();
GearmanJoin<String> join = client.submitJob("echo", "Hello Gearman Worker".getBytes(), "ATTACHMENT", new GearmanJobEventCallback<String>() {
@Override
public void onEvent(String attachment, GearmanJobEvent event) {
switch (event.getEventType()) {
case GEARMAN_JOB_DATA:
case GEARMAN_JOB_SUCCESS: {
byte[] results = event.getData();
try {
bos.write(results);
} catch (IOException e) {
e.printStackTrace();
}
break;
}
}
}
});
join.join();
String result = new String(bos.toByteArray(), "UTF-8");
System.out.println("Result: " + result);
gearman.shutdown();
}
public static class EchoFunction implements GearmanFunction {
@Override
public byte[] work(String function, byte[] data, GearmanFunctionCallback callback) throws Exception {
return data;
}
}
public static void main(String[] argv) {
GearmanLifecycleCli cli = new GearmanLifecycleCli();
try {
cli.run();
} catch (Exception e) {
System.out.println(e);
e.printStackTrace();
}
}
}
Here is the program output with stack trace when assertions are on:
Result: Hello Gearman Worker Exception in thread "main" java.lang.AssertionError at org.gearman.impl.client.ClientImpl.dropController(ClientImpl.java:256) at org.gearman.impl.client.ClientImpl.access$600(ClientImpl.java:56) at org.gearman.impl.client.ClientImpl$InnerConnectionController.onDrop(ClientImpl.java:130) at org.gearman.impl.serverpool.AbstractConnectionController.dropServer(AbstractConnectionController.java:474) at org.gearman.impl.serverpool.AbstractConnectionController.dropServer(AbstractConnectionController.java:444) at org.gearman.impl.serverpool.AbstractJobServerPool.removeServer(AbstractJobServerPool.java:153) at org.gearman.impl.serverpool.AbstractJobServerPool.removeAllServers(AbstractJobServerPool.java:135) at org.gearman.impl.serverpool.AbstractJobServerPool.shutdown(AbstractJobServerPool.java:229) at org.gearman.impl.client.ClientImpl.shutdown(ClientImpl.java:406) at org.gearman.impl.GearmanImpl.shutdown(GearmanImpl.java:96) at vericle.cli.experiments.GearmanLifecycleCli.run(GearmanLifecycleCli.java:53) at vericle.cli.experiments.GearmanLifecycleCli.main(GearmanLifecycleCli.java:69)
Has anyone run into this issue?