From: Moiz Raja Date: Thu, 4 Dec 2014 23:14:21 +0000 (+0000) Subject: Merge "Make neutron a simple osgi app" X-Git-Tag: release/lithium~801 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=7ce44a14175815c85189845c918454a037f0db10;hp=b1ad203b32b73fc06a856cdfae243986c8037617 Merge "Make neutron a simple osgi app" --- diff --git a/opendaylight/commons/opendaylight/pom.xml b/opendaylight/commons/opendaylight/pom.xml index 1030be5699..8596412de8 100644 --- a/opendaylight/commons/opendaylight/pom.xml +++ b/opendaylight/commons/opendaylight/pom.xml @@ -208,7 +208,6 @@ 0.5.0-SNAPSHOT 0.5.0-SNAPSHOT 0.5.0-SNAPSHOT - src/main/xtend-gen 2013.09.07.7-SNAPSHOT 1.1.0-SNAPSHOT 0.7.0-SNAPSHOT @@ -227,6 +226,13 @@ pom import + + org.opendaylight.controller + mdsal-artifacts + ${mdsal.version} + pom + import + org.opendaylight.controller netconf-artifacts @@ -752,11 +758,6 @@ - - org.eclipse.xtend - org.eclipse.xtend.lib - ${xtend.version} - org.glassfish.jersey.test-framework.providers jersey-test-framework-provider-grizzly2 @@ -1057,155 +1058,6 @@ sal ${sal.version} - - org.opendaylight.controller - sal-binding-api - ${mdsal.version} - - - org.opendaylight.controller - sal-binding-broker-impl - ${mdsal.version} - - - org.opendaylight.controller - sal-binding-config - ${mdsal.version} - - - org.opendaylight.controller - sal-binding-util - ${mdsal.version} - - - org.opendaylight.controller - sal-broker-impl - ${mdsal.version} - - - org.opendaylight.controller - sal-common - ${mdsal.version} - - - org.opendaylight.controller - sal-common-api - ${mdsal.version} - - - org.opendaylight.controller - sal-common-impl - ${mdsal.version} - - - org.opendaylight.controller - sal-common-util - ${mdsal.version} - - - org.opendaylight.controller - sal-inmemory-datastore - ${mdsal.version} - - - org.opendaylight.controller - sal-compatibility - ${mdsal.version} - - - org.opendaylight.controller - sal-connector-api - ${mdsal.version} - - - org.opendaylight.controller - sal-dom-xsql - ${mdsal.version} - - - org.opendaylight.controller - sal-karaf-xsql - ${mdsal.version} - - - org.opendaylight.controller - sal-dom-xsql-config - ${mdsal.version} - config - xml - - - org.opendaylight.controller - sal-core-api - ${mdsal.version} - - - org.opendaylight.controller - sal-core-spi - ${mdsal.version} - - - org.opendaylight.controller - sal-netconf-connector - ${mdsal.version} - - - org.opendaylight.controller - sal-remote - ${mdsal.version} - - - org.opendaylight.controller - sal-rest-connector - ${mdsal.version} - - - org.opendaylight.controller - sal-rest-connector-config - ${mdsal.version} - - - org.opendaylight.controller - md-sal-config - ${mdsal.version} - - - org.opendaylight.controller - sal-rest-docgen - ${mdsal.version} - - - org.opendaylight.controller - sal-restconf-broker - ${mdsal.version} - - - org.opendaylight.controller - sal-test-model - ${mdsal.version} - - - org.opendaylight.controller - sal-distributed-datastore - ${mdsal.version} - - - org.opendaylight.controller - sal-clustering-commons - ${mdsal.version} - - - org.opendaylight.controller - sal-clustering-config - ${mdsal.version} - - - - org.opendaylight.controller - sal-remoterpc-connector - ${mdsal.version} - - @@ -1349,77 +1201,7 @@ web ${web.version} - - org.opendaylight.controller.md - forwardingrules-manager - ${mdsal.version} - - - org.opendaylight.controller.md - inventory-manager - ${mdsal.version} - - - org.opendaylight.controller.md - statistics-manager - ${mdsal.version} - - - org.opendaylight.controller.md - topology-lldp-discovery - ${mdsal.version} - - - org.opendaylight.controller.md - topology-manager - ${mdsal.version} - - - org.opendaylight.controller.model - model-flow-base - ${mdsal.version} - - - org.opendaylight.controller.model - model-flow-service - ${mdsal.version} - - - org.opendaylight.controller.model - model-flow-statistics - ${mdsal.version} - - - org.opendaylight.controller.model - model-inventory - ${mdsal.version} - - - org.opendaylight.controller.model - model-topology - ${mdsal.version} - - - org.opendaylight.controller.samples - sample-toaster - ${mdsal.version} - - - org.opendaylight.controller.samples - sample-toaster-consumer - ${mdsal.version} - - - org.opendaylight.controller.samples - sample-toaster-provider - ${mdsal.version} - - - org.opendaylight.controller.samples - toaster-config - ${mdsal.version} - org.opendaylight.yangtools features-test @@ -1434,22 +1216,6 @@ xml runtime - - org.opendaylight.controller.samples - features-toaster - ${mdsal.version} - features - xml - runtime - - - org.opendaylight.controller - features-flow - ${mdsal.version} - features - xml - runtime - org.opendaylight.controller.thirdparty com.sun.jersey.jersey-servlet @@ -1539,19 +1305,6 @@ 0.1.0-SNAPSHOT test - - org.opendaylight.controller - sal-binding-broker-impl - ${mdsal.version} - test-jar - test - - - org.opendaylight.controller - sal-binding-it - ${mdsal.version} - test - org.opendaylight.controller features-protocol-framework @@ -1585,21 +1338,14 @@ runtime - org.opendaylight.controller - features-mdsal - ${mdsal.version} - features - xml - runtime - - org.opendaylight.controller features-netconf-connector ${mdsal.version} features xml runtime - + + org.openjdk.jmh @@ -1637,12 +1383,6 @@ maven-clean-plugin - - ${xtend.dstdir} - - ** - - ${jmxGeneratorPath} @@ -1756,7 +1496,6 @@ src/main/yang ${jmxGeneratorPath} ${salGeneratorPath} - ${xtend.dstdir} @@ -1898,21 +1637,6 @@ - - org.eclipse.xtend - xtend-maven-plugin - ${xtend.version} - - - - compile - - - ${xtend.dstdir} - - - - org.jacoco jacoco-maven-plugin @@ -1973,7 +1697,7 @@ true ${project.basedir} **\/*.java,**\/*.xml,**\/*.ini,**\/*.sh,**\/*.bat - **\/target\/,**\/bin\/,**\/target-ide\/,**\/${jmxGeneratorPath}\/,**\/${salGeneratorPath}\/,**\/xtend-gen\/,**\/protobuff\/ + **\/target\/,**\/bin\/,**\/target-ide\/,**\/${jmxGeneratorPath}\/,**\/${salGeneratorPath}\/,**\/protobuff\/ diff --git a/opendaylight/commons/protocol-framework/src/test/java/org/opendaylight/controller/config/yang/protocol/framework/NeverReconnectStrategyModuleTest.java b/opendaylight/commons/protocol-framework/src/test/java/org/opendaylight/controller/config/yang/protocol/framework/NeverReconnectStrategyModuleTest.java index 1148c6bebe..77589ed81d 100644 --- a/opendaylight/commons/protocol-framework/src/test/java/org/opendaylight/controller/config/yang/protocol/framework/NeverReconnectStrategyModuleTest.java +++ b/opendaylight/commons/protocol-framework/src/test/java/org/opendaylight/controller/config/yang/protocol/framework/NeverReconnectStrategyModuleTest.java @@ -76,7 +76,7 @@ public class NeverReconnectStrategyModuleTest extends AbstractConfigTest { createInstance(); final ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction(); assertBeanCount(1, FACTORY_NAME); - final NeverReconnectStrategyFactoryModuleMXBean mxBean = transaction.newMBeanProxy( + final NeverReconnectStrategyFactoryModuleMXBean mxBean = transaction.newMXBeanProxy( transaction.lookupConfigBean(FACTORY_NAME, INSTANCE_NAME), NeverReconnectStrategyFactoryModuleMXBean.class); mxBean.setTimeout(200); final CommitStatus status = transaction.commit(); @@ -98,7 +98,7 @@ public class NeverReconnectStrategyModuleTest extends AbstractConfigTest { private static ObjectName createInstance(final ConfigTransactionJMXClient transaction, final Integer timeout) throws InstanceAlreadyExistsException { final ObjectName nameCreated = transaction.createModule(FACTORY_NAME, INSTANCE_NAME); - final NeverReconnectStrategyFactoryModuleMXBean mxBean = transaction.newMBeanProxy(nameCreated, + final NeverReconnectStrategyFactoryModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, NeverReconnectStrategyFactoryModuleMXBean.class); mxBean.setTimeout(timeout); mxBean.setExecutor(GlobalEventExecutorUtil.create(transaction)); diff --git a/opendaylight/commons/protocol-framework/src/test/java/org/opendaylight/controller/config/yang/protocol/framework/ReconnectImmediatelyStrategyModuleTest.java b/opendaylight/commons/protocol-framework/src/test/java/org/opendaylight/controller/config/yang/protocol/framework/ReconnectImmediatelyStrategyModuleTest.java index cfdf3bff28..7e3ed5b2de 100644 --- a/opendaylight/commons/protocol-framework/src/test/java/org/opendaylight/controller/config/yang/protocol/framework/ReconnectImmediatelyStrategyModuleTest.java +++ b/opendaylight/commons/protocol-framework/src/test/java/org/opendaylight/controller/config/yang/protocol/framework/ReconnectImmediatelyStrategyModuleTest.java @@ -75,7 +75,7 @@ public class ReconnectImmediatelyStrategyModuleTest extends AbstractConfigTest { createInstance(); final ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction(); assertBeanCount(1, FACTORY_NAME); - final ReconnectImmediatelyStrategyFactoryModuleMXBean mxBean = transaction.newMBeanProxy( + final ReconnectImmediatelyStrategyFactoryModuleMXBean mxBean = transaction.newMXBeanProxy( transaction.lookupConfigBean(FACTORY_NAME, INSTANCE_NAME), ReconnectImmediatelyStrategyFactoryModuleMXBean.class); mxBean.setReconnectTimeout(200); @@ -97,7 +97,7 @@ public class ReconnectImmediatelyStrategyModuleTest extends AbstractConfigTest { private static ObjectName createInstance(final ConfigTransactionJMXClient transaction, final Integer timeout) throws InstanceAlreadyExistsException { final ObjectName nameCreated = transaction.createModule(FACTORY_NAME, INSTANCE_NAME); - final ReconnectImmediatelyStrategyFactoryModuleMXBean mxBean = transaction.newMBeanProxy(nameCreated, + final ReconnectImmediatelyStrategyFactoryModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, ReconnectImmediatelyStrategyFactoryModuleMXBean.class); mxBean.setReconnectTimeout(timeout); mxBean.setReconnectExecutor(GlobalEventExecutorUtil.create(transaction)); diff --git a/opendaylight/commons/protocol-framework/src/test/java/org/opendaylight/controller/config/yang/protocol/framework/TimedReconnectStrategyModuleTest.java b/opendaylight/commons/protocol-framework/src/test/java/org/opendaylight/controller/config/yang/protocol/framework/TimedReconnectStrategyModuleTest.java index 1c068a98e7..ec8a9d6f29 100644 --- a/opendaylight/commons/protocol-framework/src/test/java/org/opendaylight/controller/config/yang/protocol/framework/TimedReconnectStrategyModuleTest.java +++ b/opendaylight/commons/protocol-framework/src/test/java/org/opendaylight/controller/config/yang/protocol/framework/TimedReconnectStrategyModuleTest.java @@ -117,7 +117,7 @@ public class TimedReconnectStrategyModuleTest extends AbstractConfigTest { createInstance(); final ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction(); assertBeanCount(1, FACTORY_NAME); - final TimedReconnectStrategyFactoryModuleMXBean mxBean = transaction.newMBeanProxy( + final TimedReconnectStrategyFactoryModuleMXBean mxBean = transaction.newMXBeanProxy( transaction.lookupConfigBean(FACTORY_NAME, INSTANCE_NAME), TimedReconnectStrategyFactoryModuleMXBean.class); assertEquals(mxBean.getMinSleep(), new Long(100)); mxBean.setMinSleep(200L); @@ -149,7 +149,7 @@ public class TimedReconnectStrategyModuleTest extends AbstractConfigTest { final Integer connectTime, final Long minSleep, final BigDecimal sleepFactor, final Long maxSleep, final Long maxAttempts, final Long deadline) throws InstanceAlreadyExistsException { final ObjectName nameCreated = transaction.createModule(FACTORY_NAME, instanceName); - final TimedReconnectStrategyFactoryModuleMXBean mxBean = transaction.newMBeanProxy(nameCreated, + final TimedReconnectStrategyFactoryModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, TimedReconnectStrategyFactoryModuleMXBean.class); mxBean.setConnectTime(connectTime); mxBean.setDeadline(deadline); diff --git a/opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/testingservices/parallelapsp/test/DependentWiringTest.java b/opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/testingservices/parallelapsp/test/DependentWiringTest.java index 598e6bffee..fd8c8d1df0 100644 --- a/opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/testingservices/parallelapsp/test/DependentWiringTest.java +++ b/opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/testingservices/parallelapsp/test/DependentWiringTest.java @@ -108,7 +108,7 @@ public class DependentWiringTest extends AbstractParallelAPSPTest { // test reported apsp number of threads TestingParallelAPSPConfigMXBean parallelAPSPRuntimeProxy = configRegistryClient - .newMBeanProxy(apspON, TestingParallelAPSPConfigMXBean.class); + .newMXBeanProxy(apspON, TestingParallelAPSPConfigMXBean.class); assertEquals( (Integer) TestingParallelAPSPImpl.MINIMAL_NUMBER_OF_THREADS, parallelAPSPRuntimeProxy.getMaxNumberOfThreads()); diff --git a/opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/testingservices/scheduledthreadpool/test/TwoInterfacesExportTest.java b/opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/testingservices/scheduledthreadpool/test/TwoInterfacesExportTest.java index fcefd06e4d..0e6a54fdc9 100644 --- a/opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/testingservices/scheduledthreadpool/test/TwoInterfacesExportTest.java +++ b/opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/testingservices/scheduledthreadpool/test/TwoInterfacesExportTest.java @@ -15,10 +15,11 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import javax.annotation.Nullable; -import javax.management.DynamicMBean; import javax.management.InstanceAlreadyExistsException; import javax.management.InstanceNotFoundException; +import javax.management.IntrospectionException; import javax.management.ObjectName; +import javax.management.ReflectionException; import org.junit.Test; import org.opendaylight.controller.config.api.ValidationException; import org.opendaylight.controller.config.api.jmx.ObjectNameUtil; @@ -37,20 +38,17 @@ public class TwoInterfacesExportTest extends AbstractScheduledTest { private void assertExists(@Nullable final ConfigTransactionJMXClient transaction, final String moduleName, final String instanceName) - throws InstanceNotFoundException { + throws InstanceNotFoundException, IntrospectionException, ReflectionException { if (transaction != null) { transaction.lookupConfigBean(moduleName, instanceName); // make a dummy call - configRegistryClient.newMBeanProxy( - ObjectNameUtil.createTransactionModuleON( - transaction.getTransactionName(), moduleName, - instanceName), DynamicMBean.class).getMBeanInfo(); + platformMBeanServer.getMBeanInfo(ObjectNameUtil.createTransactionModuleON( + transaction.getTransactionName(), moduleName, instanceName)); } else { configRegistryClient.lookupConfigBean(moduleName, instanceName); // make a dummy call - configRegistryClient.newMBeanProxy( - ObjectNameUtil.createReadOnlyModuleON(moduleName, - instanceName), DynamicMBean.class).getMBeanInfo(); + platformMBeanServer.getMBeanInfo(ObjectNameUtil.createReadOnlyModuleON(moduleName, + instanceName)); } } @@ -173,7 +171,7 @@ public class TwoInterfacesExportTest extends AbstractScheduledTest { ObjectName apspName = transaction.createModule( TestingParallelAPSPModuleFactory.NAME, "apsp1"); - TestingParallelAPSPConfigMXBean apspProxy = transaction.newMBeanProxy( + TestingParallelAPSPConfigMXBean apspProxy = transaction.newMXBeanProxy( apspName, TestingParallelAPSPConfigMXBean.class); apspProxy.setThreadPool(scheduledName); apspProxy.setSomeParam("someParam"); @@ -190,7 +188,7 @@ public class TwoInterfacesExportTest extends AbstractScheduledTest { ObjectName apspName = transaction.createModule( TestingParallelAPSPModuleFactory.NAME, "apsp1"); - TestingParallelAPSPConfigMXBean apspProxy = transaction.newMBeanProxy( + TestingParallelAPSPConfigMXBean apspProxy = transaction.newMXBeanProxy( apspName, TestingParallelAPSPConfigMXBean.class); apspProxy.setThreadPool(ObjectNameUtil.createReadOnlyModuleON( TestingScheduledThreadPoolModuleFactory.NAME, scheduled1)); diff --git a/opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/testingservices/threadpool/test/SimpleConfigurationTest.java b/opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/testingservices/threadpool/test/SimpleConfigurationTest.java index 4ed10036f7..c20d3bfc04 100644 --- a/opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/testingservices/threadpool/test/SimpleConfigurationTest.java +++ b/opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/testingservices/threadpool/test/SimpleConfigurationTest.java @@ -212,11 +212,9 @@ public class SimpleConfigurationTest extends AbstractConfigTest { ObjectName fixed1name = firstCommit(); // 2, check that configuration was copied to platform - DynamicMBean dynamicMBean = configRegistryClient.newMBeanProxy( - ObjectNameUtil.withoutTransactionName(fixed1name), - DynamicMBean.class); - dynamicMBean.getMBeanInfo(); - assertEquals(numberOfThreads, dynamicMBean.getAttribute("ThreadCount")); + ObjectName on = ObjectNameUtil.withoutTransactionName(fixed1name); + platformMBeanServer.getMBeanInfo(on); + assertEquals(numberOfThreads, platformMBeanServer.getAttribute(on, "ThreadCount")); // 3, shutdown fixed1 in new transaction assertFalse(TestingFixedThreadPool.allExecutors.get(0).isShutdown()); @@ -249,10 +247,10 @@ public class SimpleConfigurationTest extends AbstractConfigTest { // dynamic config should be removed from platform try { - dynamicMBean.getMBeanInfo(); + platformMBeanServer.getMBeanInfo(on); fail(); } catch (Exception e) { - assertTrue(e.getCause() instanceof InstanceNotFoundException); + assertTrue(e instanceof InstanceNotFoundException); } } diff --git a/opendaylight/config/logback-config/src/main/java/org/opendaylight/controller/config/yang/logback/config/ContextSetterImpl.java b/opendaylight/config/logback-config/src/main/java/org/opendaylight/controller/config/yang/logback/config/ContextSetterImpl.java index 087648cae7..9abf6450c3 100644 --- a/opendaylight/config/logback-config/src/main/java/org/opendaylight/controller/config/yang/logback/config/ContextSetterImpl.java +++ b/opendaylight/config/logback-config/src/main/java/org/opendaylight/controller/config/yang/logback/config/ContextSetterImpl.java @@ -35,7 +35,7 @@ import org.slf4j.LoggerFactory; public class ContextSetterImpl implements ContextSetter, Closeable { private final LogbackStatusListener statusListener; - private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(ContextSetterImpl.class); + private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(ContextSetterImpl.class); public ContextSetterImpl(final LogbackRuntimeRegistrator rootRuntimeBeanRegistratorWrapper) { statusListener = new LogbackStatusListener(rootRuntimeBeanRegistratorWrapper); @@ -81,11 +81,11 @@ public class ContextSetterImpl implements ContextSetter, Closeable { Map> appendersMap = getAppenders(module, context); for (LoggerTO logger : module.getLoggerTO()) { - LOGGER.trace("Setting configuration for logger {}", logger.getLoggerName()); + LOG.trace("Setting configuration for logger {}", logger.getLoggerName()); final ch.qos.logback.classic.Logger logbackLogger = context.getLogger(logger.getLoggerName()); Optional>> appendersBefore = getAppendersBefore(loggersBefore, logbackLogger); - LOGGER.trace("Logger {}: Appenders registered before: {}", logger.getLoggerName(), + LOG.trace("Logger {}: Appenders registered before: {}", logger.getLoggerName(), appendersBefore.isPresent() ? appendersBefore.get() : "NO APPENDERS BEFORE"); logbackLogger.setLevel(Level.toLevel(logger.getLevel())); @@ -101,7 +101,7 @@ public class ContextSetterImpl implements ContextSetter, Closeable { for (String appenderName : logger.getAppenders()) { if (appendersMap.containsKey(appenderName)) { logbackLogger.addAppender(appendersMap.get(appenderName)); - LOGGER.trace("Logger {}: Adding new appender: {}", logger.getLoggerName(), appenderName); + LOG.trace("Logger {}: Adding new appender: {}", logger.getLoggerName(), appenderName); } else { throw new IllegalStateException("No appender " + appenderName + " found. This error should have been discovered by validation"); @@ -116,7 +116,7 @@ public class ContextSetterImpl implements ContextSetter, Closeable { for (Appender appenderBefore : appendersBefore.get()) { logbackLogger.detachAppender(appenderBefore); appenderBefore.stop(); - LOGGER.trace("Logger {}: Removing old appender: {}", logger.getLoggerName(), + LOG.trace("Logger {}: Removing old appender: {}", logger.getLoggerName(), appenderBefore.getName()); } loggersBefore.remove(logbackLogger); diff --git a/opendaylight/config/logback-config/src/main/java/org/opendaylight/controller/config/yang/logback/config/LogbackModule.java b/opendaylight/config/logback-config/src/main/java/org/opendaylight/controller/config/yang/logback/config/LogbackModule.java index adc69fe31e..0078120d8c 100644 --- a/opendaylight/config/logback-config/src/main/java/org/opendaylight/controller/config/yang/logback/config/LogbackModule.java +++ b/opendaylight/config/logback-config/src/main/java/org/opendaylight/controller/config/yang/logback/config/LogbackModule.java @@ -16,13 +16,11 @@ */ package org.opendaylight.controller.config.yang.logback.config; +import com.google.common.collect.Sets; import java.util.Set; - import org.opendaylight.controller.config.api.JmxAttribute; import org.opendaylight.controller.config.api.JmxAttributeValidationException; -import com.google.common.collect.Sets; - /** * */ diff --git a/opendaylight/config/logback-config/src/main/java/org/opendaylight/controller/config/yang/logback/config/LogbackStatusListener.java b/opendaylight/config/logback-config/src/main/java/org/opendaylight/controller/config/yang/logback/config/LogbackStatusListener.java index e8d161afbb..8111136cfc 100644 --- a/opendaylight/config/logback-config/src/main/java/org/opendaylight/controller/config/yang/logback/config/LogbackStatusListener.java +++ b/opendaylight/config/logback-config/src/main/java/org/opendaylight/controller/config/yang/logback/config/LogbackStatusListener.java @@ -17,19 +17,17 @@ */ package org.opendaylight.controller.config.yang.logback.config; +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.core.status.StatusBase; +import ch.qos.logback.core.status.StatusListener; +import ch.qos.logback.core.status.StatusManager; import java.io.Closeable; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; - import org.slf4j.LoggerFactory; -import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.core.status.StatusBase; -import ch.qos.logback.core.status.StatusListener; -import ch.qos.logback.core.status.StatusManager; - public class LogbackStatusListener implements StatusListener, LogbackRuntimeMXBean, Closeable { private final List receivedStatuses; diff --git a/opendaylight/config/logback-config/src/test/java/org/opendaylight/controller/config/yang/logback/config/ContextSetterImplTest.java b/opendaylight/config/logback-config/src/test/java/org/opendaylight/controller/config/yang/logback/config/ContextSetterImplTest.java index 4ba4a02920..82bc586486 100644 --- a/opendaylight/config/logback-config/src/test/java/org/opendaylight/controller/config/yang/logback/config/ContextSetterImplTest.java +++ b/opendaylight/config/logback-config/src/test/java/org/opendaylight/controller/config/yang/logback/config/ContextSetterImplTest.java @@ -13,10 +13,15 @@ import static org.mockito.Matchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.Appender; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Lists; +import com.google.common.collect.Multimap; import java.util.Collection; import java.util.Iterator; import java.util.List; - import org.junit.Before; import org.junit.Test; import org.mockito.Mock; @@ -25,14 +30,6 @@ import org.opendaylight.controller.config.api.DependencyResolver; import org.opendaylight.controller.config.api.ModuleIdentifier; import org.slf4j.LoggerFactory; -import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.spi.ILoggingEvent; -import ch.qos.logback.core.Appender; - -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Lists; -import com.google.common.collect.Multimap; - public class ContextSetterImplTest { @Mock @@ -154,4 +151,5 @@ public class ContextSetterImplTest { a.setEncoderPattern("%-4relative [%thread] %-5level %logger{35} - %msg%n"); return a; } + } diff --git a/opendaylight/config/logback-config/src/test/java/org/opendaylight/controller/config/yang/logback/config/LogbackModuleTest.java b/opendaylight/config/logback-config/src/test/java/org/opendaylight/controller/config/yang/logback/config/LogbackModuleTest.java index 9e07cc68cb..d190f04e61 100644 --- a/opendaylight/config/logback-config/src/test/java/org/opendaylight/controller/config/yang/logback/config/LogbackModuleTest.java +++ b/opendaylight/config/logback-config/src/test/java/org/opendaylight/controller/config/yang/logback/config/LogbackModuleTest.java @@ -148,7 +148,7 @@ public class LogbackModuleTest extends AbstractConfigTest { try { createBeans( - true, "target/rollingApp", "", "30MB", 1, 5, "target/%i.log", "rolling", "consoleName", "ALL", "logger1", + true, "target/rollingApp", "", "30MB", 1, 5, "target/%i.log", "rolling", "consoleName", "ALL", "logger1", "DEBUG", "FixedWindowRollingPolicy", 0, "FileAppender").commit(); fail(); } catch (ValidationException e) { diff --git a/opendaylight/config/logback-config/src/test/java/org/opendaylight/controller/config/yang/logback/config/LogbackModuleWithInitialConfigurationTest.java b/opendaylight/config/logback-config/src/test/java/org/opendaylight/controller/config/yang/logback/config/LogbackModuleWithInitialConfigurationTest.java index 37bfb6d957..999d8346e6 100644 --- a/opendaylight/config/logback-config/src/test/java/org/opendaylight/controller/config/yang/logback/config/LogbackModuleWithInitialConfigurationTest.java +++ b/opendaylight/config/logback-config/src/test/java/org/opendaylight/controller/config/yang/logback/config/LogbackModuleWithInitialConfigurationTest.java @@ -7,6 +7,8 @@ */ package org.opendaylight.controller.config.yang.logback.config; +import static org.junit.Assert.assertEquals; + import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.encoder.PatternLayoutEncoder; import ch.qos.logback.classic.joran.JoranConfigurator; @@ -15,6 +17,17 @@ import ch.qos.logback.core.joran.spi.JoranException; import ch.qos.logback.core.rolling.FixedWindowRollingPolicy; import ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy; import com.google.common.collect.Lists; +import java.io.File; +import java.io.IOException; +import java.lang.management.ManagementFactory; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import javax.management.InstanceAlreadyExistsException; +import javax.management.InstanceNotFoundException; +import javax.management.JMX; +import javax.management.MalformedObjectNameException; +import javax.management.ObjectName; import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Test; @@ -27,20 +40,6 @@ import org.opendaylight.controller.config.util.ConfigTransactionClient; import org.opendaylight.controller.config.util.ConfigTransactionJMXClient; import org.slf4j.LoggerFactory; -import javax.management.InstanceAlreadyExistsException; -import javax.management.InstanceNotFoundException; -import javax.management.JMX; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import java.io.File; -import java.io.IOException; -import java.lang.management.ManagementFactory; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import static org.junit.Assert.assertEquals; - public class LogbackModuleWithInitialConfigurationTest extends AbstractConfigTest { private LogbackModuleFactory factory; diff --git a/opendaylight/config/logback-config/src/test/java/org/opendaylight/controller/config/yang/logback/config/LogbackWithXmlConfigModuleTest.java b/opendaylight/config/logback-config/src/test/java/org/opendaylight/controller/config/yang/logback/config/LogbackWithXmlConfigModuleTest.java index 3c21e57f6e..9fcd38976e 100644 --- a/opendaylight/config/logback-config/src/test/java/org/opendaylight/controller/config/yang/logback/config/LogbackWithXmlConfigModuleTest.java +++ b/opendaylight/config/logback-config/src/test/java/org/opendaylight/controller/config/yang/logback/config/LogbackWithXmlConfigModuleTest.java @@ -7,10 +7,21 @@ */ package org.opendaylight.controller.config.yang.logback.config; +import static org.junit.Assert.assertEquals; + import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.joran.JoranConfigurator; import ch.qos.logback.core.joran.spi.JoranException; import com.google.common.collect.Lists; +import java.io.File; +import java.io.IOException; +import java.lang.management.ManagementFactory; +import java.util.List; +import javax.management.InstanceAlreadyExistsException; +import javax.management.InstanceNotFoundException; +import javax.management.JMX; +import javax.management.MalformedObjectNameException; +import javax.management.ObjectName; import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Test; @@ -21,18 +32,6 @@ import org.opendaylight.controller.config.manager.impl.factoriesresolver.Hardcod import org.opendaylight.controller.config.util.ConfigTransactionJMXClient; import org.slf4j.LoggerFactory; -import javax.management.InstanceAlreadyExistsException; -import javax.management.InstanceNotFoundException; -import javax.management.JMX; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import java.io.File; -import java.io.IOException; -import java.lang.management.ManagementFactory; -import java.util.List; - -import static org.junit.Assert.assertEquals; - public class LogbackWithXmlConfigModuleTest extends AbstractConfigTest { private LogbackModuleFactory factory; 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..d3f43da4bf 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,7 +10,6 @@ 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 java.lang.reflect.Method; import java.util.concurrent.TimeUnit; 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 index 1585bbf6de..1ca57c637f 100644 --- 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 @@ -17,11 +17,11 @@ */ package org.opendaylight.controller.config.yang.netty.eventexecutor; +import static com.google.common.base.Preconditions.checkArgument; + import org.opendaylight.controller.config.api.DependencyResolver; import org.osgi.framework.BundleContext; -import static com.google.common.base.Preconditions.checkArgument; - public class GlobalEventExecutorModuleFactory extends org.opendaylight.controller.config.yang.netty.eventexecutor.AbstractGlobalEventExecutorModuleFactory { public static final String SINGLETON_NAME = "singleton"; diff --git a/opendaylight/config/netty-event-executor-config/src/main/java/org/opendaylight/controller/config/yang/netty/eventexecutor/ImmediateEventExecutorModuleFactory.java b/opendaylight/config/netty-event-executor-config/src/main/java/org/opendaylight/controller/config/yang/netty/eventexecutor/ImmediateEventExecutorModuleFactory.java index b3ec67bbf5..2a804eb40e 100644 --- a/opendaylight/config/netty-event-executor-config/src/main/java/org/opendaylight/controller/config/yang/netty/eventexecutor/ImmediateEventExecutorModuleFactory.java +++ b/opendaylight/config/netty-event-executor-config/src/main/java/org/opendaylight/controller/config/yang/netty/eventexecutor/ImmediateEventExecutorModuleFactory.java @@ -7,11 +7,11 @@ */ package org.opendaylight.controller.config.yang.netty.eventexecutor; +import static com.google.common.base.Preconditions.checkArgument; + import org.opendaylight.controller.config.api.DependencyResolver; import org.osgi.framework.BundleContext; -import static com.google.common.base.Preconditions.checkArgument; - public class ImmediateEventExecutorModuleFactory extends org.opendaylight.controller.config.yang.netty.eventexecutor.AbstractImmediateEventExecutorModuleFactory { public static final String SINGLETON_NAME = "singleton"; 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 index e89d82a28f..8fe3d7c24c 100644 --- 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 @@ -8,6 +8,11 @@ package org.opendaylight.controller.config.yang.netty.eventexecutor; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import javax.management.InstanceAlreadyExistsException; +import javax.management.ObjectName; import org.junit.Before; import org.junit.Test; import org.opendaylight.controller.config.api.ConflictingVersionException; @@ -17,12 +22,6 @@ import org.opendaylight.controller.config.manager.impl.AbstractConfigTest; import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver; import org.opendaylight.controller.config.util.ConfigTransactionJMXClient; -import javax.management.InstanceAlreadyExistsException; -import javax.management.ObjectName; - -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - public class GlobalEventExecutorModuleTest extends AbstractConfigTest { private GlobalEventExecutorModuleFactory factory; @@ -79,7 +78,7 @@ public class GlobalEventExecutorModuleTest extends AbstractConfigTest { private ObjectName createInstance(ConfigTransactionJMXClient transaction, String instanceName) throws InstanceAlreadyExistsException { ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName); - transaction.newMBeanProxy(nameCreated, GlobalEventExecutorModuleMXBean.class); + transaction.newMXBeanProxy(nameCreated, GlobalEventExecutorModuleMXBean.class); return nameCreated; } diff --git a/opendaylight/config/netty-event-executor-config/src/test/java/org/opendaylight/controller/config/yang/netty/eventexecutor/ImmediateEventExecutorModuleTest.java b/opendaylight/config/netty-event-executor-config/src/test/java/org/opendaylight/controller/config/yang/netty/eventexecutor/ImmediateEventExecutorModuleTest.java index 54c87604a4..d280bcac58 100644 --- a/opendaylight/config/netty-event-executor-config/src/test/java/org/opendaylight/controller/config/yang/netty/eventexecutor/ImmediateEventExecutorModuleTest.java +++ b/opendaylight/config/netty-event-executor-config/src/test/java/org/opendaylight/controller/config/yang/netty/eventexecutor/ImmediateEventExecutorModuleTest.java @@ -64,7 +64,7 @@ public class ImmediateEventExecutorModuleTest extends AbstractConfigTest { private ObjectName createInstance(ConfigTransactionJMXClient transaction, String instanceName) throws InstanceAlreadyExistsException { ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName); - transaction.newMBeanProxy(nameCreated, ImmediateEventExecutorModuleMXBean.class); + transaction.newMXBeanProxy(nameCreated, ImmediateEventExecutorModuleMXBean.class); return nameCreated; } diff --git a/opendaylight/config/netty-threadgroup-config/src/main/java/org/opendaylight/controller/config/yang/netty/threadgroup/NettyThreadgroupModule.java b/opendaylight/config/netty-threadgroup-config/src/main/java/org/opendaylight/controller/config/yang/netty/threadgroup/NettyThreadgroupModule.java index 06c9ae885d..c5b726cd3c 100644 --- a/opendaylight/config/netty-threadgroup-config/src/main/java/org/opendaylight/controller/config/yang/netty/threadgroup/NettyThreadgroupModule.java +++ b/opendaylight/config/netty-threadgroup-config/src/main/java/org/opendaylight/controller/config/yang/netty/threadgroup/NettyThreadgroupModule.java @@ -18,10 +18,8 @@ package org.opendaylight.controller.config.yang.netty.threadgroup; import io.netty.channel.nio.NioEventLoopGroup; - -import org.opendaylight.controller.config.api.JmxAttributeValidationException; - import java.util.concurrent.TimeUnit; +import org.opendaylight.controller.config.api.JmxAttributeValidationException; /** * diff --git a/opendaylight/config/netty-threadgroup-config/src/test/java/org/opendaylight/controller/config/yang/netty/threadgroup/NettyThreadgroupModuleTest.java b/opendaylight/config/netty-threadgroup-config/src/test/java/org/opendaylight/controller/config/yang/netty/threadgroup/NettyThreadgroupModuleTest.java index 76134b025c..ceefcda6de 100644 --- a/opendaylight/config/netty-threadgroup-config/src/test/java/org/opendaylight/controller/config/yang/netty/threadgroup/NettyThreadgroupModuleTest.java +++ b/opendaylight/config/netty-threadgroup-config/src/test/java/org/opendaylight/controller/config/yang/netty/threadgroup/NettyThreadgroupModuleTest.java @@ -7,6 +7,9 @@ */ package org.opendaylight.controller.config.yang.netty.threadgroup; +import javax.management.InstanceAlreadyExistsException; +import javax.management.InstanceNotFoundException; +import javax.management.ObjectName; import org.junit.Before; import org.junit.Test; import org.opendaylight.controller.config.api.ConflictingVersionException; @@ -16,10 +19,6 @@ import org.opendaylight.controller.config.manager.impl.AbstractConfigTest; import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver; import org.opendaylight.controller.config.util.ConfigTransactionJMXClient; -import javax.management.InstanceAlreadyExistsException; -import javax.management.InstanceNotFoundException; -import javax.management.ObjectName; - public class NettyThreadgroupModuleTest extends AbstractConfigTest { private NettyThreadgroupModuleFactory factory; diff --git a/opendaylight/config/pom.xml b/opendaylight/config/pom.xml index ad2607a8db..fc447aa7f9 100644 --- a/opendaylight/config/pom.xml +++ b/opendaylight/config/pom.xml @@ -151,7 +151,10 @@ true ${project.basedir} **\/*.java,**\/*.xml,**\/*.ini,**\/*.sh,**\/*.bat,**\/*.yang - **\/target\/,**\/bin\/,**\/target-ide\/,**\/${jmxGeneratorPath}\/,**\/${salGeneratorPath}\/ + + **\/logback-config\/,**\/target\/,**\/bin\/,**\/target-ide\/,**\/${jmxGeneratorPath}\/,**\/${salGeneratorPath}\/ diff --git a/opendaylight/md-sal/benchmark-data-store/src/main/java/org/opendaylight/controller/md/sal/dom/store/benchmark/InMemoryBrokerWriteTransactionBenchmark.java b/opendaylight/md-sal/benchmark-data-store/src/main/java/org/opendaylight/controller/md/sal/dom/store/benchmark/InMemoryBrokerWriteTransactionBenchmark.java index 276f4ec2d0..e6a1642703 100644 --- a/opendaylight/md-sal/benchmark-data-store/src/main/java/org/opendaylight/controller/md/sal/dom/store/benchmark/InMemoryBrokerWriteTransactionBenchmark.java +++ b/opendaylight/md-sal/benchmark-data-store/src/main/java/org/opendaylight/controller/md/sal/dom/store/benchmark/InMemoryBrokerWriteTransactionBenchmark.java @@ -15,7 +15,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.dom.broker.impl.DOMDataBrokerImpl; +import org.opendaylight.controller.md.sal.dom.broker.impl.SerializedDOMDataBroker; import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore; import org.opendaylight.controller.sal.core.spi.data.DOMStore; import org.openjdk.jmh.annotations.BenchmarkMode; @@ -47,7 +47,7 @@ public class InMemoryBrokerWriteTransactionBenchmark extends AbstractInMemoryBro LogicalDatastoreType.OPERATIONAL, (DOMStore)operStore, LogicalDatastoreType.CONFIGURATION, configStore); - domBroker = new DOMDataBrokerImpl(datastores, executor); + domBroker = new SerializedDOMDataBroker(datastores, executor); schemaContext = BenchmarkModel.createTestContext(); configStore.onGlobalContextUpdated(schemaContext); operStore.onGlobalContextUpdated(schemaContext); diff --git a/opendaylight/md-sal/forwardingrules-manager/src/test/java/test/mock/util/DataBrokerTestCustomizer.java b/opendaylight/md-sal/forwardingrules-manager/src/test/java/test/mock/util/DataBrokerTestCustomizer.java index 30704997f3..de7d33e694 100644 --- a/opendaylight/md-sal/forwardingrules-manager/src/test/java/test/mock/util/DataBrokerTestCustomizer.java +++ b/opendaylight/md-sal/forwardingrules-manager/src/test/java/test/mock/util/DataBrokerTestCustomizer.java @@ -17,7 +17,7 @@ import org.opendaylight.controller.md.sal.binding.impl.ForwardedBackwardsCompati import org.opendaylight.controller.md.sal.binding.impl.ForwardedBindingDataBroker; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; -import org.opendaylight.controller.md.sal.dom.broker.impl.DOMDataBrokerImpl; +import org.opendaylight.controller.md.sal.dom.broker.impl.SerializedDOMDataBroker; import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore; import org.opendaylight.controller.sal.core.api.model.SchemaService; import org.opendaylight.controller.sal.core.spi.data.DOMStore; @@ -68,7 +68,7 @@ public class DataBrokerTestCustomizer { } public DOMDataBroker createDOMDataBroker() { - return new DOMDataBrokerImpl(getDatastores(), getCommitCoordinatorExecutor()); + return new SerializedDOMDataBroker(getDatastores(), getCommitCoordinatorExecutor()); } public ListeningExecutorService getCommitCoordinatorExecutor() { diff --git a/opendaylight/md-sal/mdsal-artifacts/pom.xml b/opendaylight/md-sal/mdsal-artifacts/pom.xml new file mode 100644 index 0000000000..c765aa87a8 --- /dev/null +++ b/opendaylight/md-sal/mdsal-artifacts/pom.xml @@ -0,0 +1,302 @@ + + + + + + 4.0.0 + org.opendaylight.controller + mdsal-artifacts + 1.2.0-SNAPSHOT + pom + + + + + + ${project.groupId} + sal-common + ${project.version} + + + ${project.groupId} + sal-common-api + ${project.version} + + + ${project.groupId} + sal-common-impl + ${project.version} + + + ${project.groupId} + sal-common-util + ${project.version} + + + ${project.groupId} + sal-core-api + ${project.version} + + + ${project.groupId} + sal-core-spi + ${project.version} + + + ${project.groupId} + sal-broker-impl + ${project.version} + + + ${project.groupId} + sal-binding-api + ${project.version} + + + ${project.groupId} + sal-binding-broker-impl + ${project.version} + + + ${project.groupId} + sal-binding-config + ${project.version} + + + ${project.groupId} + sal-binding-util + ${project.version} + + + ${project.groupId} + sal-connector-api + ${project.version} + + + ${project.groupId} + sal-inmemory-datastore + ${project.version} + + + ${project.groupId} + md-sal-config + ${project.version} + + + + + ${project.groupId} + sal-test-model + ${project.version} + test + + + ${project.groupId} + sal-binding-it + ${project.version} + test + + + ${project.groupId} + sal-binding-broker-impl + ${project.version} + test-jar + test + + + + + ${project.groupId} + features-mdsal + ${project.version} + features + xml + runtime + + + + + ${project.groupId} + sal-netconf-connector + ${project.version} + + + + + + + ${project.groupId} + sal-compatibility + ${project.version} + + + + + org.opendaylight.controller.model + model-inventory + ${project.version} + + + org.opendaylight.controller.model + model-topology + ${project.version} + + + + + ${project.groupId} + sal-clustering-commons + ${project.version} + + + ${project.groupId} + sal-clustering-config + ${project.version} + + + ${project.groupId} + sal-distributed-datastore + ${project.version} + + + ${project.groupId} + sal-remoterpc-connector + ${project.version} + + + + + org.opendaylight.controller.md + forwardingrules-manager + ${project.version} + + + org.opendaylight.controller.md + inventory-manager + ${project.version} + + + org.opendaylight.controller.md + statistics-manager + ${project.version} + + + org.opendaylight.controller.md + topology-lldp-discovery + ${project.version} + + + org.opendaylight.controller.md + topology-manager + ${project.version} + + + org.opendaylight.controller.model + model-flow-base + ${project.version} + + + org.opendaylight.controller.model + model-flow-service + ${project.version} + + + org.opendaylight.controller.model + model-flow-statistics + ${project.version} + + + org.opendaylight.controller + features-flow + ${project.version} + features + xml + runtime + + + + + ${project.groupId} + sal-remote + ${project.version} + + + org.opendaylight.controller + sal-rest-connector + ${project.version} + + + org.opendaylight.controller + sal-rest-connector-config + ${project.version} + + + org.opendaylight.controller + sal-restconf-broker + ${project.version} + + + org.opendaylight.controller + sal-rest-docgen + ${project.version} + + + + + org.opendaylight.controller.samples + sample-toaster + ${project.version} + + + org.opendaylight.controller.samples + sample-toaster-consumer + ${project.version} + + + org.opendaylight.controller.samples + sample-toaster-provider + ${project.version} + + + org.opendaylight.controller.samples + toaster-config + ${project.version} + + + org.opendaylight.controller.samples + features-toaster + ${project.version} + features + xml + runtime + + + + + ${project.groupId} + sal-dom-xsql + ${project.version} + + + ${project.groupId} + sal-karaf-xsql + ${project.version} + + + ${project.groupId} + sal-dom-xsql-config + ${project.version} + config + xml + + + + + + diff --git a/opendaylight/md-sal/pom.xml b/opendaylight/md-sal/pom.xml index d21f16c478..6c87899eea 100644 --- a/opendaylight/md-sal/pom.xml +++ b/opendaylight/md-sal/pom.xml @@ -14,6 +14,8 @@ pom + mdsal-artifacts + sal-common sal-common-api @@ -159,11 +161,6 @@ - - org.eclipse.xtend - xtend-maven-plugin - ${xtend.version} - org.jacoco jacoco-maven-plugin diff --git a/opendaylight/md-sal/sal-binding-broker/pom.xml b/opendaylight/md-sal/sal-binding-broker/pom.xml index ade3e1b8f6..9346e223df 100644 --- a/opendaylight/md-sal/sal-binding-broker/pom.xml +++ b/opendaylight/md-sal/sal-binding-broker/pom.xml @@ -14,10 +14,6 @@ com.google.guava guava - - org.eclipse.xtend - org.eclipse.xtend.lib - org.javassist javassist @@ -161,10 +157,6 @@ - - org.eclipse.xtend - xtend-maven-plugin - org.jacoco jacoco-maven-plugin diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/DefaultRuntimeCodeGenerator.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/DefaultRuntimeCodeGenerator.java new file mode 100644 index 0000000000..dfa164b485 --- /dev/null +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/DefaultRuntimeCodeGenerator.java @@ -0,0 +1,286 @@ +/* + * Copyright (c) 2013 Cisco Systems, Inc. and others. 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 + */ +package org.opendaylight.controller.sal.binding.codegen.impl; + +import com.google.common.base.Supplier; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSet.Builder; +import java.lang.reflect.Method; +import java.util.Map; +import javassist.CannotCompileException; +import javassist.ClassPool; +import javassist.CtClass; +import javassist.CtMethod; +import javassist.NotFoundException; +import org.opendaylight.controller.sal.binding.codegen.RuntimeCodeSpecification; +import org.opendaylight.yangtools.sal.binding.generator.util.ClassGenerator; +import org.opendaylight.yangtools.sal.binding.generator.util.MethodGenerator; +import org.opendaylight.yangtools.util.ClassLoaderUtils; +import org.opendaylight.yangtools.yang.binding.BaseIdentity; +import org.opendaylight.yangtools.yang.binding.Notification; +import org.opendaylight.yangtools.yang.binding.NotificationListener; +import org.opendaylight.yangtools.yang.binding.RpcImplementation; +import org.opendaylight.yangtools.yang.binding.RpcService; +import org.opendaylight.yangtools.yang.binding.util.BindingReflections; + +final class DefaultRuntimeCodeGenerator extends AbstractRuntimeCodeGenerator { + + DefaultRuntimeCodeGenerator(final ClassPool pool) { + super(pool); + } + + @Override + protected Supplier directProxySupplier(final Class serviceType) { + return new Supplier() { + @SuppressWarnings("unchecked") + @Override + public T get() { + final String proxyName = RuntimeCodeSpecification.getDirectProxyName(serviceType); + + final Class potentialClass = ClassLoaderUtils.tryToLoadClassWithTCCL(proxyName); + if (potentialClass != null) { + try { + return (T)potentialClass.newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + throw new IllegalStateException("Failed to instantiate class " + potentialClass.getName(), e); + } + } + + final CtClass supertype = utils.asCtClass(serviceType); + final String directProxyName = RuntimeCodeSpecification.getDirectProxyName(serviceType); + + final CtClass createdCls; + try { + createdCls = utils.createClass(directProxyName, supertype, new ClassGenerator() { + @Override + public void process(final CtClass cls) throws CannotCompileException { + utils.field(cls, RuntimeCodeSpecification.DELEGATE_FIELD, serviceType); + utils.implementsType(cls, utils.asCtClass(RpcImplementation.class)); + utils.implementMethodsFrom(cls, supertype, new MethodGenerator() { + @Override + public void process(final CtMethod method) throws CannotCompileException { + final StringBuilder sb = new StringBuilder("\n"); + sb.append("{\n"); + sb.append(" if (").append(RuntimeCodeSpecification.DELEGATE_FIELD).append(" == null) {\n"); + sb.append(" throw new java.lang.IllegalStateException(\"No default provider is available\");\n"); + sb.append(" }\n"); + sb.append(" return ($r) ").append(RuntimeCodeSpecification.DELEGATE_FIELD).append('.').append(method.getName()).append("($$);\n"); + sb.append("}\n"); + method.setBody(sb.toString()); + } + }); + + // FIXME: copy this one... + utils.implementMethodsFrom(cls, utils.asCtClass(RpcImplementation.class), new MethodGenerator() { + @Override + public void process(final CtMethod method) throws CannotCompileException { + final StringBuilder sb = new StringBuilder("\n"); + sb.append("{\n"); + sb.append(" throw new java.lang.IllegalStateException(\"No provider is processing supplied message\");\n"); + sb.append(" return ($r) null;\n"); + sb.append("}\n"); + method.setBody(sb.toString()); + } + }); + } + }); + } catch (CannotCompileException e) { + throw new IllegalStateException("Failed to create class " + directProxyName, e); + } + + final Class c; + try { + c = createdCls.toClass(serviceType.getClassLoader(), serviceType.getProtectionDomain()); + } catch (CannotCompileException e) { + throw new IllegalStateException(String.format("Failed to create class %s", createdCls), e); + } + + try { + return (T) c.newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + throw new IllegalStateException(String.format("Failed to instantiated class %s", c), e); + } + } + }; + } + + @Override + protected Supplier routerSupplier(final Class serviceType, final RpcServiceMetadata metadata) { + return new Supplier() { + @SuppressWarnings("unchecked") + @Override + public T get() { + final CtClass supertype = utils.asCtClass(serviceType); + final String routerName = RuntimeCodeSpecification.getRouterName(serviceType); + final Class potentialClass = ClassLoaderUtils.tryToLoadClassWithTCCL(routerName); + if (potentialClass != null) { + try { + return (T)potentialClass.newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + throw new IllegalStateException("Failed to instantiate class", e); + } + } + + final CtClass targetCls; + try { + targetCls = utils.createClass(routerName, supertype, new ClassGenerator() { + @Override + public void process(final CtClass cls) throws CannotCompileException { + utils.field(cls, RuntimeCodeSpecification.DELEGATE_FIELD, serviceType); + //utils.field(cls, REMOTE_INVOKER_FIELD,iface); + utils.implementsType(cls, utils.asCtClass(RpcImplementation.class)); + + for (final Class ctx : metadata.getContexts()) { + utils.field(cls, RuntimeCodeSpecification.getRoutingTableField(ctx), Map.class); + } + + utils.implementMethodsFrom(cls, supertype, new MethodGenerator() { + @Override + public void process(final CtMethod method) throws CannotCompileException { + final int ptl; + try { + ptl = method.getParameterTypes().length; + } catch (NotFoundException e) { + throw new CannotCompileException(e); + } + final StringBuilder sb = new StringBuilder(); + + switch (ptl) { + case 0: + sb.append("return ($r) ").append(RuntimeCodeSpecification.DELEGATE_FIELD).append('.').append(method.getName()).append("($$);"); + break; + case 1: + final RpcMetadata rpcMeta = metadata.getRpcMethod(method.getName()); + final String rtGetter = rpcMeta.getInputRouteGetter().getName(); + final String stName = supertype.getName(); + + sb.append('\n'); + sb.append("{\n"); + sb.append(" if ($1 == null) {\n"); + sb.append(" throw new IllegalArgumentException(\"RPC input must not be null and must contain a value for field ").append(rtGetter).append("\");\n"); + sb.append(" }\n"); + sb.append(" if ($1.").append(rtGetter).append("() == null) {\n"); + sb.append(" throw new IllegalArgumentException(\"Field ").append(rtGetter).append(" must not be null\");\n"); + sb.append(" }\n"); + + sb.append(" final org.opendaylight.yangtools.yang.binding.InstanceIdentifier identifier = $1.").append(rtGetter).append("()"); + if (rpcMeta.isRouteEncapsulated()) { + sb.append(".getValue()"); + } + sb.append(";\n"); + + sb.append(" ").append(supertype.getName()).append(" instance = (").append(stName).append(") ").append(RuntimeCodeSpecification.getRoutingTableField(rpcMeta.getContext())).append(".get(identifier);\n"); + sb.append(" if (instance == null) {\n"); + sb.append(" instance = ").append(RuntimeCodeSpecification.DELEGATE_FIELD).append(";\n"); + sb.append(" }\n"); + + sb.append(" if (instance == null) {\n"); + sb.append(" throw new java.lang.IllegalStateException(\"No routable provider is processing routed message for \" + String.valueOf(identifier));\n"); + sb.append(" }\n"); + sb.append(" return ($r) instance.").append(method.getName()).append("($$);\n"); + sb.append('}'); + break; + default: + throw new CannotCompileException(String.format("Unsupported parameters length %s", ptl)); + } + + method.setBody(sb.toString()); + } + }); + + // FIXME: move this into a template class + utils.implementMethodsFrom(cls, utils.asCtClass(RpcImplementation.class), new MethodGenerator() { + @Override + public void process(final CtMethod method) throws CannotCompileException { + final StringBuilder sb = new StringBuilder("\n"); + sb.append("{\n"); + sb.append(" throw new java.lang.IllegalStateException(\"No provider is processing supplied message\");\n"); + sb.append(" return ($r) null;\n"); + sb.append("}\n"); + + method.setBody(sb.toString()); + } + }); + } + }); + } catch (CannotCompileException e) { + throw new IllegalStateException("Failed to create class " + routerName, e); + } + + final Class c; + try { + c = targetCls.toClass(serviceType.getClassLoader(), serviceType.getProtectionDomain()); + } catch (CannotCompileException e) { + throw new IllegalStateException(String.format("Failed to compile class %s", targetCls), e); + } + + try { + return (T)c.newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + throw new IllegalStateException(String.format("Failed to instantiate class %s", c), e); + } + } + }; + } + + @SuppressWarnings("unchecked") + @Override + protected RuntimeGeneratedInvokerPrototype generateListenerInvoker(final Class listenerType) { + final String invokerName = RuntimeCodeSpecification.getInvokerName(listenerType); + final CtClass targetCls; + + // Builder for a set of supported types. Filled while the target class is being generated + final Builder> b = ImmutableSet.builder(); + + try { + targetCls = utils.createClass(invokerName, getBrokerNotificationListener(), new ClassGenerator() { + @Override + public void process(final CtClass cls) throws CannotCompileException { + utils.field(cls, RuntimeCodeSpecification.DELEGATE_FIELD, listenerType); + utils.implementMethodsFrom(cls, getBrokerNotificationListener(), new MethodGenerator() { + @Override + public void process(final CtMethod method) throws CannotCompileException { + final StringBuilder sb = new StringBuilder("\n"); + + sb.append("{\n"); + + for (Method m : listenerType.getMethods()) { + if (BindingReflections.isNotificationCallback(m)) { + final Class argType = m.getParameterTypes()[0]; + + // populates builder above + b.add((Class) argType); + + sb.append(" if ($1 instanceof ").append(argType.getName()).append(") {\n"); + sb.append(" ").append(RuntimeCodeSpecification.DELEGATE_FIELD).append('.').append(m.getName()).append("((").append(argType.getName()).append(") $1);\n"); + sb.append(" return null;\n"); + sb.append(" } else "); + } + } + + sb.append(" return null;\n"); + sb.append("}\n"); + method.setBody(sb.toString()); + } + }); + } + }); + } catch (CannotCompileException e) { + throw new IllegalStateException("Failed to create class " + invokerName, e); + } + + final Class finalClass; + try { + finalClass = targetCls.toClass(listenerType.getClassLoader(), listenerType.getProtectionDomain()); + } catch (CannotCompileException e) { + throw new IllegalStateException(String.format("Failed to compile class %s", targetCls), e); + } + + return new RuntimeGeneratedInvokerPrototype(b.build(), (Class>) finalClass); + } +} diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RuntimeCodeGenerator.xtend b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RuntimeCodeGenerator.xtend deleted file mode 100644 index 834eb4f5fb..0000000000 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RuntimeCodeGenerator.xtend +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (c) 2013 Cisco Systems, Inc. and others. 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 - */ -package org.opendaylight.controller.sal.binding.codegen.impl - -import java.util.Map -import javassist.ClassPool -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier -import org.opendaylight.yangtools.yang.binding.Notification -import org.opendaylight.yangtools.yang.binding.RpcImplementation -import org.opendaylight.yangtools.yang.binding.util.BindingReflections -import org.opendaylight.yangtools.yang.binding.util.ClassLoaderUtils - -import static extension org.opendaylight.controller.sal.binding.codegen.RuntimeCodeSpecification.* -import org.opendaylight.yangtools.yang.binding.RpcService - -class RuntimeCodeGenerator extends AbstractRuntimeCodeGenerator { - - new(ClassPool pool) { - super(pool) - } - - override directProxySupplier(Class iface) { - return [| - val proxyName = iface.directProxyName; - val potentialClass = ClassLoaderUtils.tryToLoadClassWithTCCL(proxyName) - if(potentialClass != null) { - return potentialClass.newInstance as RpcService; - } - val supertype = iface.asCtClass - val createdCls = createClass(iface.directProxyName, supertype) [ - field(DELEGATE_FIELD, iface); - implementsType(RpcImplementation.asCtClass) - implementMethodsFrom(supertype) [ - body = ''' - { - if(«DELEGATE_FIELD» == null) { - throw new java.lang.IllegalStateException("No default provider is available"); - } - return ($r) «DELEGATE_FIELD».«it.name»($$); - } - ''' - ] - implementMethodsFrom(RpcImplementation.asCtClass) [ - body = ''' - { - throw new java.lang.IllegalStateException("No provider is processing supplied message"); - return ($r) null; - } - ''' - ] - ] - return createdCls.toClass(iface.classLoader).newInstance as RpcService - ] - } - - override routerSupplier(Class iface, RpcServiceMetadata metadata) { - return [ | - val supertype = iface.asCtClass - val routerName = iface.routerName; - val potentialClass = ClassLoaderUtils.tryToLoadClassWithTCCL(routerName) - if(potentialClass != null) { - return potentialClass.newInstance as RpcService; - } - - val targetCls = createClass(iface.routerName, supertype) [ - - - field(DELEGATE_FIELD, iface) - //field(REMOTE_INVOKER_FIELD,iface); - implementsType(RpcImplementation.asCtClass) - - for (ctx : metadata.contexts) { - field(ctx.routingTableField, Map) - } - implementMethodsFrom(supertype) [ - if (parameterTypes.size === 1) { - val rpcMeta = metadata.getRpcMethod(name); - val bodyTmp = ''' - { - if($1 == null) { - throw new IllegalArgumentException("RPC input must not be null and must contain a value for field «rpcMeta.inputRouteGetter.name»"); - } - if($1.«rpcMeta.inputRouteGetter.name»() == null) { - throw new IllegalArgumentException("Field «rpcMeta.inputRouteGetter.name» must not be null"); - } - final «InstanceIdentifier.name» identifier = $1.«rpcMeta.inputRouteGetter.name»()«IF rpcMeta. - routeEncapsulated».getValue()«ENDIF»; - «supertype.name» instance = («supertype.name») «rpcMeta.context.routingTableField».get(identifier); - if(instance == null) { - instance = «DELEGATE_FIELD»; - } - if(instance == null) { - throw new java.lang.IllegalStateException("No routable provider is processing routed message for " + String.valueOf(identifier)); - } - return ($r) instance.«it.name»($$); - }''' - body = bodyTmp - } else if (parameterTypes.size === 0) { - body = '''return ($r) «DELEGATE_FIELD».«it.name»($$);''' - } - ] - implementMethodsFrom(RpcImplementation.asCtClass) [ - body = ''' - { - throw new java.lang.IllegalStateException("No provider is processing supplied message"); - return ($r) null; - } - ''' - ] - ] - return targetCls.toClass(iface.classLoader,iface.protectionDomain).newInstance as RpcService - ]; - } - - override generateListenerInvoker(Class iface) { - val callbacks = iface.methods.filter[BindingReflections.isNotificationCallback(it)] - - val supportedNotification = callbacks.map[parameterTypes.get(0) as Class].toSet; - - val targetCls = createClass(iface.invokerName, brokerNotificationListener) [ - field(DELEGATE_FIELD, iface) - implementMethodsFrom(brokerNotificationListener) [ - body = ''' - { - «FOR callback : callbacks SEPARATOR " else "» - «val cls = callback.parameterTypes.get(0).name» - if($1 instanceof «cls») { - «DELEGATE_FIELD».«callback.name»((«cls») $1); - return null; - } - «ENDFOR» - return null; - } - ''' - ] - ] - val finalClass = targetCls.toClass(iface.classLoader, iface.protectionDomain) - return new RuntimeGeneratedInvokerPrototype(supportedNotification, - finalClass as Class>); - } -} diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/SingletonHolder.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/SingletonHolder.java index f037e679be..4664b58d2a 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/SingletonHolder.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/SingletonHolder.java @@ -33,7 +33,7 @@ public class SingletonHolder { public static final ClassPool CLASS_POOL = ClassPool.getDefault(); public static final JavassistUtils JAVASSIST = JavassistUtils.forClassPool(CLASS_POOL); - public static final org.opendaylight.controller.sal.binding.codegen.impl.RuntimeCodeGenerator RPC_GENERATOR_IMPL = new org.opendaylight.controller.sal.binding.codegen.impl.RuntimeCodeGenerator( + public static final org.opendaylight.controller.sal.binding.codegen.impl.DefaultRuntimeCodeGenerator RPC_GENERATOR_IMPL = new org.opendaylight.controller.sal.binding.codegen.impl.DefaultRuntimeCodeGenerator( CLASS_POOL); public static final RuntimeCodeGenerator RPC_GENERATOR = RPC_GENERATOR_IMPL; public static final NotificationInvokerFactory INVOKER_FACTORY = RPC_GENERATOR_IMPL.getInvokerFactory(); diff --git a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/test/DataBrokerTestCustomizer.java b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/test/DataBrokerTestCustomizer.java index d99ac6f2f0..38b36b3338 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/test/DataBrokerTestCustomizer.java +++ b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/test/DataBrokerTestCustomizer.java @@ -16,7 +16,7 @@ import org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCo import org.opendaylight.controller.md.sal.binding.impl.ForwardedBindingDataBroker; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; -import org.opendaylight.controller.md.sal.dom.broker.impl.DOMDataBrokerImpl; +import org.opendaylight.controller.md.sal.dom.broker.impl.SerializedDOMDataBroker; import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore; import org.opendaylight.controller.sal.binding.test.util.MockSchemaService; import org.opendaylight.controller.sal.core.api.model.SchemaService; @@ -68,7 +68,7 @@ public class DataBrokerTestCustomizer { } public DOMDataBroker createDOMDataBroker() { - return new DOMDataBrokerImpl(getDatastores(), getCommitCoordinatorExecutor()); + return new SerializedDOMDataBroker(getDatastores(), getCommitCoordinatorExecutor()); } public ListeningExecutorService getCommitCoordinatorExecutor() { diff --git a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/RuntimeCodeGeneratorTest.java b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/codegen/impl/DefaultRuntimeCodeGeneratorTest.java similarity index 97% rename from opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/RuntimeCodeGeneratorTest.java rename to opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/codegen/impl/DefaultRuntimeCodeGeneratorTest.java index 9ba6533971..7a15619e95 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/RuntimeCodeGeneratorTest.java +++ b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/codegen/impl/DefaultRuntimeCodeGeneratorTest.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.controller.sal.binding.test; +package org.opendaylight.controller.sal.binding.codegen.impl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -13,17 +13,14 @@ import static org.junit.Assert.assertSame; import static org.junit.Assert.fail; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; - import java.util.ArrayList; import java.util.List; - import javassist.ClassPool; - import org.junit.Before; import org.junit.Test; import org.opendaylight.controller.sal.binding.api.rpc.RpcRouter; import org.opendaylight.controller.sal.binding.api.rpc.RpcRoutingTable; -import org.opendaylight.controller.sal.binding.codegen.impl.RuntimeCodeGenerator; +import org.opendaylight.controller.sal.binding.codegen.RuntimeCodeGenerator; import org.opendaylight.controller.sal.binding.spi.NotificationInvokerFactory; import org.opendaylight.controller.sal.binding.spi.NotificationInvokerFactory.NotificationInvoker; import org.opendaylight.controller.sal.binding.test.mock.BarListener; @@ -41,14 +38,14 @@ import org.opendaylight.yangtools.yang.binding.DataContainer; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -public class RuntimeCodeGeneratorTest { +public class DefaultRuntimeCodeGeneratorTest { private RuntimeCodeGenerator codeGenerator; private NotificationInvokerFactory invokerFactory; @Before public void initialize() { - this.codeGenerator = new RuntimeCodeGenerator(ClassPool.getDefault()); + this.codeGenerator = new DefaultRuntimeCodeGenerator(ClassPool.getDefault()); this.invokerFactory = codeGenerator.getInvokerFactory(); } diff --git a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/util/BindingTestContext.java b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/util/BindingTestContext.java index 979f9aa73e..6ad93aa30c 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/util/BindingTestContext.java +++ b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/util/BindingTestContext.java @@ -25,7 +25,7 @@ import org.opendaylight.controller.md.sal.binding.impl.ForwardedBackwardsCompati import org.opendaylight.controller.md.sal.binding.impl.ForwardedBindingDataBroker; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; -import org.opendaylight.controller.md.sal.dom.broker.impl.DOMDataBrokerImpl; +import org.opendaylight.controller.md.sal.dom.broker.impl.SerializedDOMDataBroker; import org.opendaylight.controller.md.sal.dom.broker.impl.compat.BackwardsCompatibleDataBroker; import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; @@ -144,7 +144,7 @@ public class BindingTestContext implements AutoCloseable { .put(LogicalDatastoreType.CONFIGURATION, configStore) .build(); - newDOMDataBroker = new DOMDataBrokerImpl(newDatastores, executor); + newDOMDataBroker = new SerializedDOMDataBroker(newDatastores, executor); biCompatibleBroker = new BackwardsCompatibleDataBroker(newDOMDataBroker,mockSchemaService); diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/dom/impl/DomInmemoryDataBrokerModule.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/dom/impl/DomInmemoryDataBrokerModule.java index 8f01a393c6..fcbce6f8d7 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/dom/impl/DomInmemoryDataBrokerModule.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/dom/impl/DomInmemoryDataBrokerModule.java @@ -15,10 +15,9 @@ import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitDeadlockException; import org.opendaylight.controller.md.sal.common.util.jmx.AbstractMXBean; import org.opendaylight.controller.md.sal.common.util.jmx.ThreadExecutorStatsMXBeanImpl; -import org.opendaylight.controller.md.sal.dom.broker.impl.DOMConcurrentDataCommitCoordinator; -import org.opendaylight.controller.md.sal.dom.broker.impl.DOMDataBrokerImpl; -import org.opendaylight.controller.md.sal.dom.broker.impl.DOMDataCommitCoordinatorImpl; -import org.opendaylight.controller.md.sal.dom.broker.impl.DOMDataCommitExecutor; +import org.opendaylight.controller.md.sal.dom.broker.impl.ConcurrentDOMDataBroker; +import org.opendaylight.controller.md.sal.dom.broker.impl.AbstractDOMDataBroker; +import org.opendaylight.controller.md.sal.dom.broker.impl.SerializedDOMDataBroker; import org.opendaylight.controller.md.sal.dom.broker.impl.jmx.CommitStatsMXBeanImpl; import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStoreFactory; import org.opendaylight.controller.sal.core.spi.data.DOMStore; @@ -85,14 +84,13 @@ public final class DomInmemoryDataBrokerModule extends final List mBeans = Lists.newArrayList(); - DOMDataCommitExecutor commitCoordinator; - DurationStatisticsTracker commitStatsTracker = null; + final DurationStatisticsTracker commitStatsTracker; + final AbstractDOMDataBroker broker; - if(getAllowConcurrentCommits()) { - DOMConcurrentDataCommitCoordinator coordinator = - new DOMConcurrentDataCommitCoordinator(listenableFutureExecutor); - commitStatsTracker = coordinator.getCommitStatsTracker(); - commitCoordinator = coordinator; + if (getAllowConcurrentCommits()) { + final ConcurrentDOMDataBroker cdb = new ConcurrentDOMDataBroker(datastores, listenableFutureExecutor); + commitStatsTracker = cdb.getCommitStatsTracker(); + broker = cdb; } else { /* * We use a single-threaded executor for commits with a bounded queue capacity. If the @@ -105,13 +103,12 @@ public final class DomInmemoryDataBrokerModule extends ExecutorService commitExecutor = SpecialExecutors.newBoundedSingleThreadExecutor( getMaxDataBrokerCommitQueueSize(), "WriteTxCommit"); - DOMDataCommitCoordinatorImpl coordinator = new DOMDataCommitCoordinatorImpl( + SerializedDOMDataBroker sdb = new SerializedDOMDataBroker(datastores, new DeadlockDetectingListeningExecutorService(commitExecutor, TransactionCommitDeadlockException.DEADLOCK_EXCEPTION_SUPPLIER, listenableFutureExecutor)); - - commitStatsTracker = coordinator.getCommitStatsTracker(); - commitCoordinator = coordinator; + commitStatsTracker = sdb.getCommitStatsTracker(); + broker = sdb; final AbstractMXBean commitExecutorStatsMXBean = ThreadExecutorStatsMXBeanImpl.create(commitExecutor, "CommitExecutorStats", @@ -121,8 +118,6 @@ public final class DomInmemoryDataBrokerModule extends } } - DOMDataBrokerImpl newDataBroker = new DOMDataBrokerImpl(datastores, commitCoordinator); - if(commitStatsTracker != null) { final CommitStatsMXBeanImpl commitStatsMXBean = new CommitStatsMXBeanImpl( commitStatsTracker, JMX_BEAN_TYPE); @@ -137,7 +132,7 @@ public final class DomInmemoryDataBrokerModule extends mBeans.add(commitFutureStatsMXBean); } - newDataBroker.setCloseable(new AutoCloseable() { + broker.setCloseable(new AutoCloseable() { @Override public void close() { for(AbstractMXBean mBean: mBeans) { @@ -146,6 +141,6 @@ public final class DomInmemoryDataBrokerModule extends } }); - return newDataBroker; + return broker; } } diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/AbstractDOMDataBroker.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/AbstractDOMDataBroker.java new file mode 100644 index 0000000000..b705bd62a1 --- /dev/null +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/AbstractDOMDataBroker.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. 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 + */ +package org.opendaylight.controller.md.sal.dom.broker.impl; + +import static com.google.common.base.Preconditions.checkState; +import java.util.EnumMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.concurrent.atomic.AtomicLong; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener; +import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; +import org.opendaylight.controller.md.sal.dom.api.DOMDataChangeListener; +import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain; +import org.opendaylight.controller.sal.core.spi.data.DOMStore; +import org.opendaylight.controller.sal.core.spi.data.DOMStoreTransactionChain; +import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public abstract class AbstractDOMDataBroker extends AbstractDOMForwardedTransactionFactory implements DOMDataBroker, AutoCloseable { + private static final Logger LOG = LoggerFactory.getLogger(AbstractDOMDataBroker.class); + + private final AtomicLong txNum = new AtomicLong(); + private final AtomicLong chainNum = new AtomicLong(); + private volatile AutoCloseable closeable; + + protected AbstractDOMDataBroker(final Map datastores) { + super(datastores); + } + + public void setCloseable(final AutoCloseable closeable) { + this.closeable = closeable; + } + + @Override + public void close() { + super.close(); + + if(closeable != null) { + try { + closeable.close(); + } catch(Exception e) { + LOG.debug("Error closing instance", e); + } + } + } + + @Override + protected Object newTransactionIdentifier() { + return "DOM-" + txNum.getAndIncrement(); + } + + @Override + public ListenerRegistration registerDataChangeListener(final LogicalDatastoreType store, + final YangInstanceIdentifier path, final DOMDataChangeListener listener, final DataChangeScope triggeringScope) { + + DOMStore potentialStore = getTxFactories().get(store); + checkState(potentialStore != null, "Requested logical data store is not available."); + return potentialStore.registerChangeListener(path, listener, triggeringScope); + } + + @Override + public DOMTransactionChain createTransactionChain(final TransactionChainListener listener) { + checkNotClosed(); + + final Map backingChains = new EnumMap<>(LogicalDatastoreType.class); + for (Entry entry : getTxFactories().entrySet()) { + backingChains.put(entry.getKey(), entry.getValue().createTransactionChain()); + } + + final long chainId = chainNum.getAndIncrement(); + LOG.debug("Transactoin chain {} created with listener {}, backing store chains {}", chainId, listener, + backingChains); + return new DOMDataBrokerTransactionChainImpl(chainId, backingChains, this, listener); + } +} diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/AbstractDOMForwardedTransactionFactory.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/AbstractDOMForwardedTransactionFactory.java index c1ac0e1a1f..08888c13cf 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/AbstractDOMForwardedTransactionFactory.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/AbstractDOMForwardedTransactionFactory.java @@ -8,16 +8,19 @@ package org.opendaylight.controller.md.sal.dom.broker.impl; import com.google.common.base.Preconditions; +import com.google.common.util.concurrent.CheckedFuture; import java.util.EnumMap; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction; import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction; import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadTransaction; import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadWriteTransaction; +import org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCohort; import org.opendaylight.controller.sal.core.spi.data.DOMStoreTransactionFactory; import org.opendaylight.controller.sal.core.spi.data.DOMStoreWriteTransaction; @@ -37,7 +40,7 @@ import org.opendaylight.controller.sal.core.spi.data.DOMStoreWriteTransaction; * @param * Type of {@link DOMStoreTransactionFactory} factory. */ -abstract class AbstractDOMForwardedTransactionFactory implements DOMDataCommitImplementation, AutoCloseable { +abstract class AbstractDOMForwardedTransactionFactory implements AutoCloseable { @SuppressWarnings("rawtypes") private static final AtomicIntegerFieldUpdater UPDATER = AtomicIntegerFieldUpdater.newUpdater(AbstractDOMForwardedTransactionFactory.class, "closed"); @@ -56,6 +59,26 @@ abstract class AbstractDOMForwardedTransactionFactory submit(final DOMDataWriteTransaction transaction, + final Iterable cohorts); + /** * Creates a new composite read-only transaction * diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMConcurrentDataCommitCoordinator.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/ConcurrentDOMDataBroker.java similarity index 96% rename from opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMConcurrentDataCommitCoordinator.java rename to opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/ConcurrentDOMDataBroker.java index d8a7a0084c..b26b4c7c1b 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMConcurrentDataCommitCoordinator.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/ConcurrentDOMDataBroker.java @@ -16,12 +16,15 @@ import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import java.util.List; +import java.util.Map; import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; +import org.opendaylight.controller.sal.core.spi.data.DOMStore; import org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCohort; import org.opendaylight.yangtools.util.DurationStatisticsTracker; import org.opendaylight.yangtools.util.concurrent.MappingCheckedFuture; @@ -35,14 +38,12 @@ import org.slf4j.LoggerFactory; * * @author Thomas Pantelis */ -public class DOMConcurrentDataCommitCoordinator implements DOMDataCommitExecutor { - +public class ConcurrentDOMDataBroker extends AbstractDOMDataBroker { + private static final Logger LOG = LoggerFactory.getLogger(ConcurrentDOMDataBroker.class); private static final String CAN_COMMIT = "CAN_COMMIT"; private static final String PRE_COMMIT = "PRE_COMMIT"; private static final String COMMIT = "COMMIT"; - private static final Logger LOG = LoggerFactory.getLogger(DOMConcurrentDataCommitCoordinator.class); - private final DurationStatisticsTracker commitStatsTracker = DurationStatisticsTracker.createConcurrent(); /** @@ -56,7 +57,8 @@ public class DOMConcurrentDataCommitCoordinator implements DOMDataCommitExecutor */ private final ExecutorService internalFutureCallbackExecutor = new SimpleSameThreadExecutor(); - public DOMConcurrentDataCommitCoordinator(ExecutorService listenableFutureExecutor) { + public ConcurrentDOMDataBroker(final Map datastores, ExecutorService listenableFutureExecutor) { + super(datastores); this.clientFutureCallbackExecutor = Preconditions.checkNotNull(listenableFutureExecutor); } diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataBrokerImpl.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataBrokerImpl.java index 3f7db01c6b..fb5e438571 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataBrokerImpl.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataBrokerImpl.java @@ -7,101 +7,17 @@ */ package org.opendaylight.controller.md.sal.dom.broker.impl; -import static com.google.common.base.Preconditions.checkState; -import com.google.common.base.Preconditions; -import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.ListeningExecutorService; -import java.util.EnumMap; import java.util.Map; -import java.util.Map.Entry; -import java.util.concurrent.atomic.AtomicLong; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener; -import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; -import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; -import org.opendaylight.controller.md.sal.dom.api.DOMDataChangeListener; -import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; -import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain; import org.opendaylight.controller.sal.core.spi.data.DOMStore; -import org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCohort; -import org.opendaylight.controller.sal.core.spi.data.DOMStoreTransactionChain; -import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -public class DOMDataBrokerImpl extends AbstractDOMForwardedTransactionFactory implements DOMDataBroker, - AutoCloseable { - - private static final Logger LOG = LoggerFactory.getLogger(DOMDataBrokerImpl.class); - - private final DOMDataCommitExecutor coordinator; - private final AtomicLong txNum = new AtomicLong(); - private final AtomicLong chainNum = new AtomicLong(); - private volatile AutoCloseable closeable; - - public DOMDataBrokerImpl(final Map datastores, - final ListeningExecutorService executor) { - this(datastores, new DOMDataCommitCoordinatorImpl(executor)); - } - - public DOMDataBrokerImpl(final Map datastores, - final DOMDataCommitExecutor coordinator) { - super(datastores); - this.coordinator = Preconditions.checkNotNull(coordinator); - } - - public void setCloseable(final AutoCloseable closeable) { - this.closeable = closeable; - } - - @Override - public void close() { - super.close(); - - if(closeable != null) { - try { - closeable.close(); - } catch(Exception e) { - LOG.debug("Error closing instance", e); - } - } - } - - @Override - protected Object newTransactionIdentifier() { - return "DOM-" + txNum.getAndIncrement(); - } - - @Override - public ListenerRegistration registerDataChangeListener(final LogicalDatastoreType store, - final YangInstanceIdentifier path, final DOMDataChangeListener listener, final DataChangeScope triggeringScope) { - - DOMStore potentialStore = getTxFactories().get(store); - checkState(potentialStore != null, "Requested logical data store is not available."); - return potentialStore.registerChangeListener(path, listener, triggeringScope); - } - - @Override - public DOMTransactionChain createTransactionChain(final TransactionChainListener listener) { - checkNotClosed(); - - final Map backingChains = new EnumMap<>(LogicalDatastoreType.class); - for (Entry entry : getTxFactories().entrySet()) { - backingChains.put(entry.getKey(), entry.getValue().createTransactionChain()); - } - - final long chainId = chainNum.getAndIncrement(); - LOG.debug("Transactoin chain {} created with listener {}, backing store chains {}", chainId, listener, - backingChains); - return new DOMDataBrokerTransactionChainImpl(chainId, backingChains, coordinator, listener); - - } - - @Override - public CheckedFuture submit(final DOMDataWriteTransaction transaction, - final Iterable cohorts) { - LOG.debug("Transaction: {} submitted with cohorts {}.", transaction.getIdentifier(), cohorts); - return coordinator.submit(transaction, cohorts); +/** + * @deprecated Compatibility wrapper around {@link SerializedDOMDataBroker}. + */ +@Deprecated +public final class DOMDataBrokerImpl extends SerializedDOMDataBroker { + public DOMDataBrokerImpl(final Map datastores, final ListeningExecutorService executor) { + super(datastores, executor); } } diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataBrokerTransactionChainImpl.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataBrokerTransactionChainImpl.java index 0b1dd1c5e0..77387c761c 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataBrokerTransactionChainImpl.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataBrokerTransactionChainImpl.java @@ -45,7 +45,7 @@ final class DOMDataBrokerTransactionChainImpl extends AbstractDOMForwardedTransa AtomicReferenceFieldUpdater.newUpdater(DOMDataBrokerTransactionChainImpl.class, State.class, "state"); private static final Logger LOG = LoggerFactory.getLogger(DOMDataBrokerTransactionChainImpl.class); private final AtomicLong txNum = new AtomicLong(); - private final DOMDataCommitExecutor coordinator; + private final AbstractDOMDataBroker broker; private final TransactionChainListener listener; private final long chainId; @@ -69,10 +69,10 @@ final class DOMDataBrokerTransactionChainImpl extends AbstractDOMForwardedTransa */ public DOMDataBrokerTransactionChainImpl(final long chainId, final Map chains, - final DOMDataCommitExecutor coordinator, final TransactionChainListener listener) { + final AbstractDOMDataBroker broker, final TransactionChainListener listener) { super(chains); this.chainId = chainId; - this.coordinator = Preconditions.checkNotNull(coordinator); + this.broker = Preconditions.checkNotNull(broker); this.listener = Preconditions.checkNotNull(listener); } @@ -91,7 +91,7 @@ final class DOMDataBrokerTransactionChainImpl extends AbstractDOMForwardedTransa checkNotFailed(); checkNotClosed(); - final CheckedFuture ret = coordinator.submit(transaction, cohorts); + final CheckedFuture ret = broker.submit(transaction, cohorts); COUNTER_UPDATER.incrementAndGet(this); Futures.addCallback(ret, new FutureCallback() { diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataCommitExecutor.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataCommitExecutor.java deleted file mode 100644 index dae14b5128..0000000000 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataCommitExecutor.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2014 Cisco Systems, Inc. and others. 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 - */ -package org.opendaylight.controller.md.sal.dom.broker.impl; - -import com.google.common.util.concurrent.CheckedFuture; -import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; -import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; -import org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCohort; - -/** - * Executor of Three Phase Commit coordination for - * {@link DOMDataWriteTransaction} transactions. - * - * Implementations are responsible for executing implementation of three-phase - * commit protocol on supplied {@link DOMStoreThreePhaseCommitCohort}s. - * - * - */ -public interface DOMDataCommitExecutor { - - /** - * Submits supplied transaction to be executed in context of provided - * cohorts. - * - * Transaction is used only as a context, cohorts should be associated with - * this transaction. - * - * @param tx - * Transaction to be used as context for reporting - * @param cohort - * DOM Store cohorts representing provided transaction, its - * subtransactions. - * @return a CheckedFuture. if commit coordination on cohorts finished successfully, - * nothing is returned from the Future, On failure, - * the Future fails with a {@link TransactionCommitFailedException}. - * - */ - CheckedFuture submit(DOMDataWriteTransaction tx, - Iterable cohort); - -} diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataCommitImplementation.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataCommitImplementation.java deleted file mode 100644 index 2f2b6e508a..0000000000 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataCommitImplementation.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2014 Cisco Systems, Inc. and others. 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 - */ -package org.opendaylight.controller.md.sal.dom.broker.impl; - -import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; -import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; -import org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCohort; -import com.google.common.util.concurrent.CheckedFuture; - -/** - * - * Implementation prototype of commit method for - * {@link DOMForwardedWriteTransaction}. - * - */ -public interface DOMDataCommitImplementation { - - /** - * User-supplied implementation of {@link DOMDataWriteTransaction#submit()} - * for transaction. - * - * Callback invoked when {@link DOMDataWriteTransaction#submit()} is invoked - * on transaction created by this factory. - * - * @param transaction - * Transaction on which {@link DOMDataWriteTransaction#commit()} - * was invoked. - * @param cohorts - * Iteration of cohorts for subtransactions associated with - * commited transaction. - * - */ - CheckedFuture submit(final DOMDataWriteTransaction transaction, - final Iterable cohorts); -} - diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMForwardedReadWriteTransaction.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMForwardedReadWriteTransaction.java index 662d48afdb..833d60cb3e 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMForwardedReadWriteTransaction.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMForwardedReadWriteTransaction.java @@ -37,7 +37,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; final class DOMForwardedReadWriteTransaction extends DOMForwardedWriteTransaction implements DOMDataReadWriteTransaction { protected DOMForwardedReadWriteTransaction(final Object identifier, final Map backingTxs, - final DOMDataCommitImplementation commitImpl) { + final AbstractDOMForwardedTransactionFactory commitImpl) { super(identifier, backingTxs, commitImpl); } diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMForwardedWriteTransaction.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMForwardedWriteTransaction.java index 8c84af11ff..45e18ff219 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMForwardedWriteTransaction.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMForwardedWriteTransaction.java @@ -51,8 +51,8 @@ import org.slf4j.LoggerFactory; class DOMForwardedWriteTransaction extends AbstractDOMForwardedCompositeTransaction implements DOMDataWriteTransaction { @SuppressWarnings("rawtypes") - private static final AtomicReferenceFieldUpdater IMPL_UPDATER = - AtomicReferenceFieldUpdater.newUpdater(DOMForwardedWriteTransaction.class, DOMDataCommitImplementation.class, "commitImpl"); + private static final AtomicReferenceFieldUpdater IMPL_UPDATER = + AtomicReferenceFieldUpdater.newUpdater(DOMForwardedWriteTransaction.class, AbstractDOMForwardedTransactionFactory.class, "commitImpl"); @SuppressWarnings("rawtypes") private static final AtomicReferenceFieldUpdater FUTURE_UPDATER = AtomicReferenceFieldUpdater.newUpdater(DOMForwardedWriteTransaction.class, Future.class, "commitFuture"); @@ -64,7 +64,7 @@ class DOMForwardedWriteTransaction extends * the transaction is running -- which we flip atomically using * {@link #IMPL_UPDATER}. */ - private volatile DOMDataCommitImplementation commitImpl; + private volatile AbstractDOMForwardedTransactionFactory commitImpl; /** * Future task of transaction commit. It starts off as null, but is @@ -79,7 +79,7 @@ class DOMForwardedWriteTransaction extends private volatile Future commitFuture; protected DOMForwardedWriteTransaction(final Object identifier, - final Map backingTxs, final DOMDataCommitImplementation commitImpl) { + final Map backingTxs, final AbstractDOMForwardedTransactionFactory commitImpl) { super(identifier, backingTxs); this.commitImpl = Preconditions.checkNotNull(commitImpl, "commitImpl must not be null."); } @@ -104,7 +104,7 @@ class DOMForwardedWriteTransaction extends @Override public boolean cancel() { - final DOMDataCommitImplementation impl = IMPL_UPDATER.getAndSet(this, null); + final AbstractDOMForwardedTransactionFactory impl = IMPL_UPDATER.getAndSet(this, null); if (impl != null) { LOG.trace("Transaction {} cancelled before submit", getIdentifier()); FUTURE_UPDATER.lazySet(this, CANCELLED_FUTURE); @@ -121,6 +121,7 @@ class DOMForwardedWriteTransaction extends return future.cancel(false); } + @Deprecated @Override public ListenableFuture> commit() { return AbstractDataTransaction.convertToLegacyCommitFuture(submit()); @@ -128,7 +129,7 @@ class DOMForwardedWriteTransaction extends @Override public CheckedFuture submit() { - final DOMDataCommitImplementation impl = IMPL_UPDATER.getAndSet(this, null); + final AbstractDOMForwardedTransactionFactory impl = IMPL_UPDATER.getAndSet(this, null); checkRunning(impl); final Collection txns = getSubtransactions(); @@ -144,7 +145,7 @@ class DOMForwardedWriteTransaction extends return ret; } - private void checkRunning(final DOMDataCommitImplementation impl) { + private void checkRunning(final AbstractDOMForwardedTransactionFactory impl) { Preconditions.checkState(impl != null, "Transaction %s is no longer running", getIdentifier()); } } diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataCommitCoordinatorImpl.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/SerializedDOMDataBroker.java similarity index 82% rename from opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataCommitCoordinatorImpl.java rename to opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/SerializedDOMDataBroker.java index 7b53500231..268b1b8584 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataCommitCoordinatorImpl.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/SerializedDOMDataBroker.java @@ -11,9 +11,12 @@ import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListeningExecutorService; +import java.util.Map; import java.util.concurrent.RejectedExecutionException; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; +import org.opendaylight.controller.sal.core.spi.data.DOMStore; import org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCohort; import org.opendaylight.yangtools.util.DurationStatisticsTracker; import org.opendaylight.yangtools.util.concurrent.MappingCheckedFuture; @@ -21,22 +24,18 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * * Implementation of blocking three phase commit coordinator, which which * supports coordination on multiple {@link DOMStoreThreePhaseCommitCohort}. * - * This implementation does not support cancelation of commit, + * This implementation does not support cancellation of commit, * * In order to advance to next phase of three phase commit all subtasks of * previous step must be finish. * * This executor does not have an upper bound on subtask timeout. - * - * */ -public class DOMDataCommitCoordinatorImpl implements DOMDataCommitExecutor { - - private static final Logger LOG = LoggerFactory.getLogger(DOMDataCommitCoordinatorImpl.class); +public class SerializedDOMDataBroker extends AbstractDOMDataBroker { + private static final Logger LOG = LoggerFactory.getLogger(SerializedDOMDataBroker.class); private final DurationStatisticsTracker commitStatsTracker = DurationStatisticsTracker.createConcurrent(); private final ListeningExecutorService executor; @@ -47,7 +46,8 @@ public class DOMDataCommitCoordinatorImpl implements DOMDataCommitExecutor { * * @param executor */ - public DOMDataCommitCoordinatorImpl(final ListeningExecutorService executor) { + public SerializedDOMDataBroker(final Map datastores, final ListeningExecutorService executor) { + super(datastores); this.executor = Preconditions.checkNotNull(executor, "executor must not be null."); } @@ -56,7 +56,7 @@ public class DOMDataCommitCoordinatorImpl implements DOMDataCommitExecutor { } @Override - public CheckedFuture submit(final DOMDataWriteTransaction transaction, + protected CheckedFuture submit(final DOMDataWriteTransaction transaction, final Iterable cohorts) { Preconditions.checkArgument(transaction != null, "Transaction must not be null."); Preconditions.checkArgument(cohorts != null, "Cohorts must not be null."); diff --git a/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMBrokerPerformanceTest.java b/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMBrokerPerformanceTest.java index eb51db2398..2f02f981ab 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMBrokerPerformanceTest.java +++ b/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMBrokerPerformanceTest.java @@ -44,7 +44,7 @@ public class DOMBrokerPerformanceTest { } private SchemaContext schemaContext; - private DOMDataBrokerImpl domBroker; + private AbstractDOMDataBroker domBroker; private static V measure(final String name, final Callable callable) throws Exception { // TODO Auto-generated method stub @@ -72,7 +72,7 @@ public class DOMBrokerPerformanceTest { .put(OPERATIONAL, operStore) // .build(); ListeningExecutorService executor = MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor()); - domBroker = new DOMDataBrokerImpl(stores, executor); + domBroker = new SerializedDOMDataBroker(stores, executor); } @Test diff --git a/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMBrokerTest.java b/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMBrokerTest.java index 80c4201033..c1d301c549 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMBrokerTest.java +++ b/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMBrokerTest.java @@ -48,7 +48,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext; public class DOMBrokerTest { private SchemaContext schemaContext; - private DOMDataBrokerImpl domBroker; + private AbstractDOMDataBroker domBroker; private ListeningExecutorService executor; private ExecutorService futureExecutor; private CommitExecutorService commitExecutor; @@ -74,7 +74,7 @@ public class DOMBrokerTest { futureExecutor = SpecialExecutors.newBlockingBoundedCachedThreadPool(1, 5, "FCB"); executor = new DeadlockDetectingListeningExecutorService(commitExecutor, TransactionCommitDeadlockException.DEADLOCK_EXCEPTION_SUPPLIER, futureExecutor); - domBroker = new DOMDataBrokerImpl(stores, executor); + domBroker = new SerializedDOMDataBroker(stores, executor); } @After diff --git a/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMConcurrentDataCommitCoordinatorTest.java b/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMConcurrentDataCommitCoordinatorTest.java index 25d7df17d1..efc461a0c2 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMConcurrentDataCommitCoordinatorTest.java +++ b/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMConcurrentDataCommitCoordinatorTest.java @@ -10,10 +10,18 @@ package org.opendaylight.controller.md.sal.dom.broker.impl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertSame; import static org.junit.Assert.fail; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; +import com.google.common.collect.ImmutableMap; +import com.google.common.util.concurrent.CheckedFuture; +import com.google.common.util.concurrent.FutureCallback; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.common.util.concurrent.SettableFuture; +import com.google.common.util.concurrent.Uninterruptibles; import java.util.Arrays; import java.util.concurrent.CountDownLatch; import java.util.concurrent.SynchronousQueue; @@ -27,15 +35,12 @@ import org.junit.Test; import org.mockito.InOrder; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; +import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore; +import org.opendaylight.controller.sal.core.spi.data.DOMStore; import org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCohort; -import com.google.common.util.concurrent.CheckedFuture; -import com.google.common.util.concurrent.FutureCallback; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; -import com.google.common.util.concurrent.SettableFuture; -import com.google.common.util.concurrent.Uninterruptibles; /** * Unit tests for DOMConcurrentDataCommitCoordinator. @@ -49,12 +54,16 @@ public class DOMConcurrentDataCommitCoordinatorTest { private final DOMStoreThreePhaseCommitCohort mockCohort2 = mock(DOMStoreThreePhaseCommitCohort.class); private final ThreadPoolExecutor futureExecutor = new ThreadPoolExecutor(0, 1, 5, TimeUnit.SECONDS, new SynchronousQueue()); - private final DOMConcurrentDataCommitCoordinator coordinator = - new DOMConcurrentDataCommitCoordinator(futureExecutor); + private ConcurrentDOMDataBroker coordinator; @Before public void setup() { doReturn("tx").when(transaction).getIdentifier(); + + DOMStore store = new InMemoryDOMDataStore("OPER", + MoreExecutors.sameThreadExecutor()); + + coordinator = new ConcurrentDOMDataBroker(ImmutableMap.of(LogicalDatastoreType.OPERATIONAL, store), futureExecutor); } @After @@ -76,7 +85,7 @@ public class DOMConcurrentDataCommitCoordinatorTest { final CountDownLatch asyncCanCommitContinue = new CountDownLatch(1); Answer> asyncCanCommit = new Answer>() { @Override - public ListenableFuture answer(InvocationOnMock invocation) { + public ListenableFuture answer(final InvocationOnMock invocation) { final SettableFuture future = SettableFuture.create(); if(doAsync) { new Thread() { @@ -110,12 +119,12 @@ public class DOMConcurrentDataCommitCoordinatorTest { final AtomicReference caughtEx = new AtomicReference<>(); Futures.addCallback(future, new FutureCallback() { @Override - public void onSuccess(Void result) { + public void onSuccess(final Void result) { doneLatch.countDown(); } @Override - public void onFailure(Throwable t) { + public void onFailure(final Throwable t) { caughtEx.set(t); doneLatch.countDown(); } @@ -158,8 +167,8 @@ public class DOMConcurrentDataCommitCoordinatorTest { assertFailure(future, null, mockCohort1, mockCohort2, mockCohort3); } - private void assertFailure(CheckedFuture future, - Exception expCause, DOMStoreThreePhaseCommitCohort... mockCohorts) + private void assertFailure(final CheckedFuture future, + final Exception expCause, final DOMStoreThreePhaseCommitCohort... mockCohorts) throws Exception { try { future.checkedGet(5, TimeUnit.SECONDS); diff --git a/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMTransactionChainTest.java b/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMTransactionChainTest.java index 17f477bb0f..03d39a2a62 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMTransactionChainTest.java +++ b/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMTransactionChainTest.java @@ -37,7 +37,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext; public class DOMTransactionChainTest { private SchemaContext schemaContext; - private DOMDataBrokerImpl domBroker; + private AbstractDOMDataBroker domBroker; @Before public void setupStore() { @@ -54,7 +54,7 @@ public class DOMTransactionChainTest { .build(); ListeningExecutorService executor = MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor()); - domBroker = new DOMDataBrokerImpl(stores, executor); + domBroker = new SerializedDOMDataBroker(stores, executor); } @Test diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatPermCollector.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatPermCollector.java index 16ad28dd4f..94d6dfa651 100644 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatPermCollector.java +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatPermCollector.java @@ -10,6 +10,7 @@ package org.opendaylight.controller.md.statistics.manager; import java.util.List; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @@ -112,7 +113,7 @@ public interface StatPermCollector extends Runnable, AutoCloseable { * It is call from collecting allStatistics methods as a future result for * Operational/DS statistic store call (does not matter in the outcome). */ - void collectNextStatistics(); + void collectNextStatistics(TransactionId xid); /** * Method returns true if collector has registered some active nodes diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatRpcMsgManager.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatRpcMsgManager.java index 0576c2a645..62319ad594 100644 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatRpcMsgManager.java +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatRpcMsgManager.java @@ -21,6 +21,7 @@ import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.common.RpcResult; import com.google.common.base.Optional; +import com.google.common.util.concurrent.SettableFuture; /** * statistics-manager @@ -77,7 +78,8 @@ public interface StatRpcMsgManager extends Runnable, AutoCloseable { * * @param future - result every Device RPC call */ - void registrationRpcFutureCallBack(Future> future, D inputObj, NodeRef ref); + void registrationRpcFutureCallBack( + Future> future, D inputObj, NodeRef ref, SettableFuture resultTransId); /** * Method adds Notification which is marked as Multipart to the transaction cash @@ -104,7 +106,7 @@ public interface StatRpcMsgManager extends Runnable, AutoCloseable { * * @param NodeRef nodeRef */ - void getAllGroupsStat(NodeRef nodeRef); + Future getAllGroupsStat(NodeRef nodeRef); /** * Method wraps OpendaylightGroupStatisticsService.getGroupDescription @@ -112,7 +114,7 @@ public interface StatRpcMsgManager extends Runnable, AutoCloseable { * * @param NodeRef nodeRef */ - void getAllGroupsConfStats(NodeRef nodeRef); + Future getAllGroupsConfStats(NodeRef nodeRef); /** * Method wraps OpendaylightMeterStatisticsService.getGroupFeatures @@ -128,7 +130,7 @@ public interface StatRpcMsgManager extends Runnable, AutoCloseable { * * @param NodeRef nodeRef */ - void getAllMetersStat(NodeRef nodeRef); + Future getAllMetersStat(NodeRef nodeRef); /** * Method wraps OpendaylightMeterStatisticsService.getAllMeterConfigStatistics @@ -136,7 +138,7 @@ public interface StatRpcMsgManager extends Runnable, AutoCloseable { * * @param NodeRef nodeRef */ - void getAllMeterConfigStat(NodeRef nodeRef); + Future getAllMeterConfigStat(NodeRef nodeRef); /** * Method wraps OpendaylightMeterStatisticsService.getMeterFeatures @@ -152,7 +154,7 @@ public interface StatRpcMsgManager extends Runnable, AutoCloseable { * * @param NodeRef nodeRef */ - void getAllFlowsStat(NodeRef nodeRef); + Future getAllFlowsStat(NodeRef nodeRef); /** * Method wraps OpendaylightFlowStatisticsService.getAggregateFlowStatisticsFromFlowTableForAllFlows @@ -169,7 +171,7 @@ public interface StatRpcMsgManager extends Runnable, AutoCloseable { * * @param NodeRef nodeRef */ - void getAllPortsStat(NodeRef nodeRef); + Future getAllPortsStat(NodeRef nodeRef); /** * Method wraps OpendaylightFlowTableStatisticsService.getFlowTablesStatistics @@ -177,7 +179,7 @@ public interface StatRpcMsgManager extends Runnable, AutoCloseable { * * @param NodeRef nodeRef */ - void getAllTablesStat(NodeRef nodeRef); + Future getAllTablesStat(NodeRef nodeRef); /** * Method wraps OpendaylightQueueStatisticsService.getAllQueuesStatisticsFromAllPorts @@ -185,7 +187,7 @@ public interface StatRpcMsgManager extends Runnable, AutoCloseable { * * @param NodeRef nodeRef */ - void getAllQueueStat(NodeRef nodeRef); + Future getAllQueueStat(NodeRef nodeRef); } diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsManager.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsManager.java index 831dc224d1..751a68965d 100644 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsManager.java +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsManager.java @@ -20,6 +20,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.me import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.OpendaylightFlowStatisticsListener; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.OpendaylightFlowTableStatisticsListener; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.queues.Queue; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.OpendaylightGroupStatisticsListener; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group; @@ -97,7 +98,7 @@ public interface StatisticsManager extends AutoCloseable, TransactionChainListen * * @param nodeIdent */ - void collectNextStatistics(InstanceIdentifier nodeIdent); + void collectNextStatistics(InstanceIdentifier nodeIdent, TransactionId xid); /** * Method wraps {@link StatPermCollector}.connectedNodeRegistration to provide diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatAbstractNotifyCommit.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatAbstractNotifyCommit.java index 6bc6a30f8f..3f0e5e430e 100644 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatAbstractNotifyCommit.java +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatAbstractNotifyCommit.java @@ -84,9 +84,9 @@ public abstract class StatAbstractNotifyCommit i return manager.isProvidedFlowNodeActive(nodeIdent); } - protected void notifyToCollectNextStatistics(final InstanceIdentifier nodeIdent) { + protected void notifyToCollectNextStatistics(final InstanceIdentifier nodeIdent, final TransactionId xid) { Preconditions.checkNotNull(nodeIdent, "FlowCapableNode ident can not be null!"); - manager.collectNextStatistics(nodeIdent); + manager.collectNextStatistics(nodeIdent, xid); } /** diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatListenCommitFlow.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatListenCommitFlow.java index 230425999e..e17c45dc76 100644 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatListenCommitFlow.java +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatListenCommitFlow.java @@ -216,7 +216,7 @@ public class StatListenCommitFlow extends StatAbstractListenCommit, StatNodeInfoHolder> statNodeHolder = Collections., StatNodeInfoHolder> emptyMap(); private volatile boolean wakeMe = false; private volatile boolean finishing = false; + private TransactionId actualTransactionId; public StatPermCollectorImpl(final StatisticsManager manager, final long minReqNetInterv, final int nr, final int maxNodeForCollectors) { @@ -77,7 +81,7 @@ public class StatPermCollectorImpl implements StatPermCollector { public void close() { statNodeHolder = Collections., StatNodeInfoHolder> emptyMap(); finishing = true; - collectNextStatistics(); + collectNextStatistics(actualTransactionId); statNetCollectorServ.shutdown(); } @@ -134,7 +138,7 @@ public class StatPermCollectorImpl implements StatPermCollector { } if (statNodeHolder.isEmpty()) { finishing = true; - collectNextStatistics(); + collectNextStatistics(actualTransactionId); statNetCollectorServ.shutdown(); } return true; @@ -172,12 +176,14 @@ public class StatPermCollectorImpl implements StatPermCollector { } @Override - public void collectNextStatistics() { - if (wakeMe) { - synchronized (statCollectorLock) { - if (wakeMe) { - LOG.trace("STAT-COLLECTOR is notified to conntinue"); - statCollectorLock.notify(); + public void collectNextStatistics(final TransactionId xid) { + if (checkTransactionId(xid)) { + if (wakeMe) { + synchronized (statCollectorLock) { + if (wakeMe) { + LOG.trace("STAT-COLLECTOR is notified to conntinue"); + statCollectorLock.notify(); + } } } } @@ -186,6 +192,8 @@ public class StatPermCollectorImpl implements StatPermCollector { @Override public void run() { try { + // sleep 5 second before collecting all statistics cycles is important + // for loading all Nodes to Operational/DS Thread.sleep(5000); } catch (final InterruptedException e1) { @@ -234,6 +242,7 @@ public class StatPermCollectorImpl implements StatPermCollector { } catch (final InterruptedException e) { LOG.warn("statCollector has been interrupted waiting stat Response sleep", e); } finally { + setActualTransactionId(null); wakeMe = false; } } @@ -249,49 +258,54 @@ public class StatPermCollectorImpl implements StatPermCollector { if ( ! isProvidedFlowNodeActive(nodeEntity.getKey())) { break; } - switch (statMarker) { - case PORT_STATS: - LOG.trace("STAT-MANAGER-collecting PORT-STATS for NodeRef {}", actualNodeRef); - manager.getRpcMsgManager().getAllPortsStat(actualNodeRef); - waitingForNotification(); - break; - case QUEUE_STATS: - LOG.trace("STAT-MANAGER-collecting QUEUE-STATS for NodeRef {}", actualNodeRef); - manager.getRpcMsgManager().getAllQueueStat(actualNodeRef); - waitingForNotification(); - break; - case TABLE_STATS: - LOG.trace("STAT-MANAGER-collecting TABLE-STATS for NodeRef {}", actualNodeRef); - manager.getRpcMsgManager().getAllTablesStat(actualNodeRef); - waitingForNotification(); - break; - case GROUP_STATS: - LOG.trace("STAT-MANAGER-collecting GROUP-STATS for NodeRef {}", actualNodeRef); - manager.getRpcMsgManager().getAllGroupsConfStats(actualNodeRef); - waitingForNotification(); - manager.getRpcMsgManager().getAllGroupsStat(actualNodeRef); - waitingForNotification(); - break; - case METER_STATS: - LOG.trace("STAT-MANAGER-collecting METER-STATS for NodeRef {}", actualNodeRef); - manager.getRpcMsgManager().getAllMeterConfigStat(actualNodeRef); - waitingForNotification(); - manager.getRpcMsgManager().getAllMetersStat(actualNodeRef); - waitingForNotification(); - break; - case FLOW_STATS: - LOG.trace("STAT-MANAGER-collecting FLOW-STATS-ALL_FLOWS for NodeRef {}", actualNodeRef); - manager.getRpcMsgManager().getAllFlowsStat(actualNodeRef); - waitingForNotification(); - LOG.trace("STAT-MANAGER-collecting FLOW-AGGREGATE-STATS for NodeRef {}", actualNodeRef); - for (short i = 0; i < maxTables; i++) { - final TableId tableId = new TableId(i); - manager.getRpcMsgManager().getAggregateFlowStat(actualNodeRef, tableId); + try { + switch (statMarker) { + case PORT_STATS: + LOG.trace("STAT-MANAGER-collecting PORT-STATS for NodeRef {}", actualNodeRef); + setActualTransactionId(manager.getRpcMsgManager().getAllPortsStat(actualNodeRef).get()); + waitingForNotification(); + break; + case QUEUE_STATS: + LOG.trace("STAT-MANAGER-collecting QUEUE-STATS for NodeRef {}", actualNodeRef); + setActualTransactionId(manager.getRpcMsgManager().getAllQueueStat(actualNodeRef).get()); + waitingForNotification(); + break; + case TABLE_STATS: + LOG.trace("STAT-MANAGER-collecting TABLE-STATS for NodeRef {}", actualNodeRef); + setActualTransactionId(manager.getRpcMsgManager().getAllTablesStat(actualNodeRef).get()); + waitingForNotification(); + break; + case GROUP_STATS: + LOG.trace("STAT-MANAGER-collecting GROUP-STATS for NodeRef {}", actualNodeRef); + setActualTransactionId(manager.getRpcMsgManager().getAllGroupsConfStats(actualNodeRef).get()); + waitingForNotification(); + setActualTransactionId(manager.getRpcMsgManager().getAllGroupsStat(actualNodeRef).get()); + waitingForNotification(); + break; + case METER_STATS: + LOG.trace("STAT-MANAGER-collecting METER-STATS for NodeRef {}", actualNodeRef); + setActualTransactionId(manager.getRpcMsgManager().getAllMeterConfigStat(actualNodeRef).get()); + waitingForNotification(); + setActualTransactionId(manager.getRpcMsgManager().getAllMetersStat(actualNodeRef).get()); + waitingForNotification(); + break; + case FLOW_STATS: + LOG.trace("STAT-MANAGER-collecting FLOW-STATS-ALL_FLOWS for NodeRef {}", actualNodeRef); + setActualTransactionId(manager.getRpcMsgManager().getAllFlowsStat(actualNodeRef).get()); + waitingForNotification(); + LOG.trace("STAT-MANAGER-collecting FLOW-AGGREGATE-STATS for NodeRef {}", actualNodeRef); + for (short i = 0; i < maxTables; i++) { + final TableId tableId = new TableId(i); + manager.getRpcMsgManager().getAggregateFlowStat(actualNodeRef, tableId); + } + break; + default: + /* Exception for programmers in implementation cycle */ + throw new IllegalStateException("Not implemented ASK for " + statMarker); } - break; - default: - /* Exception for programmers in implementation cycle */ - throw new IllegalStateException("Not implemented ASK for " + statMarker); + } catch (InterruptedException | ExecutionException ex) { + LOG.warn("Unexpected RPC exception by call RPC Future!", ex); + continue; } } } @@ -333,5 +347,17 @@ public class StatPermCollectorImpl implements StatPermCollector { } return true; } + + private boolean checkTransactionId(final TransactionId xid) { + synchronized (transNotifyLock) { + return actualTransactionId != null && actualTransactionId.equals(xid); + } + } + + private void setActualTransactionId(final TransactionId transactionId) { + synchronized (transNotifyLock) { + actualTransactionId = transactionId; + } + } } diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatRpcMsgManagerImpl.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatRpcMsgManagerImpl.java index 176e52708b..4870223c0f 100644 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatRpcMsgManagerImpl.java +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatRpcMsgManagerImpl.java @@ -40,6 +40,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111. import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetMeterFeaturesInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.OpendaylightMeterStatisticsService; import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.GetAllNodeConnectorsStatisticsInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.GetAllNodeConnectorsStatisticsOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.OpendaylightPortStatisticsService; import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetAllQueuesStatisticsFromAllPortsInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.OpendaylightQueueStatisticsService; @@ -82,7 +83,6 @@ public class StatRpcMsgManagerImpl implements StatRpcMsgManager { private final Cache> txCache; - private final long maxLifeForRequest = 50; /* 50 second */ private final int queueCapacity = 5000; private final OpendaylightGroupStatisticsService groupStatsService; @@ -97,7 +97,7 @@ public class StatRpcMsgManagerImpl implements StatRpcMsgManager { private volatile boolean finishing = false; public StatRpcMsgManagerImpl (final StatisticsManager manager, - final RpcConsumerRegistry rpcRegistry, final long minReqNetMonitInt) { + final RpcConsumerRegistry rpcRegistry, final long maxNodeForCollector) { Preconditions.checkArgument(manager != null, "StatisticManager can not be null!"); Preconditions.checkArgument(rpcRegistry != null, "RpcConsumerRegistry can not be null !"); groupStatsService = Preconditions.checkNotNull( @@ -120,7 +120,9 @@ public class StatRpcMsgManagerImpl implements StatRpcMsgManager { "OpendaylightQueueStatisticsService can not be null!"); statsRpcJobQueue = new LinkedBlockingQueue<>(queueCapacity); - txCache = CacheBuilder.newBuilder().expireAfterWrite(maxLifeForRequest, TimeUnit.SECONDS) + /* nr. 7 is here nr. of possible statistic which are waiting for notification + * - check it in StatPermCollectorImpl method collectStatCrossNetwork */ + txCache = CacheBuilder.newBuilder().expireAfterWrite((maxNodeForCollector * 7), TimeUnit.SECONDS) .maximumSize(10000).build(); } @@ -163,7 +165,8 @@ public class StatRpcMsgManagerImpl implements StatRpcMsgManager { @Override public void registrationRpcFutureCallBack( - final Future> future, final D inputObj, final NodeRef nodeRef) { + final Future> future, final D inputObj, final NodeRef nodeRef, + final SettableFuture resultTransId) { Futures.addCallback(JdkFutureAdapters.listenInPoolThread(future), new FutureCallback>() { @@ -174,6 +177,9 @@ public class StatRpcMsgManagerImpl implements StatRpcMsgManager { if (id == null) { LOG.warn("No protocol support"); } else { + if (resultTransId != null) { + resultTransId.set(id); + } final NodeKey nodeKey = nodeRef.getValue().firstKeyOf(Node.class, NodeKey.class); final String cacheKey = buildCacheKey(id, nodeKey.getId()); final TransactionCacheContainer container = @@ -264,8 +270,9 @@ public class StatRpcMsgManagerImpl implements StatRpcMsgManager { } @Override - public void getAllGroupsStat(final NodeRef nodeRef) { + public Future getAllGroupsStat(final NodeRef nodeRef) { Preconditions.checkArgument(nodeRef != null, "NodeRef can not be null!"); + final SettableFuture result = SettableFuture.create(); final RpcJobsQueue getAllGroupStat = new RpcJobsQueue() { @Override @@ -274,16 +281,18 @@ public class StatRpcMsgManagerImpl implements StatRpcMsgManager { new GetAllGroupStatisticsInputBuilder(); builder.setNode(nodeRef); registrationRpcFutureCallBack(groupStatsService - .getAllGroupStatistics(builder.build()), null, nodeRef); + .getAllGroupStatistics(builder.build()), null, nodeRef, result); return null; } }; addGetAllStatJob(getAllGroupStat); + return result; } @Override - public void getAllMetersStat(final NodeRef nodeRef) { + public Future getAllMetersStat(final NodeRef nodeRef) { Preconditions.checkArgument(nodeRef != null, "NodeRef can not be null!"); + final SettableFuture result = SettableFuture.create(); final RpcJobsQueue getAllMeterStat = new RpcJobsQueue() { @Override @@ -292,16 +301,18 @@ public class StatRpcMsgManagerImpl implements StatRpcMsgManager { new GetAllMeterStatisticsInputBuilder(); builder.setNode(nodeRef); registrationRpcFutureCallBack(meterStatsService - .getAllMeterStatistics(builder.build()), null, nodeRef); + .getAllMeterStatistics(builder.build()), null, nodeRef, result); return null; } }; addGetAllStatJob(getAllMeterStat); + return result; } @Override - public void getAllFlowsStat(final NodeRef nodeRef) { + public Future getAllFlowsStat(final NodeRef nodeRef) { Preconditions.checkArgument(nodeRef != null, "NodeRef can not be null!"); + final SettableFuture result = SettableFuture.create(); final RpcJobsQueue getAllFlowStat = new RpcJobsQueue() { @Override @@ -310,11 +321,12 @@ public class StatRpcMsgManagerImpl implements StatRpcMsgManager { new GetAllFlowsStatisticsFromAllFlowTablesInputBuilder(); builder.setNode(nodeRef); registrationRpcFutureCallBack(flowStatsService - .getAllFlowsStatisticsFromAllFlowTables(builder.build()), null, nodeRef); + .getAllFlowsStatisticsFromAllFlowTables(builder.build()), null, nodeRef, result); return null; } }; addGetAllStatJob(getAllFlowStat); + return result; } @Override @@ -334,7 +346,7 @@ public class StatRpcMsgManagerImpl implements StatRpcMsgManager { tbuilder.setId(tableId.getValue()); tbuilder.setKey(new TableKey(tableId.getValue())); registrationRpcFutureCallBack(flowStatsService - .getAggregateFlowStatisticsFromFlowTableForAllFlows(builder.build()), tbuilder.build(), nodeRef); + .getAggregateFlowStatisticsFromFlowTableForAllFlows(builder.build()), tbuilder.build(), nodeRef, null); return null; } }; @@ -342,8 +354,9 @@ public class StatRpcMsgManagerImpl implements StatRpcMsgManager { } @Override - public void getAllPortsStat(final NodeRef nodeRef) { + public Future getAllPortsStat(final NodeRef nodeRef) { Preconditions.checkArgument(nodeRef != null, "NodeRef can not be null!"); + final SettableFuture result = SettableFuture.create(); final RpcJobsQueue getAllPortsStat = new RpcJobsQueue() { @Override @@ -351,17 +364,20 @@ public class StatRpcMsgManagerImpl implements StatRpcMsgManager { final GetAllNodeConnectorsStatisticsInputBuilder builder = new GetAllNodeConnectorsStatisticsInputBuilder(); builder.setNode(nodeRef); - registrationRpcFutureCallBack(portStatsService - .getAllNodeConnectorsStatistics(builder.build()), null, nodeRef); + final Future> rpc = + portStatsService.getAllNodeConnectorsStatistics(builder.build()); + registrationRpcFutureCallBack(rpc, null, nodeRef, result); return null; } }; addGetAllStatJob(getAllPortsStat); + return result; } @Override - public void getAllTablesStat(final NodeRef nodeRef) { + public Future getAllTablesStat(final NodeRef nodeRef) { Preconditions.checkArgument(nodeRef != null, "NodeRef can not be null!"); + final SettableFuture result = SettableFuture.create(); final RpcJobsQueue getAllTableStat = new RpcJobsQueue() { @Override @@ -370,16 +386,18 @@ public class StatRpcMsgManagerImpl implements StatRpcMsgManager { new GetFlowTablesStatisticsInputBuilder(); builder.setNode(nodeRef); registrationRpcFutureCallBack(flowTableStatsService - .getFlowTablesStatistics(builder.build()), null, nodeRef); + .getFlowTablesStatistics(builder.build()), null, nodeRef, result); return null; } }; addGetAllStatJob(getAllTableStat); + return result; } @Override - public void getAllQueueStat(final NodeRef nodeRef) { + public Future getAllQueueStat(final NodeRef nodeRef) { Preconditions.checkArgument(nodeRef != null, "NodeRef can not be null!"); + final SettableFuture result = SettableFuture.create(); final RpcJobsQueue getAllQueueStat = new RpcJobsQueue() { @Override @@ -388,16 +406,18 @@ public class StatRpcMsgManagerImpl implements StatRpcMsgManager { new GetAllQueuesStatisticsFromAllPortsInputBuilder(); builder.setNode(nodeRef); registrationRpcFutureCallBack(queueStatsService - .getAllQueuesStatisticsFromAllPorts(builder.build()), null, nodeRef); + .getAllQueuesStatisticsFromAllPorts(builder.build()), null, nodeRef, result); return null; } }; addGetAllStatJob(getAllQueueStat); + return result; } @Override - public void getAllMeterConfigStat(final NodeRef nodeRef) { + public Future getAllMeterConfigStat(final NodeRef nodeRef) { Preconditions.checkArgument(nodeRef != null, "NodeRef can not be null!"); + final SettableFuture result = SettableFuture.create(); final RpcJobsQueue qetAllMeterConfStat = new RpcJobsQueue() { @Override @@ -406,11 +426,12 @@ public class StatRpcMsgManagerImpl implements StatRpcMsgManager { new GetAllMeterConfigStatisticsInputBuilder(); builder.setNode(nodeRef); registrationRpcFutureCallBack(meterStatsService - .getAllMeterConfigStatistics(builder.build()), null, nodeRef); + .getAllMeterConfigStatistics(builder.build()), null, nodeRef, result); return null; } }; addGetAllStatJob(qetAllMeterConfStat); + return result; } @Override @@ -423,7 +444,7 @@ public class StatRpcMsgManagerImpl implements StatRpcMsgManager { /* RPC input */ final GetGroupFeaturesInputBuilder input = new GetGroupFeaturesInputBuilder(); input.setNode(nodeRef); - registrationRpcFutureCallBack(groupStatsService.getGroupFeatures(input.build()), null, nodeRef); + registrationRpcFutureCallBack(groupStatsService.getGroupFeatures(input.build()), null, nodeRef, null); return null; } }; @@ -440,7 +461,7 @@ public class StatRpcMsgManagerImpl implements StatRpcMsgManager { /* RPC input */ final GetMeterFeaturesInputBuilder input = new GetMeterFeaturesInputBuilder(); input.setNode(nodeRef); - registrationRpcFutureCallBack(meterStatsService.getMeterFeatures(input.build()), null, nodeRef); + registrationRpcFutureCallBack(meterStatsService.getMeterFeatures(input.build()), null, nodeRef, null); return null; } }; @@ -448,8 +469,9 @@ public class StatRpcMsgManagerImpl implements StatRpcMsgManager { } @Override - public void getAllGroupsConfStats(final NodeRef nodeRef) { + public Future getAllGroupsConfStats(final NodeRef nodeRef) { Preconditions.checkArgument(nodeRef != null, "NodeRef can not be null!"); + final SettableFuture result = SettableFuture.create(); final RpcJobsQueue getAllGropConfStat = new RpcJobsQueue() { @Override @@ -458,12 +480,13 @@ public class StatRpcMsgManagerImpl implements StatRpcMsgManager { new GetGroupDescriptionInputBuilder(); builder.setNode(nodeRef); registrationRpcFutureCallBack(groupStatsService - .getGroupDescription(builder.build()), null, nodeRef); + .getGroupDescription(builder.build()), null, nodeRef, result); return null; } }; addGetAllStatJob(getAllGropConfStat); + return result; } public class TransactionCacheContainerImpl implements TransactionCacheContainer { diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatisticsManagerImpl.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatisticsManagerImpl.java index edf9fad433..1d03e38c16 100644 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatisticsManagerImpl.java +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatisticsManagerImpl.java @@ -8,8 +8,15 @@ package org.opendaylight.controller.md.statistics.manager.impl; -import com.google.common.base.Preconditions; -import com.google.common.util.concurrent.ThreadFactoryBuilder; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadFactory; + import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; @@ -28,6 +35,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.me import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.OpendaylightFlowStatisticsListener; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.OpendaylightFlowTableStatisticsListener; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.queues.Queue; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.OpendaylightGroupStatisticsListener; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group; @@ -39,14 +47,8 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.LinkedBlockingDeque; -import java.util.concurrent.ThreadFactory; +import com.google.common.base.Preconditions; +import com.google.common.util.concurrent.ThreadFactoryBuilder; /** * statistics-manager @@ -90,8 +92,8 @@ public class StatisticsManagerImpl implements StatisticsManager, Runnable { private final StatisticsManagerConfig statManagerConfig; - public StatisticsManagerImpl (final DataBroker dataBroker, StatisticsManagerConfig statManagerconfig) { - this.statManagerConfig = Preconditions.checkNotNull(statManagerconfig); + public StatisticsManagerImpl (final DataBroker dataBroker, final StatisticsManagerConfig statManagerconfig) { + statManagerConfig = Preconditions.checkNotNull(statManagerconfig); this.dataBroker = Preconditions.checkNotNull(dataBroker, "DataBroker can not be null!"); ThreadFactory threadFact; threadFact = new ThreadFactoryBuilder().setNameFormat("odl-stat-rpc-oper-thread-%d").build(); @@ -105,7 +107,7 @@ public class StatisticsManagerImpl implements StatisticsManager, Runnable { public void start(final NotificationProviderService notifService, final RpcConsumerRegistry rpcRegistry) { Preconditions.checkArgument(rpcRegistry != null, "RpcConsumerRegistry can not be null !"); - rpcMsgManager = new StatRpcMsgManagerImpl(this, rpcRegistry, statManagerConfig.getMinRequestNetMonitorInterval()); + rpcMsgManager = new StatRpcMsgManagerImpl(this, rpcRegistry, statManagerConfig.getMaxNodesForCollector()); statCollectors = Collections.emptyList(); nodeRegistrator = new StatNodeRegistrationImpl(this, dataBroker, notifService); flowListeningCommiter = new StatListenCommitFlow(this, dataBroker, notifService); @@ -247,10 +249,10 @@ public class StatisticsManagerImpl implements StatisticsManager, Runnable { } @Override - public void collectNextStatistics(final InstanceIdentifier nodeIdent) { + public void collectNextStatistics(final InstanceIdentifier nodeIdent, final TransactionId xid) { for (final StatPermCollector collector : statCollectors) { if (collector.isProvidedFlowNodeActive(nodeIdent)) { - collector.collectNextStatistics(); + collector.collectNextStatistics(xid); } } } diff --git a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/DataBrokerTestCustomizer.java b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/DataBrokerTestCustomizer.java index 30704997f3..de7d33e694 100644 --- a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/DataBrokerTestCustomizer.java +++ b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/DataBrokerTestCustomizer.java @@ -17,7 +17,7 @@ import org.opendaylight.controller.md.sal.binding.impl.ForwardedBackwardsCompati import org.opendaylight.controller.md.sal.binding.impl.ForwardedBindingDataBroker; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; -import org.opendaylight.controller.md.sal.dom.broker.impl.DOMDataBrokerImpl; +import org.opendaylight.controller.md.sal.dom.broker.impl.SerializedDOMDataBroker; import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore; import org.opendaylight.controller.sal.core.api.model.SchemaService; import org.opendaylight.controller.sal.core.spi.data.DOMStore; @@ -68,7 +68,7 @@ public class DataBrokerTestCustomizer { } public DOMDataBroker createDOMDataBroker() { - return new DOMDataBrokerImpl(getDatastores(), getCommitCoordinatorExecutor()); + return new SerializedDOMDataBroker(getDatastores(), getCommitCoordinatorExecutor()); } public ListeningExecutorService getCommitCoordinatorExecutor() { diff --git a/opendaylight/md-sal/topology-lldp-discovery/pom.xml b/opendaylight/md-sal/topology-lldp-discovery/pom.xml index e6a9a75337..cc684a58b2 100644 --- a/opendaylight/md-sal/topology-lldp-discovery/pom.xml +++ b/opendaylight/md-sal/topology-lldp-discovery/pom.xml @@ -14,7 +14,6 @@ 2.4.0 14.0.1 2.5 - 2.4.3 diff --git a/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfClientSession.java b/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfClientSession.java index 732b8fa1ca..9bafe9760a 100644 --- a/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfClientSession.java +++ b/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfClientSession.java @@ -36,7 +36,7 @@ public class NetconfClientSession extends AbstractNetconfSession capabilities) { super(sessionListener, channel, sessionId); this.capabilities = capabilities; - LOG.debug("Client Session {} created", toString()); + LOG.debug("Client Session {} created", this); } public Collection getServerCapabilities() { diff --git a/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/Main.java b/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/Main.java index e36d58591e..e441c709cc 100644 --- a/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/Main.java +++ b/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/Main.java @@ -147,7 +147,7 @@ public final class Main { void validate() { checkArgument(deviceCount > 0, "Device count has to be > 0"); - checkArgument(startingPort > 1024, "Starting port has to be > 1024"); + checkArgument(startingPort > 1023, "Starting port has to be > 1023"); if(schemasDir != null) { checkArgument(schemasDir.exists(), "Schemas dir has to exist"); @@ -167,6 +167,10 @@ public final class Main { final NetconfDeviceSimulator netconfDeviceSimulator = new NetconfDeviceSimulator(); try { final List openDevices = netconfDeviceSimulator.start(params); + if (openDevices.size() == 0) { + LOG.error("Failed to start any simulated devices, exiting..."); + System.exit(1); + } if(params.distroFolder != null) { final ConfigGenerator configGenerator = new ConfigGenerator(params.distroFolder, openDevices); final List generated = configGenerator.generate(params.ssh, params.generateConfigBatchSize, params.generateConfigsTimeout, params.generateConfigsAddress); diff --git a/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/NetconfDeviceSimulator.java b/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/NetconfDeviceSimulator.java index adcdea6073..c6cad90355 100644 --- a/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/NetconfDeviceSimulator.java +++ b/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/NetconfDeviceSimulator.java @@ -30,6 +30,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.lang.management.ManagementFactory; +import java.net.BindException; import java.net.Inet4Address; import java.net.InetSocketAddress; import java.net.URI; @@ -185,6 +186,10 @@ public class NetconfDeviceSimulator implements Closeable { final PEMGeneratorHostKeyProvider keyPairProvider = getPemGeneratorHostKeyProvider(); for (int i = 0; i < params.deviceCount; i++) { + if (currentPort > 65535) { + LOG.warn("Port cannot be greater than 65535, stopping further attempts."); + break; + } final InetSocketAddress address = getAddress(currentPort); final ChannelFuture server; @@ -197,14 +202,17 @@ public class NetconfDeviceSimulator implements Closeable { final SshProxyServer sshServer = new SshProxyServer(minaTimerExecutor, nettyThreadgroup, nioExecutor); sshServer.bind(getSshConfiguration(bindingAddress, tcpLocalAddress)); sshWrappers.add(sshServer); - } catch (final Exception e) { - LOG.warn("Cannot start simulated device on {}, skipping", address, e); + } catch (final BindException e) { + LOG.warn("Cannot start simulated device on {}, port already in use. Skipping.", address); // Close local server and continue server.cancel(true); if(server.isDone()) { server.channel().close(); } continue; + } catch (final IOException e) { + LOG.warn("Cannot start simulated device on {} due to IOException.", address, e); + break; } finally { currentPort++; } @@ -242,6 +250,8 @@ public class NetconfDeviceSimulator implements Closeable { if(openDevices.size() == params.deviceCount) { LOG.info("All simulated devices started successfully from port {} to {}", params.startingPort, currentPort - 1); + } else if (openDevices.size() == 0) { + LOG.warn("No simulated devices started."); } else { LOG.warn("Not all simulated devices started successfully. Started devices ar on ports {}", openDevices); } diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/NetconfUtil.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/NetconfUtil.java index 0269bcccb9..5fd53dce55 100644 --- a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/NetconfUtil.java +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/NetconfUtil.java @@ -8,7 +8,6 @@ package org.opendaylight.controller.netconf.util; import com.google.common.base.Preconditions; - import org.opendaylight.controller.netconf.api.NetconfDocumentedException; import org.opendaylight.controller.netconf.api.xml.XmlNetconfConstants; import org.opendaylight.controller.netconf.util.xml.XmlElement; @@ -19,7 +18,7 @@ import org.w3c.dom.Document; public final class NetconfUtil { - private static final Logger logger = LoggerFactory.getLogger(NetconfUtil.class); + private static final Logger LOG = LoggerFactory.getLogger(NetconfUtil.class); private NetconfUtil() {} @@ -30,7 +29,7 @@ public final class NetconfUtil { if (element.getName().equals(XmlNetconfConstants.OK)) { return response; } - logger.warn("Can not load last configuration. Operation failed."); + LOG.warn("Can not load last configuration. Operation failed."); throw new IllegalStateException("Can not load last configuration. Operation failed: " + XmlUtil.toString(response)); } diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/exception/MissingNameSpaceException.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/exception/MissingNameSpaceException.java index 6cc5006aba..d2a6d2b58d 100644 --- a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/exception/MissingNameSpaceException.java +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/exception/MissingNameSpaceException.java @@ -9,7 +9,6 @@ package org.opendaylight.controller.netconf.util.exception; import java.util.Collections; import java.util.Map; - import org.opendaylight.controller.netconf.api.NetconfDocumentedException; public class MissingNameSpaceException extends NetconfDocumentedException { diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/exception/UnexpectedElementException.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/exception/UnexpectedElementException.java index 7b5f52e396..6d7c7ca7c4 100644 --- a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/exception/UnexpectedElementException.java +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/exception/UnexpectedElementException.java @@ -9,7 +9,6 @@ package org.opendaylight.controller.netconf.util.exception; import java.util.Collections; import java.util.Map; - import org.opendaylight.controller.netconf.api.NetconfDocumentedException; public class UnexpectedElementException extends NetconfDocumentedException { diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/exception/UnexpectedNamespaceException.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/exception/UnexpectedNamespaceException.java index 582fd23e16..4a19390b36 100644 --- a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/exception/UnexpectedNamespaceException.java +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/exception/UnexpectedNamespaceException.java @@ -9,7 +9,6 @@ package org.opendaylight.controller.netconf.util.exception; import java.util.Collections; import java.util.Map; - import org.opendaylight.controller.netconf.api.NetconfDocumentedException; public class UnexpectedNamespaceException extends NetconfDocumentedException { diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfHelloMessage.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfHelloMessage.java index 15223cb60b..5cd17a2331 100644 --- a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfHelloMessage.java +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfHelloMessage.java @@ -8,11 +8,12 @@ package org.opendaylight.controller.netconf.util.messages; -import org.opendaylight.controller.netconf.api.NetconfMessage; - +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.collect.Sets; import java.util.Set; - import org.opendaylight.controller.netconf.api.NetconfDocumentedException; +import org.opendaylight.controller.netconf.api.NetconfMessage; import org.opendaylight.controller.netconf.api.xml.XmlNetconfConstants; import org.opendaylight.controller.netconf.util.exception.MissingNameSpaceException; import org.opendaylight.controller.netconf.util.xml.XmlElement; @@ -20,10 +21,6 @@ import org.opendaylight.controller.netconf.util.xml.XmlUtil; import org.w3c.dom.Document; import org.w3c.dom.Element; -import com.google.common.base.Optional; -import com.google.common.base.Preconditions; -import com.google.common.collect.Sets; - /** * NetconfMessage that can carry additional header with session metadata. See {@link org.opendaylight.controller.netconf.util.messages.NetconfHelloMessageAdditionalHeader} */ diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfHelloMessageAdditionalHeader.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfHelloMessageAdditionalHeader.java index d1e064eaeb..e50928d7bf 100644 --- a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfHelloMessageAdditionalHeader.java +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfHelloMessageAdditionalHeader.java @@ -9,7 +9,6 @@ package org.opendaylight.controller.netconf.util.messages; import com.google.common.base.Preconditions; - import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageHeader.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageHeader.java index fa26455c98..ac8a557d9a 100644 --- a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageHeader.java +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageHeader.java @@ -8,10 +8,9 @@ package org.opendaylight.controller.netconf.util.messages; -import java.nio.ByteBuffer; - import com.google.common.base.Charsets; import com.google.common.base.Preconditions; +import java.nio.ByteBuffer; /** * Netconf message header is used only when chunked framing mechanism is diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageUtil.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageUtil.java index c532b7f9a6..61b23202c3 100644 --- a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageUtil.java +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageUtil.java @@ -23,7 +23,7 @@ import org.w3c.dom.Document; public final class NetconfMessageUtil { - private static final Logger logger = LoggerFactory.getLogger(NetconfMessageUtil.class); + private static final Logger LOG = LoggerFactory.getLogger(NetconfMessageUtil.class); private NetconfMessageUtil() {} @@ -70,7 +70,7 @@ public final class NetconfMessageUtil { try { return input.getTextContent().trim(); } catch (NetconfDocumentedException e) { - logger.trace("Error fetching inpit text content becauese {}",e); + LOG.trace("Error fetching input text content",e); return null; } } diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/SendErrorExceptionUtil.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/SendErrorExceptionUtil.java index 6604834fe4..fe5ed03320 100644 --- a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/SendErrorExceptionUtil.java +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/SendErrorExceptionUtil.java @@ -9,14 +9,12 @@ package org.opendaylight.controller.netconf.util.messages; import com.google.common.base.Preconditions; - import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFutureListener; - -import org.opendaylight.controller.netconf.api.NetconfSession; import org.opendaylight.controller.netconf.api.NetconfDocumentedException; import org.opendaylight.controller.netconf.api.NetconfMessage; +import org.opendaylight.controller.netconf.api.NetconfSession; import org.opendaylight.controller.netconf.api.xml.XmlNetconfConstants; import org.opendaylight.controller.netconf.util.xml.XmlUtil; import org.slf4j.Logger; @@ -27,20 +25,20 @@ import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; public final class SendErrorExceptionUtil { - private static final Logger logger = LoggerFactory.getLogger(SendErrorExceptionUtil.class); + private static final Logger LOG = LoggerFactory.getLogger(SendErrorExceptionUtil.class); private SendErrorExceptionUtil() {} public static void sendErrorMessage(final NetconfSession session, final NetconfDocumentedException sendErrorException) { - logger.trace("Sending error {}", sendErrorException.getMessage(), sendErrorException); + LOG.trace("Sending error {}", sendErrorException.getMessage(), sendErrorException); final Document errorDocument = createDocument(sendErrorException); ChannelFuture f = session.sendMessage(new NetconfMessage(errorDocument)); f.addListener(new SendErrorVerifyingListener(sendErrorException)); } public static void sendErrorMessage(Channel channel, NetconfDocumentedException sendErrorException) { - logger.trace("Sending error {}", sendErrorException.getMessage(), sendErrorException); + LOG.trace("Sending error {}", sendErrorException.getMessage(), sendErrorException); final Document errorDocument = createDocument(sendErrorException); ChannelFuture f = channel.writeAndFlush(new NetconfMessage(errorDocument)); f.addListener(new SendErrorVerifyingListener(sendErrorException)); @@ -49,7 +47,7 @@ public final class SendErrorExceptionUtil { public static void sendErrorMessage(NetconfSession session, NetconfDocumentedException sendErrorException, NetconfMessage incommingMessage) { final Document errorDocument = createDocument(sendErrorException); - logger.trace("Sending error {}", XmlUtil.toString(errorDocument)); + LOG.trace("Sending error {}", XmlUtil.toString(errorDocument)); tryToCopyAttributes(incommingMessage.getDocument(), errorDocument, sendErrorException); ChannelFuture f = session.sendMessage(new NetconfMessage(errorDocument)); f.addListener(new SendErrorVerifyingListener(sendErrorException)); @@ -76,7 +74,7 @@ public final class SendErrorExceptionUtil { rpcReply.setAttributeNode((Attr) errorDocument.importNode(attr, true)); } } catch (final Exception e) { - logger.warn("Unable to copy incomming attributes to {}, returned rpc-error might be invalid for client", + LOG.warn("Unable to copy incomming attributes to {}, returned rpc-error might be invalid for client", sendErrorException, e); } } diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/osgi/NetconfConfigUtil.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/osgi/NetconfConfigUtil.java index c77e0d7da2..64aeebd542 100644 --- a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/osgi/NetconfConfigUtil.java +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/osgi/NetconfConfigUtil.java @@ -16,7 +16,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public final class NetconfConfigUtil { - private static final Logger logger = LoggerFactory.getLogger(NetconfConfigUtil.class); + private static final Logger LOG = LoggerFactory.getLogger(NetconfConfigUtil.class); private static final String PREFIX_PROP = "netconf."; @@ -48,7 +48,7 @@ public final class NetconfConfigUtil { try { return Long.parseLong(timeoutString); } catch (final NumberFormatException e) { - logger.warn("Cannot parse {} property: {}, using defaults", key, timeoutString, e); + LOG.warn("Cannot parse {} property: {}, using defaults", key, timeoutString, e); return DEFAULT_TIMEOUT_MILLIS; } } @@ -89,7 +89,7 @@ public final class NetconfConfigUtil { try { return Optional.of(parseAddress(address, port)); } catch (final RuntimeException e) { - logger.warn("Unable to parse {} netconf address from {}:{}, fallback to default", + LOG.warn("Unable to parse {} netconf address from {}:{}, fallback to default", infixProp, address, port, e); } } diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/HardcodedNamespaceResolver.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/HardcodedNamespaceResolver.java index 23fe7cdf41..87ecb2de09 100644 --- a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/HardcodedNamespaceResolver.java +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/HardcodedNamespaceResolver.java @@ -8,14 +8,12 @@ package org.opendaylight.controller.netconf.util.xml; +import com.google.common.collect.ImmutableMap; import java.util.Collections; import java.util.Iterator; import java.util.Map; - import javax.xml.namespace.NamespaceContext; -import com.google.common.collect.ImmutableMap; - // http://www.ibm.com/developerworks/library/x-nmspccontext/ public class HardcodedNamespaceResolver implements NamespaceContext { private final Map prefixesToNamespaces; diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/XMLNetconfUtil.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/XMLNetconfUtil.java index e7ce454155..eaaf320b02 100644 --- a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/XMLNetconfUtil.java +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/XMLNetconfUtil.java @@ -12,7 +12,6 @@ import javax.xml.xpath.XPath; import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; - import org.opendaylight.controller.netconf.api.xml.XmlNetconfConstants; public final class XMLNetconfUtil { diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/XmlElement.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/XmlElement.java index 3c63204881..e17cad977c 100644 --- a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/XmlElement.java +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/XmlElement.java @@ -40,7 +40,7 @@ public final class XmlElement { public static final String DEFAULT_NAMESPACE_PREFIX = ""; private final Element element; - private static final Logger logger = LoggerFactory.getLogger(XmlElement.class); + private static final Logger LOG = LoggerFactory.getLogger(XmlElement.class); private XmlElement(Element element) { this.element = element; @@ -132,7 +132,7 @@ public final class XmlElement { public void checkNamespace(String expectedNamespace) throws UnexpectedNamespaceException, MissingNameSpaceException { if (!getNamespace().equals(expectedNamespace)) - { + { throw new UnexpectedNamespaceException(String.format("Unexpected namespace %s should be %s", getNamespace(), expectedNamespace), @@ -405,7 +405,7 @@ public final class XmlElement { try { sb.append(", namespace='").append(getNamespace()).append('\''); } catch (MissingNameSpaceException e) { - logger.trace("Missing namespace for element."); + LOG.trace("Missing namespace for element."); } } sb.append('}'); diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/XmlNetconfValidator.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/XmlNetconfValidator.java index 8108c8e740..bdab8c6209 100644 --- a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/XmlNetconfValidator.java +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/XmlNetconfValidator.java @@ -8,19 +8,16 @@ package org.opendaylight.controller.netconf.util.xml; +import com.google.common.base.Preconditions; import java.io.IOException; import java.io.InputStream; - import javax.xml.transform.Source; import javax.xml.transform.dom.DOMSource; import javax.xml.validation.Schema; import javax.xml.validation.Validator; - import org.w3c.dom.Document; import org.xml.sax.SAXException; -import com.google.common.base.Preconditions; - public final class XmlNetconfValidator { private static final Schema SCHEMA; diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/XmlUtil.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/XmlUtil.java index 9e227ee05d..68c4d9fdab 100644 --- a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/XmlUtil.java +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/xml/XmlUtil.java @@ -10,14 +10,12 @@ package org.opendaylight.controller.netconf.util.xml; import com.google.common.base.Charsets; import com.google.common.base.Optional; - import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; - import javax.xml.XMLConstants; import javax.xml.namespace.QName; import javax.xml.parsers.DocumentBuilder; @@ -35,7 +33,6 @@ import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathExpressionException; - import org.opendaylight.controller.netconf.api.xml.XmlNetconfConstants; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -124,7 +121,7 @@ public final class XmlUtil { public static Element createTextElementWithNamespacedContent(Document document, String qName, String prefix, String namespace, String contentWithoutPrefix) { - return createTextElementWithNamespacedContent(document, qName, prefix, namespace, contentWithoutPrefix, Optional.absent()); + return createTextElementWithNamespacedContent(document, qName, prefix, namespace, contentWithoutPrefix, Optional.absent()); } public static Element createTextElementWithNamespacedContent(Document document, String qName, String prefix, diff --git a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/NetconfUtilTest.java b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/NetconfUtilTest.java index 47d0d4c7cc..dc175c5733 100644 --- a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/NetconfUtilTest.java +++ b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/NetconfUtilTest.java @@ -7,9 +7,10 @@ */ package org.opendaylight.controller.netconf.util; -import static org.hamcrest.CoreMatchers.containsString; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; +import static org.hamcrest.CoreMatchers.containsString; + import org.junit.Test; import org.opendaylight.controller.netconf.util.xml.XmlUtil; import org.w3c.dom.Document; diff --git a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/mapping/AbstractLastNetconfOperationTest.java b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/mapping/AbstractLastNetconfOperationTest.java index 62633dd3f2..a6d1d5b999 100644 --- a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/mapping/AbstractLastNetconfOperationTest.java +++ b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/mapping/AbstractLastNetconfOperationTest.java @@ -8,6 +8,11 @@ package org.opendaylight.controller.netconf.util.mapping; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; + import org.junit.Before; import org.junit.Test; import org.opendaylight.controller.netconf.api.NetconfDocumentedException; @@ -17,11 +22,6 @@ import org.opendaylight.controller.netconf.util.xml.XmlElement; import org.w3c.dom.Document; import org.w3c.dom.Element; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; - public class AbstractLastNetconfOperationTest { class LastNetconfOperationImplTest extends AbstractLastNetconfOperation { diff --git a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/mapping/AbstractNetconfOperationTest.java b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/mapping/AbstractNetconfOperationTest.java index ea4a6e61f2..c7f6321e2c 100644 --- a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/mapping/AbstractNetconfOperationTest.java +++ b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/mapping/AbstractNetconfOperationTest.java @@ -8,6 +8,11 @@ package org.opendaylight.controller.netconf.util.mapping; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; + import java.io.IOException; import org.junit.Before; import org.junit.Test; @@ -21,11 +26,6 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xml.sax.SAXException; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.mock; - public class AbstractNetconfOperationTest { class NetconfOperationImpl extends AbstractNetconfOperation { diff --git a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/mapping/AbstractSingletonNetconfOperationTest.java b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/mapping/AbstractSingletonNetconfOperationTest.java index d1310de3e2..911b73f097 100644 --- a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/mapping/AbstractSingletonNetconfOperationTest.java +++ b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/mapping/AbstractSingletonNetconfOperationTest.java @@ -8,6 +8,8 @@ package org.opendaylight.controller.netconf.util.mapping; +import static org.junit.Assert.assertEquals; + import org.junit.Test; import org.opendaylight.controller.netconf.api.NetconfDocumentedException; import org.opendaylight.controller.netconf.mapping.api.HandlingPriority; @@ -15,8 +17,6 @@ import org.opendaylight.controller.netconf.util.xml.XmlElement; import org.w3c.dom.Document; import org.w3c.dom.Element; -import static org.junit.Assert.assertEquals; - public class AbstractSingletonNetconfOperationTest { class SingletonNCOperationImpl extends AbstractSingletonNetconfOperation { diff --git a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/NetconfHelloMessageAdditionalHeaderTest.java b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/NetconfHelloMessageAdditionalHeaderTest.java index 95c91243af..5e50eb93fb 100644 --- a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/NetconfHelloMessageAdditionalHeaderTest.java +++ b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/NetconfHelloMessageAdditionalHeaderTest.java @@ -8,11 +8,11 @@ package org.opendaylight.controller.netconf.util.messages; +import static org.junit.Assert.assertEquals; + import org.junit.Before; import org.junit.Test; -import static org.junit.Assert.assertEquals; - public class NetconfHelloMessageAdditionalHeaderTest { diff --git a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/NetconfHelloMessageTest.java b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/NetconfHelloMessageTest.java index 5a9d07f6b1..4e157186ff 100644 --- a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/NetconfHelloMessageTest.java +++ b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/NetconfHelloMessageTest.java @@ -11,6 +11,7 @@ package org.opendaylight.controller.netconf.util.messages; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; + import com.google.common.base.Optional; import java.util.Set; import org.junit.Before; diff --git a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageHeaderTest.java b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageHeaderTest.java index d5ff3380d2..05c31be395 100644 --- a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageHeaderTest.java +++ b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageHeaderTest.java @@ -10,6 +10,7 @@ package org.opendaylight.controller.netconf.util.messages; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; + import com.google.common.base.Charsets; import org.junit.Test; diff --git a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageUtilTest.java b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageUtilTest.java index 2af34e957e..12769f5ed3 100644 --- a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageUtilTest.java +++ b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageUtilTest.java @@ -8,15 +8,15 @@ package org.opendaylight.controller.netconf.util.messages; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + import java.util.Collection; import org.junit.Test; import org.opendaylight.controller.netconf.api.NetconfMessage; import org.opendaylight.controller.netconf.util.test.XmlFileLoader; import org.w3c.dom.Document; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - public class NetconfMessageUtilTest { @Test public void testNetconfMessageUtil() throws Exception { diff --git a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/SendErrorExceptionUtilTest.java b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/SendErrorExceptionUtilTest.java index c8d562cb9c..20287741b9 100644 --- a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/SendErrorExceptionUtilTest.java +++ b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/SendErrorExceptionUtilTest.java @@ -8,6 +8,12 @@ package org.opendaylight.controller.netconf.util.messages; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import io.netty.util.concurrent.GenericFutureListener; @@ -19,9 +25,6 @@ import org.opendaylight.controller.netconf.api.NetconfSession; import org.opendaylight.controller.netconf.util.test.XmlFileLoader; import org.w3c.dom.Document; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.*; - public class SendErrorExceptionUtilTest { NetconfSession netconfSession; diff --git a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/osgi/NetconfConfigUtilTest.java b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/osgi/NetconfConfigUtilTest.java index ebee41145a..1a701057aa 100644 --- a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/osgi/NetconfConfigUtilTest.java +++ b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/osgi/NetconfConfigUtilTest.java @@ -13,6 +13,7 @@ import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; + import com.google.common.base.Optional; import io.netty.channel.local.LocalAddress; import java.net.InetSocketAddress; diff --git a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/test/XmlFileLoader.java b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/test/XmlFileLoader.java index 457dda3080..e1331b1380 100644 --- a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/test/XmlFileLoader.java +++ b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/test/XmlFileLoader.java @@ -8,23 +8,20 @@ package org.opendaylight.controller.netconf.util.test; +import com.google.common.base.Charsets; +import com.google.common.base.Preconditions; +import com.google.common.io.CharStreams; +import com.google.common.io.InputSupplier; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; - import javax.xml.parsers.ParserConfigurationException; - import org.opendaylight.controller.netconf.api.NetconfMessage; import org.opendaylight.controller.netconf.util.xml.XmlUtil; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xml.sax.SAXException; -import com.google.common.base.Charsets; -import com.google.common.base.Preconditions; -import com.google.common.io.CharStreams; -import com.google.common.io.InputSupplier; - public class XmlFileLoader { public static NetconfMessage xmlFileToNetconfMessage(final String fileName) throws IOException, SAXException, diff --git a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/xml/XmlElementTest.java b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/xml/XmlElementTest.java index a88de956e2..22210a394e 100644 --- a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/xml/XmlElementTest.java +++ b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/xml/XmlElementTest.java @@ -17,6 +17,7 @@ import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import com.google.common.base.Optional; import java.util.Map; import org.junit.Before; import org.junit.Test; @@ -25,8 +26,6 @@ import org.opendaylight.controller.netconf.util.exception.MissingNameSpaceExcept import org.w3c.dom.Document; import org.w3c.dom.Element; -import com.google.common.base.Optional; - public class XmlElementTest { private final String elementAsString = "" + diff --git a/opendaylight/netconf/netconf-util/src/test/resources/netconfMessages/startExi.xml b/opendaylight/netconf/netconf-util/src/test/resources/netconfMessages/startExi.xml index 5e94ac6110..0af445f17d 100644 --- a/opendaylight/netconf/netconf-util/src/test/resources/netconfMessages/startExi.xml +++ b/opendaylight/netconf/netconf-util/src/test/resources/netconfMessages/startExi.xml @@ -6,4 +6,4 @@ - + \ No newline at end of file diff --git a/opendaylight/netconf/netconf-util/src/test/resources/netconfMessages/stopExi.xml b/opendaylight/netconf/netconf-util/src/test/resources/netconfMessages/stopExi.xml index 170c753993..7f1fe849e8 100644 --- a/opendaylight/netconf/netconf-util/src/test/resources/netconfMessages/stopExi.xml +++ b/opendaylight/netconf/netconf-util/src/test/resources/netconfMessages/stopExi.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file