X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fconfig%2Fnetty-event-executor-config%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyang%2Fnetty%2Feventexecutor%2FAutoCloseableEventExecutor.java;h=b77126b16d00e0d53eed8ed0d69d4fb9b1572647;hb=3314dddc5692bed5eb837b0739ac3bb5ed1962ab;hp=69ea51f3a50eb5f5c762054e0988bf2cb6ee8fbf;hpb=e4313092536d8fecf093ef790bd5cb7e53f27e74;p=controller.git diff --git a/opendaylight/config/netty-event-executor-config/src/main/java/org/opendaylight/controller/config/yang/netty/eventexecutor/AutoCloseableEventExecutor.java b/opendaylight/config/netty-event-executor-config/src/main/java/org/opendaylight/controller/config/yang/netty/eventexecutor/AutoCloseableEventExecutor.java index 69ea51f3a5..b77126b16d 100644 --- a/opendaylight/config/netty-event-executor-config/src/main/java/org/opendaylight/controller/config/yang/netty/eventexecutor/AutoCloseableEventExecutor.java +++ b/opendaylight/config/netty-event-executor-config/src/main/java/org/opendaylight/controller/config/yang/netty/eventexecutor/AutoCloseableEventExecutor.java @@ -10,14 +10,15 @@ package org.opendaylight.controller.config.yang.netty.eventexecutor; import com.google.common.reflect.AbstractInvocationHandler; import com.google.common.reflect.Reflection; import io.netty.util.concurrent.EventExecutor; - +import io.netty.util.concurrent.GlobalEventExecutor; +import io.netty.util.concurrent.ImmediateEventExecutor; import java.lang.reflect.Method; import java.util.concurrent.TimeUnit; public interface AutoCloseableEventExecutor extends EventExecutor, AutoCloseable { - public static class CloseableEventExecutorMixin implements AutoCloseable { + class CloseableEventExecutorMixin implements AutoCloseable { public static final int DEFAULT_SHUTDOWN_SECONDS = 1; private final EventExecutor eventExecutor; @@ -26,27 +27,43 @@ public interface AutoCloseableEventExecutor extends EventExecutor, AutoCloseable } @Override - public void close() { + public void close() throws Exception { eventExecutor.shutdownGracefully(0, DEFAULT_SHUTDOWN_SECONDS, TimeUnit.SECONDS); } - public static AutoCloseable createCloseableProxy(final EventExecutor eventExecutor) { - final CloseableEventExecutorMixin closeableGlobalEventExecutorMixin = - new CloseableEventExecutorMixin(eventExecutor); + private static AutoCloseableEventExecutor createCloseableProxy( + final CloseableEventExecutorMixin closeableEventExecutorMixin) { return Reflection.newProxy(AutoCloseableEventExecutor.class, new AbstractInvocationHandler() { @Override protected Object handleInvocation(Object proxy, Method method, Object[] args) throws Throwable { if (method.getName().equals("close")) { - closeableGlobalEventExecutorMixin.close(); + closeableEventExecutorMixin.close(); return null; } else { - return method.invoke(eventExecutor, args); + return method.invoke(closeableEventExecutorMixin.eventExecutor, args); } } }); } + public static AutoCloseableEventExecutor globalEventExecutor() { + return createCloseableProxy(new CloseableEventExecutorMixin(GlobalEventExecutor.INSTANCE)); + } + + public static AutoCloseableEventExecutor immediateEventExecutor() { + return createCloseableProxy(new CloseableEventExecutorMixin(ImmediateEventExecutor.INSTANCE)); + } + public static AutoCloseableEventExecutor forwardingEventExecutor(final EventExecutor eventExecutor, + final AutoCloseable closeable) { + return createCloseableProxy(new CloseableEventExecutorMixin(eventExecutor) { + @Override + public void close() throws Exception { + // Intentional no-op. + closeable.close(); + } + }); + } } } \ No newline at end of file