From: Milos Fabian Date: Tue, 12 Nov 2013 10:09:58 +0000 (+0100) Subject: Added config service interface for netty EventExecutor, module implementation of... X-Git-Tag: jenkins-controller-bulk-release-prepare-only-2-1~423^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=fd51e941751a3c0ef78b2b8d110ded138f763cf4 Added config service interface for netty EventExecutor, module implementation of GlobalEventExecutor. Change-Id: I64064320705b116e42360831e3f53481388f5dbb Signed-off-by: Milos Fabian --- diff --git a/opendaylight/config/netty-event-executor-config/pom.xml b/opendaylight/config/netty-event-executor-config/pom.xml new file mode 100644 index 0000000000..a2ce94f340 --- /dev/null +++ b/opendaylight/config/netty-event-executor-config/pom.xml @@ -0,0 +1,106 @@ + + + org.opendaylight.controller + config-subsystem + 0.2.3-SNAPSHOT + + 4.0.0 + netty-event-executor-config + Configuration Wrapper around netty's event executor + bundle + ${project.artifactId} + + 3.0.4 + + + + + org.opendaylight.controller + config-api + + + org.opendaylight.controller + threadpool-config-api + ${project.version} + + + org.slf4j + slf4j-api + + + com.google.guava + guava + + + + + junit + junit + test + + + org.opendaylight.controller + config-manager + test + test-jar + + + org.opendaylight.controller + config-manager + test + + + org.opendaylight.controller + config-util + test + + + org.opendaylight.bgpcep + mockito-configuration + test + + + + + + + + org.opendaylight.yangtools + yang-maven-plugin + + + org.apache.felix + maven-bundle-plugin + true + + + ${project.groupId}.${project.artifactId} + + + + com.google.common.base, + org.opendaylight.controller.config.yang.threadpool, + io.netty.util.concurrent, + org.opendaylight.controller.config.api, + org.opendaylight.controller.config.api.annotations, + org.opendaylight.controller.config.api.runtime, + org.opendaylight.controller.config.spi, + org.slf4j, + org.osgi.framework + + + + + + + + + + ${project.artifactId} + NETTY-EVENT-EXECUTOR-CONFIG Module site + ${basedir}/target/site/${project.artifactId} + + + + \ No newline at end of file diff --git a/opendaylight/config/netty-event-executor-config/src/main/java/org/opendaylight/controller/config/yang/netty/eventexecutor/GlobalEventExecutorModule.java b/opendaylight/config/netty-event-executor-config/src/main/java/org/opendaylight/controller/config/yang/netty/eventexecutor/GlobalEventExecutorModule.java new file mode 100644 index 0000000000..3707f016a2 --- /dev/null +++ b/opendaylight/config/netty-event-executor-config/src/main/java/org/opendaylight/controller/config/yang/netty/eventexecutor/GlobalEventExecutorModule.java @@ -0,0 +1,113 @@ +/** + * Generated file + + * Generated from: yang module name: netty-event-executor yang module local name: netty-global-event-executor + * Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator + * Generated at: Tue Nov 12 10:44:21 CET 2013 + * + * Do not modify this file unless it is present under src/main directory + */ +package org.opendaylight.controller.config.yang.netty.eventexecutor; + +import io.netty.util.concurrent.AbstractEventExecutor; +import io.netty.util.concurrent.EventExecutor; +import io.netty.util.concurrent.EventExecutorGroup; +import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.GlobalEventExecutor; + +import java.util.concurrent.TimeUnit; + +/** +* +*/ +public final class GlobalEventExecutorModule extends + org.opendaylight.controller.config.yang.netty.eventexecutor.AbstractGlobalEventExecutorModule { + + public GlobalEventExecutorModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, + org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { + super(identifier, dependencyResolver); + } + + public GlobalEventExecutorModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, + org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, + GlobalEventExecutorModule oldModule, java.lang.AutoCloseable oldInstance) { + super(identifier, dependencyResolver, oldModule, oldInstance); + } + + @Override + public void validate() { + super.validate(); + // Add custom validation for module attributes here. + } + + @Override + public java.lang.AutoCloseable createInstance() { + return new GlobalEventExecutorCloseable(GlobalEventExecutor.INSTANCE); + } + + static final private class GlobalEventExecutorCloseable extends AbstractEventExecutor implements AutoCloseable { + + private EventExecutor executor; + + public GlobalEventExecutorCloseable(EventExecutor executor) { + this.executor = executor; + } + + @Override + public EventExecutorGroup parent() { + return this.executor.parent(); + } + + @Override + public boolean inEventLoop(Thread thread) { + return this.executor.inEventLoop(thread); + } + + @Override + public boolean isShuttingDown() { + return this.executor.isShuttingDown(); + } + + @Override + public Future shutdownGracefully(long quietPeriod, long timeout, TimeUnit unit) { + return this.executor.shutdownGracefully(quietPeriod, timeout, unit); + } + + @Override + public Future terminationFuture() { + return this.executor.terminationFuture(); + } + + @Override + public boolean isShutdown() { + return this.executor.isShutdown(); + } + + @Override + public boolean isTerminated() { + return this.executor.isTerminated(); + } + + @Override + public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException { + return this.executor.awaitTermination(timeout, unit); + } + + @Override + public void execute(Runnable command) { + this.executor.execute(command); + } + + @Override + public void close() throws Exception { + shutdownGracefully(); + } + + @SuppressWarnings("deprecation") + @Override + public void shutdown() { + this.executor.shutdown(); + } + + } +} diff --git a/opendaylight/config/netty-event-executor-config/src/main/java/org/opendaylight/controller/config/yang/netty/eventexecutor/GlobalEventExecutorModuleFactory.java b/opendaylight/config/netty-event-executor-config/src/main/java/org/opendaylight/controller/config/yang/netty/eventexecutor/GlobalEventExecutorModuleFactory.java new file mode 100644 index 0000000000..79a5121fa8 --- /dev/null +++ b/opendaylight/config/netty-event-executor-config/src/main/java/org/opendaylight/controller/config/yang/netty/eventexecutor/GlobalEventExecutorModuleFactory.java @@ -0,0 +1,19 @@ +/** +* Generated file + +* Generated from: yang module name: netty-event-executor yang module local name: netty-global-event-executor +* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator +* Generated at: Tue Nov 12 10:44:21 CET 2013 +* +* Do not modify this file unless it is present under src/main directory +*/ +package org.opendaylight.controller.config.yang.netty.eventexecutor; + +/** +* +*/ +public class GlobalEventExecutorModuleFactory extends org.opendaylight.controller.config.yang.netty.eventexecutor.AbstractGlobalEventExecutorModuleFactory +{ + + +} diff --git a/opendaylight/config/netty-event-executor-config/src/main/yang/netty-event-executor.yang b/opendaylight/config/netty-event-executor-config/src/main/yang/netty-event-executor.yang new file mode 100644 index 0000000000..d45eccded8 --- /dev/null +++ b/opendaylight/config/netty-event-executor-config/src/main/yang/netty-event-executor.yang @@ -0,0 +1,44 @@ +// vi: set smarttab et sw=4 tabstop=4: +module netty-event-executor { + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:controller:netty:eventexecutor"; + prefix "netty-t"; + + import config { prefix config; revision-date 2013-04-05; } + import threadpool { prefix th; revision-date 2013-04-09; } + + organization "Cisco Systems, Inc."; + + contact "Milos Fabian "; + + description + "This module contains the base YANG definitions for NS-OS + thread-related services. + + Copyright (c)2013 Cisco Systems, Inc. All rights reserved.; + + This program and the accompanying materials are made available + under the terms of the Eclipse Public License v1.0 which + accompanies this distribution, and is available at + http://www.eclipse.org/legal/epl-v10.html"; + + revision "2013-11-12" { + description + "Initial revision"; + } + + identity netty-global-event-executor { + base config:module-type; + config:provided-service th:netty-event-executor; + config:java-name-prefix GlobalEventExecutor; + } + + augment "/config:modules/config:module/config:configuration" { + case netty-global-event-executor { + when "/config:modules/config:module/config:type = 'netty-global-event-executor'"; + + } + } + + +} diff --git a/opendaylight/config/netty-event-executor-config/src/test/java/org/opendaylight/controller/config/yang/netty/eventexecutor/GlobalEventExecutorModuleTest.java b/opendaylight/config/netty-event-executor-config/src/test/java/org/opendaylight/controller/config/yang/netty/eventexecutor/GlobalEventExecutorModuleTest.java new file mode 100644 index 0000000000..6af508829b --- /dev/null +++ b/opendaylight/config/netty-event-executor-config/src/test/java/org/opendaylight/controller/config/yang/netty/eventexecutor/GlobalEventExecutorModuleTest.java @@ -0,0 +1,64 @@ +package org.opendaylight.controller.config.yang.netty.eventexecutor; + +import javax.management.InstanceAlreadyExistsException; +import javax.management.ObjectName; + +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.controller.config.api.ConflictingVersionException; +import org.opendaylight.controller.config.api.ValidationException; +import org.opendaylight.controller.config.api.jmx.CommitStatus; +import org.opendaylight.controller.config.manager.impl.AbstractConfigTest; +import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver; +import org.opendaylight.controller.config.util.ConfigTransactionJMXClient; + +public class GlobalEventExecutorModuleTest extends AbstractConfigTest { + + private GlobalEventExecutorModuleFactory factory; + private final String instanceName = "netty1"; + + @Before + public void setUp() { + factory = new GlobalEventExecutorModuleFactory(); + super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory)); + } + + @Test + public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException, + ConflictingVersionException { + ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction(); + + createInstance(transaction, instanceName); + createInstance(transaction, instanceName + 2); + transaction.validateConfig(); + CommitStatus status = transaction.commit(); + + assertBeanCount(2, factory.getImplementationName()); + assertStatus(status, 2, 0, 0); + } + + @Test + public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException, + ValidationException { + + ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction(); + createInstance(transaction, instanceName); + + transaction.commit(); + + transaction = configRegistryClient.createTransaction(); + assertBeanCount(1, factory.getImplementationName()); + CommitStatus status = transaction.commit(); + + assertBeanCount(1, factory.getImplementationName()); + assertStatus(status, 0, 0, 1); + } + + private ObjectName createInstance(ConfigTransactionJMXClient transaction, String instanceName) + throws InstanceAlreadyExistsException { + ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName); + transaction.newMBeanProxy(nameCreated, GlobalEventExecutorModuleMXBean.class); + return nameCreated; + } + +} diff --git a/opendaylight/config/pom.xml b/opendaylight/config/pom.xml index 2842b5c450..3f27ff1055 100755 --- a/opendaylight/config/pom.xml +++ b/opendaylight/config/pom.xml @@ -32,6 +32,7 @@ threadpool-config-api threadpool-config-impl netty-threadgroup-config + netty-event-executor-config diff --git a/opendaylight/config/threadpool-config-api/pom.xml b/opendaylight/config/threadpool-config-api/pom.xml index d8ddc4f24d..cddfb64830 100644 --- a/opendaylight/config/threadpool-config-api/pom.xml +++ b/opendaylight/config/threadpool-config-api/pom.xml @@ -39,6 +39,7 @@ org.opendaylight.controller.config.api.*, com.google.common.eventbus, io.netty.channel, + io.netty.util.concurrent org.opendaylight.controller.config.threadpool, diff --git a/opendaylight/config/threadpool-config-api/src/main/yang/threadpool.yang b/opendaylight/config/threadpool-config-api/src/main/yang/threadpool.yang index 5cc17e52ff..9c73711c17 100644 --- a/opendaylight/config/threadpool-config-api/src/main/yang/threadpool.yang +++ b/opendaylight/config/threadpool-config-api/src/main/yang/threadpool.yang @@ -82,6 +82,14 @@ module threadpool { base "config:service-type"; config:java-class "io.netty.channel.EventLoopGroup"; } + + identity netty-event-executor { + description + "Configuration wrapper around netty's event executor"; + + base "config:service-type"; + config:java-class "io.netty.util.concurrent.EventExecutor"; + } }