Uploaded image for project: 'Accumulo'
  1. Accumulo
  2. ACCUMULO-3055

calling MiniAccumuloCluster.stop multiple times fails with NPE

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Critical
    • Resolution: Fixed
    • None
    • 1.5.2, 1.6.1, 1.7.0
    • mini
    • None

    Description

      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:

      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)

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

        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);
        }
      

      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?

      Attachments

        Issue Links

          Activity

            People

              elserj Josh Elser
              busbey Sean Busbey
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 20m
                  20m