@Override protected void doStop() throws Exception { commandExecutor.shutdownNow(); try { runnable.destroy(); } catch (Throwable t) { // Just catch the exception, not propagate it since it's already in shutdown sequence and // we want all twill services properly shutdown. LOG.warn("Exception when calling runnable.destroy.", t); } finally { context.stop(); } }
@Override public void run() { try { runnable.handleCommand(message.getCommand()); result.set(messageId); } catch (Exception e) { result.setException(e); } } });
@Override protected void doRun() throws Exception { runnable.run(); }
@Override public RuntimeSpecificationAdder add(TwillRunnable runnable, ResourceSpecification resourceSpec) { return add(runnable.configure().getName(), runnable, resourceSpec); }
@Override protected void triggerShutdown() { try { runnable.stop(); } catch (Throwable t) { LOG.error("Exception when stopping runnable.", t); } }
@SuppressWarnings("unchecked") @Override protected void doStart() throws Exception { for (Map.Entry<String, String> entry : containerLiveNodeData.getLogLevels().entrySet()) { String loggerName = entry.getKey(); String oldLogLevel = setLogLevel(loggerName, entry.getValue()); if (!defaultLogLevels.containsKey(loggerName)) { oldLogLevels.put(loggerName, oldLogLevel); } } commandExecutor = Executors.newSingleThreadExecutor( Threads.createDaemonThreadFactory("runnable-command-executor")); Class<?> runnableClass = classLoader.loadClass(specification.getClassName()); Preconditions.checkArgument(TwillRunnable.class.isAssignableFrom(runnableClass), "Class %s is not instance of TwillRunnable.", specification.getClassName()); runnable = Instances.newInstance((Class<TwillRunnable>) runnableClass); runnable.initialize(context); }
@Override public RuntimeSpecificationAdder add(TwillRunnable runnable, ResourceSpecification resourceSpec) { return add(runnable.configure().getName(), runnable, resourceSpec); }
@Override protected void triggerShutdown() { try { runnable.stop(); } catch (Throwable t) { LOG.error("Exception when stopping runnable.", t); } }
@SuppressWarnings("unchecked") @Override protected void doStart() throws Exception { for (Map.Entry<String, String> entry : containerLiveNodeData.getLogLevels().entrySet()) { String loggerName = entry.getKey(); String oldLogLevel = setLogLevel(loggerName, entry.getValue()); if (!defaultLogLevels.containsKey(loggerName)) { oldLogLevels.put(loggerName, oldLogLevel); } } commandExecutor = Executors.newSingleThreadExecutor( Threads.createDaemonThreadFactory("runnable-command-executor")); Class<?> runnableClass = classLoader.loadClass(specification.getClassName()); Preconditions.checkArgument(TwillRunnable.class.isAssignableFrom(runnableClass), "Class %s is not instance of TwillRunnable.", specification.getClassName()); runnable = Instances.newInstance((Class<TwillRunnable>) runnableClass); runnable.initialize(context); }
@Override public RuntimeSpecificationAdder add(String name, TwillRunnable runnable, final ResourceSpecification resourceSpec) { final TwillRunnableSpecification spec = new DefaultTwillRunnableSpecification( runnable.getClass().getName(), name, runnable.configure().getConfigs()); return new RuntimeSpecificationAdder(new LocalFileCompleter() { @Override public RunnableSetter complete(Collection<LocalFile> files) { runnables.put(spec.getName(), new DefaultRuntimeSpecification(spec.getName(), spec, resourceSpec, files)); return RunnableSetter.this; } }); }
@Override public void run() { try { runnable.handleCommand(message.getCommand()); result.set(messageId); } catch (Exception e) { result.setException(e); } } });
@Override protected void doRun() throws Exception { runnable.run(); }
@Override protected void doStop() throws Exception { commandExecutor.shutdownNow(); try { runnable.destroy(); } catch (Throwable t) { // Just catch the exception, not propagate it since it's already in shutdown sequence and // we want all twill services properly shutdown. LOG.warn("Exception when calling runnable.destroy.", t); } finally { context.stop(); } }
@Override public RuntimeSpecificationAdder add(TwillRunnable runnable) { return add(runnable.configure().getName(), runnable); }
@Override public RuntimeSpecificationAdder add(String name, TwillRunnable runnable, final ResourceSpecification resourceSpec) { final TwillRunnableSpecification spec = new DefaultTwillRunnableSpecification( runnable.getClass().getName(), name, runnable.configure().getConfigs()); return new RuntimeSpecificationAdder(new LocalFileCompleter() { @Override public RunnableSetter complete(Collection<LocalFile> files) { runnables.put(spec.getName(), new DefaultRuntimeSpecification(spec.getName(), spec, resourceSpec, files)); return RunnableSetter.this; } }); }
@Override public RuntimeSpecificationAdder add(TwillRunnable runnable) { return add(runnable.configure().getName(), runnable); }
@Override public TwillSpecification configure() { TwillRunnableSpecification runnableSpec = runnable.configure(); return TwillSpecification.Builder.with() .setName(runnableSpec.getName()) .withRunnable().add(runnableSpec.getName(), runnable, resourceSpec) .noLocalFiles() .anyOrder() .build(); } }
@Override public TwillSpecification configure() { TwillRunnableSpecification runnableSpec = runnable.configure(); return TwillSpecification.Builder.with() .setName(runnableSpec.getName()) .withRunnable().add(runnableSpec.getName(), runnable, resourceSpec) .noLocalFiles() .anyOrder() .build(); } }
@Override public TwillSpecification configure() { TwillRunnableSpecification runnableSpec = runnable.configure(); return TwillSpecification.Builder.with() .setName(runnableSpec.getName()) .withRunnable().add(runnableSpec.getName(), runnable, resourceSpec) .noLocalFiles() .anyOrder() .build(); } }