Merge "Do not pull javax.inject into features"
authorArunprakash D <d.arunprakash@ericsson.com>
Fri, 21 Aug 2020 16:36:50 +0000 (16:36 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Fri, 21 Aug 2020 16:36:50 +0000 (16:36 +0000)
102 files changed:
applications/arbitratorreconciliation/api/pom.xml
applications/arbitratorreconciliation/impl/pom.xml
applications/arbitratorreconciliation/pom.xml
applications/bulk-o-matic/pom.xml
applications/device-ownership-service/pom.xml
applications/forwardingrules-manager/pom.xml
applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/AbstractListeningCommiter.java
applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/FlowForwarder.java
applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/ForwardingRulesManagerImpl.java
applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/GroupForwarder.java
applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/ListenerRegistrationHelper.java [new file with mode: 0644]
applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/MeterForwarder.java
applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/TableForwarder.java
applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/util/FrmUtil.java
applications/forwardingrules-manager/src/test/java/test/mock/FlowListenerTest.java
applications/forwardingrules-manager/src/test/java/test/mock/GroupListenerTest.java
applications/forwardingrules-manager/src/test/java/test/mock/MeterListenerTest.java
applications/forwardingrules-manager/src/test/java/test/mock/NodeListenerTest.java
applications/forwardingrules-manager/src/test/java/test/mock/TableFeaturesListenerTest.java
applications/forwardingrules-manager/src/test/java/test/mock/util/FRMTest.java
applications/forwardingrules-sync/pom.xml
applications/lldp-speaker/pom.xml
applications/notification-supplier/pom.xml
applications/of-switch-config-pusher/pom.xml
applications/pom.xml
applications/reconciliation-framework/pom.xml
applications/southbound-cli/pom.xml
applications/table-miss-enforcer/pom.xml
applications/topology-lldp-discovery/pom.xml
applications/topology-manager/pom.xml
artifacts/pom.xml
distribution/karaf/pom.xml
drop-test-karaf/pom.xml
extension/features-extension-aggregator/features-openflowplugin-extension/pom.xml
extension/features-extension-aggregator/odl-openflowplugin-eric-extensions/pom.xml
extension/features-extension-aggregator/odl-openflowplugin-nxm-extensions/pom.xml
extension/features-extension-aggregator/odl-openflowplugin-onf-extensions/pom.xml
extension/features-extension-aggregator/pom.xml
extension/openflowjava-extension-eric/pom.xml
extension/openflowjava-extension-nicira-api/pom.xml
extension/openflowjava-extension-nicira/pom.xml
extension/openflowplugin-extension-api/pom.xml
extension/openflowplugin-extension-eric/pom.xml
extension/openflowplugin-extension-nicira/pom.xml
extension/openflowplugin-extension-onf/pom.xml
extension/pom.xml
extension/test-extension/pom.xml
features-aggregator/features-openflowplugin/pom.xml
features-aggregator/odl-openflowplugin-app-arbitratorreconciliation/pom.xml
features-aggregator/odl-openflowplugin-app-bulk-o-matic/pom.xml
features-aggregator/odl-openflowplugin-app-config-pusher/pom.xml
features-aggregator/odl-openflowplugin-app-forwardingrules-manager/pom.xml
features-aggregator/odl-openflowplugin-app-forwardingrules-sync/pom.xml
features-aggregator/odl-openflowplugin-app-lldp-speaker/pom.xml
features-aggregator/odl-openflowplugin-app-notifications/pom.xml
features-aggregator/odl-openflowplugin-app-reconciliation-framework/pom.xml
features-aggregator/odl-openflowplugin-app-southbound-cli/pom.xml
features-aggregator/odl-openflowplugin-app-table-miss-enforcer/pom.xml
features-aggregator/odl-openflowplugin-app-topology-lldp-discovery/pom.xml
features-aggregator/odl-openflowplugin-app-topology-manager/pom.xml
features-aggregator/odl-openflowplugin-app-topology/pom.xml
features-aggregator/odl-openflowplugin-drop-test/pom.xml
features-aggregator/odl-openflowplugin-flow-services-rest/pom.xml
features-aggregator/odl-openflowplugin-flow-services/pom.xml
features-aggregator/odl-openflowplugin-libraries/pom.xml
features-aggregator/odl-openflowplugin-nsf-model/pom.xml
features-aggregator/odl-openflowplugin-southbound/pom.xml
features-aggregator/pom.xml
libraries/liblldp/pom.xml
libraries/pom.xml
model/model-flow-base/pom.xml
model/model-flow-service/pom.xml
model/model-flow-statistics/pom.xml
model/pom.xml
openflowjava/features-openflowjava-aggregator/features-openflowjava/pom.xml
openflowjava/features-openflowjava-aggregator/odl-openflowjava-protocol/pom.xml
openflowjava/features-openflowjava-aggregator/pom.xml
openflowjava/openflow-protocol-api/pom.xml
openflowjava/openflow-protocol-impl/pom.xml
openflowjava/openflow-protocol-it/pom.xml
openflowjava/openflow-protocol-spi/pom.xml
openflowjava/openflowjava-blueprint-config/pom.xml
openflowjava/openflowjava-util/pom.xml
openflowjava/pom.xml
openflowplugin-api/pom.xml
openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/registry/flow/DeviceFlowRegistry.java
openflowplugin-blueprint-config/pom.xml
openflowplugin-common/pom.xml
openflowplugin-impl/pom.xml
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/registry/flow/DeviceFlowRegistryImpl.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/sal/SalFlowServiceImpl.java
openflowplugin-it/pom.xml
openflowplugin/pom.xml
parent/pom.xml
pom.xml
samples/learning-switch/pom.xml
samples/pom.xml
samples/sample-bundles/pom.xml
samples/sample-consumer/pom.xml
samples/simple-client/pom.xml
test-common/pom.xml
test-provider/pom.xml

index 015a03ef3f1bea2f9a37af100eef492d109a8a14..1776c6641d5bd122a316cc08c4a2f3109495daba 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../../../parent</relativePath>
     </parent>
 
index 943979a53a32138c4ac8252538983ce4e9601eb3..a67c90f0ada266e95fcf445aaec0056e0954a40e 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../../../parent</relativePath>
     </parent>
 
index 643b94c03f49e087d9ce375db0954aa057e829f9..7f4510b26767a796e60243d226dc3c9b03765367 100644 (file)
@@ -11,7 +11,7 @@
 
     <groupId>org.opendaylight.openflowplugin.applications</groupId>
     <artifactId>arbitratorreconciliation-aggregator</artifactId>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
     <packaging>pom</packaging>
     <name>ODL :: openflowplugin :: ${project.artifactId}</name>
 
index 8520841eed2436c2cad0b00249acbdfbe009c2fa..12afa82cc604fb6989084e845caddafcaa06ea75 100644 (file)
@@ -4,7 +4,7 @@
   <parent>
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>openflowplugin-parent</artifactId>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
index 71219d6fea7a38162e17404dee51ec34c462acf0..4bf564c5c95e5165da31f712472e07f390857928 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../../parent</relativePath>
     </parent>
 
index 37cc37b77e57cf8a7c195a438f21725567ee2369..4345eeff472b0a5fff324b2bbae88c261f2dc0b5 100644 (file)
@@ -4,7 +4,7 @@
   <parent>
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>openflowplugin-parent</artifactId>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
index c45e90c2d133aa28d781c97325039945e4d8bfa3..77390a7cc34342da7a7b65c8b7db99556374e7e7 100644 (file)
@@ -8,15 +8,22 @@
 package org.opendaylight.openflowplugin.applications.frm.impl;
 
 import com.google.common.base.Preconditions;
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.MoreExecutors;
 import java.util.Collection;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.DataObjectModification;
+import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.openflowplugin.applications.frm.ForwardingRulesCommiter;
 import org.opendaylight.openflowplugin.applications.frm.ForwardingRulesManager;
 import org.opendaylight.openflowplugin.applications.frm.NodeConfigurator;
 import org.opendaylight.serviceutils.srm.RecoverableListener;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
@@ -26,24 +33,28 @@ import org.slf4j.LoggerFactory;
  * AbstractChangeListner implemented basic {@link org.opendaylight.mdsal.binding.api.DataTreeModification}
  * processing for flow node subDataObject (flows, groups and meters).
  */
-public abstract class AbstractListeningCommiter<T extends DataObject> implements ForwardingRulesCommiter<T>,
-        RecoverableListener {
+public abstract class AbstractListeningCommiter<T extends DataObject>
+        implements ForwardingRulesCommiter<T>, RecoverableListener {
 
     private static final Logger LOG = LoggerFactory.getLogger(AbstractListeningCommiter.class);
-
     final ForwardingRulesManager provider;
     NodeConfigurator nodeConfigurator;
     protected final DataBroker dataBroker;
+    protected final ListenerRegistrationHelper registrationHelper;
+    protected ListenerRegistration<AbstractListeningCommiter> listenerRegistration;
 
-    public AbstractListeningCommiter(final ForwardingRulesManager provider, final DataBroker dataBroker) {
+    public AbstractListeningCommiter(final ForwardingRulesManager provider, final DataBroker dataBroker,
+                                     final ListenerRegistrationHelper registrationHelper) {
         this.provider = Preconditions.checkNotNull(provider, "ForwardingRulesManager can not be null!");
         this.nodeConfigurator = Preconditions.checkNotNull(provider.getNodeConfigurator(),
                 "NodeConfigurator can not be null!");
         this.dataBroker = Preconditions.checkNotNull(dataBroker, "DataBroker can not be null!");
+        this.registrationHelper = Preconditions.checkNotNull(registrationHelper, "registrationHelper can not be null!");
         registerListener();
         provider.addRecoverableListener(this);
     }
 
+    @SuppressWarnings("checkstyle:IllegalCatch")
     @Override
     public void onDataTreeChanged(Collection<DataTreeModification<T>> changes) {
         Preconditions.checkNotNull(changes, "Changes may not be null!");
@@ -54,46 +65,73 @@ public abstract class AbstractListeningCommiter<T extends DataObject> implements
             final DataObjectModification<T> mod = change.getRootNode();
             final InstanceIdentifier<FlowCapableNode> nodeIdent =
                     key.firstIdentifierOf(FlowCapableNode.class);
-            if (preConfigurationCheck(nodeIdent)) {
-                switch (mod.getModificationType()) {
-                    case DELETE:
-                        remove(key, mod.getDataBefore(), nodeIdent);
-                        break;
-                    case SUBTREE_MODIFIED:
-                        update(key, mod.getDataBefore(), mod.getDataAfter(), nodeIdent);
-                        break;
-                    case WRITE:
-                        if (mod.getDataBefore() == null) {
-                            add(key, mod.getDataAfter(), nodeIdent);
-                        } else {
-                            update(key, mod.getDataBefore(), mod.getDataAfter(), nodeIdent);
-                        }
-                        break;
-                    default:
-                        throw new IllegalArgumentException("Unhandled modification type " + mod.getModificationType());
-                }
-            } else {
-                if (provider.isStaleMarkingEnabled()) {
-                    LOG.info("Stale-Marking ENABLED and switch {} is NOT connected, storing stale entities",
-                            nodeIdent.toString());
-                    // Switch is NOT connected
+            try {
+                if (preConfigurationCheck(nodeIdent)) {
                     switch (mod.getModificationType()) {
                         case DELETE:
-                            createStaleMarkEntity(key, mod.getDataBefore(), nodeIdent);
+                            remove(key, mod.getDataBefore(), nodeIdent);
                             break;
                         case SUBTREE_MODIFIED:
+                            update(key, mod.getDataBefore(), mod.getDataAfter(), nodeIdent);
                             break;
                         case WRITE:
+                            if (mod.getDataBefore() == null) {
+                                add(key, mod.getDataAfter(), nodeIdent);
+                            } else {
+                                update(key, mod.getDataBefore(), mod.getDataAfter(), nodeIdent);
+                            }
                             break;
                         default:
                             throw new
-                            IllegalArgumentException("Unhandled modification type " + mod.getModificationType());
+                                    IllegalArgumentException("Unhandled modification type "
+                                    + mod.getModificationType());
+                    }
+                } else {
+                    if (provider.isStaleMarkingEnabled()) {
+                        LOG.info("Stale-Marking ENABLED and switch {} is NOT connected, storing stale entities",
+                                nodeIdent.toString());
+                        // Switch is NOT connected
+                        switch (mod.getModificationType()) {
+                            case DELETE:
+                                createStaleMarkEntity(key, mod.getDataBefore(), nodeIdent);
+                                break;
+                            case SUBTREE_MODIFIED:
+                                break;
+                            case WRITE:
+                                break;
+                            default:
+                                throw new
+                                        IllegalArgumentException("Unhandled modification type "
+                                        + mod.getModificationType());
+                        }
                     }
                 }
+            } catch (RuntimeException e) {
+                LOG.error("Failed to handle event {} key {} due to error ", mod.getModificationType(), key, e);
             }
         }
     }
 
+    @Override
+    public void registerListener() {
+        final DataTreeIdentifier<T> treeId =
+                DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, getWildCardPath());
+        Futures.addCallback(registrationHelper.checkedRegisterListener(treeId, this),
+                new FutureCallback<ListenerRegistration<AbstractListeningCommiter>>() {
+                    @Override
+                    public void onSuccess(
+                            @Nullable ListenerRegistration<AbstractListeningCommiter> flowListenerRegistration) {
+                        LOG.info("{} registered successfully", flowListenerRegistration.getInstance());
+                        listenerRegistration = flowListenerRegistration;
+                    }
+
+                    @Override
+                    public void onFailure(Throwable throwable) {
+                        LOG.error("Registration failed ", throwable);
+                    }
+                }, MoreExecutors.directExecutor());
+    }
+
     /**
      * Method return wildCardPath for Listener registration
      * and for identify the correct KeyInstanceIdentifier from data.
@@ -113,5 +151,4 @@ public abstract class AbstractListeningCommiter<T extends DataObject> implements
         // trigger the event of new node connected.
         return provider.isNodeOwner(nodeIdent);
     }
-}
-
+}
\ No newline at end of file
index 5c9600f34ce706d9505393cbe63a4157b0d02638..99935e4f1213bf28db965f7f18290a6a7c386ae3 100644 (file)
@@ -26,7 +26,6 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 import org.opendaylight.infrautils.utils.concurrent.LoggingFutures;
 import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.ReadTransaction;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
@@ -85,25 +84,14 @@ public class FlowForwarder extends AbstractListeningCommiter<Flow> {
 
     private ListenerRegistration<FlowForwarder> listenerRegistration;
 
-    public FlowForwarder(final ForwardingRulesManager manager, final DataBroker db) {
-        super(manager, db);
-    }
+    private final BundleFlowForwarder bundleFlowForwarder;
 
-    @Override
-    @SuppressWarnings("IllegalCatch")
-    public void registerListener() {
-        final DataTreeIdentifier<Flow> treeId = DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION,
-                getWildCardPath());
-        try {
-            listenerRegistration = dataBroker.registerDataTreeChangeListener(treeId, FlowForwarder.this);
-        } catch (final Exception e) {
-            LOG.warn("FRM Flow DataTreeChange listener registration fail!");
-            LOG.debug("FRM Flow DataTreeChange listener registration fail ..", e);
-            throw new IllegalStateException("FlowForwarder startup fail! System needs restart.", e);
-        }
+    public FlowForwarder(final ForwardingRulesManager manager, final DataBroker db,
+                         final ListenerRegistrationHelper registrationHelper) {
+        super(manager, db, registrationHelper);
+        bundleFlowForwarder = new BundleFlowForwarder(manager);
     }
 
-
     @Override
     public  void deregisterListener() {
         close();
@@ -466,4 +454,4 @@ public class FlowForwarder extends AbstractListeningCommiter<Flow> {
             resultFuture.setException(throwable);
         }
     }
-}
+}
\ No newline at end of file
index 30ea3e27d3d89524104b841eccecd4964b7bb2a2..4b45c0f3571881180fff0c690cf8c8f8dedd4507 100644 (file)
@@ -107,6 +107,7 @@ public class ForwardingRulesManagerImpl implements ForwardingRulesManager {
     private final OpenflowServiceRecoveryHandler openflowServiceRecoveryHandler;
     private final ServiceRecoveryRegistry serviceRecoveryRegistry;
     private final FlowGroupCacheManager flowGroupCacheManager;
+    private final ListenerRegistrationHelper registrationHelper;
 
     @Inject
     public ForwardingRulesManagerImpl(@Reference final DataBroker dataBroker,
@@ -119,12 +120,14 @@ public class ForwardingRulesManagerImpl implements ForwardingRulesManager {
                                       @Reference final ReconciliationManager reconciliationManager,
                                       final OpenflowServiceRecoveryHandler openflowServiceRecoveryHandler,
                                       @Reference final ServiceRecoveryRegistry serviceRecoveryRegistry,
-                                      @Reference final FlowGroupCacheManager flowGroupCacheManager) {
+                                      @Reference final FlowGroupCacheManager flowGroupCacheManager,
+                                      final ListenerRegistrationHelper registrationHelper) {
         disableReconciliation = config.isDisableReconciliation();
         staleMarkingEnabled = config.isStaleMarkingEnabled();
         reconciliationRetryCount = config.getReconciliationRetryCount().toJava();
         isBundleBasedReconciliationEnabled = config.isBundleBasedReconciliationEnabled();
         this.configurationServiceRegistration = configurationService.registerListener(this);
+        this.registrationHelper = Preconditions.checkNotNull(registrationHelper, "RegistrationHelper cannot be null");
         this.dataService = Preconditions.checkNotNull(dataBroker, "DataBroker can not be null!");
         this.clusterSingletonServiceProvider = Preconditions.checkNotNull(clusterSingletonService,
                 "ClusterSingletonService provider can not be null");
@@ -174,10 +177,10 @@ public class ForwardingRulesManagerImpl implements ForwardingRulesManager {
 
         this.bundleFlowListener = new BundleFlowForwarder(this);
         this.bundleGroupListener = new BundleGroupForwarder(this);
-        this.flowListener = new FlowForwarder(this, dataService);
-        this.groupListener = new GroupForwarder(this, dataService);
-        this.meterListener = new MeterForwarder(this, dataService);
-        this.tableListener = new TableForwarder(this, dataService);
+        this.flowListener = new FlowForwarder(this, dataService, registrationHelper);
+        this.groupListener = new GroupForwarder(this, dataService, registrationHelper);
+        this.meterListener = new MeterForwarder(this, dataService, registrationHelper);
+        this.tableListener = new TableForwarder(this, dataService, registrationHelper);
         LOG.info("ForwardingRulesManager has started successfully.");
     }
 
index eae69f575297e68fbf261574be5312bd9f7e8968..9b65c0374ba471d13623aad372380d95399f5bd0 100644 (file)
@@ -18,7 +18,6 @@ import com.google.common.util.concurrent.MoreExecutors;
 import java.util.concurrent.Future;
 import org.opendaylight.infrautils.utils.concurrent.LoggingFutures;
 import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.openflowplugin.applications.frm.ForwardingRulesManager;
@@ -64,23 +63,12 @@ public class GroupForwarder extends AbstractListeningCommiter<Group> {
     private static final Logger LOG = LoggerFactory.getLogger(GroupForwarder.class);
     private ListenerRegistration<GroupForwarder> listenerRegistration;
 
-    public GroupForwarder(final ForwardingRulesManager manager, final DataBroker db) {
-        super(manager, db);
-    }
+    private final BundleGroupForwarder bundleGroupForwarder;
 
-    @SuppressWarnings("IllegalCatch")
-    @Override
-    public void registerListener() {
-        final DataTreeIdentifier<Group> treeId = DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION,
-                getWildCardPath());
-
-        try {
-            listenerRegistration = dataBroker.registerDataTreeChangeListener(treeId, GroupForwarder.this);
-        } catch (final Exception e) {
-            LOG.warn("FRM Group DataTreeChange listener registration fail!");
-            LOG.debug("FRM Group DataTreeChange listener registration fail ..", e);
-            throw new IllegalStateException("GroupForwarder startup fail! System needs restart.", e);
-        }
+    public GroupForwarder(final ForwardingRulesManager manager, final DataBroker db,
+                          final ListenerRegistrationHelper registrationHelper) {
+        super(manager, db, registrationHelper);
+        this.bundleGroupForwarder = new BundleGroupForwarder(manager);
     }
 
     @Override
diff --git a/applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/ListenerRegistrationHelper.java b/applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/ListenerRegistrationHelper.java
new file mode 100644 (file)
index 0000000..842560c
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2020 Ericsson India Global Services Pvt Ltd. 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.openflowplugin.applications.frm.impl;
+
+import static org.opendaylight.openflowplugin.applications.frm.util.FrmUtil.getInventoryConfigDataStoreStatus;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.common.util.concurrent.MoreExecutors;
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+import org.apache.aries.blueprint.annotation.service.Reference;
+import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
+import org.opendaylight.openflowplugin.common.wait.SimpleTaskRetryLooper;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+@Singleton
+public class ListenerRegistrationHelper {
+    private static final Logger LOG = LoggerFactory.getLogger(ListenerRegistrationHelper.class);
+    private final long inventoryCheckTimer = 1;
+    private final String operational = "OPERATIONAL";
+    private final ListeningExecutorService listeningExecutorService;
+    private final DataBroker dataBroker;
+
+    @Inject
+    public ListenerRegistrationHelper(@Reference final DataBroker dataBroker) {
+        this.dataBroker = dataBroker;
+        listeningExecutorService = MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor(
+                 new ThreadFactoryBuilder()
+                .setNameFormat("frm-listener" + "%d")
+                .setDaemon(false)
+                .setUncaughtExceptionHandler((thread, ex) -> LOG.error("Uncaught exception {}", thread, ex))
+                .build()));
+    }
+
+    public <T extends DataObject, L extends ClusteredDataTreeChangeListener<T>>
+        ListenableFuture<ListenerRegistration<L>>
+        checkedRegisterListener(DataTreeIdentifier<T> treeId, L listener) {
+        return listeningExecutorService.submit(() -> {
+            while (! getInventoryConfigDataStoreStatus().equals(operational)) {
+                try {
+                    LOG.debug("Retrying for datastore to become operational for listener {}", listener);
+                    Thread.sleep(inventoryCheckTimer * 1000);
+                } catch (InterruptedException e) {
+                    LOG.info("registerDataTreeChangeListener thread is interrupted");
+                    Thread.currentThread().interrupt();
+                }
+            }
+            SimpleTaskRetryLooper looper = new SimpleTaskRetryLooper(ForwardingRulesManagerImpl.STARTUP_LOOP_TICK,
+                    ForwardingRulesManagerImpl.STARTUP_LOOP_MAX_RETRIES);
+            return looper.loopUntilNoException(() -> dataBroker.registerDataTreeChangeListener(treeId, listener));
+        });
+    }
+
+    public void close() throws Exception {
+        MoreExecutors.shutdownAndAwaitTermination(listeningExecutorService, 5, TimeUnit.SECONDS);
+    }
+}
\ No newline at end of file
index 210bb1eb6f48e5b7cf3e24fadd2080a42605c5cd..ecf18514a3dffe0e706f3c583ef49c8921a80109 100644 (file)
@@ -13,7 +13,6 @@ import com.google.common.util.concurrent.MoreExecutors;
 import java.util.concurrent.Future;
 import org.opendaylight.infrautils.utils.concurrent.LoggingFutures;
 import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.openflowplugin.applications.frm.ForwardingRulesManager;
@@ -35,7 +34,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.met
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.meter.update.UpdatedMeterBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterRef;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
@@ -52,29 +50,14 @@ import org.slf4j.LoggerFactory;
 public class MeterForwarder extends AbstractListeningCommiter<Meter> {
 
     private static final Logger LOG = LoggerFactory.getLogger(MeterForwarder.class);
-    private ListenerRegistration<MeterForwarder> listenerRegistration;
 
-    public MeterForwarder(final ForwardingRulesManager manager, final DataBroker db) {
-        super(manager, db);
+    public MeterForwarder(final ForwardingRulesManager manager, final DataBroker db,
+                          final ListenerRegistrationHelper listenerRegistrationHelper) {
+        super(manager, db, listenerRegistrationHelper);
     }
 
-    @SuppressWarnings("IllegalCatch")
     @Override
-    public void registerListener() {
-        final DataTreeIdentifier<Meter> treeId = DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION,
-                getWildCardPath());
-
-        try {
-            listenerRegistration = dataBroker.registerDataTreeChangeListener(treeId, MeterForwarder.this);
-        } catch (final Exception e) {
-            LOG.warn("FRM Meter DataTreeChange listener registration fail!");
-            LOG.debug("FRM Meter DataTreeChange listener registration fail ..", e);
-            throw new IllegalStateException("MeterForwarder startup fail! System needs restart.", e);
-        }
-    }
-
-    @Override
-    public  void deregisterListener() {
+    public void deregisterListener() {
         close();
     }
 
index 10b5d1dd0eadc1527ab47a7406274e3ad0e173ba..f130593af1792a0425542014a681dfa65794dd8c 100644 (file)
@@ -12,8 +12,6 @@ import java.util.Collections;
 import java.util.concurrent.Future;
 import org.opendaylight.infrautils.utils.concurrent.LoggingFutures;
 import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
-import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.openflowplugin.applications.frm.ForwardingRulesManager;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
@@ -25,7 +23,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.table.service.rev131026.tab
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.service.rev131026.table.update.UpdatedTableBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableRef;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeatures;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
@@ -34,25 +31,10 @@ import org.slf4j.LoggerFactory;
 public class TableForwarder extends AbstractListeningCommiter<TableFeatures> {
 
     private static final Logger LOG = LoggerFactory.getLogger(TableForwarder.class);
-    private ListenerRegistration<TableForwarder> listenerRegistration;
 
-    public TableForwarder(final ForwardingRulesManager manager, final DataBroker db) {
-        super(manager, db);
-    }
-
-    @SuppressWarnings("IllegalCatch")
-    @Override
-    public void registerListener() {
-        final DataTreeIdentifier<TableFeatures> treeId = DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION,
-                getWildCardPath());
-
-        try {
-            listenerRegistration = dataBroker.registerDataTreeChangeListener(treeId, TableForwarder.this);
-        } catch (final Exception e) {
-            LOG.warn("FRM Table DataTreeChangeListener registration fail!");
-            LOG.debug("FRM Table DataTreeChangeListener registration fail ..", e);
-            throw new IllegalStateException("TableForwarder startup fail! System needs restart.", e);
-        }
+    public TableForwarder(final ForwardingRulesManager manager, final DataBroker db,
+                          final ListenerRegistrationHelper registrationHelper) {
+        super(manager, db, registrationHelper);
     }
 
     @Override
index c7f4cbba019c340f301d4922dcff41876e6df7a4..05ee7206e8e9d40c9246b25a016fa89d14a606e5 100644 (file)
@@ -8,12 +8,21 @@
 
 package org.opendaylight.openflowplugin.applications.frm.util;
 
+import java.lang.management.ManagementFactory;
 import java.math.BigInteger;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
+import javax.management.AttributeNotFoundException;
+import javax.management.InstanceNotFoundException;
+import javax.management.MBeanException;
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+import javax.management.ReflectionException;
 import org.opendaylight.openflowplugin.applications.frm.ActionType;
 import org.opendaylight.openflowplugin.applications.frm.ForwardingRulesManager;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCase;
@@ -44,11 +53,16 @@ import org.opendaylight.yangtools.yang.common.Uint8;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@SuppressWarnings("IllegalCatch")
 public final class FrmUtil {
     private static final Logger LOG = LoggerFactory.getLogger(FrmUtil.class);
     private static final String SEPARATOR = ":";
     private static final long RPC_RESULT_TIMEOUT = 2500;
 
+    private static final String JMX_OBJ_NAME_LIST_OF_SHRDS = "org.opendaylight.controller:type="
+            + "DistributedConfigDatastore,Category=ShardManager,name=shard-manager-config";
+    private static String JMX_OBJECT_SHARD_STATUS = "";
+
     private FrmUtil() {
         throw new IllegalStateException("This class should not be instantiated.");
     }
@@ -146,4 +160,70 @@ public final class FrmUtil {
         String nodeId = getNodeIdValueFromNodeIdentifier(nodeIdent);
         return provider.getDevicesGroupRegistry().isGroupPresent(nodeId, groupId);
     }
-}
+
+    public static String getInventoryConfigDataStoreStatus() {
+        boolean statusResult = true;
+        try {
+            ArrayList listOfShards = getAttributeJMXCommand(JMX_OBJ_NAME_LIST_OF_SHRDS, "LocalShards");
+            if (listOfShards != null) {
+                for (Object listOfShard : listOfShards) {
+                    LOG.info("Listofshard is  {} ",listOfShard);
+                    if (listOfShard.toString().contains("inventory")) {
+                        JMX_OBJECT_SHARD_STATUS =
+                                "org.opendaylight.controller:Category=Shards,name=" + listOfShard
+                                        + ",type=DistributedConfigDatastore";
+                        LOG.info("JMX object shard status is {} ",JMX_OBJECT_SHARD_STATUS);
+                        String leader = getLeaderJMX(JMX_OBJECT_SHARD_STATUS, "Leader");
+                        if (leader != null && leader.length() > 1) {
+                            LOG.info("{} ::Inventory Shard has the Leader as:: {}", listOfShard, leader);
+                        } else {
+                            statusResult = false;
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            LOG.error("ERROR ::", e);
+        }
+        if (statusResult) {
+            return "OPERATIONAL";
+        } else {
+            return "ERROR";
+        }
+    }
+
+    private static ArrayList getAttributeJMXCommand(String objectName, String attributeName) {
+        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
+        ArrayList listOfShards = new ArrayList();
+        if (mbs != null) {
+            try {
+                listOfShards = (ArrayList) mbs.getAttribute(new ObjectName(objectName), attributeName);
+            } catch (MBeanException | AttributeNotFoundException | InstanceNotFoundException
+                    | MalformedObjectNameException | ReflectionException e) {
+                LOG.error("Exception while reading list of shards ", e);
+            }
+        }
+        return listOfShards;
+    }
+
+    private static String getLeaderJMX(String objectName, String atrName) {
+        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
+        String leader = "";
+        if (mbs != null) {
+            try {
+                leader  = (String) mbs.getAttribute(new ObjectName(objectName), atrName);
+            } catch (MalformedObjectNameException monEx) {
+                LOG.error("CRITICAL EXCEPTION : Malformed Object Name Exception");
+            } catch (MBeanException mbEx) {
+                LOG.error("CRITICAL EXCEPTION : MBean Exception");
+            } catch (InstanceNotFoundException infEx) {
+                LOG.error("CRITICAL EXCEPTION : Instance Not Found Exception");
+            } catch (ReflectionException rEx) {
+                LOG.error("CRITICAL EXCEPTION : Reflection Exception");
+            } catch (Exception e) {
+                LOG.error("Attribute not found");
+            }
+        }
+        return leader;
+    }
+}
\ No newline at end of file
index 1e49669077f1a025a3186b22c23b0f42478f5f48..9d5d503f8d2d60d02573555db81a29a79321fcc7 100644 (file)
@@ -7,8 +7,8 @@
  */
 package test.mock;
 
+import static java.util.concurrent.TimeUnit.SECONDS;
 import static org.awaitility.Awaitility.await;
-import static org.hamcrest.Matchers.equalTo;
 import static org.junit.Assert.assertEquals;
 
 import java.util.Collections;
@@ -85,7 +85,7 @@ public class FlowListenerTest extends FRMTest {
         forwardingRulesManager = new ForwardingRulesManagerImpl(getDataBroker(), rpcProviderRegistryMock,
                 rpcProviderRegistryMock, getConfig(), mastershipChangeServiceManager, clusterSingletonService,
                 getConfigurationService(), reconciliationManager, openflowServiceRecoveryHandler,
-                serviceRecoveryRegistry, flowGroupCacheManager);
+                serviceRecoveryRegistry, flowGroupCacheManager, getRegistrationHelper());
         forwardingRulesManager.start();
         // TODO consider tests rewrite (added because of complicated access)
         forwardingRulesManager.setDeviceMastershipManager(deviceMastershipManager);
@@ -109,7 +109,7 @@ public class FlowListenerTest extends FRMTest {
         writeTx.put(LogicalDatastoreType.CONFIGURATION, flowII, flow);
         assertCommit(writeTx.commit());
         SalFlowServiceMock salFlowService = (SalFlowServiceMock) forwardingRulesManager.getSalFlowService();
-        await().until(listSize(salFlowService.getAddFlowCalls()), equalTo(1));
+        await().atMost(10, SECONDS).until(() -> salFlowService.getAddFlowCalls().size() == 1);
         List<AddFlowInput> addFlowCalls = salFlowService.getAddFlowCalls();
         assertEquals(1, addFlowCalls.size());
         assertEquals("DOM-0", addFlowCalls.get(0).getTransactionUri().getValue());
@@ -120,9 +120,9 @@ public class FlowListenerTest extends FRMTest {
         flow = new FlowBuilder().withKey(flowKey).setTableId((short) 2).build();
         writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.CONFIGURATION, flowII, flow);
+
         assertCommit(writeTx.commit());
-        salFlowService = (SalFlowServiceMock) forwardingRulesManager.getSalFlowService();
-        await().until(listSize(salFlowService.getAddFlowCalls()), equalTo(2));
+        await().atMost(10, SECONDS).until(() -> salFlowService.getAddFlowCalls().size() == 2);
         addFlowCalls = salFlowService.getAddFlowCalls();
         assertEquals(2, addFlowCalls.size());
         assertEquals("DOM-1", addFlowCalls.get(1).getTransactionUri().getValue());
@@ -146,8 +146,8 @@ public class FlowListenerTest extends FRMTest {
         writeTx.put(LogicalDatastoreType.CONFIGURATION, tableII, table);
         writeTx.put(LogicalDatastoreType.CONFIGURATION, flowII, flow);
         assertCommit(writeTx.commit());
-        SalFlowServiceMock salFlowService = (SalFlowServiceMock) forwardingRulesManager.getSalFlowService();
-        await().until(listSize(salFlowService.getAddFlowCalls()), equalTo(1));
+        final SalFlowServiceMock salFlowService = (SalFlowServiceMock) forwardingRulesManager.getSalFlowService();
+        await().atMost(10, SECONDS).until(() -> salFlowService.getAddFlowCalls().size() == 1);
 
         List<AddFlowInput> addFlowCalls = salFlowService.getAddFlowCalls();
         assertEquals(1, addFlowCalls.size());
@@ -160,8 +160,7 @@ public class FlowListenerTest extends FRMTest {
         writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.CONFIGURATION, flowII, flow);
         assertCommit(writeTx.commit());
-        salFlowService = (SalFlowServiceMock) forwardingRulesManager.getSalFlowService();
-        await().until(listSize(salFlowService.getUpdateFlowCalls()), equalTo(1));
+        await().atMost(10, SECONDS).until(() -> salFlowService.getUpdateFlowCalls().size() == 1);
         List<UpdateFlowInput> updateFlowCalls = salFlowService.getUpdateFlowCalls();
         assertEquals(1, updateFlowCalls.size());
         assertEquals("DOM-1", updateFlowCalls.get(0).getTransactionUri().getValue());
@@ -188,8 +187,8 @@ public class FlowListenerTest extends FRMTest {
         writeTx.put(LogicalDatastoreType.CONFIGURATION, tableII, table);
         writeTx.put(LogicalDatastoreType.CONFIGURATION, flowII, flow);
         assertCommit(writeTx.commit());
-        SalFlowServiceMock salFlowService = (SalFlowServiceMock) forwardingRulesManager.getSalFlowService();
-        await().until(listSize(salFlowService.getAddFlowCalls()), equalTo(1));
+        final SalFlowServiceMock salFlowService = (SalFlowServiceMock) forwardingRulesManager.getSalFlowService();
+        await().atMost(10, SECONDS).until(() -> salFlowService.getAddFlowCalls().size() == 1);
         List<AddFlowInput> addFlowCalls = salFlowService.getAddFlowCalls();
         assertEquals(1, addFlowCalls.size());
         assertEquals("DOM-0", addFlowCalls.get(0).getTransactionUri().getValue());
@@ -203,8 +202,7 @@ public class FlowListenerTest extends FRMTest {
         writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.CONFIGURATION, flowII, flow);
         assertCommit(writeTx.commit());
-        salFlowService = (SalFlowServiceMock) forwardingRulesManager.getSalFlowService();
-        await().until(listSize(salFlowService.getUpdateFlowCalls()), equalTo(1));
+        await().atMost(10, SECONDS).until(() -> salFlowService.getUpdateFlowCalls().size() == 1);
         List<UpdateFlowInput> updateFlowCalls = salFlowService.getUpdateFlowCalls();
         assertEquals(1, updateFlowCalls.size());
         assertEquals("DOM-1", updateFlowCalls.get(0).getTransactionUri().getValue());
@@ -228,8 +226,8 @@ public class FlowListenerTest extends FRMTest {
         writeTx.put(LogicalDatastoreType.CONFIGURATION, tableII, table);
         writeTx.put(LogicalDatastoreType.CONFIGURATION, flowII, flow);
         assertCommit(writeTx.commit());
-        SalFlowServiceMock salFlowService = (SalFlowServiceMock) forwardingRulesManager.getSalFlowService();
-        await().until(listSize(salFlowService.getAddFlowCalls()), equalTo(1));
+        final SalFlowServiceMock salFlowService = (SalFlowServiceMock) forwardingRulesManager.getSalFlowService();
+        await().atMost(10, SECONDS).until(() -> salFlowService.getAddFlowCalls().size() == 1);
         List<AddFlowInput> addFlowCalls = salFlowService.getAddFlowCalls();
         assertEquals(1, addFlowCalls.size());
         assertEquals("DOM-0", addFlowCalls.get(0).getTransactionUri().getValue());
@@ -237,8 +235,7 @@ public class FlowListenerTest extends FRMTest {
         writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.delete(LogicalDatastoreType.CONFIGURATION, flowII);
         assertCommit(writeTx.commit());
-        salFlowService = (SalFlowServiceMock) forwardingRulesManager.getSalFlowService();
-        await().until(listSize(salFlowService.getRemoveFlowCalls()), equalTo(1));
+        await().atMost(10, SECONDS).until(() -> salFlowService.getRemoveFlowCalls().size() == 1);
         List<RemoveFlowInput> removeFlowCalls = salFlowService.getRemoveFlowCalls();
         assertEquals(1, removeFlowCalls.size());
         assertEquals("DOM-1", removeFlowCalls.get(0).getTransactionUri().getValue());
@@ -247,8 +244,7 @@ public class FlowListenerTest extends FRMTest {
     }
 
     @Test
-    public void staleMarkedFlowCreationTest() {
-
+    public void staleMarkedFlowCreationTest() throws Exception {
         addFlowCapableNode(NODE_KEY);
 
         StaleFlowKey flowKey = new StaleFlowKey(new FlowId("stale_Flow"));
index f7614879dcbdeef2a846fe294870a7ee1bb459d2..8e51d5920d39c94953227a29236b8d321684a750 100644 (file)
@@ -7,8 +7,8 @@
  */
 package test.mock;
 
+import static java.util.concurrent.TimeUnit.SECONDS;
 import static org.awaitility.Awaitility.await;
-import static org.hamcrest.Matchers.equalTo;
 import static org.junit.Assert.assertEquals;
 
 import java.util.List;
@@ -84,7 +84,9 @@ public class GroupListenerTest extends FRMTest {
                 reconciliationManager,
                 openflowServiceRecoveryHandler,
                 serviceRecoveryRegistry,
-                flowGroupCacheManager);
+                flowGroupCacheManager,
+                getRegistrationHelper()
+                );
 
         forwardingRulesManager.start();
         // TODO consider tests rewrite (added because of complicated access)
@@ -104,8 +106,8 @@ public class GroupListenerTest extends FRMTest {
         WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.CONFIGURATION, groupII, group);
         assertCommit(writeTx.commit());
-        SalGroupServiceMock salGroupService = (SalGroupServiceMock) forwardingRulesManager.getSalGroupService();
-        await().until(listSize(salGroupService.getAddGroupCalls()), equalTo(1));
+        final SalGroupServiceMock salGroupService = (SalGroupServiceMock) forwardingRulesManager.getSalGroupService();
+        await().atMost(10, SECONDS).until(() -> salGroupService.getAddGroupCalls().size() == 1);
         List<AddGroupInput> addGroupCalls = salGroupService.getAddGroupCalls();
         assertEquals(1, addGroupCalls.size());
         assertEquals("DOM-0", addGroupCalls.get(0).getTransactionUri().getValue());
@@ -117,8 +119,7 @@ public class GroupListenerTest extends FRMTest {
         writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.CONFIGURATION, groupII, group);
         assertCommit(writeTx.commit());
-        salGroupService = (SalGroupServiceMock) forwardingRulesManager.getSalGroupService();
-        await().until(listSize(salGroupService.getAddGroupCalls()), equalTo(2));
+        await().atMost(10, SECONDS).until(() -> salGroupService.getAddGroupCalls().size() == 2);
         addGroupCalls = salGroupService.getAddGroupCalls();
         assertEquals(2, addGroupCalls.size());
         assertEquals("DOM-1", addGroupCalls.get(1).getTransactionUri().getValue());
@@ -136,8 +137,8 @@ public class GroupListenerTest extends FRMTest {
         WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.CONFIGURATION, groupII, group);
         assertCommit(writeTx.commit());
-        SalGroupServiceMock salGroupService = (SalGroupServiceMock) forwardingRulesManager.getSalGroupService();
-        await().until(listSize(salGroupService.getAddGroupCalls()), equalTo(1));
+        final SalGroupServiceMock salGroupService = (SalGroupServiceMock) forwardingRulesManager.getSalGroupService();
+        await().atMost(10, SECONDS).until(() -> salGroupService.getAddGroupCalls().size() == 1);
         List<AddGroupInput> addGroupCalls = salGroupService.getAddGroupCalls();
         assertEquals(1, addGroupCalls.size());
         assertEquals("DOM-0", addGroupCalls.get(0).getTransactionUri().getValue());
@@ -146,8 +147,7 @@ public class GroupListenerTest extends FRMTest {
         writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.CONFIGURATION, groupII, group);
         assertCommit(writeTx.commit());
-        salGroupService = (SalGroupServiceMock) forwardingRulesManager.getSalGroupService();
-        await().until(listSize(salGroupService.getUpdateGroupCalls()), equalTo(1));
+        await().atMost(10, SECONDS).until(() -> salGroupService.getUpdateGroupCalls().size() == 1);
         List<UpdateGroupInput> updateGroupCalls = salGroupService.getUpdateGroupCalls();
         assertEquals(1, updateGroupCalls.size());
         assertEquals("DOM-1", updateGroupCalls.get(0).getTransactionUri().getValue());
@@ -166,7 +166,7 @@ public class GroupListenerTest extends FRMTest {
         writeTx.put(LogicalDatastoreType.CONFIGURATION, groupII, group);
         assertCommit(writeTx.commit());
         SalGroupServiceMock salGroupService = (SalGroupServiceMock) forwardingRulesManager.getSalGroupService();
-        await().until(listSize(salGroupService.getAddGroupCalls()), equalTo(1));
+        await().atMost(10, SECONDS).until(() -> salGroupService.getAddGroupCalls().size() == 1);
         List<AddGroupInput> addGroupCalls = salGroupService.getAddGroupCalls();
         assertEquals(1, addGroupCalls.size());
         assertEquals("DOM-0", addGroupCalls.get(0).getTransactionUri().getValue());
@@ -174,8 +174,7 @@ public class GroupListenerTest extends FRMTest {
         writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.delete(LogicalDatastoreType.CONFIGURATION, groupII);
         assertCommit(writeTx.commit());
-        salGroupService = (SalGroupServiceMock) forwardingRulesManager.getSalGroupService();
-        await().until(listSize(salGroupService.getRemoveGroupCalls()), equalTo(1));
+        await().atMost(10, SECONDS).until(() -> salGroupService.getRemoveGroupCalls().size() == 1);
         List<RemoveGroupInput> removeGroupCalls = salGroupService.getRemoveGroupCalls();
         assertEquals(1, removeGroupCalls.size());
         assertEquals("DOM-1", removeGroupCalls.get(0).getTransactionUri().getValue());
index 1fade0fdfbc722feab5bb9129d1e53f3433035e4..b21b74e465a36f886e98fa2bbc8df1c1aa60625e 100644 (file)
@@ -7,6 +7,8 @@
  */
 package test.mock;
 
+import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.awaitility.Awaitility.await;
 import static org.junit.Assert.assertEquals;
 
 import java.util.List;
@@ -82,7 +84,9 @@ public class MeterListenerTest extends FRMTest {
                 reconciliationManager,
                 openflowServiceRecoveryHandler,
                 serviceRecoveryRegistry,
-                flowGroupCacheManager);
+                flowGroupCacheManager,
+                getRegistrationHelper()
+                );
 
         forwardingRulesManager.start();
         // TODO consider tests rewrite (added because of complicated access)
@@ -103,6 +107,7 @@ public class MeterListenerTest extends FRMTest {
         writeTx.put(LogicalDatastoreType.CONFIGURATION, meterII, meter);
         assertCommit(writeTx.commit());
         SalMeterServiceMock salMeterService = (SalMeterServiceMock) forwardingRulesManager.getSalMeterService();
+        await().atMost(10, SECONDS).until(() -> salMeterService.getAddMeterCalls().size() == 1);
         List<AddMeterInput> addMeterCalls = salMeterService.getAddMeterCalls();
         assertEquals(1, addMeterCalls.size());
         assertEquals("DOM-0", addMeterCalls.get(0).getTransactionUri().getValue());
@@ -114,7 +119,7 @@ public class MeterListenerTest extends FRMTest {
         writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.CONFIGURATION, meterII, meter);
         assertCommit(writeTx.commit());
-        salMeterService = (SalMeterServiceMock) forwardingRulesManager.getSalMeterService();
+        await().atMost(10, SECONDS).until(() -> salMeterService.getAddMeterCalls().size() == 2);
         addMeterCalls = salMeterService.getAddMeterCalls();
         assertEquals(2, addMeterCalls.size());
         assertEquals("DOM-1", addMeterCalls.get(1).getTransactionUri().getValue());
@@ -134,6 +139,7 @@ public class MeterListenerTest extends FRMTest {
         writeTx.put(LogicalDatastoreType.CONFIGURATION, meterII, meter);
         assertCommit(writeTx.commit());
         SalMeterServiceMock salMeterService = (SalMeterServiceMock) forwardingRulesManager.getSalMeterService();
+        await().atMost(10, SECONDS).until(() -> salMeterService.getAddMeterCalls().size() == 1);
         List<AddMeterInput> addMeterCalls = salMeterService.getAddMeterCalls();
         assertEquals(1, addMeterCalls.size());
         assertEquals("DOM-0", addMeterCalls.get(0).getTransactionUri().getValue());
@@ -142,7 +148,7 @@ public class MeterListenerTest extends FRMTest {
         writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.put(LogicalDatastoreType.CONFIGURATION, meterII, meter);
         assertCommit(writeTx.commit());
-        salMeterService = (SalMeterServiceMock) forwardingRulesManager.getSalMeterService();
+        await().atMost(10, SECONDS).until(() -> salMeterService.getUpdateMeterCalls().size() == 1);
         List<UpdateMeterInput> updateMeterCalls = salMeterService.getUpdateMeterCalls();
         assertEquals(1, updateMeterCalls.size());
         assertEquals("DOM-1", updateMeterCalls.get(0).getTransactionUri().getValue());
@@ -162,6 +168,7 @@ public class MeterListenerTest extends FRMTest {
         writeTx.put(LogicalDatastoreType.CONFIGURATION, meterII, meter);
         assertCommit(writeTx.commit());
         SalMeterServiceMock salMeterService = (SalMeterServiceMock) forwardingRulesManager.getSalMeterService();
+        await().atMost(10, SECONDS).until(() -> salMeterService.getAddMeterCalls().size() == 1);
         List<AddMeterInput> addMeterCalls = salMeterService.getAddMeterCalls();
         assertEquals(1, addMeterCalls.size());
         assertEquals("DOM-0", addMeterCalls.get(0).getTransactionUri().getValue());
@@ -169,7 +176,7 @@ public class MeterListenerTest extends FRMTest {
         writeTx = getDataBroker().newWriteOnlyTransaction();
         writeTx.delete(LogicalDatastoreType.CONFIGURATION, meterII);
         assertCommit(writeTx.commit());
-        salMeterService = (SalMeterServiceMock) forwardingRulesManager.getSalMeterService();
+        await().atMost(10, SECONDS).until(() -> salMeterService.getRemoveMeterCalls().size() == 1);
         List<RemoveMeterInput> removeMeterCalls = salMeterService.getRemoveMeterCalls();
         assertEquals(1, removeMeterCalls.size());
         assertEquals("DOM-1", removeMeterCalls.get(0).getTransactionUri().getValue());
index 516bed903fd28ea69eaa57007439bb90864c7382..5e904151c00099f079c99a9cff1a839889722285 100644 (file)
@@ -64,7 +64,9 @@ public class NodeListenerTest extends FRMTest {
                 reconciliationManager,
                 openflowServiceRecoveryHandler,
                 serviceRecoveryRegistry,
-                flowGroupCacheManager);
+                flowGroupCacheManager,
+                getRegistrationHelper());
+
         forwardingRulesManager.start();
     }
 
index bb30caec52d521f40157bd88a850a83a6a7c3273..9d8c13cd18cb0ab951da71c2ddac2784829bf329 100644 (file)
@@ -7,6 +7,8 @@
  */
 package test.mock;
 
+import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.awaitility.Awaitility.await;
 import static org.junit.Assert.assertEquals;
 
 import java.util.List;
@@ -68,7 +70,9 @@ public class TableFeaturesListenerTest extends FRMTest {
         forwardingRulesManager = new ForwardingRulesManagerImpl(getDataBroker(), rpcProviderRegistryMock,
                 rpcProviderRegistryMock, getConfig(), mastershipChangeServiceManager, clusterSingletonService,
                 getConfigurationService(), reconciliationManager, openflowServiceRecoveryHandler,
-                serviceRecoveryRegistry, flowGroupCacheManager);
+                serviceRecoveryRegistry, flowGroupCacheManager, getRegistrationHelper());
+
+
         forwardingRulesManager.start();
         // TODO consider tests rewrite (added because of complicated access)
         forwardingRulesManager.setDeviceMastershipManager(deviceMastershipManager);
@@ -96,6 +100,7 @@ public class TableFeaturesListenerTest extends FRMTest {
         assertCommit(writeTx.commit());
 
         SalTableServiceMock salTableServiceMock = (SalTableServiceMock) forwardingRulesManager.getSalTableService();
+        await().atMost(10, SECONDS).until(() -> salTableServiceMock.getUpdateTableInput().size() == 1);
         List<UpdateTableInput> updateTableInputs = salTableServiceMock.getUpdateTableInput();
         assertEquals(1, updateTableInputs.size());
         assertEquals("DOM-0", updateTableInputs.get(0).getTransactionUri().getValue());
index 58f00b1fcf515453304793286516fae7ef7ac4a8..ddaf83e5db1aaf46d1ac566818a72cab28669494 100644 (file)
@@ -17,6 +17,7 @@ import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractDataBrokerTest;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.openflowplugin.api.openflow.configuration.ConfigurationService;
+import org.opendaylight.openflowplugin.applications.frm.impl.ListenerRegistrationHelper;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table;
@@ -108,4 +109,9 @@ public abstract class FRMTest extends AbstractDataBrokerTest {
         // The condition supplier part
         return list::size;
     }
+
+    public ListenerRegistrationHelper getRegistrationHelper() {
+        ListenerRegistrationHelper registrationHelper = new ListenerRegistrationHelper(getDataBroker());
+        return registrationHelper;
+    }
 }
index 7de7502314512e5807da34eaa7f0d54f8227b2c7..cc8914bbf17013af4233ffa28eb14e3f27c3f4bb 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../../parent</relativePath>
     </parent>
 
index a43ad6c98ce66d92b8d7620b0e0083e9ce2c2c40..9ddde3334ce7d8378640abdf81304d5661419415 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../../parent</relativePath>
     </parent>
 
index a885167a4591b3c87d89cf5331c42ac3604e49ac..d6ff3e95cc879f9085b657379edc07e95d1f8885 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../../parent</relativePath>
     </parent>
 
index 1f67ca995afbcb6f386c5c505da7e1a509f588da..e47a260e4f42f5c2ec93841ab619443a7fc83987 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../../parent</relativePath>
     </parent>
 
index a3c8a9e3e484bfeed028a84f490998cde98072d0..043d5380244b916d92001f49866569e8bd2acc38 100644 (file)
@@ -11,7 +11,7 @@
 
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>applications-aggregator</artifactId>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
     <packaging>pom</packaging>
 
     <properties>
index 3474073dd7cb78f5a37e23edae203b21a55b9f51..a8e54bea79c21dcb18004078bc139a6bbd2d1bdf 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../../parent</relativePath>
     </parent>
 
index 76efa19f25c973f8488e11429c52c9977332e8a1..c9b18c7fed8a9afa9d4c8e40a5880d638bea9095 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../../parent</relativePath>
     </parent>
 
index 141d4fe8c3b0b3ab14e993facf6e462c84142037..28cce6ca045e547426012907b336d0052f300ac1 100644 (file)
@@ -4,7 +4,7 @@
   <parent>
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>openflowplugin-parent</artifactId>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
index 1946a1212bcb178ff22a10c2f803edd4148413ec..3b7e7cb10008ee2b5bdb3a96fd435c0baafa9fdc 100644 (file)
@@ -4,12 +4,12 @@
   <parent>
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>openflowplugin-parent</artifactId>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
   <groupId>org.opendaylight.openflowplugin.applications</groupId>
   <artifactId>topology-lldp-discovery</artifactId>
-  <version>0.11.0-SNAPSHOT</version>
+  <version>0.12.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <dependencies>
index 56ac8076d6e0eb63e22e217f72c16e0d8df796ca..8bf3378de7def48320fce5537c2eefeb9388c96b 100644 (file)
@@ -4,12 +4,12 @@
   <parent>
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>openflowplugin-parent</artifactId>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
   <groupId>org.opendaylight.openflowplugin.applications</groupId>
   <artifactId>topology-manager</artifactId>
-  <version>0.11.0-SNAPSHOT</version>
+  <version>0.12.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <dependencies>
index f86dadb5690bf394a0d2bf7ce376882166cd1dc5..d6b7431951bc826ed7c569df822b6519dabc62e8 100644 (file)
@@ -19,7 +19,7 @@
 
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>openflowplugin-artifacts</artifactId>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
     <packaging>pom</packaging>
 
     <dependencyManagement>
index 4b33e124e73dd5f270594264163858c5381e999c..2a1f2c090f0407000ba22d4f8060ff21576c50d7 100644 (file)
@@ -8,11 +8,11 @@
   </parent>
   <groupId>org.opendaylight.openflowplugin</groupId>
   <artifactId>openflowplugin-karaf</artifactId>
-  <version>0.11.0-SNAPSHOT</version>
+  <version>0.12.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <properties>
-    <openflowplugin.version>0.11.0-SNAPSHOT</openflowplugin.version>
+    <openflowplugin.version>0.12.0-SNAPSHOT</openflowplugin.version>
   </properties>
 
   <dependencyManagement>
index 7e390f1297d86c78ff9f523d40d6dacbca159c84..868bf2a3bd4de3ee1fd7ba993f416b92653f3b9f 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../parent</relativePath>
     </parent>
     <artifactId>drop-test-karaf</artifactId>
index dcdc2e53a8f6876240847522ece1aa4a1ab43abc..b1493270567cb58d8c6783947a13adef5e855f9b 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>features-openflowplugin-extension</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>
index c4bd4adcf65b2bf61c29dd55043f2ba019fe7cce..70d1fd06dc0ee40f5df1cd1f38d51d5e189a6004 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>odl-openflowplugin-eric-extensions</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <name>OpenDaylight :: Openflow Plugin :: Eric Extensions</name>
 
index 76f9c393b0b9e8c20b75debfde6c9a2c145d69d9..4b85ab6132fccbedf1fbf809b1d1f4f3d9d268a4 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>odl-openflowplugin-nxm-extensions</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <name>OpenDaylight :: Openflow Plugin :: Nicira Extensions</name>
 
index 0fbee85ce4b551adaa9b35f32a62ab1438066fa2..ae36fe9d25c8c767dd3e0a335d3823021186ea5c 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>odl-openflowplugin-onf-extensions</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <name>OpenDaylight :: Openflow Plugin :: ONF Extensions</name>
 
index c35a0346d5ed14c602511c2cd3f6b99c1b5f0661..9cabaff72205471d9446cc9bb0a2f266d3c2564c 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>features-extension-aggregator</artifactId>
     <packaging>pom</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <modules>
         <module>features-openflowplugin-extension</module>
index 613f025be20974622b2850fff961a378c7ef3efb..54bb6a63e25ffcf7f925faff53e068fc8abda5d0 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../../parent</relativePath>
     </parent>
     <artifactId>openflowjava-extension-eric</artifactId>
index 9f263c73fd6d60867a45394f7f694b91de69162d..4a229c2e5311d5535230844cd4c737516c731aea 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../../parent</relativePath>
     </parent>
     <artifactId>openflowjava-extension-nicira-api</artifactId>
index 8da1ce15ee22d32ad2c24751ee97688ff6257ddd..fd8877fbb9f3986d774a444fc4f5b444d38e34d9 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../../parent</relativePath>
     </parent>
     <artifactId>openflowjava-extension-nicira</artifactId>
index 9597b4c989e190bcb3a572d4c4dbb06e1b899866..c5168eda84a6dfcf47c94a32cbf0e6942dd3ae16 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../../parent</relativePath>
     </parent>
 
index 846f6b3e1f9a80dfa5c6009ebfa4264609571a9c..89ff22a2f794f3a8bc56db8af413d43f093a6258 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../../parent</relativePath>
     </parent>
 
index c258dcb0eec7020d567853f6c824f7fc6c0301f0..4ee33c30c78419945e62807e1c8a348bf11c766d 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../../parent</relativePath>
     </parent>
 
index 443e3b0b64b6d1a4573dff876d4e5e2f48cefa19..fc038ea1b1f45dc87d5331a5ef2d89b99ebe410f 100644 (file)
@@ -10,7 +10,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../../parent</relativePath>
     </parent>
 
index 95c096efcb09d37431b2859b4298c77198756cdb..7f1fb8e39908e6c9f9de86fb1b9c2d6bff4bfefe 100644 (file)
@@ -11,7 +11,7 @@
 
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>openflowplugin-extension-aggregator</artifactId>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
     <packaging>pom</packaging>
 
     <properties>
index ca1738bb9027d403d10e14cfaf2b9877782882a2..9f2abe75d988ab13cf184bfb1ef8e2e1676d3e65 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../../parent</relativePath>
     </parent>
 
index 738d368cf70099323377e481165ba471dbd0f211..6c58b783fbffe3e61eb8062d710a77240e57a1c3 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>features-openflowplugin</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>
index 7021cf9242d783db837ac414b43cd048253795e9..345b2de7ea222e2eb4ff10c08c55c8bef6e82c0d 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>odl-openflowplugin-app-arbitratorreconciliation</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <name>OpenDaylight :: Openflow Plugin :: Application - Arbitrator Reconciliation</name>
 
index fa3407c977706befa99e70e1e28c2b21b0ba445d..2014168cea3d514872e2605d80c476ee39171332 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>odl-openflowplugin-app-bulk-o-matic</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <name>OpenDaylight :: Openflow Plugin :: Application -  bulk flow operations support</name>
 
index 9923ccde049d9ef106740b65370a92b346c0556f..695b76a0a984265c226ff448337aa24fc966d360 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>odl-openflowplugin-app-config-pusher</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <name>OpenDaylight :: Openflow Plugin :: Application - default config-pusher</name>
 
index 7f21eaf08b41afc865fff0ce63e00ce5807bb1d9..f649bc5e7fa8238e624ab618f58bdac3c85f03e1 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>odl-openflowplugin-app-forwardingrules-manager</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <name>OpenDaylight :: Openflow Plugin :: Application - FRM</name>
 
index 2825f6350a1e7927ccd89be0a8f379113d341521..3da01ab942576781e2007f2aeb92fbd63427d803 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>odl-openflowplugin-app-forwardingrules-sync</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <name>OpenDaylight :: Openflow Plugin :: Application - FRS</name>
 
index e2cfd812123155e39cd6940e27ba13a23cd00a85..c423b6ef9daadb179317d1a19468543cb972847a 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>odl-openflowplugin-app-lldp-speaker</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <name>OpenDaylight :: Openflow Plugin :: Application - LLDP Speaker</name>
 
index 8b9fd0e6fa69e97903f90efee83c63b6191c49d9..61bfa6b9d16a29edd02af6f6846e160741503ab3 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>odl-openflowplugin-app-notifications</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <name>OpenDaylight :: Openflow Plugin :: Application - notifications supplier</name>
 
index 447de2dfbb04c80094ef09b3dc9a3a81bcc6fb35..d34d780ad300c22f3b065b16072946f40b0d899e 100644 (file)
@@ -11,7 +11,7 @@
 <groupId>org.opendaylight.openflowplugin</groupId>
 <artifactId>odl-openflowplugin-app-reconciliation-framework</artifactId>
 <packaging>feature</packaging>
-<version>0.11.0-SNAPSHOT</version>
+<version>0.12.0-SNAPSHOT</version>
 
 <name>OpenDaylight :: Openflow Plugin :: Application - Reconciliation Framework</name>
 
index 09b06b946bea04b5942d39f66ac1a9257c1f1498..d880c83e0755c462bab3876aba165c4b8c1c902b 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>odl-openflowplugin-app-southbound-cli</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <name>OpenDaylight :: Openflow Plugin :: Application - Southbound CLI</name>
 
index 49edf6f8ba26a490e9dc4db3cb48e32f2571e170..b553cdcdd2c42176933efc26ee825a18e4f16aee 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>odl-openflowplugin-app-table-miss-enforcer</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <name>OpenDaylight :: Openflow Plugin :: Application - table-miss-enforcer</name>
 
index 746d616f403b9bc35b07e33efac72829c07af2a6..2fbc8ae59ca9cb083b6cbaff2d61b7fdaeb71b58 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>odl-openflowplugin-app-topology-lldp-discovery</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <name>OpenDaylight :: Openflow Plugin :: Application - Topology LLDP Discovery</name>
 
index f512e647af8fecd8cd81e8aa09b490ed06657170..385f3c4c6adbd81ba54c9f2d6b288e324ef71633 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>odl-openflowplugin-app-topology-manager</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <name>OpenDaylight :: Openflow Plugin :: Application - Topology Manager</name>
 
index 20b2942b1f2c08805d3493ea88f95ce6e413f91b..da26cccc53664b20c8ede6f4a92fdba42c9357f6 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>odl-openflowplugin-app-topology</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <name>OpenDaylight :: Openflow Plugin :: Application - topology</name>
 
index c7d8a5615cd80839d1c992d7b7c394804a0dbcb6..5222c1c4170bc768e0fc75ef078f4a5d3e69f4cf 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>odl-openflowplugin-drop-test</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <name>OpenDaylight :: Openflow Plugin :: Drop Test</name>
 
index a3195c4fac0aaf992711070ff141aa19de500300..28668d9719c05204425c2bc388dca4e36b6a6ed8 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>odl-openflowplugin-flow-services-rest</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <name>OpenDaylight :: Openflow Plugin :: Flow Services :: REST</name>
 
@@ -21,7 +21,7 @@
             <dependency>
                 <groupId>org.opendaylight.netconf</groupId>
                 <artifactId>netconf-artifacts</artifactId>
-                <version>1.9.0-SNAPSHOT</version>
+                <version>1.10.0-SNAPSHOT</version>
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
index 82cb7cc4ad5223a218cc776370a90bdf827d84ee..87c819683b0ab79edbcddabac52304cd382ac7e3 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>odl-openflowplugin-flow-services</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <name>OpenDaylight :: Openflow Plugin :: Flow Services</name>
 
index 546f15867f5e1901c189895c1a0265d2598e4835..9b764dada8a1074f4641bb68b11a14924640d116 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>odl-openflowplugin-libraries</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <name>OpenDaylight :: Openflow Plugin :: Libraries</name>
 
index e7dcf2a567cb1ae59b22b3d3e1ea2efea784fe0f..d72346dc75c2a143835b136982a5c064fead4ab1 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>odl-openflowplugin-nsf-model</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <name>OpenDaylight :: OpenflowPlugin :: NSF :: Model</name>
 
index 34ad22f6b7f4beb13374e30b4448ac99885fdfb4..2ed3ceb26caf197d68e06d254dda32e09a342895 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>odl-openflowplugin-southbound</artifactId>
     <packaging>feature</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <name>OpenDaylight :: Openflow Plugin :: Li southbound API implementation</name>
 
@@ -43,7 +43,7 @@
             <dependency>
                 <groupId>org.opendaylight.serviceutils</groupId>
                 <artifactId>serviceutils-artifacts</artifactId>
-                <version>0.6.0-SNAPSHOT</version>
+                <version>0.7.0-SNAPSHOT</version>
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
index df5fbc36ae52190341f9509b069262ed46e5febb..fdf0e87f264120d2e1d2c51449bbb2b04399c663 100644 (file)
@@ -11,7 +11,7 @@
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>features-aggregator</artifactId>
     <packaging>pom</packaging>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
 
     <modules>
         <module>features-openflowplugin</module>
index e9768e91a1934ba6c23a477676c937f0aa587cd7..0b5e46099654e017013a1b12b7dde2bca325bb4f 100644 (file)
@@ -5,7 +5,7 @@
   <parent>
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>openflowplugin-parent</artifactId>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
index 91ee69516ca33f846f6131ab337c776d549ae8fb..a65f979f703e66b1eed782e1b82d56d33d3cee1b 100644 (file)
@@ -11,7 +11,7 @@
 
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>libraries-aggregator</artifactId>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
     <packaging>pom</packaging>
 
     <properties>
index aa1fadf4070431584310dfc09038b000e0165c1e..43dd22f52c78a8bb01139fd367a2d4c528f53adb 100644 (file)
@@ -6,7 +6,7 @@
   <parent>
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>openflowplugin-parent</artifactId>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
index 7671f06aa3ba6c2992ab2ab9f2e5fcb4cf12c581..fa522e85935b276e230e5a521e3e29ee052ab9da 100644 (file)
@@ -6,7 +6,7 @@
   <parent>
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>openflowplugin-parent</artifactId>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
index 7ca9d3e3095594bc4eff428e742aece7b59cd501..7df5dcdc32ee9d6f0867cfa1acb50daf27f7d451 100644 (file)
@@ -6,7 +6,7 @@
   <parent>
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>openflowplugin-parent</artifactId>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
     <relativePath>../../parent</relativePath>
   </parent>
 
index 3b50b5ce0154caa67cd24e7a2e55828af4bfd781..1bff786227ca92a494d1f44b14b2b16dd0f77f51 100644 (file)
@@ -12,7 +12,7 @@
 
   <groupId>org.opendaylight.openflowplugin.model</groupId>
   <artifactId>model-aggregator</artifactId>
-  <version>0.11.0-SNAPSHOT</version>
+  <version>0.12.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <properties>
index 94fb4773c91fb4f963d5b4cc8b778dda82a315a4..8ecfed9335ac0ea64f2fd0d0c08608a266368a44 100644 (file)
@@ -10,7 +10,7 @@
 
   <groupId>org.opendaylight.openflowplugin.openflowjava</groupId>
   <artifactId>features-openflowjava</artifactId>
-  <version>0.11.0-SNAPSHOT</version>
+  <version>0.12.0-SNAPSHOT</version>
   <packaging>feature</packaging>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
index 659d50dc4947387baeb6b7915dffa19d9c7be90b..72d583a249843202b2045c54f5b1235972a17996 100644 (file)
@@ -11,7 +11,7 @@
 
     <groupId>org.opendaylight.openflowplugin.openflowjava</groupId>
     <artifactId>odl-openflowjava-protocol</artifactId>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
     <packaging>feature</packaging>
 
     <!-- <name> formatting is used by autorelease to parse and notify projects on
index c3cc7348cbc538fbb4c85b80cd48c13b385a146f..8b2c17e7f76fa12a736e75d1e40e1a8160cc716e 100644 (file)
@@ -10,7 +10,7 @@
 
   <groupId>org.opendaylight.openflowplugin.openflowjava</groupId>
   <artifactId>features-openflowjava-aggregator</artifactId>
-  <version>0.11.0-SNAPSHOT</version>
+  <version>0.12.0-SNAPSHOT</version>
   <packaging>pom</packaging>
   <!-- <name> formatting is used by autorelease to parse and notify projects on
        build failure. Please do not modify this unless you have a good reason. -->
index e0f8d9f1af2169332126b3905289224a51291f79..4d04f453d70002a842545634c13038103c292a20 100644 (file)
@@ -4,12 +4,12 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../../parent</relativePath>
     </parent>
     <groupId>org.opendaylight.openflowplugin.openflowjava</groupId>
     <artifactId>openflow-protocol-api</artifactId>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
     <packaging>bundle</packaging>
     <!-- <name> formatting is used by autorelease to parse and notify projects on
          build failure. Please do not modify this unless you have a good reason. -->
index bd9a9ed34613ca2d838e3ca21f0692503a0cd27e..7295ada2926868c38283a632cc416357f565dad5 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin.openflowjava</groupId>
         <artifactId>openflowjava-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../</relativePath>
     </parent>
     <artifactId>openflow-protocol-impl</artifactId>
index fc6b3240bd73be55620039d10d986395968a7428..b251784365e9339f341752891ecb3e52d47227c0 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin.openflowjava</groupId>
         <artifactId>openflowjava-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../</relativePath>
     </parent>
     <artifactId>openflow-protocol-it</artifactId>
index f122cc89bbe0f432beac29f524dd3c44cafdbbe3..6b884c88fdf928d1f06dcf08b7692e5cebedfd94 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin.openflowjava</groupId>
         <artifactId>openflowjava-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../</relativePath>
     </parent>
     <artifactId>openflow-protocol-spi</artifactId>
index 3316099b275dd782fd3d86e18f178c56361e10b4..27b96967748acc8e96d4c0ad78ca7d46bab2f9d8 100644 (file)
@@ -10,7 +10,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin.openflowjava</groupId>
         <artifactId>openflowjava-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../</relativePath>
     </parent>
     <artifactId>openflowjava-blueprint-config</artifactId>
index 2808c8fe1c8d9dbf8463013d660119858e7dd6c0..f3e11bc45c4a00f3ec01e5e0571ff0258ead1644 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin.openflowjava</groupId>
         <artifactId>openflowjava-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../</relativePath>
     </parent>
     <packaging>bundle</packaging>
index a6986146449115d835399ce5af196d130c24db77..c1f6367ff88c9738e00ae0dce0f5e9ddd7a49580 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../parent</relativePath>
     </parent>
 
index 99855a7499160aef96a00d4259bbec6e4a6b1461..6cd03ed4ed9ef40372048457f4dbc6de081f8549 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../parent</relativePath>
     </parent>
 
index b6f355f214fc46e9824140536018bec22dd79d96..7f6e7ea343d31f9a1aa03f6d532b66b613f13ae4 100644 (file)
@@ -28,4 +28,6 @@ public interface DeviceFlowRegistry extends CommonDeviceRegistry<FlowRegistryKey
     @Nullable
     FlowDescriptor retrieveDescriptor(@NonNull FlowRegistryKey flowRegistryKey);
 
+    void clearFlowRegistry();
+
 }
index dff018e1bc35f70d3f2feb0ed96b70f0ccd39176..9d5faaebfe374b980e10368afa4cb6025799818f 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
       <groupId>org.opendaylight.openflowplugin</groupId>
       <artifactId>openflowplugin-parent</artifactId>
-      <version>0.11.0-SNAPSHOT</version>
+      <version>0.12.0-SNAPSHOT</version>
       <relativePath>../parent</relativePath>
     </parent>
 
index cbaa93e1052fdaaa6d05f07ae7a9993a97946a2f..3abaeae5670d7eeb1bca4d016b03dc35207641c6 100644 (file)
@@ -5,7 +5,7 @@
   <parent>
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>openflowplugin-parent</artifactId>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
     <relativePath>../parent</relativePath>
   </parent>
 
index 5b9a5fc740c0df8d905e2e7ea7891b9da0568ccf..ff96da7ee86988bf6f254f62610c2b07c50d7b97 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../parent</relativePath>
     </parent>
 
index 0fee0d39aadaeda0f5280055282574e5ee43514b..cea9f5effd166bd998ae4097eb3b813da9b8bcde 100644 (file)
@@ -280,4 +280,9 @@ public class DeviceFlowRegistryImpl implements DeviceFlowRegistry {
     Map<FlowRegistryKey, FlowDescriptor> getAllFlowDescriptors() {
         return flowRegistry;
     }
+
+    @Override
+    public void clearFlowRegistry() {
+        flowRegistry.clear();
+    }
 }
index ff1f3c8ea2b4bd6fe613ca80d0a79f49266a74a2..ffe22fb4b21a9a394e190d37687ca40021fed604 100644 (file)
@@ -44,6 +44,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yangtools.yang.common.RpcError;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.opendaylight.yangtools.yang.common.Uint8;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -56,6 +57,7 @@ public class SalFlowServiceImpl implements SalFlowService {
     private final SingleLayerFlowService<UpdateFlowOutput> flowUpdateMessage;
     private final SingleLayerFlowService<RemoveFlowOutput> flowRemoveMessage;
     private final DeviceContext deviceContext;
+    private static final Uint8 OFPTT_ALL = Uint8.MAX_VALUE;
 
     public SalFlowServiceImpl(final RequestContextStack requestContextStack,
                               final DeviceContext deviceContext,
@@ -242,9 +244,13 @@ public class SalFlowServiceImpl implements SalFlowService {
                 if (LOG.isDebugEnabled()) {
                     LOG.debug("Flow remove finished without error for flow={}", input);
                 }
-                FlowRegistryKey flowRegistryKey =
-                        FlowRegistryKeyFactory.create(deviceContext.getDeviceInfo().getVersion(), input);
-                deviceContext.getDeviceFlowRegistry().addMark(flowRegistryKey);
+                if (input.getTableId() != null && !input.getTableId().equals(OFPTT_ALL)) {
+                    FlowRegistryKey flowRegistryKey =
+                            FlowRegistryKeyFactory.create(deviceContext.getDeviceInfo().getVersion(), input);
+                    deviceContext.getDeviceFlowRegistry().addMark(flowRegistryKey);
+                } else {
+                    deviceContext.getDeviceFlowRegistry().clearFlowRegistry();
+                }
             } else {
                 if (LOG.isDebugEnabled()) {
                     LOG.debug("Flow remove failed for flow={}, errors={}", input,
index 128bb7a0efb74ea6ea4244b669a32b2e99b5100b..e4f24b611f37add72c2168f0856453616937ab42 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../parent</relativePath>
     </parent>
 
index e38d7e40c33e6e666d6591b2343eff526fce5a58..11c6e5b8b987be74027bfb5ffb00c741fe5f3994 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../parent</relativePath>
     </parent>
 
index 818961c5860050379f1f68ea58bd56007b9001bb..541c76f986e5658d0af0b8088a471d501f9b0a12 100644 (file)
@@ -19,7 +19,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>openflowplugin-parent</artifactId>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
     <packaging>pom</packaging>
 
     <scm>
@@ -55,7 +55,7 @@
             <dependency>
                 <groupId>org.opendaylight.serviceutils</groupId>
                 <artifactId>serviceutils-artifacts</artifactId>
-                <version>0.6.0-SNAPSHOT</version>
+                <version>0.7.0-SNAPSHOT</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
diff --git a/pom.xml b/pom.xml
index dffa471e798ad78dd6f6ba4dbf5089063bfdeac0..e812e6967f49a06044784c9c891bd2e5648bf41a 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -4,12 +4,12 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>parent</relativePath>
     </parent>
 
     <artifactId>openflowplugin-aggregator</artifactId>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
     <name>openflowplugin</name> <!-- Used by Sonar to set project name -->
     <packaging>pom</packaging>
 
index 13862c9d83d0eb95712db9f33ed02d87ba8d2483..47998f8570da09ddee099473518a8c0b758590f4 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../../parent</relativePath>
     </parent>
 
index bb9a179d316385d69129709a93e4adf567035291..da2ed933363e8872ad35ae2b9b6d232de53d84a7 100644 (file)
@@ -11,7 +11,7 @@
 
     <groupId>org.opendaylight.openflowplugin</groupId>
     <artifactId>openflowplugin-samples-aggregator</artifactId>
-    <version>0.11.0-SNAPSHOT</version>
+    <version>0.12.0-SNAPSHOT</version>
     <packaging>pom</packaging>
 
     <properties>
index e65620ac2a2dc0231f2ab4f945171fa7e89e6b52..5766b7c96f25b584dbca38a4da459b6bc99ae9c1 100644 (file)
@@ -11,7 +11,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../../parent</relativePath>
     </parent>
 
index 9f14b68b8112e084832688f1b3878517e5c41683..d97322f933ea7c564fcbe53831ae33c138f4e5ab 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../../parent</relativePath>
     </parent>
 
index a300cb349cc924892ca92980923366380e153968..bc197e77c898df8ba59b69717d48a86b38af57ee 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../../parent</relativePath>
     </parent>
 
index 6e8a2c7ba4541adbc47b525e44a664ab779dc229..22cdbdcf1d155eaa54059d45da79a4e30996c65e 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../parent</relativePath>
     </parent>
     <artifactId>test-common</artifactId>
index a493626954fb8cb294edc9991240f837d9c7efa1..1729cbaab7411bb3d77688cb2631bb5ad4703ece 100644 (file)
@@ -4,7 +4,7 @@
     <parent>
         <groupId>org.opendaylight.openflowplugin</groupId>
         <artifactId>openflowplugin-parent</artifactId>
-        <version>0.11.0-SNAPSHOT</version>
+        <version>0.12.0-SNAPSHOT</version>
         <relativePath>../parent</relativePath>
     </parent>
     <artifactId>test-provider</artifactId>