accumulo-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sean Busbey (JIRA)" <j...@apache.org>
Subject [jira] [Created] (ACCUMULO-3055) calling MiniAccumuloCluster.stop multiple times fails with NPE
Date Sat, 09 Aug 2014 21:39:13 GMT
Sean Busbey created ACCUMULO-3055:
-------------------------------------

             Summary: calling MiniAccumuloCluster.stop multiple times fails with NPE
                 Key: ACCUMULO-3055
                 URL: https://issues.apache.org/jira/browse/ACCUMULO-3055
             Project: Accumulo
          Issue Type: Bug
          Components: mini, test
    Affects Versions: 1.5.2, 1.6.1, 1.7.0
            Reporter: Sean Busbey
            Priority: Critical


On the mailing list [~ctubbsii] mentioned seeing some NPEs in the stderr for {{mvn verify}}.

I see one here when running mvn verify with either hadoop profile:

{quote}
Exception in thread "Thread-0" java.lang.NullPointerException
	at org.apache.accumulo.minicluster.MiniAccumuloCluster.stopProcessWithTimeout(MiniAccumuloCluster.java:449)
	at org.apache.accumulo.minicluster.MiniAccumuloCluster.stop(MiniAccumuloCluster.java:376)
	at org.apache.accumulo.minicluster.MiniAccumuloCluster$1.run(MiniAccumuloCluster.java:318)
{quote}

The relevant piece of code (in 1.5.2-SNAP) is the {{executor.execute}} below

{code}
  private int stopProcessWithTimeout(final Process proc, long timeout, TimeUnit unit) throws
InterruptedException, ExecutionException, TimeoutException {
    FutureTask<Integer> future = new FutureTask<Integer>(new Callable<Integer>()
{
        @Override
        public Integer call() throws InterruptedException {
          proc.destroy();
          return proc.waitFor();
        }
    });

    executor.execute(future);

    return future.get(timeout, unit);
  }
{code}

Reading through the code for stop, it nulls out executor when it's done. So the easy way to
get an NPE is calling stop() multiple times on a MAC instance. Since we have a shutdown hook
that calls stop, that means that a single user invocation of stop should result in a NPE later.

Since start() doesn't allow multiple starts, we probably shouldn't allow multiple stops. That
would mean adding logic to the shutdown hook to check if we're already stopped or making a
private unguarded version of stop that allows multiple calls and using that from the hook.

criteria for closing this issue:

* MAC should document wether calling stop() multiple times is allowed
* fix MAC.stop to either guard against multiple calls or handle them gracefully
* find out why this only gets an NPE in one place. Do we rely on the shutdown hook everywhere?



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Mime
View raw message