Skip to content

AssertionError on shutdown #5

@recunius

Description

@recunius

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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions