From abed5697526843141bd1e7885d21b54baa127a6e Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 1 May 2020 09:37:10 +0200 Subject: [PATCH] Update MRI projects for Aluminium This bumps versions to the following: - odlparent-7.0.1 - yangtools-5.0.1 - mdsal-6.0.0 - controller-2.0.0 These updates imply that an unkeyed list cannot be deleted by setting it to empty its parent node and issuing a merge() of that parent node. This is used only in two places -- hence we update them. We also get access to proper Map view of keyed lists, which makes a number of operations faster, as we can just defer to a lookup instead of iterating of the entire list. Finally features and build system is updated to not leak javax.annotation and upstream bundles into runtime. Change-Id: I78207959d9f62d79af83f57c859f5fbd393077aa Signed-off-by: Robert Varga --- commons/binding-parent/pom.xml | 16 +- commons/it/pom.xml | 4 +- commons/pom.xml | 2 +- .../hwvtepsouthbound-artifacts/pom.xml | 2 +- .../features/pom.xml | 2 +- .../odl-ovsdb-hwvtepsouthbound-api/pom.xml | 4 +- .../odl-ovsdb-hwvtepsouthbound-rest/pom.xml | 2 +- .../odl-ovsdb-hwvtepsouthbound-test/pom.xml | 2 +- .../odl-ovsdb-hwvtepsouthbound-ui/pom.xml | 2 +- .../odl-ovsdb-hwvtepsouthbound/pom.xml | 12 +- .../hwvtepsouthbound-features/pom.xml | 2 +- .../hwvtepsouthbound-impl/pom.xml | 3 +- .../hwvtepsouthbound/HwvtepDeviceInfo.java | 4 - .../HwvtepOperGlobalListener.java | 1 - .../HwvtepSouthboundProvider.java | 2 +- .../HwvtepSouthboundProviderConfigurator.java | 1 - .../HwvtepSouthboundUtil.java | 5 +- .../InstanceIdentifierCodec.java | 23 +- .../cli/HwvtepCacheDisplayCmd.java | 1 - .../GlobalConfigOperationalChangeGetter.java | 38 +- .../HwvtepReconciliationTask.java | 12 +- .../SwitchConfigOperationalChangeGetter.java | 41 +- .../transact/AbstractTransactCommand.java | 100 ++--- .../transact/DependencyQueue.java | 2 - .../transact/EmptyDependencyGetter.java | 2 - .../transact/HwvtepOperationalState.java | 175 ++++----- .../transact/LogicalRouterRemoveCommand.java | 6 +- .../transact/LogicalRouterUpdateCommand.java | 15 +- .../transact/LogicalSwitchRemoveCommand.java | 11 +- .../LogicalSwitchUcastsRemoveCommand.java | 36 +- .../transact/LogicalSwitchUpdateCommand.java | 6 +- .../transact/McastMacsLocalRemoveCommand.java | 7 +- .../transact/McastMacsLocalUpdateCommand.java | 6 +- .../McastMacsRemoteRemoveCommand.java | 6 +- .../McastMacsRemoteUpdateCommand.java | 9 +- .../transact/PhysicalPortRemoveCommand.java | 36 +- .../transact/PhysicalPortUpdateCommand.java | 104 +++--- .../transact/PhysicalSwitchUpdateCommand.java | 114 +++--- .../transact/PlainLogicalSwitchRemoveCmd.java | 29 +- .../transact/TunnelRemoveCommand.java | 2 - .../transact/TunnelUpdateCommand.java | 2 - .../transact/UcastMacsLocalRemoveCommand.java | 6 +- .../transact/UcastMacsLocalUpdateCommand.java | 6 +- .../UcastMacsRemoteRemoveCommand.java | 37 +- .../UcastMacsRemoteUpdateCommand.java | 14 +- .../transact/UnMetDependencyGetter.java | 2 - .../md/HwvtepGlobalRemoveCommand.java | 15 +- .../md/HwvtepMcastMacsLocalUpdateCommand.java | 36 +- .../HwvtepMcastMacsRemoteUpdateCommand.java | 50 ++- .../HwvtepOperationalCommandAggregator.java | 2 - .../md/HwvtepPhysicalPortUpdateCommand.java | 17 +- .../md/HwvtepPhysicalSwitchUpdateCommand.java | 17 +- .../DataChangeListenerTestBase.java | 12 +- .../HwvtepDataChangeListenerTest.java | 16 +- .../TransactionInvokerImplTest.java | 28 +- .../hwvtepsouthbound-karaf/pom.xml | 2 +- hwvtepsouthbound/pom.xml | 2 +- library/artifacts/pom.xml | 2 +- library/features/features/pom.xml | 2 +- library/features/odl-ovsdb-library/pom.xml | 11 +- .../src/main/feature/feature.xml | 3 +- library/features/pom.xml | 2 +- library/impl/pom.xml | 3 +- .../impl/StalePassiveConnectionService.java | 4 +- .../StalePassiveConnectionServiceTest.java | 2 - library/karaf/pom.xml | 2 +- library/pom.xml | 2 +- pom.xml | 2 +- .../ovsdb/schema/hardwarevtep/ACLEntry.java | 2 - .../ovsdb/schema/hardwarevtep/Global.java | 2 - .../ovsdb/schema/openvswitch/AutoAttach.java | 2 - .../ovsdb/schema/openvswitch/Bridge.java | 2 - .../ovsdb/schema/openvswitch/Capability.java | 2 - schemas/pom.xml | 2 +- southbound/pom.xml | 2 +- southbound/southbound-artifacts/pom.xml | 2 +- .../southbound-features/features/pom.xml | 2 +- .../odl-ovsdb-southbound-api/pom.xml | 4 +- .../odl-ovsdb-southbound-impl-rest/pom.xml | 2 +- .../odl-ovsdb-southbound-impl-ui/pom.xml | 2 +- .../odl-ovsdb-southbound-impl/pom.xml | 48 +-- .../src/main/feature/feature.xml | 2 +- .../odl-ovsdb-southbound-test/pom.xml | 2 +- southbound/southbound-features/pom.xml | 2 +- southbound/southbound-impl/pom.xml | 3 +- .../southbound/InstanceIdentifierCodec.java | 11 +- .../southbound/OvsdbConnectionInstance.java | 12 +- .../southbound/OvsdbConnectionManager.java | 6 +- .../southbound/OvsdbMonitorCallback.java | 3 +- .../southbound/OvsdbOperGlobalListener.java | 6 +- .../ovsdb/southbound/SouthboundConstants.java | 1 - .../ovsdb/southbound/SouthboundMapper.java | 52 +-- .../ovsdb/southbound/SouthboundProvider.java | 12 +- .../ovsdb/southbound/SouthboundUtil.java | 14 +- .../transact/AutoAttachRemovedCommand.java | 37 +- .../transact/AutoAttachUpdateCommand.java | 38 +- .../transact/BridgeOperationalState.java | 37 +- .../transact/OvsdbNodeUpdateCommand.java | 5 +- .../ovsdb/transact/QosRemovedCommand.java | 34 +- .../ovsdb/transact/QosUpdateCommand.java | 33 +- .../ovsdb/transact/QueueRemovedCommand.java | 42 +-- .../ovsdb/transact/QueueUpdateCommand.java | 15 +- .../TerminationPointCreateCommand.java | 46 +-- .../TerminationPointUpdateCommand.java | 39 +- .../BridgeConfigReconciliationTask.java | 17 +- ...minationPointConfigReconciliationTask.java | 28 +- .../md/OvsdbAutoAttachRemovedCommand.java | 11 +- .../md/OvsdbAutoAttachUpdateCommand.java | 2 - .../md/OvsdbBridgeRemovedCommand.java | 2 - .../md/OvsdbBridgeUpdateCommand.java | 2 +- .../md/OvsdbControllerUpdateCommand.java | 6 +- .../md/OvsdbInitialPortUpdateCommand.java | 3 - .../md/OvsdbNodeRemoveCommand.java | 14 +- .../md/OvsdbPortUpdateCommand.java | 25 +- .../md/OvsdbQosRemovedCommand.java | 13 +- .../md/OvsdbQosUpdateCommand.java | 10 +- .../md/OvsdbQueueRemovedCommand.java | 13 +- .../InstanceIdentifierCodecTest.java | 12 +- .../OvsdbDataTreeChangeListenerTest.java | 4 +- .../southbound/SouthboundMapperTest.java | 19 +- .../transact/BridgeOperationalStateTest.java | 18 +- .../transact/OvsdbNodeUpdateCommandTest.java | 30 +- .../BridgeConfigReconciliationTaskTest.java | 59 ++- .../md/OpenVSwitchUpdateCommandTest.java | 24 +- .../md/OvsdbAutoAttachRemovedCommandTest.java | 6 +- .../md/OvsdbBridgeUpdateCommandTest.java | 13 +- .../md/OvsdbControllerUpdateCommandTest.java | 13 +- .../md/OvsdbNodeRemoveCommandTest.java | 46 ++- .../md/OvsdbPortUpdateCommandTest.java | 53 ++- southbound/southbound-it/pom.xml | 1 - .../ovsdb/southbound/it/SouthboundIT.java | 351 +++++++++--------- southbound/southbound-karaf/pom.xml | 2 +- .../ovsdb/utils/config/ConfigProperties.java | 2 - utils/mdsal-utils/pom.xml | 14 +- .../mdsal/utils/ControllerMdsalUtils.java | 4 +- .../utils/ControllerMdsalUtilsAsync.java | 22 +- .../ovsdb/utils/mdsal/utils/MdsalUtils.java | 4 +- .../utils/mdsal/utils/MdsalUtilsAsync.java | 13 +- .../ovsdb/utils/mdsal/utils/Scheduler.java | 1 - .../utils/mdsal/utils/ShardStatusMonitor.java | 5 +- .../mdsal/utils/ControllerMdsalUtilsTest.java | 9 +- .../utils/mdsal/utils/MdsalUtilsTest.java | 9 +- utils/odl-ovsdb-utils/pom.xml | 24 +- utils/ovsdb-it-utils/pom.xml | 1 - .../utils/ovsdb/it/utils/OvsdbItUtils.java | 2 +- utils/pom.xml | 2 +- .../southbound/utils/SouthboundUtils.java | 67 ++-- utils/yang-utils/pom.xml | 4 + .../ovsdb/utils/yang/YangUtils.java | 61 ++- 149 files changed, 1343 insertions(+), 1370 deletions(-) diff --git a/commons/binding-parent/pom.xml b/commons/binding-parent/pom.xml index 3bd376f15..dcfef0387 100644 --- a/commons/binding-parent/pom.xml +++ b/commons/binding-parent/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.mdsal binding-parent - 5.0.9 + 6.0.0 @@ -22,13 +22,6 @@ - org.opendaylight.infrautils infrautils-artifacts @@ -43,6 +36,13 @@ pom import + + org.opendaylight.aaa + aaa-artifacts + 0.12.0-SNAPSHOT + pom + import + diff --git a/commons/it/pom.xml b/commons/it/pom.xml index 14f6c1ce2..3c9b36899 100644 --- a/commons/it/pom.xml +++ b/commons/it/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.controller mdsal-it-parent - 1.11.0 + 2.0.0 @@ -70,7 +70,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.mdsal mdsal-artifacts - 5.0.9 + 6.0.0 pom import diff --git a/commons/pom.xml b/commons/pom.xml index d232f8617..4021745fd 100644 --- a/commons/pom.xml +++ b/commons/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/hwvtepsouthbound/hwvtepsouthbound-artifacts/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-artifacts/pom.xml index bd5ed7570..ba4a43276 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-artifacts/pom.xml +++ b/hwvtepsouthbound/hwvtepsouthbound-artifacts/pom.xml @@ -13,7 +13,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/features/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/features/pom.xml index ddf2ca44c..80258a291 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-features/features/pom.xml +++ b/hwvtepsouthbound/hwvtepsouthbound-features/features/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent feature-repo-parent - 6.0.4 + 7.0.1 diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-api/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-api/pom.xml index 5e18dd24f..fa28f48b1 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-api/pom.xml +++ b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-api/pom.xml @@ -5,7 +5,7 @@ org.opendaylight.odlparent single-feature-parent - 6.0.4 + 7.0.1 @@ -22,7 +22,7 @@ org.opendaylight.mdsal mdsal-artifacts - 5.0.9 + 6.0.0 pom import diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-rest/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-rest/pom.xml index e7f30f77b..796a40222 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-rest/pom.xml +++ b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-rest/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent single-feature-parent - 6.0.4 + 7.0.1 diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-test/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-test/pom.xml index 5b1dc53a8..f288838ff 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-test/pom.xml +++ b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-test/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent single-feature-parent - 6.0.4 + 7.0.1 diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-ui/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-ui/pom.xml index 4e13d9086..1a1544a8a 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-ui/pom.xml +++ b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-ui/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent single-feature-parent - 6.0.4 + 7.0.1 diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound/pom.xml index e152eb37c..7d5a2ae4c 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound/pom.xml +++ b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent single-feature-parent - 6.0.4 + 7.0.1 @@ -26,13 +26,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html ODL :: ovsdb :: ${project.artifactId} - + ${project.groupId} odl-ovsdb-hwvtepsouthbound-api diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/pom.xml index 6729095af..e61aafbac 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-features/pom.xml +++ b/hwvtepsouthbound/hwvtepsouthbound-features/pom.xml @@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 org.opendaylight.ovsdb diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-impl/pom.xml index 0be1b80a6..3f107a79f 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/pom.xml +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/pom.xml @@ -45,6 +45,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html javax.inject javax.inject + provided true @@ -99,7 +100,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.mdsal - mdsal-binding-dom-adapter + mdsal-binding-test-utils test diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepDeviceInfo.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepDeviceInfo.java index 430f8edf3..6c846a9a9 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepDeviceInfo.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepDeviceInfo.java @@ -5,20 +5,16 @@ * 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 com.google.common.collect.Sets; - import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; - import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; - import org.opendaylight.ovsdb.hwvtepsouthbound.transact.DependencyQueue; import org.opendaylight.ovsdb.hwvtepsouthbound.transact.DependentJob; import org.opendaylight.ovsdb.hwvtepsouthbound.transact.TransactCommand; diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepOperGlobalListener.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepOperGlobalListener.java index 963b62762..67e7cdac7 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepOperGlobalListener.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepOperGlobalListener.java @@ -16,7 +16,6 @@ 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; diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundProvider.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundProvider.java index 61e372c5c..a28732220 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundProvider.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundProvider.java @@ -203,7 +203,7 @@ public class HwvtepSouthboundProvider implements ClusteredDataTreeChangeListener if (!hwvtepTp.get().isPresent()) { TopologyBuilder tpb = new TopologyBuilder(); tpb.setTopologyId(HwvtepSouthboundConstants.HWVTEP_TOPOLOGY_ID); - transaction.put(type, path, tpb.build(), true); + transaction.mergeParentStructurePut(type, path, tpb.build()); transaction.commit(); } else { transaction.cancel(); diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundProviderConfigurator.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundProviderConfigurator.java index 6ad47a328..7b43cbd93 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundProviderConfigurator.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundProviderConfigurator.java @@ -8,7 +8,6 @@ package org.opendaylight.ovsdb.hwvtepsouthbound; import java.util.Map; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundUtil.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundUtil.java index c6b47b295..aa01bf6b4 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundUtil.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundUtil.java @@ -5,12 +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.hwvtepsouthbound; import com.google.common.base.Preconditions; import com.google.common.util.concurrent.ThreadFactoryBuilder; - import java.util.Collection; import java.util.Map; import java.util.Optional; @@ -18,7 +16,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; - import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.binding.api.ReadTransaction; import org.opendaylight.mdsal.binding.api.ReadWriteTransaction; @@ -249,7 +246,7 @@ public final class HwvtepSouthboundUtil { return list == null || list.isEmpty(); } - public static boolean isEmptyMap(Map map) { + public static boolean isEmptyMap(Map map) { return map == null || map.isEmpty(); } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/InstanceIdentifierCodec.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/InstanceIdentifierCodec.java index 9f7da11ca..47c4b9d35 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/InstanceIdentifierCodec.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/InstanceIdentifierCodec.java @@ -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.URI; @@ -17,19 +16,19 @@ 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.DataSchemaContextTree; +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.api.SchemaContext; -import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; public class InstanceIdentifierCodec extends AbstractModuleStringInstanceIdentifierCodec - implements SchemaContextListener { + implements EffectiveModelContextListener { private DataSchemaContextTree dataSchemaContextTree; - private SchemaContext context; + private EffectiveModelContext context; private final BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer; - public InstanceIdentifierCodec(DOMSchemaService schemaService, - BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer) { + public InstanceIdentifierCodec(final DOMSchemaService schemaService, + final BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer) { schemaService.registerSchemaContextListener(this); this.bindingNormalizedNodeSerializer = bindingNormalizedNodeSerializer; } @@ -51,26 +50,26 @@ public class InstanceIdentifierCodec extends AbstractModuleStringInstanceIdentif } @Override - public void onGlobalContextUpdated(SchemaContext schemaContext) { + public void onModelContextUpdated(final EffectiveModelContext schemaContext) { this.context = schemaContext; this.dataSchemaContextTree = DataSchemaContextTree.from(schemaContext); } - public String serialize(InstanceIdentifier iid) { + public String serialize(final InstanceIdentifier iid) { YangInstanceIdentifier normalizedIid = bindingNormalizedNodeSerializer.toYangInstanceIdentifier(iid); return serialize(normalizedIid); } - public YangInstanceIdentifier getYangInstanceIdentifier(InstanceIdentifier iid) { + public YangInstanceIdentifier getYangInstanceIdentifier(final InstanceIdentifier iid) { return bindingNormalizedNodeSerializer.toYangInstanceIdentifier(iid); } - public InstanceIdentifier bindingDeserializer(String iidString) throws DeserializationException { + public InstanceIdentifier bindingDeserializer(final String iidString) throws DeserializationException { YangInstanceIdentifier normalizedYangIid = deserialize(iidString); return bindingNormalizedNodeSerializer.fromYangInstanceIdentifier(normalizedYangIid); } - public InstanceIdentifier bindingDeserializer(YangInstanceIdentifier yangIID) { + public InstanceIdentifier bindingDeserializer(final YangInstanceIdentifier yangIID) { return bindingNormalizedNodeSerializer.fromYangInstanceIdentifier(yangIID); } } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/cli/HwvtepCacheDisplayCmd.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/cli/HwvtepCacheDisplayCmd.java index 41031e9c0..c62dee1b8 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/cli/HwvtepCacheDisplayCmd.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/cli/HwvtepCacheDisplayCmd.java @@ -9,7 +9,6 @@ package org.opendaylight.ovsdb.hwvtepsouthbound.cli; import java.io.PrintStream; import java.util.Map; - import org.apache.karaf.shell.api.action.Action; import org.apache.karaf.shell.api.action.Argument; import org.apache.karaf.shell.api.action.Command; diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/reconciliation/configuration/GlobalConfigOperationalChangeGetter.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/reconciliation/configuration/GlobalConfigOperationalChangeGetter.java index 3ae1d4d99..e41b00f36 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/reconciliation/configuration/GlobalConfigOperationalChangeGetter.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/reconciliation/configuration/GlobalConfigOperationalChangeGetter.java @@ -11,14 +11,18 @@ import com.google.common.collect.Sets; import java.util.ArrayList; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.stream.Collectors; import org.opendaylight.mdsal.binding.api.DataTreeModification; 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.HwvtepGlobalAugmentationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LocalMcastMacs; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LocalMcastMacsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LocalUcastMacs; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LocalUcastMacsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LogicalSwitches; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LogicalSwitchesKey; 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.InstanceIdentifier; @@ -28,8 +32,8 @@ public final class GlobalConfigOperationalChangeGetter { private GlobalConfigOperationalChangeGetter() { } - public static DataTreeModification getModification(InstanceIdentifier nodeId, Node configNode, - Node opNode) { + public static DataTreeModification getModification(final InstanceIdentifier nodeId, + final Node configNode, final Node opNode) { NodeBuilder newNodeBuilder = getNodeBuilderFromNode(configNode); NodeBuilder oldNodeBuilder = getNodeBuilderFromNode(opNode); @@ -46,8 +50,8 @@ public final class GlobalConfigOperationalChangeGetter { return new DataTreeModificationImpl<>(nodeId, newNodeBuilder.build(), oldNodeBuilder.build()); } - static void fillLocalMacsToBeRemoved(HwvtepGlobalAugmentationBuilder oldAugmentation, Node configNode, - Node opNode) { + static void fillLocalMacsToBeRemoved(final HwvtepGlobalAugmentationBuilder oldAugmentation, final Node configNode, + final Node opNode) { Set logicalSwitchNamesToBeRemoved = getLogicalSwitchesToBeRemoved(configNode, opNode); List localUcastMacsToBeRemoved = getLocalUcastMacsToBeRemoved(opNode, logicalSwitchNamesToBeRemoved); @@ -58,43 +62,43 @@ public final class GlobalConfigOperationalChangeGetter { oldAugmentation.setLocalMcastMacs(localMcastMacsToBeRemoved); } - static List getLocalUcastMacsToBeRemoved(Node opNode, final Set removedSwitchNames) { + static List getLocalUcastMacsToBeRemoved(final Node opNode, final Set removedSwitchNames) { if (opNode == null || opNode.augmentation(HwvtepGlobalAugmentation.class) == null) { return null; } - List localUcastMacs = opNode.augmentation(HwvtepGlobalAugmentation.class) + Map localUcastMacs = opNode.augmentation(HwvtepGlobalAugmentation.class) .getLocalUcastMacs(); if (localUcastMacs == null) { return null; } - return localUcastMacs.stream() + return localUcastMacs.values().stream() .filter(mac -> removedSwitchNames.contains( mac.getLogicalSwitchRef().getValue().firstKeyOf( LogicalSwitches.class).getHwvtepNodeName().getValue())) .collect(Collectors.toList()); } - static List getLocalMcastMacsToBeRemoved(Node opNode, final Set removedSwitchNames) { + static List getLocalMcastMacsToBeRemoved(final Node opNode, final Set removedSwitchNames) { if (opNode == null || opNode.augmentation(HwvtepGlobalAugmentation.class) == null) { return null; } - List localMcastMacs = opNode.augmentation(HwvtepGlobalAugmentation.class) + Map localMcastMacs = opNode.augmentation(HwvtepGlobalAugmentation.class) .getLocalMcastMacs(); if (localMcastMacs == null) { return null; } - return localMcastMacs.stream() + return localMcastMacs.values().stream() .filter(mac -> removedSwitchNames.contains( mac.getLogicalSwitchRef().getValue().firstKeyOf( LogicalSwitches.class).getHwvtepNodeName().getValue())) .collect(Collectors.toList()); } - static Set getLogicalSwitchesToBeRemoved(Node configNode, Node opNode) { + static Set getLogicalSwitchesToBeRemoved(final Node configNode, final Node opNode) { Set opSwitchNames = new HashSet<>(); Set cfgSwitchNames = new HashSet<>(); - List cfgLogicalSwitches = new ArrayList<>(); - List opLogicalSwitches = new ArrayList<>(); + Map cfgLogicalSwitches = null; + Map opLogicalSwitches = null; if (opNode != null && opNode.augmentation(HwvtepGlobalAugmentation.class) != null) { opLogicalSwitches = opNode.augmentation(HwvtepGlobalAugmentation.class).getLogicalSwitches(); @@ -103,12 +107,12 @@ public final class GlobalConfigOperationalChangeGetter { cfgLogicalSwitches = configNode.augmentation(HwvtepGlobalAugmentation.class).getLogicalSwitches(); } if (opLogicalSwitches != null) { - for (LogicalSwitches ls : opLogicalSwitches) { + for (LogicalSwitches ls : opLogicalSwitches.values()) { opSwitchNames.add(ls.getHwvtepNodeName().getValue()); } } if (cfgLogicalSwitches != null) { - for (LogicalSwitches ls : cfgLogicalSwitches) { + for (LogicalSwitches ls : cfgLogicalSwitches.values()) { cfgSwitchNames.add(ls.getHwvtepNodeName().getValue()); } } @@ -116,7 +120,7 @@ public final class GlobalConfigOperationalChangeGetter { return removedSwitchNames; } - static HwvtepGlobalAugmentationBuilder augmentationFromNode(Node node) { + static HwvtepGlobalAugmentationBuilder augmentationFromNode(final Node node) { if (node == null) { return new HwvtepGlobalAugmentationBuilder(); } @@ -130,7 +134,7 @@ public final class GlobalConfigOperationalChangeGetter { return builder; } - static NodeBuilder getNodeBuilderFromNode(Node node) { + static NodeBuilder getNodeBuilderFromNode(final Node node) { NodeBuilder newNodeBuilder; if (node != null) { newNodeBuilder = new NodeBuilder(node); diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/reconciliation/configuration/HwvtepReconciliationTask.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/reconciliation/configuration/HwvtepReconciliationTask.java index abe966883..00580fafa 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/reconciliation/configuration/HwvtepReconciliationTask.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/reconciliation/configuration/HwvtepReconciliationTask.java @@ -9,8 +9,8 @@ package org.opendaylight.ovsdb.hwvtepsouthbound.reconciliation.configuration; import java.util.ArrayList; import java.util.Collection; +import java.util.Map; import java.util.Optional; - import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.binding.api.DataTreeModification; import org.opendaylight.mdsal.binding.api.ReadTransaction; @@ -25,6 +25,7 @@ import org.opendaylight.ovsdb.hwvtepsouthbound.transact.HwvtepOperationalState; import org.opendaylight.ovsdb.hwvtepsouthbound.transact.TransactCommandAggregator; 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.hwvtep.global.attributes.LogicalSwitches; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LogicalSwitchesKey; 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; @@ -76,8 +77,9 @@ public class HwvtepReconciliationTask extends ReconciliationTask { if (globalConfigNode != null) { HwvtepGlobalAugmentation augmentation = globalConfigNode.augmentation(HwvtepGlobalAugmentation.class); if (augmentation != null) { - if (augmentation.getLogicalSwitches() != null) { - for (LogicalSwitches logicalSwitches : augmentation.getLogicalSwitches()) { + Map switches = augmentation.getLogicalSwitches(); + if (switches != null) { + for (LogicalSwitches logicalSwitches : switches.values()) { connectionInstance.getDeviceInfo().updateConfigData(LogicalSwitches.class, nodeId.augmentation(HwvtepGlobalAugmentation.class).child(LogicalSwitches.class, logicalSwitches.key()), logicalSwitches); @@ -102,8 +104,8 @@ public class HwvtepReconciliationTask extends ReconciliationTask { return 0; } - private Node readNode(ReadTransaction transaction, - LogicalDatastoreType logicalDatastoreType, InstanceIdentifier iid) { + private static Node readNode(ReadTransaction transaction, + LogicalDatastoreType logicalDatastoreType, InstanceIdentifier iid) { Optional optional = HwvtepSouthboundUtil.readNode(transaction, logicalDatastoreType, iid); if (optional.isPresent()) { return optional.get(); diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/reconciliation/configuration/SwitchConfigOperationalChangeGetter.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/reconciliation/configuration/SwitchConfigOperationalChangeGetter.java index 0e40b7bd7..2c9d93b30 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/reconciliation/configuration/SwitchConfigOperationalChangeGetter.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/reconciliation/configuration/SwitchConfigOperationalChangeGetter.java @@ -7,8 +7,9 @@ */ package org.opendaylight.ovsdb.hwvtepsouthbound.reconciliation.configuration; -import java.util.ArrayList; -import java.util.List; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; import org.opendaylight.mdsal.binding.api.DataTreeModification; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepPhysicalPortAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepPhysicalPortAugmentationBuilder; @@ -17,19 +18,20 @@ 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.NodeBuilder; 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.TerminationPointBuilder; +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; public final class SwitchConfigOperationalChangeGetter { private SwitchConfigOperationalChangeGetter() { } - public static DataTreeModification getModification(InstanceIdentifier psNodeId, - Node configNode, Node operationalNode) { + public static DataTreeModification getModification(final InstanceIdentifier psNodeId, + final Node configNode, final Node operationalNode) { NodeBuilder newNodeBuilder = getNodeBuilderFromNode(configNode); NodeBuilder oldNodeBuilder = getNodeBuilderFromNode(operationalNode); - List tpList = getPorts(configNode); + Map tpList = getPorts(configNode); if (tpList.size() > 0) { newNodeBuilder.setTerminationPoint(tpList); } @@ -40,11 +42,9 @@ public final class SwitchConfigOperationalChangeGetter { } return new DataTreeModificationImpl<>(psNodeId, newNodeBuilder.build(), oldNodeBuilder.build()); - } - - static NodeBuilder getNodeBuilderFromNode(Node node) { + static NodeBuilder getNodeBuilderFromNode(final Node node) { NodeBuilder newNodeBuilder; if (node != null) { newNodeBuilder = new NodeBuilder(node); @@ -52,19 +52,22 @@ public final class SwitchConfigOperationalChangeGetter { } else { newNodeBuilder = new NodeBuilder(); } - List emptyList = new ArrayList<>(); - newNodeBuilder.setTerminationPoint(emptyList); + newNodeBuilder.setTerminationPoint(Collections.emptyMap()); return newNodeBuilder; } - - static List getPorts(Node node) { - ArrayList tpList = new ArrayList<>(); - if (node == null || node.getTerminationPoint() == null) { - return tpList; + static Map getPorts(final Node node) { + if (node == null) { + return Collections.emptyMap(); } - for (TerminationPoint tp: node.getTerminationPoint()) { + final Map tps = node.getTerminationPoint(); + if (tps == null) { + return Collections.emptyMap(); + } + + final Map result = new HashMap<>(); + for (TerminationPoint tp : node.getTerminationPoint().values()) { TerminationPointBuilder terminationPointBuilder = new TerminationPointBuilder(tp); terminationPointBuilder.removeAugmentation(HwvtepPhysicalPortAugmentation.class); @@ -78,9 +81,11 @@ public final class SwitchConfigOperationalChangeGetter { && !augmentation.getVlanBindings().isEmpty()) { builder.setVlanBindings(augmentation.getVlanBindings()); terminationPointBuilder.addAugmentation(HwvtepPhysicalPortAugmentation.class, builder.build()); - tpList.add(terminationPointBuilder.build()); + + final TerminationPoint newTp = terminationPointBuilder.build(); + result.put(newTp.key(), newTp); } } - return tpList; + return result; } } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/AbstractTransactCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/AbstractTransactCommand.java index 32596e7b4..fc534ef5d 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/AbstractTransactCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/AbstractTransactCommand.java @@ -5,11 +5,9 @@ * 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.transact; import com.google.common.collect.Lists; - import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.ArrayList; @@ -22,7 +20,6 @@ import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; - import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.binding.api.DataObjectModification; @@ -40,12 +37,13 @@ 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.TerminationPoint; import org.opendaylight.yangtools.yang.binding.Augmentation; import org.opendaylight.yangtools.yang.binding.Identifiable; +import org.opendaylight.yangtools.yang.binding.Identifier; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public abstract class AbstractTransactCommand> - implements TransactCommand { +public abstract class AbstractTransactCommand, I extends Identifier, + A extends Augmentation> implements TransactCommand { private static final Logger LOG = LoggerFactory.getLogger(AbstractTransactCommand.class); protected static final UUID TXUUID = new UUID("TXUUID"); @@ -58,7 +56,8 @@ public abstract class AbstractTransactCommand> changes) { + public AbstractTransactCommand(final HwvtepOperationalState state, + final Collection> changes) { this.hwvtepOperationalState = state; this.changes = changes; } @@ -75,26 +74,28 @@ public abstract class AbstractTransactCommand cls, InstanceIdentifier key, T data) { + void updateCurrentTxDeleteData(final Class cls, final InstanceIdentifier key, + final T data) { hwvtepOperationalState.updateCurrentTxDeleteData(cls, key); markKeyAsInTransit(cls, key); addToUpdates(key, data); } - void updateCurrentTxData(Class cls, InstanceIdentifier key, UUID uuid, T data) { + void updateCurrentTxData(final Class cls, final InstanceIdentifier key, final UUID uuid, + final T data) { hwvtepOperationalState.updateCurrentTxData(cls, key, uuid); markKeyAsInTransit(cls, key); addToUpdates(key, data); } - void addToUpdates(InstanceIdentifier key, T data) { + void addToUpdates(final InstanceIdentifier key, final T data) { T oldData = null; Type type = getClass().getGenericSuperclass(); Type classType = ((ParameterizedType) type).getActualTypeArguments()[0]; if (getConfigData((Class) classType, key) != null) { oldData = (T) getConfigData((Class) classType, key).getData(); } - updates.add(new MdsalUpdate(key, data, oldData)); + updates.add(new MdsalUpdate<>(key, data, oldData)); } void processDependencies(final UnMetDependencyGetter unMetDependencyGetter, @@ -112,7 +113,7 @@ public abstract class AbstractTransactCommand) classType, key)) { inTransitDependencies = new HashMap<>(); - inTransitDependencies.put((Class) classType, Lists.newArrayList(key)); + inTransitDependencies.put(classType, Lists.newArrayList(key)); } } else { inTransitDependencies = unMetDependencyGetter.getInTransitDependencies(hwvtepOperationalState, data); @@ -123,7 +124,7 @@ public abstract class AbstractTransactCommand) classType, key) || deviceInfo.isKeyInDependencyQueue(key)) { - inTransitDependencies.put((Class) classType, Lists.newArrayList(key)); + inTransitDependencies.put(classType, Lists.newArrayList(key)); } } LOG.info("Update received for key: {} txId: {}", key, getOperationalState().getTransactionId()); @@ -143,8 +144,8 @@ public abstract class AbstractTransactCommand)getClassType(), key); @@ -180,8 +181,8 @@ public abstract class AbstractTransactCommand)getClassType(), key); @@ -211,18 +212,18 @@ public abstract class AbstractTransactCommand nodeIid, T data, - InstanceIdentifier key, Object... extraData) { + public void doDeviceTransaction(final TransactionBuilder transaction, final InstanceIdentifier nodeIid, + final T data, final InstanceIdentifier key, final Object... extraData) { //tobe removed as part of refactoring patch } @Override - public void onConfigUpdate(TransactionBuilder transaction, InstanceIdentifier nodeIid, T data, - InstanceIdentifier key, Object... extraData) { + public void onConfigUpdate(final TransactionBuilder transaction, final InstanceIdentifier nodeIid, + final T data, final InstanceIdentifier key, final Object... extraData) { //tobe removed as part of refactoring patch } - protected A augmentation(Node node) { + protected A augmentation(final Node node) { if (node == null) { return null; } @@ -233,16 +234,17 @@ public abstract class AbstractTransactCommand getData(A augmentation) { - return Collections.emptyList(); + protected Map getData(final A augmentation) { + return Collections.emptyMap(); } - protected List getData(Node node) { + protected List getData(final Node node) { A augmentation = augmentation(node); if (augmentation != null) { - List data = getData(augmentation); + Map data = getData(augmentation); if (data != null) { - return new ArrayList<>(data); + // TODO: why are we performing a copy here? + return new ArrayList<>(data.values()); } } return Collections.emptyList(); @@ -250,7 +252,7 @@ public abstract class AbstractTransactCommand, List> extractRemoved( - Collection> modification, Class class1) { + final Collection> modification, final Class class1) { Map, List> result = new HashMap<>(); if (modification != null && !modification.isEmpty()) { for (DataTreeModification change : modification) { @@ -274,7 +276,7 @@ public abstract class AbstractTransactCommand, List> extractUpdated( - Collection> modification, Class class1) { + final Collection> modification, final Class class1) { Map, List> result = new HashMap<>(); if (modification != null && !modification.isEmpty()) { for (DataTreeModification change : modification) { @@ -295,7 +297,7 @@ public abstract class AbstractTransactCommand getCascadeDeleteData(DataTreeModification change) { + List getCascadeDeleteData(final DataTreeModification change) { if (!cascadeDelete()) { return Collections.emptyList(); } @@ -317,7 +319,7 @@ public abstract class AbstractTransactCommand getRemoved(DataTreeModification change) { + List getRemoved(final DataTreeModification change) { DataObjectModification mod = change.getRootNode(); Node removed = TransactUtils.getRemoved(mod); @@ -326,14 +328,14 @@ public abstract class AbstractTransactCommand getUpdated(DataTreeModification change) { + List getUpdated(final DataTreeModification change) { DataObjectModification mod = change.getRootNode(); Node updated = TransactUtils.getUpdated(mod); Node before = mod.getDataBefore(); return diffOf(updated, before, false); } - List diffOf(Node include, Node node1, Node node2, boolean compareKeyOnly) { + List diffOf(final Node include, final Node node1, final Node node2, final boolean compareKeyOnly) { List data1 = getData(include); List data2 = diffOf(node1, node2, compareKeyOnly); if (HwvtepSouthboundUtil.isEmpty(data1) && HwvtepSouthboundUtil.isEmpty(data2)) { @@ -344,7 +346,7 @@ public abstract class AbstractTransactCommand diffOf(Node node1, Node node2, boolean compareKeyOnly) { + List diffOf(final Node node1, final Node node2, final boolean compareKeyOnly) { List result = new ArrayList<>(); List list1 = getData(node1); @@ -385,7 +387,7 @@ public abstract class AbstractTransactCommand HwvtepDeviceInfo.DeviceData fetchDeviceData(Class cls, InstanceIdentifier key) { + public HwvtepDeviceInfo.DeviceData fetchDeviceData(final Class cls, + final InstanceIdentifier key) { HwvtepDeviceInfo.DeviceData deviceData = getDeviceOpData(cls, key); if (deviceData == null) { LOG.debug("Could not find data for key {}", key); @@ -443,7 +446,7 @@ public abstract class AbstractTransactCommand void addJobToQueue(DependentJob job) { + public void addJobToQueue(final DependentJob job) { hwvtepOperationalState.getDeviceInfo().putKeyInDependencyQueue(job.getKey()); hwvtepOperationalState.getDeviceInfo().addJobToQueue(job); } - public void markKeyAsInTransit(Class cls, InstanceIdentifier key) { + public void markKeyAsInTransit(final Class cls, final InstanceIdentifier key) { hwvtepOperationalState.getDeviceInfo().markKeyAsInTransit(cls, key); } - public HwvtepDeviceInfo.DeviceData getDeviceOpData(Class cls, InstanceIdentifier key) { + public HwvtepDeviceInfo.DeviceData getDeviceOpData(final Class cls, + final InstanceIdentifier key) { return getOperationalState().getDeviceInfo().getDeviceOperData(cls, key); } - public void clearConfigData(Class cls, InstanceIdentifier key) { + public void clearConfigData(final Class cls, final InstanceIdentifier key) { hwvtepOperationalState.getDeviceInfo().clearConfigData(cls, key); } - public HwvtepDeviceInfo.DeviceData getConfigData(Class cls, InstanceIdentifier key) { + public HwvtepDeviceInfo.DeviceData getConfigData(final Class cls, + final InstanceIdentifier key) { return hwvtepOperationalState.getDeviceInfo().getConfigData(cls, key); } - public void updateConfigData(Class cls, InstanceIdentifier key, Object data) { + public void updateConfigData(final Class cls, final InstanceIdentifier key, + final Object data) { hwvtepOperationalState.getDeviceInfo().updateConfigData(cls, key, data); } @SuppressWarnings("checkstyle:IllegalCatch") public AbstractTransactCommand getClone() { try { - return (AbstractTransactCommand) getClass().getConstructor(HwvtepOperationalState.class, Collection.class) + return getClass().getConstructor(HwvtepOperationalState.class, Collection.class) .newInstance(hwvtepOperationalState, changes); } catch (Throwable e) { LOG.error("Failed to clone the cmd ", e); diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/DependencyQueue.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/DependencyQueue.java index f6cd3aa7e..c1df1d0ab 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/DependencyQueue.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/DependencyQueue.java @@ -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.transact; import com.google.common.util.concurrent.ThreadFactoryBuilder; @@ -20,7 +19,6 @@ import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; - import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepConnectionInstance; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepDeviceInfo; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepSouthboundConstants; diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/EmptyDependencyGetter.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/EmptyDependencyGetter.java index f46d51f32..7b88b81d8 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/EmptyDependencyGetter.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/EmptyDependencyGetter.java @@ -5,12 +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.hwvtepsouthbound.transact; import java.util.Collections; import java.util.List; - import org.opendaylight.yangtools.yang.binding.Identifiable; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/HwvtepOperationalState.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/HwvtepOperationalState.java index 5cce70c6e..1c320e53e 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/HwvtepOperationalState.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/HwvtepOperationalState.java @@ -53,6 +53,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.hwvtep.physical._switch.attributes.TunnelsKey; 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.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointKey; import org.opendaylight.yangtools.yang.binding.Identifiable; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; @@ -86,8 +87,8 @@ public class HwvtepOperationalState { private final Collection> changes; long transactionId = 0; - public HwvtepOperationalState(DataBroker db, HwvtepConnectionInstance connectionInstance, - Collection> changes) { + public HwvtepOperationalState(final DataBroker db, final HwvtepConnectionInstance connectionInstance, + final Collection> changes) { this.connectionInstance = connectionInstance; this.deviceInfo = connectionInstance.getDeviceInfo(); this.db = db; @@ -95,7 +96,7 @@ public class HwvtepOperationalState { this.transaction = db.newReadWriteTransaction(); } - public HwvtepOperationalState(HwvtepConnectionInstance connectionInstance) { + public HwvtepOperationalState(final HwvtepConnectionInstance connectionInstance) { this.connectionInstance = connectionInstance; this.deviceInfo = connectionInstance.getDeviceInfo(); this.db = connectionInstance.getDataBroker(); @@ -117,9 +118,9 @@ public class HwvtepOperationalState { operationalNodes.put(connectionInstance.getInstanceIdentifier(), globalOperNode); HwvtepGlobalAugmentation globalAugmentation = globalOperNode.augmentation(HwvtepGlobalAugmentation.class); if (globalAugmentation != null) { - if (!HwvtepSouthboundUtil.isEmpty(globalAugmentation.getSwitches())) { + if (!HwvtepSouthboundUtil.isEmptyMap(globalAugmentation.getSwitches())) { operationalNodes.put((InstanceIdentifier) - globalAugmentation.getSwitches().get(0).getSwitchRef().getValue(), psNode); + globalAugmentation.getSwitches().values().iterator().next().getSwitchRef().getValue(), psNode); } } } @@ -150,7 +151,7 @@ public class HwvtepOperationalState { PhysicalSwitchAugmentation psAugmentation = readNode.get().augmentation(PhysicalSwitchAugmentation.class); if (hgAugmentation != null && hgAugmentation.getSwitches() != null) { - for (Switches pswitch : hgAugmentation.getSwitches()) { + for (Switches pswitch : hgAugmentation.getSwitches().values()) { @SuppressWarnings("unchecked") InstanceIdentifier psNodeIid = (InstanceIdentifier) pswitch.getSwitchRef().getValue(); @@ -176,12 +177,12 @@ public class HwvtepOperationalState { } } - public Optional getGlobalNode(InstanceIdentifier iid) { + public Optional getGlobalNode(final InstanceIdentifier iid) { InstanceIdentifier nodeIid = iid.firstIdentifierOf(Node.class); return Optional.ofNullable(operationalNodes.get(nodeIid)); } - public Optional getHwvtepGlobalAugmentation(InstanceIdentifier iid) { + public Optional getHwvtepGlobalAugmentation(final InstanceIdentifier iid) { Preconditions.checkNotNull(iid); Optional nodeOptional = getGlobalNode(iid); if (nodeOptional.isPresent()) { @@ -190,7 +191,7 @@ public class HwvtepOperationalState { return Optional.empty(); } - public Optional getPhysicalSwitchAugmentation(InstanceIdentifier iid) { + public Optional getPhysicalSwitchAugmentation(final InstanceIdentifier iid) { Preconditions.checkNotNull(iid); Optional nodeOptional = getGlobalNode(iid); if (nodeOptional.isPresent()) { @@ -199,7 +200,8 @@ public class HwvtepOperationalState { return Optional.empty(); } - public Optional> getTerminationPointList(InstanceIdentifier iid) { + public Optional> getTerminationPointList( + final InstanceIdentifier iid) { Preconditions.checkNotNull(iid); Optional nodeOptional = getGlobalNode(iid); if (nodeOptional.isPresent() && nodeOptional.get().getTerminationPoint() != null) { @@ -208,63 +210,46 @@ public class HwvtepOperationalState { return Optional.empty(); } - public Optional getLogicalSwitches(InstanceIdentifier iid, - LogicalSwitchesKey logicalSwitchesKey) { + public Optional getLogicalSwitches(final InstanceIdentifier iid, + final LogicalSwitchesKey logicalSwitchesKey) { Preconditions.checkNotNull(iid); Optional nodeOptional = getHwvtepGlobalAugmentation(iid); if (nodeOptional.isPresent()) { - HwvtepGlobalAugmentation hgAugmentation = nodeOptional.get(); - List lswitchList = null; - if (hgAugmentation != null) { - lswitchList = hgAugmentation.getLogicalSwitches(); - } - if (lswitchList != null) { - for (LogicalSwitches lswitch: lswitchList) { - if (lswitch.key().equals(logicalSwitchesKey)) { - return Optional.ofNullable(lswitch); - } - } + LogicalSwitches lswitch = nodeOptional.get().nonnullLogicalSwitches().get(logicalSwitchesKey); + if (lswitch != null) { + return Optional.of(lswitch); } } return Optional.empty(); } - public Optional getLogicalSwitches(InstanceIdentifier iid) { + public Optional getLogicalSwitches(final InstanceIdentifier iid) { return new ControllerMdsalUtils(db).readOptional(LogicalDatastoreType.OPERATIONAL, iid); } - public Optional getTunnels(InstanceIdentifier iid, TunnelsKey tunnelsKey) { + public Optional getTunnels(final InstanceIdentifier iid, final TunnelsKey tunnelsKey) { Preconditions.checkNotNull(iid); Optional psOptional = getPhysicalSwitchAugmentation(iid); if (psOptional.isPresent()) { - PhysicalSwitchAugmentation psAugmentation = psOptional.get(); - List tunnelList = null; - if (psAugmentation != null) { - tunnelList = psAugmentation.getTunnels(); - } - if (tunnelList != null) { - for (Tunnels tunnel: tunnelList) { - if (tunnel.key().equals(tunnelsKey)) { - return Optional.ofNullable(tunnel); - } - } + Tunnels tunnel = psOptional.get().nonnullTunnels().get(tunnelsKey); + if (tunnel != null) { + return Optional.of(tunnel); } } return Optional.empty(); } - public Optional getTunnels(InstanceIdentifier iid) { + public Optional getTunnels(final InstanceIdentifier iid) { Optional tunnels = new ControllerMdsalUtils(db).readOptional(LogicalDatastoreType.OPERATIONAL, iid); return tunnels; } - public Optional getPhysicalPortAugmentation(InstanceIdentifier iid, - HwvtepNodeName hwvtepNodeName) { + public Optional getPhysicalPortAugmentation(final InstanceIdentifier iid, + final HwvtepNodeName hwvtepNodeName) { Preconditions.checkNotNull(iid); - Optional> nodeOptional = getTerminationPointList(iid); + Optional> nodeOptional = getTerminationPointList(iid); if (nodeOptional.isPresent()) { - List tpList = nodeOptional.get(); - for (TerminationPoint tp : tpList) { + for (TerminationPoint tp : nodeOptional.get().values()) { HwvtepPhysicalPortAugmentation hppAugmentation = tp.augmentation(HwvtepPhysicalPortAugmentation.class); if (hppAugmentation != null && hppAugmentation.getHwvtepNodeName().equals(hwvtepNodeName)) { @@ -275,13 +260,12 @@ public class HwvtepOperationalState { return Optional.empty(); } - public Optional getPhysicalLocatorAugmentation(InstanceIdentifier iid, - IpAddress dstIp, Class encapType) { + public Optional getPhysicalLocatorAugmentation(final InstanceIdentifier iid, + final IpAddress dstIp, final Class encapType) { Preconditions.checkNotNull(iid); - Optional> nodeOptional = getTerminationPointList(iid); + Optional> nodeOptional = getTerminationPointList(iid); if (nodeOptional.isPresent()) { - List tpList = nodeOptional.get(); - for (TerminationPoint tp : tpList) { + for (TerminationPoint tp : nodeOptional.get().values()) { HwvtepPhysicalLocatorAugmentation hppAugmentation = tp.augmentation(HwvtepPhysicalLocatorAugmentation.class); if (hppAugmentation != null && hppAugmentation.getDstIp().equals(dstIp) @@ -294,7 +278,7 @@ public class HwvtepOperationalState { } public Optional - getPhysicalLocatorAugmentation(InstanceIdentifier iid) { + getPhysicalLocatorAugmentation(final InstanceIdentifier iid) { Optional tp = new ControllerMdsalUtils(db).readOptional(LogicalDatastoreType.OPERATIONAL, iid); if (tp.isPresent()) { @@ -303,81 +287,49 @@ public class HwvtepOperationalState { return Optional.empty(); } - public Optional getLocalMcastMacs(InstanceIdentifier iid, LocalMcastMacsKey key) { + public Optional getLocalMcastMacs(final InstanceIdentifier iid, final LocalMcastMacsKey key) { Preconditions.checkNotNull(iid); Optional nodeOptional = getHwvtepGlobalAugmentation(iid); if (nodeOptional.isPresent()) { - HwvtepGlobalAugmentation hgAugmentation = nodeOptional.get(); - List macList = null; - if (hgAugmentation != null) { - macList = hgAugmentation.getLocalMcastMacs(); - } - if (macList != null) { - for (LocalMcastMacs mac: macList) { - if (mac.key().equals(key)) { - return Optional.ofNullable(mac); - } - } + LocalMcastMacs mac = nodeOptional.get().nonnullLocalMcastMacs().get(key); + if (mac != null) { + return Optional.of(mac); } } return Optional.empty(); } - public Optional getRemoteMcastMacs(InstanceIdentifier iid, RemoteMcastMacsKey key) { + public Optional getRemoteMcastMacs(final InstanceIdentifier iid, final RemoteMcastMacsKey key) { Preconditions.checkNotNull(iid); Optional nodeOptional = getHwvtepGlobalAugmentation(iid); if (nodeOptional.isPresent()) { - HwvtepGlobalAugmentation hgAugmentation = nodeOptional.get(); - List macList = null; - if (hgAugmentation != null) { - macList = hgAugmentation.getRemoteMcastMacs(); - } - if (macList != null) { - for (RemoteMcastMacs mac: macList) { - if (mac.key().equals(key)) { - return Optional.ofNullable(mac); - } - } + RemoteMcastMacs mac = nodeOptional.get().nonnullRemoteMcastMacs().get(key); + if (mac != null) { + return Optional.of(mac); } } return Optional.empty(); } - public Optional getLocalUcastMacs(InstanceIdentifier iid, LocalUcastMacsKey key) { + public Optional getLocalUcastMacs(final InstanceIdentifier iid, final LocalUcastMacsKey key) { Preconditions.checkNotNull(iid); Optional nodeOptional = getHwvtepGlobalAugmentation(iid); if (nodeOptional.isPresent()) { - HwvtepGlobalAugmentation hgAugmentation = nodeOptional.get(); - List macList = null; - if (hgAugmentation != null) { - macList = hgAugmentation.getLocalUcastMacs(); - } - if (macList != null) { - for (LocalUcastMacs mac: macList) { - if (mac.key().equals(key)) { - return Optional.ofNullable(mac); - } - } + LocalUcastMacs mac = nodeOptional.get().nonnullLocalUcastMacs().get(key); + if (mac != null) { + return Optional.of(mac); } } return Optional.empty(); } - public Optional getRemoteUcastMacs(InstanceIdentifier iid, RemoteUcastMacsKey key) { + public Optional getRemoteUcastMacs(final InstanceIdentifier iid, final RemoteUcastMacsKey key) { Preconditions.checkNotNull(iid); Optional nodeOptional = getHwvtepGlobalAugmentation(iid); if (nodeOptional.isPresent()) { - HwvtepGlobalAugmentation hgAugmentation = nodeOptional.get(); - List macList = null; - if (hgAugmentation != null) { - macList = hgAugmentation.getRemoteUcastMacs(); - } - if (macList != null) { - for (RemoteUcastMacs mac: macList) { - if (mac.key().equals(key)) { - return Optional.ofNullable(mac); - } - } + RemoteUcastMacs mac = nodeOptional.get().nonnullRemoteUcastMacs().get(key); + if (mac != null) { + return Optional.of(mac); } } return Optional.empty(); @@ -388,19 +340,15 @@ public class HwvtepOperationalState { Preconditions.checkNotNull(iid); Optional nodeOptional = getHwvtepGlobalAugmentation(iid); if (nodeOptional.isPresent()) { - HwvtepGlobalAugmentation hgAugmentation = nodeOptional.get(); - if (hgAugmentation != null && hgAugmentation.getLogicalRouters() != null) { - for (LogicalRouters lrouter: hgAugmentation.getLogicalRouters()) { - if (lrouter.key().equals(logicalRoutersKey)) { - return Optional.ofNullable(lrouter); - } - } + LogicalRouters lrouter = nodeOptional.get().nonnullLogicalRouters().get(logicalRoutersKey); + if (lrouter != null) { + return Optional.of(lrouter); } } return Optional.empty(); } - public Optional getAcls(InstanceIdentifier iid) { + public Optional getAcls(final InstanceIdentifier iid) { Optional acl = new ControllerMdsalUtils(db).readOptional(LogicalDatastoreType.OPERATIONAL, iid); return acl; } @@ -409,12 +357,12 @@ public class HwvtepOperationalState { return transaction; } - public void setPhysicalLocatorInFlight(InstanceIdentifier iid, - UUID uuid) { + public void setPhysicalLocatorInFlight(final InstanceIdentifier iid, + final UUID uuid) { inflightLocators.put(iid, uuid); } - public UUID getPhysicalLocatorInFlight(InstanceIdentifier iid) { + public UUID getPhysicalLocatorInFlight(final InstanceIdentifier iid) { return inflightLocators.get(iid); } @@ -426,23 +374,24 @@ public class HwvtepOperationalState { return deviceInfo; } - public void updateCurrentTxData(Class cls, InstanceIdentifier key, UUID uuid) { + public void updateCurrentTxData(final Class cls, final InstanceIdentifier key, + final UUID uuid) { HwvtepSouthboundUtil.updateData(currentTxUUIDs, cls, key, uuid); } - public void updateCurrentTxDeleteData(Class cls, InstanceIdentifier key) { + public void updateCurrentTxDeleteData(final Class cls, final InstanceIdentifier key) { HwvtepSouthboundUtil.updateData(currentTxDeletedKeys, cls, key, Boolean.TRUE); } - public UUID getUUIDFromCurrentTx(Class cls, InstanceIdentifier key) { + public UUID getUUIDFromCurrentTx(final Class cls, final InstanceIdentifier key) { return HwvtepSouthboundUtil.getData(currentTxUUIDs, cls, key); } - public boolean isKeyPartOfCurrentTx(Class cls, InstanceIdentifier key) { + public boolean isKeyPartOfCurrentTx(final Class cls, final InstanceIdentifier key) { return HwvtepSouthboundUtil.containsKey(currentTxUUIDs, cls, key); } - public Set getDeletedKeysInCurrentTx(Class cls) { + public Set getDeletedKeysInCurrentTx(final Class cls) { if (currentTxDeletedKeys.containsKey(cls)) { return currentTxDeletedKeys.get(cls).keySet(); } @@ -483,7 +432,7 @@ public class HwvtepOperationalState { return inReconciliation; } - public void setInReconciliation(boolean inReconciliation) { + public void setInReconciliation(final boolean inReconciliation) { this.inReconciliation = inReconciliation; } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalRouterRemoveCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalRouterRemoveCommand.java index d36832fb6..58b3d1561 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalRouterRemoveCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalRouterRemoveCommand.java @@ -25,12 +25,14 @@ import org.opendaylight.ovsdb.schema.hardwarevtep.LogicalRouter; import org.opendaylight.ovsdb.utils.mdsal.utils.TransactionType; 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.hwvtep.global.attributes.LogicalRouters; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LogicalRoutersKey; 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; import org.slf4j.LoggerFactory; -public class LogicalRouterRemoveCommand extends AbstractTransactCommand { +public class LogicalRouterRemoveCommand + extends AbstractTransactCommand { private static final Logger LOG = LoggerFactory.getLogger(LogicalRouterRemoveCommand.class); public LogicalRouterRemoveCommand(final HwvtepOperationalState state, @@ -97,7 +99,7 @@ public class LogicalRouterRemoveCommand extends AbstractTransactCommand getData(final HwvtepGlobalAugmentation augmentation) { + protected Map getData(final HwvtepGlobalAugmentation augmentation) { return augmentation.getLogicalRouters(); } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalRouterUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalRouterUpdateCommand.java index 3256debce..0879086af 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalRouterUpdateCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalRouterUpdateCommand.java @@ -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.transact; import static org.opendaylight.ovsdb.lib.operations.Operations.op; @@ -25,8 +24,10 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types. 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.hwvtep.global.attributes.Acls; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LogicalRouters; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LogicalRoutersKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LogicalSwitches; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.logical.router.attributes.AclBindings; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.logical.router.attributes.AclBindingsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.logical.router.attributes.StaticRoutes; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.logical.router.attributes.SwitchBindings; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; @@ -34,8 +35,8 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - -public class LogicalRouterUpdateCommand extends AbstractTransactCommand { +public class LogicalRouterUpdateCommand + extends AbstractTransactCommand { private static final Logger LOG = LoggerFactory.getLogger(LogicalRouterUpdateCommand.class); public LogicalRouterUpdateCommand(final HwvtepOperationalState state, @@ -134,10 +135,10 @@ public class LogicalRouterUpdateCommand extends AbstractTransactCommand aclBindings) { + private void setAclBindings(final LogicalRouter logicalRouter, final Map aclBindings) { if (aclBindings != null) { Map bindingMap = new HashMap<>(); - for (AclBindings aclBinding : aclBindings) { + for (AclBindings aclBinding : aclBindings.values()) { @SuppressWarnings("unchecked") InstanceIdentifier aclIid = (InstanceIdentifier)aclBinding.getAclRef().getValue(); @@ -157,7 +158,7 @@ public class LogicalRouterUpdateCommand extends AbstractTransactCommand staticRoutes) { + private static void setStaticRoutes(final LogicalRouter logicalRouter, final List staticRoutes) { if (staticRoutes != null) { Map staticRoutesMap = new HashMap<>(); for (StaticRoutes staticRoute : staticRoutes) { @@ -169,7 +170,7 @@ public class LogicalRouterUpdateCommand extends AbstractTransactCommand getData(final HwvtepGlobalAugmentation augmentation) { + protected Map getData(final HwvtepGlobalAugmentation augmentation) { return augmentation.getLogicalRouters(); } } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalSwitchRemoveCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalSwitchRemoveCommand.java index c7100318d..edc3a401c 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalSwitchRemoveCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalSwitchRemoveCommand.java @@ -16,12 +16,14 @@ import org.opendaylight.mdsal.binding.api.DataTreeModification; import org.opendaylight.ovsdb.lib.operations.TransactionBuilder; 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.hwvtep.global.attributes.LogicalSwitches; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LogicalSwitchesKey; 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; import org.slf4j.LoggerFactory; -public class LogicalSwitchRemoveCommand extends AbstractTransactCommand { +public class LogicalSwitchRemoveCommand + extends AbstractTransactCommand { private static final Logger LOG = LoggerFactory.getLogger(LogicalSwitchRemoveCommand.class); List deletedLs; @@ -49,8 +51,9 @@ public class LogicalSwitchRemoveCommand extends AbstractTransactCommand nodeIid, - LogicalSwitches logicalSwitches, InstanceIdentifier lsKey, Object... extraData) { + public void onConfigUpdate(final TransactionBuilder transaction, final InstanceIdentifier nodeIid, + final LogicalSwitches logicalSwitches, final InstanceIdentifier lsKey, + final Object... extraData) { processDependencies(EmptyDependencyGetter.INSTANCE, transaction, nodeIid, lsKey, logicalSwitches); } @@ -68,7 +71,7 @@ public class LogicalSwitchRemoveCommand extends AbstractTransactCommand getData(final HwvtepGlobalAugmentation augmentation) { + protected Map getData(final HwvtepGlobalAugmentation augmentation) { return augmentation.getLogicalSwitches(); } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalSwitchUcastsRemoveCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalSwitchUcastsRemoveCommand.java index 35889d40e..de4803986 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalSwitchUcastsRemoveCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalSwitchUcastsRemoveCommand.java @@ -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.transact; import static org.opendaylight.ovsdb.lib.operations.Operations.op; @@ -20,7 +19,6 @@ import java.util.Objects; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; - import org.opendaylight.mdsal.binding.api.DataTreeModification; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepDeviceInfo; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepSouthboundConstants; @@ -37,6 +35,7 @@ import org.opendaylight.ovsdb.schema.hardwarevtep.UcastMacsRemote; import org.opendaylight.ovsdb.utils.mdsal.utils.TransactionType; 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.hwvtep.global.attributes.LogicalSwitches; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LogicalSwitchesKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical.port.attributes.VlanBindings; 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; @@ -44,21 +43,22 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LogicalSwitchUcastsRemoveCommand - extends AbstractTransactCommand { + extends AbstractTransactCommand { private static final Logger LOG = LoggerFactory.getLogger(LogicalSwitchUcastsRemoveCommand.class); + private final AtomicInteger retryCount = new AtomicInteger(5); + private final LogicalSwitches logicalSwitches; + private final InstanceIdentifier nodeIid; + private final List deletedLs; + volatile Map> updatedPortBindings = new HashMap<>(); - private AtomicInteger retryCount = new AtomicInteger(5); - private LogicalSwitches logicalSwitches; - private InstanceIdentifier nodeIid; - private List deletedLs; private boolean firstAttempt = true; - public LogicalSwitchUcastsRemoveCommand(HwvtepOperationalState state, - Collection> changes, - List deletedLs, - LogicalSwitches logicalSwitches) { + public LogicalSwitchUcastsRemoveCommand(final HwvtepOperationalState state, + final Collection> changes, + final List deletedLs, + final LogicalSwitches logicalSwitches) { super(state, changes); this.deletedLs = deletedLs; this.logicalSwitches = logicalSwitches; @@ -66,7 +66,7 @@ public class LogicalSwitchUcastsRemoveCommand } @Override - public void execute(TransactionBuilder transaction) { + public void execute(final TransactionBuilder transaction) { InstanceIdentifier lsKey = nodeIid.augmentation(HwvtepGlobalAugmentation.class) .child(LogicalSwitches.class, logicalSwitches.key()); HwvtepDeviceInfo.DeviceData deviceData = super.fetchDeviceData(LogicalSwitches.class, lsKey); @@ -125,18 +125,18 @@ public class LogicalSwitchUcastsRemoveCommand } @Override - protected List getData(HwvtepGlobalAugmentation augmentation) { + protected Map getData(final HwvtepGlobalAugmentation augmentation) { return augmentation.getLogicalSwitches(); } @Override - protected boolean areEqual(LogicalSwitches logicalSwitches1 , LogicalSwitches logicalSwitches2) { + protected boolean areEqual(final LogicalSwitches logicalSwitches1 , final LogicalSwitches logicalSwitches2) { return logicalSwitches1.key().equals(logicalSwitches2.key()) && Objects.equals(logicalSwitches1.getTunnelKey(), logicalSwitches2.getTunnelKey()); } @Override - public void onSuccess(TransactionBuilder tx) { + public void onSuccess(final TransactionBuilder tx) { if (firstAttempt) { //LOG.error("check succeeded in deletion of logical swtich at first attempt "); //succeed in removing the logical switch upon first attempt @@ -149,7 +149,7 @@ public class LogicalSwitchUcastsRemoveCommand } @Override - public void onFailure(TransactionBuilder tx) { + public void onFailure(final TransactionBuilder tx) { //Failed to remove logical swith upon first attempt, //will attempt to remove the local ucasts and vlan bindings alone in the next attemtps firstAttempt = false; @@ -188,7 +188,7 @@ public class LogicalSwitchUcastsRemoveCommand }); } - private Map excludeVlanBindings(Set deletedLsUuids, PhysicalPort port) { + private Map excludeVlanBindings(final Set deletedLsUuids, final PhysicalPort port) { return port.getVlanBindingsColumn().getData() .entrySet().stream() .peek(entry -> { @@ -200,11 +200,13 @@ public class LogicalSwitchUcastsRemoveCommand .collect(Collectors.toMap(entry -> entry.getKey(), entry -> entry.getValue())); } + @Override public boolean retry() { boolean ret = retryCount.decrementAndGet() > 0; return ret; } + @Override protected boolean isDeleteCmd() { return true; } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalSwitchUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalSwitchUpdateCommand.java index 004436f65..fa1cb1baf 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalSwitchUpdateCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalSwitchUpdateCommand.java @@ -26,12 +26,14 @@ import org.opendaylight.ovsdb.schema.hardwarevtep.LogicalSwitch; import org.opendaylight.ovsdb.utils.mdsal.utils.TransactionType; 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.hwvtep.global.attributes.LogicalSwitches; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LogicalSwitchesKey; 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; import org.slf4j.LoggerFactory; -public class LogicalSwitchUpdateCommand extends AbstractTransactCommand { +public class LogicalSwitchUpdateCommand + extends AbstractTransactCommand { private static final Logger LOG = LoggerFactory.getLogger(LogicalSwitchUpdateCommand.class); public LogicalSwitchUpdateCommand(final HwvtepOperationalState state, @@ -138,7 +140,7 @@ public class LogicalSwitchUpdateCommand extends AbstractTransactCommand getData(final HwvtepGlobalAugmentation augmentation) { + protected Map getData(final HwvtepGlobalAugmentation augmentation) { return augmentation.getLogicalSwitches(); } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsLocalRemoveCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsLocalRemoveCommand.java index 05d6c89d6..06a23fa6c 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsLocalRemoveCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsLocalRemoveCommand.java @@ -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.transact; import static org.opendaylight.ovsdb.lib.operations.Operations.op; @@ -22,12 +21,14 @@ import org.opendaylight.ovsdb.lib.operations.TransactionBuilder; import org.opendaylight.ovsdb.schema.hardwarevtep.McastMacsLocal; 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.hwvtep.global.attributes.LocalMcastMacs; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LocalMcastMacsKey; 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; import org.slf4j.LoggerFactory; -public class McastMacsLocalRemoveCommand extends AbstractTransactCommand { +public class McastMacsLocalRemoveCommand + extends AbstractTransactCommand { private static final Logger LOG = LoggerFactory.getLogger(McastMacsLocalRemoveCommand.class); public McastMacsLocalRemoveCommand(final HwvtepOperationalState state, @@ -70,7 +71,7 @@ public class McastMacsLocalRemoveCommand extends AbstractTransactCommand getData(final HwvtepGlobalAugmentation augmentation) { + protected Map getData(final HwvtepGlobalAugmentation augmentation) { return augmentation.getLocalMcastMacs(); } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsLocalUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsLocalUpdateCommand.java index 7d7ef121e..cea7da183 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsLocalUpdateCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsLocalUpdateCommand.java @@ -23,13 +23,15 @@ import org.opendaylight.ovsdb.schema.hardwarevtep.McastMacsLocal; 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.hwvtep.rev150901.HwvtepGlobalAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LocalMcastMacs; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LocalMcastMacsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LogicalSwitches; 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; import org.slf4j.LoggerFactory; -public class McastMacsLocalUpdateCommand extends AbstractTransactCommand { +public class McastMacsLocalUpdateCommand + extends AbstractTransactCommand { private static final Logger LOG = LoggerFactory.getLogger(McastMacsLocalUpdateCommand.class); public McastMacsLocalUpdateCommand(final HwvtepOperationalState state, @@ -128,7 +130,7 @@ public class McastMacsLocalUpdateCommand extends AbstractTransactCommand getData(final HwvtepGlobalAugmentation augmentation) { + protected Map getData(final HwvtepGlobalAugmentation augmentation) { return augmentation.getLocalMcastMacs(); } } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsRemoteRemoveCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsRemoteRemoveCommand.java index 441aa735f..f0d565139 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsRemoteRemoveCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsRemoteRemoveCommand.java @@ -24,12 +24,14 @@ import org.opendaylight.ovsdb.schema.hardwarevtep.McastMacsRemote; import org.opendaylight.ovsdb.utils.mdsal.utils.TransactionType; 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.hwvtep.global.attributes.RemoteMcastMacs; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.RemoteMcastMacsKey; 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; import org.slf4j.LoggerFactory; -public class McastMacsRemoteRemoveCommand extends AbstractTransactCommand { +public class McastMacsRemoteRemoveCommand + extends AbstractTransactCommand { private static final Logger LOG = LoggerFactory.getLogger(McastMacsRemoteRemoveCommand.class); public McastMacsRemoteRemoveCommand(final HwvtepOperationalState state, @@ -129,7 +131,7 @@ public class McastMacsRemoteRemoveCommand extends AbstractTransactCommand getData(final HwvtepGlobalAugmentation augmentation) { + protected Map getData(final HwvtepGlobalAugmentation augmentation) { return augmentation.getRemoteMcastMacs(); } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsRemoteUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsRemoteUpdateCommand.java index f0bd7f020..7b46ca849 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsRemoteUpdateCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/McastMacsRemoteUpdateCommand.java @@ -20,7 +20,6 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Objects; import java.util.Set; - import org.opendaylight.mdsal.binding.api.DataTreeModification; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepDeviceInfo; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepSouthboundConstants; @@ -32,13 +31,15 @@ import org.opendaylight.ovsdb.utils.mdsal.utils.TransactionType; 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.hwvtep.global.attributes.LogicalSwitches; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.RemoteMcastMacs; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.RemoteMcastMacsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical.locator.set.attributes.LocatorSet; 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; import org.slf4j.LoggerFactory; -public class McastMacsRemoteUpdateCommand extends AbstractTransactCommand { +public class McastMacsRemoteUpdateCommand + extends AbstractTransactCommand { private static final Logger LOG = LoggerFactory.getLogger(McastMacsRemoteUpdateCommand.class); private static final McastMacUnMetDependencyGetter MCAST_MAC_DATA_VALIDATOR = new McastMacUnMetDependencyGetter(); @@ -164,7 +165,7 @@ public class McastMacsRemoteUpdateCommand extends AbstractTransactCommand getData(final HwvtepGlobalAugmentation augmentation) { + protected Map getData(final HwvtepGlobalAugmentation augmentation) { return augmentation.getRemoteMcastMacs(); } @@ -236,7 +237,7 @@ public class McastMacsRemoteUpdateCommand extends AbstractTransactCommand lswitchListRemoved = new ArrayList<>(); - if (removed.getTerminationPoint() != null) { - for (TerminationPoint tp : removed.getTerminationPoint()) { - HwvtepPhysicalPortAugmentation hppAugmentation = - tp.augmentation(HwvtepPhysicalPortAugmentation.class); - if (hppAugmentation != null) { - lswitchListRemoved.add(hppAugmentation); - } + for (TerminationPoint tp : removed.nonnullTerminationPoint().values()) { + HwvtepPhysicalPortAugmentation hppAugmentation = + tp.augmentation(HwvtepPhysicalPortAugmentation.class); + if (hppAugmentation != null) { + lswitchListRemoved.add(hppAugmentation); } } if (!lswitchListRemoved.isEmpty()) { @@ -108,22 +106,18 @@ public class PhysicalPortRemoveCommand extends AbstractTransactCommand { List portListUpdated = new ArrayList<>(); List portListBefore = new ArrayList<>(); List portListRemoved = new ArrayList<>(); - if (updated.getTerminationPoint() != null) { - for (TerminationPoint tp : updated.getTerminationPoint()) { - HwvtepPhysicalPortAugmentation hppAugmentation = - tp.augmentation(HwvtepPhysicalPortAugmentation.class); - if (hppAugmentation != null) { - portListUpdated.add(hppAugmentation); - } + for (TerminationPoint tp : updated.nonnullTerminationPoint().values()) { + HwvtepPhysicalPortAugmentation hppAugmentation = + tp.augmentation(HwvtepPhysicalPortAugmentation.class); + if (hppAugmentation != null) { + portListUpdated.add(hppAugmentation); } } - if (before.getTerminationPoint() != null) { - for (TerminationPoint tp : before.getTerminationPoint()) { - HwvtepPhysicalPortAugmentation hppAugmentation = - tp.augmentation(HwvtepPhysicalPortAugmentation.class); - if (hppAugmentation != null) { - portListBefore.add(hppAugmentation); - } + for (TerminationPoint tp : before.nonnullTerminationPoint().values()) { + HwvtepPhysicalPortAugmentation hppAugmentation = + tp.augmentation(HwvtepPhysicalPortAugmentation.class); + if (hppAugmentation != null) { + portListBefore.add(hppAugmentation); } } portListBefore.removeAll(portListUpdated); diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortUpdateCommand.java index 54925f2e0..0e05daa7f 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortUpdateCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PhysicalPortUpdateCommand.java @@ -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.transact; import static org.opendaylight.ovsdb.lib.operations.Operations.op; @@ -18,7 +17,6 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Objects; - import org.opendaylight.mdsal.binding.api.DataObjectModification; import org.opendaylight.mdsal.binding.api.DataTreeModification; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepDeviceInfo; @@ -34,11 +32,13 @@ 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.hwvtep.physical.port.attributes.VlanBindings; 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.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.slf4j.Logger; import org.slf4j.LoggerFactory; -public class PhysicalPortUpdateCommand extends AbstractTransactCommand { +public class PhysicalPortUpdateCommand + extends AbstractTransactCommand { private static final Logger LOG = LoggerFactory.getLogger(PhysicalPortUpdateCommand.class); private static final VlanBindingsUnMetDependencyGetter DEPENDENCY_GETTER = new VlanBindingsUnMetDependencyGetter(); @@ -84,17 +84,18 @@ public class PhysicalPortUpdateCommand extends AbstractTransactCommand psNodeiid = nodeIid; - HwvtepPhysicalPortAugmentation port = ((TerminationPoint)data).augmentation( + HwvtepPhysicalPortAugmentation port = data.augmentation( HwvtepPhysicalPortAugmentation.class); if (port == null) { LOG.info("No port augmentation found for port {}", data); @@ -159,7 +160,7 @@ public class PhysicalPortUpdateCommand extends AbstractTransactCommand bindingMap = new HashMap<>(); - if (portAugmentation.getVlanBindings() != null) { - //get UUID by LogicalSwitchRef - for (VlanBindings vlanBinding : portAugmentation.getVlanBindings()) { - @SuppressWarnings("unchecked") - InstanceIdentifier lswitchIid = - (InstanceIdentifier) vlanBinding.getLogicalSwitchRef().getValue(); + //get UUID by LogicalSwitchRef + for (VlanBindings vlanBinding : portAugmentation.nonnullVlanBindings().values()) { + @SuppressWarnings("unchecked") + InstanceIdentifier lswitchIid = + (InstanceIdentifier) vlanBinding.getLogicalSwitchRef().getValue(); - Map inTransitDependencies = DEPENDENCY_GETTER.getInTransitDependencies( - getOperationalState(), vlanBinding); - Map configDependencies = DEPENDENCY_GETTER.getUnMetConfigDependencies( - getOperationalState(), vlanBinding); + Map inTransitDependencies = DEPENDENCY_GETTER.getInTransitDependencies( + getOperationalState(), vlanBinding); + Map configDependencies = DEPENDENCY_GETTER.getUnMetConfigDependencies( + getOperationalState(), vlanBinding); - if (!HwvtepSouthboundUtil.isEmptyMap(configDependencies)) { - createConfigWaitJob(psNodeiid, inputPhysicalPort, key, configDependencies); - continue; - } - if (!HwvtepSouthboundUtil.isEmptyMap(inTransitDependencies)) { - createOperWaitingJob(psNodeiid, inputPhysicalPort, key, inTransitDependencies); - continue; - } + if (!HwvtepSouthboundUtil.isEmptyMap(configDependencies)) { + createConfigWaitJob(psNodeiid, inputPhysicalPort, key, configDependencies); + continue; + } + if (!HwvtepSouthboundUtil.isEmptyMap(inTransitDependencies)) { + createOperWaitingJob(psNodeiid, inputPhysicalPort, key, inTransitDependencies); + continue; + } - UUID lsUUid = TransactUtils.getLogicalSwitchUUID(transaction, getOperationalState(), lswitchIid); - if (lsUUid == null) { - LOG.error("Could not get the logical switch uuid for {}", vlanBinding); - continue; - } - bindingMap.put(vlanBinding.getVlanIdKey().getValue().longValue(), lsUUid); + UUID lsUUid = TransactUtils.getLogicalSwitchUUID(transaction, getOperationalState(), lswitchIid); + if (lsUUid == null) { + LOG.error("Could not get the logical switch uuid for {}", vlanBinding); + continue; } + bindingMap.put(vlanBinding.getVlanIdKey().getValue().longValue(), lsUUid); } physicalPort.setVlanBindings(bindingMap); return bindingMap; @@ -293,13 +292,11 @@ public class PhysicalPortUpdateCommand extends AbstractTransactCommand portListUpdated = new ArrayList<>(); - if (created.getTerminationPoint() != null) { - for (TerminationPoint tp : created.getTerminationPoint()) { - HwvtepPhysicalPortAugmentation hppAugmentation = - tp.augmentation(HwvtepPhysicalPortAugmentation.class); - if (hppAugmentation != null) { - portListUpdated.add(tp); - } + for (TerminationPoint tp : created.nonnullTerminationPoint().values()) { + HwvtepPhysicalPortAugmentation hppAugmentation = + tp.augmentation(HwvtepPhysicalPortAugmentation.class); + if (hppAugmentation != null) { + portListUpdated.add(tp); } } result.put(key, portListUpdated); @@ -321,22 +318,18 @@ public class PhysicalPortUpdateCommand extends AbstractTransactCommand portListUpdated = new ArrayList<>(); List portListBefore = new ArrayList<>(); - if (updated.getTerminationPoint() != null) { - for (TerminationPoint tp : updated.getTerminationPoint()) { - HwvtepPhysicalPortAugmentation hppAugmentation = - tp.augmentation(HwvtepPhysicalPortAugmentation.class); - if (hppAugmentation != null) { - portListUpdated.add(tp); - } + for (TerminationPoint tp : updated.nonnullTerminationPoint().values()) { + HwvtepPhysicalPortAugmentation hppAugmentation = + tp.augmentation(HwvtepPhysicalPortAugmentation.class); + if (hppAugmentation != null) { + portListUpdated.add(tp); } } - if (before.getTerminationPoint() != null) { - for (TerminationPoint tp : before.getTerminationPoint()) { - HwvtepPhysicalPortAugmentation hppAugmentation = - tp.augmentation(HwvtepPhysicalPortAugmentation.class); - if (hppAugmentation != null) { - portListBefore.add(tp); - } + for (TerminationPoint tp : before.nonnullTerminationPoint().values()) { + HwvtepPhysicalPortAugmentation hppAugmentation = + tp.augmentation(HwvtepPhysicalPortAugmentation.class); + if (hppAugmentation != null) { + portListBefore.add(tp); } } portListUpdated.removeAll(portListBefore); @@ -347,7 +340,8 @@ public class PhysicalPortUpdateCommand extends AbstractTransactCommand ipSet = new HashSet<>(); - if (physicalSwitchAugmentation.getManagementIps() != null) { - for (ManagementIps ip: physicalSwitchAugmentation.getManagementIps()) { + Map managementIps = physicalSwitchAugmentation.getManagementIps(); + if (managementIps != null) { + Set ipSet = new HashSet<>(); + for (ManagementIps ip: managementIps.values()) { ipSet.add(ip.getManagementIpsKey().getIpv4Address().getValue()); } physicalSwitch.setManagementIps(ipSet); @@ -161,9 +166,10 @@ public class PhysicalSwitchUpdateCommand extends AbstractTransactCommand { private static void setTunnuleIps(final PhysicalSwitch physicalSwitch, final PhysicalSwitchAugmentation physicalSwitchAugmentation) { - Set ipSet = new HashSet<>(); - if (physicalSwitchAugmentation.getTunnelIps() != null) { - for (TunnelIps ip: physicalSwitchAugmentation.getTunnelIps()) { + final Map tunnelIps = physicalSwitchAugmentation.getTunnelIps(); + if (tunnelIps != null) { + Set ipSet = new HashSet<>(); + for (TunnelIps ip: tunnelIps.values()) { ipSet.add(ip.getTunnelIpsKey().getIpv4Address().getValue()); } physicalSwitch.setTunnelIps(ipSet); @@ -176,61 +182,59 @@ public class PhysicalSwitchUpdateCommand extends AbstractTransactCommand { final boolean switchExists) { //TODO: revisit this code for optimizations //TODO: needs more testing - if (physicalSwitchAugmentation.getTunnels() != null) { - for (Tunnels tunnel : physicalSwitchAugmentation.getTunnels()) { - Optional opTunnelOpt = getOperationalState().getTunnels(iid, tunnel.key()); - Tunnel newTunnel = transaction.getTypedRowWrapper(Tunnel.class); + for (Tunnels tunnel : physicalSwitchAugmentation.nonnullTunnels().values()) { + Optional opTunnelOpt = getOperationalState().getTunnels(iid, tunnel.key()); + Tunnel newTunnel = transaction.getTypedRowWrapper(Tunnel.class); - UUID localUUID = getLocatorUUID(transaction, - (InstanceIdentifier) tunnel.getLocalLocatorRef().getValue()); - UUID remoteUUID = getLocatorUUID(transaction, - (InstanceIdentifier) tunnel.getRemoteLocatorRef().getValue()); - if (localUUID != null && remoteUUID != null) { - // local and remote must exist - newTunnel.setLocal(localUUID); - newTunnel.setRemote(remoteUUID); - setBfdParams(newTunnel, tunnel); - setBfdLocalConfigs(newTunnel, tunnel); - setBfdRemoteConfigs(newTunnel, tunnel); - if (!opTunnelOpt.isPresent()) { - String tunnelUuid = "Tunnel_" + HwvtepSouthboundMapper.getRandomUUID(); - transaction.add(op.insert(newTunnel).withId(tunnelUuid)); - transaction.add(op.comment("Tunnel: Creating " + tunnelUuid)); - if (!switchExists) { - //TODO: Figure out a way to handle this - LOG.warn("Tunnel configuration requires pre-existing physicalSwitch"); - } else { - // TODO: Can we reuse physicalSwitch instead? - PhysicalSwitch phySwitch = transaction.getTypedRowWrapper(PhysicalSwitch.class); - phySwitch.setTunnels(Collections.singleton(new UUID(tunnelUuid))); - phySwitch.setName(physicalSwitchAugmentation.getHwvtepNodeName().getValue()); - transaction.add(op.mutate(phySwitch) - .addMutation(phySwitch.getTunnels().getSchema(), Mutator.INSERT, - phySwitch.getTunnels().getData()) - .where(phySwitch.getNameColumn().getSchema() - .opEqual(phySwitch.getNameColumn().getData())) - .build()); - transaction.add(op.comment("PhysicalSwitch: Mutating " + tunnelUuid)); - } + UUID localUUID = getLocatorUUID(transaction, + (InstanceIdentifier) tunnel.getLocalLocatorRef().getValue()); + UUID remoteUUID = getLocatorUUID(transaction, + (InstanceIdentifier) tunnel.getRemoteLocatorRef().getValue()); + if (localUUID != null && remoteUUID != null) { + // local and remote must exist + newTunnel.setLocal(localUUID); + newTunnel.setRemote(remoteUUID); + setBfdParams(newTunnel, tunnel); + setBfdLocalConfigs(newTunnel, tunnel); + setBfdRemoteConfigs(newTunnel, tunnel); + if (!opTunnelOpt.isPresent()) { + String tunnelUuid = "Tunnel_" + HwvtepSouthboundMapper.getRandomUUID(); + transaction.add(op.insert(newTunnel).withId(tunnelUuid)); + transaction.add(op.comment("Tunnel: Creating " + tunnelUuid)); + if (!switchExists) { + //TODO: Figure out a way to handle this + LOG.warn("Tunnel configuration requires pre-existing physicalSwitch"); } else { - UUID uuid = new UUID(opTunnelOpt.get().getTunnelUuid().getValue()); - Tunnel extraTunnel = transaction.getTypedRowSchema(Tunnel.class); - extraTunnel.getUuidColumn().setData(uuid); - transaction.add(op.update(newTunnel) - .where(extraTunnel.getUuidColumn().getSchema().opEqual(uuid)) - .build()); - transaction.add(op.comment("Tunnel: Updating " + uuid)); + // TODO: Can we reuse physicalSwitch instead? + PhysicalSwitch phySwitch = transaction.getTypedRowWrapper(PhysicalSwitch.class); + phySwitch.setTunnels(Collections.singleton(new UUID(tunnelUuid))); + phySwitch.setName(physicalSwitchAugmentation.getHwvtepNodeName().getValue()); + transaction.add(op.mutate(phySwitch) + .addMutation(phySwitch.getTunnels().getSchema(), Mutator.INSERT, + phySwitch.getTunnels().getData()) + .where(phySwitch.getNameColumn().getSchema() + .opEqual(phySwitch.getNameColumn().getData())) + .build()); + transaction.add(op.comment("PhysicalSwitch: Mutating " + tunnelUuid)); } + } else { + UUID uuid = new UUID(opTunnelOpt.get().getTunnelUuid().getValue()); + Tunnel extraTunnel = transaction.getTypedRowSchema(Tunnel.class); + extraTunnel.getUuidColumn().setData(uuid); + transaction.add(op.update(newTunnel) + .where(extraTunnel.getUuidColumn().getSchema().opEqual(uuid)) + .build()); + transaction.add(op.comment("Tunnel: Updating " + uuid)); } } } } private static void setBfdParams(final Tunnel tunnel, final Tunnels psAugTunnel) { - List bfdParams = psAugTunnel.getBfdParams(); + Map bfdParams = psAugTunnel.getBfdParams(); if (bfdParams != null) { Map bfdParamMap = new HashMap<>(); - for (BfdParams bfdParam : bfdParams) { + for (BfdParams bfdParam : bfdParams.values()) { bfdParamMap.put(bfdParam.getBfdParamKey(), bfdParam.getBfdParamValue()); } try { @@ -242,10 +246,10 @@ public class PhysicalSwitchUpdateCommand extends AbstractTransactCommand { } private static void setBfdLocalConfigs(final Tunnel tunnel, final Tunnels psAugTunnel) { - List bfdLocalConfigs = psAugTunnel.getBfdLocalConfigs(); + Map bfdLocalConfigs = psAugTunnel.getBfdLocalConfigs(); if (bfdLocalConfigs != null) { Map configLocalMap = new HashMap<>(); - for (BfdLocalConfigs localConfig : bfdLocalConfigs) { + for (BfdLocalConfigs localConfig : bfdLocalConfigs.values()) { configLocalMap.put(localConfig.getBfdLocalConfigKey(), localConfig.getBfdLocalConfigValue()); } try { @@ -257,10 +261,10 @@ public class PhysicalSwitchUpdateCommand extends AbstractTransactCommand { } private static void setBfdRemoteConfigs(final Tunnel tunnel, final Tunnels psAugTunnel) { - List bfdRemoteConfigs = psAugTunnel.getBfdRemoteConfigs(); + Map bfdRemoteConfigs = psAugTunnel.getBfdRemoteConfigs(); if (bfdRemoteConfigs != null) { Map configRemoteMap = new HashMap<>(); - for (BfdRemoteConfigs remoteConfig : bfdRemoteConfigs) { + for (BfdRemoteConfigs remoteConfig : bfdRemoteConfigs.values()) { configRemoteMap.put(remoteConfig.getBfdRemoteConfigKey(), remoteConfig.getBfdRemoteConfigValue()); } try { diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PlainLogicalSwitchRemoveCmd.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PlainLogicalSwitchRemoveCmd.java index d1ad3cc73..f48095d1c 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PlainLogicalSwitchRemoveCmd.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/PlainLogicalSwitchRemoveCmd.java @@ -5,17 +5,15 @@ * 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.transact; import static org.opendaylight.ovsdb.lib.operations.Operations.op; import java.util.Collection; -import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; - import org.opendaylight.mdsal.binding.api.DataTreeModification; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepSouthboundConstants; import org.opendaylight.ovsdb.lib.operations.TransactionBuilder; @@ -24,21 +22,24 @@ import org.opendaylight.ovsdb.schema.hardwarevtep.LogicalSwitch; import org.opendaylight.ovsdb.utils.mdsal.utils.Scheduler; 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.hwvtep.global.attributes.LogicalSwitches; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LogicalSwitchesKey; 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; import org.slf4j.LoggerFactory; -public class PlainLogicalSwitchRemoveCmd extends AbstractTransactCommand { +public class PlainLogicalSwitchRemoveCmd + extends AbstractTransactCommand { private static final Logger LOG = LoggerFactory.getLogger(PlainLogicalSwitchRemoveCmd.class); + private AtomicInteger retryCount = new AtomicInteger(5); - private LogicalSwitches logicalSwitches; - private InstanceIdentifier nodeIid; + private final LogicalSwitches logicalSwitches; + private final InstanceIdentifier nodeIid; - public PlainLogicalSwitchRemoveCmd(HwvtepOperationalState state, - Collection> changes, - LogicalSwitches logicalSwitches, - int retryCount) { + public PlainLogicalSwitchRemoveCmd(final HwvtepOperationalState state, + final Collection> changes, + final LogicalSwitches logicalSwitches, + final int retryCount) { super(state, changes); this.logicalSwitches = logicalSwitches; this.retryCount = new AtomicInteger(retryCount); @@ -46,7 +47,7 @@ public class PlainLogicalSwitchRemoveCmd extends AbstractTransactCommand getData(HwvtepGlobalAugmentation augmentation) { + protected Map getData(final HwvtepGlobalAugmentation augmentation) { return augmentation.getLogicalSwitches(); } @Override - protected boolean areEqual(LogicalSwitches logicalSwitches1 , LogicalSwitches logicalSwitches2) { + protected boolean areEqual(final LogicalSwitches logicalSwitches1 , final LogicalSwitches logicalSwitches2) { return logicalSwitches1.key().equals(logicalSwitches2.key()) && Objects.equals(logicalSwitches1.getTunnelKey(), logicalSwitches2.getTunnelKey()); } + @Override public boolean retry() { boolean ret = retryCount.decrementAndGet() > 0; if (ret) { @@ -77,6 +79,7 @@ public class PlainLogicalSwitchRemoveCmd extends AbstractTransactCommand { +public class UcastMacsLocalRemoveCommand + extends AbstractTransactCommand { private static final Logger LOG = LoggerFactory.getLogger(UcastMacsLocalRemoveCommand.class); public UcastMacsLocalRemoveCommand(final HwvtepOperationalState state, @@ -70,7 +72,7 @@ public class UcastMacsLocalRemoveCommand extends AbstractTransactCommand getData(final HwvtepGlobalAugmentation augmentation) { + protected Map getData(final HwvtepGlobalAugmentation augmentation) { return augmentation.getLocalUcastMacs(); } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsLocalUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsLocalUpdateCommand.java index 02451223b..b9d07c63d 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsLocalUpdateCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsLocalUpdateCommand.java @@ -24,6 +24,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types. 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.HwvtepPhysicalLocatorAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LocalUcastMacs; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LocalUcastMacsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LogicalSwitches; 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; @@ -31,7 +32,8 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class UcastMacsLocalUpdateCommand extends AbstractTransactCommand { +public class UcastMacsLocalUpdateCommand + extends AbstractTransactCommand { private static final Logger LOG = LoggerFactory.getLogger(UcastMacsLocalUpdateCommand.class); public UcastMacsLocalUpdateCommand(final HwvtepOperationalState state, @@ -152,7 +154,7 @@ public class UcastMacsLocalUpdateCommand extends AbstractTransactCommand getData(final HwvtepGlobalAugmentation augmentation) { + protected Map getData(final HwvtepGlobalAugmentation augmentation) { return augmentation.getLocalUcastMacs(); } } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsRemoteRemoveCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsRemoteRemoveCommand.java index b6fb026a9..2c44cab04 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsRemoteRemoveCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsRemoteRemoveCommand.java @@ -15,7 +15,6 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Objects; - import org.opendaylight.mdsal.binding.api.DataTreeModification; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepDeviceInfo; import org.opendaylight.ovsdb.lib.notation.UUID; @@ -26,12 +25,14 @@ import org.opendaylight.ovsdb.utils.mdsal.utils.TransactionType; 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.hwvtep.global.attributes.LogicalSwitches; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.RemoteUcastMacs; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.RemoteUcastMacsKey; 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; import org.slf4j.LoggerFactory; -public class UcastMacsRemoteRemoveCommand extends AbstractTransactCommand { +public class UcastMacsRemoteRemoveCommand + extends AbstractTransactCommand { private static final Logger LOG = LoggerFactory.getLogger(UcastMacsRemoteRemoveCommand.class); public UcastMacsRemoteRemoveCommand(final HwvtepOperationalState state, @@ -51,9 +52,9 @@ public class UcastMacsRemoteRemoveCommand extends AbstractTransactCommand nodeIid, - List macs) { + public void onConfigUpdate(final TransactionBuilder transaction, + final InstanceIdentifier nodeIid, + final List macs) { for (RemoteUcastMacs mac : macs) { InstanceIdentifier macKey = nodeIid.augmentation(HwvtepGlobalAugmentation.class) .child(RemoteUcastMacs.class, mac.key()); @@ -63,20 +64,20 @@ public class UcastMacsRemoteRemoveCommand extends AbstractTransactCommand nodeIid, - RemoteUcastMacs remoteMcastMac, - InstanceIdentifier macKey, - Object... extraData) { + public void onConfigUpdate(final TransactionBuilder transaction, + final InstanceIdentifier nodeIid, + final RemoteUcastMacs remoteMcastMac, + final InstanceIdentifier macKey, + final Object... extraData) { processDependencies(EmptyDependencyGetter.INSTANCE, transaction, nodeIid, macKey, remoteMcastMac); } @Override - public void doDeviceTransaction(TransactionBuilder transaction, - InstanceIdentifier instanceIdentifier, - RemoteUcastMacs mac, - InstanceIdentifier macKey, - Object... extraData) { + public void doDeviceTransaction(final TransactionBuilder transaction, + final InstanceIdentifier instanceIdentifier, + final RemoteUcastMacs mac, + final InstanceIdentifier macKey, + final Object... extraData) { removeUcastMacRemote(transaction, instanceIdentifier, Lists.newArrayList(mac)); } @@ -125,17 +126,17 @@ public class UcastMacsRemoteRemoveCommand extends AbstractTransactCommand getData(final HwvtepGlobalAugmentation augmentation) { + protected Map getData(final HwvtepGlobalAugmentation augmentation) { return augmentation.getRemoteUcastMacs(); } @Override - protected boolean areEqual(RemoteUcastMacs remoteUcastMacs1, RemoteUcastMacs remoteUcastMacs2) { + protected boolean areEqual(final RemoteUcastMacs remoteUcastMacs1, final RemoteUcastMacs remoteUcastMacs2) { return Objects.equals(remoteUcastMacs1.key(), remoteUcastMacs2.key()); } @Override - public void onSuccess(TransactionBuilder tx) { + public void onSuccess(final TransactionBuilder tx) { for (MdsalUpdate mdsalUpdate : updates) { RemoteUcastMacs mac = (RemoteUcastMacs) mdsalUpdate.getNewData(); InstanceIdentifier macIid = mdsalUpdate.getKey(); diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsRemoteUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsRemoteUpdateCommand.java index f6e66b7e7..58f353911 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsRemoteUpdateCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UcastMacsRemoteUpdateCommand.java @@ -16,7 +16,6 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Objects; - import org.opendaylight.mdsal.binding.api.DataTreeModification; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepDeviceInfo; import org.opendaylight.ovsdb.lib.notation.UUID; @@ -27,13 +26,15 @@ import org.opendaylight.ovsdb.utils.mdsal.utils.TransactionType; 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.hwvtep.global.attributes.LogicalSwitches; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.RemoteUcastMacs; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.RemoteUcastMacsKey; 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.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class UcastMacsRemoteUpdateCommand extends AbstractTransactCommand { +public class UcastMacsRemoteUpdateCommand + extends AbstractTransactCommand { private static final Logger LOG = LoggerFactory.getLogger(UcastMacsRemoteUpdateCommand.class); private static final UcastMacUnMetDependencyGetter UCAST_MAC_DATA_VALIDATOR = new UcastMacUnMetDependencyGetter(); @@ -146,7 +147,8 @@ public class UcastMacsRemoteUpdateCommand extends AbstractTransactCommand getData(final HwvtepGlobalAugmentation augmentation) { + protected Map getData(final HwvtepGlobalAugmentation augmentation) { return augmentation.getRemoteUcastMacs(); } @@ -196,13 +198,13 @@ public class UcastMacsRemoteUpdateCommand extends AbstractTransactCommand macIid = mdsalUpdate.getKey(); diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UnMetDependencyGetter.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UnMetDependencyGetter.java index 7d9acd80a..54c9c69ac 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UnMetDependencyGetter.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/UnMetDependencyGetter.java @@ -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.transact; import java.util.ArrayList; @@ -14,7 +13,6 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Optional; - import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepDeviceInfo; diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepGlobalRemoveCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepGlobalRemoveCommand.java index 0838b3df5..303c5360f 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepGlobalRemoveCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepGlobalRemoveCommand.java @@ -9,6 +9,7 @@ package org.opendaylight.ovsdb.hwvtepsouthbound.transactions.md; import com.google.common.util.concurrent.FluentFuture; +import java.util.Map; import java.util.Optional; import java.util.concurrent.ExecutionException; import org.opendaylight.mdsal.binding.api.ReadWriteTransaction; @@ -18,7 +19,9 @@ import org.opendaylight.ovsdb.lib.message.TableUpdates; import org.opendaylight.ovsdb.lib.schema.DatabaseSchema; 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.hwvtep.global.attributes.Managers; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.ManagersKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.Switches; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.SwitchesKey; 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; @@ -51,8 +54,9 @@ public class HwvtepGlobalRemoveCommand extends AbstractTransactionCommand { HwvtepGlobalAugmentation hgAugmentation = hwvtepNode.augmentation(HwvtepGlobalAugmentation.class); if (checkIfOnlyConnectedManager(hgAugmentation)) { if (hgAugmentation != null) { - if (hgAugmentation.getSwitches() != null) { - for (Switches hwSwitch : hgAugmentation.getSwitches()) { + Map switches = hgAugmentation.getSwitches(); + if (switches != null) { + for (Switches hwSwitch : switches.values()) { LOG.debug("Deleting hwvtep switch {}", hwSwitch); transaction.delete( LogicalDatastoreType.OPERATIONAL, hwSwitch.getSwitchRef().getValue()); @@ -74,11 +78,12 @@ public class HwvtepGlobalRemoveCommand extends AbstractTransactionCommand { } } - private boolean checkIfOnlyConnectedManager(HwvtepGlobalAugmentation hgAugmentation) { + private static boolean checkIfOnlyConnectedManager(HwvtepGlobalAugmentation hgAugmentation) { if (hgAugmentation != null) { int connectedManager = 0; - if (hgAugmentation.getManagers() != null) { - for (Managers manager : hgAugmentation.getManagers()) { + Map managers = hgAugmentation.getManagers(); + if (managers != null) { + for (Managers manager : managers.values()) { if (manager.isIsConnected()) { connectedManager++; if (connectedManager > ONE_CONNECTED_MANAGER) { diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepMcastMacsLocalUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepMcastMacsLocalUpdateCommand.java index 68fbd80c6..6a0a06a09 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepMcastMacsLocalUpdateCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepMcastMacsLocalUpdateCommand.java @@ -28,7 +28,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types. import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress; 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.hwvtep.rev150901.HwvtepGlobalAugmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepGlobalAugmentationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepLogicalSwitchRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepPhysicalLocatorRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LocalMcastMacs; @@ -64,13 +63,25 @@ public class HwvtepMcastMacsLocalUpdateCommand extends AbstractTransactionComman private void updateData(ReadWriteTransaction transaction, McastMacsLocal macLocal) { final InstanceIdentifier connectionIId = getOvsdbConnectionInstance().getInstanceIdentifier(); - Node connectionNode = buildConnectionNode(macLocal); - transaction.merge(LogicalDatastoreType.OPERATIONAL, connectionIId, connectionNode); + + // Ensure the node exists + transaction.merge(LogicalDatastoreType.OPERATIONAL, connectionIId, + new NodeBuilder().setNodeId(getOvsdbConnectionInstance().getNodeId()).build()); + + final LocalMcastMacs mac = buildLocalMcastMacs(macLocal); + final InstanceIdentifier macIid = connectionIId.augmentation(HwvtepGlobalAugmentation.class) + .child(LocalMcastMacs.class, mac.key()); + + // Merge update, relying on automatic lifecycle... + transaction.merge(LogicalDatastoreType.OPERATIONAL, macIid, mac); + if (mac.getLocatorSet() == null) { + // ... but delete locator set if it is empty + // FIXME: can we use .put() of instead of merge/delete? + transaction.delete(LogicalDatastoreType.OPERATIONAL, macIid.child(LocatorSet.class)); + } } - private Node buildConnectionNode(McastMacsLocal macLocal) { - NodeBuilder connectionNode = new NodeBuilder(); - connectionNode.setNodeId(getOvsdbConnectionInstance().getNodeId()); + private LocalMcastMacs buildLocalMcastMacs(McastMacsLocal macLocal) { LocalMcastMacsBuilder macLocalBuilder = new LocalMcastMacsBuilder(); if (macLocal.getMac().equals(HwvtepSouthboundConstants.UNKNOWN_DST_STRING)) { macLocalBuilder.setMacEntryKey(HwvtepSouthboundConstants.UNKNOWN_DST_MAC); @@ -82,13 +93,7 @@ public class HwvtepMcastMacsLocalUpdateCommand extends AbstractTransactionComman setLocatorSet(macLocalBuilder, macLocal); setLogicalSwitch(macLocalBuilder, macLocal); - List macLocalList = new ArrayList<>(); - macLocalList.add(macLocalBuilder.build()); - - HwvtepGlobalAugmentationBuilder hgAugmentationBuilder = new HwvtepGlobalAugmentationBuilder(); - hgAugmentationBuilder.setLocalMcastMacs(macLocalList); - connectionNode.addAugmentation(HwvtepGlobalAugmentation.class, hgAugmentationBuilder.build()); - return connectionNode.build(); + return macLocalBuilder.build(); } private void setLogicalSwitch(LocalMcastMacsBuilder macLocalBuilder, McastMacsLocal macLocal) { @@ -103,7 +108,7 @@ public class HwvtepMcastMacsLocalUpdateCommand extends AbstractTransactionComman } } - private void setIpAddress(LocalMcastMacsBuilder macLocalBuilder, McastMacsLocal macLocal) { + private static void setIpAddress(LocalMcastMacsBuilder macLocalBuilder, McastMacsLocal macLocal) { if (macLocal.getIpAddr() != null && !macLocal.getIpAddr().isEmpty()) { macLocalBuilder.setIpaddr(IpAddressBuilder.getDefaultInstance(macLocal.getIpAddr())); } @@ -120,8 +125,7 @@ public class HwvtepMcastMacsLocalUpdateCommand extends AbstractTransactionComman for (UUID locUUID : plSet.getLocatorsColumn().getData()) { PhysicalLocator locator = updatedPLocRows.get(locUUID); if (locator == null) { - locator = (PhysicalLocator) getOvsdbConnectionInstance() - .getDeviceInfo().getPhysicalLocator(locUUID); + locator = getOvsdbConnectionInstance().getDeviceInfo().getPhysicalLocator(locUUID); } InstanceIdentifier tpIid = HwvtepSouthboundMapper.createInstanceIdentifier( getOvsdbConnectionInstance().getInstanceIdentifier(), locator); diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepMcastMacsRemoteUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepMcastMacsRemoteUpdateCommand.java index e38f4f253..feb15d94b 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepMcastMacsRemoteUpdateCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepMcastMacsRemoteUpdateCommand.java @@ -29,13 +29,11 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types. import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress; 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.hwvtep.rev150901.HwvtepGlobalAugmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepGlobalAugmentationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepLogicalSwitchRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepPhysicalLocatorRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LogicalSwitches; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.RemoteMcastMacs; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.RemoteMcastMacsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.RemoteMcastMacsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical.locator.set.attributes.LocatorSet; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical.locator.set.attributes.LocatorSetBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; @@ -66,21 +64,27 @@ public class HwvtepMcastMacsRemoteUpdateCommand extends AbstractTransactionComma private void updateData(ReadWriteTransaction transaction, McastMacsRemote macRemote) { final InstanceIdentifier connectionIId = getOvsdbConnectionInstance().getInstanceIdentifier(); - Node connectionNode = buildConnectionNode(macRemote); - transaction.merge(LogicalDatastoreType.OPERATIONAL, connectionIId, connectionNode); - } - InstanceIdentifier getMacIid(InstanceIdentifier connectionIId, Node connectionNode) { - RemoteMcastMacsKey macsKey = - connectionNode.augmentation(HwvtepGlobalAugmentation.class).getRemoteMcastMacs().get(0).key(); - InstanceIdentifier key = connectionIId.augmentation(HwvtepGlobalAugmentation.class) - .child(RemoteMcastMacs.class, macsKey); - return key; + // Ensure the node exists + transaction.merge(LogicalDatastoreType.OPERATIONAL, connectionIId, + new NodeBuilder().setNodeId(getOvsdbConnectionInstance().getNodeId()).build()); + + // Prepare the update in internal structures + final RemoteMcastMacs mac = buildRemoteMcastMacs(macRemote); + final InstanceIdentifier macIid = connectionIId.augmentation(HwvtepGlobalAugmentation.class) + .child(RemoteMcastMacs.class, mac.key()); + addToUpdateTx(RemoteMcastMacs.class, macIid, macRemote.getUuid(), macRemote); + + // Merge update, relying on automatic lifecycle... + transaction.merge(LogicalDatastoreType.OPERATIONAL, macIid, mac); + if (mac.getLocatorSet() == null) { + // ... but delete locator set if it is empty + // FIXME: can we use .put() of instead of merge/delete? + transaction.delete(LogicalDatastoreType.OPERATIONAL, macIid.child(LocatorSet.class)); + } } - private Node buildConnectionNode(McastMacsRemote macRemote) { - NodeBuilder connectionNode = new NodeBuilder(); - connectionNode.setNodeId(getOvsdbConnectionInstance().getNodeId()); + private RemoteMcastMacs buildRemoteMcastMacs(McastMacsRemote macRemote) { RemoteMcastMacsBuilder macRemoteBuilder = new RemoteMcastMacsBuilder(); if (macRemote.getMac().equals(HwvtepSouthboundConstants.UNKNOWN_DST_STRING)) { macRemoteBuilder.setMacEntryKey(HwvtepSouthboundConstants.UNKNOWN_DST_MAC); @@ -92,17 +96,7 @@ public class HwvtepMcastMacsRemoteUpdateCommand extends AbstractTransactionComma setLocatorSet(macRemoteBuilder, macRemote); setLogicalSwitch(macRemoteBuilder, macRemote); - List macRemoteList = new ArrayList<>(); - RemoteMcastMacs mac = macRemoteBuilder.build(); - macRemoteList.add(mac); - - HwvtepGlobalAugmentationBuilder hgAugmentationBuilder = new HwvtepGlobalAugmentationBuilder(); - hgAugmentationBuilder.setRemoteMcastMacs(macRemoteList); - connectionNode.addAugmentation(HwvtepGlobalAugmentation.class, hgAugmentationBuilder.build()); - InstanceIdentifier macIid = getOvsdbConnectionInstance().getInstanceIdentifier() - .augmentation(HwvtepGlobalAugmentation.class).child(RemoteMcastMacs.class, mac.key()); - addToUpdateTx(RemoteMcastMacs.class, macIid, macRemote.getUuid(), macRemote); - return connectionNode.build(); + return macRemoteBuilder.build(); } private void setLogicalSwitch(RemoteMcastMacsBuilder macRemoteBuilder, McastMacsRemote macRemote) { @@ -117,7 +111,7 @@ public class HwvtepMcastMacsRemoteUpdateCommand extends AbstractTransactionComma } } - private void setIpAddress(RemoteMcastMacsBuilder macRemoteBuilder, McastMacsRemote macRemote) { + private static void setIpAddress(RemoteMcastMacsBuilder macRemoteBuilder, McastMacsRemote macRemote) { if (macRemote.getIpAddr() != null && !macRemote.getIpAddr().isEmpty()) { macRemoteBuilder.setIpaddr(IpAddressBuilder.getDefaultInstance(macRemote.getIpAddr())); } @@ -134,8 +128,7 @@ public class HwvtepMcastMacsRemoteUpdateCommand extends AbstractTransactionComma for (UUID locUUID : plSet.getLocatorsColumn().getData()) { PhysicalLocator locator = updatedPLocRows.get(locUUID); if (locator == null) { - locator = (PhysicalLocator) getOvsdbConnectionInstance() - .getDeviceInfo().getPhysicalLocator(locUUID); + locator = getOvsdbConnectionInstance().getDeviceInfo().getPhysicalLocator(locUUID); } InstanceIdentifier tpIid = HwvtepSouthboundMapper.createInstanceIdentifier( getOvsdbConnectionInstance().getInstanceIdentifier(), locator); @@ -147,5 +140,4 @@ public class HwvtepMcastMacsRemoteUpdateCommand extends AbstractTransactionComma } } } - } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepOperationalCommandAggregator.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepOperationalCommandAggregator.java index 2db6ff2d0..1aa57767e 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepOperationalCommandAggregator.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepOperationalCommandAggregator.java @@ -5,13 +5,11 @@ * 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.transactions.md; import java.util.ArrayList; import java.util.List; import java.util.NoSuchElementException; - import org.opendaylight.mdsal.binding.api.ReadWriteTransaction; import org.opendaylight.ovsdb.hwvtepsouthbound.HwvtepConnectionInstance; import org.opendaylight.ovsdb.lib.message.TableUpdates; diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalPortUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalPortUpdateCommand.java index a056df993..702ff75dd 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalPortUpdateCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalPortUpdateCommand.java @@ -45,6 +45,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.HwvtepPhysicalPortAugmentationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LogicalSwitches; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.Switches; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.SwitchesKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical.port.attributes.PortFaultStatus; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical.port.attributes.PortFaultStatusBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical.port.attributes.PortFaultStatusKey; @@ -292,20 +293,16 @@ public class HwvtepPhysicalPortUpdateCommand extends AbstractTransactionCommand private static Optional> getTerminationPointSwitch(final ReadWriteTransaction transaction, final Node node, final String tpName) { HwvtepGlobalAugmentation hwvtepNode = node.augmentation(HwvtepGlobalAugmentation.class); - List switchNodes = hwvtepNode.getSwitches(); + Map switchNodes = hwvtepNode.getSwitches(); if (switchNodes != null && !switchNodes.isEmpty()) { - for (Switches managedNodeEntry : switchNodes) { + for (Switches managedNodeEntry : switchNodes.values()) { @SuppressWarnings("unchecked") - Node switchNode = HwvtepSouthboundUtil - .readNode(transaction, + Node switchNode = HwvtepSouthboundUtil.readNode(transaction, (InstanceIdentifier) managedNodeEntry.getSwitchRef().getValue()).get(); TerminationPointKey tpKey = new TerminationPointKey(new TpId(tpName)); - if (switchNode.getTerminationPoint() != null) { - for (TerminationPoint terminationPoint : switchNode.getTerminationPoint()) { - if (terminationPoint.key().equals(tpKey)) { - return Optional.of((InstanceIdentifier) managedNodeEntry.getSwitchRef().getValue()); - } - } + TerminationPoint terminationPoint = switchNode.nonnullTerminationPoint().get(tpKey); + if (terminationPoint != null) { + return Optional.of((InstanceIdentifier) managedNodeEntry.getSwitchRef().getValue()); } } } else { diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalSwitchUpdateCommand.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalSwitchUpdateCommand.java index 57eac67f3..b3e3a9d9e 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalSwitchUpdateCommand.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/HwvtepPhysicalSwitchUpdateCommand.java @@ -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.transactions.md; import com.google.common.base.Preconditions; @@ -33,7 +32,6 @@ import org.opendaylight.ovsdb.utils.mdsal.utils.TransactionType; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressBuilder; 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.hwvtep.rev150901.HwvtepGlobalAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepGlobalAugmentationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepGlobalRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepNodeName; @@ -117,7 +115,7 @@ public class HwvtepPhysicalSwitchUpdateCommand extends AbstractTransactionComman } } - private InstanceIdentifier getTunnelIpIid(final String tunnelIp, + private static InstanceIdentifier getTunnelIpIid(final String tunnelIp, final InstanceIdentifier psIid) { IpAddress ip = IpAddressBuilder.getDefaultInstance(tunnelIp); TunnelIps tunnelIps = new TunnelIpsBuilder().withKey(new TunnelIpsKey(ip)).setTunnelIpsKey(ip).build(); @@ -143,7 +141,8 @@ public class HwvtepPhysicalSwitchUpdateCommand extends AbstractTransactionComman IpAddress ip = IpAddressBuilder.getDefaultInstance(tunnelIp); InstanceIdentifier tunnelIpsInstanceIdentifier = getTunnelIpIid(tunnelIp, psIid); TunnelIps tunnelIps = new TunnelIpsBuilder().withKey(new TunnelIpsKey(ip)).setTunnelIpsKey(ip).build(); - transaction.put(LogicalDatastoreType.OPERATIONAL, tunnelIpsInstanceIdentifier, tunnelIps, true); + transaction.mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL, tunnelIpsInstanceIdentifier, + tunnelIps); } } @@ -209,17 +208,15 @@ public class HwvtepPhysicalSwitchUpdateCommand extends AbstractTransactionComman NodeBuilder connectionNode = new NodeBuilder(); connectionNode.setNodeId(getOvsdbConnectionInstance().getNodeId()); - HwvtepGlobalAugmentationBuilder hgAugmentationBuilder = new HwvtepGlobalAugmentationBuilder(); - List switches = new ArrayList<>(); InstanceIdentifier switchIid = HwvtepSouthboundMapper.createInstanceIdentifier(getOvsdbConnectionInstance(), phySwitch); - hgAugmentationBuilder.setSwitches(switches); Switches physicalSwitch = new SwitchesBuilder().setSwitchRef(new HwvtepPhysicalSwitchRef(switchIid)).build(); - switches.add(physicalSwitch); - connectionNode.addAugmentation(HwvtepGlobalAugmentation.class, hgAugmentationBuilder.build()); + connectionNode.addAugmentation(new HwvtepGlobalAugmentationBuilder() + .setSwitches(Map.of(physicalSwitch.key(), physicalSwitch)) + .build()); - LOG.debug("Update node with physicalswitch ref {}", hgAugmentationBuilder.getSwitches().iterator().next()); + LOG.debug("Update node with physicalswitch ref {}", physicalSwitch); return connectionNode.build(); } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/test/java/org/opendaylight/ovsdb/hwvtepsouthbound/DataChangeListenerTestBase.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/test/java/org/opendaylight/ovsdb/hwvtepsouthbound/DataChangeListenerTestBase.java index 8c7b29122..32419e0b2 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/test/java/org/opendaylight/ovsdb/hwvtepsouthbound/DataChangeListenerTestBase.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/test/java/org/opendaylight/ovsdb/hwvtepsouthbound/DataChangeListenerTestBase.java @@ -231,7 +231,7 @@ public class DataChangeListenerTestBase extends AbstractDataBrokerTest { HwvtepGlobalAugmentationBuilder builder = new HwvtepGlobalAugmentationBuilder(); nodeBuilder.addAugmentation(HwvtepGlobalAugmentation.class, builder.build()); WriteTransaction transaction = dataBroker.newWriteOnlyTransaction(); - transaction.put(logicalDatastoreType, nodeIid, nodeBuilder.build(), WriteTransaction.CREATE_MISSING_PARENTS); + transaction.mergeParentStructurePut(logicalDatastoreType, nodeIid, nodeBuilder.build()); transaction.commit(); } @@ -261,6 +261,14 @@ public class DataChangeListenerTestBase extends AbstractDataBrokerTest { return mergeNode(logicalDatastoreType, nodeIid, nodeBuilder); } + void deleteData(final LogicalDatastoreType datastoreType, InstanceIdentifier... iids) { + WriteTransaction transaction = dataBroker.newWriteOnlyTransaction(); + for (InstanceIdentifier id : iids) { + transaction.delete(datastoreType, id); + } + transaction.commit(); + } + void deleteData(final LogicalDatastoreType logicalDatastoreType, final Class dataObject, final String[]... data) { NodeBuilder nodeBuilder = prepareNode(nodeIid); @@ -307,7 +315,7 @@ public class DataChangeListenerTestBase extends AbstractDataBrokerTest { final NodeBuilder nodeBuilder) { Node node = nodeBuilder.build(); WriteTransaction transaction = dataBroker.newWriteOnlyTransaction(); - transaction.merge(datastoreType, id, node, WriteTransaction.CREATE_MISSING_PARENTS); + transaction.mergeParentStructureMerge(datastoreType, id, node); transaction.commit(); return node; } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/test/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepDataChangeListenerTest.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/test/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepDataChangeListenerTest.java index ac2acf4df..6d87abf83 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/test/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepDataChangeListenerTest.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/test/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepDataChangeListenerTest.java @@ -32,11 +32,16 @@ import org.opendaylight.ovsdb.lib.schema.typed.TypedBaseTable; import org.opendaylight.ovsdb.schema.hardwarevtep.LogicalSwitch; import org.opendaylight.ovsdb.schema.hardwarevtep.McastMacsRemote; import org.opendaylight.ovsdb.schema.hardwarevtep.UcastMacsRemote; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress; +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.hwvtep.global.attributes.LogicalSwitches; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.RemoteMcastMacs; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.RemoteMcastMacsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.RemoteUcastMacs; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical.locator.set.attributes.LocatorSet; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint; import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -242,7 +247,16 @@ public class HwvtepDataChangeListenerTest extends DataChangeListenerTestBase { addData(LogicalDatastoreType.OPERATIONAL, RemoteMcastMacs.class, mcastMacs); resetOperations(); - addData(LogicalDatastoreType.CONFIGURATION, RemoteMcastMacs.class, mcastMac3WithZeroLocators); + final MacAddress macAddr = new MacAddress("FF:FF:FF:FF:FF:FF"); + final InstanceIdentifier augIid = + nodeIid.augmentation(HwvtepGlobalAugmentation.class); + deleteData(LogicalDatastoreType.CONFIGURATION, + augIid.child(RemoteMcastMacs.class, + new RemoteMcastMacsKey(TestBuilders.buildLogicalSwitchesRef(nodeIid, "ls0"), macAddr)) + .child(LocatorSet.class), + augIid.child(RemoteMcastMacs.class, + new RemoteMcastMacsKey(TestBuilders.buildLogicalSwitchesRef(nodeIid, "ls1"), macAddr)) + .child(LocatorSet.class)); verify(Operations.op, times(2)).delete(ArgumentMatchers.any()); } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/test/java/org/opendaylight/ovsdb/hwvtepsouthbound/TransactionInvokerImplTest.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/test/java/org/opendaylight/ovsdb/hwvtepsouthbound/TransactionInvokerImplTest.java index fdbcc5a6b..2257e128d 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/test/java/org/opendaylight/ovsdb/hwvtepsouthbound/TransactionInvokerImplTest.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/test/java/org/opendaylight/ovsdb/hwvtepsouthbound/TransactionInvokerImplTest.java @@ -21,7 +21,6 @@ import org.junit.runner.RunWith; 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.WriteTransaction; import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBrokerTest; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.ovsdb.hwvtepsouthbound.transactions.md.TransactionCommand; @@ -88,7 +87,7 @@ public class TransactionInvokerImplTest extends AbstractConcurrentDataBrokerTest deleteNode(nodeIid3); } - private void deleteNode(InstanceIdentifier iid) { + private void deleteNode(final InstanceIdentifier iid) { ReadWriteTransaction tx = dataBroker.newReadWriteTransaction(); tx.delete(LogicalDatastoreType.CONFIGURATION, iid); tx.commit(); @@ -126,7 +125,7 @@ public class TransactionInvokerImplTest extends AbstractConcurrentDataBrokerTest } - private InstanceIdentifier createInstanceIdentifier(String nodeIdString) { + private InstanceIdentifier createInstanceIdentifier(final String nodeIdString) { NodeId nodeId = new NodeId(new Uri(nodeIdString)); NodeKey nodeKey = new NodeKey(nodeId); TopologyKey topoKey = new TopologyKey(HwvtepSouthboundConstants.HWVTEP_TOPOLOGY_ID); @@ -139,19 +138,18 @@ public class TransactionInvokerImplTest extends AbstractConcurrentDataBrokerTest private static class AddNodeCmd extends DefaultTransactionComamndImpl { InstanceIdentifier iid; - AddNodeCmd(InstanceIdentifier iid, SettableFuture ft) { + AddNodeCmd(final InstanceIdentifier iid, final SettableFuture ft) { super(ft); this.iid = iid; } @Override - public void execute(ReadWriteTransaction transaction) { + public void execute(final ReadWriteTransaction transaction) { NodeBuilder nodeBuilder = new NodeBuilder(); nodeBuilder.setNodeId(iid.firstKeyOf(Node.class).getNodeId()); HwvtepGlobalAugmentationBuilder builder = new HwvtepGlobalAugmentationBuilder(); nodeBuilder.addAugmentation(HwvtepGlobalAugmentation.class, builder.build()); - transaction.put(LogicalDatastoreType.CONFIGURATION, iid, nodeBuilder.build(), - WriteTransaction.CREATE_MISSING_PARENTS); + transaction.mergeParentStructurePut(LogicalDatastoreType.CONFIGURATION, iid, nodeBuilder.build()); } } @@ -159,13 +157,13 @@ public class TransactionInvokerImplTest extends AbstractConcurrentDataBrokerTest private static class DeleteNodeCmd extends DefaultTransactionComamndImpl { InstanceIdentifier iid; - DeleteNodeCmd(InstanceIdentifier iid, SettableFuture ft) { + DeleteNodeCmd(final InstanceIdentifier iid, final SettableFuture ft) { super(ft); this.iid = iid; } @Override - public void execute(ReadWriteTransaction transaction) { + public void execute(final ReadWriteTransaction transaction) { transaction.delete(LogicalDatastoreType.CONFIGURATION, iid); } } @@ -173,25 +171,25 @@ public class TransactionInvokerImplTest extends AbstractConcurrentDataBrokerTest private static class DefaultTransactionComamndImpl implements TransactionCommand { SettableFuture ft; - DefaultTransactionComamndImpl(SettableFuture ft) { + DefaultTransactionComamndImpl(final SettableFuture ft) { this.ft = ft; } @Override - public void execute(ReadWriteTransaction transaction) { + public void execute(final ReadWriteTransaction transaction) { } @Override - public void setTransactionResultFuture(FluentFuture future) { - future.addCallback(new FutureCallback() { + public void setTransactionResultFuture(final FluentFuture future) { + future.addCallback(new FutureCallback<>() { @Override - public void onSuccess(Object notUsed) { + public void onSuccess(final Object notUsed) { ft.set(null); } @Override - public void onFailure(Throwable throwable) { + public void onFailure(final Throwable throwable) { ft.setException(throwable); } }, MoreExecutors.directExecutor()); diff --git a/hwvtepsouthbound/hwvtepsouthbound-karaf/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-karaf/pom.xml index 3a21f2b6e..086da3986 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-karaf/pom.xml +++ b/hwvtepsouthbound/hwvtepsouthbound-karaf/pom.xml @@ -9,7 +9,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent karaf4-parent - 6.0.4 + 7.0.1 4.0.0 diff --git a/hwvtepsouthbound/pom.xml b/hwvtepsouthbound/pom.xml index c2ede692e..dcfc768d6 100644 --- a/hwvtepsouthbound/pom.xml +++ b/hwvtepsouthbound/pom.xml @@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/library/artifacts/pom.xml b/library/artifacts/pom.xml index 072d1eb24..9a7d97b3a 100644 --- a/library/artifacts/pom.xml +++ b/library/artifacts/pom.xml @@ -13,7 +13,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/library/features/features/pom.xml b/library/features/features/pom.xml index 5de5185b9..d14afe52e 100644 --- a/library/features/features/pom.xml +++ b/library/features/features/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent feature-repo-parent - 6.0.4 + 7.0.1 diff --git a/library/features/odl-ovsdb-library/pom.xml b/library/features/odl-ovsdb-library/pom.xml index 8f202d724..aaac21344 100644 --- a/library/features/odl-ovsdb-library/pom.xml +++ b/library/features/odl-ovsdb-library/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent single-feature-parent - 6.0.4 + 7.0.1 @@ -28,8 +28,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent - odl-jackson-2.9 - 6.0.4 + odl-jackson-2.10 + xml + features + + + org.opendaylight.odlparent + odl-netty-4 xml features diff --git a/library/features/odl-ovsdb-library/src/main/feature/feature.xml b/library/features/odl-ovsdb-library/src/main/feature/feature.xml index 516f441c4..c4a2709c2 100644 --- a/library/features/odl-ovsdb-library/src/main/feature/feature.xml +++ b/library/features/odl-ovsdb-library/src/main/feature/feature.xml @@ -8,7 +8,8 @@ and is available at http://www.eclipse.org/legal/epl-v10.html --> - odl-jackson-2.9 + odl-jackson-2.10 + odl-netty-4 mvn:org.opendaylight.ovsdb/library/${project.version}/cfg/config diff --git a/library/features/pom.xml b/library/features/pom.xml index d5154d465..12ba56a82 100644 --- a/library/features/pom.xml +++ b/library/features/pom.xml @@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 org.opendaylight.ovsdb diff --git a/library/impl/pom.xml b/library/impl/pom.xml index b1aa11224..383f6b6bb 100644 --- a/library/impl/pom.xml +++ b/library/impl/pom.xml @@ -80,11 +80,12 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.aaa aaa-cert - 0.12.0-SNAPSHOT javax.inject javax.inject + provided + true javax.annotation diff --git a/library/impl/src/main/java/org/opendaylight/ovsdb/lib/impl/StalePassiveConnectionService.java b/library/impl/src/main/java/org/opendaylight/ovsdb/lib/impl/StalePassiveConnectionService.java index f5b8fd672..b04ca6ecf 100644 --- a/library/impl/src/main/java/org/opendaylight/ovsdb/lib/impl/StalePassiveConnectionService.java +++ b/library/impl/src/main/java/org/opendaylight/ovsdb/lib/impl/StalePassiveConnectionService.java @@ -10,7 +10,6 @@ package org.opendaylight.ovsdb.lib.impl; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.MoreExecutors; - import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -19,7 +18,6 @@ import java.util.Optional; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; - import org.opendaylight.ovsdb.lib.OvsdbClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -116,4 +114,4 @@ public class StalePassiveConnectionService implements AutoCloseable { @Override public void close() { } -} \ No newline at end of file +} diff --git a/library/impl/src/test/java/org/opendaylight/ovsdb/lib/StalePassiveConnectionServiceTest.java b/library/impl/src/test/java/org/opendaylight/ovsdb/lib/StalePassiveConnectionServiceTest.java index 332a64597..8a079b1e5 100644 --- a/library/impl/src/test/java/org/opendaylight/ovsdb/lib/StalePassiveConnectionServiceTest.java +++ b/library/impl/src/test/java/org/opendaylight/ovsdb/lib/StalePassiveConnectionServiceTest.java @@ -18,7 +18,6 @@ import static org.mockito.Mockito.when; import com.google.common.collect.Lists; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.SettableFuture; - import java.util.HashMap; import java.util.Map; import java.util.concurrent.ExecutionException; @@ -26,7 +25,6 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; - import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; diff --git a/library/karaf/pom.xml b/library/karaf/pom.xml index 238dcf598..6d9dcd5c1 100644 --- a/library/karaf/pom.xml +++ b/library/karaf/pom.xml @@ -9,7 +9,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent karaf4-parent - 6.0.4 + 7.0.1 4.0.0 diff --git a/library/pom.xml b/library/pom.xml index 2cd1af695..29d122f24 100644 --- a/library/pom.xml +++ b/library/pom.xml @@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/pom.xml b/pom.xml index 1f06ab5a8..c04020838 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/schemas/hardwarevtep/src/main/java/org/opendaylight/ovsdb/schema/hardwarevtep/ACLEntry.java b/schemas/hardwarevtep/src/main/java/org/opendaylight/ovsdb/schema/hardwarevtep/ACLEntry.java index 9135abf7a..eba31d358 100644 --- a/schemas/hardwarevtep/src/main/java/org/opendaylight/ovsdb/schema/hardwarevtep/ACLEntry.java +++ b/schemas/hardwarevtep/src/main/java/org/opendaylight/ovsdb/schema/hardwarevtep/ACLEntry.java @@ -5,12 +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.schema.hardwarevtep; import java.util.Map; import java.util.Set; - import org.opendaylight.ovsdb.lib.notation.Column; import org.opendaylight.ovsdb.lib.schema.GenericTableSchema; import org.opendaylight.ovsdb.lib.schema.typed.MethodType; diff --git a/schemas/hardwarevtep/src/main/java/org/opendaylight/ovsdb/schema/hardwarevtep/Global.java b/schemas/hardwarevtep/src/main/java/org/opendaylight/ovsdb/schema/hardwarevtep/Global.java index 17bd04331..3cbeb31af 100644 --- a/schemas/hardwarevtep/src/main/java/org/opendaylight/ovsdb/schema/hardwarevtep/Global.java +++ b/schemas/hardwarevtep/src/main/java/org/opendaylight/ovsdb/schema/hardwarevtep/Global.java @@ -5,12 +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.schema.hardwarevtep; import java.util.Map; import java.util.Set; - import org.opendaylight.ovsdb.lib.notation.Column; import org.opendaylight.ovsdb.lib.notation.UUID; import org.opendaylight.ovsdb.lib.schema.GenericTableSchema; diff --git a/schemas/openvswitch/src/main/java/org/opendaylight/ovsdb/schema/openvswitch/AutoAttach.java b/schemas/openvswitch/src/main/java/org/opendaylight/ovsdb/schema/openvswitch/AutoAttach.java index fa5fa208f..6f686e7ea 100644 --- a/schemas/openvswitch/src/main/java/org/opendaylight/ovsdb/schema/openvswitch/AutoAttach.java +++ b/schemas/openvswitch/src/main/java/org/opendaylight/ovsdb/schema/openvswitch/AutoAttach.java @@ -5,11 +5,9 @@ * 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.schema.openvswitch; import java.util.Map; - import org.opendaylight.ovsdb.lib.notation.Column; import org.opendaylight.ovsdb.lib.schema.GenericTableSchema; import org.opendaylight.ovsdb.lib.schema.typed.MethodType; diff --git a/schemas/openvswitch/src/main/java/org/opendaylight/ovsdb/schema/openvswitch/Bridge.java b/schemas/openvswitch/src/main/java/org/opendaylight/ovsdb/schema/openvswitch/Bridge.java index 72ac4a4f9..cc7186e09 100644 --- a/schemas/openvswitch/src/main/java/org/opendaylight/ovsdb/schema/openvswitch/Bridge.java +++ b/schemas/openvswitch/src/main/java/org/opendaylight/ovsdb/schema/openvswitch/Bridge.java @@ -5,12 +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.schema.openvswitch; import java.util.Map; import java.util.Set; - import org.opendaylight.ovsdb.lib.notation.Column; import org.opendaylight.ovsdb.lib.notation.UUID; import org.opendaylight.ovsdb.lib.schema.GenericTableSchema; diff --git a/schemas/openvswitch/src/main/java/org/opendaylight/ovsdb/schema/openvswitch/Capability.java b/schemas/openvswitch/src/main/java/org/opendaylight/ovsdb/schema/openvswitch/Capability.java index 30d1cc622..df6470373 100644 --- a/schemas/openvswitch/src/main/java/org/opendaylight/ovsdb/schema/openvswitch/Capability.java +++ b/schemas/openvswitch/src/main/java/org/opendaylight/ovsdb/schema/openvswitch/Capability.java @@ -5,11 +5,9 @@ * 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.schema.openvswitch; import java.util.Map; - import org.opendaylight.ovsdb.lib.notation.Column; import org.opendaylight.ovsdb.lib.schema.GenericTableSchema; import org.opendaylight.ovsdb.lib.schema.typed.MethodType; diff --git a/schemas/pom.xml b/schemas/pom.xml index 31c02491f..fefe7492e 100644 --- a/schemas/pom.xml +++ b/schemas/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/southbound/pom.xml b/southbound/pom.xml index 13d545f7b..c8c5850d5 100644 --- a/southbound/pom.xml +++ b/southbound/pom.xml @@ -10,7 +10,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/southbound/southbound-artifacts/pom.xml b/southbound/southbound-artifacts/pom.xml index 8789cd741..cc34ddf36 100644 --- a/southbound/southbound-artifacts/pom.xml +++ b/southbound/southbound-artifacts/pom.xml @@ -13,7 +13,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/southbound/southbound-features/features/pom.xml b/southbound/southbound-features/features/pom.xml index ee80b3898..1058ef8ea 100644 --- a/southbound/southbound-features/features/pom.xml +++ b/southbound/southbound-features/features/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent feature-repo-parent - 6.0.4 + 7.0.1 diff --git a/southbound/southbound-features/odl-ovsdb-southbound-api/pom.xml b/southbound/southbound-features/odl-ovsdb-southbound-api/pom.xml index 64ec71d86..b4885dfff 100644 --- a/southbound/southbound-features/odl-ovsdb-southbound-api/pom.xml +++ b/southbound/southbound-features/odl-ovsdb-southbound-api/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent single-feature-parent - 6.0.4 + 7.0.1 @@ -29,7 +29,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.mdsal mdsal-artifacts - 5.0.9 + 6.0.0 pom import diff --git a/southbound/southbound-features/odl-ovsdb-southbound-impl-rest/pom.xml b/southbound/southbound-features/odl-ovsdb-southbound-impl-rest/pom.xml index 255f193df..0e2cad076 100644 --- a/southbound/southbound-features/odl-ovsdb-southbound-impl-rest/pom.xml +++ b/southbound/southbound-features/odl-ovsdb-southbound-impl-rest/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent single-feature-parent - 6.0.4 + 7.0.1 diff --git a/southbound/southbound-features/odl-ovsdb-southbound-impl-ui/pom.xml b/southbound/southbound-features/odl-ovsdb-southbound-impl-ui/pom.xml index bfe3453b0..30f56975b 100644 --- a/southbound/southbound-features/odl-ovsdb-southbound-impl-ui/pom.xml +++ b/southbound/southbound-features/odl-ovsdb-southbound-impl-ui/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent single-feature-parent - 6.0.4 + 7.0.1 diff --git a/southbound/southbound-features/odl-ovsdb-southbound-impl/pom.xml b/southbound/southbound-features/odl-ovsdb-southbound-impl/pom.xml index a19447726..706a81b87 100644 --- a/southbound/southbound-features/odl-ovsdb-southbound-impl/pom.xml +++ b/southbound/southbound-features/odl-ovsdb-southbound-impl/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent single-feature-parent - 6.0.4 + 7.0.1 @@ -33,13 +33,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html xml features - org.opendaylight.infrautils odl-infrautils-diagstatus @@ -47,6 +40,20 @@ and is available at http://www.eclipse.org/legal/epl-v10.html xml features + + org.opendaylight.serviceutils + odl-serviceutils-tools + 0.6.0-SNAPSHOT + xml + features + + + org.opendaylight.ovsdb + odl-ovsdb-utils + ${project.version} + xml + features + ${project.groupId} odl-ovsdb-southbound-api @@ -74,30 +81,5 @@ and is available at http://www.eclipse.org/legal/epl-v10.html cfg config - - - javax.inject - javax.inject - - - - diff --git a/southbound/southbound-features/odl-ovsdb-southbound-impl/src/main/feature/feature.xml b/southbound/southbound-features/odl-ovsdb-southbound-impl/src/main/feature/feature.xml index d5bafd76e..bea903bda 100644 --- a/southbound/southbound-features/odl-ovsdb-southbound-impl/src/main/feature/feature.xml +++ b/southbound/southbound-features/odl-ovsdb-southbound-impl/src/main/feature/feature.xml @@ -8,7 +8,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html --> - odl-jackson-2.9 + odl-jackson-2.10 mvn:org.opendaylight.ovsdb/southbound-impl/${project.version}/cfg/config diff --git a/southbound/southbound-features/odl-ovsdb-southbound-test/pom.xml b/southbound/southbound-features/odl-ovsdb-southbound-test/pom.xml index 2f769c264..ed38d42c2 100644 --- a/southbound/southbound-features/odl-ovsdb-southbound-test/pom.xml +++ b/southbound/southbound-features/odl-ovsdb-southbound-test/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent single-feature-parent - 6.0.4 + 7.0.1 diff --git a/southbound/southbound-features/pom.xml b/southbound/southbound-features/pom.xml index 76bf8b117..971250257 100644 --- a/southbound/southbound-features/pom.xml +++ b/southbound/southbound-features/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/southbound/southbound-impl/pom.xml b/southbound/southbound-impl/pom.xml index 0bb2fada2..6d6dfed32 100644 --- a/southbound/southbound-impl/pom.xml +++ b/southbound/southbound-impl/pom.xml @@ -91,6 +91,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html javax.inject javax.inject + provided true @@ -118,7 +119,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.mdsal - mdsal-binding-dom-adapter + mdsal-binding-test-utils test diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/InstanceIdentifierCodec.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/InstanceIdentifierCodec.java index e80ccd5b2..d67dd529f 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/InstanceIdentifierCodec.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/InstanceIdentifierCodec.java @@ -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.URI; @@ -16,20 +15,22 @@ 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.DataSchemaContextTree; +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.api.SchemaContext; -import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class InstanceIdentifierCodec extends AbstractModuleStringInstanceIdentifierCodec - implements SchemaContextListener { + implements EffectiveModelContextListener { private static final Logger LOG = LoggerFactory.getLogger(InstanceIdentifierCodec.class); + private final BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer; + private DataSchemaContextTree dataSchemaContextTree; private SchemaContext context; - private final BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer; public InstanceIdentifierCodec(DOMSchemaService schemaService, BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer) { @@ -53,7 +54,7 @@ public class InstanceIdentifierCodec extends AbstractModuleStringInstanceIdentif } @Override - public void onGlobalContextUpdated(SchemaContext schemaContext) { + public void onModelContextUpdated(EffectiveModelContext schemaContext) { this.context = schemaContext; this.dataSchemaContextTree = DataSchemaContextTree.from(schemaContext); } diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionInstance.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionInstance.java index 0d03693c1..59445bb65 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionInstance.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionInstance.java @@ -59,7 +59,9 @@ import org.opendaylight.ovsdb.utils.yang.YangUtils; 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.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.OpenvswitchExternalIds; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.OpenvswitchExternalIdsKey; 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.OpenvswitchOtherConfigsKey; 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; @@ -79,8 +81,8 @@ public class OvsdbConnectionInstance { private Entity connectedEntity; private EntityOwnershipCandidateRegistration deviceOwnershipCandidateRegistration; private OvsdbNodeAugmentation initialCreateData = null; - private Map> ports = new ConcurrentHashMap<>(); - private Map> portInterfaces = new ConcurrentHashMap<>(); + private final Map> ports = new ConcurrentHashMap<>(); + private final Map> portInterfaces = new ConcurrentHashMap<>(); OvsdbConnectionInstance(final ConnectionInfo key, final OvsdbClient client, final TransactionInvoker txInvoker, final InstanceIdentifier iid) { @@ -225,7 +227,8 @@ public class OvsdbConnectionInstance { // OpenVSwitchPart OpenVSwitch ovs = transaction.getTypedRowWrapper(OpenVSwitch.class); - List externalIds = this.initialCreateData.getOpenvswitchExternalIds(); + Map externalIds = + this.initialCreateData.getOpenvswitchExternalIds(); stampInstanceIdentifier(transaction, this.instanceIdentifier.firstIdentifierOf(Node.class), instanceIdentifierCodec); @@ -245,7 +248,8 @@ public class OvsdbConnectionInstance { - List otherConfigs = this.initialCreateData.getOpenvswitchOtherConfigs(); + Map otherConfigs = + this.initialCreateData.getOpenvswitchOtherConfigs(); if (otherConfigs != null) { try { ovs.setOtherConfig(YangUtils.convertYangKeyValueListToMap(otherConfigs, diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionManager.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionManager.java index 71577811c..975c19524 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionManager.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionManager.java @@ -59,6 +59,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.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.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; @@ -511,8 +512,9 @@ public class OvsdbConnectionManager implements OvsdbConnectionListener, AutoClos Node ovsdbNode = ovsdbNodeOpt.get(); OvsdbNodeAugmentation nodeAugmentation = ovsdbNode.augmentation(OvsdbNodeAugmentation.class); if (nodeAugmentation != null) { - if (nodeAugmentation.getManagedNodeEntry() != null) { - for (ManagedNodeEntry managedNode : nodeAugmentation.getManagedNodeEntry()) { + Map entries = nodeAugmentation.getManagedNodeEntry(); + if (entries != null) { + for (ManagedNodeEntry managedNode : entries.values()) { transaction.delete( LogicalDatastoreType.OPERATIONAL, managedNode.getBridgeRef().getValue()); } diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbMonitorCallback.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbMonitorCallback.java index d550c6653..e5e669598 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbMonitorCallback.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbMonitorCallback.java @@ -8,7 +8,6 @@ package org.opendaylight.ovsdb.southbound; import java.util.concurrent.atomic.AtomicBoolean; - import org.opendaylight.ovsdb.lib.MonitorCallBack; import org.opendaylight.ovsdb.lib.message.TableUpdates; import org.opendaylight.ovsdb.lib.schema.DatabaseSchema; @@ -18,8 +17,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class OvsdbMonitorCallback implements MonitorCallBack { - private static final Logger LOG = LoggerFactory.getLogger(OvsdbMonitorCallback.class); + private final InstanceIdentifierCodec instanceIdentifierCodec; private TransactionInvoker txInvoker; private OvsdbConnectionInstance key; diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbOperGlobalListener.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbOperGlobalListener.java index 961634cb4..a2391a8f5 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbOperGlobalListener.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/OvsdbOperGlobalListener.java @@ -5,14 +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.southbound; import java.util.Collection; 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; @@ -33,15 +31,15 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class OvsdbOperGlobalListener implements ClusteredDataTreeChangeListener, AutoCloseable { + public static final ConcurrentMap, Node> OPER_NODE_CACHE = new ConcurrentHashMap<>(); private static final Logger LOG = LoggerFactory.getLogger(OvsdbOperGlobalListener.class); + private ListenerRegistration registration; private DataBroker db; - public static final ConcurrentMap, Node> OPER_NODE_CACHE = new ConcurrentHashMap<>(); private final OvsdbConnectionManager ovsdbConnectionManager; private final TransactionInvoker txInvoker; - OvsdbOperGlobalListener(DataBroker db, OvsdbConnectionManager ovsdbConnectionManager, TransactionInvoker txInvoker) { LOG.info("Registering OvsdbOperGlobalListener"); diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundConstants.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundConstants.java index 55370d17f..953323d09 100755 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundConstants.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundConstants.java @@ -15,7 +15,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; - 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.DatapathTypeBase; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathTypeNetdev; diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundMapper.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundMapper.java index 99bcca1c7..fe634f1ee 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundMapper.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundMapper.java @@ -50,12 +50,15 @@ 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.QosTypeBase; 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.ControllerEntryBuilder; +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.bridge.attributes.ProtocolEntry; 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.bridge.attributes.ProtocolEntryKey; 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.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfoBuilder; 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.ManagerEntryBuilder; +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; @@ -208,26 +211,22 @@ public final class SouthboundMapper { return datapathtype; } - public static Class createDatapathType(final String type) { - Preconditions.checkNotNull(type); + public static Class createDatapathType(final String type) { if (type.isEmpty()) { return DatapathTypeSystem.class; - } else { - ImmutableBiMap> mapper = - SouthboundConstants.DATAPATH_TYPE_MAP.inverse(); - return mapper.get(type); } + return SouthboundConstants.DATAPATH_TYPE_MAP.inverse().get(type); } public static Set createOvsdbBridgeProtocols(final OvsdbBridgeAugmentation ovsdbBridgeNode) { Set protocols = new HashSet<>(); - if (ovsdbBridgeNode.getProtocolEntry() != null && ovsdbBridgeNode.getProtocolEntry().size() > 0) { - for (ProtocolEntry protocol : ovsdbBridgeNode.getProtocolEntry()) { - if (SouthboundConstants.OVSDB_PROTOCOL_MAP.get(protocol.getProtocol()) != null) { - protocols.add(SouthboundConstants.OVSDB_PROTOCOL_MAP.get(protocol.getProtocol())); - } else { - throw new IllegalArgumentException("Unknown protocol " + protocol.getProtocol()); - } + Map entries = ovsdbBridgeNode.getProtocolEntry(); + if (entries != null) { + for (ProtocolEntry protocol : entries.values()) { + Class lookup = protocol.getProtocol(); + final String toAdd = SouthboundConstants.OVSDB_PROTOCOL_MAP.get(protocol.getProtocol()); + Preconditions.checkArgument(toAdd != null, "Unknown protocol %s", lookup); + protocols.add(toAdd); } } return protocols; @@ -253,12 +252,15 @@ public final class SouthboundMapper { schemaMismatchLog("protocols", "Bridge", e); } List protocolList = new ArrayList<>(); - if (protocols != null && protocols.size() > 0) { + if (protocols != null && !protocols.isEmpty()) { ImmutableBiMap> mapper = SouthboundConstants.OVSDB_PROTOCOL_MAP.inverse(); for (String protocol : protocols) { - if (protocol != null && mapper.get(protocol) != null) { - protocolList.add(new ProtocolEntryBuilder().setProtocol(mapper.get(protocol)).build()); + if (protocol != null) { + final Class mapped = mapper.get(protocol); + if (mapped != null) { + protocolList.add(new ProtocolEntryBuilder().setProtocol(mapped).build()); + } } } } @@ -308,9 +310,9 @@ public final class SouthboundMapper { return controllerEntriesCreated; } - final List controllerEntries = ovsdbBridgeAugmentation.getControllerEntry(); + final Map controllerEntries = ovsdbBridgeAugmentation.getControllerEntry(); if (controllerEntries != null) { - for (ControllerEntry controllerEntry : controllerEntries) { + for (ControllerEntry controllerEntry : controllerEntries.values()) { final Controller controller = updatedControllerRows.get( new UUID(controllerEntry.getControllerUuid().getValue())); addControllerEntries(controllerEntriesCreated, controller); @@ -354,10 +356,10 @@ public final class SouthboundMapper { // This is not called from anywhere but test. Do we need this? public static Map createOvsdbController(final OvsdbBridgeAugmentation omn, final DatabaseSchema dbSchema) { - List controllerEntries = omn.getControllerEntry(); + Map controllerEntries = omn.getControllerEntry(); Map controllerMap = new HashMap<>(); if (controllerEntries != null && !controllerEntries.isEmpty()) { - for (ControllerEntry controllerEntry : controllerEntries) { + for (ControllerEntry controllerEntry : controllerEntries.values()) { String controllerNamedUuid = "Controller_" + getRandomUuid(); Controller controller = TypedDatabaseSchema.of(dbSchema).getTypedRowWrapper(Controller.class); controller.setTarget(controllerEntry.getTarget().getValue()); @@ -430,9 +432,9 @@ public final class SouthboundMapper { return managerEntriesCreated; } - final List managerEntries = ovsdbNodeAugmentation.getManagerEntry(); + final Map managerEntries = ovsdbNodeAugmentation.getManagerEntry(); if (managerEntries != null) { - for (ManagerEntry managerEntry : managerEntries) { + for (ManagerEntry managerEntry : managerEntries.values()) { final Manager manager = updatedManagerRows.get(managerEntry.getTarget()); addManagerEntries(managerEntriesCreated, manager); } @@ -534,9 +536,9 @@ public final class SouthboundMapper { SouthboundMapper.createInstanceIdentifier(bridgeNode.getNodeId()); changes.put(bridgeNodeIid, bridgeNode); - List terminationPoints = bridgeNode.getTerminationPoint(); - if (terminationPoints != null && !terminationPoints.isEmpty()) { - for (TerminationPoint tp : terminationPoints) { + Map terminationPoints = bridgeNode.getTerminationPoint(); + if (terminationPoints != null) { + for (TerminationPoint tp : terminationPoints.values()) { OvsdbTerminationPointAugmentation ovsdbTerminationPointAugmentation = tp.augmentation(OvsdbTerminationPointAugmentation.class); if (ovsdbTerminationPointAugmentation != null) { diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundProvider.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundProvider.java index a85325a21..949f76395 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundProvider.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundProvider.java @@ -21,7 +21,6 @@ import javax.annotation.PreDestroy; import javax.inject.Inject; import javax.inject.Singleton; import org.apache.aries.blueprint.annotation.service.Reference; - import org.opendaylight.infrautils.diagstatus.DiagStatusService; import org.opendaylight.infrautils.diagstatus.ServiceState; import org.opendaylight.infrautils.ready.SystemReadyMonitor; @@ -56,18 +55,17 @@ import org.slf4j.LoggerFactory; @Singleton public class SouthboundProvider implements ClusteredDataTreeChangeListener, AutoCloseable { - 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; + public static DataBroker getDb() { return db; } - // FIXME: get rid of this static - @SuppressFBWarnings("ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD") - private static DataBroker db; private OvsdbConnectionManager cm; private TransactionInvoker txInvoker; private OvsdbDataTreeChangeListener ovsdbDataTreeChangeListener; @@ -178,7 +176,7 @@ public class SouthboundProvider implements ClusteredDataTreeChangeListener nodeIid) { String nodeId = ""; diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AutoAttachRemovedCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AutoAttachRemovedCommand.java index fc37e32a4..e0c2904da 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AutoAttachRemovedCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AutoAttachRemovedCommand.java @@ -10,10 +10,8 @@ package org.opendaylight.ovsdb.southbound.ovsdb.transact; 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.List; import java.util.Map; import java.util.Optional; import java.util.concurrent.ExecutionException; @@ -28,13 +26,14 @@ 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.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; 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.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; @@ -70,8 +69,9 @@ public class AutoAttachRemovedCommand implements TransactCommand { final OvsdbNodeAugmentation deletedOvsdbNodeAugmentation = updated.get(ovsdbNodeIid); if (ovsdbNodeAugmentation != null && deletedOvsdbNodeAugmentation != null) { - final List origAutoattachList = ovsdbNodeAugmentation.getAutoattach(); - final List deletedAutoattachList = deletedOvsdbNodeAugmentation.getAutoattach(); + final Map origAutoattachList = ovsdbNodeAugmentation.getAutoattach(); + final Map deletedAutoattachList = + deletedOvsdbNodeAugmentation.getAutoattach(); if (origAutoattachList != null && !origAutoattachList.isEmpty() && (deletedAutoattachList == null || deletedAutoattachList.isEmpty())) { @@ -83,10 +83,10 @@ public class AutoAttachRemovedCommand implements TransactCommand { } final OvsdbNodeAugmentation currentOvsdbNode = state.getBridgeNode(ovsdbNodeIid).get().augmentation(OvsdbNodeAugmentation.class); - final List currentAutoAttach = currentOvsdbNode.getAutoattach(); - for (final Autoattach origAutoattach : origAutoattachList) { - final Uri autoAttachId = origAutoattach.getAutoattachId(); - deleteAutoAttach(transaction, ovsdbNodeIid, getAutoAttachUuid(currentAutoAttach, autoAttachId)); + final Map currentAutoAttach = currentOvsdbNode.getAutoattach(); + for (final Autoattach origAutoattach : origAutoattachList.values()) { + deleteAutoAttach(transaction, ovsdbNodeIid, getAutoAttachUuid(currentAutoAttach, + origAutoattach.key())); } } } @@ -123,18 +123,19 @@ public class AutoAttachRemovedCommand implements TransactCommand { } } - private Uuid getAutoAttachUuid(final List currentAutoAttach, final Uri autoAttachId) { - if (currentAutoAttach != null && !currentAutoAttach.isEmpty()) { - for (final Autoattach autoAttach : currentAutoAttach) { - if (autoAttach.getAutoattachId().equals(autoAttachId)) { - return autoAttach.getAutoattachUuid(); - } + private static Uuid getAutoAttachUuid(final Map currentAutoAttach, + final AutoattachKey autoAttachId) { + if (currentAutoAttach != null) { + final Autoattach autoAttach = currentAutoAttach.get(autoAttachId); + if (autoAttach != null) { + return autoAttach.getAutoattachUuid(); } } return null; } - private OvsdbBridgeAugmentation getBridge(final InstanceIdentifier key, final Uuid aaUuid) { + private static OvsdbBridgeAugmentation getBridge(final InstanceIdentifier key, + final Uuid aaUuid) { if (aaUuid == null) { return null; } @@ -143,9 +144,9 @@ public class AutoAttachRemovedCommand implements TransactCommand { try (ReadTransaction transaction = SouthboundProvider.getDb().newReadOnlyTransaction()) { final Optional nodeOptional = SouthboundUtil.readNode(transaction, nodeIid); if (nodeOptional.isPresent()) { - final List managedNodes = + final Map managedNodes = nodeOptional.get().augmentation(OvsdbNodeAugmentation.class).getManagedNodeEntry(); - for (final ManagedNodeEntry managedNode : managedNodes) { + for (final ManagedNodeEntry managedNode : managedNodes.values()) { final OvsdbBridgeRef ovsdbBridgeRef = managedNode.getBridgeRef(); final InstanceIdentifier brIid = ovsdbBridgeRef.getValue() .firstIdentifierOf(Node.class).augmentation(OvsdbBridgeAugmentation.class); diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AutoAttachUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AutoAttachUpdateCommand.java index 608f35bcc..a17146443 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AutoAttachUpdateCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AutoAttachUpdateCommand.java @@ -13,7 +13,6 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Collection; import java.util.Collections; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Optional; @@ -35,8 +34,11 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types. 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.OvsdbNodeAugmentation; 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.autoattach.AutoattachExternalIds; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.autoattach.AutoattachExternalIdsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.autoattach.Mappings; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.autoattach.MappingsKey; 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; @@ -80,7 +82,7 @@ public class AutoAttachUpdateCommand implements TransactCommand { if (!state.getBridgeNode(iid).isPresent()) { return; } - final List autoAttachList = ovsdbNode.getAutoattach(); + final Map autoAttachList = ovsdbNode.getAutoattach(); if (autoAttachList != null) { if (true) { // FIXME: Remove if loop after ovs community supports external_ids column in AutoAttach Table @@ -91,8 +93,8 @@ public class AutoAttachUpdateCommand implements TransactCommand { final OvsdbNodeAugmentation currentOvsdbNode = state.getBridgeNode(iid).get().augmentation(OvsdbNodeAugmentation.class); - final List currentAutoAttach = currentOvsdbNode.getAutoattach(); - for (final Autoattach autoAttach : autoAttachList) { + final Map currentAutoAttach = currentOvsdbNode.getAutoattach(); + for (final Autoattach autoAttach : autoAttachList.values()) { final AutoAttach autoAttachWrapper = transaction.getTypedRowWrapper(AutoAttach.class); if (autoAttach.getSystemName() != null) { autoAttachWrapper.setSystemName(autoAttach.getSystemName()); @@ -101,20 +103,20 @@ public class AutoAttachUpdateCommand implements TransactCommand { autoAttachWrapper.setSystemDescription(autoAttach.getSystemDescription()); } - final List mappingsList = autoAttach.getMappings(); + final Map mappingsList = autoAttach.getMappings(); if (mappingsList != null && !mappingsList.isEmpty()) { final Map newMappings = new HashMap<>(); - for (final Mappings mappings : mappingsList) { - final Long mappingsValue = new Long(mappings.getMappingsValue().toString()); - newMappings.put(mappings.getMappingsKey().toJava(), mappingsValue); + for (final Mappings mappings : mappingsList.values()) { + newMappings.put(mappings.getMappingsKey().toJava(), mappings.getMappingsValue().longValue()); } autoAttachWrapper.setMappings(newMappings); } - final List externalIds = autoAttach.getAutoattachExternalIds(); + final Map externalIds = + autoAttach.getAutoattachExternalIds(); final Map externalIdsMap = new HashMap<>(); if (externalIds != null) { - for (final AutoattachExternalIds externalId : externalIds) { + for (final AutoattachExternalIds externalId : externalIds.values()) { externalIdsMap.put(externalId.getAutoattachExternalIdKey(), externalId.getAutoattachExternalIdValue()); } @@ -128,7 +130,7 @@ public class AutoAttachUpdateCommand implements TransactCommand { // LOG.warn("Incomplete AutoAttach external IDs"); // } - final Uuid aaUuid = getAutoAttachUuid(currentAutoAttach, autoAttach.getAutoattachId()); + final Uuid aaUuid = getAutoAttachUuid(currentAutoAttach, autoAttach.key()); if (aaUuid != null) { final UUID uuid = new UUID(aaUuid.getValue()); final AutoAttach newAutoAttach = transaction.getTypedRowSchema(AutoAttach.class); @@ -162,7 +164,7 @@ public class AutoAttachUpdateCommand implements TransactCommand { } } - private OvsdbBridgeAugmentation getBridge(final InstanceIdentifier key, + private static OvsdbBridgeAugmentation getBridge(final InstanceIdentifier key, final Uri bridgeUri) { final InstanceIdentifier bridgeIid = InstanceIdentifier .create(NetworkTopology.class) @@ -183,12 +185,12 @@ public class AutoAttachUpdateCommand implements TransactCommand { return bridge; } - private Uuid getAutoAttachUuid(final List currentAutoAttach, final Uri autoattachId) { - if (currentAutoAttach != null && !currentAutoAttach.isEmpty()) { - for (final Autoattach autoAttach : currentAutoAttach) { - if (autoAttach.getAutoattachId().equals(autoattachId)) { - return autoAttach.getAutoattachUuid(); - } + private static Uuid getAutoAttachUuid(final Map currentAutoAttach, + final AutoattachKey autoattachId) { + if (currentAutoAttach != null) { + final Autoattach found = currentAutoAttach.get(autoattachId); + if (found != null) { + return found.getAutoattachUuid(); } } return null; diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeOperationalState.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeOperationalState.java index b0c4c4620..79a45766f 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeOperationalState.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeOperationalState.java @@ -5,12 +5,11 @@ * 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 java.util.Collection; +import java.util.Map; import java.util.Optional; - import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.binding.api.DataTreeModification; import org.opendaylight.mdsal.binding.api.ReadTransaction; @@ -30,7 +29,7 @@ import org.slf4j.LoggerFactory; public class BridgeOperationalState { private static final Logger LOG = LoggerFactory.getLogger(BridgeOperationalState.class); - private DataBroker db; + private final DataBroker db; public BridgeOperationalState(DataBroker db, DataChangeEvent changes) { this.db = db; @@ -66,10 +65,9 @@ public class BridgeOperationalState { if (nodeOptional.isPresent() && nodeOptional.get().getTerminationPoint() != null) { TerminationPointKey key = iid.firstKeyOf(TerminationPoint.class); if (key != null) { - for (TerminationPoint tp:nodeOptional.get().getTerminationPoint()) { - if (tp.key().equals(key)) { - return Optional.of(tp); - } + final TerminationPoint tp = nodeOptional.get().nonnullTerminationPoint().get(key); + if (tp != null) { + return Optional.of(tp); } } } else { @@ -90,11 +88,13 @@ public class BridgeOperationalState { public Optional getControllerEntry(InstanceIdentifier iid) { if (iid != null) { Optional ovsdbBridgeOptional = getOvsdbBridgeAugmentation(iid); - if (ovsdbBridgeOptional.isPresent() && ovsdbBridgeOptional.get().getControllerEntry() != null) { - ControllerEntryKey key = iid.firstKeyOf(ControllerEntry.class); - if (key != null) { - for (ControllerEntry entry: ovsdbBridgeOptional.get().getControllerEntry()) { - if (entry.key().equals(key)) { + if (ovsdbBridgeOptional.isPresent()) { + Map entries = ovsdbBridgeOptional.get().getControllerEntry(); + if (entries != null) { + ControllerEntryKey key = iid.firstKeyOf(ControllerEntry.class); + if (key != null) { + ControllerEntry entry = entries.get(key); + if (entry != null) { return Optional.of(entry); } } @@ -107,11 +107,13 @@ public class BridgeOperationalState { public Optional getProtocolEntry(InstanceIdentifier iid) { if (iid != null) { Optional ovsdbBridgeOptional = getOvsdbBridgeAugmentation(iid); - if (ovsdbBridgeOptional.isPresent() && ovsdbBridgeOptional.get().getProtocolEntry() != null) { - ProtocolEntryKey key = iid.firstKeyOf(ProtocolEntry.class); - if (key != null) { - for (ProtocolEntry entry: ovsdbBridgeOptional.get().getProtocolEntry()) { - if (entry.key().equals(key)) { + if (ovsdbBridgeOptional.isPresent()) { + Map entries = ovsdbBridgeOptional.get().getProtocolEntry(); + if (entries != null) { + ProtocolEntryKey key = iid.firstKeyOf(ProtocolEntry.class); + if (key != null) { + ProtocolEntry entry = entries.get(key); + if (entry != null) { return Optional.of(entry); } } @@ -120,5 +122,4 @@ public class BridgeOperationalState { } return Optional.empty(); } - } diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OvsdbNodeUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OvsdbNodeUpdateCommand.java index bca535391..41dfaecf5 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OvsdbNodeUpdateCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OvsdbNodeUpdateCommand.java @@ -11,7 +11,6 @@ import static org.opendaylight.ovsdb.lib.operations.Operations.op; import java.util.Collection; import java.util.Collections; -import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.opendaylight.mdsal.binding.api.DataTreeModification; @@ -25,6 +24,7 @@ import org.opendaylight.ovsdb.utils.yang.YangUtils; 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.OpenvswitchExternalIds; 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.OpenvswitchOtherConfigsKey; 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; @@ -82,7 +82,8 @@ public class OvsdbNodeUpdateCommand implements TransactCommand { - List otherConfigs = ovsdbNode.getOpenvswitchOtherConfigs(); + Map otherConfigs = + ovsdbNode.getOpenvswitchOtherConfigs(); if (otherConfigs != null) { try { ovs.setOtherConfig(YangUtils.convertYangKeyValueListToMap(otherConfigs, diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QosRemovedCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QosRemovedCommand.java index 7fe9256c6..bbcb58d33 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QosRemovedCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QosRemovedCommand.java @@ -10,17 +10,16 @@ package org.opendaylight.ovsdb.southbound.ovsdb.transact; import static org.opendaylight.ovsdb.lib.operations.Operations.op; import java.util.Collection; -import java.util.List; import java.util.Map; import org.opendaylight.mdsal.binding.api.DataTreeModification; import org.opendaylight.ovsdb.lib.notation.UUID; import org.opendaylight.ovsdb.lib.operations.TransactionBuilder; import org.opendaylight.ovsdb.schema.openvswitch.Qos; import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec; -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.OvsdbNodeAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QosEntries; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QosEntriesKey; 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; @@ -56,26 +55,15 @@ public class QosRemovedCommand implements TransactCommand { OvsdbNodeAugmentation update = updated.get(ovsdbNodeIid); if (original != null && update != null) { - List origQosEntries = original.getQosEntries(); - List updatedQosEntries = update.getQosEntries(); + Map origQosEntries = original.getQosEntries(); + Map updatedQosEntries = update.getQosEntries(); if (origQosEntries != null && !origQosEntries.isEmpty()) { - for (QosEntries origQosEntry : origQosEntries) { + for (QosEntries origQosEntry : origQosEntries.values()) { OvsdbNodeAugmentation operNode = state.getBridgeNode(ovsdbNodeIid).get().augmentation(OvsdbNodeAugmentation.class); - List operQosEntries = operNode.getQosEntries(); - - boolean found = false; - if (updatedQosEntries != null && !updatedQosEntries.isEmpty()) { - for (QosEntries updatedQosEntry : updatedQosEntries) { - if (origQosEntry.getQosId().equals(updatedQosEntry.getQosId())) { - found = true; - break; - } - } - } - if (!found) { + if (updatedQosEntries == null || !updatedQosEntries.containsKey(origQosEntry.key())) { LOG.debug("Received request to delete QoS entry {}", origQosEntry.getQosId()); - Uuid qosUuid = getQosEntryUuid(operQosEntries, origQosEntry.getQosId()); + Uuid qosUuid = getQosEntryUuid(operNode.getQosEntries(), origQosEntry.key()); if (qosUuid != null) { Qos qos = transaction.getTypedRowSchema(Qos.class); transaction.add(op.delete(qos.getSchema()) @@ -95,12 +83,12 @@ public class QosRemovedCommand implements TransactCommand { } } - private static Uuid getQosEntryUuid(final List operQosEntries, final Uri qosId) { + private static Uuid getQosEntryUuid(final Map operQosEntries, + final QosEntriesKey qosId) { if (operQosEntries != null && !operQosEntries.isEmpty()) { - for (QosEntries qosEntry : operQosEntries) { - if (qosEntry.getQosId().equals(qosId)) { - return qosEntry.getQosUuid(); - } + QosEntries qosEntry = operQosEntries.get(qosId); + if (qosEntry != null) { + return qosEntry.getQosUuid(); } } return null; diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QosUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QosUpdateCommand.java index 33aa7f947..ee6704fa9 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QosUpdateCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QosUpdateCommand.java @@ -12,7 +12,6 @@ import static org.opendaylight.ovsdb.lib.operations.Operations.op; import java.util.Collection; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.opendaylight.mdsal.binding.api.DataTreeModification; @@ -23,7 +22,6 @@ import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec; import org.opendaylight.ovsdb.southbound.SouthboundConstants; import org.opendaylight.ovsdb.southbound.SouthboundMapper; import org.opendaylight.ovsdb.utils.yang.YangUtils; -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.OvsdbNodeAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbQueueRef; @@ -34,6 +32,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.qos.entries.QosExternalIds; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.qos.entries.QosOtherConfig; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.qos.entries.QueueList; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.qos.entries.QueueListKey; 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; @@ -76,10 +75,10 @@ public class QosUpdateCommand implements TransactCommand { qos.setType(SouthboundMapper.createQosType(qosEntry.getQosType())); } - List queueList = qosEntry.getQueueList(); + Map queueList = qosEntry.getQueueList(); Map newQueueList = new HashMap<>(); if (queueList != null && !queueList.isEmpty()) { - for (QueueList queue : queueList) { + for (QueueList queue : queueList.values()) { if (queue.getQueueRef() != null) { newQueueList.put(queue.getQueueNumber().toJava(), new UUID(getQueueUuid(queue.getQueueRef(), operNode))); @@ -110,7 +109,7 @@ public class QosUpdateCommand implements TransactCommand { LOG.warn("Incomplete Qos other_config", e); } - Uuid operQosUuid = getQosEntryUuid(operNode.getQosEntries(), qosEntry.getQosId()); + Uuid operQosUuid = getQosEntryUuid(operNode.getQosEntries(), qosEntry.key()); if (operQosUuid == null) { UUID namedUuid = new UUID(SouthboundConstants.QOS_NAMED_UUID_PREFIX + TransactUtils.bytesToHexString(qosEntry.getQosId().getValue().getBytes(UTF_8))); @@ -127,25 +126,25 @@ public class QosUpdateCommand implements TransactCommand { } } - private String getQueueUuid(final OvsdbQueueRef queueRef, final OvsdbNodeAugmentation operNode) { + private static String getQueueUuid(final OvsdbQueueRef queueRef, final OvsdbNodeAugmentation operNode) { QueuesKey queueKey = queueRef.getValue().firstKeyOf(Queues.class); - if (operNode.getQueues() != null && !operNode.getQueues().isEmpty()) { - for (Queues queue : operNode.getQueues()) { - if (queue.getQueueId().equals(queueKey.getQueueId())) { - return queue.getQueueUuid().getValue(); - } + Map queues = operNode.getQueues(); + if (queues != null) { + Queues queue = queues.get(queueKey); + if (queue != null) { + return queue.getQueueUuid().getValue(); } } return SouthboundConstants.QUEUE_NAMED_UUID_PREFIX + TransactUtils.bytesToHexString(queueKey.getQueueId().getValue().getBytes(UTF_8)); } - private Uuid getQosEntryUuid(final List operQosEntries, final Uri qosId) { - if (operQosEntries != null && !operQosEntries.isEmpty()) { - for (QosEntries qosEntry : operQosEntries) { - if (qosEntry.getQosId().equals(qosId)) { - return qosEntry.getQosUuid(); - } + private static Uuid getQosEntryUuid(final Map operQosEntries, + final QosEntriesKey qosId) { + if (operQosEntries != null) { + QosEntries qosEntry = operQosEntries.get(qosId); + if (qosEntry != null) { + return qosEntry.getQosUuid(); } } return null; diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QueueRemovedCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QueueRemovedCommand.java index 7bf7f70ed..48f026ca2 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QueueRemovedCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QueueRemovedCommand.java @@ -10,17 +10,16 @@ package org.opendaylight.ovsdb.southbound.ovsdb.transact; import static org.opendaylight.ovsdb.lib.operations.Operations.op; import java.util.Collection; -import java.util.List; import java.util.Map; import org.opendaylight.mdsal.binding.api.DataTreeModification; import org.opendaylight.ovsdb.lib.notation.UUID; import org.opendaylight.ovsdb.lib.operations.TransactionBuilder; import org.opendaylight.ovsdb.schema.openvswitch.Queue; import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec; -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.OvsdbNodeAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.Queues; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QueuesKey; 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; @@ -44,9 +43,9 @@ public class QueueRemovedCommand implements TransactCommand { TransactUtils.extractUpdated(modifications, OvsdbNodeAugmentation.class)); } - private void execute(final TransactionBuilder transaction, final BridgeOperationalState state, - final Map, OvsdbNodeAugmentation> originals, - final Map, OvsdbNodeAugmentation> updated) { + private static void execute(final TransactionBuilder transaction, final BridgeOperationalState state, + final Map, OvsdbNodeAugmentation> originals, + final Map, OvsdbNodeAugmentation> updated) { for (Map.Entry, OvsdbNodeAugmentation> originalEntry : originals .entrySet()) { InstanceIdentifier ovsdbNodeIid = originalEntry.getKey(); @@ -54,27 +53,16 @@ public class QueueRemovedCommand implements TransactCommand { OvsdbNodeAugmentation update = updated.get(ovsdbNodeIid); if (original != null && update != null) { - List origQueues = original.getQueues(); - List updatedQueues = update.getQueues(); + Map origQueues = original.getQueues(); + Map updatedQueues = update.getQueues(); if (origQueues != null && !origQueues.isEmpty()) { - for (Queues origQueue : origQueues) { + for (Queues origQueue : origQueues.values()) { OvsdbNodeAugmentation operNode = state.getBridgeNode(ovsdbNodeIid).get().augmentation( OvsdbNodeAugmentation.class); - List operQueues = operNode.getQueues(); - - boolean found = false; - if (updatedQueues != null && !updatedQueues.isEmpty()) { - for (Queues updatedQueue : updatedQueues) { - if (origQueue.getQueueId().equals(updatedQueue.getQueueId())) { - found = true; - break; - } - } - } - if (!found) { + if (updatedQueues == null || !updatedQueues.containsKey(origQueue.key())) { LOG.debug("Received request to delete Queue entry {}", origQueue.getQueueId()); - Uuid queueUuid = getQueueUuid(operQueues, origQueue.getQueueId()); + Uuid queueUuid = getQueueUuid(operNode.getQueues(), origQueue.key()); if (queueUuid != null) { Queue queue = transaction.getTypedRowSchema(Queue.class); transaction.add(op.delete(queue.getSchema()) @@ -94,15 +82,13 @@ public class QueueRemovedCommand implements TransactCommand { } } - private Uuid getQueueUuid(final List operQueues, final Uri queueId) { - if (operQueues != null && !operQueues.isEmpty()) { - for (Queues queueEntry : operQueues) { - if (queueEntry.getQueueId().equals(queueId)) { - return queueEntry.getQueueUuid(); - } + private static Uuid getQueueUuid(final Map operQueues, final QueuesKey queueId) { + if (operQueues != null) { + Queues queueEntry = operQueues.get(queueId); + if (queueEntry != null) { + return queueEntry.getQueueUuid(); } } return null; } - } diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QueueUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QueueUpdateCommand.java index 467abcc05..3bbbacede 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QueueUpdateCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/QueueUpdateCommand.java @@ -13,7 +13,6 @@ import static org.opendaylight.ovsdb.lib.operations.Operations.op; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; @@ -25,7 +24,6 @@ import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec; import org.opendaylight.ovsdb.southbound.SouthboundConstants; import org.opendaylight.ovsdb.southbound.SouthboundMapper; import org.opendaylight.ovsdb.utils.yang.YangUtils; -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.OvsdbNodeAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.Queues; @@ -102,7 +100,7 @@ public class QueueUpdateCommand implements TransactCommand { OvsdbNodeAugmentation operNode = state.getBridgeNode(iid).get().augmentation(OvsdbNodeAugmentation.class); - Uuid operQueueUuid = getQueueEntryUuid(operNode.getQueues(), queueEntry.getQueueId()); + Uuid operQueueUuid = getQueueEntryUuid(operNode.getQueues(), queueEntry.key()); if (operQueueUuid == null) { UUID namedUuid = new UUID(SouthboundConstants.QUEUE_NAMED_UUID_PREFIX + TransactUtils.bytesToHexString(queueEntry.getQueueId().getValue().getBytes(UTF_8))); @@ -121,12 +119,11 @@ public class QueueUpdateCommand implements TransactCommand { } } - private static Uuid getQueueEntryUuid(final List operQueues, final Uri queueId) { - if (operQueues != null && !operQueues.isEmpty()) { - for (Queues queueEntry : operQueues) { - if (queueEntry.getQueueId().equals(queueId)) { - return queueEntry.getQueueUuid(); - } + private static Uuid getQueueEntryUuid(final Map operQueues, final QueuesKey queueId) { + if (operQueues != null) { + Queues queueEntry = operQueues.get(queueId); + if (queueEntry != null) { + return queueEntry.getQueueUuid(); } } return null; diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointCreateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointCreateCommand.java index e043b7643..b20b753e5 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointCreateCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointCreateCommand.java @@ -10,8 +10,6 @@ package org.opendaylight.ovsdb.southbound.ovsdb.transact; import static org.opendaylight.ovsdb.lib.operations.Operations.op; import static org.opendaylight.ovsdb.southbound.SouthboundUtil.schemaMismatchLog; -import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -39,12 +37,18 @@ 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.OvsdbPortInterfaceAttributes.VlanMode; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceBfd; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceBfdKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceExternalIds; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceExternalIdsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceLldp; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceLldpKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceOtherConfigs; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceOtherConfigsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.Options; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.PortExternalIds; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.PortExternalIdsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.PortOtherConfigs; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.PortOtherConfigsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.Trunks; 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; @@ -201,14 +205,14 @@ public class TerminationPointCreateCommand implements TransactCommand { final OvsdbTerminationPointAugmentation terminationPoint, final Interface ovsInterface) { - List interfaceExternalIds = + Map interfaceExternalIds = terminationPoint.getInterfaceExternalIds(); + final InterfaceExternalIds odl = SouthboundUtil.interfaceCreatedByOpenDaylight(); + if (interfaceExternalIds != null && !interfaceExternalIds.isEmpty()) { - interfaceExternalIds.add(SouthboundUtil.createExternalIdsForInterface( - SouthboundConstants.CREATED_BY, SouthboundConstants.ODL)); + interfaceExternalIds.put(odl.key(), odl); } else { - interfaceExternalIds = Arrays.asList(SouthboundUtil.createExternalIdsForInterface( - SouthboundConstants.CREATED_BY, SouthboundConstants.ODL)); + interfaceExternalIds = Map.of(odl.key(), odl); } try { ovsInterface.setExternalIds(YangUtils.convertYangKeyValueListToMap(interfaceExternalIds, @@ -222,11 +226,11 @@ public class TerminationPointCreateCommand implements TransactCommand { final OvsdbTerminationPointAugmentation terminationPoint, final Interface ovsInterface) { - List interfaceOtherConfigs = + Map interfaceOtherConfigs = terminationPoint.getInterfaceOtherConfigs(); if (interfaceOtherConfigs != null && !interfaceOtherConfigs.isEmpty()) { Map otherConfigsMap = new HashMap<>(); - for (InterfaceOtherConfigs interfaceOtherConfig : interfaceOtherConfigs) { + for (InterfaceOtherConfigs interfaceOtherConfig : interfaceOtherConfigs.values()) { otherConfigsMap.put(interfaceOtherConfig.getOtherConfigKey(), interfaceOtherConfig.getOtherConfigValue()); } @@ -243,7 +247,7 @@ public class TerminationPointCreateCommand implements TransactCommand { final Interface ovsInterface) { try { - List interfaceLldpList = + Map interfaceLldpList = terminationPoint.getInterfaceLldp(); if (interfaceLldpList != null && !interfaceLldpList.isEmpty()) { try { @@ -262,7 +266,7 @@ public class TerminationPointCreateCommand implements TransactCommand { final Interface ovsInterface) { try { - List interfaceBfdList = terminationPoint.getInterfaceBfd(); + Map interfaceBfdList = terminationPoint.getInterfaceBfd(); if (interfaceBfdList != null && !interfaceBfdList.isEmpty()) { try { ovsInterface.setBfd(YangUtils.convertYangKeyValueListToMap(interfaceBfdList, @@ -281,18 +285,16 @@ public class TerminationPointCreateCommand implements TransactCommand { final Port port, final String opendaylightIid) { // Set the iid external_id - List portExternalIds = terminationPoint.getPortExternalIds(); + Map portExternalIds = terminationPoint.getPortExternalIds(); + PortExternalIds odl = SouthboundUtil.portCreatedByOpenDaylight(); + PortExternalIds iid = SouthboundUtil.createExternalIdsForPort( + SouthboundConstants.IID_EXTERNAL_ID_KEY, opendaylightIid); + if (portExternalIds != null && !portExternalIds.isEmpty()) { - portExternalIds.add(SouthboundUtil.createExternalIdsForPort( - SouthboundConstants.CREATED_BY, SouthboundConstants.ODL)); - portExternalIds.add(SouthboundUtil.createExternalIdsForPort( - SouthboundConstants.IID_EXTERNAL_ID_KEY, opendaylightIid)); + portExternalIds.put(odl.key(), odl); + portExternalIds.put(iid.key(), iid); } else { - portExternalIds = new ArrayList<>(); - portExternalIds.add(SouthboundUtil.createExternalIdsForPort( - SouthboundConstants.CREATED_BY, SouthboundConstants.ODL)); - portExternalIds.add(SouthboundUtil.createExternalIdsForPort( - SouthboundConstants.IID_EXTERNAL_ID_KEY, opendaylightIid)); + portExternalIds = Map.of(odl.key(), odl, iid.key(), iid); } try { port.setExternalIds(YangUtils.convertYangKeyValueListToMap(portExternalIds, @@ -345,7 +347,7 @@ public class TerminationPointCreateCommand implements TransactCommand { private void createPortOtherConfig( final OvsdbTerminationPointAugmentation terminationPoint, final Port ovsPort) { - List portOtherConfigs = + Map portOtherConfigs = terminationPoint.getPortOtherConfigs(); if (portOtherConfigs != null && !portOtherConfigs.isEmpty()) { try { diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointUpdateCommand.java index 9df44ab50..ada83a022 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointUpdateCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TerminationPointUpdateCommand.java @@ -11,7 +11,6 @@ import static java.nio.charset.StandardCharsets.UTF_8; import static org.opendaylight.ovsdb.lib.operations.Operations.op; import static org.opendaylight.ovsdb.southbound.SouthboundUtil.schemaMismatchLog; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -40,13 +39,19 @@ 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.OvsdbQosRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QosEntries; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QosEntriesKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceBfd; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceBfdKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceExternalIds; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceExternalIdsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceLldp; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceLldpKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceOtherConfigs; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceOtherConfigsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.Options; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.PortExternalIds; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.PortOtherConfigs; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.PortOtherConfigsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.Trunks; 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; @@ -160,13 +165,14 @@ public class TerminationPointUpdateCommand implements TransactCommand { // First check if QosEntry is present and use that if (terminationPoint.getQosEntry() != null && !terminationPoint.getQosEntry().isEmpty()) { - OvsdbQosRef qosRef = terminationPoint.getQosEntry().iterator().next().getQosRef(); + OvsdbQosRef qosRef = terminationPoint.getQosEntry().values().iterator().next().getQosRef(); Uri qosId = qosRef.getValue().firstKeyOf(QosEntries.class).getQosId(); OvsdbNodeAugmentation operNode = getOperNode(operBridge); - if (operNode != null && operNode.getQosEntries() != null - && !operNode.getQosEntries().isEmpty()) { - for (QosEntries qosEntry : operNode.getQosEntries()) { - if (qosEntry.getQosId().equals(qosId)) { + if (operNode != null) { + Map entries = operNode.getQosEntries(); + if (entries != null) { + QosEntries qosEntry = entries.get(new QosEntriesKey(qosId)); + if (qosEntry != null) { uuidSet.add(new UUID(qosEntry.getQosUuid().getValue())); } } @@ -230,14 +236,14 @@ public class TerminationPointUpdateCommand implements TransactCommand { private static void updateInterfaceExternalIds(final OvsdbTerminationPointAugmentation terminationPoint, final Interface ovsInterface) { - List interfaceExternalIds = + Map interfaceExternalIds = terminationPoint.getInterfaceExternalIds(); + final InterfaceExternalIds odl = SouthboundUtil.interfaceCreatedByOpenDaylight(); + if (interfaceExternalIds != null && !interfaceExternalIds.isEmpty()) { - interfaceExternalIds.add(SouthboundUtil.createExternalIdsForInterface( - SouthboundConstants.CREATED_BY, SouthboundConstants.ODL)); + interfaceExternalIds.put(odl.key(), odl); } else { - interfaceExternalIds = Arrays.asList(SouthboundUtil.createExternalIdsForInterface( - SouthboundConstants.CREATED_BY, SouthboundConstants.ODL)); + interfaceExternalIds = Map.of(odl.key(), odl); } try { ovsInterface.setExternalIds(YangUtils.convertYangKeyValueListToMap(interfaceExternalIds, @@ -250,7 +256,7 @@ public class TerminationPointUpdateCommand implements TransactCommand { private static void updateInterfaceLldp(final OvsdbTerminationPointAugmentation terminationPoint, final Interface ovsInterface) { try { - List interfaceLldpList = + Map interfaceLldpList = terminationPoint.getInterfaceLldp(); if (interfaceLldpList != null && !interfaceLldpList.isEmpty()) { try { @@ -268,11 +274,11 @@ public class TerminationPointUpdateCommand implements TransactCommand { private static void updateInterfaceOtherConfig(final OvsdbTerminationPointAugmentation terminationPoint, final Interface ovsInterface) { - List interfaceOtherConfigs = + Map interfaceOtherConfigs = terminationPoint.getInterfaceOtherConfigs(); if (interfaceOtherConfigs != null && !interfaceOtherConfigs.isEmpty()) { Map otherConfigsMap = new HashMap<>(); - for (InterfaceOtherConfigs interfaceOtherConfig : interfaceOtherConfigs) { + for (InterfaceOtherConfigs interfaceOtherConfig : interfaceOtherConfigs.values()) { otherConfigsMap.put(interfaceOtherConfig.getOtherConfigKey(), interfaceOtherConfig.getOtherConfigValue()); } @@ -288,8 +294,7 @@ public class TerminationPointUpdateCommand implements TransactCommand { final Interface ovsInterface) { try { - List interfaceBfdList = - terminationPoint.getInterfaceBfd(); + Map interfaceBfdList = terminationPoint.getInterfaceBfd(); if (interfaceBfdList != null && !interfaceBfdList.isEmpty()) { try { ovsInterface.setBfd(YangUtils.convertYangKeyValueListToMap(interfaceBfdList, @@ -363,7 +368,7 @@ public class TerminationPointUpdateCommand implements TransactCommand { private static void updatePortOtherConfig(final OvsdbTerminationPointAugmentation terminationPoint, final Port ovsPort) { - List portOtherConfigs = + Map portOtherConfigs = terminationPoint.getPortOtherConfigs(); if (portOtherConfigs != null && !portOtherConfigs.isEmpty()) { try { diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/BridgeConfigReconciliationTask.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/BridgeConfigReconciliationTask.java index c418214a2..f4d7faa3e 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/BridgeConfigReconciliationTask.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/BridgeConfigReconciliationTask.java @@ -41,6 +41,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; 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.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; @@ -121,9 +122,9 @@ public class BridgeConfigReconciliationTask extends ReconciliationTask { @Override public void onSuccess(@Nullable final Optional optionalTopology) { if (optionalTopology != null && optionalTopology.isPresent()) { - Topology topology = optionalTopology.get(); - if (topology.getNode() != null) { - for (Node node : topology.getNode()) { + Map nodes = optionalTopology.get().getNode(); + if (nodes != null) { + for (Node node : nodes.values()) { String bridgeNodeIid = node.getNodeId().getValue(); LOG.trace("bridgeNodeIid : {}", bridgeNodeIid); if (bridgeReconcileExcludeList.contains(bridgeNodeIid)) { @@ -218,8 +219,9 @@ public class BridgeConfigReconciliationTask extends ReconciliationTask { changes.put(bridgeNodeIid, bridgeNode); changes.put(ovsdbBridgeIid, ovsdbBridge); - if (ovsdbBridge.getProtocolEntry() != null) { - for (ProtocolEntry protocol : ovsdbBridge.getProtocolEntry()) { + final Map protocols = ovsdbBridge.getProtocolEntry(); + if (protocols != null) { + for (ProtocolEntry protocol : protocols.values()) { if (SouthboundConstants.OVSDB_PROTOCOL_MAP.get(protocol.getProtocol()) != null) { KeyedInstanceIdentifier protocolIid = ovsdbBridgeIid.child(ProtocolEntry.class, protocol.key()); @@ -230,8 +232,9 @@ public class BridgeConfigReconciliationTask extends ReconciliationTask { } } - if (ovsdbBridge.getControllerEntry() != null) { - for (ControllerEntry controller : ovsdbBridge.getControllerEntry()) { + final Map controllers = ovsdbBridge.getControllerEntry(); + if (controllers != null) { + for (ControllerEntry controller : controllers.values()) { KeyedInstanceIdentifier controllerIid = ovsdbBridgeIid.child(ControllerEntry.class, controller.key()); changes.put(controllerIid, controller); diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/TerminationPointConfigReconciliationTask.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/TerminationPointConfigReconciliationTask.java index 597e11dcd..28e1a0393 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/TerminationPointConfigReconciliationTask.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/TerminationPointConfigReconciliationTask.java @@ -14,7 +14,6 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; - import org.opendaylight.ovsdb.southbound.InstanceIdentifierCodec; import org.opendaylight.ovsdb.southbound.OvsdbConnectionInstance; import org.opendaylight.ovsdb.southbound.OvsdbConnectionManager; @@ -28,6 +27,7 @@ import org.opendaylight.ovsdb.southbound.reconciliation.ReconciliationManager; import org.opendaylight.ovsdb.southbound.reconciliation.ReconciliationTask; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.PortExternalIds; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.PortExternalIdsKey; 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.yangtools.yang.binding.InstanceIdentifier; @@ -43,8 +43,9 @@ import org.slf4j.LoggerFactory; * termination point reconciliation is triggered for that bridge. */ public class TerminationPointConfigReconciliationTask extends ReconciliationTask { - private static final Logger LOG = LoggerFactory.getLogger(TerminationPointConfigReconciliationTask.class); + private static final PortExternalIdsKey CREATED_BY_KEY = new PortExternalIdsKey(SouthboundConstants.CREATED_BY); + private final OvsdbConnectionInstance connectionInstance; private final InstanceIdentifierCodec instanceIdentifierCodec; private final Map, OvsdbTerminationPointAugmentation> @@ -65,7 +66,7 @@ public class TerminationPointConfigReconciliationTask extends ReconciliationTask @Override public boolean reconcileConfiguration(final OvsdbConnectionManager connectionManager) { final Map, DataObject> changes = new HashMap<>(); - final Node configNodeData = ((Node) configData); + final Node configNodeData = (Node) configData; LOG.debug("Reconcile Termination Point Configuration for node {}", configNodeData.getNodeId()); changes.putAll(SouthboundMapper.extractTerminationPointConfigurationChanges(configNodeData)); DataChangeEvent changeEvents = new DataChangeEvent() { @@ -96,7 +97,7 @@ public class TerminationPointConfigReconciliationTask extends ReconciliationTask List configTerminationPoints = new ArrayList<>(); if (configNodeData.getTerminationPoint() != null) { - configNodeData.getTerminationPoint().forEach(entry -> { + configNodeData.getTerminationPoint().values().forEach(entry -> { configTerminationPoints.add(entry.getTpId().getValue()); }); } @@ -120,17 +121,16 @@ public class TerminationPointConfigReconciliationTask extends ReconciliationTask LOG.trace("Termination Point {} from Oper Topology NOT present in config topology During Reconcile," + "checking if this created by ODL and perform delete reconciliation", terminationPoint.getName()); - List externalIds = terminationPoint.getPortExternalIds(); + Map externalIds = terminationPoint.getPortExternalIds(); if (externalIds != null) { - for (PortExternalIds portExternalIds : externalIds) { - if (portExternalIds.getExternalIdKey().equals(SouthboundConstants.CREATED_BY) - && portExternalIds.getExternalIdValue().equals(SouthboundConstants.ODL)) { - LOG.trace("Termination Point {} created by ODL. Marking for deletion during reconcile", - entry.getKey()); - removeTerminationPoints.add(entry.getKey()); - original.put(entry.getKey(), entry.getValue()); - break; - } + final PortExternalIds portExternalIds = externalIds.get(CREATED_BY_KEY); + if (portExternalIds != null + && SouthboundConstants.ODL.equals(portExternalIds.getExternalIdValue())) { + LOG.trace("Termination Point {} created by ODL. Marking for deletion during reconcile", + entry.getKey()); + removeTerminationPoints.add(entry.getKey()); + original.put(entry.getKey(), entry.getValue()); + break; } } } diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbAutoAttachRemovedCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbAutoAttachRemovedCommand.java index 979a4df05..c8445c98e 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbAutoAttachRemovedCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbAutoAttachRemovedCommand.java @@ -8,7 +8,6 @@ package org.opendaylight.ovsdb.southbound.transactions.md; -import java.util.List; import java.util.Map; import java.util.Optional; import org.opendaylight.mdsal.binding.api.ReadWriteTransaction; @@ -33,7 +32,7 @@ import org.slf4j.LoggerFactory; public class OvsdbAutoAttachRemovedCommand extends AbstractTransactionCommand { private static final Logger LOG = LoggerFactory.getLogger(OvsdbAutoAttachRemovedCommand.class); - private Map removedAutoAttachRows; + private final Map removedAutoAttachRows; public OvsdbAutoAttachRemovedCommand(OvsdbConnectionInstance key, TableUpdates updates, DatabaseSchema dbSchema) { @@ -71,13 +70,13 @@ public class OvsdbAutoAttachRemovedCommand extends AbstractTransactionCommand { } private AutoattachKey getAutoAttachKeyToRemove(Node node, UUID autoAttachUuid) { - final List autoAttachList = node.augmentation(OvsdbNodeAugmentation.class).getAutoattach(); + final Map autoAttachList = + node.augmentation(OvsdbNodeAugmentation.class).getAutoattach(); if (autoAttachList == null || autoAttachList.isEmpty()) { return null; } - for (final Autoattach autoAttach : autoAttachList) { - if (autoAttach.getAutoattachUuid() - .equals(new Uuid(autoAttachUuid.toString()))) { + for (final Autoattach autoAttach : autoAttachList.values()) { + if (autoAttach.getAutoattachUuid().equals(new Uuid(autoAttachUuid.toString()))) { return autoAttach.key(); } } diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbAutoAttachUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbAutoAttachUpdateCommand.java index 4be92de4c..c9236f665 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbAutoAttachUpdateCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbAutoAttachUpdateCommand.java @@ -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 java.util.ArrayList; @@ -14,7 +13,6 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Optional; import java.util.concurrent.ExecutionException; - import org.opendaylight.mdsal.binding.api.ReadWriteTransaction; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.ovsdb.lib.message.TableUpdates; diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeRemovedCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeRemovedCommand.java index 410f4815f..33403619b 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeRemovedCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeRemovedCommand.java @@ -5,11 +5,9 @@ * 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 java.util.Collection; - import org.opendaylight.mdsal.binding.api.ReadWriteTransaction; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.ovsdb.lib.message.TableUpdates; diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeUpdateCommand.java index d6a519891..b45c8d556 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeUpdateCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeUpdateCommand.java @@ -225,7 +225,7 @@ public class OvsdbBridgeUpdateCommand extends AbstractTransactionCommand { connectionNode.addAugmentation(OvsdbNodeAugmentation.class, ovsdbConnectionAugmentationBuilder.build()); LOG.debug("Update node with bridge node ref {}", - ovsdbConnectionAugmentationBuilder.getManagedNodeEntry().iterator().next()); + ovsdbConnectionAugmentationBuilder.getManagedNodeEntry().values().iterator().next()); return connectionNode.build(); } diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbControllerUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbControllerUpdateCommand.java index 47a455d09..f38ced177 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbControllerUpdateCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbControllerUpdateCommand.java @@ -29,6 +29,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.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.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.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; @@ -142,8 +143,9 @@ public class OvsdbControllerUpdateCommand extends AbstractTransactionCommand { if (ovsdbNode.isPresent()) { OvsdbNodeAugmentation ovsdbNodeAugmentation = ovsdbNode.get().augmentation(OvsdbNodeAugmentation.class); if (ovsdbNodeAugmentation != null) { - final List managedNodeEntries = ovsdbNodeAugmentation.getManagedNodeEntry(); - for (ManagedNodeEntry managedNodeEntry : managedNodeEntries) { + final Map managedNodeEntries + = ovsdbNodeAugmentation.getManagedNodeEntry(); + for (ManagedNodeEntry managedNodeEntry : managedNodeEntries.values()) { final InstanceIdentifier bridgeIid = (InstanceIdentifier) managedNodeEntry.getBridgeRef().getValue(); final Optional bridgeNode = SouthboundUtil.readNode(transaction, bridgeIid); diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbInitialPortUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbInitialPortUpdateCommand.java index f85e15e36..2497726f6 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbInitialPortUpdateCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbInitialPortUpdateCommand.java @@ -5,14 +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.southbound.transactions.md; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; - import org.opendaylight.mdsal.binding.api.ReadWriteTransaction; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.ovsdb.lib.message.TableUpdates; @@ -30,7 +28,6 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - public class OvsdbInitialPortUpdateCommand extends OvsdbPortUpdateCommand { private static final Logger LOG = LoggerFactory.getLogger(OvsdbInitialPortUpdateCommand.class); private final Map updatedBridgeNodes; diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbNodeRemoveCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbNodeRemoveCommand.java index 45cee0a14..29ac0a059 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbNodeRemoveCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbNodeRemoveCommand.java @@ -10,6 +10,7 @@ package org.opendaylight.ovsdb.southbound.transactions.md; import com.google.common.annotations.VisibleForTesting; import com.google.common.util.concurrent.FluentFuture; +import java.util.Map; import java.util.Optional; import java.util.concurrent.ExecutionException; import org.opendaylight.mdsal.binding.api.ReadWriteTransaction; @@ -19,7 +20,9 @@ import org.opendaylight.ovsdb.lib.schema.DatabaseSchema; import org.opendaylight.ovsdb.southbound.OvsdbConnectionInstance; 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.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.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.network.topology.topology.Node; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,8 +48,10 @@ public class OvsdbNodeRemoveCommand extends AbstractTransactionCommand { OvsdbNodeAugmentation ovsdbNodeAugmentation = ovsdbNode.augmentation(OvsdbNodeAugmentation.class); if (checkIfOnlyConnectedManager(ovsdbNodeAugmentation)) { if (ovsdbNodeAugmentation != null) { - if (ovsdbNodeAugmentation.getManagedNodeEntry() != null) { - for (ManagedNodeEntry managedNode : ovsdbNodeAugmentation.getManagedNodeEntry()) { + Map entries = + ovsdbNodeAugmentation.getManagedNodeEntry(); + if (entries != null) { + for (ManagedNodeEntry managedNode : entries.values()) { transaction.delete( LogicalDatastoreType.OPERATIONAL, managedNode.getBridgeRef().getValue()); } @@ -74,8 +79,9 @@ public class OvsdbNodeRemoveCommand extends AbstractTransactionCommand { ManagerEntry onlyConnectedManager = null; if (ovsdbNodeAugmentation != null) { int connectedManager = 0; - if (ovsdbNodeAugmentation.getManagerEntry() != null) { - for (ManagerEntry manager : ovsdbNodeAugmentation.getManagerEntry()) { + final Map entries = ovsdbNodeAugmentation.getManagerEntry(); + if (entries != null) { + for (ManagerEntry manager : entries.values()) { if (manager.isConnected()) { connectedManager++; if (connectedManager > ONE_CONNECTED_MANAGER) { diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbPortUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbPortUpdateCommand.java index 2e7e3f6a5..7e9094fa2 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbPortUpdateCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbPortUpdateCommand.java @@ -5,13 +5,11 @@ * 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.opendaylight.ovsdb.southbound.SouthboundUtil.schemaMismatchLog; import com.google.common.annotations.VisibleForTesting; - import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; @@ -20,7 +18,6 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Optional; import java.util.Set; - import org.opendaylight.mdsal.binding.api.ReadWriteTransaction; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.ovsdb.lib.error.ColumnSchemaNotFoundException; @@ -51,6 +48,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.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentationBuilder; 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.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QosEntries; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QosEntriesKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceBfd; @@ -265,23 +263,23 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand { } @SuppressWarnings("unchecked") + // FIXME: non-static for implementation internals mocking private Optional> getTerminationPointBridge( final ReadWriteTransaction transaction, Node node, String tpName) { OvsdbNodeAugmentation ovsdbNode = node.augmentation(OvsdbNodeAugmentation.class); - List managedNodes = ovsdbNode.getManagedNodeEntry(); + Map managedNodes = ovsdbNode.nonnullManagedNodeEntry(); TpId tpId = new TpId(tpName); - for (ManagedNodeEntry managedNodeEntry : managedNodes) { + for (ManagedNodeEntry managedNodeEntry : managedNodes.values()) { Optional optManagedNode = SouthboundUtil.readNode(transaction, (InstanceIdentifier)managedNodeEntry.getBridgeRef().getValue()); if (optManagedNode.isPresent()) { Node managedNode = optManagedNode.get(); - List tpEntrys = managedNode.getTerminationPoint(); + Map tpEntrys = managedNode.getTerminationPoint(); if (tpEntrys != null) { - for (TerminationPoint tpEntry : tpEntrys) { - if (tpId.equals(tpEntry.getTpId())) { - return Optional.of((InstanceIdentifier) managedNodeEntry.getBridgeRef().getValue()); - } + TerminationPoint tpEntry = tpEntrys.get(new TerminationPointKey(tpId)); + if (tpEntry != null) { + return Optional.of((InstanceIdentifier) managedNodeEntry.getBridgeRef().getValue()); } } } @@ -437,11 +435,12 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand { @SuppressWarnings("unchecked") private InstanceIdentifier getQosIid(NodeId nodeId, OvsdbNodeAugmentation ovsdbNode, UUID qosUuid) { // Search for the QoS entry first in the operational datastore - for (QosEntries qosEntry : ovsdbNode.getQosEntries()) { - if (qosEntry.getQosUuid().equals(new Uuid(qosUuid.toString()))) { + final Uuid uuid = new Uuid(qosUuid.toString()); + for (QosEntries qosEntry : ovsdbNode.nonnullQosEntries().values()) { + if (uuid.equals(qosEntry.getQosUuid())) { return SouthboundMapper.createInstanceIdentifier(nodeId) .augmentation(OvsdbNodeAugmentation.class) - .child(QosEntries.class, new QosEntriesKey(qosEntry.getQosId())); + .child(QosEntries.class, qosEntry.key()); } } diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbQosRemovedCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbQosRemovedCommand.java index cbc307537..ceeb93680 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbQosRemovedCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbQosRemovedCommand.java @@ -9,7 +9,6 @@ package org.opendaylight.ovsdb.southbound.transactions.md; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Optional; @@ -35,7 +34,7 @@ import org.slf4j.LoggerFactory; public class OvsdbQosRemovedCommand extends AbstractTransactionCommand { private static final Logger LOG = LoggerFactory.getLogger(OvsdbQosRemovedCommand.class); - private Map removedQosRows; + private final Map removedQosRows; public OvsdbQosRemovedCommand(OvsdbConnectionInstance key, TableUpdates updates, DatabaseSchema dbSchema) { @@ -68,16 +67,14 @@ public class OvsdbQosRemovedCommand extends AbstractTransactionCommand { } } - private QosEntriesKey getQosEntriesKey(Node node, UUID qosUuid) { - List qosList = node.augmentation(OvsdbNodeAugmentation.class).getQosEntries(); + private static QosEntriesKey getQosEntriesKey(Node node, UUID qosUuid) { + Map qosList = node.augmentation(OvsdbNodeAugmentation.class).getQosEntries(); if (qosList == null || qosList.isEmpty()) { LOG.debug("Deleting Qos {}, Ovsdb Node {} does not have a Qos list.", qosUuid, node); return null; } - Iterator itr = qosList.iterator(); Uuid quUuid = new Uuid(qosUuid.toString()); - while (itr.hasNext()) { - QosEntries qos = itr.next(); + for (QosEntries qos : qosList.values()) { if (qos.getQosUuid().equals(quUuid)) { return qos.key(); } @@ -86,7 +83,7 @@ public class OvsdbQosRemovedCommand extends AbstractTransactionCommand { return null; } - private void deleteQos(ReadWriteTransaction transaction, + private static void deleteQos(ReadWriteTransaction transaction, List> qosEntryIids) { for (InstanceIdentifier qosEntryIid: qosEntryIids) { transaction.delete(LogicalDatastoreType.OPERATIONAL, qosEntryIid); diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbQosUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbQosUpdateCommand.java index 190153c58..eba9c437f 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbQosUpdateCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbQosUpdateCommand.java @@ -161,12 +161,14 @@ public class OvsdbQosUpdateCommand extends AbstractTransactionCommand { queue.getExternalIdsColumn().getData().get(SouthboundConstants.IID_EXTERNAL_ID_KEY)); } else { OvsdbNodeAugmentation node = ovsdbNode.augmentation(OvsdbNodeAugmentation.class); - if (node.getQueues() != null && !node.getQueues().isEmpty()) { - for (Queues q : node.getQueues()) { - if (q.getQueueUuid().equals(new Uuid(queueUuid.toString()))) { + Map queues = node.getQueues(); + if (queues != null) { + final Uuid uuid = new Uuid(queueUuid.toString()); + for (Queues q : queues.values()) { + if (uuid.equals(q.getQueueUuid())) { return SouthboundMapper.createInstanceIdentifier(ovsdbNode.getNodeId()) .augmentation(OvsdbNodeAugmentation.class) - .child(Queues.class, new QueuesKey(q.getQueueId())); + .child(Queues.class, q.key()); } } } diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbQueueRemovedCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbQueueRemovedCommand.java index 8598b0b53..8abd246bd 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbQueueRemovedCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbQueueRemovedCommand.java @@ -9,7 +9,6 @@ package org.opendaylight.ovsdb.southbound.transactions.md; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Optional; @@ -35,7 +34,7 @@ import org.slf4j.LoggerFactory; public class OvsdbQueueRemovedCommand extends AbstractTransactionCommand { private static final Logger LOG = LoggerFactory.getLogger(OvsdbQueueRemovedCommand.class); - private Map removedQueueRows; + private final Map removedQueueRows; public OvsdbQueueRemovedCommand(OvsdbConnectionInstance key, TableUpdates updates, DatabaseSchema dbSchema) { @@ -68,16 +67,14 @@ public class OvsdbQueueRemovedCommand extends AbstractTransactionCommand { } } - private QueuesKey getQueueKey(Node node, UUID queueUuid) { - List queueList = node.augmentation(OvsdbNodeAugmentation.class).getQueues(); + private static QueuesKey getQueueKey(Node node, UUID queueUuid) { + Map queueList = node.augmentation(OvsdbNodeAugmentation.class).getQueues(); if (queueList == null || queueList.isEmpty()) { LOG.debug("Deleting Queue {}, Ovsdb Node {} does not have a Queue list.", queueUuid, node); return null; } - Iterator itr = queueList.iterator(); Uuid quUuid = new Uuid(queueUuid.toString()); - while (itr.hasNext()) { - Queues queue = itr.next(); + for (Queues queue : queueList.values()) { if (queue.getQueueUuid().equals(quUuid)) { return queue.key(); } @@ -86,7 +83,7 @@ public class OvsdbQueueRemovedCommand extends AbstractTransactionCommand { return null; } - private void deleteQueue(ReadWriteTransaction transaction, + private static void deleteQueue(ReadWriteTransaction transaction, List> queueIids) { for (InstanceIdentifier queueIid: queueIids) { transaction.delete(LogicalDatastoreType.OPERATIONAL, queueIid); diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/InstanceIdentifierCodecTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/InstanceIdentifierCodecTest.java index 5788abbc2..1aa4d3cf9 100644 --- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/InstanceIdentifierCodecTest.java +++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/InstanceIdentifierCodecTest.java @@ -5,11 +5,11 @@ * 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; import static org.junit.Assert.assertNull; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -73,10 +73,9 @@ public class InstanceIdentifierCodecTest { @Test public void testModuleForPrefix() { Module module = mock(Module.class); - when(context.findModules("")).thenReturn(ImmutableSet.of(module)); + doReturn(ImmutableSet.of(module)).when(context).findModules(""); assertEquals("Found Module", module, instanceIdCodec.moduleForPrefix("")); - - when(context.findModules("foo")).thenReturn(ImmutableSet.of(module, mock(Module.class))); + 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()); @@ -93,10 +92,9 @@ public class InstanceIdentifierCodecTest { when(context.findModules(namespace)).thenReturn(Collections.emptySet()); assertNull(instanceIdCodec.prefixForNamespace(namespace)); - when(context.findModules(namespace)).thenReturn(ImmutableSet.of(module)); + doReturn(ImmutableSet.of(module)).when(context).findModules(namespace); assertEquals("Found prefix", prefix, instanceIdCodec.prefixForNamespace(namespace)); - - when(context.findModules(namespace)).thenReturn(ImmutableSet.of(module, mock(Module.class))); + doReturn(ImmutableSet.of(module, mock(Module.class))).when(context).findModules(namespace); assertEquals("Found prefix", prefix, instanceIdCodec.prefixForNamespace(namespace)); } diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/OvsdbDataTreeChangeListenerTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/OvsdbDataTreeChangeListenerTest.java index b38381cf5..2ada74611 100644 --- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/OvsdbDataTreeChangeListenerTest.java +++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/OvsdbDataTreeChangeListenerTest.java @@ -71,8 +71,8 @@ public class OvsdbDataTreeChangeListenerTest extends AbstractConcurrentDataBroke .build(); final InstanceIdentifier iid = SouthboundUtils.createInstanceIdentifier(connectionInfo); WriteTransaction transaction = dataBroker.newReadWriteTransaction(); - transaction.put(LogicalDatastoreType.CONFIGURATION, iid, SouthboundUtils.createNode(connectionInfo), - WriteTransaction.CREATE_MISSING_PARENTS); + transaction.mergeParentStructurePut(LogicalDatastoreType.CONFIGURATION, iid, + SouthboundUtils.createNode(connectionInfo)); transaction.commit().get(); // Then the listener tries to open a connection diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/SouthboundMapperTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/SouthboundMapperTest.java index c4898229a..33a441993 100644 --- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/SouthboundMapperTest.java +++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/SouthboundMapperTest.java @@ -50,12 +50,12 @@ 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.InterfaceTypeVxlan; 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.OvsdbBridgeAugmentationBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolBase; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolOpenflow10; 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.ControllerEntryBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntry; +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.ConnectionInfo; 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.ManagerEntryBuilder; @@ -192,11 +192,11 @@ public class SouthboundMapperTest { public void testCreateOvsdbBridgeProtocols() { OvsdbBridgeAugmentation ovsdbBridgeNode = mock(OvsdbBridgeAugmentation.class); List protocolList = new ArrayList<>(); - ProtocolEntry protocolEntry = mock(ProtocolEntry.class); - protocolList.add(protocolEntry); - when(ovsdbBridgeNode.getProtocolEntry()).thenReturn(protocolList); - when(protocolEntry.getProtocol()).thenAnswer( - (Answer>) invocation -> OvsdbBridgeProtocolOpenflow10.class); + ProtocolEntry protocolEntry = new ProtocolEntryBuilder() + .setProtocol(OvsdbBridgeProtocolOpenflow10.class) + .build(); + + when(ovsdbBridgeNode.getProtocolEntry()).thenReturn(Map.of(protocolEntry.key(), protocolEntry)); Set protocols = new HashSet<>(); protocols.add("OpenFlow10"); assertEquals(protocols, SouthboundMapper.createOvsdbBridgeProtocols(ovsdbBridgeNode)); @@ -389,11 +389,8 @@ public class SouthboundMapperTest { OvsdbNodeAugmentation ovsdbNodeAugmentation = mock(OvsdbNodeAugmentation.class); when(ovsdbNode.augmentation(OvsdbNodeAugmentation.class)).thenReturn(ovsdbNodeAugmentation); - List managerEntries = new ArrayList<>(); - ManagerEntry managerEntry = mock(ManagerEntry.class); - managerEntries.add(managerEntry); - when(ovsdbNodeAugmentation.getManagerEntry()).thenReturn(managerEntries); - when(managerEntry.getTarget()).thenReturn(uri); + ManagerEntry managerEntry = new ManagerEntryBuilder().setTarget(uri).build(); + when(ovsdbNodeAugmentation.getManagerEntry()).thenReturn(Map.of(managerEntry.key(), managerEntry)); //Test addManagerEntries(managerEntriesCreated, manager) Column value = mock(Column.class); diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeOperationalStateTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeOperationalStateTest.java index f81b0ceda..a104ec447 100644 --- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeOperationalStateTest.java +++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeOperationalStateTest.java @@ -11,7 +11,7 @@ package org.opendaylight.ovsdb.southbound.ovsdb.transact; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.any; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; @@ -19,8 +19,6 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.powermock.reflect.Whitebox.getField; -import java.util.ArrayList; -import java.util.List; import java.util.Map; import java.util.Optional; import org.junit.Before; @@ -39,13 +37,14 @@ 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.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.NodeBuilder; 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.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointBuilder; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @RunWith(MockitoJUnitRunner.class) @@ -109,19 +108,16 @@ public class BridgeOperationalStateTest { assertNotNull(optTerm); assertTrue(optTerm.equals(Optional.empty())); - TerminationPoint termPnt = mock(TerminationPoint.class); - List termPntList = new ArrayList<>(); - termPntList.add(termPnt); + TerminationPoint termPnt = new TerminationPointBuilder().setTpId(new TpId("mockTp")).build(); Node node = mock(Node.class); Optional optNode = Optional.of(node); doReturn(optNode).when(briOperationState).getBridgeNode(any(InstanceIdentifier.class)); - when(node.getTerminationPoint()).thenReturn(termPntList); - TerminationPointKey termPntKey = mock(TerminationPointKey.class); - when(termPnt.key()).thenReturn(termPntKey); + when(node.nonnullTerminationPoint()).thenCallRealMethod(); + when(node.getTerminationPoint()).thenReturn(Map.of(termPnt.key(), termPnt)); Optional optTermPnt = briOperationState.getBridgeTerminationPoint( - iidNode.child(TerminationPoint.class, termPntKey)); + iidNode.child(TerminationPoint.class, termPnt.key())); assertTrue(optTermPnt.isPresent()); } diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OvsdbNodeUpdateCommandTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OvsdbNodeUpdateCommandTest.java index 5f5b6359c..52475882c 100644 --- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OvsdbNodeUpdateCommandTest.java +++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/OvsdbNodeUpdateCommandTest.java @@ -18,9 +18,7 @@ import static org.mockito.Mockito.when; import com.google.common.collect.ImmutableMap; import java.lang.reflect.Field; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; import org.junit.Before; import org.junit.Test; @@ -41,7 +39,9 @@ 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.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.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.OpenvswitchExternalIds; +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.yangtools.yang.binding.InstanceIdentifier; import org.powermock.api.mockito.PowerMockito; import org.powermock.api.support.membermodification.MemberMatcher; @@ -86,12 +86,12 @@ public class OvsdbNodeUpdateCommandTest { TransactionBuilder transaction = mock(TransactionBuilder.class); when(transaction.getTypedRowWrapper(eq(OpenVSwitch.class))).thenReturn(ovs); - List externalIds = new ArrayList<>(); - OpenvswitchExternalIds externalId = mock(OpenvswitchExternalIds.class); - externalIds.add(externalId); - when(externalId.getExternalIdKey()).thenReturn(EXTERNAL_ID_KEY); - when(externalId.getExternalIdValue()).thenReturn(EXTERNAL_ID_VALUE); - when(ovsdbNode.getOpenvswitchExternalIds()).thenReturn(externalIds); + + OpenvswitchExternalIds externalId = new OpenvswitchExternalIdsBuilder() + .setExternalIdKey(EXTERNAL_ID_KEY) + .setExternalIdValue(EXTERNAL_ID_VALUE) + .build(); + when(ovsdbNode.getOpenvswitchExternalIds()).thenReturn(Map.of(externalId.key(), externalId)); PowerMockito.suppress(MemberMatcher.method(OvsdbNodeUpdateCommand.class, "stampInstanceIdentifier", TransactionBuilder.class, InstanceIdentifier.class, InstanceIdentifierCodec.class)); PowerMockito.suppress(MemberMatcher.methodsDeclaredIn(InstanceIdentifier.class)); @@ -106,19 +106,17 @@ public class OvsdbNodeUpdateCommandTest { when(op.mutate(any(OpenVSwitch.class))).thenReturn(mutate); when(transaction.add(any(Operation.class))).thenReturn(transaction); - List otherConfigs = new ArrayList<>(); - OpenvswitchOtherConfigs otherConfig = mock(OpenvswitchOtherConfigs.class); - otherConfigs.add(otherConfig); - when(ovsdbNode.getOpenvswitchOtherConfigs()).thenReturn(otherConfigs); - when(otherConfig.getOtherConfigKey()).thenReturn(OTHER_CONFIG_KEY); - when(otherConfig.getOtherConfigValue()).thenReturn(OTHER_CONFIG_VALUE); + OpenvswitchOtherConfigs otherConfig = new OpenvswitchOtherConfigsBuilder() + .setOtherConfigKey(OTHER_CONFIG_KEY) + .setOtherConfigValue(OTHER_CONFIG_VALUE) + .build(); + + when(ovsdbNode.getOpenvswitchOtherConfigs()).thenReturn(Map.of(otherConfig.key(), otherConfig)); doNothing().when(ovs).setOtherConfig(any(ImmutableMap.class)); when(ovs.getOtherConfigColumn()).thenReturn(column); ovsdbNodeUpdateCommand.execute(transaction, mock(BridgeOperationalState.class), changes, mock(InstanceIdentifierCodec.class)); - verify(externalId).getExternalIdKey(); - verify(otherConfig).getOtherConfigKey(); verify(ovs, times(2)).getExternalIdsColumn(); verify(transaction, times(2)).add(eq(null)); } diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/BridgeConfigReconciliationTaskTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/BridgeConfigReconciliationTaskTest.java index b85186ac3..8456237e9 100644 --- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/BridgeConfigReconciliationTaskTest.java +++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/reconciliation/configuration/BridgeConfigReconciliationTaskTest.java @@ -16,11 +16,9 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import com.google.common.util.concurrent.FluentFuture; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.Optional; import org.junit.Before; @@ -29,7 +27,6 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; -import org.mockito.stubbing.Answer; import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.binding.api.ReadTransaction; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; @@ -41,25 +38,25 @@ import org.opendaylight.ovsdb.southbound.SouthboundProvider; import org.opendaylight.ovsdb.southbound.reconciliation.ReconciliationManager; 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.OvsdbBridgeName; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolBase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolOpenflow10; 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.bridge.attributes.ControllerEntry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntryBuilder; 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.bridge.attributes.ProtocolEntry; +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.bridge.attributes.ProtocolEntryKey; 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.topology.Node; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder; 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.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; - - @RunWith(MockitoJUnitRunner.class) public class BridgeConfigReconciliationTaskTest { private static final String BR_INT = "br-int"; @@ -76,10 +73,8 @@ public class BridgeConfigReconciliationTaskTest { @Before public void setUp() throws Exception { NodeKey nodeKey = new NodeKey(new NodeId(new Uri(NODE_ID))); - List bridgeNodes = new ArrayList<>(); iid = SouthboundMapper.createInstanceIdentifier(nodeKey.getNodeId()); - when(topology.getNode()).thenReturn(bridgeNodes); SouthboundProvider.setBridgesReconciliationInclusionList(Arrays.asList(BR_INT)); Node brIntNode = createBridgeNode(NODE_ID + "/bridge/" + BR_INT); Optional nodeOptional = Optional.of(brIntNode); @@ -90,7 +85,8 @@ public class BridgeConfigReconciliationTaskTest { Mockito.when(db.newReadOnlyTransaction()).thenReturn(tx); Mockito.when(tx.read(any(LogicalDatastoreType.class),any(InstanceIdentifier.class))) .thenReturn(readNodeFuture); - bridgeNodes.add(brIntNode); + + when(topology.getNode()).thenReturn(Map.of(brIntNode.key(), brIntNode)); configurationReconciliationTask = new BridgeConfigReconciliationTask(reconciliationManager, ovsdbConnectionManager, iid, @@ -103,37 +99,26 @@ public class BridgeConfigReconciliationTaskTest { doNothing().when(underTest).reconcileBridgeConfigurations(any(Map.class)); assertTrue(underTest.reconcileConfiguration(ovsdbConnectionManager)); Map, DataObject> changes = new HashMap<>(); - for (Node bridgeNode : topology.getNode()) { + for (Node bridgeNode : topology.getNode().values()) { changes.putAll(createExpectedConfigurationChanges(bridgeNode)); } verify(underTest).reconcileBridgeConfigurations(changes); } private Node createBridgeNode(final String bridgeName) { - Node bridgeNode = mock(Node.class); - String nodeString = bridgeName; - when(bridgeNode.getNodeId()).thenReturn(new NodeId(new Uri(nodeString))); - OvsdbBridgeAugmentation ovsdbBridgeAugmentation = mock(OvsdbBridgeAugmentation.class); - OvsdbNodeRef ovsdbNodeRef = mock(OvsdbNodeRef.class); - - when((InstanceIdentifier)ovsdbNodeRef.getValue()).thenReturn(iid); - OvsdbBridgeName ovsdbBridgeName = new OvsdbBridgeName(bridgeName); - when(bridgeNode.augmentation(OvsdbBridgeAugmentation.class)).thenReturn(ovsdbBridgeAugmentation); - ProtocolEntry protocolEntry = mock(ProtocolEntry.class); - ProtocolEntryKey protocolEntryKey = mock(ProtocolEntryKey.class); - Mockito.when(protocolEntry.getProtocol()).thenAnswer( - (Answer>) invocation -> OvsdbBridgeProtocolOpenflow10.class); - when(protocolEntry.key()).thenReturn(protocolEntryKey); - when(ovsdbBridgeAugmentation.getProtocolEntry()).thenReturn(Collections.singletonList(protocolEntry)); - - ControllerEntry controllerEntry = mock(ControllerEntry.class); - ControllerEntryKey controllerEntryKey = mock(ControllerEntryKey.class); - when(controllerEntry.key()).thenReturn(controllerEntryKey); - when(ovsdbBridgeAugmentation.getControllerEntry()).thenReturn(Collections.singletonList(controllerEntry)); - - when(ovsdbBridgeAugmentation.getManagedBy()).thenReturn(ovsdbNodeRef); - - return bridgeNode; + ProtocolEntry protocolEntry = new ProtocolEntryBuilder() + .setProtocol(OvsdbBridgeProtocolOpenflow10.class) + .build(); + ControllerEntry controllerEntry = new ControllerEntryBuilder().setTarget(new Uri("mock")).build(); + + return new NodeBuilder() + .setNodeId(new NodeId(new Uri(bridgeName))) + .addAugmentation(new OvsdbBridgeAugmentationBuilder() + .setManagedBy(new OvsdbNodeRef(iid)) + .setProtocolEntry(Collections.singletonMap(protocolEntry.key(), protocolEntry)) + .setControllerEntry(Collections.singletonMap(controllerEntry.key(), controllerEntry)) + .build()) + .build(); } private Map, DataObject> createExpectedConfigurationChanges(final Node bridgeNode) { @@ -146,12 +131,12 @@ public class BridgeConfigReconciliationTaskTest { bridgeNodeIid.builder().augmentation(OvsdbBridgeAugmentation.class).build(); changes.put(bridgeNodeIid, bridgeNode); changes.put(ovsdbBridgeIid, ovsdbBridge); - for (ProtocolEntry protocolEntry : ovsdbBridge.getProtocolEntry()) { + for (ProtocolEntry protocolEntry : ovsdbBridge.getProtocolEntry().values()) { KeyedInstanceIdentifier protocolIid = ovsdbBridgeIid.child(ProtocolEntry.class, protocolEntry.key()); changes.put(protocolIid, protocolEntry); } - for (ControllerEntry controller : ovsdbBridge.getControllerEntry()) { + for (ControllerEntry controller : ovsdbBridge.getControllerEntry().values()) { KeyedInstanceIdentifier controllerIid = ovsdbBridgeIid.child(ControllerEntry.class, controller.key()); changes.put(controllerIid, controller); diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OpenVSwitchUpdateCommandTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OpenVSwitchUpdateCommandTest.java index f82a908cd..ec8870656 100644 --- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OpenVSwitchUpdateCommandTest.java +++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OpenVSwitchUpdateCommandTest.java @@ -9,6 +9,7 @@ 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.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; @@ -21,7 +22,6 @@ import static org.mockito.Mockito.when; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; -import java.util.List; import java.util.Map; import java.util.Set; import org.junit.Before; @@ -50,9 +50,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.OvsdbNodeAugmentationBuilder; 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.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.DatapathTypeEntry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.DatapathTypeEntryKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.InterfaceTypeEntry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.InterfaceTypeEntryKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.OpenvswitchExternalIds; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.OpenvswitchExternalIdsKey; 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.OpenvswitchOtherConfigsKey; 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.NodeBuilder; @@ -202,9 +206,10 @@ public class OpenVSwitchUpdateCommandTest { Whitebox.invokeMethod(openVSwitchUpdateCommand, "setNewOtherConfigs", ovsdbNodeBuilder, ImmutableMap.of("otherConfigKey", "otherConfigValue")); - final List otherConfigsList = ovsdbNodeBuilder.getOpenvswitchOtherConfigs(); + final Map otherConfigsList = + ovsdbNodeBuilder.getOpenvswitchOtherConfigs(); assertEquals(1, otherConfigsList.size()); - final OpenvswitchOtherConfigs otherConfig = otherConfigsList.get(0); + final OpenvswitchOtherConfigs otherConfig = otherConfigsList.values().iterator().next(); assertEquals("otherConfigKey", otherConfig.getOtherConfigKey()); assertEquals("otherConfigValue", otherConfig.getOtherConfigValue()); } @@ -253,9 +258,10 @@ public class OpenVSwitchUpdateCommandTest { Whitebox.invokeMethod(openVSwitchUpdateCommand, "setNewExternalIds", ovsdbNodeBuilder, ImmutableMap.of("externalIdsKey", "externalIdsValue")); - final List externalIdsList = ovsdbNodeBuilder.getOpenvswitchExternalIds(); + final Map externalIdsList = + ovsdbNodeBuilder.getOpenvswitchExternalIds(); assertEquals(1, externalIdsList.size()); - final OpenvswitchExternalIds externalId = externalIdsList.get(0); + final OpenvswitchExternalIds externalId = externalIdsList.values().iterator().next(); assertEquals("externalIdsKey", externalId.getExternalIdKey()); assertEquals("externalIdsValue", externalId.getExternalIdValue()); } @@ -287,7 +293,7 @@ public class OpenVSwitchUpdateCommandTest { Whitebox.invokeMethod(openVSwitchUpdateCommand, "setInterfaceTypes", ovsdbNodeBuilder, openVSwitch); verify(openVSwitch).getIfaceTypesColumn(); - List interfaceTypeEntries = ovsdbNodeBuilder.getInterfaceTypeEntry(); + Map interfaceTypeEntries = ovsdbNodeBuilder.getInterfaceTypeEntry(); assertEquals(14, interfaceTypeEntries.size()); } @@ -303,10 +309,10 @@ public class OpenVSwitchUpdateCommandTest { Whitebox.invokeMethod(openVSwitchUpdateCommand, "setDataPathTypes", ovsdbNodeBuilder, openVSwitch); verify(openVSwitch).getDatapathTypesColumn(); - List entries = ovsdbNodeBuilder.getDatapathTypeEntry(); + Map entries = ovsdbNodeBuilder.getDatapathTypeEntry(); assertEquals(2, entries.size()); - assertEquals(DatapathTypeNetdev.class, entries.get(0).getDatapathType()); - assertEquals(DatapathTypeSystem.class, entries.get(1).getDatapathType()); + assertTrue(entries.containsKey(new DatapathTypeEntryKey(DatapathTypeNetdev.class))); + assertTrue(entries.containsKey(new DatapathTypeEntryKey(DatapathTypeSystem.class))); } @Test diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbAutoAttachRemovedCommandTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbAutoAttachRemovedCommandTest.java index 95fe870c3..dc812575c 100644 --- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbAutoAttachRemovedCommandTest.java +++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbAutoAttachRemovedCommandTest.java @@ -15,9 +15,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.Optional; import org.junit.Before; @@ -96,12 +94,10 @@ public class OvsdbAutoAttachRemovedCommandTest { OvsdbNodeAugmentation ovsdbNodeAugmentation = mock(OvsdbNodeAugmentation.class); when(node.augmentation(OvsdbNodeAugmentation.class)).thenReturn(ovsdbNodeAugmentation); - List autoAttachList = new ArrayList<>(); Autoattach aaEntry = mock(Autoattach.class); - autoAttachList.add(aaEntry); when(aaEntry.getAutoattachUuid()).thenReturn(new Uuid(AUTOATTACH_UUID.toString())); - when(ovsdbNodeAugmentation.getAutoattach()).thenReturn(autoAttachList); when(aaEntry.key()).thenReturn(aaKey); + when(ovsdbNodeAugmentation.getAutoattach()).thenReturn(Map.of(aaKey, aaEntry)); doNothing().when(transaction).delete(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)); } diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeUpdateCommandTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeUpdateCommandTest.java index 6f0108d44..6ef657d30 100644 --- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeUpdateCommandTest.java +++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeUpdateCommandTest.java @@ -87,7 +87,7 @@ public class OvsdbBridgeUpdateCommandTest { private final Map updatedBridgeRows = new HashMap<>(); private final Map oldBridgeRows = new HashMap<>(); private OvsdbBridgeUpdateCommand ovsdbBridgeUpdateCommand; - private Map updatedBridgeNodes = new HashMap<>(); + private final Map updatedBridgeNodes = new HashMap<>(); @Before public void setUp() throws Exception { @@ -240,7 +240,11 @@ public class OvsdbBridgeUpdateCommandTest { when(SouthboundMapper.createInstanceIdentifier(any(InstanceIdentifierCodec.class), any(OvsdbConnectionInstance.class), any(Bridge.class))) .thenReturn(bridgeIid); - ManagedNodeEntry managedBridge = mock(ManagedNodeEntry.class); + + ManagedNodeEntry managedBridge = new ManagedNodeEntryBuilder() + .setBridgeRef(new OvsdbBridgeRef(mock(InstanceIdentifier.class))) + .build(); + ManagedNodeEntryBuilder managedNodeEntryBuilder = mock(ManagedNodeEntryBuilder.class); PowerMockito.whenNew(ManagedNodeEntryBuilder.class).withNoArguments().thenReturn(managedNodeEntryBuilder); PowerMockito.whenNew(OvsdbBridgeRef.class).withAnyArguments().thenReturn(mock(OvsdbBridgeRef.class)); @@ -254,9 +258,8 @@ public class OvsdbBridgeUpdateCommandTest { .thenReturn(connectionNode); //for logger - List value = new ArrayList<>(); - value.add(managedBridge); - when(ovsdbConnectionAugmentationBuilder.getManagedNodeEntry()).thenReturn(value); + when(ovsdbConnectionAugmentationBuilder.getManagedNodeEntry()) + .thenReturn(Map.of(managedBridge.key(), managedBridge)); Node node = mock(Node.class); when(connectionNode.build()).thenReturn(node); diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbControllerUpdateCommandTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbControllerUpdateCommandTest.java index f7af37ed2..da2cd9dc7 100644 --- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbControllerUpdateCommandTest.java +++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbControllerUpdateCommandTest.java @@ -43,6 +43,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.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.NodeId; 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; @@ -167,14 +168,12 @@ public class OvsdbControllerUpdateCommandTest { OvsdbNodeAugmentation ovsdbNodeAugmentation = mock(OvsdbNodeAugmentation.class); when(node.augmentation(OvsdbNodeAugmentation.class)).thenReturn(ovsdbNodeAugmentation); - List managedNodeEntries = new ArrayList<>(); - ManagedNodeEntry managedNodeEntry = mock(ManagedNodeEntry.class); - managedNodeEntries.add(managedNodeEntry); - when(ovsdbNodeAugmentation.getManagedNodeEntry()).thenReturn(managedNodeEntries); InstanceIdentifier bridgeIid = mock(InstanceIdentifier.class); - OvsdbBridgeRef ovsdbBridgeRef = mock(OvsdbBridgeRef.class); - when(managedNodeEntry.getBridgeRef()).thenReturn(ovsdbBridgeRef); - when((InstanceIdentifier) ovsdbBridgeRef.getValue()).thenReturn(bridgeIid); + ManagedNodeEntry managedNodeEntry = new ManagedNodeEntryBuilder() + .setBridgeRef(new OvsdbBridgeRef(bridgeIid)) + .build(); + + when(ovsdbNodeAugmentation.getManagedNodeEntry()).thenReturn(Map.of(managedNodeEntry.key(), managedNodeEntry)); Optional bridgeNode = Optional.of(node); when(SouthboundUtil.readNode(transaction, bridgeIid)).thenReturn(bridgeNode); diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbNodeRemoveCommandTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbNodeRemoveCommandTest.java index 3e0f21651..27dd3afe4 100644 --- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbNodeRemoveCommandTest.java +++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbNodeRemoveCommandTest.java @@ -18,8 +18,8 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import com.google.common.util.concurrent.FluentFuture; -import java.util.ArrayList; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.Optional; import org.junit.Before; import org.junit.Test; @@ -31,10 +31,14 @@ 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.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; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentationBuilder; 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.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.network.topology.topology.Node; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.Uint32; @@ -82,35 +86,39 @@ public class OvsdbNodeRemoveCommandTest { doReturn(true).when(ovsdbNodeRemoveCommand).checkIfOnlyConnectedManager(any(OvsdbNodeAugmentation.class)); - List listManagedNodeEntry = new ArrayList<>(); - ManagedNodeEntry managedNode = mock(ManagedNodeEntry.class); - listManagedNodeEntry.add(managedNode); - when(ovsdbNodeAugmentation.getManagedNodeEntry()).thenReturn(listManagedNodeEntry); - OvsdbBridgeRef ovsdbBridgeRef = mock(OvsdbBridgeRef.class); - when(managedNode.getBridgeRef()).thenReturn(ovsdbBridgeRef); - when(ovsdbBridgeRef.getValue()).thenReturn(mock(InstanceIdentifier.class)); + ManagedNodeEntry managedNode = new ManagedNodeEntryBuilder() + .setBridgeRef(new OvsdbBridgeRef(mock(InstanceIdentifier.class))) + .build(); + + when(ovsdbNodeAugmentation.getManagedNodeEntry()).thenReturn(Map.of(managedNode.key(), managedNode)); doNothing().when(transaction).delete(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)); ovsdbNodeRemoveCommand.execute(transaction); - verify(ovsdbNodeAugmentation, times(2)).getManagedNodeEntry(); + verify(ovsdbNodeAugmentation).getManagedNodeEntry(); verify(transaction, times(2)).delete(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)); } @Test public void testCheckIfOnlyConnectedManager() throws Exception { - OvsdbNodeAugmentation ovsdbNodeAugmentation = mock(OvsdbNodeAugmentation.class); ManagerEntry manager = mock(ManagerEntry.class); - List listManagerEntry = new ArrayList<>(); - listManagerEntry.add(manager); - - //case 1: connectedManager > ONE_CONNECTED_MANAGER ManagerEntry manager1 = mock(ManagerEntry.class); - listManagerEntry.add(manager1); - when(ovsdbNodeAugmentation.getManagerEntry()).thenReturn(listManagerEntry); + doReturn(new ManagerEntryKey(new Uri("manager"))).when(manager).key(); + doReturn(new ManagerEntryKey(new Uri("manager1"))).when(manager1).key(); + when(manager.isConnected()).thenReturn(true, false, true); when(manager1.isConnected()).thenReturn(true, false, true); - when(manager.getNumberOfConnections()).thenReturn(Uint32.valueOf(0)); + when(manager.getNumberOfConnections()).thenReturn(Uint32.ZERO); + + Map listManagerEntry = new HashMap<>(); + listManagerEntry.put(manager.key(), manager); + listManagerEntry.put(manager1.key(), manager1); + + OvsdbNodeAugmentation ovsdbNodeAugmentation = new OvsdbNodeAugmentationBuilder() + .setManagerEntry(listManagerEntry) + .build(); + + //case 1: connectedManager > ONE_CONNECTED_MANAGER assertEquals(false, Whitebox.invokeMethod(ovsdbNodeRemoveCommand, "checkIfOnlyConnectedManager", ovsdbNodeAugmentation)); @@ -124,7 +132,7 @@ public class OvsdbNodeRemoveCommandTest { Whitebox.invokeMethod(ovsdbNodeRemoveCommand, "checkIfOnlyConnectedManager", ovsdbNodeAugmentation)); // case 4: when all the above don't apply - listManagerEntry.remove(manager1); + listManagerEntry.remove(manager1.key()); assertEquals(true, Whitebox.invokeMethod(ovsdbNodeRemoveCommand, "checkIfOnlyConnectedManager", ovsdbNodeAugmentation)); } diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbPortUpdateCommandTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbPortUpdateCommandTest.java index 5d97b1c50..9fb4475a0 100644 --- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbPortUpdateCommandTest.java +++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbPortUpdateCommandTest.java @@ -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; @@ -23,7 +22,6 @@ import static org.powermock.api.support.membermodification.MemberModifier.suppre import com.google.common.util.concurrent.FluentFuture; import java.util.AbstractMap.SimpleEntry; -import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -35,10 +33,7 @@ import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Matchers; import org.mockito.Mockito; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; import org.opendaylight.mdsal.binding.api.ReadWriteTransaction; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.ovsdb.lib.message.TableUpdates; @@ -57,7 +52,6 @@ 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.yang.types.rev130715.Uuid; import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeBase; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeInternal; 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; @@ -67,6 +61,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.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentationBuilder; 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.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceExternalIds; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceExternalIdsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceOtherConfigs; @@ -339,40 +334,38 @@ public class OvsdbPortUpdateCommandTest { Node node = mock(Node.class); OvsdbNodeAugmentation ovsdbNode = mock(OvsdbNodeAugmentation.class); when(node.augmentation(OvsdbNodeAugmentation.class)).thenReturn(ovsdbNode); - List managedNodes = new ArrayList<>(); - ManagedNodeEntry managedNodeEntry = mock(ManagedNodeEntry.class); - managedNodes.add(managedNodeEntry); - when(ovsdbNode.getManagedNodeEntry()).thenReturn(managedNodes); - Node managedNode = mock(Node.class); - OvsdbBridgeRef ovsdbBridgeRef = mock(OvsdbBridgeRef.class); - when(managedNodeEntry.getBridgeRef()).thenReturn(ovsdbBridgeRef); InstanceIdentifier iidNode = mock(InstanceIdentifier.class); - when((InstanceIdentifier) ovsdbBridgeRef.getValue()).thenReturn(iidNode); + + ManagedNodeEntry managedNodeEntry = new ManagedNodeEntryBuilder() + .setBridgeRef(new OvsdbBridgeRef(iidNode)) + .build(); + when(ovsdbNode.nonnullManagedNodeEntry()).thenCallRealMethod(); + when(ovsdbNode.getManagedNodeEntry()).thenReturn(Map.of(managedNodeEntry.key(), managedNodeEntry)); + + Node managedNode = mock(Node.class); Optional optionalNode = Optional.of(managedNode); PowerMockito.doReturn(optionalNode).when(ovsdbPortUpdateCommand, "readNode", any(ReadWriteTransaction.class), any(InstanceIdentifier.class)); PowerMockito.mockStatic(SouthboundUtil.class); - PowerMockito.when(SouthboundUtil.readNode(Matchers.any(ReadWriteTransaction.class), - Matchers.any(InstanceIdentifier.class))) + PowerMockito.when(SouthboundUtil.readNode(any(ReadWriteTransaction.class), + any(InstanceIdentifier.class))) .thenReturn(optionalNode); + + TerminationPoint terminationPoint = new TerminationPointBuilder().setTpId(new TpId(TP_NAME)).build(); + TerminationPointBuilder tpBuilder = mock(TerminationPointBuilder.class); - PowerMockito.whenNew(TerminationPointBuilder.class).withNoArguments().thenReturn(tpBuilder); - PowerMockito.whenNew(TpId.class).withAnyArguments().thenReturn(mock(TpId.class)); - PowerMockito.whenNew(TerminationPointKey.class).withAnyArguments().thenReturn(mock(TerminationPointKey.class)); when(tpBuilder.withKey(any(TerminationPointKey.class))).thenReturn(tpBuilder); - - List terminationPointList = new ArrayList<>(); - TerminationPoint terminationPoint = mock(TerminationPoint.class); - terminationPointList.add(terminationPoint); when(tpBuilder.build()).thenReturn(terminationPoint); - when(managedNode.getTerminationPoint()).thenReturn(terminationPointList); + + PowerMockito.whenNew(TerminationPointBuilder.class).withNoArguments().thenReturn(tpBuilder); + + when(managedNode.nonnullTerminationPoint()).thenCallRealMethod(); + when(managedNode.getTerminationPoint()).thenReturn(Map.of(terminationPoint.key(), terminationPoint)); when(managedNode.augmentation(OvsdbBridgeAugmentation.class)) .thenReturn(mock(OvsdbBridgeAugmentation.class)); - TpId tpId = new TpId(TP_NAME); - when(terminationPoint.getTpId()).thenReturn(tpId); Optional> testResult = Optional.of(iidNode); ReadWriteTransaction transaction = mock(ReadWriteTransaction.class); @@ -410,12 +403,8 @@ public class OvsdbPortUpdateCommandTest { PowerMockito.whenNew(Uuid.class).withAnyArguments().thenReturn(mock(Uuid.class)); when(ovsdbTerminationPointBuilder.setInterfaceUuid(any(Uuid.class))).thenReturn(ovsdbTerminationPointBuilder); PowerMockito.mockStatic(SouthboundMapper.class); - PowerMockito.when(SouthboundMapper.createInterfaceType(Matchers.anyString())) - .thenAnswer(new Answer>() { - public Class answer(InvocationOnMock invocation) throws Exception { - return InterfaceTypeInternal.class; - } - }); + PowerMockito.when(SouthboundMapper.createInterfaceType(anyString())) + .thenAnswer(invocation -> InterfaceTypeInternal.class); when(ovsdbTerminationPointBuilder.setInterfaceType(any(Class.class))).thenReturn(ovsdbTerminationPointBuilder); suppress(method(OvsdbPortUpdateCommand.class, "updateOfPort", Interface.class, OvsdbTerminationPointAugmentationBuilder.class)); diff --git a/southbound/southbound-it/pom.xml b/southbound/southbound-it/pom.xml index 9f7b2c11d..dde21a253 100644 --- a/southbound/southbound-it/pom.xml +++ b/southbound/southbound-it/pom.xml @@ -79,7 +79,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html javax.inject javax.inject - 1 compile diff --git a/southbound/southbound-it/src/test/java/org/opendaylight/ovsdb/southbound/it/SouthboundIT.java b/southbound/southbound-it/src/test/java/org/opendaylight/ovsdb/southbound/it/SouthboundIT.java index 7f8cc2803..57e5996fc 100644 --- a/southbound/southbound-it/src/test/java/org/opendaylight/ovsdb/southbound/it/SouthboundIT.java +++ b/southbound/southbound-it/src/test/java/org/opendaylight/ovsdb/southbound/it/SouthboundIT.java @@ -19,6 +19,7 @@ import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.keepRunti import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import java.lang.annotation.Annotation; @@ -30,9 +31,11 @@ import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Properties; import java.util.Set; import javax.inject.Inject; +import jersey.repackaged.com.google.common.collect.Maps; import org.eclipse.jdt.annotation.Nullable; import org.junit.After; import org.junit.Assert; @@ -76,8 +79,10 @@ 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.QosTypeBase; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.BridgeExternalIds; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.BridgeExternalIdsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.BridgeExternalIdsKey; 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.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.BridgeOtherConfigsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.BridgeOtherConfigsKey; 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.ControllerEntryBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntry; @@ -88,9 +93,11 @@ 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.ConnectionInfo; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfoBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.DatapathTypeEntry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.DatapathTypeEntryKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.InterfaceTypeEntryBuilder; 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.OpenvswitchOtherConfigs; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.OpenvswitchOtherConfigsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QosEntries; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QosEntriesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QosEntriesKey; @@ -99,31 +106,43 @@ 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.QueuesKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.autoattach.AutoattachExternalIds; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.autoattach.AutoattachExternalIdsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.autoattach.AutoattachExternalIdsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.autoattach.Mappings; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.autoattach.MappingsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.autoattach.MappingsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.qos.entries.QosExternalIds; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.qos.entries.QosExternalIdsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.qos.entries.QosExternalIdsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.qos.entries.QosOtherConfig; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.qos.entries.QosOtherConfigBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.qos.entries.QosOtherConfigKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.qos.entries.QueueList; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.qos.entries.QueueListBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.qos.entries.QueueListKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.queues.QueuesExternalIds; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.queues.QueuesExternalIdsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.queues.QueuesExternalIdsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.queues.QueuesOtherConfig; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.queues.QueuesOtherConfigBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.queues.QueuesOtherConfigKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceExternalIds; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceExternalIdsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceExternalIdsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceLldp; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceLldpBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceLldpKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceOtherConfigs; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceOtherConfigsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceOtherConfigsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.Options; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.OptionsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.OptionsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.PortExternalIds; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.PortExternalIdsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.PortExternalIdsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.PortOtherConfigs; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.PortOtherConfigsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.PortOtherConfigsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.Trunks; 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; @@ -139,8 +158,11 @@ 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.concepts.Builder; import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.Identifiable; +import org.opendaylight.yangtools.yang.binding.Identifier; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; +import org.opendaylight.yangtools.yang.common.Uint32; import org.ops4j.pax.exam.Configuration; import org.ops4j.pax.exam.Option; import org.ops4j.pax.exam.junit.PaxExam; @@ -623,12 +645,12 @@ public class SouthboundIT extends AbstractMdsalTestBase { @Test public void testDpdkSwitch() throws InterruptedException { ConnectionInfo connectionInfo = getConnectionInfo(addressStr, portNumber); - List datapathTypeEntries = ovsdbNode.augmentation(OvsdbNodeAugmentation.class) - .getDatapathTypeEntry(); + Map datapathTypeEntries = + ovsdbNode.augmentation(OvsdbNodeAugmentation.class).nonnullDatapathTypeEntry(); if (datapathTypeEntries == null) { LOG.info("DPDK not supported on this node."); } else { - for (DatapathTypeEntry dpTypeEntry : datapathTypeEntries) { + for (DatapathTypeEntry dpTypeEntry : datapathTypeEntries.values()) { Class dpType = dpTypeEntry.getDatapathType(); String dpTypeStr = SouthboundConstants.DATAPATH_TYPE_MAP.get(dpType); LOG.info("dp type is {}", dpTypeStr); @@ -673,10 +695,10 @@ public class SouthboundIT extends AbstractMdsalTestBase { // Verify that each termination point has the specific DPDK ifType for (String dpdkType : dpdkTypes) { String testPortname = "test" + dpdkType + "port"; - Class dpdkIfType = SouthboundConstants.OVSDB_INTERFACE_TYPE_MAP - .get(dpdkType); - List terminationPoints = terminationPointNode.getTerminationPoint(); - for (TerminationPoint terminationPoint : terminationPoints) { + Class dpdkIfType = + SouthboundConstants.OVSDB_INTERFACE_TYPE_MAP.get(dpdkType); + for (TerminationPoint terminationPoint + : terminationPointNode.nonnullTerminationPoint().values()) { OvsdbTerminationPointAugmentation ovsdbTerminationPointAugmentation = terminationPoint .augmentation(OvsdbTerminationPointAugmentation.class); if (ovsdbTerminationPointAugmentation.getName().equals(testPortname)) { @@ -711,9 +733,10 @@ public class SouthboundIT extends AbstractMdsalTestBase { public void testOpenVSwitchOtherConfig() throws InterruptedException { OvsdbNodeAugmentation ovsdbNodeAugmentation = ovsdbNode.augmentation(OvsdbNodeAugmentation.class); Assert.assertNotNull(ovsdbNodeAugmentation); - List otherConfigsList = ovsdbNodeAugmentation.getOpenvswitchOtherConfigs(); + Map otherConfigsList = + ovsdbNodeAugmentation.getOpenvswitchOtherConfigs(); if (otherConfigsList != null) { - for (OpenvswitchOtherConfigs otherConfig : otherConfigsList) { + for (OpenvswitchOtherConfigs otherConfig : otherConfigsList.values()) { if (otherConfig.getOtherConfigKey().equals("local_ip")) { LOG.info("local_ip: {}", otherConfig.getOtherConfigValue()); break; @@ -740,8 +763,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { Assert.assertNotNull("bridge was not found: " + SouthboundITConstants.BRIDGE_NAME, bridge); Assert.assertNotNull("ControllerEntry was not found: " + setControllerEntry.iterator().next(), bridge.getControllerEntry()); - List getControllerEntries = bridge.getControllerEntry(); - for (ControllerEntry entry : getControllerEntries) { + for (ControllerEntry entry : bridge.getControllerEntry().values()) { if (entry.getTarget() != null) { Assert.assertEquals(setUri.toString(), entry.getTarget().toString()); } @@ -1038,23 +1060,18 @@ public class SouthboundIT extends AbstractMdsalTestBase { LogicalDatastoreType.OPERATIONAL); operAa = getAutoAttach(ovsdbNodeAugmentation, new Uri(testAutoattachId)); Assert.assertNotNull(operAa); - List operMappingsList = operAa.getMappings(); - for (Mappings operMappings: operMappingsList) { - Assert.assertEquals(mappings.get(operMappingsList.indexOf(operMappings)) - .getMappingsKey(), operMappings.getMappingsKey()); - Assert.assertEquals(mappings.get(operMappingsList.indexOf(operMappings)) - .getMappingsValue(), operMappings.getMappingsValue()); + Map operMappingsList = operAa.getMappings(); + for (Mappings operMappings : operMappingsList.values()) { + Assert.assertTrue(mappings.contains(operMappings)); } - List operExternalIds = operAa.getAutoattachExternalIds(); + Map operExternalIds = + operAa.getAutoattachExternalIds(); externalIds.add(new AutoattachExternalIdsBuilder() .setAutoattachExternalIdKey(SouthboundConstants.AUTOATTACH_ID_EXTERNAL_ID_KEY) .setAutoattachExternalIdValue(operAa.getAutoattachId().getValue()) .build()); - for (AutoattachExternalIds operExternalId : operExternalIds) { - Assert.assertEquals(externalIds.get(operExternalIds.indexOf(operExternalId)) - .getAutoattachExternalIdKey(), operExternalId.getAutoattachExternalIdKey()); - Assert.assertEquals(externalIds.get(operExternalIds.indexOf(operExternalId)) - .getAutoattachExternalIdValue(), operExternalId.getAutoattachExternalIdValue()); + for (AutoattachExternalIds operExternalId : operExternalIds.values()) { + Assert.assertTrue(externalIds.contains(operExternalId)); } // DELETE: Delete AutoAttach table @@ -1070,10 +1087,10 @@ public class SouthboundIT extends AbstractMdsalTestBase { } } - private Autoattach getAutoAttach(OvsdbNodeAugmentation ovsdbNodeAugmentation, Uri uri) { + private static Autoattach getAutoAttach(OvsdbNodeAugmentation ovsdbNodeAugmentation, Uri uri) { if (ovsdbNodeAugmentation.getAutoattach() != null && !ovsdbNodeAugmentation.getAutoattach().isEmpty()) { - for (Autoattach aa : ovsdbNodeAugmentation.getAutoattach()) { + for (Autoattach aa : ovsdbNodeAugmentation.getAutoattach().values()) { if (aa.key().getAutoattachId().equals(uri)) { return aa; } @@ -1296,7 +1313,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { } } - private InstanceIdentifier getTpIid(ConnectionInfo connectionInfo, OvsdbBridgeAugmentation bridge) { + private static InstanceIdentifier getTpIid(ConnectionInfo connectionInfo, OvsdbBridgeAugmentation bridge) { return SouthboundUtils.createInstanceIdentifier(connectionInfo, bridge.getBridgeName()); } @@ -1313,11 +1330,12 @@ public class SouthboundIT extends AbstractMdsalTestBase { private OvsdbTerminationPointAugmentation getOvsdbTerminationPointAugmentation( ConnectionInfo connectionInfo, String bridgeName, LogicalDatastoreType store, int index) { - List tpList = getBridgeNode(connectionInfo, bridgeName, store).getTerminationPoint(); + Map tpList = getBridgeNode(connectionInfo, bridgeName, store) + .nonnullTerminationPoint(); if (tpList == null) { return null; } - return tpList.get(index).augmentation(OvsdbTerminationPointAugmentation.class); + return Iterables.get(tpList.values(), index).augmentation(OvsdbTerminationPointAugmentation.class); } @Test @@ -1346,8 +1364,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { Assert.assertNotNull(terminationPointNode); // Test read ifIndex - List terminationPoints = terminationPointNode.getTerminationPoint(); - for (TerminationPoint terminationPoint : terminationPoints) { + for (TerminationPoint terminationPoint : terminationPointNode.nonnullTerminationPoint().values()) { OvsdbTerminationPointAugmentation ovsdbTerminationPointAugmentation = terminationPoint.augmentation(OvsdbTerminationPointAugmentation.class); if (ovsdbTerminationPointAugmentation.getName().equals(portName)) { @@ -1384,8 +1401,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { Assert.assertNotNull(terminationPointNode); // READ - List terminationPoints = terminationPointNode.getTerminationPoint(); - for (TerminationPoint terminationPoint : terminationPoints) { + for (TerminationPoint terminationPoint : terminationPointNode.nonnullTerminationPoint().values()) { OvsdbTerminationPointAugmentation ovsdbTerminationPointAugmentation = terminationPoint.augmentation(OvsdbTerminationPointAugmentation.class); if (ovsdbTerminationPointAugmentation.getName().equals(portName)) { @@ -1430,8 +1446,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { Assert.assertNotNull(terminationPointNode); // READ - List terminationPoints = terminationPointNode.getTerminationPoint(); - for (TerminationPoint terminationPoint : terminationPoints) { + for (TerminationPoint terminationPoint : terminationPointNode.nonnullTerminationPoint().values()) { OvsdbTerminationPointAugmentation ovsdbTerminationPointAugmentation = terminationPoint.augmentation(OvsdbTerminationPointAugmentation.class); if (ovsdbTerminationPointAugmentation.getName().equals(portName)) { @@ -1454,18 +1469,19 @@ public class SouthboundIT extends AbstractMdsalTestBase { } } - private void assertExpectedExist(List expected, List test) { + private static , T extends Identifiable> void assertExpectedExist(Map expected, + Map test) { if (expected != null && test != null) { - for (T exp : expected) { - Assert.assertTrue("The retrieved values don't contain " + exp, test.contains(exp)); + for (T exp : expected.values()) { + Assert.assertTrue("The retrieved values don't contain " + exp, test.containsValue(exp)); } } } - private interface SouthboundTerminationPointHelper { + private interface SouthboundTerminationPointHelper, T extends Identifiable> { void writeValues(OvsdbTerminationPointAugmentationBuilder builder, List values); - List readValues(OvsdbTerminationPointAugmentation augmentation); + Map readValues(OvsdbTerminationPointAugmentation augmentation); } /* @@ -1473,8 +1489,8 @@ public class SouthboundIT extends AbstractMdsalTestBase { * * @see SouthboundIT.generatePortExternalIdsTestCases() for specific test case information */ - private void testCRUDTerminationPoint( - KeyValueBuilder builder, String prefix, SouthboundTerminationPointHelper helper) + private , T extends Identifiable> void testCRUDTerminationPoint( + KeyValueBuilder builder, String prefix, SouthboundTerminationPointHelper helper) throws InterruptedException { final int terminationPointTestIndex = 0; @@ -1482,11 +1498,11 @@ public class SouthboundIT extends AbstractMdsalTestBase { // updateFromTestCases represent the original test case value. updateToTestCases represent the new value after // the update has been performed. - List> updateFromTestCases = generateKeyValueTestCases(builder, prefix + "From"); - List> updateToTestCases = generateKeyValueTestCases(builder, prefix + "To"); + List> updateFromTestCases = generateKeyValueTestCases(builder, prefix + "From"); + List> updateToTestCases = generateKeyValueTestCases(builder, prefix + "To"); - for (SouthboundTestCase updateFromTestCase : updateFromTestCases) { - for (SouthboundTestCase updateToTestCase : updateToTestCases) { + for (SouthboundTestCase updateFromTestCase : updateFromTestCases) { + for (SouthboundTestCase updateToTestCase : updateToTestCases) { String testBridgeAndPortName = String.format("%s_%s", prefix, updateToTestCase.name); // CREATE: Create the test bridge @@ -1509,7 +1525,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { getOvsdbTerminationPointAugmentation(connectionInfo, testBridgeAndPortName, LogicalDatastoreType.CONFIGURATION, terminationPointTestIndex); if (updateFromConfigurationTerminationPointAugmentation != null) { - List updateFromConfigurationValues = + Map updateFromConfigurationValues = helper.readValues(updateFromConfigurationTerminationPointAugmentation); assertExpectedExist(updateFromTestCase.expectedValues, updateFromConfigurationValues); } @@ -1517,7 +1533,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { getOvsdbTerminationPointAugmentation(connectionInfo, testBridgeAndPortName, LogicalDatastoreType.OPERATIONAL, terminationPointTestIndex); if (updateFromOperationalTerminationPointAugmentation != null) { - List updateFromOperationalValues = + Map updateFromOperationalValues = helper.readValues(updateFromOperationalTerminationPointAugmentation); assertExpectedExist(updateFromTestCase.expectedValues, updateFromOperationalValues); } @@ -1547,7 +1563,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { getOvsdbTerminationPointAugmentation(connectionInfo, testBridgeAndPortName, LogicalDatastoreType.CONFIGURATION, terminationPointTestIndex); if (updateToConfigurationTerminationPointAugmentation != null) { - List updateToConfigurationValues = + Map updateToConfigurationValues = helper.readValues(updateToConfigurationTerminationPointAugmentation); assertExpectedExist(updateToTestCase.expectedValues, updateToConfigurationValues); assertExpectedExist(updateFromTestCase.expectedValues, updateToConfigurationValues); @@ -1556,7 +1572,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { getOvsdbTerminationPointAugmentation(connectionInfo, testBridgeAndPortName, LogicalDatastoreType.OPERATIONAL, terminationPointTestIndex); if (updateToOperationalTerminationPointAugmentation != null) { - List updateToOperationalValues = + Map updateToOperationalValues = helper.readValues(updateToOperationalTerminationPointAugmentation); if (updateFromTestCase.expectedValues != null) { assertExpectedExist(updateToTestCase.expectedValues, updateToOperationalValues); @@ -1742,9 +1758,8 @@ public class SouthboundIT extends AbstractMdsalTestBase { Assert.assertNotNull(terminationPointNode); // READ - List terminationPoints = terminationPointNode.getTerminationPoint(); OvsdbTerminationPointAugmentation ovsdbTerminationPointAugmentation; - for (TerminationPoint terminationPoint : terminationPoints) { + for (TerminationPoint terminationPoint : terminationPointNode.nonnullTerminationPoint().values()) { ovsdbTerminationPointAugmentation = terminationPoint.augmentation( OvsdbTerminationPointAugmentation.class); if (ovsdbTerminationPointAugmentation.getName().equals(portName)) { @@ -1776,8 +1791,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { Thread.sleep(OVSDB_UPDATE_TIMEOUT); terminationPointNode = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, terminationPointIid); - terminationPoints = terminationPointNode.getTerminationPoint(); - for (TerminationPoint terminationPoint : terminationPoints) { + for (TerminationPoint terminationPoint : terminationPointNode.nonnullTerminationPoint().values()) { ovsdbTerminationPointAugmentation = terminationPoint.augmentation( OvsdbTerminationPointAugmentation.class); if (ovsdbTerminationPointAugmentation.getName().equals(portName)) { @@ -1815,8 +1829,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { Assert.assertNotNull(terminationPointNode); // READ - List terminationPoints = terminationPointNode.getTerminationPoint(); - for (TerminationPoint terminationPoint : terminationPoints) { + for (TerminationPoint terminationPoint : terminationPointNode.nonnullTerminationPoint().values()) { OvsdbTerminationPointAugmentation ovsdbTerminationPointAugmentation = terminationPoint.augmentation(OvsdbTerminationPointAugmentation.class); if (ovsdbTerminationPointAugmentation.getName().equals(portName)) { @@ -1846,8 +1859,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { Thread.sleep(OVSDB_UPDATE_TIMEOUT); terminationPointNode = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, terminationPointIid); - terminationPoints = terminationPointNode.getTerminationPoint(); - for (TerminationPoint terminationPoint : terminationPoints) { + for (TerminationPoint terminationPoint : terminationPointNode.nonnullTerminationPoint().values()) { OvsdbTerminationPointAugmentation ovsdbTerminationPointAugmentation = terminationPoint.augmentation(OvsdbTerminationPointAugmentation.class); if (ovsdbTerminationPointAugmentation.getName().equals(portName)) { @@ -1905,7 +1917,8 @@ public class SouthboundIT extends AbstractMdsalTestBase { Assert.assertNotNull(terminationPointNode); // READ - List terminationPoints = terminationPointNode.getTerminationPoint(); + Collection terminationPoints = + terminationPointNode.nonnullTerminationPoint().values(); for (TerminationPoint terminationPoint : terminationPoints) { OvsdbTerminationPointAugmentation ovsdbTerminationPointAugmentation = terminationPoint.augmentation(OvsdbTerminationPointAugmentation.class); @@ -1939,8 +1952,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { Thread.sleep(OVSDB_UPDATE_TIMEOUT); terminationPointNode = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, terminationPointIid); - terminationPoints = terminationPointNode.getTerminationPoint(); - for (TerminationPoint terminationPoint : terminationPoints) { + for (TerminationPoint terminationPoint : terminationPointNode.nonnullTerminationPoint().values()) { OvsdbTerminationPointAugmentation ovsdbTerminationPointAugmentation = terminationPoint.augmentation(OvsdbTerminationPointAugmentation.class); if (ovsdbTerminationPointAugmentation.getName().equals(portName)) { @@ -2023,7 +2035,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { Assert.assertNotNull("Expected to find topology: " + topologyPath, topology); Assert.assertNotNull("Expected to find some nodes" + topology.getNode()); LOG.info("expectedNodeId: {}, getNode: {}", expectedNodeId, topology.getNode()); - for (Node node : topology.getNode()) { + for (Node node : topology.nonnullNode().values()) { if (node.getNodeId().getValue().equals(expectedNodeId.getValue())) { foundNode = node; break; @@ -2041,21 +2053,21 @@ public class SouthboundIT extends AbstractMdsalTestBase { new BridgeOtherConfigsSouthboundHelper()); } - private interface SouthboundBridgeHelper { + private interface SouthboundBridgeHelper, T extends Identifiable> { void writeValues(OvsdbBridgeAugmentationBuilder builder, List values); - List readValues(OvsdbBridgeAugmentation augmentation); + Map readValues(OvsdbBridgeAugmentation augmentation); } - private void testCRUDBridge(String prefix, KeyValueBuilder builder, SouthboundBridgeHelper helper) - throws InterruptedException { + private , T extends Identifiable> void testCRUDBridge(String prefix, + KeyValueBuilder builder, SouthboundBridgeHelper helper) throws InterruptedException { ConnectionInfo connectionInfo = getConnectionInfo(addressStr, portNumber); // updateFromTestCases represent the original test case value. updateToTestCases represent the new value after // the update has been performed. - List> updateFromTestCases = generateKeyValueTestCases(builder, prefix + "From"); - List> updateToTestCases = generateKeyValueTestCases(builder, prefix + "To"); - for (SouthboundTestCase updateFromTestCase : updateFromTestCases) { - for (SouthboundTestCase updateToTestCase : updateToTestCases) { + List> updateFromTestCases = generateKeyValueTestCases(builder, prefix + "From"); + List> updateToTestCases = generateKeyValueTestCases(builder, prefix + "To"); + for (SouthboundTestCase updateFromTestCase : updateFromTestCases) { + for (SouthboundTestCase updateToTestCase : updateToTestCases) { String testBridgeName = String.format("%s_%s", prefix, updateToTestCase.name); // CREATE: Create the test bridge @@ -2081,10 +2093,11 @@ public class SouthboundIT extends AbstractMdsalTestBase { // READ: Read the test bridge and ensure changes are propagated to the CONFIGURATION data store, // then repeat for OPERATIONAL data store - List updateFromConfigurationExternalIds = helper.readValues(getBridge(connectionInfo, testBridgeName, - LogicalDatastoreType.CONFIGURATION)); + Map updateFromConfigurationExternalIds = helper.readValues(getBridge(connectionInfo, + testBridgeName, LogicalDatastoreType.CONFIGURATION)); assertExpectedExist(updateFromTestCase.expectedValues, updateFromConfigurationExternalIds); - List updateFromOperationalExternalIds = helper.readValues(getBridge(connectionInfo, testBridgeName)); + Map updateFromOperationalExternalIds = helper.readValues(getBridge(connectionInfo, + testBridgeName)); assertExpectedExist(updateFromTestCase.expectedValues, updateFromOperationalExternalIds); // UPDATE: update the values @@ -2103,11 +2116,11 @@ public class SouthboundIT extends AbstractMdsalTestBase { // READ: the test bridge and ensure changes are propagated to the CONFIGURATION data store, // then repeat for OPERATIONAL data store - List updateToConfigurationExternalIds = helper.readValues(getBridge(connectionInfo, testBridgeName, + Map updateToConfigurationExternalIds = helper.readValues(getBridge(connectionInfo, testBridgeName, LogicalDatastoreType.CONFIGURATION)); assertExpectedExist(updateToTestCase.expectedValues, updateToConfigurationExternalIds); assertExpectedExist(updateFromTestCase.expectedValues, updateToConfigurationExternalIds); - List updateToOperationalExternalIds = helper.readValues(getBridge(connectionInfo, testBridgeName)); + Map updateToOperationalExternalIds = helper.readValues(getBridge(connectionInfo, testBridgeName)); if (updateFromTestCase.expectedValues != null) { assertExpectedExist(updateToTestCase.expectedValues, updateToOperationalExternalIds); assertExpectedExist(updateFromTestCase.expectedValues, updateToOperationalExternalIds); @@ -2158,7 +2171,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { ConnectionInfo connectionInfo = getConnectionInfo(addressStr, portNumber); Uri queueUri = new Uri("QUEUE-A1"); - try (TestQueue testQueue = new TestQueue(connectionInfo, queueUri, new Short("25"), null, null)) { + try (TestQueue testQueue = new TestQueue(connectionInfo, queueUri, Short.valueOf("25"), null, null)) { OvsdbNodeAugmentation ovsdbNodeAugmentation = getOvsdbNode(connectionInfo, LogicalDatastoreType.OPERATIONAL); Queues operQueue = getQueue(queueUri, ovsdbNodeAugmentation); @@ -2170,38 +2183,40 @@ public class SouthboundIT extends AbstractMdsalTestBase { Assert.assertNull(operQueue); } - private static class SouthboundQueuesExternalIdsHelper implements SouthboundQueueHelper { + private static class SouthboundQueuesExternalIdsHelper + implements SouthboundQueueHelper { @Override public void writeValues(QueuesBuilder builder, List values) { builder.setQueuesExternalIds(values); } @Override - public List readValues(Queues queue) { + public Map readValues(Queues queue) { return queue.getQueuesExternalIds(); } } - private static class SouthboundQueuesOtherConfigHelper implements SouthboundQueueHelper { + private static class SouthboundQueuesOtherConfigHelper + implements SouthboundQueueHelper { @Override public void writeValues(QueuesBuilder builder, List values) { builder.setQueuesOtherConfig(values); } @Override - public List readValues(Queues queue) { + public Map readValues(Queues queue) { return queue.getQueuesOtherConfig(); } } - private interface SouthboundQueueHelper { + private interface SouthboundQueueHelper, T extends Identifiable> { void writeValues(QueuesBuilder builder, List values); - List readValues(Queues queue); + Map readValues(Queues queue); } - private Queues getQueue(Uri queueId, OvsdbNodeAugmentation node) { - for (Queues queue : node.getQueues()) { + private static Queues getQueue(Uri queueId, OvsdbNodeAugmentation node) { + for (Queues queue : node.nonnullQueues().values()) { if (queue.key().getQueueId().getValue().equals(queueId.getValue())) { return queue; } @@ -2209,38 +2224,40 @@ public class SouthboundIT extends AbstractMdsalTestBase { return null; } - private static class SouthboundQosExternalIdsHelper implements SouthboundQosHelper { + private static class SouthboundQosExternalIdsHelper + implements SouthboundQosHelper { @Override public void writeValues(QosEntriesBuilder builder, List values) { builder.setQosExternalIds(values); } @Override - public List readValues(QosEntries qos) { + public Map readValues(QosEntries qos) { return qos.getQosExternalIds(); } } - private static class SouthboundQosOtherConfigHelper implements SouthboundQosHelper { + private static class SouthboundQosOtherConfigHelper + implements SouthboundQosHelper { @Override public void writeValues(QosEntriesBuilder builder, List values) { builder.setQosOtherConfig(values); } @Override - public List readValues(QosEntries qos) { + public Map readValues(QosEntries qos) { return qos.getQosOtherConfig(); } } - private interface SouthboundQosHelper { + private interface SouthboundQosHelper, T extends Identifiable> { void writeValues(QosEntriesBuilder builder, List values); - List readValues(QosEntries qos); + Map readValues(QosEntries qos); } - private QosEntries getQos(Uri qosId, OvsdbNodeAugmentation node) { - for (QosEntries qos : node.getQosEntries()) { + private static QosEntries getQos(Uri qosId, OvsdbNodeAugmentation node) { + for (QosEntries qos : node.nonnullQosEntries().values()) { if (qos.key().getQosId().equals(qosId)) { return qos; } @@ -2248,24 +2265,24 @@ public class SouthboundIT extends AbstractMdsalTestBase { return null; } - private void testCRUDQueue( - KeyValueBuilder builder, String prefix, SouthboundQueueHelper helper) + private , T extends Identifiable> void testCRUDQueue( + KeyValueBuilder builder, String prefix, SouthboundQueueHelper helper) throws InterruptedException { ConnectionInfo connectionInfo = getConnectionInfo(addressStr, portNumber); // updateFromTestCases represent the original test case value. updateToTestCases represent the new value after // the update has been performed. - List> updateFromTestCases = generateKeyValueTestCases(builder, prefix + "From"); - List> updateToTestCases = generateKeyValueTestCases(builder, prefix + "To"); + List> updateFromTestCases = generateKeyValueTestCases(builder, prefix + "From"); + List> updateToTestCases = generateKeyValueTestCases(builder, prefix + "To"); - for (SouthboundTestCase updateFromTestCase : updateFromTestCases) { - for (SouthboundTestCase updateToTestCase : updateToTestCases) { + for (SouthboundTestCase updateFromTestCase : updateFromTestCases) { + for (SouthboundTestCase updateToTestCase : updateToTestCases) { String testQueueId = String.format("%s_%s", prefix, updateToTestCase.name); // CREATE: and update the test queue with starting values. try (TestQueue testQueue = new TestQueue(connectionInfo, new Uri(testQueueId), - new Short("45"), null, null)) { + Short.valueOf("45"), null, null)) { QueuesBuilder queuesBuilder = new QueuesBuilder(); queuesBuilder.setQueueId(new Uri(testQueueId)); InstanceIdentifier queueIid = SouthboundUtils.createInstanceIdentifier(connectionInfo) @@ -2290,9 +2307,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { Queues queueFromConfig = getQueue(new Uri(testQueueId), updateFromConfigurationOvsdbNodeAugmentation); if (queueFromConfig != null) { - List updateFromConfigurationValues = - helper.readValues(queueFromConfig); - assertExpectedExist(updateFromTestCase.expectedValues, updateFromConfigurationValues); + assertExpectedExist(updateFromTestCase.expectedValues, helper.readValues(queueFromConfig)); } queueOperationalListener.waitForUpdate(OVSDB_UPDATE_TIMEOUT); @@ -2300,9 +2315,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { LogicalDatastoreType.OPERATIONAL); Queues queueFromOper = getQueue(new Uri(testQueueId), updateFromOperationalOvsdbNodeAugmentation); if (queueFromOper != null) { - List updateFromOperationalValues = - helper.readValues(queueFromOper); - assertExpectedExist(updateFromTestCase.expectedValues, updateFromOperationalValues); + assertExpectedExist(updateFromTestCase.expectedValues, helper.readValues(queueFromOper)); } // UPDATE: update the values @@ -2319,9 +2332,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { LogicalDatastoreType.CONFIGURATION); Queues queueToConfig = getQueue(new Uri(testQueueId), updateToConfigurationOvsdbNodeAugmentation); if (queueToConfig != null) { - List updateToConfigurationValues = - helper.readValues(queueToConfig); - assertExpectedExist(updateToTestCase.expectedValues, updateToConfigurationValues); + assertExpectedExist(updateToTestCase.expectedValues, helper.readValues(queueToConfig)); } queueOperationalListener.waitForUpdate(OVSDB_UPDATE_TIMEOUT); @@ -2329,9 +2340,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { LogicalDatastoreType.OPERATIONAL); Queues queueToOper = getQueue(new Uri(testQueueId), updateToOperationalOvsdbNodeAugmentation); if (queueToOper != null) { - List updateToOperationalValues = - helper.readValues(queueToOper); - assertExpectedExist(updateToTestCase.expectedValues, updateToOperationalValues); + assertExpectedExist(updateToTestCase.expectedValues, helper.readValues(queueToOper)); } // DELETE handled by TestQueue @@ -2358,7 +2367,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { String testQueueId = "testQueueDscp"; // CREATE: and update the test queue with starting values. - try (TestQueue testQueue = new TestQueue(connectionInfo, new Uri(testQueueId), new Short("0"), null, null)) { + try (TestQueue testQueue = new TestQueue(connectionInfo, new Uri(testQueueId), (short) 0, null, null)) { for (Short dscp = 1; dscp < 64; dscp++) { QueuesBuilder queuesBuilder = new QueuesBuilder(); queuesBuilder.setQueueId(new Uri(testQueueId)); @@ -2390,19 +2399,19 @@ public class SouthboundIT extends AbstractMdsalTestBase { } - private void testCRUDQos( - KeyValueBuilder builder, String prefix, SouthboundQosHelper helper) + private , T extends Identifiable> void testCRUDQos( + KeyValueBuilder builder, String prefix, SouthboundQosHelper helper) throws InterruptedException { ConnectionInfo connectionInfo = getConnectionInfo(addressStr, portNumber); // updateFromTestCases represent the original test case value. updateToTestCases represent the new value after // the update has been performed. - List> updateFromTestCases = generateKeyValueTestCases(builder, prefix + "From"); - List> updateToTestCases = generateKeyValueTestCases(builder, prefix + "To"); + List> updateFromTestCases = generateKeyValueTestCases(builder, prefix + "From"); + List> updateToTestCases = generateKeyValueTestCases(builder, prefix + "To"); - for (SouthboundTestCase updateFromTestCase : updateFromTestCases) { - for (SouthboundTestCase updateToTestCase : updateToTestCases) { + for (SouthboundTestCase updateFromTestCase : updateFromTestCases) { + for (SouthboundTestCase updateToTestCase : updateToTestCases) { String testQosId = String.format("%s_%s", prefix, updateToTestCase.name); // CREATE: and update the test qos with starting values. @@ -2431,9 +2440,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { LogicalDatastoreType.CONFIGURATION); QosEntries qosFromConfig = getQos(new Uri(testQosId), updateFromConfigurationOvsdbNodeAugmentation); if (qosFromConfig != null) { - List updateFromConfigurationValues = - helper.readValues(qosFromConfig); - assertExpectedExist(updateFromTestCase.expectedValues, updateFromConfigurationValues); + assertExpectedExist(updateFromTestCase.expectedValues, helper.readValues(qosFromConfig)); } qosOperationalListener.waitForUpdate(OVSDB_UPDATE_TIMEOUT); @@ -2441,9 +2448,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { LogicalDatastoreType.OPERATIONAL); QosEntries qosFromOper = getQos(new Uri(testQosId), updateFromOperationalOvsdbNodeAugmentation); if (qosFromOper != null) { - List updateFromOperationalValues = - helper.readValues(qosFromOper); - assertExpectedExist(updateFromTestCase.expectedValues, updateFromOperationalValues); + assertExpectedExist(updateFromTestCase.expectedValues, helper.readValues(qosFromOper)); } // UPDATE: update the values @@ -2460,9 +2465,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { LogicalDatastoreType.CONFIGURATION); QosEntries qosToConfig = getQos(new Uri(testQosId), updateToConfigurationOvsdbNodeAugmentation); if (qosToConfig != null) { - List updateToConfigurationValues = - helper.readValues(qosToConfig); - assertExpectedExist(updateToTestCase.expectedValues, updateToConfigurationValues); + assertExpectedExist(updateToTestCase.expectedValues, helper.readValues(qosToConfig)); } qosOperationalListener.waitForUpdate(OVSDB_UPDATE_TIMEOUT); @@ -2470,9 +2473,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { LogicalDatastoreType.OPERATIONAL); QosEntries qosToOper = getQos(new Uri(testQosId), updateToOperationalOvsdbNodeAugmentation); if (qosToOper != null) { - List updateToOperationalValues = - helper.readValues(qosToOper); - assertExpectedExist(updateToTestCase.expectedValues, updateToOperationalValues); + assertExpectedExist(updateToTestCase.expectedValues, helper.readValues(qosToOper)); } // DELETE handled by TestQueue @@ -2501,8 +2502,10 @@ public class SouthboundIT extends AbstractMdsalTestBase { // CREATE: and update the test queue with starting values. try (TestQos testQos = new TestQos(connectionInfo, new Uri(testQosId), SouthboundMapper.createQosType(SouthboundConstants.QOS_LINUX_HTB), null, null); - TestQueue testQueue1 = new TestQueue(connectionInfo, new Uri("queue1"), new Short("12"), null, null); - TestQueue testQueue2 = new TestQueue(connectionInfo, new Uri("queue2"), new Short("35"), null, null)) { + TestQueue testQueue1 = new TestQueue(connectionInfo, new Uri("queue1"), Short.valueOf("12"), null, + null); + TestQueue testQueue2 = new TestQueue(connectionInfo, new Uri("queue2"), Short.valueOf("35"), null, + null)) { QosEntriesBuilder qosBuilder = new QosEntriesBuilder(); qosBuilder.setQosId(new Uri(testQosId)); InstanceIdentifier qosIid = SouthboundUtils.createInstanceIdentifier(connectionInfo) @@ -2530,8 +2533,8 @@ public class SouthboundIT extends AbstractMdsalTestBase { OvsdbQueueRef queue2Ref = new OvsdbQueueRef(queue2Iid); List queueList = new ArrayList<>(); - queueList.add(new QueueListBuilder().setQueueNumber(new Long("1")).setQueueRef(queue1Ref).build()); - queueList.add(new QueueListBuilder().setQueueNumber(new Long("2")).setQueueRef(queue2Ref).build()); + queueList.add(new QueueListBuilder().setQueueNumber(Uint32.ONE).setQueueRef(queue1Ref).build()); + queueList.add(new QueueListBuilder().setQueueNumber(Uint32.TWO).setQueueRef(queue2Ref).build()); qosBuilder.setQueueList(queueList); @@ -2545,7 +2548,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { LogicalDatastoreType.OPERATIONAL); QosEntries operQos = getQos(new Uri(testQosId), ovsdbNodeAugmentation); Assert.assertNotNull(operQos); - List operQueueList = operQos.getQueueList(); + Map operQueueList = operQos.getQueueList(); Assert.assertNotNull(operQueueList); for (QueueList queueEntry : queueList) { Assert.assertTrue(isQueueInList(operQueueList, queueEntry)); @@ -2553,7 +2556,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { // DELETE one queue from queue list and check that one remains KeyedInstanceIdentifier qosQueueIid = qosIid - .child(QueueList.class, new QueueListKey(new Long("1"))); + .child(QueueList.class, new QueueListKey(Uint32.ONE)); Assert.assertTrue(mdsalUtils.delete(LogicalDatastoreType.CONFIGURATION, qosQueueIid)); qosOperationalListener.waitForUpdate(OVSDB_UPDATE_TIMEOUT); @@ -2578,7 +2581,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { // DELETE queue list and check that list is empty qosQueueIid = qosIid - .child(QueueList.class, new QueueListKey(new Long("1"))); + .child(QueueList.class, new QueueListKey(Uint32.ONE)); Assert.assertTrue(mdsalUtils.delete(LogicalDatastoreType.CONFIGURATION, qosQueueIid)); qosOperationalListener.waitForUpdate(OVSDB_UPDATE_TIMEOUT); @@ -2594,8 +2597,8 @@ public class SouthboundIT extends AbstractMdsalTestBase { - private Boolean isQueueInList(List queueList, QueueList queue) { - for (QueueList queueEntry : queueList) { + private static Boolean isQueueInList(Map queueList, QueueList queue) { + for (QueueList queueEntry : queueList.values()) { if (queueEntry.getQueueNumber().equals(queue.getQueueNumber()) && queueEntry.getQueueRef().equals(queue.getQueueRef())) { return true; @@ -2616,10 +2619,10 @@ public class SouthboundIT extends AbstractMdsalTestBase { * * @param The type of data used for the test case. */ - private static final class SouthboundTestCase { + private static final class SouthboundTestCase, T extends Identifiable> { private final String name; private final List inputValues; - private final List expectedValues; + private final Map expectedValues; /** * Creates an instance of a southbound test case. @@ -2631,7 +2634,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { SouthboundTestCase(final String name, final List inputValues, final List expectedValues) { this.name = name; this.inputValues = inputValues; - this.expectedValues = expectedValues; + this.expectedValues = Maps.uniqueIndex(expectedValues, Identifiable::key); } } @@ -2640,7 +2643,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { * * @param The type of data used for the test case. */ - private static final class SouthboundTestCaseBuilder { + private static final class SouthboundTestCaseBuilder, T extends Identifiable> { private String name; private List inputValues; private List expectedValues; @@ -2659,7 +2662,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { * @param value The test case's name. * @return The builder. */ - public SouthboundTestCaseBuilder name(final String value) { + public SouthboundTestCaseBuilder name(final String value) { this.name = value; return this; } @@ -2671,7 +2674,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { * @return The builder. */ @SafeVarargs - public final SouthboundTestCaseBuilder input(final T... values) { + public final SouthboundTestCaseBuilder input(final T... values) { this.inputValues = Lists.newArrayList(values); return this; } @@ -2681,7 +2684,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { * * @return The builder. */ - public SouthboundTestCaseBuilder expectInputAsOutput() { + public SouthboundTestCaseBuilder expectInputAsOutput() { this.expectedValues = this.inputValues; return this; } @@ -2691,7 +2694,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { * * @return The builder. */ - public SouthboundTestCaseBuilder expectNoOutput() { + public SouthboundTestCaseBuilder expectNoOutput() { this.expectedValues = null; return this; } @@ -2701,7 +2704,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { * * @return The test case. */ - public SouthboundTestCase build() { + public SouthboundTestCase build() { return new SouthboundTestCase<>(name, inputValues, expectedValues); } } @@ -3003,9 +3006,9 @@ public class SouthboundIT extends AbstractMdsalTestBase { * Generates the test cases involved in testing key-value-based data. See inline comments for descriptions of * the particular cases considered. */ - private static List> generateKeyValueTestCases( - KeyValueBuilder builder, String testName) { - List> testCases = new ArrayList<>(); + private static , T extends Identifiable> List> + generateKeyValueTestCases(KeyValueBuilder builder, String testName) { + List> testCases = new ArrayList<>(); final String goodKey = "GoodKey"; final String goodValue = "GoodValue"; @@ -3019,7 +3022,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { // Description: Create a termination point with one value // Expected: A port is created with the single value specified below final String testOneName = "TestOne" + testName; - testCases.add(new SouthboundTestCaseBuilder() + testCases.add(new SouthboundTestCaseBuilder() .name(testOneName) .input(builder.build(testOneName, idKey, idValue)) .expectInputAsOutput() @@ -3031,7 +3034,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { // Description: Create a termination point with multiple (five) values // Expected: A port is created with the five values specified below final String testFiveName = "TestFive" + testName; - testCases.add(new SouthboundTestCaseBuilder() + testCases.add(new SouthboundTestCaseBuilder() .name(testFiveName) .input( builder.build(testFiveName, idKey, idValue), @@ -3055,7 +3058,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { // UNSPECIFIED) // Expected: A port is created without any values final String testOneGoodOneMalformedValueName = "TestOneGoodOneMalformedValue" + testName; - testCases.add(new SouthboundTestCaseBuilder() + testCases.add(new SouthboundTestCaseBuilder() .name(testOneGoodOneMalformedValueName) .input( builder.build(testOneGoodOneMalformedValueName, goodKey, goodValue), @@ -3070,20 +3073,21 @@ public class SouthboundIT extends AbstractMdsalTestBase { return testCases; } - private static class PortExternalIdsSouthboundHelper implements SouthboundTerminationPointHelper { + private static class PortExternalIdsSouthboundHelper + implements SouthboundTerminationPointHelper { @Override public void writeValues(OvsdbTerminationPointAugmentationBuilder builder, List values) { builder.setPortExternalIds(values); } @Override - public List readValues(OvsdbTerminationPointAugmentation augmentation) { + public Map readValues(OvsdbTerminationPointAugmentation augmentation) { return augmentation.getPortExternalIds(); } } - private static class InterfaceExternalIdsSouthboundHelper implements - SouthboundTerminationPointHelper { + private static class InterfaceExternalIdsSouthboundHelper + implements SouthboundTerminationPointHelper { @Override public void writeValues( OvsdbTerminationPointAugmentationBuilder builder, List values) { @@ -3091,12 +3095,14 @@ public class SouthboundIT extends AbstractMdsalTestBase { } @Override - public List readValues(OvsdbTerminationPointAugmentation augmentation) { + public Map readValues( + OvsdbTerminationPointAugmentation augmentation) { return augmentation.getInterfaceExternalIds(); } } - private static class InterfaceLldpSouthboundHelper implements SouthboundTerminationPointHelper { + private static class InterfaceLldpSouthboundHelper + implements SouthboundTerminationPointHelper { @Override public void writeValues( OvsdbTerminationPointAugmentationBuilder builder, List values) { @@ -3104,12 +3110,12 @@ public class SouthboundIT extends AbstractMdsalTestBase { } @Override - public List readValues(OvsdbTerminationPointAugmentation augmentation) { + public Map readValues(OvsdbTerminationPointAugmentation augmentation) { return augmentation.getInterfaceLldp(); } } - private static class OptionsSouthboundHelper implements SouthboundTerminationPointHelper { + private static class OptionsSouthboundHelper implements SouthboundTerminationPointHelper { @Override public void writeValues( OvsdbTerminationPointAugmentationBuilder builder, List values) { @@ -3117,13 +3123,13 @@ public class SouthboundIT extends AbstractMdsalTestBase { } @Override - public List readValues(OvsdbTerminationPointAugmentation augmentation) { + public Map readValues(OvsdbTerminationPointAugmentation augmentation) { return augmentation.getOptions(); } } - private static class InterfaceOtherConfigsSouthboundHelper implements - SouthboundTerminationPointHelper { + private static class InterfaceOtherConfigsSouthboundHelper + implements SouthboundTerminationPointHelper { @Override public void writeValues( OvsdbTerminationPointAugmentationBuilder builder, List values) { @@ -3131,13 +3137,14 @@ public class SouthboundIT extends AbstractMdsalTestBase { } @Override - public List readValues(OvsdbTerminationPointAugmentation augmentation) { + public Map readValues( + OvsdbTerminationPointAugmentation augmentation) { return augmentation.getInterfaceOtherConfigs(); } } private static class PortOtherConfigsSouthboundHelper implements - SouthboundTerminationPointHelper { + SouthboundTerminationPointHelper { @Override public void writeValues( OvsdbTerminationPointAugmentationBuilder builder, List values) { @@ -3145,12 +3152,13 @@ public class SouthboundIT extends AbstractMdsalTestBase { } @Override - public List readValues(OvsdbTerminationPointAugmentation augmentation) { + public Map readValues(OvsdbTerminationPointAugmentation augmentation) { return augmentation.getPortOtherConfigs(); } } - private static class BridgeExternalIdsSouthboundHelper implements SouthboundBridgeHelper { + private static class BridgeExternalIdsSouthboundHelper + implements SouthboundBridgeHelper { @Override public void writeValues( OvsdbBridgeAugmentationBuilder builder, List values) { @@ -3158,12 +3166,13 @@ public class SouthboundIT extends AbstractMdsalTestBase { } @Override - public List readValues(OvsdbBridgeAugmentation augmentation) { + public Map readValues(OvsdbBridgeAugmentation augmentation) { return augmentation.getBridgeExternalIds(); } } - private static class BridgeOtherConfigsSouthboundHelper implements SouthboundBridgeHelper { + private static class BridgeOtherConfigsSouthboundHelper + implements SouthboundBridgeHelper { @Override public void writeValues( OvsdbBridgeAugmentationBuilder builder, List values) { @@ -3171,7 +3180,7 @@ public class SouthboundIT extends AbstractMdsalTestBase { } @Override - public List readValues(OvsdbBridgeAugmentation augmentation) { + public Map readValues(OvsdbBridgeAugmentation augmentation) { return augmentation.getBridgeOtherConfigs(); } } diff --git a/southbound/southbound-karaf/pom.xml b/southbound/southbound-karaf/pom.xml index 4966e3a2b..a6eded0b3 100644 --- a/southbound/southbound-karaf/pom.xml +++ b/southbound/southbound-karaf/pom.xml @@ -9,7 +9,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.odlparent karaf4-parent - 6.0.4 + 7.0.1 4.0.0 diff --git a/utils/config/src/main/java/org/opendaylight/ovsdb/utils/config/ConfigProperties.java b/utils/config/src/main/java/org/opendaylight/ovsdb/utils/config/ConfigProperties.java index 6cef8f575..e890ba4c1 100644 --- a/utils/config/src/main/java/org/opendaylight/ovsdb/utils/config/ConfigProperties.java +++ b/utils/config/src/main/java/org/opendaylight/ovsdb/utils/config/ConfigProperties.java @@ -5,12 +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.utils.config; import java.util.HashMap; import java.util.Map; - import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.osgi.framework.FrameworkUtil; diff --git a/utils/mdsal-utils/pom.xml b/utils/mdsal-utils/pom.xml index de1f02510..b45ec5a8b 100644 --- a/utils/mdsal-utils/pom.xml +++ b/utils/mdsal-utils/pom.xml @@ -28,6 +28,12 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.mdsal mdsal-binding-api + + javax.inject + javax.inject + provided + true + @@ -38,7 +44,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.mdsal - mdsal-binding-dom-adapter + mdsal-binding-test-utils test @@ -47,12 +53,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html test-jar test - - javax.inject - javax.inject - 1 - compile - diff --git a/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/ControllerMdsalUtils.java b/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/ControllerMdsalUtils.java index a475956c1..b57b45c92 100644 --- a/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/ControllerMdsalUtils.java +++ b/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/ControllerMdsalUtils.java @@ -73,7 +73,7 @@ public class ControllerMdsalUtils { final LogicalDatastoreType logicalDatastoreType, final InstanceIdentifier path, D data) { boolean result = false; final WriteTransaction transaction = databroker.newWriteOnlyTransaction(); - transaction.merge(logicalDatastoreType, path, data, true); + transaction.mergeParentStructureMerge(logicalDatastoreType, path, data); FluentFuture future = transaction.commit(); try { future.get(); @@ -96,7 +96,7 @@ public class ControllerMdsalUtils { final LogicalDatastoreType logicalDatastoreType, final InstanceIdentifier path, D data) { boolean result = false; final WriteTransaction transaction = databroker.newWriteOnlyTransaction(); - transaction.put(logicalDatastoreType, path, data, true); + transaction.mergeParentStructurePut(logicalDatastoreType, path, data); FluentFuture future = transaction.commit(); try { future.get(); diff --git a/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/ControllerMdsalUtilsAsync.java b/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/ControllerMdsalUtilsAsync.java index 8ddded6db..624ece677 100644 --- a/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/ControllerMdsalUtilsAsync.java +++ b/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/ControllerMdsalUtilsAsync.java @@ -5,10 +5,8 @@ * 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.utils.mdsal.utils; -import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.FluentFuture; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.MoreExecutors; @@ -46,7 +44,7 @@ public class ControllerMdsalUtilsAsync { * {@link LogicalDatastoreType} which should be modified * @param path * {@link InstanceIdentifier} to read from - * @return The {@link CheckedFuture} object to which you can assign a + * @return The {@link FluentFuture} object to which you can assign a * callback */ public FluentFuture delete( @@ -83,7 +81,7 @@ public class ControllerMdsalUtilsAsync { * {@link InstanceIdentifier} for path to read * @param * The data object type - * @return The {@link CheckedFuture} object to which you can assign a + * @return The {@link FluentFuture} object to which you can assign a * callback */ public FluentFuture put( @@ -91,7 +89,7 @@ public class ControllerMdsalUtilsAsync { final InstanceIdentifier path, final D data) { final WriteTransaction transaction = databroker.newWriteOnlyTransaction(); - transaction.put(logicalDatastoreType, path, data, true); + transaction.mergeParentStructurePut(logicalDatastoreType, path, data); return transaction.commit(); } @@ -126,16 +124,21 @@ public class ControllerMdsalUtilsAsync { * The data object type * @param withParent * Whether or not to create missing parent. - * @return The {@link CheckedFuture} object to which you can assign a + * @return The {@link FluentFuture} object to which you can assign a * callback */ + // FIXME: eliminate the boolean flag here to separate out the distinct code paths public FluentFuture merge( final LogicalDatastoreType logicalDatastoreType, final InstanceIdentifier path, final D data, final boolean withParent) { final WriteTransaction transaction = databroker.newWriteOnlyTransaction(); - transaction.merge(logicalDatastoreType, path, data, withParent); + if (withParent) { + transaction.mergeParentStructureMerge(logicalDatastoreType, path, data); + } else { + transaction.merge(logicalDatastoreType, path, data); + } return transaction.commit(); } @@ -153,6 +156,7 @@ public class ControllerMdsalUtilsAsync { * @param withParent * Whether or not to create missing parent. */ + // FIXME: eliminate the boolean flag here to separate out the distinct code paths public void merge( final LogicalDatastoreType logicalDatastoreType, final InstanceIdentifier path, @@ -172,7 +176,7 @@ public class ControllerMdsalUtilsAsync { * {@link InstanceIdentifier} for path to read * @param * The data object type - * @return The {@link CheckedFuture} object to which you can assign a + * @return The {@link FluentFuture} object to which you can assign a * callback */ public FluentFuture> read( @@ -196,7 +200,7 @@ public class ControllerMdsalUtilsAsync { } /** - * Assign a default callback to a {@link CheckedFuture}. It will either log + * Assign a default callback to a {@link FluentFuture}. It will either log * a message at DEBUG level if the transaction succeed, or will log at ERROR * level and throw an {@link IllegalStateException} if the transaction * failed. diff --git a/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalUtils.java b/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalUtils.java index b0569ef91..6c96fd899 100644 --- a/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalUtils.java +++ b/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalUtils.java @@ -71,7 +71,7 @@ public class MdsalUtils { final LogicalDatastoreType logicalDatastoreType, final InstanceIdentifier path, D data) { boolean result = false; final WriteTransaction transaction = databroker.newWriteOnlyTransaction(); - transaction.merge(logicalDatastoreType, path, data, true); + transaction.mergeParentStructureMerge(logicalDatastoreType, path, data); FluentFuture future = transaction.commit(); try { future.get(); @@ -94,7 +94,7 @@ public class MdsalUtils { final LogicalDatastoreType logicalDatastoreType, final InstanceIdentifier path, D data) { boolean result = false; final WriteTransaction transaction = databroker.newWriteOnlyTransaction(); - transaction.put(logicalDatastoreType, path, data, true); + transaction.mergeParentStructurePut(logicalDatastoreType, path, data); FluentFuture future = transaction.commit(); try { future.get(); diff --git a/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalUtilsAsync.java b/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalUtilsAsync.java index 176e5d228..91383f1c5 100644 --- a/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalUtilsAsync.java +++ b/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalUtilsAsync.java @@ -8,7 +8,6 @@ package org.opendaylight.ovsdb.utils.mdsal.utils; -import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.FluentFuture; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.MoreExecutors; @@ -89,7 +88,7 @@ public class MdsalUtilsAsync { final InstanceIdentifier path, final D data) { final WriteTransaction transaction = databroker.newWriteOnlyTransaction(); - transaction.put(logicalDatastoreType, path, data, true); + transaction.mergeParentStructurePut(logicalDatastoreType, path, data); return transaction.commit(); } @@ -127,13 +126,18 @@ public class MdsalUtilsAsync { * @return The {@link FluentFuture} object to which you can assign a * callback */ + // FIXME: eliminate the boolean flag here to separate out the distinct code paths public FluentFuture merge( final LogicalDatastoreType logicalDatastoreType, final InstanceIdentifier path, final D data, final boolean withParent) { final WriteTransaction transaction = databroker.newWriteOnlyTransaction(); - transaction.merge(logicalDatastoreType, path, data, withParent); + if (withParent) { + transaction.mergeParentStructureMerge(logicalDatastoreType, path, data); + } else { + transaction.merge(logicalDatastoreType, path, data); + } return transaction.commit(); } @@ -151,6 +155,7 @@ public class MdsalUtilsAsync { * @param withParent * Whether or not to create missing parent. */ + // FIXME: eliminate the boolean flag here to separate out the distinct code paths public void merge( final LogicalDatastoreType logicalDatastoreType, final InstanceIdentifier path, @@ -194,7 +199,7 @@ public class MdsalUtilsAsync { } /** - * Assign a default callback to a {@link CheckedFuture}. It will either log + * Assign a default callback to a {@link FluentFuture}. It will either log * a message at DEBUG level if the transaction succeed, or will log at ERROR * level and throw an {@link IllegalStateException} if the transaction * failed. diff --git a/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/Scheduler.java b/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/Scheduler.java index 629942d7e..b83238813 100644 --- a/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/Scheduler.java +++ b/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/Scheduler.java @@ -8,7 +8,6 @@ package org.opendaylight.ovsdb.utils.mdsal.utils; import com.google.common.util.concurrent.ThreadFactoryBuilder; - import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ThreadFactory; diff --git a/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/ShardStatusMonitor.java b/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/ShardStatusMonitor.java index 4a2842a97..a86b80024 100644 --- a/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/ShardStatusMonitor.java +++ b/utils/mdsal-utils/src/main/java/org/opendaylight/ovsdb/utils/mdsal/utils/ShardStatusMonitor.java @@ -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.utils.mdsal.utils; import java.lang.management.ManagementFactory; @@ -13,14 +12,12 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; - import javax.management.InstanceNotFoundException; import javax.management.MBeanException; import javax.management.MBeanServer; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import javax.management.ReflectionException; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -138,4 +135,4 @@ public final class ShardStatusMonitor { return listOfShards; } -} \ No newline at end of file +} diff --git a/utils/mdsal-utils/src/test/java/org/opendaylight/ovsdb/utils/mdsal/utils/ControllerMdsalUtilsTest.java b/utils/mdsal-utils/src/test/java/org/opendaylight/ovsdb/utils/mdsal/utils/ControllerMdsalUtilsTest.java index 33cce60d0..d9d58a9f4 100644 --- a/utils/mdsal-utils/src/test/java/org/opendaylight/ovsdb/utils/mdsal/utils/ControllerMdsalUtilsTest.java +++ b/utils/mdsal-utils/src/test/java/org/opendaylight/ovsdb/utils/mdsal/utils/ControllerMdsalUtilsTest.java @@ -10,7 +10,6 @@ package org.opendaylight.ovsdb.utils.mdsal.utils; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -71,8 +70,8 @@ public class ControllerMdsalUtilsTest { boolean result = mdsalUtils.merge(LogicalDatastoreType.CONFIGURATION, mock(InstanceIdentifier.class), mock(DataObject.class)); - verify(writeTransaction, times(1)).merge(any(LogicalDatastoreType.class), - any(InstanceIdentifier.class), any(DataObject.class), anyBoolean()); + verify(writeTransaction, times(1)).mergeParentStructureMerge(any(LogicalDatastoreType.class), + any(InstanceIdentifier.class), any(DataObject.class)); verify(writeTransaction, times(1)).commit(); assertTrue("Error, the merge transaction failed", result); @@ -88,8 +87,8 @@ public class ControllerMdsalUtilsTest { boolean result = mdsalUtils.put(LogicalDatastoreType.CONFIGURATION, mock(InstanceIdentifier.class), mock(DataObject.class)); - verify(writeTransaction, times(1)).put(any(LogicalDatastoreType.class), - any(InstanceIdentifier.class), any(DataObject.class), anyBoolean()); + verify(writeTransaction, times(1)).mergeParentStructurePut(any(LogicalDatastoreType.class), + any(InstanceIdentifier.class), any(DataObject.class)); verify(writeTransaction, times(1)).commit(); assertTrue("Error, the put transaction failed", result); diff --git a/utils/mdsal-utils/src/test/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalUtilsTest.java b/utils/mdsal-utils/src/test/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalUtilsTest.java index 0d253ebe4..644f92475 100644 --- a/utils/mdsal-utils/src/test/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalUtilsTest.java +++ b/utils/mdsal-utils/src/test/java/org/opendaylight/ovsdb/utils/mdsal/utils/MdsalUtilsTest.java @@ -10,7 +10,6 @@ package org.opendaylight.ovsdb.utils.mdsal.utils; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; @@ -66,8 +65,8 @@ public class MdsalUtilsTest { boolean result = mdsalUtils.merge(LogicalDatastoreType.CONFIGURATION, mock(InstanceIdentifier.class), mock(DataObject.class)); - verify(writeTransaction, times(1)).merge(any(LogicalDatastoreType.class), - any(InstanceIdentifier.class), any(DataObject.class), anyBoolean()); + verify(writeTransaction, times(1)).mergeParentStructureMerge(any(LogicalDatastoreType.class), + any(InstanceIdentifier.class), any(DataObject.class)); verify(writeTransaction, times(1)).commit(); assertTrue("Error, the merge transaction failed", result); @@ -82,8 +81,8 @@ public class MdsalUtilsTest { boolean result = mdsalUtils.put(LogicalDatastoreType.CONFIGURATION, mock(InstanceIdentifier.class), mock(DataObject.class)); - verify(writeTransaction, times(1)).put(any(LogicalDatastoreType.class), - any(InstanceIdentifier.class), any(DataObject.class), anyBoolean()); + verify(writeTransaction, times(1)).mergeParentStructurePut(any(LogicalDatastoreType.class), + any(InstanceIdentifier.class), any(DataObject.class)); verify(writeTransaction, times(1)).commit(); assertTrue("Error, the put transaction failed", result); diff --git a/utils/odl-ovsdb-utils/pom.xml b/utils/odl-ovsdb-utils/pom.xml index 4a2c3b336..a563cddae 100644 --- a/utils/odl-ovsdb-utils/pom.xml +++ b/utils/odl-ovsdb-utils/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent single-feature-parent - 6.0.4 + 7.0.1 @@ -24,19 +24,26 @@ and is available at http://www.eclipse.org/legal/epl-v10.html build failure. Please do not modify this unless you have a good reason. --> ODL :: ovsdb :: ${project.artifactId} - + + + org.opendaylight.controller + odl-mdsal-broker + xml + features + + org.opendaylight.ovsdb odl-ovsdb-southbound-api @@ -60,12 +67,5 @@ and is available at http://www.eclipse.org/legal/epl-v10.html utils.southbound-utils ${project.version} - - diff --git a/utils/ovsdb-it-utils/pom.xml b/utils/ovsdb-it-utils/pom.xml index a54bd6f68..a192f91b5 100644 --- a/utils/ovsdb-it-utils/pom.xml +++ b/utils/ovsdb-it-utils/pom.xml @@ -83,7 +83,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html javax.inject javax.inject - 1 compile diff --git a/utils/ovsdb-it-utils/src/main/java/org/opendaylight/ovsdb/utils/ovsdb/it/utils/OvsdbItUtils.java b/utils/ovsdb-it-utils/src/main/java/org/opendaylight/ovsdb/utils/ovsdb/it/utils/OvsdbItUtils.java index ee21cb5f8..1b36ff49e 100644 --- a/utils/ovsdb-it-utils/src/main/java/org/opendaylight/ovsdb/utils/ovsdb/it/utils/OvsdbItUtils.java +++ b/utils/ovsdb-it-utils/src/main/java/org/opendaylight/ovsdb/utils/ovsdb/it/utils/OvsdbItUtils.java @@ -74,7 +74,7 @@ public class OvsdbItUtils { OvsdbBridgeAugmentation bridge = southboundUtils.getBridge(connectionInfo, "br-int"); if (bridge != null && bridge.getControllerEntry() != null) { - controllerEntry = bridge.getControllerEntry().iterator().next(); + controllerEntry = bridge.getControllerEntry().values().iterator().next(); assertEquals(controllerTarget, controllerEntry.getTarget().getValue()); if (controllerEntry.isIsConnected()) { LOG.info("isControllerConnected exit: true {}", controllerTarget); diff --git a/utils/pom.xml b/utils/pom.xml index 6a6923564..9baa680ce 100644 --- a/utils/pom.xml +++ b/utils/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.odlparent odlparent-lite - 6.0.4 + 7.0.1 diff --git a/utils/southbound-utils/src/main/java/org/opendaylight/ovsdb/utils/southbound/utils/SouthboundUtils.java b/utils/southbound-utils/src/main/java/org/opendaylight/ovsdb/utils/southbound/utils/SouthboundUtils.java index 8460593b4..fff3561ef 100644 --- a/utils/southbound-utils/src/main/java/org/opendaylight/ovsdb/utils/southbound/utils/SouthboundUtils.java +++ b/utils/southbound-utils/src/main/java/org/opendaylight/ovsdb/utils/southbound/utils/SouthboundUtils.java @@ -80,14 +80,19 @@ 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.BridgeOtherConfigsBuilder; 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.ControllerEntryBuilder; +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.bridge.attributes.ProtocolEntry; 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.ConnectionInfo; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfoBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.InterfaceTypeEntry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.InterfaceTypeEntryKey; 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.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.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.OpenvswitchOtherConfigsKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceExternalIds; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceExternalIdsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceExternalIdsKey; @@ -197,11 +202,13 @@ public class SouthboundUtils { private static final String DISABLE_IN_BAND = "disable-in-band"; private static final String PATCH_PORT_TYPE = "patch"; // External ID key used for mapping between an OVSDB port and an interface name - private static final String EXTERNAL_INTERFACE_ID_KEY = "iface-id"; + private static final InterfaceExternalIdsKey EXTERNAL_INTERFACE_ID_KEY = new InterfaceExternalIdsKey("iface-id"); private static final String CREATED_BY = "created_by"; private static final String ODL = "odl"; private static final String FORMAT = "(\\d+)\\.(\\d+)\\.(\\d+)"; private static final Pattern PATTERN = Pattern.compile(FORMAT); + // DPDK interface type + private static final InterfaceTypeEntryKey DPDK_IFACE_KEY = new InterfaceTypeEntryKey(InterfaceTypeDpdk.class); private final UtilsProvider provider; @@ -763,12 +770,12 @@ public class SouthboundUtils { OvsdbBridgeAugmentation bridgeAug = extractBridgeAugmentation(bridgeNode); //Only add controller entries that do not already exist on this bridge - List existingControllerEntries = bridgeAug.getControllerEntry(); + Map existingControllerEntries = bridgeAug.getControllerEntry(); List newControllerEntries = new ArrayList<>(); if (existingControllerEntries != null) { NEW_ENTRY_LOOP: for (ControllerEntry newEntry : createControllerEntries(controllers, maxBackoff, inactivityProbe)) { - for (ControllerEntry existingEntry : existingControllerEntries) { + for (ControllerEntry existingEntry : existingControllerEntries.values()) { if (newEntry.getTarget().equals(existingEntry.getTarget())) { continue NEW_ENTRY_LOOP; } @@ -950,9 +957,9 @@ public class SouthboundUtils { // Check if ovsdb node has manager entries OvsdbNodeAugmentation ovsdbNodeAugmentation = extractOvsdbNode(node); if (ovsdbNodeAugmentation != null) { - List managerEntries = ovsdbNodeAugmentation.getManagerEntry(); + Map managerEntries = ovsdbNodeAugmentation.getManagerEntry(); if (managerEntries != null && !managerEntries.isEmpty()) { - for (ManagerEntry managerEntry : managerEntries) { + for (ManagerEntry managerEntry : managerEntries.values()) { if (managerEntry == null || managerEntry.getTarget() == null) { continue; } @@ -1060,9 +1067,9 @@ public class SouthboundUtils { public boolean isBridgeOnOvsdbNode(Node ovsdbNode, String bridgeName) { OvsdbNodeAugmentation ovsdbNodeAugmentation = extractNodeAugmentation(ovsdbNode); if (ovsdbNodeAugmentation != null) { - List managedNodes = ovsdbNodeAugmentation.getManagedNodeEntry(); + Map managedNodes = ovsdbNodeAugmentation.getManagedNodeEntry(); if (managedNodes != null) { - for (ManagedNodeEntry managedNode : managedNodes) { + for (ManagedNodeEntry managedNode : managedNodes.values()) { if (matchesBridgeName(managedNode, bridgeName)) { return true; } @@ -1118,20 +1125,16 @@ public class SouthboundUtils { } public boolean isOvsdbNodeDpdk(Node ovsdbNode) { - boolean found = false; OvsdbNodeAugmentation ovsdbNodeAugmentation = extractNodeAugmentation(ovsdbNode); if (ovsdbNodeAugmentation != null) { - List ifTypes = ovsdbNodeAugmentation.getInterfaceTypeEntry(); + Map ifTypes = ovsdbNodeAugmentation.getInterfaceTypeEntry(); if (ifTypes != null) { - for (InterfaceTypeEntry ifType : ifTypes) { - if (ifType.getInterfaceType().equals(InterfaceTypeDpdk.class)) { - found = true; - break; - } + if (ifTypes.containsKey(DPDK_IFACE_KEY)) { + return true; } } } - return found; + return false; } private static List createControllerEntries(List controllersStr, @@ -1171,9 +1174,9 @@ public class SouthboundUtils { LOG.error("extractTerminationPointAugmentations: Node value is null"); return Collections.emptyList(); } - List terminationPoints = node.getTerminationPoint(); + Map terminationPoints = node.getTerminationPoint(); if (terminationPoints != null && !terminationPoints.isEmpty()) { - for (TerminationPoint tp : terminationPoints) { + for (TerminationPoint tp : terminationPoints.values()) { OvsdbTerminationPointAugmentation ovsdbTerminationPointAugmentation = tp.augmentation(OvsdbTerminationPointAugmentation.class); if (ovsdbTerminationPointAugmentation != null) { @@ -1225,7 +1228,7 @@ public class SouthboundUtils { * Get all OVSDB nodes from topology. * @return a list of nodes or null if the topology could not found */ - public List getOvsdbNodes() { + public Map getOvsdbNodes() { InstanceIdentifier inst = InstanceIdentifier.create(NetworkTopology.class).child(Topology.class, new TopologyKey(OVSDB_TOPOLOGY_ID)); Topology topology = provider.read(LogicalDatastoreType.OPERATIONAL, inst); @@ -1247,11 +1250,11 @@ public class SouthboundUtils { } } - if (ovsdbNode != null && ovsdbNode.getOpenvswitchOtherConfigs() != null) { - for (OpenvswitchOtherConfigs openvswitchOtherConfigs : ovsdbNode.getOpenvswitchOtherConfigs()) { - if (openvswitchOtherConfigs.getOtherConfigKey().equals(key)) { - return openvswitchOtherConfigs.getOtherConfigValue(); - } + if (ovsdbNode != null) { + final OpenvswitchOtherConfigs found = ovsdbNode.nonnullOpenvswitchOtherConfigs() + .get(new OpenvswitchOtherConfigsKey(key)); + if (found != null) { + return found.getOtherConfigValue(); } } @@ -1259,8 +1262,9 @@ public class SouthboundUtils { } public static TerminationPoint getTerminationPointByExternalId(final Node bridgeNode, final String interfaceName) { - if (bridgeNode.getTerminationPoint() != null) { - for (TerminationPoint tp : bridgeNode.getTerminationPoint()) { + final Map tps = bridgeNode.getTerminationPoint(); + if (tps != null) { + for (TerminationPoint tp : tps.values()) { OvsdbTerminationPointAugmentation ovsdbTp = tp.augmentation(OvsdbTerminationPointAugmentation.class); String externalIdValue = getExternalInterfaceIdValue(ovsdbTp); if (externalIdValue != null && externalIdValue.equals(interfaceName)) { @@ -1275,9 +1279,9 @@ public class SouthboundUtils { // This utility shouldn't be called often, as it reads all OVSDB nodes each time - not good for scale public Node getNodeByTerminationPointExternalId(final String interfaceName) { - List nodes = getOvsdbNodes(); + Map nodes = getOvsdbNodes(); if (nodes != null) { - for (Node node : nodes) { + for (Node node : nodes.values()) { TerminationPoint tp = getTerminationPointByExternalId(node, interfaceName); if (tp != null) { return node; @@ -1289,12 +1293,11 @@ public class SouthboundUtils { public static String getExternalInterfaceIdValue(final OvsdbTerminationPointAugmentation ovsdbTp) { if (ovsdbTp != null) { - List ifaceExtIds = ovsdbTp.getInterfaceExternalIds(); + Map ifaceExtIds = ovsdbTp.getInterfaceExternalIds(); if (ifaceExtIds != null) { - for (InterfaceExternalIds entry : ifaceExtIds) { - if (entry.getExternalIdKey().equals(EXTERNAL_INTERFACE_ID_KEY)) { - return entry.getExternalIdValue(); - } + final InterfaceExternalIds entry = ifaceExtIds.get(EXTERNAL_INTERFACE_ID_KEY); + if (entry != null) { + return entry.getExternalIdValue(); } } } diff --git a/utils/yang-utils/pom.xml b/utils/yang-utils/pom.xml index b3d431f24..36ef534ec 100644 --- a/utils/yang-utils/pom.xml +++ b/utils/yang-utils/pom.xml @@ -28,6 +28,10 @@ and is available at http://www.eclipse.org/legal/epl-v10.html com.google.guava guava + + org.opendaylight.mdsal + yang-binding + diff --git a/utils/yang-utils/src/main/java/org/opendaylight/ovsdb/utils/yang/YangUtils.java b/utils/yang-utils/src/main/java/org/opendaylight/ovsdb/utils/yang/YangUtils.java index 007d9d661..0c8573e5b 100644 --- a/utils/yang-utils/src/main/java/org/opendaylight/ovsdb/utils/yang/YangUtils.java +++ b/utils/yang-utils/src/main/java/org/opendaylight/ovsdb/utils/yang/YangUtils.java @@ -7,12 +7,15 @@ */ package org.opendaylight.ovsdb.utils.yang; -import com.google.common.base.Preconditions; +import static java.util.Objects.requireNonNull; + import java.util.HashMap; import java.util.Map; import java.util.function.Function; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; +import org.opendaylight.yangtools.yang.binding.Identifiable; +import org.opendaylight.yangtools.yang.binding.Identifier; /** * YANG utility functions. @@ -37,22 +40,41 @@ public final class YangUtils { * @param The value type. * @return The map. */ - @NonNull - public static Map copyYangKeyValueListToMap(@NonNull Map map, @Nullable Iterable yangList, - @NonNull Function keyExtractor, - @NonNull Function valueExtractor) { + public static @NonNull Map copyYangKeyValueListToMap(@NonNull Map map, + @Nullable Iterable yangList, @NonNull Function keyExtractor, + @NonNull Function valueExtractor) { if (yangList != null) { for (T yangValue : yangList) { K key = keyExtractor.apply(yangValue); V value = valueExtractor.apply(yangValue); - Preconditions.checkNotNull(key); - Preconditions.checkNotNull(value); - map.put(key, value); + map.put(requireNonNull(key), requireNonNull(value)); } } return map; } + /** + * Copies a list of YANG key-value items to the given map. Any {@code null} key or value will cause an error. + * + * @param map The map to fill. + * @param yangList The map of YANG key-value items. + * @param keyExtractor The key extractor function to use. + * @param valueExtractor The value extractor function to use. + * @param The YANG item type. + * @param The key type. + * @param The value type. + * @return The map. + */ + public static , T extends Identifiable, K, V> + @NonNull Map copyYangKeyValueListToMap(@NonNull Map map, + @Nullable Map yangList, @NonNull Function keyExtractor, + @NonNull Function valueExtractor) { + if (yangList != null) { + return copyYangKeyValueListToMap(map, yangList.values(), keyExtractor, valueExtractor); + } + return map; + } + /** * Converts a list of YANG key-value items to a map. * @@ -64,10 +86,25 @@ public final class YangUtils { * @param The value type. * @return The map. */ - @NonNull - public static Map convertYangKeyValueListToMap(@Nullable Iterable yangList, - @NonNull Function keyExtractor, - @NonNull Function valueExtractor) { + public static @NonNull Map convertYangKeyValueListToMap(@Nullable Iterable yangList, + @NonNull Function keyExtractor, @NonNull Function valueExtractor) { + return copyYangKeyValueListToMap(new HashMap<>(), yangList, keyExtractor, valueExtractor); + } + + /** + * Converts a list of YANG key-value items to a map. + * + * @param yangList The map of YANG key-value items. + * @param keyExtractor The key extractor function to use. + * @param valueExtractor The value extractor function to use. + * @param The YANG item type. + * @param The key type. + * @param The value type. + * @return The map. + */ + public static , T extends Identifiable, K, V> @NonNull Map + convertYangKeyValueListToMap(@Nullable Map yangList, + @NonNull Function keyExtractor, @NonNull Function valueExtractor) { return copyYangKeyValueListToMap(new HashMap<>(), yangList, keyExtractor, valueExtractor); } } -- 2.36.6