@Override public void destroy() { LOG.info("Releasing resources: {}", name); Futures.getUnchecked( Services.chainStop(resourceReporter, metricsCollectionService, zkClientService)); LOG.info("Runnable stopped: {}", name); }
@Override public void run() { runThread = Thread.currentThread(); LOG.info("Starting runnable {}", name); List<ListenableFuture<Service.State>> completions = Lists.newArrayList(); for (Service service : services) { SettableFuture<Service.State> completion = SettableFuture.create(); service.addListener(createServiceListener(completion), Threads.SAME_THREAD_EXECUTOR); completions.add(completion); } Services.chainStart(services.get(0), services.subList(1, services.size()).toArray(new Service[0])); LOG.info("Runnable started {}", name); try { Futures.allAsList(completions).get(); } catch (InterruptedException e) { LOG.debug("Waiting on latch interrupted {}", name); Thread.currentThread().interrupt(); } catch (ExecutionException e) { LOG.error("Exception in service.", e); throw Throwables.propagate(e); } List<Service> reverse = Lists.reverse(services); Services.chainStop(reverse.get(0), reverse.subList(1, reverse.size()).toArray(new Service[0])); LOG.info("Runnable stopped {}", name); }
@Override public void run() { LOG.info("Starting metrics service"); Futures.getUnchecked( Services.chainStart(zkClientService, metricsCollectionService, resourceReporter)); LOG.info("Starting runnable: {}", name); controller = injector.getInstance(getProgramClass()).run(program, programOpts); final SettableFuture<ProgramController.State> state = SettableFuture.create(); controller.addListener(new AbstractListener() { @Override public void stopped() { state.set(ProgramController.State.STOPPED); } @Override public void error(Throwable cause) { LOG.error("Program runner error out.", cause); state.setException(cause); } }, MoreExecutors.sameThreadExecutor()); runlatch.countDown(); try { state.get(); LOG.info("Program stopped."); } catch (Throwable t) { LOG.error("Program terminated due to error.", t); throw Throwables.propagate(t); } }