private void listenDriveState(FlowletRuntimeService driver) { driver.addListener( new ServiceListenerAdapter() { @Override public void running() { started(); } @Override public void failed(Service.State from, Throwable failure) { LOG.error("Flowlet terminated with exception", failure); error(failure); } @Override public void terminated(Service.State from) { if (getState() != State.STOPPING) { LOG.warn("Flowlet terminated by itself"); // Close all consumers for (ConsumerSupplier consumerSupplier : consumerSuppliers) { Closeables.closeQuietly(consumerSupplier); } } } }, Threads.SAME_THREAD_EXECUTOR); }
@Override protected void doStop() throws Exception { LOG.info("Stopping flowlet: " + flowletContext); try { driver.stopAndWait(); } finally { // Close all consumers for (ConsumerSupplier consumerSupplier : consumerSuppliers) { Closeables.closeQuietly(consumerSupplier); } flowletContext.close(); } LOG.info("Flowlet stopped: " + flowletContext); }
@Override protected void doResume() throws Exception { LOG.info("Resuming flowlet: " + flowletContext); // Open producers for (ProducerSupplier producerSupplier : producerSuppliers) { producerSupplier.open(); } // Open consumers for (ConsumerSupplier consumerSupplier : consumerSuppliers) { consumerSupplier.open(flowletContext.getInstanceCount()); } driver.resume(); LOG.info("Flowlet resumed: " + flowletContext); }
@Override protected void doSuspend() throws Exception { LOG.info("Suspending flowlet: " + flowletContext); driver.suspend(); // Close all producers for (ProducerSupplier producerSupplier : producerSuppliers) { producerSupplier.close(); } // Close all consumers for (ConsumerSupplier consumerSupplier : consumerSuppliers) { consumerSupplier.close(); } LOG.info("Flowlet suspended: " + flowletContext); }