From 69eba689350a3395bfbc4bb3d86664b70bf72b5e Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 28 Aug 2026 23:37:03 +0200 Subject: [PATCH 1/8] Update OvsdbConnectionManagerTest This class is a horror, this patch makes a tiny step towards sanity. Change-Id: I973ada3d300b33b2a9849c342b9df3b048bdc2d2 Signed-off-by: Robert Varga --- .../OvsdbConnectionManagerTest.java | 37 ++++++++----------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionManagerTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionManagerTest.java index 85609c83a..94c64414e 100644 --- a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionManagerTest.java +++ b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/OvsdbConnectionManagerTest.java @@ -50,7 +50,9 @@ 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.inet.types.rev130715.PortNumber; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAttributes; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.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.ConnectionInfoBuilder; 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; @@ -78,9 +80,6 @@ public class OvsdbConnectionManagerTest { @Mock private OvsdbConnection ovsdbConnection; @Mock private OvsdbClient externalClient; @Mock private ReconciliationManager reconciliationManager; - private Map clients; - private Map> instanceIdentifiers; - private Map entityConnectionMap; private final InstanceIdentifier iid = InstanceIdentifier.create(NetworkTopology.class) .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID)) @@ -96,7 +95,6 @@ public class OvsdbConnectionManagerTest { setInternalState(ovsdbConnManager, "ovsdbConnection", ovsdbConnection); setInternalState(ovsdbConnManager, "alreadyProcessedClients", new ConcurrentHashMap<>()); setInternalState(ovsdbConnManager, "ops", new DefaultOperations()); - entityConnectionMap = new ConcurrentHashMap<>(); OvsdbConnectionInfo info = mock(OvsdbConnectionInfo.class); doReturn(InetAddress.getByAddress(new byte[] { 1, 2, 3, 4})).when(info).getRemoteAddress(); @@ -124,7 +122,7 @@ public class OvsdbConnectionManagerTest { when(client.getInstanceIdentifier()).thenReturn(InstanceIdentifier.create(NetworkTopology.class) .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID)) .child(Node.class, new NodeKey(new NodeId("testNode")))); - setInternalState(ovsdbConnManager, "entityConnectionMap", entityConnectionMap); + setInternalState(ovsdbConnManager, "entityConnectionMap", new ConcurrentHashMap<>()); suppress(method(OvsdbConnectionManager.class, "getEntityFromConnectionInstance", OvsdbConnectionInstance.class)); @@ -177,7 +175,7 @@ public class OvsdbConnectionManagerTest { when(SouthboundMapper.createConnectionInfo(any(OvsdbClient.class))).thenReturn(key); OvsdbConnectionInstance ovsdbConnectionInstance = mock(OvsdbConnectionInstance.class); - clients = new ConcurrentHashMap<>(); + final var clients = new ConcurrentHashMap(); clients.put(key, ovsdbConnectionInstance); setInternalState(ovsdbConnManager, "clients", clients); @@ -190,8 +188,7 @@ public class OvsdbConnectionManagerTest { // TODO: Write unit tests for EntityOwnershipService suppress(method(OvsdbConnectionManager.class, "unregisterEntityForOwnership", OvsdbConnectionInstance.class)); - instanceIdentifiers = new ConcurrentHashMap<>(); - setInternalState(ovsdbConnManager, "instanceIdentifiers", instanceIdentifiers); + setInternalState(ovsdbConnManager, "instanceIdentifiers", new ConcurrentHashMap<>()); setInternalState(ovsdbConnManager, "nodeIdVsConnectionInstance", new ConcurrentHashMap<>()); suppress(method(OvsdbConnectionManager.class, "reconcileConnection", @@ -214,23 +211,21 @@ public class OvsdbConnectionManagerTest { @Test public void testDisconnect() throws Exception { - OvsdbNodeAugmentation ovsdbNode = mock(OvsdbNodeAugmentation.class); - ConnectionInfo connectionInfo = mock(ConnectionInfo.class); - when(ovsdbNode.getConnectionInfo()).thenReturn(connectionInfo); - suppress(method(OvsdbConnectionManager.class, "getConnectionInstance", ConnectionInfo.class)); OvsdbConnectionInstance ovsdbConnectionInstance = mock(OvsdbConnectionInstance.class); - when(ovsdbConnManager.getConnectionInstance(any(ConnectionInfo.class))).thenReturn(ovsdbConnectionInstance); when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn( InstanceIdentifier.create(NetworkTopology.class) .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID)) .child(Node.class, new NodeKey(new NodeId("testNode")))); + suppress(method(OvsdbConnectionManager.class, "getConnectionInstance", ConnectionInfo.class)); + when(ovsdbConnManager.getConnectionInstance(any(ConnectionInfo.class))).thenReturn(ovsdbConnectionInstance); suppress(method(OvsdbConnectionManager.class, "removeInstanceIdentifier", ConnectionInfo.class)); - // TODO: Write unit tests for entity ownership service related code. suppress(method(OvsdbConnectionManager.class, "unregisterEntityForOwnership", OvsdbConnectionInstance.class)); - ovsdbConnManager.disconnect(ovsdbNode); + ovsdbConnManager.disconnect(new OvsdbNodeAugmentationBuilder() + .setConnectionInfo(new ConnectionInfoBuilder().build()) + .build()); verify(ovsdbConnectionInstance).disconnect(); } @@ -253,7 +248,7 @@ public class OvsdbConnectionManagerTest { ConnectionInfo key2 = mock(ConnectionInfo.class); OvsdbConnectionInstance ovsdbConnectionInstance1 = mock(OvsdbConnectionInstance.class); OvsdbConnectionInstance ovsdbConnectionInstance2 = mock(OvsdbConnectionInstance.class); - clients = new ConcurrentHashMap<>(); + final var clients = new ConcurrentHashMap(); clients.put(key1, ovsdbConnectionInstance1); clients.put(key2, ovsdbConnectionInstance2); setInternalState(ovsdbConnManager, "clients", clients); @@ -269,8 +264,7 @@ public class OvsdbConnectionManagerTest { PowerMockito.mockStatic(SouthboundMapper.class); when(SouthboundMapper.suppressLocalIpPort(key)).thenReturn(connectionInfo); - clients = new ConcurrentHashMap<>(); - setInternalState(ovsdbConnManager, "clients", clients); + setInternalState(ovsdbConnManager, "clients", new ConcurrentHashMap<>()); // Test putConnectionInstance() OvsdbConnectionInstance instance = mock(OvsdbConnectionInstance.class); @@ -291,8 +285,7 @@ public class OvsdbConnectionManagerTest { PowerMockito.mockStatic(SouthboundMapper.class); when(SouthboundMapper.suppressLocalIpPort(key)).thenReturn(connectionInfo); - instanceIdentifiers = new ConcurrentHashMap<>(); - setInternalState(ovsdbConnManager, "instanceIdentifiers", instanceIdentifiers); + setInternalState(ovsdbConnManager, "instanceIdentifiers", new ConcurrentHashMap<>()); //Test putInstanceIdentifier() Whitebox.invokeMethod(ovsdbConnManager, "putInstanceIdentifier", key, iid); @@ -376,7 +369,7 @@ public class OvsdbConnectionManagerTest { InstanceIdentifier.create(NetworkTopology.class) .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID)) .child(Node.class, new NodeKey(new NodeId("testNode")))); - setInternalState(ovsdbConnManager, "entityConnectionMap", entityConnectionMap); + setInternalState(ovsdbConnManager, "entityConnectionMap", new ConcurrentHashMap<>()); suppress(method(OvsdbConnectionManager.class, "getEntityFromConnectionInstance", OvsdbConnectionInstance.class)); //TODO: Write unit tests for entity ownership service related code. @@ -394,8 +387,8 @@ public class OvsdbConnectionManagerTest { OvsdbConnectionInstance ovsdbConnInstance = new OvsdbConnectionInstance(key, externalClient, new DefaultOperations(), txInvoker, iid); + final var entityConnectionMap = new ConcurrentHashMap(); entityConnectionMap.put(entity, ovsdbConnInstance); - setInternalState(ovsdbConnManager, "entityConnectionMap", entityConnectionMap); doNothing().when(ovsdbConnManager).putConnectionInstance(any(ConnectionInfo.class), any(OvsdbConnectionInstance.class)); -- 2.34.1 From 8e9931370abcc5015c9293c4e504ea61339f0061 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 26 Feb 2018 16:27:17 +0100 Subject: [PATCH 2/8] Add CollectionWrappers SchemaNode/SchemaContext has some unfortunate method contracts which require returning a Set, while they are represented as java.util.Map.values() in EffectiveStatement world, where they support keyed lookups, which is really what users require. To bridge these two worlds without duplicating the same information in two collections we need a memory-efficient proxy to act as an adaptor, as we know the primary storage (Map.values()) is known to be both immutable and conforming to Set interface requirements. This patch such a class and provides a symmetric List wrapping utility. JIRA: YANGTOOLS-853 Change-Id: I052e4f9d58aa1f054450840c2216b0fd2109bc61 Signed-off-by: Robert Varga --- .../yangtools/util/CollectionWrappers.java | 164 ++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 common/util/src/main/java/org/opendaylight/yangtools/util/CollectionWrappers.java diff --git a/common/util/src/main/java/org/opendaylight/yangtools/util/CollectionWrappers.java b/common/util/src/main/java/org/opendaylight/yangtools/util/CollectionWrappers.java new file mode 100644 index 000000000..166e9cb7b --- /dev/null +++ b/common/util/src/main/java/org/opendaylight/yangtools/util/CollectionWrappers.java @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2018 Pantheon Technologies, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.util; + +import static com.google.common.base.Preconditions.checkArgument; +import static java.util.Objects.requireNonNull; + +import com.google.common.annotations.Beta; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; +import com.google.common.collect.Iterators; +import java.util.AbstractList; +import java.util.AbstractSet; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.Spliterator; +import java.util.stream.Stream; +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.opendaylight.yangtools.concepts.Immutable; + +/** + * Utility class for adapting a {@link Collection}s to {@link Set}s and {@link List}s. + * + * @author Robert Varga + */ +@Beta +@NonNullByDefault +public final class CollectionWrappers { + private static final class ListWrapper extends AbstractList { + private final Collection delegate; + + private ListWrapper(final Collection delegate) { + this.delegate = requireNonNull(delegate); + } + + @Override + public Iterator iterator() { + return Iterators.unmodifiableIterator(delegate.iterator()); + } + + @Override + public int size() { + return delegate.size(); + } + + @Override + public Spliterator spliterator() { + return delegate.spliterator(); + } + + @Override + public Stream parallelStream() { + return delegate.parallelStream(); + } + + @Override + public Stream stream() { + return delegate.stream(); + } + + @Override + public E get(final int index) { + return Iterables.get(delegate, index); + } + } + + private static final class SetWrapper extends AbstractSet { + private final Collection delegate; + + private SetWrapper(final Collection delegate) { + this.delegate = requireNonNull(delegate); + } + + @Override + public Iterator iterator() { + return Iterators.unmodifiableIterator(delegate.iterator()); + } + + @Override + public int size() { + return delegate.size(); + } + + @Override + public Spliterator spliterator() { + return delegate.spliterator(); + } + + @Override + public Stream parallelStream() { + return delegate.parallelStream(); + } + + @Override + public Stream stream() { + return delegate.stream(); + } + } + + private CollectionWrappers() { + + } + + /** + * Wrap the specified {@link Collection} as a {@link List}. If the collection is already a List, it is wrapped in + * a {@link Collections#unmodifiableList(List)} to prevent mutability leaking. If the collection is determined + * to be empty, an empty list is returned instead. If the collection is a known-immutable implementation of List + * interface, it is returned unwrapped. Backing collection is required to be effectively immutable. If this + * requirement is violated, the returned object may behave in unpredictable ways. + * + * @param collection Collection to be wrapped + * @return An effectively-immutable wrapper of the collection. + * @throws NullPointerException if collection is null + */ + public static List wrapAsList(final Collection collection) { + if (collection.isEmpty()) { + return ImmutableList.of(); + } + if (collection instanceof List) { + final List cast = (List) collection; + return cast instanceof ListWrapper || cast instanceof Immutable || cast instanceof ImmutableList + ? cast : Collections.unmodifiableList(cast); + } + + return new ListWrapper<>(collection); + } + + /** + * Wrap the specified {@link Collection} as a {@link Set}. If the collection is already a Set, it is wrapped in + * a {@link Collections#unmodifiableSet(Set)} to prevent mutability leaking. If the collection is determined + * to be empty, an empty set is returned instead. If the collection is a known-immutable implementation of Set + * interface, it is returned unwrapped. The collection is checked for duplicates at instantiation time, such that + * it effectively implements the Set contract. Backing collection is required to be effectively immutable. If this + * requirement is violated, the returned object may behave in unpredictable ways. + * + * @param collection Collection to be wrapped + * @return An effectively-immutable wrapper of the collection. + * @throws NullPointerException if collection is null or any of its elements is null + * @throws IllegalArgumentException if the collection's contents do not conform to the Set contract + */ + public static Set wrapAsSet(final Collection collection) { + if (collection.isEmpty()) { + return ImmutableSet.of(); + } + if (collection instanceof Set) { + final Set cast = (Set) collection; + return cast instanceof SetWrapper || cast instanceof Immutable || cast instanceof SingletonSet + || cast instanceof ImmutableSet ? cast : Collections.unmodifiableSet(cast); + } + + final Set check = ImmutableSet.copyOf(collection); + checkArgument(collection.size() == check.size(), "Supplied collection %s has duplicate elements", collection); + return new SetWrapper<>(collection); + } +} -- 2.34.1 From b29d127848dcae9a6372acd453853c30fd70b13b Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 9 Apr 2019 23:08:32 +0200 Subject: [PATCH 3/8] Expand CollectionWrappers This adds a wrapper around a Map's values and also makes all wrappers implement Delegator interface. Furthermore we recognize cross-wrapping between List and Set and unpeel the backing collection, so as to reduce object retention chains. Change-Id: Ie6bd5826c328ab6db656758e3bad2f3b9f656255 Signed-off-by: Robert Varga --- .../yangtools/util/CollectionWrappers.java | 86 +++++++++++++++++-- 1 file changed, 80 insertions(+), 6 deletions(-) diff --git a/common/util/src/main/java/org/opendaylight/yangtools/util/CollectionWrappers.java b/common/util/src/main/java/org/opendaylight/yangtools/util/CollectionWrappers.java index 166e9cb7b..28cde0979 100644 --- a/common/util/src/main/java/org/opendaylight/yangtools/util/CollectionWrappers.java +++ b/common/util/src/main/java/org/opendaylight/yangtools/util/CollectionWrappers.java @@ -21,10 +21,12 @@ import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.Spliterator; import java.util.stream.Stream; import org.eclipse.jdt.annotation.NonNullByDefault; +import org.opendaylight.yangtools.concepts.Delegator; import org.opendaylight.yangtools.concepts.Immutable; /** @@ -35,13 +37,18 @@ import org.opendaylight.yangtools.concepts.Immutable; @Beta @NonNullByDefault public final class CollectionWrappers { - private static final class ListWrapper extends AbstractList { + private static final class ListWrapper extends AbstractList implements Delegator> { private final Collection delegate; - private ListWrapper(final Collection delegate) { + ListWrapper(final Collection delegate) { this.delegate = requireNonNull(delegate); } + @Override + public Collection getDelegate() { + return delegate; + } + @Override public Iterator iterator() { return Iterators.unmodifiableIterator(delegate.iterator()); @@ -73,13 +80,61 @@ public final class CollectionWrappers { } } - private static final class SetWrapper extends AbstractSet { + private static final class MapWrapper extends AbstractList implements Delegator> { + private final Map delegate; + + MapWrapper(final Map delegate) { + this.delegate = requireNonNull(delegate); + } + + @Override + public Map getDelegate() { + return delegate; + } + + @Override + public Iterator iterator() { + return Iterators.unmodifiableIterator(delegate.values().iterator()); + } + + @Override + public int size() { + return delegate.size(); + } + + @Override + public Spliterator spliterator() { + return delegate.values().spliterator(); + } + + @Override + public Stream parallelStream() { + return delegate.values().parallelStream(); + } + + @Override + public Stream stream() { + return delegate.values().stream(); + } + + @Override + public V get(final int index) { + return Iterables.get(delegate.values(), index); + } + } + + private static final class SetWrapper extends AbstractSet implements Delegator> { private final Collection delegate; - private SetWrapper(final Collection delegate) { + SetWrapper(final Collection delegate) { this.delegate = requireNonNull(delegate); } + @Override + public Collection getDelegate() { + return delegate; + } + @Override public Iterator iterator() { return Iterators.unmodifiableIterator(delegate.iterator()); @@ -125,15 +180,31 @@ public final class CollectionWrappers { if (collection.isEmpty()) { return ImmutableList.of(); } + if (collection instanceof SetWrapper) { + return wrapAsList(((SetWrapper) collection).getDelegate()); + } if (collection instanceof List) { final List cast = (List) collection; - return cast instanceof ListWrapper || cast instanceof Immutable || cast instanceof ImmutableList - ? cast : Collections.unmodifiableList(cast); + return cast instanceof ListWrapper || cast instanceof MapWrapper || cast instanceof Immutable + || cast instanceof ImmutableList ? cast : Collections.unmodifiableList(cast); } return new ListWrapper<>(collection); } + /** + * Wrap the specified {@link Map}'s values as a {@link List}. If the map is determined to be empty, an empty list is + * returned instead. Backing map is required to be effectively immutable, with fixed iteration order. If this + * requirement is violated, the returned object may behave in unpredictable ways. + * + * @param map Map to be wrapped + * @return An effectively-immutable wrapper of the map. + * @throws NullPointerException if map is null + */ + public static List wrapAsList(final Map map) { + return map.isEmpty() ? ImmutableList.of() : new MapWrapper<>(map); + } + /** * Wrap the specified {@link Collection} as a {@link Set}. If the collection is already a Set, it is wrapped in * a {@link Collections#unmodifiableSet(Set)} to prevent mutability leaking. If the collection is determined @@ -151,6 +222,9 @@ public final class CollectionWrappers { if (collection.isEmpty()) { return ImmutableSet.of(); } + if (collection instanceof ListWrapper) { + return wrapAsSet(((ListWrapper) collection).getDelegate()); + } if (collection instanceof Set) { final Set cast = (Set) collection; return cast instanceof SetWrapper || cast instanceof Immutable || cast instanceof SingletonSet -- 2.34.1 From 4430433b5afc1de3b03e898b9304db339a587b71 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 10 Apr 2019 08:44:16 +0200 Subject: [PATCH 4/8] Remove CollectionsWrappers map support This was a mistake, as wrapping a Map in such an anonymous way is not useful at all. Change-Id: I2dcd1313b89ccf276ab8230db935fe48a9025605 Signed-off-by: Robert Varga --- .../yangtools/util/CollectionWrappers.java | 61 +------------------ 1 file changed, 2 insertions(+), 59 deletions(-) diff --git a/common/util/src/main/java/org/opendaylight/yangtools/util/CollectionWrappers.java b/common/util/src/main/java/org/opendaylight/yangtools/util/CollectionWrappers.java index 28cde0979..0693d8738 100644 --- a/common/util/src/main/java/org/opendaylight/yangtools/util/CollectionWrappers.java +++ b/common/util/src/main/java/org/opendaylight/yangtools/util/CollectionWrappers.java @@ -21,7 +21,6 @@ import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.Set; import java.util.Spliterator; import java.util.stream.Stream; @@ -80,49 +79,6 @@ public final class CollectionWrappers { } } - private static final class MapWrapper extends AbstractList implements Delegator> { - private final Map delegate; - - MapWrapper(final Map delegate) { - this.delegate = requireNonNull(delegate); - } - - @Override - public Map getDelegate() { - return delegate; - } - - @Override - public Iterator iterator() { - return Iterators.unmodifiableIterator(delegate.values().iterator()); - } - - @Override - public int size() { - return delegate.size(); - } - - @Override - public Spliterator spliterator() { - return delegate.values().spliterator(); - } - - @Override - public Stream parallelStream() { - return delegate.values().parallelStream(); - } - - @Override - public Stream stream() { - return delegate.values().stream(); - } - - @Override - public V get(final int index) { - return Iterables.get(delegate.values(), index); - } - } - private static final class SetWrapper extends AbstractSet implements Delegator> { private final Collection delegate; @@ -185,26 +141,13 @@ public final class CollectionWrappers { } if (collection instanceof List) { final List cast = (List) collection; - return cast instanceof ListWrapper || cast instanceof MapWrapper || cast instanceof Immutable - || cast instanceof ImmutableList ? cast : Collections.unmodifiableList(cast); + return cast instanceof ListWrapper || cast instanceof Immutable || cast instanceof ImmutableList + ? cast : Collections.unmodifiableList(cast); } return new ListWrapper<>(collection); } - /** - * Wrap the specified {@link Map}'s values as a {@link List}. If the map is determined to be empty, an empty list is - * returned instead. Backing map is required to be effectively immutable, with fixed iteration order. If this - * requirement is violated, the returned object may behave in unpredictable ways. - * - * @param map Map to be wrapped - * @return An effectively-immutable wrapper of the map. - * @throws NullPointerException if map is null - */ - public static List wrapAsList(final Map map) { - return map.isEmpty() ? ImmutableList.of() : new MapWrapper<>(map); - } - /** * Wrap the specified {@link Collection} as a {@link Set}. If the collection is already a Set, it is wrapped in * a {@link Collections#unmodifiableSet(Set)} to prevent mutability leaking. If the collection is determined -- 2.34.1 From d8b9021313995751c5ed3b2de76337ea01bfa384 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sun, 30 Aug 2026 02:13:13 +0200 Subject: [PATCH 5/8] Move CollectionsWrappers into library Move imported code, hide it and use it in TableSchema. JIRA: YANGTOOLS-1957 Change-Id: Iba290c9fef3bccc67c5ff10fc190902cef723b29 Signed-off-by: Robert Varga --- .../ovsdb/lib/schema}/CollectionWrappers.java | 15 ++++++--------- .../ovsdb/lib/schema/TableSchema.java | 1 - 2 files changed, 6 insertions(+), 10 deletions(-) rename {common/util/src/main/java/org/opendaylight/yangtools/util => library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema}/CollectionWrappers.java (95%) diff --git a/common/util/src/main/java/org/opendaylight/yangtools/util/CollectionWrappers.java b/library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/CollectionWrappers.java similarity index 95% rename from common/util/src/main/java/org/opendaylight/yangtools/util/CollectionWrappers.java rename to library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/CollectionWrappers.java index 0693d8738..d2b75da6c 100644 --- a/common/util/src/main/java/org/opendaylight/yangtools/util/CollectionWrappers.java +++ b/library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/CollectionWrappers.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.yangtools.util; +package org.opendaylight.ovsdb.lib.schema; import static com.google.common.base.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; -import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; @@ -27,15 +26,13 @@ import java.util.stream.Stream; import org.eclipse.jdt.annotation.NonNullByDefault; import org.opendaylight.yangtools.concepts.Delegator; import org.opendaylight.yangtools.concepts.Immutable; +import org.opendaylight.yangtools.util.SingletonSet; /** * Utility class for adapting a {@link Collection}s to {@link Set}s and {@link List}s. - * - * @author Robert Varga */ -@Beta @NonNullByDefault -public final class CollectionWrappers { +final class CollectionWrappers { private static final class ListWrapper extends AbstractList implements Delegator> { private final Collection delegate; @@ -118,7 +115,7 @@ public final class CollectionWrappers { } private CollectionWrappers() { - + // hidden on purpose } /** @@ -132,7 +129,7 @@ public final class CollectionWrappers { * @return An effectively-immutable wrapper of the collection. * @throws NullPointerException if collection is null */ - public static List wrapAsList(final Collection collection) { + static List wrapAsList(final Collection collection) { if (collection.isEmpty()) { return ImmutableList.of(); } @@ -161,7 +158,7 @@ public final class CollectionWrappers { * @throws NullPointerException if collection is null or any of its elements is null * @throws IllegalArgumentException if the collection's contents do not conform to the Set contract */ - public static Set wrapAsSet(final Collection collection) { + static Set wrapAsSet(final Collection collection) { if (collection.isEmpty()) { return ImmutableSet.of(); } diff --git a/library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/TableSchema.java b/library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/TableSchema.java index 23b91a0b7..0400fd8b7 100644 --- a/library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/TableSchema.java +++ b/library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/TableSchema.java @@ -25,7 +25,6 @@ import org.opendaylight.ovsdb.lib.notation.Column; import org.opendaylight.ovsdb.lib.notation.Row; import org.opendaylight.ovsdb.lib.notation.UUID; import org.opendaylight.ovsdb.lib.operations.Insert; -import org.opendaylight.yangtools.util.CollectionWrappers; public abstract class TableSchema> { private static final AtomicColumnType UUID_COLUMN_TYPE = new AtomicColumnType(UuidBaseType.SINGLETON); -- 2.34.1 From 5e20762cc07f90f8fcb88587310e6b3cb0820f12 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sun, 30 Aug 2026 02:17:41 +0200 Subject: [PATCH 6/8] Minimize CollectionWrappers Remove support for Sets and disconnect the artifact from yangtools.util. JIRA: YANGTOOLS-1957 Change-Id: I443491ec13df6efd7e65dae969b3132844577a3c Signed-off-by: Robert Varga --- library/impl/pom.xml | 2 +- .../ovsdb/lib/schema/CollectionWrappers.java | 85 ++----------------- 2 files changed, 6 insertions(+), 81 deletions(-) diff --git a/library/impl/pom.xml b/library/impl/pom.xml index 88810548e..0ec51fad0 100644 --- a/library/impl/pom.xml +++ b/library/impl/pom.xml @@ -90,7 +90,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.yangtools - util + concepts org.opendaylight.aaa diff --git a/library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/CollectionWrappers.java b/library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/CollectionWrappers.java index d2b75da6c..1267e06bd 100644 --- a/library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/CollectionWrappers.java +++ b/library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/CollectionWrappers.java @@ -7,15 +7,12 @@ */ package org.opendaylight.ovsdb.lib.schema; -import static com.google.common.base.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Iterators; import java.util.AbstractList; -import java.util.AbstractSet; import java.util.Collection; import java.util.Collections; import java.util.Iterator; @@ -26,7 +23,6 @@ import java.util.stream.Stream; import org.eclipse.jdt.annotation.NonNullByDefault; import org.opendaylight.yangtools.concepts.Delegator; import org.opendaylight.yangtools.concepts.Immutable; -import org.opendaylight.yangtools.util.SingletonSet; /** * Utility class for adapting a {@link Collection}s to {@link Set}s and {@link List}s. @@ -76,44 +72,6 @@ final class CollectionWrappers { } } - private static final class SetWrapper extends AbstractSet implements Delegator> { - private final Collection delegate; - - SetWrapper(final Collection delegate) { - this.delegate = requireNonNull(delegate); - } - - @Override - public Collection getDelegate() { - return delegate; - } - - @Override - public Iterator iterator() { - return Iterators.unmodifiableIterator(delegate.iterator()); - } - - @Override - public int size() { - return delegate.size(); - } - - @Override - public Spliterator spliterator() { - return delegate.spliterator(); - } - - @Override - public Stream parallelStream() { - return delegate.parallelStream(); - } - - @Override - public Stream stream() { - return delegate.stream(); - } - } - private CollectionWrappers() { // hidden on purpose } @@ -133,46 +91,13 @@ final class CollectionWrappers { if (collection.isEmpty()) { return ImmutableList.of(); } - if (collection instanceof SetWrapper) { - return wrapAsList(((SetWrapper) collection).getDelegate()); - } - if (collection instanceof List) { - final List cast = (List) collection; - return cast instanceof ListWrapper || cast instanceof Immutable || cast instanceof ImmutableList - ? cast : Collections.unmodifiableList(cast); + if (collection instanceof List list) { + @SuppressWarnings("unchecked") + final var cast = (List) list; + return cast instanceof ListWrapper || cast instanceof Immutable || cast instanceof ImmutableList ? cast + : Collections.unmodifiableList(cast); } return new ListWrapper<>(collection); } - - /** - * Wrap the specified {@link Collection} as a {@link Set}. If the collection is already a Set, it is wrapped in - * a {@link Collections#unmodifiableSet(Set)} to prevent mutability leaking. If the collection is determined - * to be empty, an empty set is returned instead. If the collection is a known-immutable implementation of Set - * interface, it is returned unwrapped. The collection is checked for duplicates at instantiation time, such that - * it effectively implements the Set contract. Backing collection is required to be effectively immutable. If this - * requirement is violated, the returned object may behave in unpredictable ways. - * - * @param collection Collection to be wrapped - * @return An effectively-immutable wrapper of the collection. - * @throws NullPointerException if collection is null or any of its elements is null - * @throws IllegalArgumentException if the collection's contents do not conform to the Set contract - */ - static Set wrapAsSet(final Collection collection) { - if (collection.isEmpty()) { - return ImmutableSet.of(); - } - if (collection instanceof ListWrapper) { - return wrapAsSet(((ListWrapper) collection).getDelegate()); - } - if (collection instanceof Set) { - final Set cast = (Set) collection; - return cast instanceof SetWrapper || cast instanceof Immutable || cast instanceof SingletonSet - || cast instanceof ImmutableSet ? cast : Collections.unmodifiableSet(cast); - } - - final Set check = ImmutableSet.copyOf(collection); - checkArgument(collection.size() == check.size(), "Supplied collection %s has duplicate elements", collection); - return new SetWrapper<>(collection); - } } -- 2.34.1 From 591d4d938060dceee178fdf4b383606b8f56a1fa Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sun, 30 Aug 2026 02:25:12 +0200 Subject: [PATCH 7/8] Specialize ListWrapper Eliminate CollectionWrappers class by moving ListWrapper, specialized to a Set delegate and move the static factory to TableSchema. JIRA: YANGTOOLS-1957 Change-Id: I9ae6ba1dbb484f32f0375a5e91022a42d47d9ee9 Signed-off-by: Robert Varga --- library/impl/pom.xml | 4 - .../ovsdb/lib/schema/CollectionWrappers.java | 103 ------------------ .../ovsdb/lib/schema/ListWrapper.java | 59 ++++++++++ .../ovsdb/lib/schema/TableSchema.java | 6 +- 4 files changed, 64 insertions(+), 108 deletions(-) delete mode 100644 library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/CollectionWrappers.java create mode 100644 library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/ListWrapper.java diff --git a/library/impl/pom.xml b/library/impl/pom.xml index 0ec51fad0..074de8b51 100644 --- a/library/impl/pom.xml +++ b/library/impl/pom.xml @@ -88,10 +88,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.eclipse.jdt org.eclipse.jdt.annotation - - org.opendaylight.yangtools - concepts - org.opendaylight.aaa aaa-cert diff --git a/library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/CollectionWrappers.java b/library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/CollectionWrappers.java deleted file mode 100644 index 1267e06bd..000000000 --- a/library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/CollectionWrappers.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (c) 2018 Pantheon Technologies, s.r.o. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.ovsdb.lib.schema; - -import static java.util.Objects.requireNonNull; - -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; -import com.google.common.collect.Iterators; -import java.util.AbstractList; -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Set; -import java.util.Spliterator; -import java.util.stream.Stream; -import org.eclipse.jdt.annotation.NonNullByDefault; -import org.opendaylight.yangtools.concepts.Delegator; -import org.opendaylight.yangtools.concepts.Immutable; - -/** - * Utility class for adapting a {@link Collection}s to {@link Set}s and {@link List}s. - */ -@NonNullByDefault -final class CollectionWrappers { - private static final class ListWrapper extends AbstractList implements Delegator> { - private final Collection delegate; - - ListWrapper(final Collection delegate) { - this.delegate = requireNonNull(delegate); - } - - @Override - public Collection getDelegate() { - return delegate; - } - - @Override - public Iterator iterator() { - return Iterators.unmodifiableIterator(delegate.iterator()); - } - - @Override - public int size() { - return delegate.size(); - } - - @Override - public Spliterator spliterator() { - return delegate.spliterator(); - } - - @Override - public Stream parallelStream() { - return delegate.parallelStream(); - } - - @Override - public Stream stream() { - return delegate.stream(); - } - - @Override - public E get(final int index) { - return Iterables.get(delegate, index); - } - } - - private CollectionWrappers() { - // hidden on purpose - } - - /** - * Wrap the specified {@link Collection} as a {@link List}. If the collection is already a List, it is wrapped in - * a {@link Collections#unmodifiableList(List)} to prevent mutability leaking. If the collection is determined - * to be empty, an empty list is returned instead. If the collection is a known-immutable implementation of List - * interface, it is returned unwrapped. Backing collection is required to be effectively immutable. If this - * requirement is violated, the returned object may behave in unpredictable ways. - * - * @param collection Collection to be wrapped - * @return An effectively-immutable wrapper of the collection. - * @throws NullPointerException if collection is null - */ - static List wrapAsList(final Collection collection) { - if (collection.isEmpty()) { - return ImmutableList.of(); - } - if (collection instanceof List list) { - @SuppressWarnings("unchecked") - final var cast = (List) list; - return cast instanceof ListWrapper || cast instanceof Immutable || cast instanceof ImmutableList ? cast - : Collections.unmodifiableList(cast); - } - - return new ListWrapper<>(collection); - } -} diff --git a/library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/ListWrapper.java b/library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/ListWrapper.java new file mode 100644 index 000000000..380fe4ab2 --- /dev/null +++ b/library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/ListWrapper.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2018 Pantheon Technologies, s.r.o. and others. All rights reserved. + * Copyright (c) 2026 PANTHEON.tech, s.r.o. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.ovsdb.lib.schema; + +import static java.util.Objects.requireNonNull; + +import com.google.common.collect.Iterables; +import com.google.common.collect.Iterators; +import java.util.AbstractList; +import java.util.Iterator; +import java.util.Set; +import java.util.Spliterator; +import java.util.stream.Stream; +import org.eclipse.jdt.annotation.NonNullByDefault; + +@NonNullByDefault +final class ListWrapper extends AbstractList { + private final Set set; + + ListWrapper(final Set set) { + this.set = requireNonNull(set); + } + + @Override + public Iterator iterator() { + return Iterators.unmodifiableIterator(set.iterator()); + } + + @Override + public int size() { + return set.size(); + } + + @Override + public Spliterator spliterator() { + return set.spliterator(); + } + + @Override + public Stream parallelStream() { + return set.parallelStream(); + } + + @Override + public Stream stream() { + return set.stream(); + } + + @Override + public E get(final int index) { + return Iterables.get(set, index); + } +} diff --git a/library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/TableSchema.java b/library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/TableSchema.java index 0400fd8b7..3a4054cd0 100644 --- a/library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/TableSchema.java +++ b/library/impl/src/main/java/org/opendaylight/ovsdb/lib/schema/TableSchema.java @@ -57,11 +57,15 @@ public abstract class TableSchema> { private synchronized List populateColumnList() { List local = columnList; if (local == null) { - columnList = local = CollectionWrappers.wrapAsList(columns.keySet()); + columnList = local = wrapAsList(columns.keySet()); } return local; } + private static List wrapAsList(final Set set) { + return set.isEmpty() ? List.of() : new ListWrapper<>(set); + } + public Map getColumnSchemas() { return columns; } -- 2.34.1 From 36b95feabc79cea854c5baa72f370bddb76505c2 Mon Sep 17 00:00:00 2001 From: jenkins-releng Date: Sun, 30 Aug 2026 00:37:13 +0000 Subject: [PATCH 8/8] Release Validate --- commons/binding-parent/pom.xml | 2 +- commons/it/pom.xml | 2 +- commons/pom.xml | 2 +- hwvtepsouthbound/hwvtepsouthbound-api/pom.xml | 4 ++-- hwvtepsouthbound/hwvtepsouthbound-artifacts/pom.xml | 2 +- hwvtepsouthbound/hwvtepsouthbound-features/features/pom.xml | 2 +- .../odl-ovsdb-hwvtepsouthbound-api/pom.xml | 2 +- .../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 | 2 +- hwvtepsouthbound/hwvtepsouthbound-features/pom.xml | 2 +- hwvtepsouthbound/hwvtepsouthbound-impl/pom.xml | 2 +- hwvtepsouthbound/hwvtepsouthbound-it/pom.xml | 2 +- hwvtepsouthbound/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 | 2 +- library/features/pom.xml | 2 +- library/impl/pom.xml | 4 ++-- library/it/pom.xml | 6 +++--- library/karaf/pom.xml | 2 +- library/pom.xml | 2 +- pom.xml | 2 +- schemas/hardwarevtep/pom.xml | 4 ++-- schemas/openvswitch/pom.xml | 4 ++-- schemas/pom.xml | 2 +- southbound/pom.xml | 2 +- southbound/southbound-api/pom.xml | 4 ++-- southbound/southbound-artifacts/pom.xml | 2 +- southbound/southbound-features/features/pom.xml | 2 +- .../southbound-features/odl-ovsdb-southbound-api/pom.xml | 2 +- .../odl-ovsdb-southbound-impl-rest/pom.xml | 2 +- .../odl-ovsdb-southbound-impl-ui/pom.xml | 2 +- .../southbound-features/odl-ovsdb-southbound-impl/pom.xml | 2 +- .../southbound-features/odl-ovsdb-southbound-test/pom.xml | 2 +- southbound/southbound-features/pom.xml | 2 +- southbound/southbound-impl/pom.xml | 2 +- southbound/southbound-it/pom.xml | 2 +- southbound/southbound-karaf/pom.xml | 2 +- utils/config/pom.xml | 4 ++-- utils/hwvtepsouthbound-utils/pom.xml | 4 ++-- utils/mdsal-utils/pom.xml | 4 ++-- utils/odl-ovsdb-utils/pom.xml | 2 +- utils/ovsdb-it-utils/pom.xml | 2 +- utils/pom.xml | 2 +- utils/servicehelper/pom.xml | 4 ++-- utils/southbound-utils/pom.xml | 4 ++-- utils/yang-utils/pom.xml | 2 +- 50 files changed, 62 insertions(+), 62 deletions(-) diff --git a/commons/binding-parent/pom.xml b/commons/binding-parent/pom.xml index b89a0569a..edb10b5a1 100644 --- a/commons/binding-parent/pom.xml +++ b/commons/binding-parent/pom.xml @@ -17,7 +17,7 @@ org.opendaylight.ovsdb ovsdb-binding-parent - 1.23.0-SNAPSHOT + 1.23.0 pom diff --git a/commons/it/pom.xml b/commons/it/pom.xml index 549b871e8..09ce09ed0 100644 --- a/commons/it/pom.xml +++ b/commons/it/pom.xml @@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb it - 1.23.0-SNAPSHOT + 1.23.0 pom diff --git a/commons/pom.xml b/commons/pom.xml index 537125f54..6626fa2b7 100644 --- a/commons/pom.xml +++ b/commons/pom.xml @@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb parents - 1.23.0-SNAPSHOT + 1.23.0 ODL :: ovsdb :: ${project.artifactId} diff --git a/hwvtepsouthbound/hwvtepsouthbound-api/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-api/pom.xml index f4a24bad2..6e601b75e 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-api/pom.xml +++ b/hwvtepsouthbound/hwvtepsouthbound-api/pom.xml @@ -10,14 +10,14 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb ovsdb-binding-parent - 1.23.0-SNAPSHOT + 1.23.0 ../../commons/binding-parent 4.0.0 org.opendaylight.ovsdb hwvtepsouthbound-api - 1.23.0-SNAPSHOT + 1.23.0 bundle diff --git a/hwvtepsouthbound/hwvtepsouthbound-artifacts/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-artifacts/pom.xml index 50979bed3..b87402e6d 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-artifacts/pom.xml +++ b/hwvtepsouthbound/hwvtepsouthbound-artifacts/pom.xml @@ -19,7 +19,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb hwvtepsouthbound-artifacts - 1.23.0-SNAPSHOT + 1.23.0 pom diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/features/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/features/pom.xml index 052cd79e9..0502f00c7 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-features/features/pom.xml +++ b/hwvtepsouthbound/hwvtepsouthbound-features/features/pom.xml @@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb hwvtepsouthbound-features - 1.23.0-SNAPSHOT + 1.23.0 feature diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-api/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-api/pom.xml index bcf4dc199..4b261ab5b 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-api/pom.xml +++ b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-api/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.ovsdb odl-ovsdb-hwvtepsouthbound-api - 1.23.0-SNAPSHOT + 1.23.0 feature diff --git a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-rest/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-rest/pom.xml index 16f5a6b94..0af28df00 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-rest/pom.xml +++ b/hwvtepsouthbound/hwvtepsouthbound-features/odl-ovsdb-hwvtepsouthbound-rest/pom.xml @@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb odl-ovsdb-hwvtepsouthbound-rest - 1.23.0-SNAPSHOT + 1.23.0 feature diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-impl/pom.xml index 1f418b170..c695c6f7a 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/pom.xml +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb ovsdb-binding-parent - 1.23.0-SNAPSHOT + 1.23.0 ../../commons/binding-parent diff --git a/hwvtepsouthbound/hwvtepsouthbound-it/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-it/pom.xml index 0e2cf0a8e..7cc4fff55 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-it/pom.xml +++ b/hwvtepsouthbound/hwvtepsouthbound-it/pom.xml @@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb it - 1.23.0-SNAPSHOT + 1.23.0 ../../commons/it diff --git a/hwvtepsouthbound/hwvtepsouthbound-karaf/pom.xml b/hwvtepsouthbound/hwvtepsouthbound-karaf/pom.xml index f6ff6880b..7006b53a5 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-karaf/pom.xml +++ b/hwvtepsouthbound/hwvtepsouthbound-karaf/pom.xml @@ -15,7 +15,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL 4.0.0 org.opendaylight.ovsdb hwvtepsouthbound-karaf - 1.23.0-SNAPSHOT + 1.23.0 pom diff --git a/hwvtepsouthbound/pom.xml b/hwvtepsouthbound/pom.xml index 3ff01ae8a..a766b96c1 100644 --- a/hwvtepsouthbound/pom.xml +++ b/hwvtepsouthbound/pom.xml @@ -17,7 +17,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.ovsdb hwvtepsouthbound-aggregator - 1.23.0-SNAPSHOT + 1.23.0 ODL :: ovsdb :: ${project.artifactId} diff --git a/library/artifacts/pom.xml b/library/artifacts/pom.xml index e9058de27..61e892f6d 100644 --- a/library/artifacts/pom.xml +++ b/library/artifacts/pom.xml @@ -19,7 +19,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb library-artifacts - 1.23.0-SNAPSHOT + 1.23.0 pom diff --git a/library/features/features/pom.xml b/library/features/features/pom.xml index c661acec6..a8fb923f3 100644 --- a/library/features/features/pom.xml +++ b/library/features/features/pom.xml @@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb library-features - 1.23.0-SNAPSHOT + 1.23.0 feature diff --git a/library/features/odl-ovsdb-library/pom.xml b/library/features/odl-ovsdb-library/pom.xml index cc991b60f..c71f23c7d 100644 --- a/library/features/odl-ovsdb-library/pom.xml +++ b/library/features/odl-ovsdb-library/pom.xml @@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb odl-ovsdb-library - 1.23.0-SNAPSHOT + 1.23.0 feature ODL :: ovsdb :: ${project.artifactId} diff --git a/library/impl/pom.xml b/library/impl/pom.xml index 074de8b51..021b213b0 100644 --- a/library/impl/pom.xml +++ b/library/impl/pom.xml @@ -12,14 +12,14 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb ovsdb-binding-parent - 1.23.0-SNAPSHOT + 1.23.0 ../../commons/binding-parent 4.0.0 org.opendaylight.ovsdb library - 1.23.0-SNAPSHOT + 1.23.0 bundle diff --git a/library/it/pom.xml b/library/it/pom.xml index 83073c284..71eea8f73 100644 --- a/library/it/pom.xml +++ b/library/it/pom.xml @@ -11,14 +11,14 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb it - 1.23.0-SNAPSHOT + 1.23.0 ../../commons/it 4.0.0 org.opendaylight.ovsdb library-it - 1.23.0-SNAPSHOT + 1.23.0 jar @@ -27,7 +27,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb library-karaf - 1.23.0-SNAPSHOT + 1.23.0 zip diff --git a/library/karaf/pom.xml b/library/karaf/pom.xml index c6435fe34..d89f79545 100644 --- a/library/karaf/pom.xml +++ b/library/karaf/pom.xml @@ -15,7 +15,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL 4.0.0 org.opendaylight.ovsdb library-karaf - 1.23.0-SNAPSHOT + 1.23.0 pom diff --git a/library/pom.xml b/library/pom.xml index 7a9c5196d..124c834f8 100644 --- a/library/pom.xml +++ b/library/pom.xml @@ -17,7 +17,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb library-aggregator - 1.23.0-SNAPSHOT + 1.23.0 ODL :: ovsdb :: ${project.artifactId} diff --git a/pom.xml b/pom.xml index 0e3efeb53..abca7b4d6 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb ovsdb - 1.23.0-SNAPSHOT + 1.23.0 ${project.artifactId} pom diff --git a/schemas/hardwarevtep/pom.xml b/schemas/hardwarevtep/pom.xml index b1ad4c9ab..a17932db2 100644 --- a/schemas/hardwarevtep/pom.xml +++ b/schemas/hardwarevtep/pom.xml @@ -12,13 +12,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb ovsdb-binding-parent - 1.23.0-SNAPSHOT + 1.23.0 ../../commons/binding-parent org.opendaylight.ovsdb schema.hardwarevtep - 1.23.0-SNAPSHOT + 1.23.0 bundle diff --git a/schemas/openvswitch/pom.xml b/schemas/openvswitch/pom.xml index ba9c814f8..078351377 100644 --- a/schemas/openvswitch/pom.xml +++ b/schemas/openvswitch/pom.xml @@ -12,13 +12,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb ovsdb-binding-parent - 1.23.0-SNAPSHOT + 1.23.0 ../../commons/binding-parent org.opendaylight.ovsdb schema.openvswitch - 1.23.0-SNAPSHOT + 1.23.0 bundle diff --git a/schemas/pom.xml b/schemas/pom.xml index f9c22d28d..1fd477908 100644 --- a/schemas/pom.xml +++ b/schemas/pom.xml @@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb schemas - 1.23.0-SNAPSHOT + 1.23.0 ODL :: ovsdb :: ${project.artifactId} diff --git a/southbound/pom.xml b/southbound/pom.xml index 4432008bf..b10ea1a91 100644 --- a/southbound/pom.xml +++ b/southbound/pom.xml @@ -16,7 +16,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.ovsdb southbound-aggregator - 1.23.0-SNAPSHOT + 1.23.0 ODL :: ovsdb :: ${project.artifactId} diff --git a/southbound/southbound-api/pom.xml b/southbound/southbound-api/pom.xml index f085761f0..ee633bd6c 100644 --- a/southbound/southbound-api/pom.xml +++ b/southbound/southbound-api/pom.xml @@ -10,14 +10,14 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb ovsdb-binding-parent - 1.23.0-SNAPSHOT + 1.23.0 ../../commons/binding-parent 4.0.0 org.opendaylight.ovsdb southbound-api - 1.23.0-SNAPSHOT + 1.23.0 bundle diff --git a/southbound/southbound-artifacts/pom.xml b/southbound/southbound-artifacts/pom.xml index ec2c9ea13..163728be0 100644 --- a/southbound/southbound-artifacts/pom.xml +++ b/southbound/southbound-artifacts/pom.xml @@ -19,7 +19,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb southbound-artifacts - 1.23.0-SNAPSHOT + 1.23.0 pom diff --git a/southbound/southbound-features/features/pom.xml b/southbound/southbound-features/features/pom.xml index 7528a9f63..006e626d9 100644 --- a/southbound/southbound-features/features/pom.xml +++ b/southbound/southbound-features/features/pom.xml @@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb southbound-features - 1.23.0-SNAPSHOT + 1.23.0 feature diff --git a/southbound/southbound-features/odl-ovsdb-southbound-api/pom.xml b/southbound/southbound-features/odl-ovsdb-southbound-api/pom.xml index 161cdc8a2..3cde65763 100644 --- a/southbound/southbound-features/odl-ovsdb-southbound-api/pom.xml +++ b/southbound/southbound-features/odl-ovsdb-southbound-api/pom.xml @@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb odl-ovsdb-southbound-api - 1.23.0-SNAPSHOT + 1.23.0 feature 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 9e8242112..dec0d5a84 100644 --- a/southbound/southbound-features/odl-ovsdb-southbound-impl-rest/pom.xml +++ b/southbound/southbound-features/odl-ovsdb-southbound-impl-rest/pom.xml @@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb odl-ovsdb-southbound-impl-rest - 1.23.0-SNAPSHOT + 1.23.0 feature ODL :: ovsdb :: ${project.artifactId} diff --git a/southbound/southbound-impl/pom.xml b/southbound/southbound-impl/pom.xml index 73ffed41d..39dd6458c 100644 --- a/southbound/southbound-impl/pom.xml +++ b/southbound/southbound-impl/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb ovsdb-binding-parent - 1.23.0-SNAPSHOT + 1.23.0 ../../commons/binding-parent diff --git a/southbound/southbound-it/pom.xml b/southbound/southbound-it/pom.xml index 9b25ebbe3..72518feda 100644 --- a/southbound/southbound-it/pom.xml +++ b/southbound/southbound-it/pom.xml @@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb it - 1.23.0-SNAPSHOT + 1.23.0 ../../commons/it 4.0.0 diff --git a/southbound/southbound-karaf/pom.xml b/southbound/southbound-karaf/pom.xml index dd43a76fb..88128a04e 100644 --- a/southbound/southbound-karaf/pom.xml +++ b/southbound/southbound-karaf/pom.xml @@ -15,7 +15,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL 4.0.0 org.opendaylight.ovsdb southbound-karaf - 1.23.0-SNAPSHOT + 1.23.0 pom diff --git a/utils/config/pom.xml b/utils/config/pom.xml index dfba187b9..e2c01613f 100644 --- a/utils/config/pom.xml +++ b/utils/config/pom.xml @@ -12,13 +12,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb ovsdb-binding-parent - 1.23.0-SNAPSHOT + 1.23.0 ../../commons/binding-parent org.opendaylight.ovsdb utils.config - 1.23.0-SNAPSHOT + 1.23.0 ODL :: ovsdb :: ${project.artifactId} diff --git a/utils/hwvtepsouthbound-utils/pom.xml b/utils/hwvtepsouthbound-utils/pom.xml index a8473eeba..313bede1f 100644 --- a/utils/hwvtepsouthbound-utils/pom.xml +++ b/utils/hwvtepsouthbound-utils/pom.xml @@ -11,13 +11,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb ovsdb-binding-parent - 1.23.0-SNAPSHOT + 1.23.0 ../../commons/binding-parent org.opendaylight.ovsdb utils.hwvtepsouthbound-utils - 1.23.0-SNAPSHOT + 1.23.0 bundle diff --git a/utils/mdsal-utils/pom.xml b/utils/mdsal-utils/pom.xml index 6b93fde63..54c61bdcf 100644 --- a/utils/mdsal-utils/pom.xml +++ b/utils/mdsal-utils/pom.xml @@ -11,13 +11,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb ovsdb-binding-parent - 1.23.0-SNAPSHOT + 1.23.0 ../../commons/binding-parent org.opendaylight.ovsdb utils.mdsal-utils - 1.23.0-SNAPSHOT + 1.23.0 bundle diff --git a/utils/odl-ovsdb-utils/pom.xml b/utils/odl-ovsdb-utils/pom.xml index 5e0cee529..37c12bb40 100644 --- a/utils/odl-ovsdb-utils/pom.xml +++ b/utils/odl-ovsdb-utils/pom.xml @@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb odl-ovsdb-utils - 1.23.0-SNAPSHOT + 1.23.0 feature diff --git a/utils/ovsdb-it-utils/pom.xml b/utils/ovsdb-it-utils/pom.xml index a9c8d44f0..1fbde8b7e 100644 --- a/utils/ovsdb-it-utils/pom.xml +++ b/utils/ovsdb-it-utils/pom.xml @@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb ovsdb-binding-parent - 1.23.0-SNAPSHOT + 1.23.0 ../../commons/binding-parent diff --git a/utils/pom.xml b/utils/pom.xml index be45cfdd2..e9da2a70b 100644 --- a/utils/pom.xml +++ b/utils/pom.xml @@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb utils - 1.23.0-SNAPSHOT + 1.23.0 pom diff --git a/utils/servicehelper/pom.xml b/utils/servicehelper/pom.xml index 9e345753f..a8e6b037b 100644 --- a/utils/servicehelper/pom.xml +++ b/utils/servicehelper/pom.xml @@ -12,13 +12,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb ovsdb-binding-parent - 1.23.0-SNAPSHOT + 1.23.0 ../../commons/binding-parent org.opendaylight.ovsdb utils.servicehelper - 1.23.0-SNAPSHOT + 1.23.0 bundle diff --git a/utils/southbound-utils/pom.xml b/utils/southbound-utils/pom.xml index fa7faf041..76a5aa794 100644 --- a/utils/southbound-utils/pom.xml +++ b/utils/southbound-utils/pom.xml @@ -11,13 +11,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb ovsdb-binding-parent - 1.23.0-SNAPSHOT + 1.23.0 ../../commons/binding-parent org.opendaylight.ovsdb utils.southbound-utils - 1.23.0-SNAPSHOT + 1.23.0 bundle diff --git a/utils/yang-utils/pom.xml b/utils/yang-utils/pom.xml index dad18f7da..a67111874 100644 --- a/utils/yang-utils/pom.xml +++ b/utils/yang-utils/pom.xml @@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.ovsdb ovsdb-binding-parent - 1.23.0-SNAPSHOT + 1.23.0 ../../commons/binding-parent -- 2.34.1