Remove SouthboundProvider.db 25/110725/1
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 13 Mar 2024 23:46:01 +0000 (00:46 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 14 Mar 2024 00:53:40 +0000 (01:53 +0100)
We have access to the properly-injected DataBroker, used that instead of
the static field.

Also fixes some cases where we access DTO properties multiple times.

JIRA: OVSDB-468
Change-Id: I328b59c8027e27512ae14d451b372c1a1b664608
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundProvider.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AutoAttachRemovedCommand.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AutoAttachUpdateCommand.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeOperationalState.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointUpdateCommand.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/SouthboundProviderTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeOperationalStateTest.java

index 28b0185e54c051698164b0b12a62d37e2e42dee0..7eabfa87a0f9dd8e0d049bdac5564e56493d3f85 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.ovsdb.southbound;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.util.concurrent.FluentFuture;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -70,18 +72,11 @@ public class SouthboundProvider implements DataTreeChangeListener<Topology>, Aut
     private static final Logger LOG = LoggerFactory.getLogger(SouthboundProvider.class);
     private static final String ENTITY_TYPE = "ovsdb-southbound-provider";
 
-    // FIXME: get rid of this static
-    @SuppressFBWarnings("ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD")
-    private static DataBroker db;
     // FIXME: get rid of this static
     private static List<String> reconcileBridgeInclusionList = List.of();
     // FIXME: get rid of this static
     private static List<String> reconcileBridgeExclusionList = List.of();
 
-    public static DataBroker getDb() {
-        return db;
-    }
-
     public static List<String> getBridgesReconciliationInclusionList() {
         return reconcileBridgeInclusionList;
     }
@@ -107,6 +102,7 @@ public class SouthboundProvider implements DataTreeChangeListener<Topology>, Aut
     private final SystemReadyMonitor systemReadyMonitor;
     private final AtomicBoolean registered = new AtomicBoolean(false);
     private final OvsdbDiagStatusProvider ovsdbStatusProvider;
+    private final DataBroker dataBroker;
 
     private Registration registration;
     private Registration operTopologyRegistration;
@@ -152,8 +148,8 @@ public class SouthboundProvider implements DataTreeChangeListener<Topology>, Aut
                               final boolean skipMonitoringManagerStatus,
                               final List<String> bridgeReconciliationInclusions,
                               final List<String> bridgeReconciliationExclusions) {
+        this.dataBroker = requireNonNull(dataBroker);
         // FIXME: get rid of this static wiring
-        db = dataBroker;
         reconcileBridgeInclusionList = bridgeReconciliationInclusions;
         reconcileBridgeExclusionList = bridgeReconciliationExclusions;
         LOG.debug("skipManagerStatus set to {}", skipMonitoringManagerStatus);
@@ -224,11 +220,11 @@ public class SouthboundProvider implements DataTreeChangeListener<Topology>, Aut
         ovsdbStatusProvider.close();
     }
 
-    private static void initializeOvsdbTopology(final @NonNull LogicalDatastoreType type) {
+    private void initializeOvsdbTopology(final @NonNull LogicalDatastoreType type) {
         InstanceIdentifier<Topology> path = InstanceIdentifier
                 .create(NetworkTopology.class)
                 .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID));
