accumulo-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Josh Elser (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (ACCUMULO-3055) calling MiniAccumuloCluster.stop multiple times fails with NPE
Date Sun, 10 Aug 2014 03:44:12 GMT

     [ https://issues.apache.org/jira/browse/ACCUMULO-3055?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Josh Elser updated ACCUMULO-3055:
---------------------------------

    Affects Version/s:     (was: 1.5.2)
                           (was: 1.6.1)
                           (was: 1.7.0)

> 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
>            Reporter: Sean Busbey
>            Assignee: Josh Elser
>            Priority: Critical
>             Fix For: 1.5.2, 1.6.1, 1.7.0
>
>
> 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