Bump upstreams 76/110076/9
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 29 Jan 2024 12:14:29 +0000 (13:14 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 4 Mar 2024 15:34:21 +0000 (16:34 +0100)
Adopt:
- yangtools-13.0.1
- mdsal-13.0.0
- controller-9.0.0
- aaa-0.19.1
- netconf-7.0.0

The test suite in southbound-impl is hacked together to not use
InstanceIdentifier mocking, reducing powermock exposure a bit.

Change-Id: Id4b5f1d8c11e57aee99f60c274061cb00489e87f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
67 files changed:
commons/binding-parent/pom.xml
commons/it/pom.xml
hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-api/pom.xml
hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-api/src/main/feature/feature.xml
hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-rest/pom.xml
hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-rest/src/main/feature/feature.xml
hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-ui/pom.xml
hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-ui/src/main/feature/feature.xml
hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepConnectionInstance.java
hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepConnectionManager.java
hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepDataChangeListener.java
hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepOperGlobalListener.java
hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundProvider.java
hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/InstanceIdentifierCodec.java
hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/reconciliation/configuration/DataObjectModificationImpl.java
hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/reconciliation/configuration/HwvtepReconciliationManager.java
hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/TransactUtils.java
hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/TransactionInvokerImpl.java
hwvtepsouthbound/hwvtepsouthbound-impl/src/test/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepOperationalDataChangeListener.java
hwvtepsouthbound/hwvtepsouthbound-it/pom.xml
hwvtepsouthbound/hwvtepsouthbound-it/src/test/java/org/opendaylight/ovsdb/hwvtepsouthbound/it/HwvtepSouthboundIT.java
library/features/odl-ovsdb-library/pom.xml
library/features/odl-ovsdb-library/src/main/feature/feature.xml
library/impl/pom.xml
southbound/southbound-features/odl-ovsdb-southbound-api/pom.xml
southbound/southbound-features/odl-ovsdb-southbound-api/src/main/feature/feature.xml
southbound/southbound-features/odl-ovsdb-southbound-impl-rest/pom.xml
southbound/southbound-features/odl-ovsdb-southbound-impl-rest/src/main/feature/feature.xml
southbound/southbound-features/odl-ovsdb-southbound-impl-ui/pom.xml
southbound/southbound-features/odl-ovsdb-southbound-impl-ui/src/main/feature/feature.xml
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/InstanceIdentifierCodec.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionInstance.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionManager.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbDataTreeChangeListener.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbOperGlobalListener.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundMapper.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundProvider.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TransactUtils.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/reconciliation/ReconciliationManager.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbControllerUpdateCommand.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbManagersRemovedCommand.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/TransactionInvokerImpl.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/InstanceIdentifierCodecTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionInstanceTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionManagerTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/SouthboundProviderTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/SouthboundUtilTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/DataChangesManagedByOvsdbNodeEventTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OvsdbNodeUpdateCommandTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointCreateCommandTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointUpdateCommandTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TransactUtilsTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/BridgeConfigReconciliationTaskTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeUpdateCommandTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbControllerUpdateCommandTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbManagersRemovedCommandTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbManagersUpdateCommandTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbNodeRemoveCommandTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbPortRemoveCommandTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbPortUpdateCommandTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/TransactionInvokerImplTest.java
southbound/southbound-it/src/test/java/org/opendaylight/ovsdb/southbound/it/SouthboundIT.java
utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/NotifyingDataChangeListener.java
utils/mdsal-utils/src/test/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalUtilsAsyncTest.java
utils/odl-ovsdb-utils/pom.xml
utils/odl-ovsdb-utils/src/main/feature/feature.xml
utils/southbound-utils/src/main/java/org/opendaylight/ovsdb/utils/southbound/utils/SouthboundUtils.java

index b0159e575914c3de6576b7d0d888999882c665a0..133bbff804ae0cddd2adeab55bdb5a54692250c8 100644 (file)
@@ -11,7 +11,7 @@
   <parent>
     <groupId>org.opendaylight.mdsal</groupId>
     <artifactId>binding-parent</artifactId>
-    <version>12.0.4</version>
+    <version>13.0.0</version>
     <relativePath/>
   </parent>
 
@@ -25,7 +25,7 @@
       <dependency>
         <groupId>org.opendaylight.aaa</groupId>
         <artifactId>aaa-artifacts</artifactId>
-        <version>0.18.4</version>
+        <version>0.19.1</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
index 4533fdad48d7bf2b834009c8c59010edf5c6dcd6..c462632fd517a4eab269068f56c75f65d19af972 100644 (file)
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.controller</groupId>
     <artifactId>mdsal-it-parent</artifactId>
-    <version>8.0.4</version>
+    <version>9.0.0</version>
     <relativePath/>
   </parent>
 
@@ -70,7 +70,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
       <dependency>
         <groupId>org.opendaylight.mdsal</groupId>
         <artifactId>mdsal-artifacts</artifactId>
-        <version>12.0.4</version>
+        <version>13.0.0</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
index 4efedcf8adbb0bef81eb0a5a1a8f2656db0783ef..dc4e8588e727f76a740a5b5004146caf362edce9 100644 (file)
@@ -22,7 +22,7 @@
             <dependency>
                 <groupId>org.opendaylight.mdsal</groupId>
                 <artifactId>mdsal-artifacts</artifactId>
-                <version>12.0.4</version>
+                <version>13.0.0</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
index 3a36f39c52571e2616ce9532ba7133fa549d8578..5e5f36ebbe9ac3eeab2f74b41cc62b032c02117a 100644 (file)
@@ -8,7 +8,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 -->
 <features name="odl-ovsdb-hwvtepsouthbound-api-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-ovsdb-hwvtepsouthbound-api" version="${project.version}">
-        <feature version="[12,13)">odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal</feature>
-        <feature version="[12,13)">odl-mdsal-model-odl-l2-types</feature>
+        <feature version="[13,14)">odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal</feature>
+        <feature version="[13,14)">odl-mdsal-model-odl-l2-types</feature>
     </feature>
 </features>
index 35846f00795b304608c18ed98246eae8c775c63c..7a47f9dd275f6ab71d479a8004a2b433b37e2f22 100644 (file)
@@ -30,7 +30,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
             <dependency>
                 <groupId>org.opendaylight.netconf</groupId>
                 <artifactId>netconf-artifacts</artifactId>
-                <version>6.0.6</version>
+                <version>7.0.0</version>
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
index a7fce10cfabf9f392a12cba3c7a6fe82b0e727f2..21078f61bb7a122aa5237e1264a9e6e3c264a3a2 100644 (file)
@@ -8,6 +8,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 -->
 <features name="odl-ovsdb-hwvtepsouthbound-rest-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-ovsdb-hwvtepsouthbound-rest" version="${project.version}">
-        <feature version="[6,7)">odl-restconf</feature>
+        <feature version="[7,8)">odl-restconf</feature>
     </feature>
 </features>
index 7181bdd37077f7d9566d3f1dd0c910d6dc8fdd77..822979769d050c1d6d450bdb510891611c39ad80 100644 (file)
@@ -30,7 +30,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
             <dependency>
                 <groupId>org.opendaylight.netconf</groupId>
                 <artifactId>netconf-artifacts</artifactId>
-                <version>6.0.6</version>
+                <version>7.0.0</version>
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
index 467d183d1b0f42c035dfa7f1fd72bb682a88b4b7..12df0c9e8ad7e16dc4113545c71f05d946d6a4e0 100644 (file)
@@ -8,6 +8,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 -->
 <features name="odl-ovsdb-hwvtepsouthbound-ui-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-ovsdb-hwvtepsouthbound-ui" version="${project.version}">
-        <feature version="[6,7)">odl-restconf-openapi</feature>
+        <feature version="[7,8)">odl-restconf-openapi</feature>
     </feature>
 </features>
index 8ad4511b46d605242f58aafd13c6153d5c416320..6162ac52050885fb2d87ea775efa45e05c93bb82 100644 (file)
@@ -28,7 +28,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.eos.binding.api.Entity;
-import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipCandidateRegistration;
 import org.opendaylight.ovsdb.hwvtepsouthbound.transact.TransactCommand;
 import org.opendaylight.ovsdb.hwvtepsouthbound.transact.TransactInvoker;
 import org.opendaylight.ovsdb.hwvtepsouthbound.transact.TransactInvokerImpl;
@@ -58,6 +57,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hw
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -73,7 +73,7 @@ public class HwvtepConnectionInstance {
     private MonitorCallBack callback;
     private volatile boolean hasDeviceOwnership = false;
     private Entity connectedEntity;
-    private EntityOwnershipCandidateRegistration deviceOwnershipCandidateRegistration;
+    private Registration deviceOwnershipCandidateRegistration;
     private HwvtepGlobalAugmentation initialCreatedData = null;
     private final HwvtepDeviceInfo deviceInfo;
     private final DataBroker dataBroker;
@@ -345,8 +345,7 @@ public class HwvtepConnectionInstance {
         }
     }
 
-    public void setDeviceOwnershipCandidateRegistration(
-            @NonNull final EntityOwnershipCandidateRegistration registration) {
+    public void setDeviceOwnershipCandidateRegistration(final @NonNull Registration registration) {
         this.deviceOwnershipCandidateRegistration = registration;
     }
 
index 3c3d3ac217e61a3f6d629e5f8676223de2e53d2d..58bd11daae9c6512c4e2d5ea71e7d6f8d10f99ae 100644 (file)
@@ -32,13 +32,11 @@ import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.ReadTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.eos.binding.api.Entity;
-import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipCandidateRegistration;
-import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipChange;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListener;
-import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListenerRegistration;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService;
 import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException;
 import org.opendaylight.mdsal.eos.common.api.EntityOwnershipState;
+import org.opendaylight.mdsal.eos.common.api.EntityOwnershipStateChange;
 import org.opendaylight.ovsdb.hwvtepsouthbound.events.ClientConnected;
 import org.opendaylight.ovsdb.hwvtepsouthbound.reconciliation.ReconciliationManager;
 import org.opendaylight.ovsdb.hwvtepsouthbound.reconciliation.ReconciliationTask;
@@ -64,6 +62,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hw
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.PhysicalSwitchAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.ConnectionInfo;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -414,8 +413,7 @@ public class HwvtepConnectionManager implements OvsdbConnectionListener, AutoClo
         hwvtepConnectionInstance.setConnectedEntity(candidateEntity);
 
         try {
-            EntityOwnershipCandidateRegistration registration =
-                    entityOwnershipService.registerCandidate(candidateEntity);
+            Registration registration = entityOwnershipService.registerCandidate(candidateEntity);
             hwvtepConnectionInstance.setDeviceOwnershipCandidateRegistration(registration);
             LOG.info("HWVTEP entity {} is registered for ownership.", candidateEntity);
         } catch (CandidateAlreadyRegisteredException e) {
@@ -428,8 +426,7 @@ public class HwvtepConnectionManager implements OvsdbConnectionListener, AutoClo
             final HwvtepConnectionInstance hwvtepConnectionInstance) {
         //If entity already has owner, it won't get notification from EntityOwnershipService
         //so cache the connection instances.
-        java.util.Optional<EntityOwnershipState> ownershipStateOpt =
-                entityOwnershipService.getOwnershipState(candidateEntity);
+        Optional<EntityOwnershipState> ownershipStateOpt = entityOwnershipService.getOwnershipState(candidateEntity);
         if (ownershipStateOpt.isPresent()) {
             EntityOwnershipState ownershipState = ownershipStateOpt.orElseThrow();
             putConnectionInstance(hwvtepConnectionInstance.getMDConnectionInfo(), hwvtepConnectionInstance);
@@ -589,34 +586,32 @@ public class HwvtepConnectionManager implements OvsdbConnectionListener, AutoClo
         }
     }
 
-    public void handleOwnershipChanged(final EntityOwnershipChange ownershipChange) {
-        HwvtepConnectionInstance hwvtepConnectionInstance =
-                getConnectionInstanceFromEntity(ownershipChange.getEntity());
+    public void handleOwnershipChanged(final Entity entity, final EntityOwnershipStateChange change) {
+        HwvtepConnectionInstance hwvtepConnectionInstance = getConnectionInstanceFromEntity(entity);
         LOG.info("handleOwnershipChanged: {} event received for device {}",
-                ownershipChange, hwvtepConnectionInstance != null ? hwvtepConnectionInstance.getConnectionInfo()
+            change, hwvtepConnectionInstance != null ? hwvtepConnectionInstance.getConnectionInfo()
                         : "THAT'S NOT REGISTERED BY THIS SOUTHBOUND PLUGIN INSTANCE");
 
         if (hwvtepConnectionInstance == null) {
-            if (ownershipChange.getState().isOwner()) {
-                LOG.warn("handleOwnershipChanged: found no connection instance for {}", ownershipChange.getEntity());
+            if (change.isOwner()) {
+                LOG.warn("handleOwnershipChanged: found no connection instance for {}", entity);
             } else {
                 // EntityOwnershipService sends notification to all the nodes, irrespective of whether
                 // that instance registered for the device ownership or not. It is to make sure that
                 // If all the controller instance that was connected to the device are down, so the
                 // running instance can clear up the operational data store even though it was not
                 // connected to the device.
-                LOG.debug("handleOwnershipChanged: found no connection instance for {}", ownershipChange.getEntity());
+                LOG.debug("handleOwnershipChanged: found no connection instance for {}", entity);
             }
 
             // If entity has no owner, clean up the operational data store (it's possible because owner controller
             // might went down abruptly and didn't get a chance to clean up the operational data store.
-            if (!ownershipChange.getState().hasOwner()) {
-                LOG.info("{} has no owner, cleaning up the operational data store", ownershipChange.getEntity());
+            if (!change.hasOwner()) {
+                LOG.info("{} has no owner, cleaning up the operational data store", entity);
                 // Below code might look weird but it's required. We want to give first opportunity to the
                 // previous owner of the device to clean up the operational data store if there is no owner now.
                 // That way we will avoid lot of nasty md-sal exceptions because of concurrent delete.
-                InstanceIdentifier<Node> nodeIid =
-                        (InstanceIdentifier<Node>) ownershipChange.getEntity().getIdentifier();
+                InstanceIdentifier<Node> nodeIid = (InstanceIdentifier<Node>) entity.getIdentifier();
                 hwvtepOperGlobalListener.scheduleOldConnectionNodeDelete(nodeIid);
                 /*
                 Assuming node1 was the owner earlier.
@@ -640,15 +635,15 @@ public class HwvtepConnectionManager implements OvsdbConnectionListener, AutoClo
         //Connection detail need to be cached, irrespective of ownership result.
         putConnectionInstance(hwvtepConnectionInstance.getMDConnectionInfo(), hwvtepConnectionInstance);
 
-        if (ownershipChange.getState().isOwner() == hwvtepConnectionInstance.getHasDeviceOwnership()) {
+        if (change.isOwner() == hwvtepConnectionInstance.getHasDeviceOwnership()) {
             LOG.debug("handleOwnershipChanged: no change in ownership for {}. Ownership status is : {}",
                     hwvtepConnectionInstance.getConnectionInfo(), hwvtepConnectionInstance.getHasDeviceOwnership());
             return;
         }
 
-        hwvtepConnectionInstance.setHasDeviceOwnership(ownershipChange.getState().isOwner());
+        hwvtepConnectionInstance.setHasDeviceOwnership(change.isOwner());
         // You were not an owner, but now you are
-        if (ownershipChange.getState().isOwner()) {
+        if (change.isOwner()) {
             LOG.info("handleOwnershipChanged: *this* southbound plugin instance is owner of device {}",
                     hwvtepConnectionInstance.getConnectionInfo());
 
@@ -675,7 +670,7 @@ public class HwvtepConnectionManager implements OvsdbConnectionListener, AutoClo
 
     private static final class HwvtepDeviceEntityOwnershipListener implements EntityOwnershipListener {
         private final HwvtepConnectionManager hcm;
-        private final EntityOwnershipListenerRegistration listenerRegistration;
+        private final Registration listenerRegistration;
 
         HwvtepDeviceEntityOwnershipListener(final HwvtepConnectionManager hcm,
                 final EntityOwnershipService entityOwnershipService) {
@@ -688,8 +683,9 @@ public class HwvtepConnectionManager implements OvsdbConnectionListener, AutoClo
         }
 
         @Override
-        public void ownershipChanged(final EntityOwnershipChange ownershipChange) {
-            hcm.handleOwnershipChanged(ownershipChange);
+        public void ownershipChanged(final Entity entity, final EntityOwnershipStateChange change,
+                final boolean inJeopardy) {
+            hcm.handleOwnershipChanged(entity, change);
         }
     }
 
index e45466b79abe8493fed6f4e29e7b9dc5f3bed259..efc396a429219203ffe944768a869ca1a6ca1a62 100644 (file)
@@ -5,7 +5,6 @@
  * 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.ovsdb.hwvtepsouthbound;
 
 import java.net.ConnectException;
@@ -17,10 +16,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.concurrent.ExecutionException;
-import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.DataObjectModification;
 import org.opendaylight.mdsal.binding.api.DataObjectModification.ModificationType;
+import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.binding.api.ReadWriteTransaction;
@@ -36,31 +35,31 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public final class HwvtepDataChangeListener implements ClusteredDataTreeChangeListener<Node>, AutoCloseable {
+public final class HwvtepDataChangeListener implements DataTreeChangeListener<Node>, AutoCloseable {
+    private static final Logger LOG = LoggerFactory.getLogger(HwvtepDataChangeListener.class);
 
-    private ListenerRegistration<HwvtepDataChangeListener> registration;
     private final HwvtepConnectionManager hcm;
     private final DataBroker db;
-    private static final Logger LOG = LoggerFactory.getLogger(HwvtepDataChangeListener.class);
+
+    private Registration registration;
 
     HwvtepDataChangeListener(DataBroker db, HwvtepConnectionManager hcm) {
         LOG.info("Registering HwvtepDataChangeListener");
         this.db = db;
         this.hcm = hcm;
-        registerListener();
-    }
-
-    private void registerListener() {
-        final DataTreeIdentifier<Node> treeId =
-                DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, getWildcardPath());
+        final var treeId = DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION,
+            InstanceIdentifier.builder(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(HwvtepSouthboundConstants.HWVTEP_TOPOLOGY_ID))
+            .child(Node.class)
+            .build());
 
         LOG.trace("Registering on path: {}", treeId);
-        registration = db.registerDataTreeChangeListener(treeId, HwvtepDataChangeListener.this);
+        registration = db.registerTreeChangeListener(treeId, this);
     }
 
     @Override
@@ -71,7 +70,7 @@ public final class HwvtepDataChangeListener implements ClusteredDataTreeChangeLi
     }
 
     @Override
-    public void onDataTreeChanged(Collection<DataTreeModification<Node>> changes) {
+    public void onDataTreeChanged(List<DataTreeModification<Node>> changes) {
         LOG.trace("onDataTreeChanged: {}", changes);
 
         /* TODO:
@@ -89,9 +88,9 @@ public final class HwvtepDataChangeListener implements ClusteredDataTreeChangeLi
         disconnectViaCli(changes);
     }
 
-    private void connect(Collection<DataTreeModification<Node>> changes) {
+    private void connect(List<DataTreeModification<Node>> changes) {
         for (DataTreeModification<Node> change : changes) {
-            final InstanceIdentifier<Node> key = change.getRootPath().getRootIdentifier();
+            final InstanceIdentifier<Node> key = change.getRootPath().path();
             final DataObjectModification<Node> mod = change.getRootNode();
             Node node = getCreated(mod);
             if (node != null) {
@@ -115,9 +114,9 @@ public final class HwvtepDataChangeListener implements ClusteredDataTreeChangeLi
         }
     }
 
-    private void updateConnections(Collection<DataTreeModification<Node>> changes) {
+    private void updateConnections(List<DataTreeModification<Node>> changes) {
         for (DataTreeModification<Node> change : changes) {
-            final InstanceIdentifier<Node> key = change.getRootPath().getRootIdentifier();
+            final InstanceIdentifier<Node> key = change.getRootPath().path();
             final DataObjectModification<Node> mod = change.getRootNode();
             Node updated = getUpdated(mod);
             if (updated != null) {
@@ -145,7 +144,7 @@ public final class HwvtepDataChangeListener implements ClusteredDataTreeChangeLi
         }
     }
 
-    private void updateData(Collection<DataTreeModification<Node>> changes) {
+    private void updateData(List<DataTreeModification<Node>> changes) {
         /* TODO:
          * Get connection instances for each change
          * Update data for each connection
@@ -162,7 +161,7 @@ public final class HwvtepDataChangeListener implements ClusteredDataTreeChangeLi
 
     private void disconnect(Collection<DataTreeModification<Node>> changes) {
         for (DataTreeModification<Node> change : changes) {
-            final InstanceIdentifier<Node> key = change.getRootPath().getRootIdentifier();
+            final InstanceIdentifier<Node> key = change.getRootPath().path();
             final DataObjectModification<Node> mod = change.getRootNode();
             Node deleted = getRemoved(mod);
             if (deleted != null) {
@@ -180,28 +179,28 @@ public final class HwvtepDataChangeListener implements ClusteredDataTreeChangeLi
     }
 
     private static Node getCreated(DataObjectModification<Node> mod) {
-        if (mod.getModificationType() == ModificationType.WRITE && mod.getDataBefore() == null) {
-            return mod.getDataAfter();
+        if (mod.modificationType() == ModificationType.WRITE && mod.dataBefore() == null) {
+            return mod.dataAfter();
         }
         return null;
     }
 
     private static Node getRemoved(DataObjectModification<Node> mod) {
-        if (mod.getModificationType() == ModificationType.DELETE) {
-            return mod.getDataBefore();
+        if (mod.modificationType() == ModificationType.DELETE) {
+            return mod.dataBefore();
         }
         return null;
     }
 
     private static Node getUpdated(DataObjectModification<Node> mod) {
         Node node = null;
-        switch (mod.getModificationType()) {
+        switch (mod.modificationType()) {
             case SUBTREE_MODIFIED:
-                node = mod.getDataAfter();
+                node = mod.dataAfter();
                 break;
             case WRITE:
-                if (mod.getDataBefore() != null) {
-                    node = mod.getDataAfter();
+                if (mod.dataBefore() != null) {
+                    node = mod.dataAfter();
                 }
                 break;
             default:
@@ -212,14 +211,14 @@ public final class HwvtepDataChangeListener implements ClusteredDataTreeChangeLi
 
     private static Node getOriginal(DataObjectModification<Node> mod) {
         Node node = null;
-        switch (mod.getModificationType()) {
+        switch (mod.modificationType()) {
             case SUBTREE_MODIFIED:
             case DELETE:
-                node = mod.getDataBefore();
+                node = mod.dataBefore();
                 break;
             case WRITE:
-                if (mod.getDataBefore() != null) {
-                    node = mod.getDataBefore();
+                if (mod.dataBefore() != null) {
+                    node = mod.dataBefore();
                 }
                 break;
             default:
@@ -228,21 +227,15 @@ public final class HwvtepDataChangeListener implements ClusteredDataTreeChangeLi
         return node;
     }
 
-    private static InstanceIdentifier<Node> getWildcardPath() {
-        return InstanceIdentifier.create(NetworkTopology.class)
-                        .child(Topology.class, new TopologyKey(HwvtepSouthboundConstants.HWVTEP_TOPOLOGY_ID))
-                        .child(Node.class);
-    }
-
     private Map<HwvtepConnectionInstance, Collection<DataTreeModification<Node>>> changesByConnectionInstance(
             Collection<DataTreeModification<Node>> changes) {
         Map<HwvtepConnectionInstance, Collection<DataTreeModification<Node>>> result = new HashMap<>();
         for (DataTreeModification<Node> change : changes) {
             final DataObjectModification<Node> mod = change.getRootNode();
             //From original node to get connection instance
-            Node node = mod.getDataBefore() != null ? mod.getDataBefore() : mod.getDataAfter();
+            Node node = mod.dataBefore() != null ? mod.dataBefore() : mod.dataAfter();
             HwvtepConnectionInstance connection = hcm.getConnectionInstanceFromNodeIid(
-                    change.getRootPath().getRootIdentifier());
+                    change.getRootPath().path());
             if (connection != null) {
                 if (!result.containsKey(connection)) {
                     List<DataTreeModification<Node>> tempChanges = new ArrayList<>();
@@ -262,25 +255,24 @@ public final class HwvtepDataChangeListener implements ClusteredDataTreeChangeLi
     @SuppressWarnings("checkstyle:IllegalCatch")
     private void disconnectViaCli(Collection<DataTreeModification<Node>> changes) {
         for (DataTreeModification<Node> change : changes) {
-            String nodeId = change.getRootPath().getRootIdentifier().firstKeyOf(Node.class).getNodeId().getValue();
+            String nodeId = change.getRootPath().path().firstKeyOf(Node.class).getNodeId().getValue();
             if (!nodeId.contains("/disconnect")) {
                 continue;
             }
             int reconcileIndex = nodeId.indexOf("/disconnect");
             String globalNodeId = nodeId.substring(0, reconcileIndex);
-            InstanceIdentifier<Node> globalNodeIid = change.getRootPath()
-                .getRootIdentifier().firstIdentifierOf(Topology.class)
+            InstanceIdentifier<Node> globalNodeIid = change.getRootPath().path().firstIdentifierOf(Topology.class)
                 .child(Node.class, new NodeKey(new NodeId(globalNodeId)));
             HwvtepConnectionInstance connectionInstance = hcm.getConnectionInstanceFromNodeIid(globalNodeIid);
             if (connectionInstance != null) {
                 LOG.error("Disconnecting from controller {}", nodeId);
                 new Thread(() -> {
                     ReadWriteTransaction tx = db.newReadWriteTransaction();
-                    tx.delete(LogicalDatastoreType.CONFIGURATION, change.getRootPath().getRootIdentifier());
+                    tx.delete(LogicalDatastoreType.CONFIGURATION, change.getRootPath().path());
                     try {
                         tx.commit().get();
                     } catch (ExecutionException | InterruptedException e) {
-                        LOG.error("Failed to delete the node {}", change.getRootPath().getRootIdentifier());
+                        LOG.error("Failed to delete the node {}", change.getRootPath().path());
                     }
                 }).start();
                 try {
index aee9a548ab885cfd4b4549c66c36cebb0b426878..9560406c126e909423a984de36739a8743abb61d 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.ovsdb.hwvtepsouthbound;
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -16,10 +15,10 @@ import java.util.concurrent.Callable;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
-import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.DataObjectModification;
 import org.opendaylight.mdsal.binding.api.DataObjectModification.ModificationType;
+import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
@@ -30,18 +29,18 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public final class HwvtepOperGlobalListener implements ClusteredDataTreeChangeListener<Node>, AutoCloseable {
+public final class HwvtepOperGlobalListener implements DataTreeChangeListener<Node>, AutoCloseable {
 
     private static final Logger LOG = LoggerFactory.getLogger(HwvtepOperGlobalListener.class);
     private static final Map<InstanceIdentifier<Node>, ConnectionInfo> NODE_CONNECTION_INFO = new ConcurrentHashMap<>();
     private static final Map<InstanceIdentifier<Node>, ScheduledFuture> TIMEOUT_FTS = new ConcurrentHashMap<>();
 
-    private ListenerRegistration<HwvtepOperGlobalListener> registration;
+    private Registration registration;
     private final HwvtepConnectionManager hcm;
     private final DataBroker db;
     private static final Map<InstanceIdentifier<Node>, List<Callable<Void>>> NODE_DELET_WAITING_JOBS
@@ -58,9 +57,9 @@ public final class HwvtepOperGlobalListener implements ClusteredDataTreeChangeLi
 
     private void registerListener() {
         final DataTreeIdentifier<Node> treeId =
-                        DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, getWildcardPath());
+                        DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, getWildcardPath());
 
-        registration = db.registerDataTreeChangeListener(treeId, HwvtepOperGlobalListener.this);
+        registration = db.registerTreeChangeListener(treeId, this);
     }
 
     @Override
@@ -72,7 +71,7 @@ public final class HwvtepOperGlobalListener implements ClusteredDataTreeChangeLi
 
     @Override
     @SuppressWarnings("checkstyle:IllegalCatch")
-    public void onDataTreeChanged(final Collection<DataTreeModification<Node>> changes) {
+    public void onDataTreeChanged(final List<DataTreeModification<Node>> changes) {
         LOG.trace("onDataTreeChanged: ");
         try {
             connect(changes);
@@ -130,9 +129,9 @@ public final class HwvtepOperGlobalListener implements ClusteredDataTreeChangeLi
         }
     }
 
-    private static void connect(Collection<DataTreeModification<Node>> changes) {
+    private static void connect(List<DataTreeModification<Node>> changes) {
         changes.forEach(change -> {
-            InstanceIdentifier<Node> key = change.getRootPath().getRootIdentifier();
+            InstanceIdentifier<Node> key = change.getRootPath().path();
             DataObjectModification<Node> mod = change.getRootNode();
             Node node = getCreated(mod);
             if (node == null) {
@@ -158,9 +157,9 @@ public final class HwvtepOperGlobalListener implements ClusteredDataTreeChangeLi
         });
     }
 
-    private static void updated(Collection<DataTreeModification<Node>> changes) {
+    private static void updated(List<DataTreeModification<Node>> changes) {
         changes.forEach(change -> {
-            InstanceIdentifier<Node> key = change.getRootPath().getRootIdentifier();
+            InstanceIdentifier<Node> key = change.getRootPath().path();
             DataObjectModification<Node> mod = change.getRootNode();
             Node node = getUpdated(mod);
             if (node != null) {
@@ -173,9 +172,9 @@ public final class HwvtepOperGlobalListener implements ClusteredDataTreeChangeLi
         return CONNECTED_NODES.get(key);
     }
 
-    private void disconnect(Collection<DataTreeModification<Node>> changes) {
+    private void disconnect(List<DataTreeModification<Node>> changes) {
         changes.forEach(change -> {
-            InstanceIdentifier<Node> key = change.getRootPath().getRootIdentifier();
+            InstanceIdentifier<Node> key = change.getRootPath().path();
             DataObjectModification<Node> mod = change.getRootNode();
             Node node = getRemoved(mod);
             if (node != null) {
index 2f877a0dbe4cc009135e78712bf5008d49d68a0e..14497292e99ee3e5df4d7b8fb23a78403f7208b8 100644 (file)
@@ -8,7 +8,7 @@
 package org.opendaylight.ovsdb.hwvtepsouthbound;
 
 import com.google.common.util.concurrent.FluentFuture;
-import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
@@ -16,8 +16,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 import javax.inject.Singleton;
-import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.binding.api.ReadWriteTransaction;
@@ -25,12 +25,10 @@ import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSeriali
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
 import org.opendaylight.mdsal.eos.binding.api.Entity;
-import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipCandidateRegistration;
-import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipChange;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListener;
-import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListenerRegistration;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService;
 import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException;
+import org.opendaylight.mdsal.eos.common.api.EntityOwnershipStateChange;
 import org.opendaylight.ovsdb.hwvtepsouthbound.reconciliation.configuration.HwvtepReconciliationManager;
 import org.opendaylight.ovsdb.hwvtepsouthbound.transactions.md.TransactionInvoker;
 import org.opendaylight.ovsdb.lib.OvsdbConnection;
@@ -41,7 +39,7 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyBuilder;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
@@ -53,7 +51,7 @@ import org.slf4j.LoggerFactory;
 @Singleton
 @Component(service = HwvtepSouthboundProviderInfo.class)
 public final class HwvtepSouthboundProvider
-        implements HwvtepSouthboundProviderInfo, ClusteredDataTreeChangeListener<Topology>, AutoCloseable {
+        implements HwvtepSouthboundProviderInfo, DataTreeChangeListener<Topology>, AutoCloseable {
 
     private static final Logger LOG = LoggerFactory.getLogger(HwvtepSouthboundProvider.class);
     private static final String ENTITY_TYPE = "ovsdb-hwvtepsouthbound-provider";
@@ -63,12 +61,12 @@ public final class HwvtepSouthboundProvider
     private final OvsdbConnection ovsdbConnection;
 
     private HwvtepConnectionManager cm;
-    private EntityOwnershipCandidateRegistration registration;
+    private Registration registration;
     private HwvtepsbPluginInstanceEntityOwnershipListener providerOwnershipChangeListener;
     private HwvtepDataChangeListener hwvtepDTListener;
     private HwvtepReconciliationManager hwvtepReconciliationManager;
     private final AtomicBoolean registered = new AtomicBoolean(false);
-    private ListenerRegistration<HwvtepSouthboundProvider> operTopologyRegistration;
+    private Registration operTopologyRegistration;
 
     @Inject
     @Activate
@@ -102,11 +100,10 @@ public final class HwvtepSouthboundProvider
         InstanceIdentifier<Topology> path = InstanceIdentifier
                 .create(NetworkTopology.class)
                 .child(Topology.class, new TopologyKey(HwvtepSouthboundConstants.HWVTEP_TOPOLOGY_ID));
-        DataTreeIdentifier<Topology> treeId =
-                DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, path);
+        DataTreeIdentifier<Topology> treeId = DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, path);
 
         LOG.trace("Registering listener for path {}", treeId);
-        operTopologyRegistration = dataBroker.registerDataTreeChangeListener(treeId, this);
+        operTopologyRegistration = dataBroker.registerTreeChangeListener(treeId, this);
         Scheduler.getScheduledExecutorService().schedule(() -> {
             if (!registered.get()) {
                 openOvsdbPort();
@@ -168,8 +165,8 @@ public final class HwvtepSouthboundProvider
         }
     }
 
-    public void handleOwnershipChange(final EntityOwnershipChange ownershipChange) {
-        if (ownershipChange.getState().isOwner()) {
+    public void handleOwnershipChange(final EntityOwnershipStateChange change) {
+        if (change.isOwner()) {
             LOG.info("*This* instance of HWVTEP southbound provider is set as a MASTER instance");
             LOG.info("Initialize HWVTEP topology {} in operational and config data store if not already present",
                     HwvtepSouthboundConstants.HWVTEP_TOPOLOGY_ID);
@@ -180,9 +177,8 @@ public final class HwvtepSouthboundProvider
         }
     }
 
-
     @Override
-    public void onDataTreeChanged(final Collection<DataTreeModification<Topology>> collection) {
+    public void onDataTreeChanged(final List<DataTreeModification<Topology>> collection) {
         openOvsdbPort();
 
         if (operTopologyRegistration != null) {
@@ -201,7 +197,7 @@ public final class HwvtepSouthboundProvider
 
     private static final class HwvtepsbPluginInstanceEntityOwnershipListener implements EntityOwnershipListener {
         private final HwvtepSouthboundProvider hsp;
-        private final EntityOwnershipListenerRegistration listenerRegistration;
+        private final Registration listenerRegistration;
 
         HwvtepsbPluginInstanceEntityOwnershipListener(final HwvtepSouthboundProvider hsp,
                 final EntityOwnershipService entityOwnershipService) {
@@ -214,8 +210,9 @@ public final class HwvtepSouthboundProvider
         }
 
         @Override
-        public void ownershipChanged(final EntityOwnershipChange ownershipChange) {
-            hsp.handleOwnershipChange(ownershipChange);
+        public void ownershipChanged(final Entity entity, final EntityOwnershipStateChange change,
+                final boolean inJeopardy) {
+            hsp.handleOwnershipChange(change);
         }
     }
 
index 85c4dab8e29d2317b89ecd434b211ff6481ec2ab..2a98135b7eeea96ba09e88df54bcb08b7af0ee2b 100644 (file)
@@ -11,19 +11,19 @@ import java.util.Optional;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.XMLNamespace;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.impl.codec.DeserializationException;
-import org.opendaylight.yangtools.yang.data.util.AbstractModuleStringInstanceIdentifierCodec;
+import org.opendaylight.yangtools.yang.data.util.AbstractStringInstanceIdentifierCodec;
 import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener;
 import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.util.LeafrefResolver;
 
-public final class InstanceIdentifierCodec
-        // FIXME: this really wants to be wired as yangtools-data-codec-gson's codecs, because ...
-        extends AbstractModuleStringInstanceIdentifierCodec implements EffectiveModelContextListener {
-
+// FIXME: this really wants to be wired as yangtools-data-codec-gson's codecs, because ...
+public final class InstanceIdentifierCodec extends AbstractStringInstanceIdentifierCodec {
     // FIXME: this is not the only interface exposed from binding-dom-codec-api, something different might be more
     //        appropriate.
     private final BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer;
@@ -33,7 +33,7 @@ public final class InstanceIdentifierCodec
 
     public InstanceIdentifierCodec(final DOMSchemaService schemaService,
             final BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer) {
-        schemaService.registerSchemaContextListener(this);
+        schemaService.registerSchemaContextListener(this::onModelContextUpdated);
         this.bindingNormalizedNodeSerializer = bindingNormalizedNodeSerializer;
     }
 
@@ -44,8 +44,9 @@ public final class InstanceIdentifierCodec
     }
 
     @Override
-    protected Module moduleForPrefix(final String prefix) {
-        return context != null ? context.findModule(prefix, Optional.empty()).orElse(null) : null;
+    protected QNameModule moduleForPrefix(final String prefix) {
+        return context != null ? context.findModule(prefix, Optional.empty()).map(Module::getQNameModule).orElse(null)
+            : null;
     }
 
     @Override
@@ -55,6 +56,11 @@ public final class InstanceIdentifierCodec
     }
 
     @Override
+    protected Object deserializeKeyValue(final DataSchemaNode schemaNode, final LeafrefResolver resolver,
+            final String value) {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
     public void onModelContextUpdated(final EffectiveModelContext schemaContext) {
         this.context = schemaContext;
         this.dataSchemaContextTree = DataSchemaContextTree.from(schemaContext);
index 7ac13871a552f94709f872c3c09f28bdd2fac6c0..4f5d35b2c9efa04982dc5ae6062a9d1a2bf2d398 100644 (file)
@@ -14,12 +14,14 @@ import org.opendaylight.yangtools.yang.binding.Augmentation;
 import org.opendaylight.yangtools.yang.binding.ChildOf;
 import org.opendaylight.yangtools.yang.binding.ChoiceIn;
 import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.ExactDataObjectStep;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.Key;
 import org.opendaylight.yangtools.yang.binding.KeyAware;
+import org.opendaylight.yangtools.yang.binding.KeyStep;
+import org.opendaylight.yangtools.yang.binding.NodeStep;
 
 public class DataObjectModificationImpl<T extends DataObject> implements DataObjectModification<T> {
-
     private final Collection<DataObjectModification<? extends DataObject>> childNodesCache = new ArrayList<>();
     InstanceIdentifier<T> nodeId;
     T newNode;
@@ -33,33 +35,33 @@ public class DataObjectModificationImpl<T extends DataObject> implements DataObj
 
 
     @Override
-    public T getDataBefore() {
+    public T dataBefore() {
         return oldNode;
     }
 
     @Override
-    public T getDataAfter() {
+    public T dataAfter() {
         return newNode;
     }
 
     @Override
-    public Class<T> getDataType() {
+    public Class<T> dataType() {
         return (Class<T>) newNode.getClass();
     }
 
     @Override
-    public InstanceIdentifier.PathArgument getIdentifier() {
-        return nodeId.getPathArguments().iterator().next();
+    public ExactDataObjectStep<T> step() {
+        return (ExactDataObjectStep<T>) nodeId.getPathArguments().iterator().next();
     }
 
     @Override
-    public ModificationType getModificationType() {
+    public ModificationType modificationType() {
         return ModificationType.WRITE;
 
     }
 
     @Override
-    public Collection<DataObjectModification<? extends DataObject>> getModifiedChildren() {
+    public Collection<DataObjectModification<? extends DataObject>> modifiedChildren() {
         return childNodesCache;
     }
 
@@ -76,7 +78,7 @@ public class DataObjectModificationImpl<T extends DataObject> implements DataObj
     }
 
     @Override
-    public DataObjectModification<? extends DataObject> getModifiedChild(final InstanceIdentifier.PathArgument arg) {
+    public DataObjectModification<? extends DataObject> getModifiedChild(final ExactDataObjectStep<?> childArgument) {
         return null;
     }
 
@@ -84,7 +86,7 @@ public class DataObjectModificationImpl<T extends DataObject> implements DataObj
     @SuppressWarnings("unchecked")
     public <C extends KeyAware<K> & ChildOf<? super T>, K extends Key<C>> DataObjectModification<C>
         getModifiedChildListItem(final Class<C> listItem, final K listKey) {
-        return (DataObjectModification<C>) getModifiedChild(InstanceIdentifier.IdentifiableItem.of(listItem, listKey));
+        return (DataObjectModification<C>) getModifiedChild(new KeyStep<>(listItem, listKey));
     }
 
     @Override
@@ -97,7 +99,7 @@ public class DataObjectModificationImpl<T extends DataObject> implements DataObj
     @Override
     @SuppressWarnings("unchecked")
     public <C extends ChildOf<? super T>> DataObjectModification<C> getModifiedChildContainer(final Class<C> arg) {
-        return (DataObjectModification<C>) getModifiedChild(InstanceIdentifier.Item.of(arg));
+        return (DataObjectModification<C>) getModifiedChild(new NodeStep<>(arg));
     }
 
     @Override
@@ -110,7 +112,7 @@ public class DataObjectModificationImpl<T extends DataObject> implements DataObj
     @SuppressWarnings("unchecked")
     public <C extends Augmentation<T> & DataObject> DataObjectModification<C> getModifiedAugmentation(
             final Class<C> augmentation) {
-        return (DataObjectModification<C>) getModifiedChild(InstanceIdentifier.Item.of(augmentation));
+        return (DataObjectModification<C>) getModifiedChild(new NodeStep<>(augmentation));
     }
 
     @Override
index 221da699b5e2fb51a1e304891dcd7015f7a9916f..5fb039428c1469ded16e317bdc7c9e6f30254ffc 100644 (file)
@@ -7,11 +7,11 @@
  */
 package org.opendaylight.ovsdb.hwvtepsouthbound.reconciliation.configuration;
 
-import java.util.Collection;
-import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
+import java.util.List;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.DataObjectModification;
 import org.opendaylight.mdsal.binding.api.DataObjectModification.ModificationType;
+import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
@@ -21,24 +21,24 @@ import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepSouthboundMapper;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepGlobalAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.PhysicalSwitchAugmentation;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public final class HwvtepReconciliationManager implements ClusteredDataTreeChangeListener<Node>, AutoCloseable {
+public final class HwvtepReconciliationManager implements DataTreeChangeListener<Node>, AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(HwvtepReconciliationManager.class);
 
-    private final ListenerRegistration<HwvtepReconciliationManager> registration;
+    private final Registration registration;
     private final HwvtepConnectionManager hcm;
 
     public HwvtepReconciliationManager(DataBroker db, HwvtepConnectionManager hcm) {
         this.hcm = hcm;
 
         final InstanceIdentifier<Node> iid = HwvtepSouthboundMapper.createInstanceIdentifier();
-        final DataTreeIdentifier<Node> treeId = DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, iid);
+        final DataTreeIdentifier<Node> treeId = DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, iid);
         LOG.trace("Registering listener for path {}", treeId);
-        registration = db.registerDataTreeChangeListener(treeId, HwvtepReconciliationManager.this);
+        registration = db.registerTreeChangeListener(treeId, this);
     }
 
     @Override
@@ -49,14 +49,14 @@ public final class HwvtepReconciliationManager implements ClusteredDataTreeChang
     }
 
     @Override
-    public void onDataTreeChanged(Collection<DataTreeModification<Node>> changes) {
+    public void onDataTreeChanged(List<DataTreeModification<Node>> changes) {
         processConnectedNodes(changes);
         processDisconnectedNodes(changes);
     }
 
-    private void processDisconnectedNodes(Collection<DataTreeModification<Node>> changes) {
+    private void processDisconnectedNodes(List<DataTreeModification<Node>> changes) {
         for (DataTreeModification<Node> change : changes) {
-            final InstanceIdentifier<Node> key = change.getRootPath().getRootIdentifier();
+            final InstanceIdentifier<Node> key = change.getRootPath().path();
             final DataObjectModification<Node> mod = change.getRootNode();
             Node deleted = getRemoved(mod);
             if (deleted != null) {
@@ -68,7 +68,7 @@ public final class HwvtepReconciliationManager implements ClusteredDataTreeChang
         }
     }
 
-    private void processConnectedNodes(Collection<DataTreeModification<Node>> changes) {
+    private void processConnectedNodes(List<DataTreeModification<Node>> changes) {
         for (DataTreeModification<Node> change : changes) {
             DataObjectModification<Node> mod = change.getRootNode();
             Node node = getCreated(mod);
@@ -88,15 +88,15 @@ public final class HwvtepReconciliationManager implements ClusteredDataTreeChang
     }
 
     private static Node getCreated(DataObjectModification<Node> mod) {
-        if (mod.getModificationType() == ModificationType.WRITE && mod.getDataBefore() == null) {
-            return mod.getDataAfter();
+        if (mod.modificationType() == ModificationType.WRITE && mod.dataBefore() == null) {
+            return mod.dataAfter();
         }
         return null;
     }
 
     private static Node getRemoved(DataObjectModification<Node> mod) {
-        if (mod.getModificationType() == ModificationType.DELETE) {
-            return mod.getDataBefore();
+        if (mod.modificationType() == ModificationType.DELETE) {
+            return mod.dataBefore();
         }
         return null;
     }
index 7ac4000b2f5edccee38b8b0c845cd7f2972a26a5..02e76b5e7653122672adca577256ca7eb4c6e777 100644 (file)
@@ -53,29 +53,28 @@ public final class TransactUtils {
     }
 
     public static Node getCreated(final DataObjectModification<Node> mod) {
-        if (mod.getModificationType() == ModificationType.WRITE
-                        && mod.getDataBefore() == null) {
-            return mod.getDataAfter();
+        if (mod.modificationType() == ModificationType.WRITE && mod.dataBefore() == null) {
+            return mod.dataAfter();
         }
         return null;
     }
 
     public static Node getRemoved(final DataObjectModification<Node> mod) {
-        if (mod.getModificationType() == ModificationType.DELETE) {
-            return mod.getDataBefore();
+        if (mod.modificationType() == ModificationType.DELETE) {
+            return mod.dataBefore();
         }
         return null;
     }
 
     public static Node getUpdated(final DataObjectModification<Node> mod) {
         Node node = null;
-        switch (mod.getModificationType()) {
+        switch (mod.modificationType()) {
             case SUBTREE_MODIFIED:
-                node = mod.getDataAfter();
+                node = mod.dataAfter();
                 break;
             case WRITE:
-                if (mod.getDataBefore() != null) {
-                    node = mod.getDataAfter();
+                if (mod.dataBefore() != null) {
+                    node = mod.dataAfter();
                 }
                 break;
             default:
@@ -86,14 +85,14 @@ public final class TransactUtils {
 
     public static Node getOriginal(final DataObjectModification<Node> mod) {
         Node node = null;
-        switch (mod.getModificationType()) {
+        switch (mod.modificationType()) {
             case SUBTREE_MODIFIED:
             case DELETE:
-                node = mod.getDataBefore();
+                node = mod.dataBefore();
                 break;
             case WRITE:
-                if (mod.getDataBefore() !=  null) {
-                    node = mod.getDataBefore();
+                if (mod.dataBefore() !=  null) {
+                    node = mod.dataBefore();
                 }
                 break;
             default:
@@ -107,7 +106,7 @@ public final class TransactUtils {
             final Collection<DataTreeModification<Node>> changes, final Class<Node> class1) {
         Map<InstanceIdentifier<Node>, Node> result = new HashMap<>();
         for (DataTreeModification<Node> change : changes) {
-            final InstanceIdentifier<Node> key = change.getRootPath().getRootIdentifier();
+            final InstanceIdentifier<Node> key = change.getRootPath().path();
             final DataObjectModification<Node> mod = change.getRootNode();
             Node created = getCreated(mod);
             if (created != null) {
index 6e1a63b4a83221f51fab82b3f9596cc48f085b65..21d0df5deda2dc06d67dedd4d216b58f2e5c4b18 100644 (file)
@@ -30,7 +30,6 @@ import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.ReadWriteTransaction;
 import org.opendaylight.mdsal.binding.api.Transaction;
 import org.opendaylight.mdsal.binding.api.TransactionChain;
-import org.opendaylight.mdsal.binding.api.TransactionChainListener;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Deactivate;
@@ -44,8 +43,8 @@ import org.slf4j.LoggerFactory;
  */
 @Singleton
 @Component(service = TransactionInvoker.class)
-public final class TransactionInvokerImpl implements TransactionInvoker, TransactionChainListener, Runnable,
-        AutoCloseable, UncaughtExceptionHandler {
+public final class TransactionInvokerImpl implements TransactionInvoker, Runnable, AutoCloseable,
+        UncaughtExceptionHandler {
     private static final Logger LOG = LoggerFactory.getLogger(TransactionInvokerImpl.class);
     private static final int QUEUE_SIZE = 10000;
 
@@ -68,7 +67,7 @@ public final class TransactionInvokerImpl implements TransactionInvoker, Transac
     @Activate
     public TransactionInvokerImpl(@Reference final DataBroker db) {
         this.db = db;
-        chain = db.createTransactionChain(this);
+        chain = db.createTransactionChain();
         ThreadFactory threadFact = new ThreadFactoryBuilder().setNameFormat("transaction-invoker-impl-%d")
                 .setUncaughtExceptionHandler(this).build();
         executor = Executors.newSingleThreadExecutor(threadFact);
@@ -85,17 +84,6 @@ public final class TransactionInvokerImpl implements TransactionInvoker, Transac
         }
     }
 
-    @Override
-    public void onTransactionChainFailed(final TransactionChain txChain,
-            final Transaction transaction, final Throwable cause) {
-        offerFailedTransaction(transaction);
-    }
-
-    @Override
-    public void onTransactionChainSuccessful(final TransactionChain txChain) {
-        // NO OP
-    }
-
     @Override
     public void run() {
         while (true) {
@@ -142,7 +130,7 @@ public final class TransactionInvokerImpl implements TransactionInvoker, Transac
 
             @Override
             public void onFailure(final Throwable throwable) {
-                // NOOP - handled by failure of transaction chain
+                offerFailedTransaction(transaction);
                 command.onFailure();
             }
         }, MoreExecutors.directExecutor());
@@ -181,7 +169,7 @@ public final class TransactionInvokerImpl implements TransactionInvoker, Transac
 
     private void resetTransactionQueue() {
         chain.close();
-        chain = db.createTransactionChain(this);
+        chain = db.createTransactionChain();
         pendingTransactions.clear();
         transactionToCommand.clear();
         failedTransactionQueue.clear();
index 55796e6562dc4f0705c2304bf3d206a519c12f67..33e765cc0f0bf9474848e646ee46ad51800df572 100644 (file)
@@ -5,13 +5,12 @@
  * 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.ovsdb.hwvtepsouthbound;
 
-import java.util.Collection;
-import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
+import java.util.List;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.DataObjectModification;
+import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
@@ -25,19 +24,14 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.ChildOf;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.KeyAware;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class HwvtepOperationalDataChangeListener implements ClusteredDataTreeChangeListener<Node>, AutoCloseable {
-
-    private static final Logger LOG = LoggerFactory.getLogger(HwvtepOperationalDataChangeListener.class);
 
-    private final ListenerRegistration<HwvtepOperationalDataChangeListener> registration;
+public class HwvtepOperationalDataChangeListener implements DataTreeChangeListener<Node>, AutoCloseable {
+    private final Registration registration;
     private final HwvtepConnectionManager hcm;
     private final DataBroker db;
     private final HwvtepConnectionInstance connectionInstance;
@@ -47,9 +41,8 @@ public class HwvtepOperationalDataChangeListener implements ClusteredDataTreeCha
         this.db = db;
         this.hcm = hcm;
         this.connectionInstance = connectionInstance;
-        DataTreeIdentifier<Node> treeId = DataTreeIdentifier
-            .create(LogicalDatastoreType.OPERATIONAL, getWildcardPath());
-        registration = db.registerDataTreeChangeListener(treeId, HwvtepOperationalDataChangeListener.this);
+        DataTreeIdentifier<Node> treeId = DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, getWildcardPath());
+        registration = db.registerTreeChangeListener(treeId, this);
     }
 
     @Override
@@ -60,17 +53,17 @@ public class HwvtepOperationalDataChangeListener implements ClusteredDataTreeCha
     }
 
     @Override
-    public void onDataTreeChanged(Collection<DataTreeModification<Node>> changes) {
+    public void onDataTreeChanged(List<DataTreeModification<Node>> changes) {
         for (DataTreeModification<Node> change : changes) {
-            final InstanceIdentifier<Node> key = change.getRootPath().getRootIdentifier();
+            final InstanceIdentifier<Node> key = change.getRootPath().path();
             final DataObjectModification<Node> mod = change.getRootNode();
-            for (DataObjectModification<? extends DataObject> child : mod.getModifiedChildren()) {
+            for (DataObjectModification<? extends DataObject> child : mod.modifiedChildren()) {
                 updateDeviceOpData(key, child);
             }
             DataObjectModification<HwvtepGlobalAugmentation> aug =
                     mod.getModifiedAugmentation(HwvtepGlobalAugmentation.class);
             if (aug != null) {
-                for (DataObjectModification<? extends DataObject> child : aug.getModifiedChildren()) {
+                for (DataObjectModification<? extends DataObject> child : aug.modifiedChildren()) {
                     updateDeviceOpData(key, child);
                 }
             }
@@ -78,12 +71,12 @@ public class HwvtepOperationalDataChangeListener implements ClusteredDataTreeCha
     }
 
     private void updateDeviceOpData(InstanceIdentifier<Node> key, DataObjectModification<? extends DataObject> mod) {
-        Class<? extends KeyAware> childClass = (Class<? extends KeyAware>) mod.getDataType();
-        InstanceIdentifier instanceIdentifier = getKey(key, mod, mod.getDataAfter());
-        switch (mod.getModificationType()) {
+        Class<? extends KeyAware> childClass = (Class<? extends KeyAware>) mod.dataType();
+        InstanceIdentifier instanceIdentifier = getKey(key, mod, mod.dataAfter());
+        switch (mod.modificationType()) {
             case WRITE:
                 connectionInstance.getDeviceInfo().updateDeviceOperData(childClass, instanceIdentifier,
-                        new UUID("uuid"), mod.getDataAfter());
+                        new UUID("uuid"), mod.dataAfter());
                 break;
             case DELETE:
                 connectionInstance.getDeviceInfo().clearDeviceOperData(childClass, instanceIdentifier);
@@ -97,7 +90,7 @@ public class HwvtepOperationalDataChangeListener implements ClusteredDataTreeCha
 
     private static InstanceIdentifier getKey(InstanceIdentifier<Node> key,
                                              DataObjectModification<? extends DataObject> child, DataObject data) {
-        Class<? extends DataObject> childClass = child.getDataType();
+        Class<? extends DataObject> childClass = child.dataType();
         InstanceIdentifier instanceIdentifier = null;
         if (LogicalSwitches.class == childClass) {
             LogicalSwitches ls = (LogicalSwitches)data;
index 26acbe742f05bba5b789a24a0e8dc1bf4f5281f2..191d5b75d280ad8254f7702336e009679506662a 100644 (file)
@@ -16,9 +16,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   </parent>
 
   <modelVersion>4.0.0</modelVersion>
-  <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>hwvtepsouthbound-it</artifactId>
-  <version>1.18.0-SNAPSHOT</version>
   <packaging>jar</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 9d8b9ad094ad7e73f3c385526e14b6ac2001a1d2..12de98e3e60f7e250190c04a8f31d25a16803ed7 100644 (file)
@@ -19,8 +19,8 @@ import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
-import java.util.Collection;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
@@ -126,11 +126,11 @@ public class HwvtepSouthboundIT extends AbstractMdsalTestBase {
         }
 
         @Override
-        public void onDataTreeChanged(Collection<DataTreeModification<Node>> changes) {
+        public void onDataTreeChanged(List<DataTreeModification<Node>> changes) {
             for (DataTreeModification<Node> change : changes) {
-                final InstanceIdentifier<Node> key = change.getRootPath().getRootIdentifier();
+                final InstanceIdentifier<Node> key = change.getRootPath().path();
                 final DataObjectModification<Node> mod = change.getRootNode();
-                switch (mod.getModificationType()) {
+                switch (mod.modificationType()) {
                     case DELETE:
                         removedNodes.add(key);
                         break;
@@ -138,15 +138,15 @@ public class HwvtepSouthboundIT extends AbstractMdsalTestBase {
                         updatedNodes.add(key);
                         break;
                     case WRITE:
-                        if (mod.getDataBefore() == null) {
-                            LOG.trace("Data added: {}", mod.getDataAfter());
+                        if (mod.dataBefore() == null) {
+                            LOG.trace("Data added: {}", mod.dataAfter());
                             createdNodes.add(key);
                         } else {
                             updatedNodes.add(key);
                         }
                         break;
                     default:
-                        throw new IllegalArgumentException("Unhandled modification type " + mod.getModificationType());
+                        throw new IllegalArgumentException("Unhandled modification type " + mod.modificationType());
                 }
             }
         }
@@ -178,7 +178,7 @@ public class HwvtepSouthboundIT extends AbstractMdsalTestBase {
         return combinedOptions;
     }
 
-    private Option[] getOtherOptions() {
+    private static Option[] getOtherOptions() {
         return new Option[] {
                 vmOption("-javaagent:../jars/org.jacoco.agent.jar=destfile=../../jacoco-it.exec"),
                 keepRuntimeFolder()
@@ -228,7 +228,7 @@ public class HwvtepSouthboundIT extends AbstractMdsalTestBase {
         return option;
     }
 
-    private Option[] getPropertiesOptions() {
+    private static Option[] getPropertiesOptions() {
         Properties props = new Properties(System.getProperties());
         String ipAddressStr = props.getProperty(SERVER_IPADDRESS, DEFAULT_SERVER_IPADDRESS);
         String portStr = props.getProperty(SERVER_PORT, DEFAULT_SERVER_PORT);
@@ -276,7 +276,7 @@ public class HwvtepSouthboundIT extends AbstractMdsalTestBase {
         assertTrue("Did not find " + HwvtepSouthboundConstants.HWVTEP_TOPOLOGY_ID.getValue(), getHwvtepTopology());
         final ConnectionInfo connectionInfo = getConnectionInfo(addressStr, portNumber);
         final InstanceIdentifier<Node> iid = HwvtepSouthboundUtils.createInstanceIdentifier(connectionInfo);
-        final DataTreeIdentifier<Node> treeId = DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, iid);
+        final DataTreeIdentifier<Node> treeId = DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, iid);
 
         dataBroker.registerDataTreeChangeListener(treeId, OPERATIONAL_LISTENER);
 
@@ -303,7 +303,7 @@ public class HwvtepSouthboundIT extends AbstractMdsalTestBase {
         setup = true;
     }
 
-    private Boolean getHwvtepTopology() {
+    private static Boolean getHwvtepTopology() {
         LOG.info("getHwvtepTopology: looking for {}...", HwvtepSouthboundConstants.HWVTEP_TOPOLOGY_ID.getValue());
         Boolean found = false;
         final TopologyId topologyId = HwvtepSouthboundConstants.HWVTEP_TOPOLOGY_ID;
@@ -328,7 +328,7 @@ public class HwvtepSouthboundIT extends AbstractMdsalTestBase {
         return found;
     }
 
-    private Node connectHwvtepNode(ConnectionInfo connectionInfo) throws InterruptedException {
+    private static Node connectHwvtepNode(ConnectionInfo connectionInfo) throws InterruptedException {
         final InstanceIdentifier<Node> iid = HwvtepSouthboundUtils.createInstanceIdentifier(connectionInfo);
         Assert.assertTrue(mdsalUtils.put(LogicalDatastoreType.CONFIGURATION,
                         iid, HwvtepSouthboundUtils.createNode(connectionInfo)));
@@ -348,7 +348,7 @@ public class HwvtepSouthboundIT extends AbstractMdsalTestBase {
         LOG.info("Disconnected from {}", HwvtepSouthboundUtils.connectionInfoToString(connectionInfo));
     }
 
-    private void waitForOperationalCreation(InstanceIdentifier<Node> iid) throws InterruptedException {
+    private static void waitForOperationalCreation(InstanceIdentifier<Node> iid) throws InterruptedException {
         synchronized (OPERATIONAL_LISTENER) {
             long start = System.currentTimeMillis();
             LOG.info("Waiting for OPERATIONAL DataChanged creation on {}", iid);
@@ -372,7 +372,7 @@ public class HwvtepSouthboundIT extends AbstractMdsalTestBase {
         }
     }
 
-    private ConnectionInfo getConnectionInfo(String ipAddressStr, Uint16 portNum) {
+    private static ConnectionInfo getConnectionInfo(String ipAddressStr, Uint16 portNum) {
         InetAddress inetAddress = null;
         try {
             inetAddress = InetAddress.getByName(ipAddressStr);
@@ -511,15 +511,15 @@ public class HwvtepSouthboundIT extends AbstractMdsalTestBase {
         }
     }
 
-    private PhysicalSwitchAugmentation getPhysicalSwitch(ConnectionInfo connectionInfo) {
+    private static PhysicalSwitchAugmentation getPhysicalSwitch(ConnectionInfo connectionInfo) {
         return getPhysicalSwitch(connectionInfo, PS_NAME);
     }
 
-    private PhysicalSwitchAugmentation getPhysicalSwitch(ConnectionInfo connectionInfo, String psName) {
+    private static PhysicalSwitchAugmentation getPhysicalSwitch(ConnectionInfo connectionInfo, String psName) {
         return getPhysicalSwitch(connectionInfo, psName, LogicalDatastoreType.OPERATIONAL);
     }
 
-    private PhysicalSwitchAugmentation getPhysicalSwitch(ConnectionInfo connectionInfo, String psName,
+    private static PhysicalSwitchAugmentation getPhysicalSwitch(ConnectionInfo connectionInfo, String psName,
                     LogicalDatastoreType dataStore) {
         Node psNode = getPhysicalSwitchNode(connectionInfo, psName, dataStore);
         Assert.assertNotNull(psNode);
@@ -528,7 +528,8 @@ public class HwvtepSouthboundIT extends AbstractMdsalTestBase {
         return psAugmentation;
     }
 
-    private Node getPhysicalSwitchNode(ConnectionInfo connectionInfo, String psName, LogicalDatastoreType dataStore) {
+    private static Node getPhysicalSwitchNode(ConnectionInfo connectionInfo, String psName,
+            LogicalDatastoreType dataStore) {
         InstanceIdentifier<Node> psIid =
                         HwvtepSouthboundUtils.createInstanceIdentifier(connectionInfo, new HwvtepNodeName(psName));
         return mdsalUtils.read(dataStore, psIid);
index f0c9f6d20985acd55081df5a85b4289419c49cce..c52c4618534f344c90cc082bfa4cedbadd0a404b 100644 (file)
@@ -41,7 +41,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
         <dependency>
             <groupId>org.opendaylight.aaa</groupId>
             <artifactId>odl-aaa-cert</artifactId>
-            <version>0.18.4</version>
+            <version>0.19.1</version>
             <type>xml</type>
             <classifier>features</classifier>
         </dependency>
index 330ca230ff1a0ce300ed42544409f1448585917c..a093b83e5ce4155aeae3153c0515a85dcde2d49d 100644 (file)
@@ -10,7 +10,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <feature name="odl-ovsdb-library" version="${project.version}">
         <feature version="[13,14)">odl-jackson-2</feature>
         <feature version="[13,14)">odl-netty-4</feature>
-        <feature version="[0.18,1)">odl-aaa-cert</feature>
+        <feature version="[0.19,1)">odl-aaa-cert</feature>
         <configfile finalname="etc/org.opendaylight.ovsdb.library.cfg">
             mvn:org.opendaylight.ovsdb/library/${project.version}/cfg/config
         </configfile>
index 538ce7f67d8e0726ad55b828c29fa38f6af2bc04..173ce1b5df966e0d7d1eba034fc43ff6d06f3dfa 100644 (file)
@@ -149,9 +149,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
               org.opendaylight.ovsdb.lib.*,
               org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.library.impl.rev141210
             </Export-Package>
-
-            <!-- FIXME: AAA-268: remove this instruction once aaa-cert exposes Provide-Capability -->
-            <_dsannotations-options>norequirements</_dsannotations-options>
           </instructions>
         </configuration>
       </plugin>
index d09d15831c9d4c977542d39de9a934315afb40fd..f400d3dd8f36d2b376680f180f0077e57f5289f6 100644 (file)
@@ -29,7 +29,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
             <dependency>
                 <groupId>org.opendaylight.mdsal</groupId>
                 <artifactId>mdsal-artifacts</artifactId>
-                <version>12.0.4</version>
+                <version>13.0.0</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
index d7ad71b2ab1858e4e02ed97ede3105c59e391f03..ee246de31dd12db189ef004146ba9c755b320620 100644 (file)
@@ -8,7 +8,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 -->
 <features name="odl-ovsdb-southbound-api-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-ovsdb-southbound-api" version="${project.version}">
-        <feature version="[12,13)">odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal</feature>
-        <feature version="[12,13)">odl-mdsal-model-odl-l2-types</feature>
+        <feature version="[13,14)">odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal</feature>
+        <feature version="[13,14)">odl-mdsal-model-odl-l2-types</feature>
     </feature>
 </features>
index d9b7445cd52ba5f1c1b3504c86f54ac98155db80..c14f5fb3b1b9eb9004933bc67c3eebdb0a4e16c4 100644 (file)
@@ -30,7 +30,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
             <dependency>
                 <groupId>org.opendaylight.netconf</groupId>
                 <artifactId>netconf-artifacts</artifactId>
-                <version>6.0.6</version>
+                <version>7.0.0</version>
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
index 30e1e437d6f90e1fa9ccdf8bbed10e8b464b9ed0..cacd6d2c415c5691ca9d65b2331eb86d67f85af3 100644 (file)
@@ -8,6 +8,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 -->
 <features name="odl-ovsdb-southbound-impl-rest-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-ovsdb-southbound-impl-rest" version="${project.version}">
-        <feature version="[6,7)">odl-restconf</feature>
+        <feature version="[7,8)">odl-restconf</feature>
     </feature>
 </features>
index 9e5785b731170ffa293f9dbc1c29ca70f9d4cbf3..4addb54b7caee718a3268f29122320854d5c1e6b 100644 (file)
@@ -30,7 +30,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
             <dependency>
                 <groupId>org.opendaylight.netconf</groupId>
                 <artifactId>netconf-artifacts</artifactId>
-                <version>6.0.6</version>
+                <version>7.0.0</version>
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
index 9ee6381ff25d33cb54056d90148f3a9076a3c868..c7aac8d3beb21b82316d0958702ccdd81098c407 100644 (file)
@@ -8,6 +8,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 -->
 <features name="odl-ovsdb-southbound-impl-ui-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-ovsdb-southbound-impl-ui" version="${project.version}">
-        <feature version="[6,7)">odl-restconf-openapi</feature>
+        <feature version="[7,8)">odl-restconf-openapi</feature>
     </feature>
 </features>
index b6c395686f5724c8c5f2fa5ed92ff62ab3d3873f..7398b7781938b2d086e04fa745d5e2d60d30b57f 100644 (file)
@@ -11,19 +11,20 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.XMLNamespace;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.impl.codec.DeserializationException;
-import org.opendaylight.yangtools.yang.data.util.AbstractModuleStringInstanceIdentifierCodec;
+import org.opendaylight.yangtools.yang.data.util.AbstractStringInstanceIdentifierCodec;
 import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener;
 import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.util.LeafrefResolver;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class InstanceIdentifierCodec extends AbstractModuleStringInstanceIdentifierCodec
-        implements EffectiveModelContextListener {
+public class InstanceIdentifierCodec extends AbstractStringInstanceIdentifierCodec {
     private static final Logger LOG = LoggerFactory.getLogger(InstanceIdentifierCodec.class);
 
     private final BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer;
@@ -34,7 +35,7 @@ public class InstanceIdentifierCodec extends AbstractModuleStringInstanceIdentif
     @SuppressFBWarnings(value = "MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR", justification = "Non-final for mocking")
     public InstanceIdentifierCodec(final DOMSchemaService schemaService,
             final BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer) {
-        schemaService.registerSchemaContextListener(this);
+        schemaService.registerSchemaContextListener(this::onModelContextUpdated);
         this.bindingNormalizedNodeSerializer = bindingNormalizedNodeSerializer;
     }
 
@@ -44,8 +45,8 @@ public class InstanceIdentifierCodec extends AbstractModuleStringInstanceIdentif
     }
 
     @Override
-    protected Module moduleForPrefix(final String prefix) {
-        return context.findModules(prefix).stream().findFirst().orElse(null);
+    protected QNameModule moduleForPrefix(final String prefix) {
+        return context.findModules(prefix).stream().findFirst().map(Module::getQNameModule).orElse(null);
     }
 
     @Override
@@ -54,7 +55,12 @@ public class InstanceIdentifierCodec extends AbstractModuleStringInstanceIdentif
     }
 
     @Override
-    public void onModelContextUpdated(final EffectiveModelContext schemaContext) {
+    protected Object deserializeKeyValue(final DataSchemaNode schemaNode, final LeafrefResolver resolver,
+            final String value) {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    private void onModelContextUpdated(final EffectiveModelContext schemaContext) {
         this.context = schemaContext;
         this.dataSchemaContextTree = DataSchemaContextTree.from(schemaContext);
     }
index fa4cceafb46e64f2cd5ae319f5dfa524033c56b8..b0c5e0dc24312d1a75ed6ff6742c9751f0c01a8c 100644 (file)
@@ -25,7 +25,6 @@ import java.util.concurrent.ExecutionException;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.eos.binding.api.Entity;
-import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipCandidateRegistration;
 import org.opendaylight.ovsdb.lib.LockAquisitionCallback;
 import org.opendaylight.ovsdb.lib.LockStolenCallback;
 import org.opendaylight.ovsdb.lib.MonitorCallBack;
@@ -66,6 +65,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.re
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -89,7 +89,7 @@ public class OvsdbConnectionInstance {
     private InstanceIdentifier<Node> instanceIdentifier;
     private volatile boolean hasDeviceOwnership = false;
     private Entity connectedEntity;
-    private EntityOwnershipCandidateRegistration deviceOwnershipCandidateRegistration;
+    private Registration deviceOwnershipCandidateRegistration;
     private OvsdbNodeAugmentation initialCreateData = null;
     private final Map<UUID, InstanceIdentifier<Node>> ports = new ConcurrentHashMap<>();
     private final Map<String, InstanceIdentifier<Node>> portInterfaces = new ConcurrentHashMap<>();
@@ -405,8 +405,7 @@ public class OvsdbConnectionInstance {
         }
     }
 
-    public void setDeviceOwnershipCandidateRegistration(
-            @NonNull final EntityOwnershipCandidateRegistration registration) {
+    public void setDeviceOwnershipCandidateRegistration(final @NonNull Registration registration) {
         deviceOwnershipCandidateRegistration = registration;
     }
 
index 0e700be34e4ece784e974f2a48386a4ba9d0ecea..6a0a8a54ed128ffe7e7599b13d71d15699452ee9 100644 (file)
@@ -31,13 +31,11 @@ import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.ReadTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.eos.binding.api.Entity;
-import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipCandidateRegistration;
-import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipChange;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListener;
-import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListenerRegistration;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService;
 import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException;
 import org.opendaylight.mdsal.eos.common.api.EntityOwnershipState;
+import org.opendaylight.mdsal.eos.common.api.EntityOwnershipStateChange;
 import org.opendaylight.ovsdb.lib.OvsdbClient;
 import org.opendaylight.ovsdb.lib.OvsdbConnection;
 import org.opendaylight.ovsdb.lib.OvsdbConnectionListener;
@@ -60,6 +58,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.re
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagedNodeEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagedNodeEntryKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -424,16 +423,17 @@ public class OvsdbConnectionManager implements OvsdbConnectionListener, AutoClos
         reconciliationManager.cancelTerminationPointReconciliation();
     }
 
-    private void handleOwnershipChanged(final EntityOwnershipChange ownershipChange) {
-        OvsdbConnectionInstance ovsdbConnectionInstance = getConnectionInstanceFromEntity(ownershipChange.getEntity());
-        LOG.debug("Ovsdb handleOwnershipChanged: {} event received for device {}",
-                ownershipChange, ovsdbConnectionInstance != null ? ovsdbConnectionInstance.getConnectionInfo()
-                        : "that's currently NOT registered by *this* southbound plugin instance");
+    @VisibleForTesting
+    void handleOwnershipChanged(final Entity entity, final EntityOwnershipStateChange change) {
+        OvsdbConnectionInstance ovsdbConnectionInstance = getConnectionInstanceFromEntity(entity);
+        LOG.debug("Ovsdb handleOwnershipChanged: {} event received for device {}", change,
+            ovsdbConnectionInstance != null ? ovsdbConnectionInstance.getConnectionInfo()
+                : "that's currently NOT registered by *this* southbound plugin instance");
 
         if (ovsdbConnectionInstance == null) {
-            if (ownershipChange.getState().isOwner()) {
+            if (change.isOwner()) {
                 LOG.warn("Ovsdb handleOwnershipChanged: *this* instance is elected as an owner of the device {} but it "
-                        + "is NOT registered for ownership", ownershipChange.getEntity());
+                        + "is NOT registered for ownership", entity);
             } else {
                 // EntityOwnershipService sends notification to all the nodes, irrespective of whether
                 // that instance registered for the device ownership or not. It is to make sure that
@@ -441,21 +441,21 @@ public class OvsdbConnectionManager implements OvsdbConnectionListener, AutoClos
                 // running instance can clear up the operational data store even though it was not
                 // connected to the device.
                 LOG.debug("Ovsdb handleOwnershipChanged: No connection instance found for {}",
-                    ownershipChange.getEntity());
+                    entity);
             }
 
             // If entity has no owner, clean up the operational data store (it's possible because owner controller
             // might went down abruptly and didn't get a chance to clean up the operational data store.
-            if (!ownershipChange.getState().hasOwner()) {
-                LOG.info("Ovsdb {} has no owner, cleaning up the operational data store", ownershipChange.getEntity());
-                cleanEntityOperationalData(ownershipChange.getEntity());
+            if (!change.hasOwner()) {
+                LOG.info("Ovsdb {} has no owner, cleaning up the operational data store", entity);
+                cleanEntityOperationalData(entity);
             }
             return;
         }
         //Connection detail need to be cached, irrespective of ownership result.
         putConnectionInstance(ovsdbConnectionInstance.getMDConnectionInfo(),ovsdbConnectionInstance);
 
-        if (ownershipChange.getState().isOwner() == ovsdbConnectionInstance.getHasDeviceOwnership()) {
+        if (change.isOwner() == ovsdbConnectionInstance.getHasDeviceOwnership()) {
             LOG.info("Ovsdb handleOwnershipChanged: no change in ownership for {}. Ownership status is : {}",
                     ovsdbConnectionInstance.getConnectionInfo(), ovsdbConnectionInstance.getHasDeviceOwnership()
                             ? OwnershipStates.OWNER.getState()
@@ -463,9 +463,9 @@ public class OvsdbConnectionManager implements OvsdbConnectionListener, AutoClos
             return;
         }
 
-        ovsdbConnectionInstance.setHasDeviceOwnership(ownershipChange.getState().isOwner());
+        ovsdbConnectionInstance.setHasDeviceOwnership(change.isOwner());
         // You were not an owner, but now you are
-        if (ownershipChange.getState().isOwner()) {
+        if (change.isOwner()) {
             LOG.info("Ovsdb handleOwnershipChanged: *this* southbound plugin instance is an OWNER of the device {}",
                     ovsdbConnectionInstance.getConnectionInfo());
 
@@ -586,8 +586,7 @@ public class OvsdbConnectionManager implements OvsdbConnectionListener, AutoClos
         entityConnectionMap.put(candidateEntity, ovsdbConnectionInstance);
         ovsdbConnectionInstance.setConnectedEntity(candidateEntity);
         try {
-            EntityOwnershipCandidateRegistration registration =
-                    entityOwnershipService.registerCandidate(candidateEntity);
+            Registration registration = entityOwnershipService.registerCandidate(candidateEntity);
             ovsdbConnectionInstance.setDeviceOwnershipCandidateRegistration(registration);
             LOG.info("OVSDB entity {} is registered for ownership.", candidateEntity);
 
@@ -595,8 +594,7 @@ public class OvsdbConnectionManager implements OvsdbConnectionListener, AutoClos
             LOG.warn("OVSDB entity {} was already registered for ownership", candidateEntity, e);
         }
         //If entity already has owner, it won't get notification from EntityOwnershipService
-        java.util.Optional<EntityOwnershipState> ownershipStateOpt =
-                entityOwnershipService.getOwnershipState(candidateEntity);
+        Optional<EntityOwnershipState> ownershipStateOpt = entityOwnershipService.getOwnershipState(candidateEntity);
         if (ownershipStateOpt.isPresent()) {
             EntityOwnershipState ownershipState = ownershipStateOpt.orElseThrow();
             if (ownershipState == EntityOwnershipState.OWNED_BY_OTHER) {
@@ -669,7 +667,7 @@ public class OvsdbConnectionManager implements OvsdbConnectionListener, AutoClos
 
     private static final class OvsdbDeviceEntityOwnershipListener implements EntityOwnershipListener {
         private final OvsdbConnectionManager cm;
-        private final EntityOwnershipListenerRegistration listenerRegistration;
+        private final Registration listenerRegistration;
 
         OvsdbDeviceEntityOwnershipListener(final OvsdbConnectionManager cm,
                 final EntityOwnershipService entityOwnershipService) {
@@ -682,8 +680,9 @@ public class OvsdbConnectionManager implements OvsdbConnectionListener, AutoClos
         }
 
         @Override
-        public void ownershipChanged(final EntityOwnershipChange ownershipChange) {
-            cm.handleOwnershipChanged(ownershipChange);
+        public void ownershipChanged(final Entity entity, final EntityOwnershipStateChange change,
+                final boolean inJeopardy) {
+            cm.handleOwnershipChanged(entity, change);
         }
     }
 
index bfcc2bb495070967670c273d27db72b134141c3a..d25e27e9fe4720f76ea4e4a1920df73067006f35 100644 (file)
@@ -5,7 +5,6 @@
  * 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.ovsdb.southbound;
 
 import java.net.ConnectException;
@@ -13,10 +12,10 @@ import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.DataObjectModification;
 import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
@@ -34,7 +33,7 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -42,10 +41,10 @@ import org.slf4j.LoggerFactory;
 /**
  * Data-tree change listener for OVSDB.
  */
-public final class OvsdbDataTreeChangeListener implements ClusteredDataTreeChangeListener<Node>, AutoCloseable {
+public final class OvsdbDataTreeChangeListener implements DataTreeChangeListener<Node>, AutoCloseable {
 
     /** Our registration. */
-    private final ListenerRegistration<DataTreeChangeListener<Node>> registration;
+    private final Registration registration;
 
     /** The connection manager. */
     private final OvsdbConnectionManager cm;
@@ -65,8 +64,8 @@ public final class OvsdbDataTreeChangeListener implements ClusteredDataTreeChang
      * @param db The data broker.
      * @param cm The connection manager.
      */
-    OvsdbDataTreeChangeListener(DataBroker db, OvsdbConnectionManager cm,
-            InstanceIdentifierCodec instanceIdentifierCodec) {
+    OvsdbDataTreeChangeListener(final DataBroker db, final OvsdbConnectionManager cm,
+            final InstanceIdentifierCodec instanceIdentifierCodec) {
         this.cm = cm;
         this.db = db;
         this.instanceIdentifierCodec = instanceIdentifierCodec;
@@ -74,9 +73,8 @@ public final class OvsdbDataTreeChangeListener implements ClusteredDataTreeChang
                 .create(NetworkTopology.class)
                 .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
                 .child(Node.class);
-        DataTreeIdentifier<Node> dataTreeIdentifier =
-                DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, path);
-        registration = db.registerDataTreeChangeListener(dataTreeIdentifier, this);
+        DataTreeIdentifier<Node> dataTreeIdentifier = DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, path);
+        registration = db.registerTreeChangeListener(dataTreeIdentifier, this);
         LOG.info("OVSDB topology listener has been registered.");
     }
 
@@ -87,7 +85,7 @@ public final class OvsdbDataTreeChangeListener implements ClusteredDataTreeChang
     }
 
     @Override
-    public void onDataTreeChanged(@NonNull Collection<DataTreeModification<Node>> changes) {
+    public void onDataTreeChanged(final List<DataTreeModification<Node>> changes) {
         LOG.trace("onDataTreeChanged: {}", changes);
 
         // Connect first if necessary
@@ -105,14 +103,14 @@ public final class OvsdbDataTreeChangeListener implements ClusteredDataTreeChang
         LOG.trace("onDataTreeChanged: exit");
     }
 
-    private void connect(@NonNull Collection<DataTreeModification<Node>> changes) {
+    private void connect(final @NonNull List<DataTreeModification<Node>> changes) {
         for (DataTreeModification<Node> change : changes) {
-            if (change.getRootNode().getModificationType() == DataObjectModification.ModificationType.WRITE || change
-                    .getRootNode().getModificationType() == DataObjectModification.ModificationType.SUBTREE_MODIFIED) {
+            if (change.getRootNode().modificationType() == DataObjectModification.ModificationType.WRITE || change
+                    .getRootNode().modificationType() == DataObjectModification.ModificationType.SUBTREE_MODIFIED) {
                 DataObjectModification<OvsdbNodeAugmentation> ovsdbNodeModification =
                         change.getRootNode().getModifiedAugmentation(OvsdbNodeAugmentation.class);
-                if (ovsdbNodeModification != null && ovsdbNodeModification.getDataBefore() == null) {
-                    OvsdbNodeAugmentation ovsdbNode = ovsdbNodeModification.getDataAfter();
+                if (ovsdbNodeModification != null && ovsdbNodeModification.dataBefore() == null) {
+                    OvsdbNodeAugmentation ovsdbNode = ovsdbNodeModification.dataAfter();
                     if (ovsdbNode != null) {
                         ConnectionInfo key = ovsdbNode.getConnectionInfo();
                         if (key != null) {
@@ -122,7 +120,7 @@ public final class OvsdbDataTreeChangeListener implements ClusteredDataTreeChang
                                         + "connections to same device, hence dropping the request {}", key, ovsdbNode);
                             } else {
                                 try {
-                                    cm.connect(change.getRootPath().getRootIdentifier(), ovsdbNode);
+                                    cm.connect(change.getRootPath().path(), ovsdbNode);
                                     LOG.info("OVSDB node has been connected: {}",ovsdbNode);
                                 } catch (UnknownHostException | ConnectException e) {
                                     LOG.warn("Failed to connect to ovsdbNode", e);
@@ -135,13 +133,13 @@ public final class OvsdbDataTreeChangeListener implements ClusteredDataTreeChang
         }
     }
 
-    private void disconnect(@NonNull Collection<DataTreeModification<Node>> changes) {
+    private void disconnect(final @NonNull List<DataTreeModification<Node>> changes) {
         for (DataTreeModification<Node> change : changes) {
-            if (change.getRootNode().getModificationType() == DataObjectModification.ModificationType.DELETE) {
+            if (change.getRootNode().modificationType() == DataObjectModification.ModificationType.DELETE) {
                 DataObjectModification<OvsdbNodeAugmentation> ovsdbNodeModification =
                         change.getRootNode().getModifiedAugmentation(OvsdbNodeAugmentation.class);
                 if (ovsdbNodeModification != null) {
-                    OvsdbNodeAugmentation ovsdbNode = ovsdbNodeModification.getDataBefore();
+                    OvsdbNodeAugmentation ovsdbNode = ovsdbNodeModification.dataBefore();
                     if (ovsdbNode != null) {
                         ConnectionInfo key = ovsdbNode.getConnectionInfo();
                         InstanceIdentifier<Node> iid = cm.getInstanceIdentifier(key);
@@ -158,19 +156,19 @@ public final class OvsdbDataTreeChangeListener implements ClusteredDataTreeChang
                 }
             }
 
-            if (change.getRootNode().getModificationType() == DataObjectModification.ModificationType.WRITE) {
+            if (change.getRootNode().modificationType() == DataObjectModification.ModificationType.WRITE) {
                 DataObjectModification<OvsdbNodeAugmentation> ovsdbNodeModification =
                         change.getRootNode().getModifiedAugmentation(OvsdbNodeAugmentation.class);
                 if (ovsdbNodeModification != null) {
                     DataObjectModification<ConnectionInfo> connectionInfoDOM =
                             ovsdbNodeModification.getModifiedChildContainer(ConnectionInfo.class);
                     if (connectionInfoDOM != null) {
-                        if (connectionInfoDOM.getModificationType() == DataObjectModification.ModificationType.DELETE) {
-                            ConnectionInfo key = connectionInfoDOM.getDataBefore();
+                        if (connectionInfoDOM.modificationType() == DataObjectModification.ModificationType.DELETE) {
+                            ConnectionInfo key = connectionInfoDOM.dataBefore();
                             if (key != null) {
                                 InstanceIdentifier<Node> iid = cm.getInstanceIdentifier(key);
                                 try {
-                                    OvsdbNodeAugmentation ovsdbNode = ovsdbNodeModification.getDataBefore();
+                                    OvsdbNodeAugmentation ovsdbNode = ovsdbNodeModification.dataBefore();
                                     cm.disconnect(ovsdbNode);
                                     LOG.warn("OVSDB node {} has been disconnected, because connection-info related to "
                                             + "the node is removed by user, but node still exist.", ovsdbNode);
@@ -187,17 +185,17 @@ public final class OvsdbDataTreeChangeListener implements ClusteredDataTreeChang
         }
     }
 
-    private void updateConnections(@NonNull Collection<DataTreeModification<Node>> changes) {
+    private void updateConnections(final @NonNull List<DataTreeModification<Node>> changes) {
         for (DataTreeModification<Node> change : changes) {
-            switch (change.getRootNode().getModificationType()) {
+            switch (change.getRootNode().modificationType()) {
                 case SUBTREE_MODIFIED:
                 case WRITE:
                     DataObjectModification<OvsdbNodeAugmentation> ovsdbNodeModification =
                         change.getRootNode().getModifiedAugmentation(OvsdbNodeAugmentation.class);
                     if (ovsdbNodeModification != null) {
-                        final OvsdbNodeAugmentation dataBefore = ovsdbNodeModification.getDataBefore();
+                        final OvsdbNodeAugmentation dataBefore = ovsdbNodeModification.dataBefore();
                         if (dataBefore != null) {
-                            OvsdbNodeAugmentation dataAfter = ovsdbNodeModification.getDataAfter();
+                            OvsdbNodeAugmentation dataAfter = ovsdbNodeModification.dataAfter();
                             if (dataAfter != null) {
                                 ConnectionInfo connectionInfo = dataAfter.getConnectionInfo();
                                 if (connectionInfo != null) {
@@ -206,7 +204,7 @@ public final class OvsdbDataTreeChangeListener implements ClusteredDataTreeChang
                                         if (dataBefore != null) {
                                             try {
                                                 cm.disconnect(dataBefore);
-                                                cm.connect(change.getRootPath().getRootIdentifier(), dataAfter);
+                                                cm.connect(change.getRootPath().path(), dataAfter);
                                             } catch (UnknownHostException | ConnectException e) {
                                                 LOG.warn("Error disconnecting from or connecting to ovsdbNode", e);
                                             }
@@ -224,7 +222,7 @@ public final class OvsdbDataTreeChangeListener implements ClusteredDataTreeChang
         }
     }
 
-    private void updateData(@NonNull Collection<DataTreeModification<Node>> changes) {
+    private void updateData(final @NonNull List<DataTreeModification<Node>> changes) {
         for (Entry<OvsdbConnectionInstance, Collection<DataTreeModification<Node>>> connectionInstanceEntry :
                 changesPerConnectionInstance(changes).entrySet()) {
             OvsdbConnectionInstance connectionInstance = connectionInstanceEntry.getKey();
@@ -235,12 +233,12 @@ public final class OvsdbDataTreeChangeListener implements ClusteredDataTreeChang
     }
 
     private Map<OvsdbConnectionInstance, Collection<DataTreeModification<Node>>> changesPerConnectionInstance(
-            @NonNull Collection<DataTreeModification<Node>> changes) {
+            final @NonNull List<DataTreeModification<Node>> changes) {
         Map<OvsdbConnectionInstance, Collection<DataTreeModification<Node>>> result = new HashMap<>();
         for (DataTreeModification<Node> change : changes) {
             OvsdbConnectionInstance client = null;
-            Node dataAfter = change.getRootNode().getDataAfter();
-            Node node =  dataAfter != null ? dataAfter : change.getRootNode().getDataBefore();
+            Node dataAfter = change.getRootNode().dataAfter();
+            Node node =  dataAfter != null ? dataAfter : change.getRootNode().dataBefore();
             if (node != null) {
                 OvsdbNodeAugmentation ovsdbNode = node.augmentation(OvsdbNodeAugmentation.class);
                 if (ovsdbNode != null) {
@@ -261,7 +259,7 @@ public final class OvsdbDataTreeChangeListener implements ClusteredDataTreeChang
 
                 if (client == null) {
                     //Try getting from change root identifier
-                    client = cm.getConnectionInstance(change.getRootPath().getRootIdentifier());
+                    client = cm.getConnectionInstance(change.getRootPath().path());
                 }
             } else {
                 LOG.warn("Following change don't have after/before data {}", change);
index 11433b15db7347e5a1004b11a004a641fde70fe9..4ebebaddb67fb55f721b5ef05e088dc53600f903 100644 (file)
@@ -7,15 +7,15 @@
  */
 package org.opendaylight.ovsdb.southbound;
 
-import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
-import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.DataObjectModification;
+import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
@@ -25,17 +25,17 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public final class OvsdbOperGlobalListener implements ClusteredDataTreeChangeListener<Node>, AutoCloseable {
+public final class OvsdbOperGlobalListener implements DataTreeChangeListener<Node>, AutoCloseable {
     public static final ConcurrentMap<InstanceIdentifier<Node>, Node> OPER_NODE_CACHE = new ConcurrentHashMap<>();
 
     private static final Logger LOG = LoggerFactory.getLogger(OvsdbOperGlobalListener.class);
 
-    private ListenerRegistration<OvsdbOperGlobalListener> registration;
+    private Registration registration;
     private final DataBroker db;
     private final OvsdbConnectionManager ovsdbConnectionManager;
     private final TransactionInvoker txInvoker;
@@ -50,9 +50,11 @@ public final class OvsdbOperGlobalListener implements ClusteredDataTreeChangeLis
     }
 
     public void registerListener() {
-        DataTreeIdentifier<Node> treeId =
-            DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, getWildcardPath());
-        registration = db.registerDataTreeChangeListener(treeId, this);
+        registration = db.registerTreeChangeListener(DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL,
+            InstanceIdentifier.builder(NetworkTopology.class)
+                .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+                .child(Node.class)
+                .build()), this);
     }
 
     @Override
@@ -65,10 +67,10 @@ public final class OvsdbOperGlobalListener implements ClusteredDataTreeChangeLis
 
     @Override
     @SuppressWarnings("checkstyle:IllegalCatch")
-    public void onDataTreeChanged(final Collection<DataTreeModification<Node>> changes) {
+    public void onDataTreeChanged(final List<DataTreeModification<Node>> changes) {
         changes.forEach(change -> {
             try {
-                InstanceIdentifier<Node> key = change.getRootPath().getRootIdentifier();
+                InstanceIdentifier<Node> key = change.getRootPath().path();
                 DataObjectModification<Node> mod = change.getRootNode();
                 Node addNode = getCreated(mod);
                 if (addNode != null) {
@@ -122,29 +124,29 @@ public final class OvsdbOperGlobalListener implements ClusteredDataTreeChangeLis
     }
 
     private static Node getCreated(final DataObjectModification<Node> mod) {
-        if (mod.getModificationType() == DataObjectModification.ModificationType.WRITE
-                && mod.getDataBefore() == null) {
-            return mod.getDataAfter();
+        if (mod.modificationType() == DataObjectModification.ModificationType.WRITE
+                && mod.dataBefore() == null) {
+            return mod.dataAfter();
         }
         return null;
     }
 
     private static Node getRemoved(final DataObjectModification<Node> mod) {
-        if (mod.getModificationType() == DataObjectModification.ModificationType.DELETE) {
-            return mod.getDataBefore();
+        if (mod.modificationType() == DataObjectModification.ModificationType.DELETE) {
+            return mod.dataBefore();
         }
         return null;
     }
 
     private static Node getUpdated(final DataObjectModification<Node> mod) {
         Node node = null;
-        switch (mod.getModificationType()) {
+        switch (mod.modificationType()) {
             case SUBTREE_MODIFIED:
-                node = mod.getDataAfter();
+                node = mod.dataAfter();
                 break;
             case WRITE:
-                if (mod.getDataBefore() !=  null) {
-                    node = mod.getDataAfter();
+                if (mod.dataBefore() !=  null) {
+                    node = mod.dataAfter();
                 }
                 break;
             default:
@@ -152,10 +154,4 @@ public final class OvsdbOperGlobalListener implements ClusteredDataTreeChangeLis
         }
         return node;
     }
-
-    private static InstanceIdentifier<Node> getWildcardPath() {
-        return InstanceIdentifier.create(NetworkTopology.class)
-                .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
-                .child(Node.class);
-    }
 }
index 24148cd41b94e307945bbfa68a13ab12fa963987..0e2c978c19fcfca0a56b2678c76b06af7898e214 100644 (file)
@@ -165,14 +165,12 @@ public final class SouthboundMapper {
     }
 
     public static InstanceIdentifier<Topology> createTopologyInstanceIdentifier() {
-        return InstanceIdentifier
-                .create(NetworkTopology.class)
-                .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID));
+        return InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID));
     }
 
     public static InstanceIdentifier<Node> createInstanceIdentifier(final NodeId nodeId) {
-        return createTopologyInstanceIdentifier()
-                .child(Node.class,new NodeKey(nodeId));
+        return createTopologyInstanceIdentifier().child(Node.class, new NodeKey(nodeId));
     }
 
     @SuppressWarnings("unchecked")
index b4f2c815ad56e5e91ff3b5d1e91e86ed7daa9860..28b0185e54c051698164b0b12a62d37e2e42dee0 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.ovsdb.southbound;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.util.concurrent.FluentFuture;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import java.util.Collection;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -21,8 +20,8 @@ import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.infrautils.diagstatus.DiagStatusService;
 import org.opendaylight.infrautils.diagstatus.ServiceState;
 import org.opendaylight.infrautils.ready.SystemReadyMonitor;
-import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.binding.api.ReadWriteTransaction;
@@ -30,12 +29,10 @@ import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSeriali
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
 import org.opendaylight.mdsal.eos.binding.api.Entity;
-import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipCandidateRegistration;
-import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipChange;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListener;
-import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListenerRegistration;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService;
 import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException;
+import org.opendaylight.mdsal.eos.common.api.EntityOwnershipStateChange;
 import org.opendaylight.ovsdb.lib.OvsdbConnection;
 import org.opendaylight.ovsdb.southbound.transactions.md.TransactionInvoker;
 import org.opendaylight.ovsdb.southbound.transactions.md.TransactionInvokerImpl;
@@ -43,7 +40,7 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyBuilder;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
@@ -59,7 +56,7 @@ import org.slf4j.LoggerFactory;
 @Component(service = { }, configurationPid = "org.opendaylight.ovsdb.southbound")
 @Designate(ocd = SouthboundProvider.Configuration.class)
 // non-final for testing
-public class SouthboundProvider implements ClusteredDataTreeChangeListener<Topology>, AutoCloseable {
+public class SouthboundProvider implements DataTreeChangeListener<Topology>, AutoCloseable {
     @ObjectClassDefinition
     public @interface Configuration {
         @AttributeDefinition
@@ -111,8 +108,8 @@ public class SouthboundProvider implements ClusteredDataTreeChangeListener<Topol
     private final AtomicBoolean registered = new AtomicBoolean(false);
     private final OvsdbDiagStatusProvider ovsdbStatusProvider;
 
-    private EntityOwnershipCandidateRegistration registration;
-    private ListenerRegistration<SouthboundProvider> operTopologyRegistration;
+    private Registration registration;
+    private Registration operTopologyRegistration;
 
     @Inject
     public SouthboundProvider(final DataBroker dataBroker,
@@ -196,11 +193,10 @@ public class SouthboundProvider implements ClusteredDataTreeChangeListener<Topol
         InstanceIdentifier<Topology> path = InstanceIdentifier
                 .create(NetworkTopology.class)
                 .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID));
-        DataTreeIdentifier<Topology> treeId =
-                DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, path);
+        DataTreeIdentifier<Topology> treeId = DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, path);
 
         LOG.trace("Registering listener for path {}", treeId);
-        operTopologyRegistration = dataBroker.registerDataTreeChangeListener(treeId, this);
+        operTopologyRegistration = dataBroker.registerTreeChangeListener(treeId, this);
         LOG.info("SouthboundProvider Session Initiated");
     }
 
@@ -236,9 +232,8 @@ public class SouthboundProvider implements ClusteredDataTreeChangeListener<Topol
         FluentFuture<Boolean> ovsdbTp = transaction.exists(type, path);
         try {
             if (!ovsdbTp.get().booleanValue()) {
-                TopologyBuilder tpb = new TopologyBuilder();
-                tpb.setTopologyId(SouthboundConstants.OVSDB_TOPOLOGY_ID);
-                transaction.mergeParentStructurePut(type, path, tpb.build());
+                transaction.mergeParentStructurePut(type, path,
+                    new TopologyBuilder().setTopologyId(SouthboundConstants.OVSDB_TOPOLOGY_ID).build());
                 transaction.commit();
             } else {
                 transaction.cancel();
@@ -248,8 +243,8 @@ public class SouthboundProvider implements ClusteredDataTreeChangeListener<Topol
         }
     }
 
-    public void handleOwnershipChange(final EntityOwnershipChange ownershipChange) {
-        if (ownershipChange.getState().isOwner()) {
+    public void handleOwnershipChange(final EntityOwnershipStateChange change) {
+        if (change.isOwner()) {
             LOG.info("*This* instance of OVSDB southbound provider is set as a MASTER instance");
             LOG.info("Initialize OVSDB topology {} in operational and config data store if not already present",
                     SouthboundConstants.OVSDB_TOPOLOGY_ID);
@@ -261,7 +256,7 @@ public class SouthboundProvider implements ClusteredDataTreeChangeListener<Topol
     }
 
     @Override
-    public void onDataTreeChanged(final Collection<DataTreeModification<Topology>> collection) {
+    public void onDataTreeChanged(final List<DataTreeModification<Topology>> collection) {
         if (!registered.getAndSet(true)) {
             LOG.info("Starting the ovsdb port");
             ovsdbConnection.registerConnectionListener(cm);
@@ -281,7 +276,7 @@ public class SouthboundProvider implements ClusteredDataTreeChangeListener<Topol
 
     private static final class SouthboundPluginInstanceEntityOwnershipListener implements EntityOwnershipListener {
         private final SouthboundProvider sp;
-        private final EntityOwnershipListenerRegistration listenerRegistration;
+        private final Registration listenerRegistration;
 
         SouthboundPluginInstanceEntityOwnershipListener(final SouthboundProvider sp,
                 final EntityOwnershipService entityOwnershipService) {
@@ -294,8 +289,9 @@ public class SouthboundProvider implements ClusteredDataTreeChangeListener<Topol
         }
 
         @Override
-        public void ownershipChanged(final EntityOwnershipChange ownershipChange) {
-            sp.handleOwnershipChange(ownershipChange);
+        public void ownershipChanged(final Entity entity, final EntityOwnershipStateChange change,
+                final boolean inJeopardy) {
+            sp.handleOwnershipChange(change);
         }
     }
 
index 0e656ffc4b24a794c97b736f310a9c88aecc2ffb..adbb9b4dbc6896f94dc7095a6cd3ea09b360b118 100644 (file)
@@ -46,6 +46,7 @@ import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.Key;
 import org.opendaylight.yangtools.yang.binding.KeyAware;
+import org.opendaylight.yangtools.yang.binding.KeyStep;
 
 // This class needs to be mocked
 @SuppressWarnings("checkstyle:FinalClass")
@@ -55,20 +56,20 @@ public class TransactUtils {
     }
 
     private static <T extends DataObject> Predicate<DataObjectModification<T>> hasDataBefore() {
-        return input -> input != null && input.getDataBefore() != null;
+        return input -> input != null && input.dataBefore() != null;
     }
 
     private static <T extends DataObject> Predicate<DataObjectModification<T>> hasDataBeforeAndDataAfter() {
-        return input -> input != null && input.getDataBefore() != null && input.getDataAfter() != null;
+        return input -> input != null && input.dataBefore() != null && input.dataAfter() != null;
     }
 
     private static <T extends DataObject> Predicate<DataObjectModification<T>> hasNoDataBefore() {
-        return input -> input != null && input.getDataBefore() == null;
+        return input -> input != null && input.dataBefore() == null;
     }
 
     private static <T extends DataObject> Predicate<DataObjectModification<T>> hasDataAfterAndMatchesFilter(
             final Predicate<DataObjectModification<T>> filter) {
-        return input -> input != null && input.getDataAfter() != null && filter.test(input);
+        return input -> input != null && input.dataAfter() != null && filter.test(input);
     }
 
     private static <T extends DataObject> Predicate<DataObjectModification<T>> matchesEverything() {
@@ -76,18 +77,16 @@ public class TransactUtils {
     }
 
     private static <T extends DataObject> Predicate<DataObjectModification<T>> modificationIsDeletion() {
-        return input -> input != null && input.getModificationType() == DataObjectModification
-                .ModificationType.DELETE;
+        return input -> input != null && input.modificationType() == DataObjectModification.ModificationType.DELETE;
     }
 
     private static <T extends DataObject> Predicate<DataObjectModification<T>>
         modificationIsDeletionAndHasDataBefore() {
-        return input -> input != null && input.getModificationType() == DataObjectModification
-                .ModificationType.DELETE && input.getDataBefore() != null;
+        return input -> input != null && input.modificationType() == DataObjectModification.ModificationType.DELETE
+            && input.dataBefore() != null;
     }
 
-    public static Map<InstanceIdentifier<Node>,Node> extractNode(
-            Map<InstanceIdentifier<?>, DataObject> changes) {
+    public static Map<InstanceIdentifier<Node>,Node> extractNode(final Map<InstanceIdentifier<?>, DataObject> changes) {
         Map<InstanceIdentifier<Node>,Node> result
             = new HashMap<>();
         if (changes != null) {
@@ -108,7 +107,7 @@ public class TransactUtils {
     }
 
     public static <T extends DataObject> Map<InstanceIdentifier<T>,T> extractCreated(
-            DataChangeEvent changes, Class<T> klazz) {
+            final DataChangeEvent changes, final Class<T> klazz) {
         return extract(changes.getCreatedData(),klazz);
     }
 
@@ -122,12 +121,12 @@ public class TransactUtils {
      * @return The created instances, mapped by instance identifier.
      */
     public static <T extends DataObject, U extends DataObject> Map<InstanceIdentifier<T>, T> extractCreated(
-            Collection<DataTreeModification<U>> changes, Class<T> clazz) {
+            final Collection<DataTreeModification<U>> changes, final Class<T> clazz) {
         return extractCreatedOrUpdated(changes, clazz, hasNoDataBefore());
     }
 
     public static <T extends DataObject> Map<InstanceIdentifier<T>,T> extractUpdated(
-            DataChangeEvent changes, Class<T> klazz) {
+            final DataChangeEvent changes, final Class<T> klazz) {
         return extract(changes.getUpdatedData(),klazz);
     }
 
@@ -141,7 +140,7 @@ public class TransactUtils {
      * @return The updated instances, mapped by instance identifier.
      */
     public static <T extends DataObject, U extends DataObject> Map<InstanceIdentifier<T>, T> extractUpdated(
-            Collection<DataTreeModification<U>> changes, Class<T> clazz) {
+            final Collection<DataTreeModification<U>> changes, final Class<T> clazz) {
         return extractCreatedOrUpdated(changes, clazz, hasDataBeforeAndDataAfter());
     }
 
@@ -157,18 +156,18 @@ public class TransactUtils {
      * @return The created or updated instances which satisfy the filter, mapped by instance identifier.
      */
     public static <T extends DataObject, U extends DataObject> Map<InstanceIdentifier<T>, T> extractCreatedOrUpdated(
-            Collection<DataTreeModification<U>> changes, Class<T> clazz,
-            Predicate<DataObjectModification<T>> filter) {
+            final Collection<DataTreeModification<U>> changes, final Class<T> clazz,
+            final Predicate<DataObjectModification<T>> filter) {
         Map<InstanceIdentifier<T>, T> result = new HashMap<>();
         for (Map.Entry<InstanceIdentifier<T>, DataObjectModification<T>> entry : extractDataObjectModifications(changes,
                 clazz, hasDataAfterAndMatchesFilter(filter)).entrySet()) {
-            result.put(entry.getKey(), entry.getValue().getDataAfter());
+            result.put(entry.getKey(), entry.getValue().dataAfter());
         }
         return result;
     }
 
     public static <T extends DataObject> Map<InstanceIdentifier<T>,T> extractCreatedOrUpdated(
-            DataChangeEvent changes,Class<T> klazz) {
+            final DataChangeEvent changes,final Class<T> klazz) {
         Map<InstanceIdentifier<T>,T> result = extractUpdated(changes,klazz);
         result.putAll(extractCreated(changes,klazz));
         return result;
@@ -184,12 +183,12 @@ public class TransactUtils {
      * @return The created or updated instances, mapped by instance identifier.
      */
     public static <T extends DataObject, U extends DataObject> Map<InstanceIdentifier<T>, T> extractCreatedOrUpdated(
-            Collection<DataTreeModification<U>> changes, Class<T> clazz) {
+            final Collection<DataTreeModification<U>> changes, final Class<T> clazz) {
         return extractCreatedOrUpdated(changes, clazz, matchesEverything());
     }
 
     public static <T extends DataObject> Map<InstanceIdentifier<T>, T> extractCreatedOrUpdatedOrRemoved(
-            DataChangeEvent changes, Class<T> klazz) {
+            final DataChangeEvent changes, final Class<T> klazz) {
         Map<InstanceIdentifier<T>,T> result = extractCreatedOrUpdated(changes,klazz);
         result.putAll(extractRemovedObjects(changes, klazz));
         return result;
@@ -208,14 +207,14 @@ public class TransactUtils {
      */
     public static <T extends DataObject, U extends DataObject> Map<InstanceIdentifier<T>, T>
         extractCreatedOrUpdatedOrRemoved(
-            Collection<DataTreeModification<U>> changes, Class<T> clazz) {
+            final Collection<DataTreeModification<U>> changes, final Class<T> clazz) {
         Map<InstanceIdentifier<T>, T> result = extractCreatedOrUpdated(changes, clazz);
         result.putAll(extractRemovedObjects(changes, clazz));
         return result;
     }
 
     public static <T extends DataObject> Map<InstanceIdentifier<T>,T> extractOriginal(
-            DataChangeEvent changes, Class<T> klazz) {
+            final DataChangeEvent changes, final Class<T> klazz) {
         return extract(changes.getOriginalData(),klazz);
     }
 
@@ -229,17 +228,17 @@ public class TransactUtils {
      * @return The original instances, mapped by instance identifier.
      */
     public static <T extends DataObject, U extends DataObject> Map<InstanceIdentifier<T>, T> extractOriginal(
-            Collection<DataTreeModification<U>> changes, Class<T> clazz) {
+            final Collection<DataTreeModification<U>> changes, final Class<T> clazz) {
         Map<InstanceIdentifier<T>, T> result = new HashMap<>();
         for (Map.Entry<InstanceIdentifier<T>, DataObjectModification<T>> entry :
                 extractDataObjectModifications(changes, clazz, hasDataBefore()).entrySet()) {
-            result.put(entry.getKey(), entry.getValue().getDataBefore());
+            result.put(entry.getKey(), entry.getValue().dataBefore());
         }
         return result;
     }
 
     public static <T extends DataObject> Set<InstanceIdentifier<T>> extractRemoved(
-            DataChangeEvent changes, Class<T> klazz) {
+            final DataChangeEvent changes, final Class<T> klazz) {
         Set<InstanceIdentifier<T>> result = new HashSet<>();
         if (changes != null && changes.getRemovedPaths() != null) {
             for (InstanceIdentifier<?> iid : changes.getRemovedPaths()) {
@@ -264,7 +263,7 @@ public class TransactUtils {
      * @return The instance identifiers of removed instances.
      */
     public static <T extends DataObject, U extends DataObject> Set<InstanceIdentifier<T>> extractRemoved(
-            Collection<DataTreeModification<U>> changes, Class<T> clazz) {
+            final Collection<DataTreeModification<U>> changes, final Class<T> clazz) {
         return extractDataObjectModifications(changes, clazz, modificationIsDeletion()).keySet();
     }
 
@@ -280,14 +279,14 @@ public class TransactUtils {
      * @return The modifications, mapped by instance identifier.
      */
     private static <T extends DataObject, U extends DataObject> Map<InstanceIdentifier<T>, DataObjectModification<T>>
-        extractDataObjectModifications(Collection<DataTreeModification<U>> changes, Class<T> clazz,
-                                       Predicate<DataObjectModification<T>> filter) {
+        extractDataObjectModifications(final Collection<DataTreeModification<U>> changes, final Class<T> clazz,
+                                       final Predicate<DataObjectModification<T>> filter) {
         List<DataObjectModification<? extends DataObject>> dataObjectModifications = new ArrayList<>();
         List<InstanceIdentifier<? extends DataObject>> paths = new ArrayList<>();
         if (changes != null) {
             for (DataTreeModification<? extends DataObject> change : changes) {
                 dataObjectModifications.add(change.getRootNode());
-                paths.add(change.getRootPath().getRootIdentifier());
+                paths.add(change.getRootPath().path());
             }
         }
         return extractDataObjectModifications(dataObjectModifications, paths, clazz, filter);
@@ -306,9 +305,9 @@ public class TransactUtils {
      */
     private static <T extends DataObject> Map<InstanceIdentifier<T>, DataObjectModification<T>>
         extractDataObjectModifications(
-            Collection<DataObjectModification<? extends DataObject>> changes,
-            Collection<InstanceIdentifier<? extends DataObject>> paths, Class<T> clazz,
-            Predicate<DataObjectModification<T>> filter) {
+            final Collection<DataObjectModification<? extends DataObject>> changes,
+            final Collection<InstanceIdentifier<? extends DataObject>> paths, final Class<T> clazz,
+            final Predicate<DataObjectModification<T>> filter) {
         Map<InstanceIdentifier<T>, DataObjectModification<T>> result = new HashMap<>();
         Queue<DataObjectModification<? extends DataObject>> remainingChanges = new LinkedList<>(changes);
         Queue<InstanceIdentifier<? extends DataObject>> remainingPaths = new LinkedList<>(paths);
@@ -316,7 +315,7 @@ public class TransactUtils {
             DataObjectModification<? extends DataObject> change = remainingChanges.remove();
             InstanceIdentifier<? extends DataObject> path = remainingPaths.remove();
             // Is the change relevant?
-            if (clazz.isAssignableFrom(change.getDataType())) {
+            if (clazz.isAssignableFrom(change.dataType())) {
                 @SuppressWarnings("unchecked")
                 final DataObjectModification<T> dao = (DataObjectModification<T>) change;
                 if (filter.test(dao)) {
@@ -324,7 +323,7 @@ public class TransactUtils {
                 }
             }
             // Add any children to the queue
-            for (DataObjectModification<? extends DataObject> child : change.getModifiedChildren()) {
+            for (DataObjectModification<? extends DataObject> child : change.modifiedChildren()) {
                 remainingChanges.add(child);
                 remainingPaths.add(extendPath(path, child));
             }
@@ -342,19 +341,19 @@ public class TransactUtils {
      */
     private static <N extends KeyAware<K> & ChildOf<? super T>, K extends Key<N>, T extends DataObject>
         InstanceIdentifier<? extends DataObject> extendPath(
-            InstanceIdentifier<T> path,
-            DataObjectModification<?> child) {
+            final InstanceIdentifier<T> path,
+            final DataObjectModification<?> child) {
         @SuppressWarnings("unchecked")
-        final Class<N> item = (Class<N>) child.getDataType();
-        if (child.getIdentifier() instanceof InstanceIdentifier.IdentifiableItem) {
-            return path.child(item, ((InstanceIdentifier.IdentifiableItem<N, K>) child.getIdentifier()).getKey());
+        final Class<N> item = (Class<N>) child.dataType();
+        if (child.step() instanceof KeyStep<?, ?> keyStep) {
+            return path.child(item, (K) keyStep.key());
         }
 
         return path.child(item);
     }
 
     public static <T extends DataObject> Map<InstanceIdentifier<T>, T> extractRemovedObjects(
-            DataChangeEvent changes, Class<T> klazz) {
+            final DataChangeEvent changes, final Class<T> klazz) {
         Set<InstanceIdentifier<T>> iids = extractRemoved(changes, klazz);
         return Maps.filterKeys(extractOriginal(changes, klazz),Predicates.in(iids));
     }
@@ -369,17 +368,17 @@ public class TransactUtils {
      * @return The removed instances, keyed by instance identifier.
      */
     public static <T extends DataObject, U extends DataObject> Map<InstanceIdentifier<T>, T> extractRemovedObjects(
-            Collection<DataTreeModification<U>> changes, Class<T> clazz) {
+            final Collection<DataTreeModification<U>> changes, final Class<T> clazz) {
         Map<InstanceIdentifier<T>, T> result = new HashMap<>();
         for (Map.Entry<InstanceIdentifier<T>, DataObjectModification<T>> entry :
                 extractDataObjectModifications(changes, clazz, modificationIsDeletionAndHasDataBefore()).entrySet()) {
-            result.put(entry.getKey(), entry.getValue().getDataBefore());
+            result.put(entry.getKey(), entry.getValue().dataBefore());
         }
         return result;
     }
 
     public static <T extends DataObject> Map<InstanceIdentifier<T>,T> extract(
-            Map<InstanceIdentifier<?>, DataObject> changes, Class<T> klazz) {
+            final Map<InstanceIdentifier<?>, DataObject> changes, final Class<T> klazz) {
         Map<InstanceIdentifier<T>,T> result = new HashMap<>();
         if (changes != null) {
             for (Entry<InstanceIdentifier<?>, DataObject> created : changes.entrySet()) {
@@ -399,7 +398,7 @@ public class TransactUtils {
         return result;
     }
 
-    public static List<Insert> extractInsert(TransactionBuilder transaction, GenericTableSchema schema) {
+    public static List<Insert> extractInsert(final TransactionBuilder transaction, final GenericTableSchema schema) {
         List<Operation> operations = transaction.getOperations();
         List<Insert> inserts = new ArrayList<>();
         for (Operation operation : operations) {
@@ -418,23 +417,25 @@ public class TransactUtils {
      * @param insert - Insert from which to extract the NamedUuid
      * @return UUID - NamedUUID of the Insert
      */
-    public static UUID extractNamedUuid(Insert insert) {
+    public static UUID extractNamedUuid(final Insert insert) {
         String uuidString = insert.getUuidName() != null
                 ? insert.getUuidName() : SouthboundMapper.getRandomUuid();
         insert.setUuidName(uuidString);
         return new UUID(uuidString);
     }
 
-    public static <T extends TableSchema<T>> void stampInstanceIdentifier(TransactionBuilder transaction,
-            InstanceIdentifier<?> iid, TableSchema<T> tableSchema, ColumnSchema<T, Map<String, String>> columnSchema,
-            InstanceIdentifierCodec instanceIdentifierCodec) {
+    public static <T extends TableSchema<T>> void stampInstanceIdentifier(final TransactionBuilder transaction,
+            final InstanceIdentifier<?> iid, final TableSchema<T> tableSchema,
+            final ColumnSchema<T, Map<String, String>> columnSchema,
+            final InstanceIdentifierCodec instanceIdentifierCodec) {
         transaction.add(
-                stampInstanceIdentifierMutation(transaction, iid, tableSchema, columnSchema, instanceIdentifierCodec));
+            stampInstanceIdentifierMutation(transaction, iid, tableSchema, columnSchema, instanceIdentifierCodec));
     }
 
-    public static <T extends TableSchema<T>> Mutate<T> stampInstanceIdentifierMutation(TransactionBuilder transaction,
-            InstanceIdentifier<?> iid, TableSchema<T> tableSchema, ColumnSchema<T, Map<String, String>> columnSchema,
-            InstanceIdentifierCodec instanceIdentifierCodec) {
+    public static <T extends TableSchema<T>> Mutate<T> stampInstanceIdentifierMutation(
+            final TransactionBuilder transaction, final InstanceIdentifier<?> iid, final TableSchema<T> tableSchema,
+            final ColumnSchema<T, Map<String, String>> columnSchema,
+            final InstanceIdentifierCodec instanceIdentifierCodec) {
         Map<String,String> externalIdsMap = ImmutableMap.of(SouthboundConstants.IID_EXTERNAL_ID_KEY,
                 instanceIdentifierCodec.serialize(iid));
         Mutate<T> mutate = op.mutate(tableSchema)
@@ -470,7 +471,7 @@ public class TransactUtils {
      * @return The hexadecimal representation of the byte array. If bytes is
      *         null, the string "" is returned
      */
-    public static String bytesToHexString(byte[] bytes) {
+    public static String bytesToHexString(final byte[] bytes) {
 
         if (bytes == null) {
             return "";
index c71a16078fb5430b0d8aecf7e5b9c6fb307ab919..14308a2b85c8e38c368d8b572008439b4a0e3cc2 100644 (file)
@@ -14,7 +14,6 @@ import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
 import com.google.common.util.concurrent.UncheckedExecutionException;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -25,9 +24,8 @@ import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.TimeUnit;
-import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
@@ -41,7 +39,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.re
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.util.concurrent.SpecialExecutors;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
@@ -87,7 +85,7 @@ public class ReconciliationManager implements AutoCloseable {
     private LoadingCache<NodeKey, NodeConnectionMetadata> bridgeNodeCache = null;
 
     // Listens for new bridge creations in the operational DS
-    private ListenerRegistration<BridgeCreatedDataTreeChangeListener> bridgeCreatedDataTreeChangeRegistration = null;
+    private Registration bridgeCreatedDataTreeChangeRegistration = null;
 
     private final ReconciliationTaskManager reconTaskManager = new ReconciliationTaskManager();
 
@@ -185,10 +183,9 @@ public class ReconciliationManager implements AutoCloseable {
                     new BridgeCreatedDataTreeChangeListener();
             InstanceIdentifier<Node> path = SouthboundMapper.createTopologyInstanceIdentifier()
                     .child(Node.class);
-            DataTreeIdentifier<Node> dataTreeIdentifier =
-                    DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, path);
+            DataTreeIdentifier<Node> dataTreeIdentifier = DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, path);
 
-            bridgeCreatedDataTreeChangeRegistration = db.registerDataTreeChangeListener(dataTreeIdentifier,
+            bridgeCreatedDataTreeChangeRegistration = db.registerTreeChangeListener(dataTreeIdentifier,
                     bridgeCreatedDataTreeChangeListener);
         }
     }
@@ -212,9 +209,9 @@ public class ReconciliationManager implements AutoCloseable {
      * is triggered and the bridge entry is removed from the cache.
      * Once cache is empty, either being removed explicitly or expired, the the listener de-registered.
      */
-    class BridgeCreatedDataTreeChangeListener implements ClusteredDataTreeChangeListener<Node> {
+    class BridgeCreatedDataTreeChangeListener implements DataTreeChangeListener<Node> {
         @Override
-        public void onDataTreeChanged(@NonNull Collection<DataTreeModification<Node>> changes) {
+        public void onDataTreeChanged(List<DataTreeModification<Node>> changes) {
             bridgeNodeCache.cleanUp();
             if (!bridgeNodeCache.asMap().isEmpty()) {
                 Map<InstanceIdentifier<OvsdbBridgeAugmentation>, OvsdbBridgeAugmentation> nodes =
index 83174cdaf45f92579bab65252da6c249d7e30e37..dcc1f7575eae9e06c938d10810aae8e636595217 100644 (file)
@@ -185,8 +185,8 @@ public class OvsdbControllerUpdateCommand extends AbstractTransactionCommand {
         NodeId nodeId = new NodeId(new Uri(nodeString));
         NodeKey nodeKey = new NodeKey(nodeId);
         InstanceIdentifier<Node> bridgeIid = InstanceIdentifier.builder(NetworkTopology.class)
-                .child(Topology.class,new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
-                .child(Node.class,nodeKey)
+                .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+                .child(Node.class, nodeKey)
                 .build();
 
         return bridgeIid
index 5b6e4c09555ad50ed745c658916180966b4d729c..25b9f1af5cf9dd53149dceb98d268a4cfd96314b 100644 (file)
@@ -49,17 +49,16 @@ public class OvsdbManagersRemovedCommand extends AbstractTransactionCommand {
 
     @Override
     public void execute(ReadWriteTransaction transaction) {
-        for (OpenVSwitch openVSwitch : updatedOpenVSwitchRows.values()) {
-            InstanceIdentifier<Node> ovsdbNodeIid =
-                    SouthboundMapper.createInstanceIdentifier(getOvsdbConnectionInstance().getNodeId());
-            deleteManagers(transaction, managerEntriesToRemove(ovsdbNodeIid,openVSwitch));
+        for (var openVSwitch : updatedOpenVSwitchRows.values()) {
+            deleteManagers(transaction, managerEntriesToRemove(
+                SouthboundMapper.createInstanceIdentifier(getOvsdbConnectionInstance().getNodeId()), openVSwitch));
         }
     }
 
     @VisibleForTesting
     void deleteManagers(ReadWriteTransaction transaction,
             List<InstanceIdentifier<ManagerEntry>> managerEntryIids) {
-        for (InstanceIdentifier<ManagerEntry> managerEntryIid: managerEntryIids) {
+        for (var managerEntryIid : managerEntryIids) {
             transaction.delete(LogicalDatastoreType.OPERATIONAL, managerEntryIid);
         }
     }
@@ -96,7 +95,8 @@ public class OvsdbManagersRemovedCommand extends AbstractTransactionCommand {
         return result;
     }
 
-    private boolean checkIfManagerPresentInUpdatedManagersList(Manager removedManager) {
+    @VisibleForTesting
+    boolean checkIfManagerPresentInUpdatedManagersList(Manager removedManager) {
         for (Map.Entry<UUID, Manager> updatedManager : updatedManagerRows.entrySet()) {
             if (updatedManager.getValue().getTargetColumn().getData()
                     .equals(removedManager.getTargetColumn().getData())) {
@@ -105,5 +105,4 @@ public class OvsdbManagersRemovedCommand extends AbstractTransactionCommand {
         }
         return false;
     }
-
 }
index de49d84f97ce8b5ffd417172ad9e9e6a7d555cf7..10d9d0f3e71002403c9cfd8a3cf12a7746beed46 100644 (file)
@@ -32,12 +32,10 @@ import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.ReadWriteTransaction;
 import org.opendaylight.mdsal.binding.api.Transaction;
 import org.opendaylight.mdsal.binding.api.TransactionChain;
-import org.opendaylight.mdsal.binding.api.TransactionChainListener;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public final class TransactionInvokerImpl implements TransactionInvoker,TransactionChainListener, Runnable,
-        AutoCloseable {
+public final class TransactionInvokerImpl implements TransactionInvoker, Runnable, AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(TransactionInvokerImpl.class);
     private static final int QUEUE_SIZE = 10000;
 
@@ -55,7 +53,7 @@ public final class TransactionInvokerImpl implements TransactionInvoker,Transact
 
     public TransactionInvokerImpl(final DataBroker db) {
         this.db = db;
-        this.chain = db.createTransactionChain(this);
+        chain = db.createTransactionChain();
         ThreadFactory threadFact = new ThreadFactoryBuilder().setNameFormat("transaction-invoker-impl-%d").build();
         executor = Executors.newSingleThreadExecutor(threadFact);
         executor.execute(this);
@@ -64,8 +62,8 @@ public final class TransactionInvokerImpl implements TransactionInvoker,Transact
     @VisibleForTesting
     TransactionInvokerImpl(final DataBroker db, final ExecutorService executor) {
         this.db = db;
-        this.chain = db.createTransactionChain(this);
         this.executor = executor;
+        this.chain = db.createTransactionChain();
     }
 
     @VisibleForTesting
@@ -93,18 +91,6 @@ public final class TransactionInvokerImpl implements TransactionInvoker,Transact
         }
     }
 
-    @Override
-    public void onTransactionChainFailed(final TransactionChain chainArg,
-            final Transaction transaction, final Throwable cause) {
-        LOG.error("Failed to write operational topology", cause);
-        offerFailedTransaction(transaction);
-    }
-
-    @Override
-    public void onTransactionChainSuccessful(final TransactionChain chainArg) {
-        // NO OP
-    }
-
     @Override
     public void run() {
         while (runTask.get()) {
@@ -136,8 +122,9 @@ public final class TransactionInvokerImpl implements TransactionInvoker,Transact
 
                 @Override
                 public void onFailure(final Throwable throwable) {
+                    LOG.error("Failed to write operational topology", throwable);
+                    offerFailedTransaction(transaction);
                     command.onFailure(throwable);
-                    // NOOP - handled by failure of transaction chain
                 }
             }, MoreExecutors.directExecutor());
         } catch (IllegalStateException e) {
@@ -183,7 +170,7 @@ public final class TransactionInvokerImpl implements TransactionInvoker,Transact
     @VisibleForTesting
     synchronized void resetTransactionQueue() {
         chain.close();
-        chain = db.createTransactionChain(this);
+        chain = db.createTransactionChain();
         pendingTransactions.clear();
         failedTransactionQueue.clear();
     }
index 342be38b2fff887a3c98f77434a3c2e96ae08c2d..cb54bc2d185cb0fbd2578c83223810dc77f89a55 100644 (file)
@@ -9,14 +9,14 @@ package org.opendaylight.ovsdb.southbound;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 import static org.powermock.reflect.Whitebox.getField;
 
-import com.google.common.collect.ImmutableSet;
-import java.util.Collections;
+import java.util.List;
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
@@ -27,6 +27,7 @@ import org.mockito.junit.MockitoJUnitRunner;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.XMLNamespace;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree;
@@ -36,10 +37,6 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 
 @RunWith(MockitoJUnitRunner.class)
 public class InstanceIdentifierCodecTest {
-
-    private InstanceIdentifierCodec instanceIdCodec;
-    private DataSchemaContextTree dataSchemaContextTree;
-
     @Mock
     private EffectiveModelContext context;
     @Mock
@@ -47,6 +44,9 @@ public class InstanceIdentifierCodecTest {
     @Mock
     private DOMSchemaService schemaService;
 
+    private InstanceIdentifierCodec instanceIdCodec;
+    private DataSchemaContextTree dataSchemaContextTree;
+
     @Before
     public void setUp() throws IllegalAccessException {
         when(context.getQName()).thenReturn(SchemaContext.NAME);
@@ -62,7 +62,7 @@ public class InstanceIdentifierCodecTest {
     @Test
     public void testInstanceIdentifierCodec() throws Exception {
         InstanceIdentifierCodec codec = new InstanceIdentifierCodec(schemaService, bindingNormalizedNodeSerializer);
-        verify(schemaService).registerSchemaContextListener(codec);
+        verify(schemaService).registerSchemaContextListener(any());
     }
 
     @Test
@@ -74,12 +74,14 @@ public class InstanceIdentifierCodecTest {
     @Test
     public void testModuleForPrefix() {
         Module module = mock(Module.class);
-        doReturn(ImmutableSet.of(module)).when(context).findModules("");
-        assertEquals("Found Module", module, instanceIdCodec.moduleForPrefix(""));
-        doReturn(ImmutableSet.of(module, mock(Module.class))).when(context).findModules("foo");
-        assertEquals("Found Module", module, instanceIdCodec.moduleForPrefix("foo"));
-
-        when(context.findModules("bar")).thenReturn(Collections.emptySet());
+        QNameModule mod = QNameModule.create(XMLNamespace.of("test"));
+        doReturn(List.of(module)).when(context).findModules("");
+        doReturn(mod).when(module).getQNameModule();
+        assertEquals(mod, instanceIdCodec.moduleForPrefix(""));
+        doReturn(List.of(module, mock(Module.class))).when(context).findModules("foo");
+        assertEquals(mod, instanceIdCodec.moduleForPrefix("foo"));
+
+        when(context.findModules("bar")).thenReturn(List.of());
         assertNull(instanceIdCodec.moduleForPrefix("bar"));
     }
 
@@ -90,12 +92,12 @@ public class InstanceIdentifierCodecTest {
         when(module.getName()).thenReturn(prefix);
 
         XMLNamespace namespace = XMLNamespace.of("foo");
-        when(context.findModules(namespace)).thenReturn(Collections.emptySet());
+        when(context.findModules(namespace)).thenReturn(List.of());
         assertNull(instanceIdCodec.prefixForNamespace(namespace));
 
-        doReturn(ImmutableSet.of(module)).when(context).findModules(namespace);
+        doReturn(List.of(module)).when(context).findModules(namespace);
         assertEquals("Found prefix", prefix, instanceIdCodec.prefixForNamespace(namespace));
-        doReturn(ImmutableSet.of(module, mock(Module.class))).when(context).findModules(namespace);
+        doReturn(List.of(module, mock(Module.class))).when(context).findModules(namespace);
         assertEquals("Found prefix", prefix, instanceIdCodec.prefixForNamespace(namespace));
     }
 
index 0ce6bcb8cb471b0921964a2cd08c30736c6829ed..4f6efe1416527303243ca4e3abcee56d524a5e84 100644 (file)
@@ -51,7 +51,10 @@ import org.opendaylight.ovsdb.southbound.ovsdb.transact.TransactCommand;
 import org.opendaylight.ovsdb.southbound.ovsdb.transact.TransactInvoker;
 import org.opendaylight.ovsdb.southbound.transactions.md.TransactionInvoker;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfo;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
@@ -66,8 +69,11 @@ public class OvsdbConnectionInstanceTest {
     @Mock private TransactionInvoker txInvoker;
     @Mock private MonitorCallBack callback;
     @Mock private ConnectionInfo key;
-    @Mock private InstanceIdentifier<Node> instanceIdentifier;
-    private Map<DatabaseSchema,TransactInvoker> transactInvokers;
+
+    private final InstanceIdentifier<Node> instanceIdentifier = InstanceIdentifier.create(NetworkTopology.class)
+        .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+        .child(Node.class, new NodeKey(new NodeId("testNode")));
+    private Map<DatabaseSchema, TransactInvoker> transactInvokers;
 
     @Before
     public void setUp() throws Exception {
index 9148127f8335d52c5b577a4c9de53e3ddae7aaa3..02c13e25f8f0c7fd07f4c8cc763267f001af86d8 100644 (file)
@@ -5,7 +5,6 @@
  * 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.ovsdb.southbound;
 
 import static org.junit.Assert.assertEquals;
@@ -22,8 +21,8 @@ import static org.powermock.api.support.membermodification.MemberModifier.suppre
 import com.google.common.util.concurrent.FluentFuture;
 import com.google.common.util.concurrent.Futures;
 import java.net.InetAddress;
-import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
@@ -37,9 +36,8 @@ import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.ReadTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.eos.binding.api.Entity;
-import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipChange;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService;
-import org.opendaylight.mdsal.eos.common.api.EntityOwnershipChangeState;
+import org.opendaylight.mdsal.eos.common.api.EntityOwnershipStateChange;
 import org.opendaylight.ovsdb.lib.OvsdbClient;
 import org.opendaylight.ovsdb.lib.OvsdbConnection;
 import org.opendaylight.ovsdb.lib.OvsdbConnectionInfo;
@@ -52,7 +50,12 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAttributes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfo;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.powermock.api.mockito.PowerMockito;
@@ -64,8 +67,8 @@ import org.powermock.reflect.Whitebox;
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest({
-    SouthboundMapper.class, OvsdbConnectionManager.class, OvsdbConnectionService.class, InstanceIdentifier.class,
-    SouthboundUtil.class, Optional.class
+    SouthboundMapper.class, OvsdbConnectionManager.class, OvsdbConnectionService.class, SouthboundUtil.class,
+    Optional.class
 })
 public class OvsdbConnectionManagerTest {
 
@@ -76,11 +79,13 @@ public class OvsdbConnectionManagerTest {
     @Mock private OvsdbConnection ovsdbConnection;
     @Mock private OvsdbClient externalClient;
     @Mock private ReconciliationManager reconciliationManager;
-    private Map<ConnectionInfo,OvsdbConnectionInstance> clients;
-    private Map<ConnectionInfo,InstanceIdentifier<Node>> instanceIdentifiers;
+    private Map<ConnectionInfo, OvsdbConnectionInstance> clients;
+    private Map<ConnectionInfo, InstanceIdentifier<Node>> instanceIdentifiers;
     private Map<Entity, OvsdbConnectionInstance> entityConnectionMap;
 
-    @Mock private InstanceIdentifier<Node> iid;
+    private final InstanceIdentifier<Node> iid = InstanceIdentifier.create(NetworkTopology.class)
+        .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+        .child(Node.class, new NodeKey(new NodeId("testNode")));
 
     @Before
     public void setUp() throws Exception {
@@ -101,8 +106,7 @@ public class OvsdbConnectionManagerTest {
 
         externalClient = mock(OvsdbClient.class, Mockito.RETURNS_DEEP_STUBS);
         doReturn(info).when(externalClient).getConnectionInfo();
-        doReturn(Futures.immediateFuture(Collections.singletonList("Open_vSwitch"))).when(externalClient)
-            .getDatabases();
+        doReturn(Futures.immediateFuture(List.of("Open_vSwitch"))).when(externalClient).getDatabases();
 
         PowerMockito.mockStatic(SouthboundUtil.class);
         when(SouthboundUtil.connectionInfoToString(any(ConnectionInfo.class))).thenReturn("192.18.120.31:8080");
@@ -117,7 +121,9 @@ public class OvsdbConnectionManagerTest {
         doNothing().when(client).registerCallbacks(any());
 
         //TODO: Write unit tests for EntityOwnershipService
-        when(client.getInstanceIdentifier()).thenReturn(mock(InstanceIdentifier.class));
+        when(client.getInstanceIdentifier()).thenReturn(InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+            .child(Node.class, new NodeKey(new NodeId("testNode"))));
         field(OvsdbConnectionManager.class, "entityConnectionMap").set(ovsdbConnManager, entityConnectionMap);
         suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getEntityFromConnectionInstance",
                 OvsdbConnectionInstance.class));
@@ -130,12 +136,13 @@ public class OvsdbConnectionManagerTest {
         when(db.newReadOnlyTransaction()).thenReturn(tx);
         when(tx.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)))
                 .thenReturn(mock(FluentFuture.class));
-        when(client.getInstanceIdentifier()).thenReturn(mock(InstanceIdentifier.class));
+        when(client.getInstanceIdentifier()).thenReturn(InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+            .child(Node.class, new NodeKey(new NodeId("testNode"))));
 
         ovsdbConnManager.connected(externalClient);
     }
 
-    @SuppressWarnings("unchecked")
     @Test
     public void testConnectedButCallBacksNotRegistered() throws Exception {
         ConnectionInfo key = mock(ConnectionInfo.class);
@@ -144,7 +151,9 @@ public class OvsdbConnectionManagerTest {
         when(SouthboundMapper.createConnectionInfo(any(OvsdbClient.class))).thenReturn(key);
 
         suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getInstanceIdentifier", ConnectionInfo.class));
-        when(ovsdbConnManager.getInstanceIdentifier(key)).thenReturn(mock(InstanceIdentifier.class));
+        when(ovsdbConnManager.getInstanceIdentifier(key)).thenReturn(InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+            .child(Node.class, new NodeKey(new NodeId("testNode"))));
 
         suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getConnectionInstance", ConnectionInfo.class));
         when(ovsdbConnManager.getConnectionInstance(key)).thenReturn(null);
@@ -193,7 +202,10 @@ public class OvsdbConnectionManagerTest {
                 .thenReturn(mock(FluentFuture.class));
         when(tx.exists(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)))
             .thenReturn(mock(FluentFuture.class));
-        when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(mock(InstanceIdentifier.class));
+        when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(
+            InstanceIdentifier.create(NetworkTopology.class)
+                .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+                .child(Node.class, new NodeKey(new NodeId("testNode"))));
         ovsdbConnManager.disconnected(externalClient);
         Map<ConnectionInfo, OvsdbConnectionInstance> testClients = Whitebox.getInternalState(ovsdbConnManager,
                 "clients");
@@ -208,7 +220,10 @@ public class OvsdbConnectionManagerTest {
         suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getConnectionInstance", ConnectionInfo.class));
         OvsdbConnectionInstance ovsdbConnectionInstance = mock(OvsdbConnectionInstance.class);
         when(ovsdbConnManager.getConnectionInstance(any(ConnectionInfo.class))).thenReturn(ovsdbConnectionInstance);
-        when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(mock(InstanceIdentifier.class));
+        when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(
+            InstanceIdentifier.create(NetworkTopology.class)
+                .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+                .child(Node.class, new NodeKey(new NodeId("testNode"))));
 
         suppress(MemberMatcher.method(OvsdbConnectionManager.class, "removeInstanceIdentifier", ConnectionInfo.class));
 
@@ -359,14 +374,19 @@ public class OvsdbConnectionManagerTest {
         when(ovsdbConnManager.connectedButCallBacksNotRegistered(any(OvsdbClient.class)))
                 .thenReturn(ovsdbConnectionInstance);
 
-        when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(mock(InstanceIdentifier.class));
+        when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(
+            InstanceIdentifier.create(NetworkTopology.class)
+                .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+                .child(Node.class, new NodeKey(new NodeId("testNode"))));
         field(OvsdbConnectionManager.class, "entityConnectionMap").set(ovsdbConnManager, entityConnectionMap);
         suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getEntityFromConnectionInstance",
                 OvsdbConnectionInstance.class));
         //TODO: Write unit tests for entity ownership service related code.
         suppress(MemberMatcher.method(OvsdbConnectionManager.class, "registerEntityForOwnership",
                 OvsdbConnectionInstance.class));
-        assertEquals("ERROR", client, ovsdbConnManager.connect(PowerMockito.mock(InstanceIdentifier.class), ovsdbNode));
+        assertEquals("ERROR", client, ovsdbConnManager.connect(InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+            .child(Node.class, new NodeKey(new NodeId("testNode"))), ovsdbNode));
     }
 
     @Test
@@ -380,9 +400,7 @@ public class OvsdbConnectionManagerTest {
         field(OvsdbConnectionManager.class, "entityConnectionMap").set(ovsdbConnManager, entityConnectionMap);
         doNothing().when(ovsdbConnManager).putConnectionInstance(any(ConnectionInfo.class),
             any(OvsdbConnectionInstance.class));
-        EntityOwnershipChange ownershipChange = new EntityOwnershipChange(entity,
-                EntityOwnershipChangeState.from(true, false, false));
-        Whitebox.invokeMethod(ovsdbConnManager, "handleOwnershipChanged", ownershipChange);
+        ovsdbConnManager.handleOwnershipChanged(entity, EntityOwnershipStateChange.from(true, false, false));
         verify(ovsdbConnManager).putConnectionInstance(key, ovsdbConnInstance);
     }
 }
index 2e440e12b261e869a8bfc521eb4d939c77c2f5ce..029a7a74ae1dd001d6c078738679bb1ca253cf1f 100644 (file)
@@ -33,18 +33,16 @@ import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSeriali
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
 import org.opendaylight.mdsal.eos.binding.api.Entity;
-import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipCandidateRegistration;
-import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipChange;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListener;
-import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListenerRegistration;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService;
 import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException;
-import org.opendaylight.mdsal.eos.common.api.EntityOwnershipChangeState;
 import org.opendaylight.mdsal.eos.common.api.EntityOwnershipState;
+import org.opendaylight.mdsal.eos.common.api.EntityOwnershipStateChange;
 import org.opendaylight.ovsdb.lib.OvsdbConnection;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
 
@@ -60,9 +58,8 @@ public class SouthboundProviderTest extends AbstractConcurrentDataBrokerTest {
     public void setUp() throws CandidateAlreadyRegisteredException {
         entityOwnershipService = mock(EntityOwnershipService.class);
         when(entityOwnershipService.registerListener(anyString(), any(EntityOwnershipListener.class))).thenReturn(
-                mock(EntityOwnershipListenerRegistration.class));
-        when(entityOwnershipService.registerCandidate(any(Entity.class))).thenReturn(mock(
-                EntityOwnershipCandidateRegistration.class));
+                mock(Registration.class));
+        when(entityOwnershipService.registerCandidate(any(Entity.class))).thenReturn(mock(Registration.class));
 
         diagStatusService = Mockito.mock(DiagStatusService.class);
         when(diagStatusService.register(any())).thenReturn(Mockito.mock(ServiceRegistration.class));
@@ -162,8 +159,7 @@ public class SouthboundProviderTest extends AbstractConcurrentDataBrokerTest {
                     topologyIid).get().isPresent());
 
             // Become owner
-            southboundProvider.handleOwnershipChange(new EntityOwnershipChange(entity,
-                    EntityOwnershipChangeState.from(false, true, true)));
+            southboundProvider.handleOwnershipChange(EntityOwnershipStateChange.from(false, true, true));
 
             // Up to 3 seconds for DTCL to settle
             final Stopwatch sw = Stopwatch.createStarted();
@@ -179,8 +175,7 @@ public class SouthboundProviderTest extends AbstractConcurrentDataBrokerTest {
                     topologyIid).get().isPresent());
 
             // Verify idempotency
-            southboundProvider.handleOwnershipChange(new EntityOwnershipChange(entity,
-                    EntityOwnershipChangeState.from(false, true, true)));
+            southboundProvider.handleOwnershipChange(EntityOwnershipStateChange.from(false, true, true));
 
             // The OVSDB topology must be present in both trees
             assertTrue(getDataBroker().newReadOnlyTransaction().read(LogicalDatastoreType.CONFIGURATION,
index d84ef3ecdd949e570fcde6c9068577a2501bb84b..cdafe6df92088378ebe6fa99cd1903056ca119fc 100644 (file)
@@ -36,8 +36,13 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.re
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeRef;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfo;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
-import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
+import org.opendaylight.yangtools.util.concurrent.FluentFutures;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.powermock.api.mockito.PowerMockito;
 import org.powermock.core.classloader.annotations.PrepareForTest;
@@ -62,8 +67,9 @@ public class SouthboundUtilTest {
         when(db.newReadOnlyTransaction()).thenReturn(transaction);
         when(mn.getManagedBy()).thenReturn(ref);
         when(ref.getValue()).thenAnswer(
-                (Answer<InstanceIdentifier<Node>>) invocation -> (InstanceIdentifier<Node>) mock(
-                        InstanceIdentifier.class));
+            (Answer<InstanceIdentifier<Node>>) invocation -> InstanceIdentifier.create(NetworkTopology.class)
+                .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+                .child(Node.class, new NodeKey(new NodeId("testNode"))));
         FluentFuture<Optional<Node>> nf = mock(FluentFuture.class);
         when(transaction.read(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class))).thenReturn(nf);
         doNothing().when(transaction).close();
@@ -92,15 +98,15 @@ public class SouthboundUtilTest {
                 SouthboundUtil.getManagingNode(db, mn));
     }
 
-    @SuppressWarnings("unchecked")
     @Test
     public void testReadNode() throws Exception {
-        Optional<DataObject> node = Optional.of(mock(DataObject.class));
+        final var node = Optional.of(mock(Node.class));
         ReadWriteTransaction transaction = mock(ReadWriteTransaction.class);
-        InstanceIdentifier<DataObject> connectionIid = mock(InstanceIdentifier.class);
-        FluentFuture<Optional<DataObject>> value = mock(FluentFuture.class);
+        InstanceIdentifier<Node> connectionIid = InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+            .child(Node.class, new NodeKey(new NodeId("testNode")));
+        FluentFuture<Optional<Node>> value = FluentFutures.immediateFluentFuture(node);
         when(transaction.read(LogicalDatastoreType.OPERATIONAL, connectionIid)).thenReturn(value);
-        when(value.get()).thenReturn(node);
         assertEquals("Incorrect Optional object received", node, SouthboundUtil.readNode(transaction, connectionIid));
     }
 
index 1e98162bca1809558625239e1ddc0023f1ac52ec..28d488374c59837db4ae62cbe0768585690621bf 100644 (file)
@@ -23,14 +23,15 @@ import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.powermock.reflect.Whitebox;
 
 @RunWith(MockitoJUnitRunner.class)
 public class DataChangesManagedByOvsdbNodeEventTest {
+    private final InstanceIdentifier<?> iid = InstanceIdentifier.create(NetworkTopology.class);
 
-    @Mock private InstanceIdentifier<?> iid;
     @Mock private DataBroker db;
     @Mock private DataChangeEvent event;
     private Set<InstanceIdentifier<?>> removedPaths;
index 52475882cf2d5db7150fa2ff82dbe8d5ab662a1e..e6989f10f87cf463c2bd7bbbf70b47b64ddc3305 100644 (file)
@@ -5,7 +5,6 @@
  * 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.ovsdb.southbound.ovsdb.transact;
 
 import static org.mockito.ArgumentMatchers.any;
@@ -42,6 +41,13 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.re
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.OpenvswitchExternalIdsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.OpenvswitchOtherConfigs;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.OpenvswitchOtherConfigsBuilder;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.powermock.api.mockito.PowerMockito;
 import org.powermock.api.support.membermodification.MemberMatcher;
@@ -49,9 +55,8 @@ import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 
 @RunWith(PowerMockRunner.class)
-@PrepareForTest({TransactUtils.class, OvsdbNodeUpdateCommand.class, InstanceIdentifier.class, Operations.class})
+@PrepareForTest({TransactUtils.class, OvsdbNodeUpdateCommand.class, Operations.class})
 public class OvsdbNodeUpdateCommandTest {
-
     private static final String EXTERNAL_ID_KEY = "external id key";
     private static final String EXTERNAL_ID_VALUE = "external id value";
     private static final String OTHER_CONFIG_KEY = "other config key";
@@ -69,7 +74,10 @@ public class OvsdbNodeUpdateCommandTest {
     @Test
     public void testExecute() throws Exception {
         Map<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> updated = new HashMap<>();
-        InstanceIdentifier<OvsdbNodeAugmentation> iid = mock(InstanceIdentifier.class);
+        InstanceIdentifier<OvsdbNodeAugmentation> iid = InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(new TopologyId("testTopo")))
+            .child(Node.class, new NodeKey(new NodeId("testNode")))
+            .augmentation(OvsdbNodeAugmentation.class);
         OvsdbNodeAugmentation ovsdbNode = mock(OvsdbNodeAugmentation.class);
         updated.put(iid, ovsdbNode);
         PowerMockito.mockStatic(TransactUtils.class);
index 4e24f96e9ea04123e699e7a21509689691d30b98..aac1dc3f42249c7a7221786f8f2479bb741bf61f 100644 (file)
@@ -42,6 +42,16 @@ import org.opendaylight.ovsdb.schema.openvswitch.Interface;
 import org.opendaylight.ovsdb.schema.openvswitch.Port;
 import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointKey;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.powermock.api.mockito.PowerMockito;
@@ -138,7 +148,11 @@ public class TerminationPointCreateCommandTest {
         when(transaction.add(any(Operation.class))).thenReturn(transaction);
 
         String interfaceName = INTERFACE_NAME;
-        InstanceIdentifier<OvsdbTerminationPointAugmentation> iid = mock(InstanceIdentifier.class);
+        InstanceIdentifier<OvsdbTerminationPointAugmentation> iid = InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(new TopologyId("testTopo")))
+            .child(Node.class, new NodeKey(new NodeId("testNode")))
+            .child(TerminationPoint.class, new TerminationPointKey(new TpId("testTp")))
+            .augmentation(OvsdbTerminationPointAugmentation.class);
         TerminationPointCreateCommand.stampInstanceIdentifier(transaction, iid, interfaceName,
                 mock(InstanceIdentifierCodec.class));
         verify(port).setName(anyString());
index 90f27f5dbed5081bbb7cd068434569bf995be397..de0918e512834551677a90f5eb70cfe4a8a1464f 100644 (file)
@@ -38,7 +38,16 @@ import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbPortInterfaceAttributes.VlanMode;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.powermock.api.mockito.PowerMockito;
 import org.powermock.api.support.membermodification.MemberMatcher;
@@ -49,7 +58,7 @@ import org.powermock.modules.junit4.PowerMockRunner;
 @RunWith(PowerMockRunner.class)
 @PrepareForTest({
     TerminationPointUpdateCommand.class, TransactUtils.class, VlanMode.class, TerminationPointCreateCommand.class,
-    InstanceIdentifier.class, Operations.class
+    Operations.class
 })
 public class TerminationPointUpdateCommandTest {
 
@@ -66,7 +75,11 @@ public class TerminationPointUpdateCommandTest {
     public void testExecute() {
         Map<InstanceIdentifier<OvsdbTerminationPointAugmentation>, OvsdbTerminationPointAugmentation> created
             = new HashMap<>();
-        created.put(mock(InstanceIdentifier.class), mock(OvsdbTerminationPointAugmentation.class));
+        created.put(InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(new TopologyId("testTopo")))
+            .child(Node.class, new NodeKey(new NodeId("testNode")))
+            .child(TerminationPoint.class, new TerminationPointKey(new TpId("testTp")))
+            .augmentation(OvsdbTerminationPointAugmentation.class), mock(OvsdbTerminationPointAugmentation.class));
         PowerMockito.mockStatic(TransactUtils.class);
         PowerMockito.when(TransactUtils.extractCreated(any(DataChangeEvent.class),
                 eq(OvsdbTerminationPointAugmentation.class))).thenReturn(created);
@@ -77,9 +90,13 @@ public class TerminationPointUpdateCommandTest {
                 any(BridgeOperationalState.class), any(InstanceIdentifier.class),
                 any(OvsdbTerminationPointAugmentation.class), any(InstanceIdentifierCodec.class));
 
-        Map<InstanceIdentifier<OvsdbTerminationPointAugmentation>, OvsdbTerminationPointAugmentation> updated
-            = new HashMap<>();
-        updated.put(mock(InstanceIdentifier.class), mock(OvsdbTerminationPointAugmentation.class));
+        Map<InstanceIdentifier<OvsdbTerminationPointAugmentation>, OvsdbTerminationPointAugmentation> updated =
+            new HashMap<>();
+        updated.put(InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(new TopologyId("testTopo")))
+            .child(Node.class, new NodeKey(new NodeId("testNode")))
+            .child(TerminationPoint.class, new TerminationPointKey(new TpId("testTp2")))
+            .augmentation(OvsdbTerminationPointAugmentation.class), mock(OvsdbTerminationPointAugmentation.class));
         PowerMockito.when(TransactUtils.extractUpdated(any(DataChangeEvent.class),
                 eq(OvsdbTerminationPointAugmentation.class))).thenReturn(updated);
 
@@ -134,8 +151,12 @@ public class TerminationPointUpdateCommandTest {
         when(op.update(any(Port.class))).thenReturn(update);
         when(extraPort.getNameColumn()).thenReturn(column);
 
-        InstanceIdentifier<OvsdbTerminationPointAugmentation> iid = mock(InstanceIdentifier.class);
-        terminationPointUpdateCommand.updateTerminationPoint(transaction, state, iid, terminationPoint,
+        terminationPointUpdateCommand.updateTerminationPoint(transaction, state,
+            InstanceIdentifier.create(NetworkTopology.class)
+                .child(Topology.class, new TopologyKey(new TopologyId("testTopo")))
+                .child(Node.class, new NodeKey(new NodeId("testNode")))
+                .child(TerminationPoint.class, new TerminationPointKey(new TpId("testTp")))
+                .augmentation(OvsdbTerminationPointAugmentation.class), terminationPoint,
                 mock(InstanceIdentifierCodec.class));
         verify(transaction, times(1)).add(any(Operation.class));
     }
index 7aec38ae976661a067de6da72a2597338d1676c5..6e9778cec18a45cf70f0ac069f5f402ea2ebee41 100644 (file)
@@ -5,7 +5,6 @@
  * 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.ovsdb.southbound.ovsdb.transact;
 
 import static org.junit.Assert.assertEquals;
@@ -45,6 +44,7 @@ import org.opendaylight.ovsdb.lib.schema.TableSchema;
 import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec;
 import org.opendaylight.ovsdb.southbound.SouthboundMapper;
 import org.opendaylight.ovsdb.southbound.SouthboundUtil;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.powermock.api.mockito.PowerMockito;
@@ -86,71 +86,65 @@ public class TransactUtilsTest {
         assertEquals(map, TransactUtils.extractUpdated(changes, klazz));
     }
 
-    @SuppressWarnings("unchecked")
     @Test
     public void testExtractCreatedOrUpdated() {
         Map<InstanceIdentifier<DataObject>, DataObject> result = new HashMap<>();
 
         PowerMockito.doReturn(result).when(TransactUtils.class);
-        TransactUtils.extractUpdated(any(DataChangeEvent.class), eq(DataObject.class));
+        TransactUtils.extractUpdated(any(DataChangeEvent.class), eq(NetworkTopology.class));
 
-        Map<InstanceIdentifier<DataObject>, DataObject> map = new HashMap<>();
-        InstanceIdentifier<DataObject> iid = mock(InstanceIdentifier.class);
+        Map<InstanceIdentifier<NetworkTopology>, NetworkTopology> map = new HashMap<>();
+        InstanceIdentifier<NetworkTopology> iid = InstanceIdentifier.create(NetworkTopology.class);
 
-        DataObject db = mock(DataObject.class);
+        NetworkTopology db = mock(NetworkTopology.class);
         map.put(iid, db);
 
         PowerMockito.doReturn(map).when(TransactUtils.class);
-        TransactUtils.extractCreated(any(DataChangeEvent.class), eq(DataObject.class));
+        TransactUtils.extractCreated(any(DataChangeEvent.class), eq(NetworkTopology.class));
 
-        Map<InstanceIdentifier<DataObject>, DataObject> testResult = new HashMap<>();
+        Map<InstanceIdentifier<NetworkTopology>, NetworkTopology> testResult = new HashMap<>();
         testResult.put(iid, db);
-        Class<DataObject> klazz = DataObject.class;
         DataChangeEvent changes = mock(DataChangeEvent.class);
-        assertEquals(testResult, TransactUtils.extractCreatedOrUpdated(changes, klazz));
+        assertEquals(testResult, TransactUtils.extractCreatedOrUpdated(changes, NetworkTopology.class));
     }
 
     @Test
-    @SuppressWarnings("unchecked")
     public void testExtractCreatedOrUpdatedOrRemoved() {
-        Map<InstanceIdentifier<DataObject>, DataObject> result = new HashMap<>();
+        Map<InstanceIdentifier<NetworkTopology>, NetworkTopology> result = new HashMap<>();
 
         PowerMockito.doReturn(result).when(TransactUtils.class);
-        TransactUtils.extractCreatedOrUpdated(any(DataChangeEvent.class), eq(DataObject.class));
+        TransactUtils.extractCreatedOrUpdated(any(DataChangeEvent.class), eq(NetworkTopology.class));
 
-        Map<InstanceIdentifier<DataObject>, DataObject> map = new HashMap<>();
-        InstanceIdentifier<DataObject> iid = mock(InstanceIdentifier.class);
-        DataObject db = mock(DataObject.class);
+        Map<InstanceIdentifier<NetworkTopology>, NetworkTopology> map = new HashMap<>();
+        InstanceIdentifier<NetworkTopology> iid = InstanceIdentifier.create(NetworkTopology.class);
+        NetworkTopology db = mock(NetworkTopology.class);
         map.put(iid, db);
 
         PowerMockito.doReturn(map).when(TransactUtils.class);
-        TransactUtils.extractRemovedObjects(any(DataChangeEvent.class), eq(DataObject.class));
+        TransactUtils.extractRemovedObjects(any(DataChangeEvent.class), eq(NetworkTopology.class));
 
-        Map<InstanceIdentifier<DataObject>, DataObject> testResult = new HashMap<>();
+        Map<InstanceIdentifier<NetworkTopology>, NetworkTopology> testResult = new HashMap<>();
         testResult.put(iid, db);
-        Class<DataObject> klazz = DataObject.class;
         DataChangeEvent changes = mock(DataChangeEvent.class);
-        assertEquals(testResult, TransactUtils.extractCreatedOrUpdatedOrRemoved(changes, klazz));
+        assertEquals(testResult, TransactUtils.extractCreatedOrUpdatedOrRemoved(changes, NetworkTopology.class));
     }
 
     @SuppressWarnings("unchecked")
     @Test
     public void testExtractOriginal() {
         DataChangeEvent changes = mock(DataChangeEvent.class);
-        Class<DataObject> klazz = DataObject.class;
         Map<InstanceIdentifier<?>, DataObject> map = new HashMap<>();
         when(changes.getOriginalData()).thenReturn(map);
-        when(TransactUtils.extract(any(Map.class),eq(DataObject.class))).thenReturn(new HashMap<>());
+        when(TransactUtils.extract(any(Map.class), eq(DataObject.class))).thenReturn(new HashMap<>());
 
         //test extractOriginal()
-        assertEquals(map, TransactUtils.extractCreated(changes, klazz));
+        assertEquals(map, TransactUtils.extractCreated(changes, DataObject.class));
     }
 
     @Test
     public void testExtractRemoved() {
         DataChangeEvent changes = mock(DataChangeEvent.class);
-        Class<DataObject> klazz = DataObject.class;
-        assertEquals(HashSet.class, TransactUtils.extractRemoved(changes, klazz).getClass());
+        assertEquals(HashSet.class, TransactUtils.extractRemoved(changes, DataObject.class).getClass());
     }
 
     @Test
@@ -211,9 +205,9 @@ public class TransactUtilsTest {
     @Test
     public void testStampInstanceIdentifier() {
         TransactionBuilder transaction = mock(TransactionBuilder.class);
-        InstanceIdentifier<?> iid = mock(InstanceIdentifier.class);
+        InstanceIdentifier<?> iid = InstanceIdentifier.create(NetworkTopology.class);
         TableSchema<GenericTableSchema> tableSchema = mock(TableSchema.class);
-        ColumnSchema<GenericTableSchema, Map<String,String>> columnSchema = mock(ColumnSchema.class);
+        ColumnSchema<GenericTableSchema, Map<String, String>> columnSchema = mock(ColumnSchema.class);
         InstanceIdentifierCodec instanceIdentifierCodec = mock(InstanceIdentifierCodec.class);
 
         PowerMockito.doReturn(mock(Mutate.class)).when(TransactUtils.class);
@@ -225,7 +219,7 @@ public class TransactUtilsTest {
         verify(transaction).add(any(Operation.class));
     }
 
-    @SuppressWarnings({ "unchecked" })
+    @SuppressWarnings("unchecked")
     @Test
     public void testStampInstanceIdentifierMutation() throws Exception {
         InstanceIdentifierCodec instanceIdentifierCodec = Mockito.mock(InstanceIdentifierCodec.class);
@@ -247,7 +241,7 @@ public class TransactUtilsTest {
         when(mutate.getMutations()).thenReturn(listMutations);
         doNothing().when(mutate).setMutations(any(List.class));
 
-        InstanceIdentifier<?> iid = mock(InstanceIdentifier.class);
+        InstanceIdentifier<?> iid = InstanceIdentifier.create(NetworkTopology.class);
         TransactionBuilder transaction = mock(TransactionBuilder.class);
         TableSchema<GenericTableSchema> tableSchema = mock(TableSchema.class);
         assertEquals(mutate, TransactUtils.stampInstanceIdentifierMutation(transaction, iid, tableSchema, columnSchema,
index 97b7e46fc0fee14eb34008e4060df58e24178910..24bb0b7ebcdd5e67b8364a441e2e2826fee72e4f 100644 (file)
@@ -60,15 +60,16 @@ import org.opendaylight.yangtools.yang.binding.util.BindingMap;
 public class BridgeConfigReconciliationTaskTest {
     private static final String BR_INT = "br-int";
     private static final String NODE_ID = "ovsdb://uuid/6ff3d0cf-4102-429d-b41c-f8027a0fd7f4";
-    private BridgeConfigReconciliationTask configurationReconciliationTask;
     @Mock private OvsdbConnectionManager ovsdbConnectionManager;
     @Mock private OvsdbConnectionInstance ovsdbConnectionInstance;
     @Mock private DataBroker db;
     @Mock private ReconciliationManager reconciliationManager;
     @Mock private Topology topology;
-    @Mock private InstanceIdentifier<Node> iid;
     @Mock private SouthboundProvider provider;
 
+    private BridgeConfigReconciliationTask configurationReconciliationTask;
+    private InstanceIdentifier<Node> iid;
+
     @Before
     public void setUp() throws Exception {
         NodeKey nodeKey = new NodeKey(new NodeId(new Uri(NODE_ID)));
index 985018fb9ea8ea02018c6d37ef662ca25fd5f6f5..80e7adbf0a4a870da01570ee628385086ee583ee 100644 (file)
@@ -66,10 +66,14 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.re
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntryBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagedNodeEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagedNodeEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
-import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.powermock.api.mockito.PowerMockito;
 import org.powermock.api.support.membermodification.MemberMatcher;
@@ -80,8 +84,8 @@ import org.powermock.reflect.Whitebox;
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest({
-    TyperUtils.class, OvsdbBridgeUpdateCommand.class, SouthboundUtil.class, InstanceIdentifier.class,
-    SouthboundMapper.class, NetworkInterface.class
+    TyperUtils.class, OvsdbBridgeUpdateCommand.class, SouthboundUtil.class, SouthboundMapper.class,
+    NetworkInterface.class
 })
 public class OvsdbBridgeUpdateCommandTest {
     private final Map<UUID,Bridge> updatedBridgeRows = new HashMap<>();
@@ -119,7 +123,9 @@ public class OvsdbBridgeUpdateCommandTest {
 
         OvsdbConnectionInstance ovsdbConnectionInstance = mock(OvsdbConnectionInstance.class);
         when(ovsdbBridgeUpdateCommand.getOvsdbConnectionInstance()).thenReturn(ovsdbConnectionInstance);
-        InstanceIdentifier<Node> connectionIId = mock(InstanceIdentifier.class);
+        InstanceIdentifier<Node> connectionIId = InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(new TopologyId("testTopo")))
+            .child(Node.class, new NodeKey(new NodeId("testNode")));
         when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(connectionIId);
         Optional<Node> connection = Optional.of(mock(Node.class));
         PowerMockito.mockStatic(SouthboundUtil.class);
@@ -158,20 +164,18 @@ public class OvsdbBridgeUpdateCommandTest {
                 Bridge.class));
 
         Bridge bridge = mock(Bridge.class);
-        InstanceIdentifier<Node> connectionIId = mock(InstanceIdentifier.class);
+        InstanceIdentifier<Node> connectionIId = InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(new TopologyId("testTopo")))
+            .child(Node.class, new NodeKey(new NodeId("testNode")));
         Whitebox.invokeMethod(ovsdbBridgeUpdateCommand, "updateBridge", transaction, bridge, connectionIId);
         verify(ovsdbBridgeUpdateCommand, times(3)).deleteEntries(any(ReadWriteTransaction.class), eq(null));
     }
 
-    @SuppressWarnings("unchecked")
     @Test
     public void testDeleteEntries() throws Exception {
         ReadWriteTransaction transaction = mock(ReadWriteTransaction.class);
-        List<InstanceIdentifier<DataObject>> entryIids = new ArrayList<>();
-        InstanceIdentifier<DataObject> iid = mock(InstanceIdentifier.class);
-        entryIids.add(iid);
         doNothing().when(transaction).delete(any(LogicalDatastoreType.class), any(InstanceIdentifier.class));
-        Whitebox.invokeMethod(ovsdbBridgeUpdateCommand, "deleteEntries", transaction, entryIids);
+        ovsdbBridgeUpdateCommand.deleteEntries(transaction, List.of(InstanceIdentifier.create(NetworkTopology.class)));
         verify(transaction).delete(any(LogicalDatastoreType.class), any(InstanceIdentifier.class));
     }
 
@@ -193,7 +197,9 @@ public class OvsdbBridgeUpdateCommandTest {
         //test bridgeOtherConfigsToRemove()
         when(oldBridge.getOtherConfigColumn()).thenReturn(column);
         when(bridge.getOtherConfigColumn()).thenReturn(column);
-        InstanceIdentifier<Node> bridgeIid = PowerMockito.mock(InstanceIdentifier.class);
+        InstanceIdentifier<Node> bridgeIid = InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(new TopologyId("testTopo")))
+            .child(Node.class, new NodeKey(new NodeId("testNode")));
         List<InstanceIdentifier<BridgeOtherConfigs>> resultBridgeOtherConfigs = Whitebox
                 .invokeMethod(ovsdbBridgeUpdateCommand, "bridgeOtherConfigsToRemove", bridgeIid, bridge);
         assertEquals(ArrayList.class, resultBridgeOtherConfigs.getClass());
@@ -236,13 +242,17 @@ public class OvsdbBridgeUpdateCommandTest {
         PowerMockito.whenNew(OvsdbNodeAugmentationBuilder.class).withNoArguments()
                 .thenReturn(ovsdbConnectionAugmentationBuilder);
         PowerMockito.mockStatic(SouthboundMapper.class);
-        InstanceIdentifier<Node> bridgeIid = mock(InstanceIdentifier.class);
+        InstanceIdentifier<Node> bridgeIid = InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(new TopologyId("testTopo")))
+            .child(Node.class, new NodeKey(new NodeId("testNode")));
         when(SouthboundMapper.createInstanceIdentifier(any(InstanceIdentifierCodec.class),
                 any(OvsdbConnectionInstance.class), any(Bridge.class)))
                 .thenReturn(bridgeIid);
 
         ManagedNodeEntry managedBridge = new ManagedNodeEntryBuilder()
-                .setBridgeRef(new OvsdbBridgeRef(mock(InstanceIdentifier.class)))
+                .setBridgeRef(new OvsdbBridgeRef(InstanceIdentifier.create(NetworkTopology.class)
+                    .child(Topology.class, new TopologyKey(new TopologyId("testTopo")))
+                    .child(Node.class, new NodeKey(new NodeId("testNode")))))
                 .build();
 
         ManagedNodeEntryBuilder managedNodeEntryBuilder = mock(ManagedNodeEntryBuilder.class);
@@ -310,14 +320,16 @@ public class OvsdbBridgeUpdateCommandTest {
         assertEquals(node, Whitebox.invokeMethod(ovsdbBridgeUpdateCommand, "buildBridgeNode", bridge));
     }
 
-    @SuppressWarnings("unchecked")
     @Test
     public void testSetManagedByAndSetDataPathType() throws Exception {
         OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = mock(OvsdbBridgeAugmentationBuilder.class);
 
         OvsdbConnectionInstance ovsdbConnectionInstance = mock(OvsdbConnectionInstance.class);
         when(ovsdbBridgeUpdateCommand.getOvsdbConnectionInstance()).thenReturn(ovsdbConnectionInstance);
-        when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(mock(InstanceIdentifier.class));
+        when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(
+            InstanceIdentifier.create(NetworkTopology.class)
+                .child(Topology.class, new TopologyKey(new TopologyId("testTopo")))
+                .child(Node.class, new NodeKey(new NodeId("testNode"))));
         PowerMockito.whenNew(OvsdbNodeRef.class).withAnyArguments().thenReturn(mock(OvsdbNodeRef.class));
         when(ovsdbBridgeAugmentationBuilder.setManagedBy(any(OvsdbNodeRef.class)))
                 .thenReturn(ovsdbBridgeAugmentationBuilder);
@@ -460,7 +472,10 @@ public class OvsdbBridgeUpdateCommandTest {
 
         OvsdbConnectionInstance ovsdbConnectionInstance = mock(OvsdbConnectionInstance.class);
         when(ovsdbBridgeUpdateCommand.getOvsdbConnectionInstance()).thenReturn(ovsdbConnectionInstance);
-        when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(mock(InstanceIdentifier.class));
+        when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(
+            InstanceIdentifier.create(NetworkTopology.class)
+                .child(Topology.class, new TopologyKey(new TopologyId("testTopo")))
+                .child(Node.class, new NodeKey(new NodeId("testNode"))));
         OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = mock(OvsdbBridgeAugmentationBuilder.class);
         Bridge bridge = mock(Bridge.class);
         when(ovsdbBridgeAugmentationBuilder.setBridgeOpenflowNodeRef(any(InstanceIdentifier.class)))
index ff5446985192f907878cadd9f32cceaae7743a2c..d18bb50a2bed7179252acc42369d692edcb7caaa 100644 (file)
@@ -35,16 +35,20 @@ import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
 import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
 import org.opendaylight.ovsdb.schema.openvswitch.Controller;
 import org.opendaylight.ovsdb.southbound.OvsdbConnectionInstance;
+import org.opendaylight.ovsdb.southbound.SouthboundConstants;
 import org.opendaylight.ovsdb.southbound.SouthboundMapper;
 import org.opendaylight.ovsdb.southbound.SouthboundUtil;
 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.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeRef;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntryKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagedNodeEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagedNodeEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
@@ -58,9 +62,7 @@ import org.powermock.modules.junit4.PowerMockRunner;
 import org.powermock.reflect.Whitebox;
 
 @RunWith(PowerMockRunner.class)
-@PrepareForTest({
-    OvsdbControllerUpdateCommand.class, SouthboundMapper.class, SouthboundUtil.class, InstanceIdentifier.class
-})
+@PrepareForTest({ OvsdbControllerUpdateCommand.class, SouthboundMapper.class, SouthboundUtil.class })
 public class OvsdbControllerUpdateCommandTest {
     private static final String BRIDGE_NAME = "br-int";
     private static final String NODE_ID = "OF|00:00:00:0c:29:70:45:9b";
@@ -126,8 +128,12 @@ public class OvsdbControllerUpdateCommandTest {
         // suppress call to getControllerEntryIid()
         ReadWriteTransaction transaction = mock(ReadWriteTransaction.class);
         Map<UUID, Controller> updatedControllerRows = new HashMap<>();
-        doReturn(mock(InstanceIdentifier.class)).when(ovsdbControllerUpdateCommand).getControllerEntryIid(
-                any(ControllerEntry.class), any(String.class));
+        doReturn(InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+            .child(Node.class, new NodeKey(new NodeId("testNode")))
+            .augmentation(OvsdbBridgeAugmentation.class)
+            .child(ControllerEntry.class, new ControllerEntryKey(new Uri("testEntry"))))
+            .when(ovsdbControllerUpdateCommand).getControllerEntryIid(any(ControllerEntry.class), any(String.class));
         doNothing().when(transaction).merge(any(LogicalDatastoreType.class), any(InstanceIdentifier.class),
                 any(ControllerEntry.class));
         Whitebox.invokeMethod(ovsdbControllerUpdateCommand, "updateController", transaction, updatedControllerRows,
@@ -137,14 +143,15 @@ public class OvsdbControllerUpdateCommandTest {
         verify(bridge).getNameColumn();
     }
 
-    @SuppressWarnings("unchecked")
     @Test
     public void testUpdateController2() throws Exception {
         ReadWriteTransaction transaction = mock(ReadWriteTransaction.class);
         Map<UUID, Controller> updatedControllerRows = new HashMap<>();
         Map<InstanceIdentifier<Node>, Node> bridgeNodes = new HashMap<>();
         Node node = mock(Node.class);
-        InstanceIdentifier<Node> bridgeIid = mock(InstanceIdentifier.class);
+        InstanceIdentifier<Node> bridgeIid = InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+            .child(Node.class, new NodeKey(new NodeId("testNode")));
         bridgeNodes.put(bridgeIid, node);
         PowerMockito.doReturn(bridgeNodes).when(ovsdbControllerUpdateCommand, "getBridgeNodes",
                 any(ReadWriteTransaction.class));
@@ -154,12 +161,13 @@ public class OvsdbControllerUpdateCommandTest {
                 any(ReadWriteTransaction.class));
     }
 
-    @SuppressWarnings("unchecked")
     @Test
     public void testGetBridgeNodes() throws Exception {
         OvsdbConnectionInstance ovsdbConnectionInstance = mock(OvsdbConnectionInstance.class);
         when(ovsdbControllerUpdateCommand.getOvsdbConnectionInstance()).thenReturn(ovsdbConnectionInstance);
-        InstanceIdentifier<Node> connectionIId = mock(InstanceIdentifier.class);
+        InstanceIdentifier<Node> connectionIId = InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+            .child(Node.class, new NodeKey(new NodeId("testConnection")));
         when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(connectionIId);
         PowerMockito.mockStatic(SouthboundUtil.class);
         ReadWriteTransaction transaction = mock(ReadWriteTransaction.class);
@@ -169,7 +177,9 @@ public class OvsdbControllerUpdateCommandTest {
         OvsdbNodeAugmentation ovsdbNodeAugmentation = mock(OvsdbNodeAugmentation.class);
         when(node.augmentation(OvsdbNodeAugmentation.class)).thenReturn(ovsdbNodeAugmentation);
 
-        InstanceIdentifier<Node> bridgeIid = mock(InstanceIdentifier.class);
+        InstanceIdentifier<Node> bridgeIid = InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+            .child(Node.class, new NodeKey(new NodeId("testBridge")));
         ManagedNodeEntry managedNodeEntry = new ManagedNodeEntryBuilder()
                 .setBridgeRef(new OvsdbBridgeRef(bridgeIid))
                 .build();
index 4e45dad67a71547866b42b92aaa4a85d26643261..9c4568c16d9758b9ab3f026139ea78f933859b92 100644 (file)
@@ -5,10 +5,10 @@
  * 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.ovsdb.southbound.transactions.md;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
@@ -38,8 +38,10 @@ import org.opendaylight.ovsdb.schema.openvswitch.Manager;
 import org.opendaylight.ovsdb.schema.openvswitch.OpenVSwitch;
 import org.opendaylight.ovsdb.southbound.OvsdbConnectionInstance;
 import org.opendaylight.ovsdb.southbound.SouthboundMapper;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.BridgeOtherConfigs;
+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.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagerEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagerEntryKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
@@ -49,12 +51,11 @@ import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.powermock.reflect.Whitebox;
 
-
-@PrepareForTest({SouthboundMapper.class, OvsdbManagersRemovedCommand.class})
+@PrepareForTest(OvsdbManagersRemovedCommand.class)
 @RunWith(PowerMockRunner.class)
 public class OvsdbManagersRemovedCommandTest {
-
     private static final String TARGET_COLUMN_DATA = "Target Column Data";
+
     private OvsdbManagersRemovedCommand ovsdbManagersRemovedCommand;
     private Map<UUID, OpenVSwitch> updatedOpenVSwitchRows;
     private Map<UUID, OpenVSwitch> oldOpenVSwitchRows;
@@ -86,11 +87,9 @@ public class OvsdbManagersRemovedCommandTest {
         updatedOpenVSwitchRows.put(uuid, openVSwitch);
         MemberModifier.field(OvsdbManagersRemovedCommand.class, "updatedOpenVSwitchRows")
                 .set(ovsdbManagersRemovedCommand, updatedOpenVSwitchRows);
-        PowerMockito.mockStatic(SouthboundMapper.class);
         OvsdbConnectionInstance ovsdbConnectionInstance = mock(OvsdbConnectionInstance.class);
         when(ovsdbManagersRemovedCommand.getOvsdbConnectionInstance()).thenReturn(ovsdbConnectionInstance);
         when(ovsdbConnectionInstance.getNodeId()).thenReturn(mock(NodeId.class));
-        when(SouthboundMapper.createInstanceIdentifier(any(NodeId.class))).thenReturn(mock(InstanceIdentifier.class));
 
         doNothing().when(ovsdbManagersRemovedCommand).deleteManagers(any(ReadWriteTransaction.class), any(List.class));
         doReturn(mock(List.class)).when(ovsdbManagersRemovedCommand).managerEntriesToRemove(
@@ -103,18 +102,18 @@ public class OvsdbManagersRemovedCommandTest {
             any(OpenVSwitch.class));
     }
 
-    @SuppressWarnings("unchecked")
     @Test
     public void testDeleteManagers() throws Exception {
         ReadWriteTransaction transaction = mock(ReadWriteTransaction.class);
         List<InstanceIdentifier<ManagerEntry>> managerEntryIids = new ArrayList<>();
-        managerEntryIids.add(mock(InstanceIdentifier.class));
+        managerEntryIids.add(SouthboundMapper.createInstanceIdentifier(new NodeId("test"))
+            .augmentation(OvsdbNodeAugmentation.class)
+            .child(ManagerEntry.class, new ManagerEntryKey(new Uri("testUri"))));
         doNothing().when(transaction).delete(any(LogicalDatastoreType.class), any(InstanceIdentifier.class));
-        Whitebox.invokeMethod(ovsdbManagersRemovedCommand, "deleteManagers", transaction, managerEntryIids);
+        ovsdbManagersRemovedCommand.deleteManagers(transaction, managerEntryIids);
         verify(transaction).delete(any(LogicalDatastoreType.class), any(InstanceIdentifier.class));
     }
 
-    @SuppressWarnings("unchecked")
     @Test
     public void testManagerEntriesToRemove() throws Exception {
         OpenVSwitch openVSwitch = mock(OpenVSwitch.class);
@@ -126,6 +125,7 @@ public class OvsdbManagersRemovedCommandTest {
         when(openVSwitch.getUuid()).thenReturn(uuid);
         MemberModifier.field(OvsdbManagersRemovedCommand.class, "oldOpenVSwitchRows").set(ovsdbManagersRemovedCommand,
                 oldOpenVSwitchRows);
+        @SuppressWarnings("unchecked")
         Column<GenericTableSchema, Set<UUID>> column = mock(Column.class);
         Set<UUID> set = new HashSet<>();
         UUID controllerUuid = mock(UUID.class);
@@ -134,14 +134,14 @@ public class OvsdbManagersRemovedCommandTest {
         when(oldOvsdbNode.getManagerOptionsColumn()).thenReturn(column);
         when(column.getData()).thenReturn(set);
         when(openVSwitch.getManagerOptionsColumn()).thenReturn(column);
-        InstanceIdentifier<Node> bridgeIid = mock(InstanceIdentifier.class);
-        List<InstanceIdentifier<BridgeOtherConfigs>> resultManagerEntries = Whitebox
-                .invokeMethod(ovsdbManagersRemovedCommand, "managerEntriesToRemove", bridgeIid, openVSwitch);
+        InstanceIdentifier<Node> bridgeIid = SouthboundMapper.createInstanceIdentifier(new NodeId("test"));
+
+        List<InstanceIdentifier<ManagerEntry>> resultManagerEntries =
+            ovsdbManagersRemovedCommand.managerEntriesToRemove(bridgeIid, openVSwitch);
         assertEquals(ArrayList.class, resultManagerEntries.getClass());
         verify(oldOvsdbNode, times(2)).getManagerOptionsColumn();
     }
 
-    @SuppressWarnings("unchecked")
     @Test
     public void testCheckIfManagerPresentInUpdatedManagersList() throws Exception {
         Manager updatedManager = mock(Manager.class);
@@ -150,13 +150,13 @@ public class OvsdbManagersRemovedCommandTest {
         updatedManagerRows.put(uuid, updatedManager);
         MemberModifier.field(OvsdbManagersRemovedCommand.class, "updatedManagerRows").set(ovsdbManagersRemovedCommand,
                 updatedManagerRows);
+        @SuppressWarnings("unchecked")
         Column<GenericTableSchema, String> column = mock(Column.class);
         Manager removedManager = mock(Manager.class);
         when(removedManager.getTargetColumn()).thenReturn(column);
         when(updatedManager.getTargetColumn()).thenReturn(column);
         when(column.getData()).thenReturn(TARGET_COLUMN_DATA);
 
-        assertEquals(true, Whitebox.invokeMethod(ovsdbManagersRemovedCommand,
-                "checkIfManagerPresentInUpdatedManagersList", removedManager));
+        assertTrue(ovsdbManagersRemovedCommand.checkIfManagerPresentInUpdatedManagersList(removedManager));
     }
 }
index 98de97b6d964d174e3a56db8787030702bcf34b6..bcb0ed8cf6b6a05585500fa8b5980dbb17aa9a64 100644 (file)
@@ -36,12 +36,19 @@ import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
 import org.opendaylight.ovsdb.schema.openvswitch.Manager;
 import org.opendaylight.ovsdb.schema.openvswitch.OpenVSwitch;
 import org.opendaylight.ovsdb.southbound.OvsdbConnectionInstance;
+import org.opendaylight.ovsdb.southbound.SouthboundConstants;
 import org.opendaylight.ovsdb.southbound.SouthboundMapper;
 import org.opendaylight.ovsdb.southbound.SouthboundUtil;
 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.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagerEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagerEntryKey;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
 import org.powermock.api.mockito.PowerMockito;
@@ -118,8 +125,11 @@ public class OvsdbManagersUpdateCommandTest {
         // mock getManagerEntryIid()
         ReadWriteTransaction transaction = mock(ReadWriteTransaction.class);
         Map<UUID, Manager> updatedManagerRows = new HashMap<>();
-        PowerMockito.doReturn(mock(InstanceIdentifier.class)).when(ovsdbManagersUpdateCommand, "getManagerEntryIid",
-                any(ManagerEntry.class));
+        PowerMockito.doReturn(InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+            .child(Node.class, new NodeKey(new NodeId("testNode"))).augmentation(OvsdbNodeAugmentation.class)
+            .child(ManagerEntry.class, new ManagerEntryKey(new Uri("testUri"))))
+            .when(ovsdbManagersUpdateCommand, "getManagerEntryIid", any(ManagerEntry.class));
         doNothing().when(transaction).merge(any(LogicalDatastoreType.class), any(InstanceIdentifier.class),
                 any(ManagerEntry.class));
         Whitebox.invokeMethod(ovsdbManagersUpdateCommand, "updateManagers", transaction, updatedManagerRows,
@@ -133,8 +143,10 @@ public class OvsdbManagersUpdateCommandTest {
     public void testUpdateManagers1() throws Exception {
         OvsdbConnectionInstance ovsdbConnectionInstance = mock(OvsdbConnectionInstance.class);
         when(ovsdbManagersUpdateCommand.getOvsdbConnectionInstance()).thenReturn(ovsdbConnectionInstance);
-        InstanceIdentifier<Node> connectionIId = mock(InstanceIdentifier.class);
-        when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(connectionIId);
+        when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(
+            InstanceIdentifier.create(NetworkTopology.class)
+                .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+                .child(Node.class, new NodeKey(new NodeId("testNode"))));
 
         Optional<Node> ovsdbNode = Optional.of(mock(Node.class));
         PowerMockito.mockStatic(SouthboundUtil.class);
index c6b802e422f62271a5ad0eb46b1cac2e78fcc683..056327525de982840c74713e4e1c33bd0b557c96 100644 (file)
@@ -5,7 +5,6 @@
  * 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.ovsdb.southbound.transactions.md;
 
 import static org.junit.Assert.assertEquals;
@@ -31,6 +30,7 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.ovsdb.lib.message.TableUpdates;
 import org.opendaylight.ovsdb.lib.schema.DatabaseSchema;
 import org.opendaylight.ovsdb.southbound.OvsdbConnectionInstance;
+import org.opendaylight.ovsdb.southbound.SouthboundConstants;
 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.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeRef;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
@@ -39,16 +39,21 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.re
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagedNodeEntryBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagerEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagerEntryKey;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.powermock.reflect.Whitebox;
 
 @RunWith(MockitoJUnitRunner.class)
 public class OvsdbNodeRemoveCommandTest {
-
     private static final long ONE_CONNECTED_MANAGER = 1;
     private static final long ONE_ACTIVE_CONNECTION_IN_PASSIVE_MODE = 1;
+
     private OvsdbNodeRemoveCommand ovsdbNodeRemoveCommand;
 
     @Before
@@ -74,7 +79,10 @@ public class OvsdbNodeRemoveCommandTest {
         FluentFuture<Optional<Node>> ovsdbNodeFuture = mock(FluentFuture.class);
         OvsdbConnectionInstance ovsdbConnectionInstance = mock(OvsdbConnectionInstance.class);
         when(ovsdbNodeRemoveCommand.getOvsdbConnectionInstance()).thenReturn(ovsdbConnectionInstance);
-        when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(mock(InstanceIdentifier.class));
+        when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(
+            InstanceIdentifier.create(NetworkTopology.class)
+                .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+                .child(Node.class, new NodeKey(new NodeId("testConnection"))));
         when(transaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)))
                 .thenReturn(ovsdbNodeFuture);
 
@@ -87,7 +95,9 @@ public class OvsdbNodeRemoveCommandTest {
         doReturn(true).when(ovsdbNodeRemoveCommand).checkIfOnlyConnectedManager(any(OvsdbNodeAugmentation.class));
 
         ManagedNodeEntry managedNode = new ManagedNodeEntryBuilder()
-                .setBridgeRef(new OvsdbBridgeRef(mock(InstanceIdentifier.class)))
+                .setBridgeRef(new OvsdbBridgeRef(InstanceIdentifier.create(NetworkTopology.class)
+                    .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+                    .child(Node.class, new NodeKey(new NodeId("testBridge")))))
                 .build();
 
         when(ovsdbNodeAugmentation.getManagedNodeEntry()).thenReturn(Map.of(managedNode.key(), managedNode));
index 050c9ebcebd53fbbcb392133dd8f55f47b72758e..14c9788b19e5f79174fc78853056a34eee54c273 100644 (file)
@@ -5,7 +5,6 @@
  * 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.ovsdb.southbound.transactions.md;
 
 import static org.junit.Assert.assertEquals;
@@ -38,7 +37,13 @@ import org.opendaylight.ovsdb.schema.openvswitch.Port;
 import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec;
 import org.opendaylight.ovsdb.southbound.OvsdbConnectionInstance;
 import org.opendaylight.ovsdb.southbound.SouthboundMapper;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.powermock.api.mockito.PowerMockito;
 import org.powermock.api.support.membermodification.MemberModifier;
@@ -47,10 +52,10 @@ import org.powermock.modules.junit4.PowerMockRunner;
 import org.powermock.reflect.Whitebox;
 
 @RunWith(PowerMockRunner.class)
-@PrepareForTest({TyperUtils.class, SouthboundMapper.class, InstanceIdentifier.class})
+@PrepareForTest({ TyperUtils.class, SouthboundMapper.class })
 public class OvsdbPortRemoveCommandTest {
-
     private static final String PORT_NAME = "port0";
+
     private OvsdbPortRemoveCommand ovsdbPortRemoveCommand;
 
     @Before
@@ -107,7 +112,9 @@ public class OvsdbPortRemoveCommandTest {
         when(uuidColumn.getData()).thenReturn(uuid);
 
         when(port.getName()).thenReturn(PORT_NAME);
-        InstanceIdentifier<Node> nodeIID = mock(InstanceIdentifier.class);
+        InstanceIdentifier<Node> nodeIID = InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(new TopologyId("testTopo")))
+            .child(Node.class, new NodeKey(new NodeId("testNode2")));
         doReturn(mock(OvsdbConnectionInstance.class)).when(ovsdbPortRemoveCommand).getOvsdbConnectionInstance();
 
         PowerMockito.mockStatic(SouthboundMapper.class);
@@ -120,6 +127,6 @@ public class OvsdbPortRemoveCommandTest {
         doNothing().when(transaction).delete(any(LogicalDatastoreType.class), any(InstanceIdentifier.class));
 
         ovsdbPortRemoveCommand.execute(transaction);
-        verify(transaction).delete(any(LogicalDatastoreType.class), eq(null));
+        verify(transaction).delete(any(LogicalDatastoreType.class), any(InstanceIdentifier.class));
     }
 }
index 4d9fa0af0fd27f53385f0a59d85ba2a07ca4eaa3..e8f06cecac3827fcd4bc2964ffe5aa9813e50239 100644 (file)
@@ -64,6 +64,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.re
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.TrunksBuilder;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
@@ -83,9 +84,8 @@ import org.powermock.modules.junit4.PowerMockRunner;
 import org.powermock.reflect.Whitebox;
 
 @RunWith(PowerMockRunner.class)
-@PrepareForTest({TyperUtils.class, OvsdbPortUpdateCommand.class, SouthboundUtil.class, SouthboundMapper.class})
+@PrepareForTest({ TyperUtils.class, OvsdbPortUpdateCommand.class, SouthboundUtil.class, SouthboundMapper.class })
 public class OvsdbPortUpdateCommandTest {
-
     private static final String OTHER_CONFIG_KEY = "key";
     private static final String OTHER_CONFIG_VALUE = "value";
     private static final String EXTERNAL_ID_KEY = "key";
@@ -141,8 +141,10 @@ public class OvsdbPortUpdateCommandTest {
 
         OvsdbConnectionInstance ovsdbConnectionInstance = mock(OvsdbConnectionInstance.class);
         when(ovsdbPortUpdateCommand.getOvsdbConnectionInstance()).thenReturn(ovsdbConnectionInstance);
-        InstanceIdentifier<Node> connectionIId = mock(InstanceIdentifier.class);
-        when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(connectionIId);
+        when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(
+            InstanceIdentifier.create(NetworkTopology.class)
+                .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+                .child(Node.class, new NodeKey(new NodeId("testNode"))));
 
         //case 1: portUpdatedRows & interfaceOldRows not null, not empty
         Optional<Node> node = Optional.of(mock(Node.class));
@@ -190,7 +192,10 @@ public class OvsdbPortUpdateCommandTest {
         when(tpBuilder.withKey(any(TerminationPointKey.class))).thenReturn(tpBuilder);
         when(tpKey.getTpId()).thenReturn(mock(TpId.class));
         when(tpBuilder.setTpId(any(TpId.class))).thenReturn(tpBuilder);
-        InstanceIdentifier<TerminationPoint> tpPath = mock(InstanceIdentifier.class);
+        InstanceIdentifier<TerminationPoint> tpPath = InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(new TopologyId("testTopo")))
+            .child(Node.class, new NodeKey(new NodeId("testNode")))
+            .child(TerminationPoint.class, new TerminationPointKey(new TpId("testTp")));
         PowerMockito.doReturn(tpPath).when(ovsdbPortUpdateCommand, "getInstanceIdentifier",
                 any(InstanceIdentifier.class), any(Port.class));
 
@@ -275,7 +280,10 @@ public class OvsdbPortUpdateCommandTest {
 
         Node node = mock(Node.class);
         ReadWriteTransaction transaction = mock(ReadWriteTransaction.class);
-        InstanceIdentifier<TerminationPoint> tpPath = mock(InstanceIdentifier.class);
+        InstanceIdentifier<TerminationPoint> tpPath = InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(new TopologyId("testTopo")))
+            .child(Node.class, new NodeKey(new NodeId("testNode")))
+            .child(TerminationPoint.class, new TerminationPointKey(new TpId("testTp")));
 
         Whitebox.invokeMethod(ovsdbPortUpdateCommand, "buildTerminationPoint", transaction, tpPath,
                 tpAugmentationBuilder, node, portEntry);
@@ -307,11 +315,12 @@ public class OvsdbPortUpdateCommandTest {
                 any(OvsdbTerminationPointAugmentationBuilder.class));
     }
 
-    @SuppressWarnings("unchecked")
     @Test
     public void testReadNode() throws Exception {
         ReadWriteTransaction transaction = mock(ReadWriteTransaction.class);
-        InstanceIdentifier<Node> nodePath = mock(InstanceIdentifier.class);
+        InstanceIdentifier<Node> nodePath = InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+            .child(Node.class, new NodeKey(new NodeId("testNode")));
         Optional<Node> node = Optional.of(mock(Node.class));
         FluentFuture<Optional<Node>> fluentFuture = mock(FluentFuture.class);
         when(transaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)))
@@ -320,14 +329,15 @@ public class OvsdbPortUpdateCommandTest {
         assertEquals(node, Whitebox.invokeMethod(ovsdbPortUpdateCommand, "readNode", transaction, nodePath));
     }
 
-    @SuppressWarnings("unchecked")
     @Test
     public void testGetTerminationPointBridge1() throws Exception {
         Node node = mock(Node.class);
         OvsdbNodeAugmentation ovsdbNode = mock(OvsdbNodeAugmentation.class);
         when(node.augmentation(OvsdbNodeAugmentation.class)).thenReturn(ovsdbNode);
 
-        InstanceIdentifier<Node> iidNode = mock(InstanceIdentifier.class);
+        InstanceIdentifier<Node> iidNode = InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+            .child(Node.class, new NodeKey(new NodeId("testNode")));
 
         ManagedNodeEntry managedNodeEntry = new ManagedNodeEntryBuilder()
                 .setBridgeRef(new OvsdbBridgeRef(iidNode))
@@ -454,7 +464,10 @@ public class OvsdbPortUpdateCommandTest {
         OvsdbTerminationPointAugmentationBuilder ovsdbTerminationPointBuilder = mock(
                 OvsdbTerminationPointAugmentationBuilder.class);
         ReadWriteTransaction transaction = mock(ReadWriteTransaction.class);
-        InstanceIdentifier<TerminationPoint> tpPath = mock(InstanceIdentifier.class);
+        InstanceIdentifier<TerminationPoint> tpPath = InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(new TopologyId("testTopo")))
+            .child(Node.class, new NodeKey(new NodeId("testNode")))
+            .child(TerminationPoint.class, new TerminationPointKey(new TpId("testTp")));
         Whitebox.invokeMethod(ovsdbPortUpdateCommand, "updatePort", transaction, node, tpPath, port,
                 ovsdbTerminationPointBuilder);
 
@@ -652,12 +665,17 @@ public class OvsdbPortUpdateCommandTest {
         when(column.getData()).thenReturn(map);
 
         PowerMockito.mockStatic(SouthboundUtil.class);
-        InstanceIdentifier<TerminationPoint> terminationPointIId = mock(InstanceIdentifier.class);
+        InstanceIdentifier<TerminationPoint> terminationPointIId = InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(new TopologyId("testTopo")))
+            .child(Node.class, new NodeKey(new NodeId("testNode")))
+            .child(TerminationPoint.class, new TerminationPointKey(new TpId("testTp")));
 //        PowerMockito
 //                .when((InstanceIdentifier<TerminationPoint>) SouthboundUtil.deserializeInstanceIdentifier(
 //                        any(InstanceIdentifierCodec.class), anyString()))
 //                .thenReturn(terminationPointIId);
-        InstanceIdentifier<Node> bridgeIid = mock(InstanceIdentifier.class);
+        InstanceIdentifier<Node> bridgeIid = InstanceIdentifier.create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+            .child(Node.class, new NodeKey(new NodeId("testNode")));
         assertEquals(terminationPointIId,
                 Whitebox.invokeMethod(ovsdbPortUpdateCommand, "getInstanceIdentifier", bridgeIid, port));
     }
index abac2ae46ea39c064cb5dfe9f4c74c7669c0d044..04e6e4646e23cf9a8a7bc8259066b2e058e808da 100644 (file)
@@ -11,7 +11,6 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
@@ -23,6 +22,7 @@ import java.util.AbstractMap.SimpleImmutableEntry;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.List;
 import java.util.Map.Entry;
 import java.util.Queue;
 import java.util.concurrent.ExecutorService;
@@ -33,9 +33,7 @@ import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.ReadWriteTransaction;
-import org.opendaylight.mdsal.binding.api.Transaction;
 import org.opendaylight.mdsal.binding.api.TransactionChain;
-import org.opendaylight.mdsal.binding.api.TransactionChainListener;
 
 @RunWith(MockitoJUnitRunner.class)
 public class TransactionInvokerImplTest {
@@ -46,14 +44,14 @@ public class TransactionInvokerImplTest {
 
     @Before
     public void setUp() {
-        doReturn(chain).when(db).createTransactionChain(any(TransactionChainListener.class));
+        doReturn(chain).when(db).createTransactionChain();
         doNothing().when(chain).close();
     }
 
     @Test
     public void testConstructor() throws InterruptedException {
         try (TransactionInvokerImpl invoker = new TransactionInvokerImpl(db)) {
-            verify(db).createTransactionChain(any(TransactionChainListener.class));
+            verify(db).createTransactionChain();
             assertNotNull(getInternalState(invoker, "executor"));
         }
     }
@@ -69,17 +67,6 @@ public class TransactionInvokerImplTest {
         assertTrue(inputQueue.contains(command));
     }
 
-    @Test
-    public void testOnTransactionChainFailed() {
-        final TransactionInvokerImpl invoker = new TransactionInvokerImpl(db, new ArrayList<>());
-
-        final Transaction transaction = mock(Transaction.class);
-        invoker.onTransactionChainFailed(chain, transaction, new Throwable());
-
-        final Queue<?> failedQueue = getInternalState(invoker, "failedTransactionQueue");
-        assertEquals(1, failedQueue.size());
-        assertTrue(failedQueue.contains(transaction));
-    }
 
     @Test
     public void testExtractResubmitCommands() {
@@ -94,7 +81,11 @@ public class TransactionInvokerImplTest {
             // Given pending transaction order ...
             ImmutableList.of(entry(tx1, cmd1), entry(tx2, cmd2), entry(tx3, cmd3)),
             // .. if tx2 fails ...
-            Collections.singletonList(tx2));
+            List.of(tx2));
+
+        final Queue<?> failedQueue = getInternalState(invoker, "failedTransactionQueue");
+        assertEquals(1, failedQueue.size());
+        assertTrue(failedQueue.contains(tx2));
 
         // .. we want to replay tx2 and tx3
         assertEquals(ImmutableList.of(cmd2, cmd3), invoker.extractResubmitCommands());
index 7e4f02c6315fdc4e6e62146278abd838b3af4657..c1b21f38d0639f638307f15b3bed2faafd0abbf9 100644 (file)
@@ -237,7 +237,7 @@ public class SouthboundIT extends AbstractMdsalTestBase {
         }
 
         @Override
-        public void onDataTreeChanged(final Collection<DataTreeModification<DataObject>> changes) {
+        public void onDataTreeChanged(final List<DataTreeModification<DataObject>> changes) {
             for (DataTreeModification<DataObject> change: changes) {
                 DataObjectModification<DataObject> rootNode = change.getRootNode();
                 final InstanceIdentifier<DataObject> identifier = change.getRootPath().getRootIdentifier();
index 8edc91d23e7bbe9624f072a986c2af99dc817a0e..97b8c03632b02adecea34d51d0a462b265fa0507 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.ovsdb.utils.mdsal.utils;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import java.util.Collection;
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -18,7 +17,7 @@ import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
@@ -44,7 +43,7 @@ public final class NotifyingDataChangeListener implements AutoCloseable, DataTre
     private final Set<InstanceIdentifier<?>> removedIids = ConcurrentHashMap.newKeySet();
     private final Set<InstanceIdentifier<?>> updatedIids = ConcurrentHashMap.newKeySet();
     private final List<NotifyingDataChangeListener> waitList;
-    private ListenerRegistration<?> listenerRegistration;
+    private Registration listenerRegistration;
     private int mdsalTimeout = MDSAL_TIMEOUT_OPERATIONAL;
     private volatile InstanceIdentifier<?> iid;
     private volatile LogicalDatastoreType type;
@@ -102,20 +101,20 @@ public final class NotifyingDataChangeListener implements AutoCloseable, DataTre
         this.mask = mask;
     }
 
-    @Override
     @SuppressFBWarnings("NN_NAKED_NOTIFY")
-    public void onDataTreeChanged(Collection<DataTreeModification<DataObject>> changes) {
+    @Override
+    public void onDataTreeChanged(List<DataTreeModification<DataObject>> changes) {
         if (!listen) {
             return;
         }
 
         for (DataTreeModification<DataObject> change: changes) {
             DataObjectModification<DataObject> rootNode = change.getRootNode();
-            final InstanceIdentifier<DataObject> identifier = change.getRootPath().getRootIdentifier();
-            switch (rootNode.getModificationType()) {
+            final InstanceIdentifier<DataObject> identifier = change.getRootPath().path();
+            switch (rootNode.modificationType()) {
                 case SUBTREE_MODIFIED:
                 case WRITE:
-                    if (rootNode.getDataBefore() == null) {
+                    if (rootNode.dataBefore() == null) {
                         if ((mask & BIT_CREATE) == BIT_CREATE) {
                             LOG.info("{} DataTreeChanged: created {}", type, identifier);
                             createdIids.add(identifier);
@@ -161,7 +160,7 @@ public final class NotifyingDataChangeListener implements AutoCloseable, DataTre
 
     @SuppressWarnings({ "rawtypes", "unchecked" })
     public void registerDataChangeListener(DataBroker dataBroker) {
-        listenerRegistration = dataBroker.registerDataTreeChangeListener(DataTreeIdentifier.create(type,
+        listenerRegistration = dataBroker.registerDataTreeChangeListener(DataTreeIdentifier.of(type,
                 (InstanceIdentifier)iid), this);
     }
 
index c687b69a7b044e31e3a7d076bfadeceaacd1b6f6..135131628564cafbbce37e7faf5c801c3cea4d6c 100644 (file)
@@ -38,6 +38,7 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.node.attributes.SupportingNodeBuilder;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.node.attributes.SupportingNodeKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
 
 @RunWith(MockitoJUnitRunner.class)
 public class MdsalUtilsAsyncTest extends AbstractDataBrokerTest {
@@ -101,10 +102,8 @@ public class MdsalUtilsAsyncTest extends AbstractDataBrokerTest {
         final SupportingNode supportingNodeBuilder2 = new SupportingNodeBuilder().withKey(
                 new SupportingNodeKey(new NodeId("id2"), TOPOLOGY_TEST)).build();
 
-        final Node data1 = new NodeBuilder(DATA).setSupportingNode(
-                Collections.singletonMap(supportingNodeBuilder1.key(), supportingNodeBuilder1)).build();
-        final Node data2 = new NodeBuilder(DATA).setSupportingNode(
-                Collections.singletonMap(supportingNodeBuilder2.key(), supportingNodeBuilder2)).build();
+        final Node data1 = new NodeBuilder(DATA).setSupportingNode(BindingMap.of(supportingNodeBuilder1)).build();
+        final Node data2 = new NodeBuilder(DATA).setSupportingNode(BindingMap.of(supportingNodeBuilder2)).build();
 
         mdsalUtilsAsync.put(LogicalDatastoreType.CONFIGURATION, TEST_IID, data1, operationDesc);
         assertEquals(data1, readDS());
@@ -115,7 +114,7 @@ public class MdsalUtilsAsyncTest extends AbstractDataBrokerTest {
 
             @Override
             public void onSuccess(final CommitInfo result) {
-                assertEquals(1, readDS().getSupportingNode().size());
+                assertEquals(1, readDS().nonnullSupportingNode().size());
             }
 
             @Override
@@ -147,7 +146,7 @@ public class MdsalUtilsAsyncTest extends AbstractDataBrokerTest {
 
             @Override
             public void onSuccess(final CommitInfo result) {
-                assertEquals(2, readDS().getSupportingNode().size());
+                assertEquals(2, readDS().nonnullSupportingNode().size());
             }
 
             @Override
index 09a9c3a3c8c88dbf75d6addecab619b11fab1a1a..1f53dd1a1ed43a932e054e5f6403e62fb2596c06 100644 (file)
@@ -29,7 +29,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
             <dependency>
                 <groupId>org.opendaylight.controller</groupId>
                 <artifactId>controller-artifacts</artifactId>
-                <version>8.0.4</version>
+                <version>9.0.0</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
index 3bef28ef398fd32e0903970b426ea58f6b2ad8e9..ae1c184e3f29d03275d0cc27948c21b955614e62 100644 (file)
@@ -8,6 +8,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 -->
 <features name="odl-ovsdb-utils-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-ovsdb-utils" version="${project.version}">
-        <feature version="[8,9)">odl-mdsal-broker</feature>
+        <feature version="[9,10)">odl-mdsal-broker</feature>
     </feature>
 </features>
index dde8b6822c60f95406a2337f6b3db980fe4c60b8..c9833bae200739b80a2f810354bcb217d52e8bf0 100644 (file)
@@ -116,10 +116,9 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointKey;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.IdentifiableItem;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.Item;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.binding.Key;
+import org.opendaylight.yangtools.yang.binding.KeyStep;
+import org.opendaylight.yangtools.yang.binding.NodeStep;
 import org.opendaylight.yangtools.yang.binding.util.BindingMap;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.opendaylight.yangtools.yang.common.Uint32;
@@ -1032,9 +1031,9 @@ public class SouthboundUtils {
     // see OVSDB-470 for background
     private static boolean matchesBridgeName(ManagedNodeEntry managedNode, String bridgeName) {
         InstanceIdentifier<?> bridgeIid = managedNode.getBridgeRef().getValue();
-        for (PathArgument bridgeIidPathArg : bridgeIid.getPathArguments()) {
-            if (bridgeIidPathArg instanceof IdentifiableItem<?, ?> identifiableItem) {
-                Key<?> key = identifiableItem.getKey();
+        for (var bridgeIidPathArg : bridgeIid.getPathArguments()) {
+            if (bridgeIidPathArg instanceof KeyStep<?, ?> identifiableItem) {
+                Key<?> key = identifiableItem.key();
                 if (key instanceof NodeKey nodeKey) {
                     if (nodeKey.getNodeId().getValue().contains(bridgeName)) {
                         return true;
@@ -1042,8 +1041,8 @@ public class SouthboundUtils {
                 } else if (key.toString().contains(bridgeName)) {
                     return true;
                 }
-            } else if (bridgeIidPathArg instanceof Item<?> item) {
-                if (item.getType().getName().contains(bridgeName)) {
+            } else if (bridgeIidPathArg instanceof NodeStep<?> item) {
+                if (item.type().getName().contains(bridgeName)) {
                     return true;
                 }
             } else {