-        ReadWriteTransaction transaction = db.newReadWriteTransaction();
+        ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction();
         FluentFuture<Boolean> ovsdbTp = transaction.exists(type, path);
         try {
             if (!ovsdbTp.get().booleanValue()) {
index 9d0bb1a8ad5ec340290f590bcab686688ef2671a..8037fa63da31ed23925bf06dac2d3ff678ffa56a 100644 (file)
@@ -24,7 +24,6 @@ import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.schema.openvswitch.AutoAttach;
 import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
 import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec;
-import org.opendaylight.ovsdb.southbound.SouthboundProvider;
 import org.opendaylight.ovsdb.southbound.SouthboundUtil;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
@@ -33,7 +32,6 @@ 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.Autoattach;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.AutoattachKey;
 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.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
@@ -61,9 +59,7 @@ public class AutoAttachRemovedCommand implements TransactCommand {
     private static void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
                                 final Map<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> original,
                                 final Map<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> updated) {
-
-        for (final Map.Entry<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> originalEntry :
-                original.entrySet()) {
+        for (var originalEntry : original.entrySet()) {
             final InstanceIdentifier<OvsdbNodeAugmentation> ovsdbNodeIid = originalEntry.getKey();
             final OvsdbNodeAugmentation ovsdbNodeAugmentation = originalEntry.getValue();
             final OvsdbNodeAugmentation deletedOvsdbNodeAugmentation = updated.get(ovsdbNodeIid);
@@ -85,20 +81,20 @@ public class AutoAttachRemovedCommand implements TransactCommand {
                             state.getBridgeNode(ovsdbNodeIid).orElseThrow().augmentation(OvsdbNodeAugmentation.class);
                     final Map<AutoattachKey, Autoattach> currentAutoAttach = currentOvsdbNode.getAutoattach();
                     for (final Autoattach origAutoattach : origAutoattachList.values()) {
-                        deleteAutoAttach(transaction, ovsdbNodeIid, getAutoAttachUuid(currentAutoAttach,
-                            origAutoattach.key()));
+                        deleteAutoAttach(state, transaction, ovsdbNodeIid,
+                            getAutoAttachUuid(currentAutoAttach, origAutoattach.key()));
                     }
                 }
             }
         }
     }
 
-    private static void deleteAutoAttach(final TransactionBuilder transaction,
+    private static void deleteAutoAttach(final BridgeOperationalState state, final TransactionBuilder transaction,
             final InstanceIdentifier<OvsdbNodeAugmentation> ovsdbNodeIid,
             final Uuid autoattachUuid) {
 
         LOG.debug("Received request to delete Autoattach entry {}", autoattachUuid);
-        final OvsdbBridgeAugmentation bridgeAugmentation = getBridge(ovsdbNodeIid, autoattachUuid);
+        final OvsdbBridgeAugmentation bridgeAugmentation = getBridge(state, ovsdbNodeIid, autoattachUuid);
         if (autoattachUuid != null && bridgeAugmentation != null) {
             final UUID uuid = new UUID(autoattachUuid.getValue());
             final AutoAttach autoattach = transaction.getTypedRowSchema(AutoAttach.class);
@@ -134,25 +130,23 @@ public class AutoAttachRemovedCommand implements TransactCommand {
         return null;
     }
 
-    private static OvsdbBridgeAugmentation getBridge(final InstanceIdentifier<OvsdbNodeAugmentation> key,
-            final Uuid aaUuid) {
+    private static OvsdbBridgeAugmentation getBridge(final BridgeOperationalState state,
+            final InstanceIdentifier<OvsdbNodeAugmentation> key, final Uuid aaUuid) {
         if (aaUuid == null) {
             return null;
         }
-        OvsdbBridgeAugmentation bridge = null;
-        final InstanceIdentifier<Node> nodeIid = key.firstIdentifierOf(Node.class);
-        try (ReadTransaction transaction = SouthboundProvider.getDb().newReadOnlyTransaction()) {
-            final Optional<Node> nodeOptional = SouthboundUtil.readNode(transaction, nodeIid);
+        try (ReadTransaction transaction = state.dataBroker().newReadOnlyTransaction()) {
+            final var nodeOptional = SouthboundUtil.readNode(transaction, key.firstIdentifierOf(Node.class));
             if (nodeOptional.isPresent()) {
-                final Map<ManagedNodeEntryKey, ManagedNodeEntry> managedNodes =
-                        nodeOptional.orElseThrow().augmentation(OvsdbNodeAugmentation.class).getManagedNodeEntry();
+                final var managedNodes = nodeOptional.orElseThrow()
+                    .augmentation(OvsdbNodeAugmentation.class).getManagedNodeEntry();
                 for (final ManagedNodeEntry managedNode : managedNodes.values()) {
                     final OvsdbBridgeRef ovsdbBridgeRef = managedNode.getBridgeRef();
                     final InstanceIdentifier<OvsdbBridgeAugmentation> brIid = ovsdbBridgeRef.getValue()
                             .firstIdentifierOf(Node.class).augmentation(OvsdbBridgeAugmentation.class);
                     final Optional<OvsdbBridgeAugmentation> optionalBridge =
                             transaction.read(LogicalDatastoreType.OPERATIONAL, brIid).get();
-                    bridge = optionalBridge.orElseThrow();
+                    OvsdbBridgeAugmentation bridge = optionalBridge.orElseThrow();
                     if (bridge != null && bridge.getAutoAttach() != null
                             && bridge.getAutoAttach().equals(aaUuid)) {
                         return bridge;
@@ -160,7 +154,7 @@ public class AutoAttachRemovedCommand implements TransactCommand {
                 }
             }
         } catch (InterruptedException | ExecutionException e) {
-            LOG.warn("Error reading from datastore",e);
+            LOG.warn("Error reading from datastore", e);
         }
         return null;
     }
index d753b46169f4940cb0be17c4c9553e73b3ca324b..8c6833a87c27e0919fca7652259e2d0b9d95d70f 100644 (file)
@@ -11,11 +11,9 @@ import static org.opendaylight.ovsdb.lib.operations.Operations.op;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Optional;
+import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.binding.api.ReadTransaction;
@@ -28,7 +26,6 @@ import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
 import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec;
 import org.opendaylight.ovsdb.southbound.SouthboundConstants;
 import org.opendaylight.ovsdb.southbound.SouthboundMapper;
-import org.opendaylight.ovsdb.southbound.SouthboundProvider;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
@@ -66,11 +63,9 @@ public class AutoAttachUpdateCommand implements TransactCommand {
         execute(transaction, state, TransactUtils.extractCreatedOrUpdated(modifications, OvsdbNodeAugmentation.class));
     }
 
-    private void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
-                         final Map<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> createdOrUpdated) {
-
-        for (final Entry<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> ovsdbNodeEntry
-                : createdOrUpdated.entrySet()) {
+    private static void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
+            final Map<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> createdOrUpdated) {
+        for (var ovsdbNodeEntry : createdOrUpdated.entrySet()) {
             updateAutoAttach(transaction, state, ovsdbNodeEntry.getKey(), ovsdbNodeEntry.getValue());
         }
     }
@@ -144,45 +139,44 @@ public class AutoAttachUpdateCommand implements TransactCommand {
                     final String namedUuid = SouthboundMapper.getRandomUuid();
                     final Bridge bridge = transaction.getTypedRowWrapper(Bridge.class);
                     transaction.add(op.insert(autoAttachWrapper).withId(namedUuid));
-                    final OvsdbBridgeAugmentation ovsdbBridgeAugmentation = getBridge(iid, bridgeUri);
+
+                    final var ovsdbBridgeAugmentation = getBridge(state, iid, bridgeUri);
                     if (ovsdbBridgeAugmentation != null) {
-                        bridge.setName(ovsdbBridgeAugmentation.getBridgeName().getValue());
-                        bridge.setAutoAttach(Collections.singleton(new UUID(namedUuid)));
+                        final var bridgeName = ovsdbBridgeAugmentation.getBridgeName().getValue();
+                        bridge.setName(bridgeName);
+                        bridge.setAutoAttach(Set.of(new UUID(namedUuid)));
                         LOG.trace("Create Autoattach table {}, and mutate the bridge {}",
-                                autoAttach.getAutoattachId(), getBridge(iid, bridgeUri).getBridgeName().getValue());
+                                autoAttach.getAutoattachId(), bridgeName);
                         transaction.add(op.mutate(bridge)
                                 .addMutation(bridge.getAutoAttachColumn().getSchema(),
                                         Mutator.INSERT,bridge.getAutoAttachColumn().getData())
                                 .where(bridge.getNameColumn().getSchema()
                                         .opEqual(bridge.getNameColumn().getData())).build());
-                        transaction.add(
-                                op.comment("Bridge: Mutating " + ovsdbBridgeAugmentation.getBridgeName().getValue()
-                                + " to add autoattach column " + namedUuid));
+                        transaction.add(op.comment(
+                            "Bridge: Mutating " + bridgeName + " to add autoattach column " + namedUuid));
                     }
                 }
             }
         }
     }
 
-    private static OvsdbBridgeAugmentation getBridge(final InstanceIdentifier<OvsdbNodeAugmentation> key,
-            final Uri bridgeUri) {
-        final InstanceIdentifier<OvsdbBridgeAugmentation> bridgeIid = InstanceIdentifier
-                .create(NetworkTopology.class)
+    private static OvsdbBridgeAugmentation getBridge(final BridgeOperationalState state,
+            final InstanceIdentifier<OvsdbNodeAugmentation> key, final Uri bridgeUri) {
+        final InstanceIdentifier<OvsdbBridgeAugmentation> bridgeIid = InstanceIdentifier.create(NetworkTopology.class)
                 .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
                 .child(Node.class, new NodeKey(new NodeId(bridgeUri)))
                 .augmentation(OvsdbBridgeAugmentation.class);
 
-        OvsdbBridgeAugmentation bridge = null;
-        try (ReadTransaction transaction = SouthboundProvider.getDb().newReadOnlyTransaction()) {
-            final Optional<OvsdbBridgeAugmentation> bridgeOptional =
-                    transaction.read(LogicalDatastoreType.OPERATIONAL, bridgeIid).get();
+        try (ReadTransaction transaction = state.dataBroker().newReadOnlyTransaction()) {
+            final var bridgeOptional = transaction.read(LogicalDatastoreType.OPERATIONAL, bridgeIid).get();
             if (bridgeOptional.isPresent()) {
-                bridge = bridgeOptional.orElseThrow();
+                return bridgeOptional.orElseThrow();
             }
+            LOG.debug("No bridge found for {}", bridgeUri);
         } catch (InterruptedException | ExecutionException e) {
             LOG.warn("Error reading from datastore", e);
         }
-        return bridge;
+        return null;
     }
 
     private static Uuid getAutoAttachUuid(final Map<AutoattachKey, Autoattach> currentAutoAttach,
index c04d4a2fb13512e1fd8b2a59eb27487de86bc393..a7b8fd160ae9980d6b3ec69ac5d7c82a92b66aca 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
+import static java.util.Objects.requireNonNull;
+
 import java.util.Collection;
 import java.util.Map;
 import java.util.Optional;
@@ -29,20 +31,33 @@ import org.slf4j.LoggerFactory;
 
 public class BridgeOperationalState {
     private static final Logger LOG = LoggerFactory.getLogger(BridgeOperationalState.class);
-    private final DataBroker db;
 
-    public BridgeOperationalState(DataBroker db, DataChangeEvent changes) {
-        this.db = db;
+    private final DataBroker dataBroker;
+
+    public BridgeOperationalState(DataBroker dataBroker) {
+        this.dataBroker = requireNonNull(dataBroker);
+    }
+
+    @Deprecated
+    public BridgeOperationalState(DataBroker dataBroker, DataChangeEvent changes) {
+        this.dataBroker = requireNonNull(dataBroker);
+    }
+
+    @Deprecated
+    public BridgeOperationalState(DataBroker dataBroker, Collection<DataTreeModification<Node>> changes) {
+        this.dataBroker = requireNonNull(dataBroker);
     }
 
-    public BridgeOperationalState(DataBroker db, Collection<DataTreeModification<Node>> changes) {
-        this.db = db;
+    // FIXME: this instance should not be exposed and users just use methods of this class
+    @Deprecated
+    final DataBroker dataBroker() {
+        return dataBroker;
     }
 
     @SuppressWarnings("IllegalCatch")
     public Optional<Node> getBridgeNode(InstanceIdentifier<?> iid) {
         InstanceIdentifier<Node> nodeIid = iid.firstIdentifierOf(Node.class);
-        try (ReadTransaction transaction = db.newReadOnlyTransaction()) {
+        try (ReadTransaction transaction = dataBroker.newReadOnlyTransaction()) {
             return SouthboundUtil.readNode(transaction, nodeIid);
         } catch (Exception exp) {
             LOG.error("Error in getting the brideNode for {}", iid, exp);
index 883b3833f85b66f45e41158aadd7b069435487fd..a90c5cea6368066c7a7d091bf5371034c0fe6c9b 100644 (file)
@@ -30,7 +30,6 @@ import org.opendaylight.ovsdb.schema.openvswitch.Interface;
 import org.opendaylight.ovsdb.schema.openvswitch.Port;
 import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec;
 import org.opendaylight.ovsdb.southbound.SouthboundConstants;
-import org.opendaylight.ovsdb.southbound.SouthboundProvider;
 import org.opendaylight.ovsdb.southbound.SouthboundUtil;
 import org.opendaylight.ovsdb.utils.yang.YangUtils;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
@@ -62,7 +61,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class TerminationPointUpdateCommand implements TransactCommand {
-
     private static final Logger LOG = LoggerFactory.getLogger(TerminationPointUpdateCommand.class);
 
     @Override
@@ -122,7 +120,7 @@ public class TerminationPointUpdateCommand implements TransactCommand {
                 OvsdbBridgeAugmentation operBridge = ovsdbBridgeOptional.orElseThrow();
                 if (operBridge != null) {
                     Port port = transaction.getTypedRowWrapper(Port.class);
-                    updatePort(terminationPoint, port, operBridge, opendaylightIid);
+                    updatePort(state, terminationPoint, port, operBridge, opendaylightIid);
                     Port extraPort = transaction.getTypedRowWrapper(Port.class);
                     extraPort.setName("");
                     transaction.add(op.update(port)
@@ -149,26 +147,28 @@ public class TerminationPointUpdateCommand implements TransactCommand {
         updateInterfacePolicing(terminationPoint, ovsInterface);
     }
 
-    private static void updatePort(final OvsdbTerminationPointAugmentation terminationPoint,
-            final Port port, final OvsdbBridgeAugmentation operBridge, final String opendaylightIid) {
+    private static void updatePort(final BridgeOperationalState state,
+            final OvsdbTerminationPointAugmentation terminationPoint, final Port port,
+            final OvsdbBridgeAugmentation operBridge, final String opendaylightIid) {
         updatePortOtherConfig(terminationPoint, port);
         updatePortVlanTag(terminationPoint, port);
         updatePortVlanTrunk(terminationPoint, port);
         updatePortVlanMode(terminationPoint, port);
         updatePortExternalIds(terminationPoint, port, opendaylightIid);
-        updatePortQos(terminationPoint, port, operBridge);
+        updatePortQos(state, terminationPoint, port, operBridge);
     }
 
-    private static void updatePortQos(final OvsdbTerminationPointAugmentation terminationPoint,
-            final Port port, final OvsdbBridgeAugmentation operBridge) {
-
-        Set<UUID> uuidSet = new HashSet<>();
+    private static void updatePortQos(final BridgeOperationalState state,
+            final OvsdbTerminationPointAugmentation terminationPoint, final Port port,
+            final OvsdbBridgeAugmentation operBridge) {
+        final var uuidSet = new HashSet<UUID>();
 
         // First check if QosEntry is present and use that
-        if (terminationPoint.getQosEntry() != null && !terminationPoint.getQosEntry().isEmpty()) {
-            OvsdbQosRef qosRef = terminationPoint.getQosEntry().values().iterator().next().getQosRef();
+        final var tpQosEntry = terminationPoint.getQosEntry();
+        if (tpQosEntry != null && !tpQosEntry.isEmpty()) {
+            OvsdbQosRef qosRef = tpQosEntry.values().iterator().next().getQosRef();
             Uri qosId = qosRef.getValue().firstKeyOf(QosEntries.class).getQosId();
-            OvsdbNodeAugmentation operNode = getOperNode(operBridge);
+            OvsdbNodeAugmentation operNode = getOperNode(state, operBridge);
             if (operNode != null) {
                 Map<QosEntriesKey, QosEntries> entries = operNode.getQosEntries();
                 if (entries != null) {
@@ -187,11 +187,12 @@ public class TerminationPointUpdateCommand implements TransactCommand {
     }
 
     @SuppressWarnings("IllegalCatch")
-    private static OvsdbNodeAugmentation getOperNode(final OvsdbBridgeAugmentation operBridge) {
+    private static OvsdbNodeAugmentation getOperNode(final BridgeOperationalState state,
+            final OvsdbBridgeAugmentation operBridge) {
         @SuppressWarnings("unchecked")
         InstanceIdentifier<Node> iidNode = (InstanceIdentifier<Node>)operBridge.getManagedBy().getValue();
         OvsdbNodeAugmentation operNode = null;
-        try (ReadTransaction transaction = SouthboundProvider.getDb().newReadOnlyTransaction()) {
+        try (ReadTransaction transaction = state.dataBroker().newReadOnlyTransaction()) {
             Optional<Node> nodeOptional = SouthboundUtil.readNode(transaction, iidNode);
             if (nodeOptional.isPresent()) {
                 operNode = nodeOptional.orElseThrow().augmentation(OvsdbNodeAugmentation.class);
index 029a7a74ae1dd001d6c078738679bb1ca253cf1f..db73da98b4582792bc19d37efe480a4dc0a4717d 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.ovsdb.southbound;
 
-import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
@@ -20,6 +19,7 @@ import static org.opendaylight.infrautils.ready.testutils.TestSystemReadyMonitor
 
 import com.google.common.base.Stopwatch;
 import com.google.common.util.concurrent.Uninterruptibles;
+import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import org.junit.Before;
@@ -68,8 +68,8 @@ public class SouthboundProviderTest extends AbstractConcurrentDataBrokerTest {
     @Test
     public void testInit() throws CandidateAlreadyRegisteredException {
         // Indicate that this is the owner
-        when(entityOwnershipService.getOwnershipState(any(Entity.class))).thenReturn(
-                java.util.Optional.of(EntityOwnershipState.from(true, true)));
+        when(entityOwnershipService.getOwnershipState(any(Entity.class)))
+            .thenReturn(Optional.of(EntityOwnershipState.from(true, true)));
 
         try (SouthboundProvider southboundProvider = new SouthboundProvider(
                 getDataBroker(),
@@ -92,8 +92,8 @@ public class SouthboundProviderTest extends AbstractConcurrentDataBrokerTest {
     @Test
     public void testInitWithClose() throws CandidateAlreadyRegisteredException {
         // Indicate that this is the owner
-        when(entityOwnershipService.getOwnershipState(any(Entity.class))).thenReturn(
-                java.util.Optional.of(EntityOwnershipState.from(true, true)));
+        when(entityOwnershipService.getOwnershipState(any(Entity.class)))
+            .thenReturn(Optional.of(EntityOwnershipState.from(true, true)));
 
         try (SouthboundProvider southboundProvider = new SouthboundProvider(
                 getDataBroker(),
@@ -116,28 +116,10 @@ public class SouthboundProviderTest extends AbstractConcurrentDataBrokerTest {
         }
     }
 
-    @Test
-    public void testGetDb() {
-        when(entityOwnershipService.getOwnershipState(any(Entity.class))).thenReturn(
-            java.util.Optional.of(EntityOwnershipState.from(true, true)));
-
-        try (SouthboundProvider southboundProvider = new SouthboundProvider(
-                getDataBroker(),
-                entityOwnershipService,
-                Mockito.mock(OvsdbConnection.class),
-                Mockito.mock(DOMSchemaService.class),
-                Mockito.mock(BindingNormalizedNodeSerializer.class),
-                new TestSystemReadyMonitor(IMMEDIATE),
-                diagStatusService)) {
-
-            assertEquals(getDataBroker(), SouthboundProvider.getDb());
-        }
-    }
-
     @Test
     public void testHandleOwnershipChange() throws ExecutionException, InterruptedException {
         when(entityOwnershipService.getOwnershipState(any(Entity.class))).thenReturn(
-            java.util.Optional.of(EntityOwnershipState.from(false, true)));
+            Optional.of(EntityOwnershipState.from(false, true)));
         Entity entity = new Entity("ovsdb-southbound-provider", "ovsdb-southbound-provider");
         KeyedInstanceIdentifier<Topology, TopologyKey> topologyIid = InstanceIdentifier
                 .create(NetworkTopology.class)
index 41593d5370652af7e828353b930a889e314c29f6..98af8213cc65eb49265643bdca33589a1be06a4b 100644 (file)
@@ -13,10 +13,10 @@ import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
-import static org.powermock.reflect.Whitebox.getField;
 
 import java.util.Map;
 import java.util.Optional;
@@ -24,7 +24,6 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.ReadTransaction;
@@ -53,12 +52,14 @@ public class BridgeOperationalStateTest {
             .child(Topology.class).child(Node.class);
     private final Node brNode = new NodeBuilder().setNodeId(new NodeId("bar")).build();
 
-    @Mock private BridgeOperationalState briOperationState;
-    @Mock private DataBroker db;
-    @Mock ReadTransaction mockReadTx;
+    @Mock
+    private BridgeOperationalState briOperationState;
+    @Mock
+    private DataBroker db;
+    @Mock
+    private ReadTransaction mockReadTx;
     private InstanceIdentifier<ProtocolEntry> protocolEntry;
     private InstanceIdentifier<Node> iidNode;
-    private Map<InstanceIdentifier<Node>, Node> operationalNodes;
 
     @Before
     public void setUp() throws Exception {
@@ -67,12 +68,10 @@ public class BridgeOperationalStateTest {
                 .child(Node.class, new NodeKey(nd.getNodeId()));
         protocolEntry = InstanceIdentifier.create(NetworkTopology.class).child(Topology.class).child(Node.class)
                 .augmentation(OvsdbBridgeAugmentation.class).child(ProtocolEntry.class);
-
-        briOperationState = mock(BridgeOperationalState.class, Mockito.CALLS_REAL_METHODS);
-
-        getField(BridgeOperationalState.class,"db").set(briOperationState, db);
         doReturn(mockReadTx).when(db).newReadOnlyTransaction();
         OvsdbOperGlobalListener.OPER_NODE_CACHE.put(nodeIid, brNode);
+
+        briOperationState = spy(new BridgeOperationalState(db));
     }
 
     @Test