From 16093a00c04f9f1bc07d35306f4163f74c28dc15 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 8 Dec 2023 23:56:25 +0100 Subject: [PATCH] Remove GenericEntityOwnershipListenerRegistration This registration brings absolutely nothing to the table aside from capturing the entity type -- which is only used in one implementation as a detail. Use a simple Registration instead, which ends up simplifying things quite significantly, to the point of eliminating mdsal-eos-common-spi. JIRA: MDSAL-843 Change-Id: I5decd9b39ec7da7d11f904842d4849f09c7a7d46 Signed-off-by: Robert Varga --- artifacts/pom.xml | 5 -- docs/pom.xml | 4 -- ...ngEntityOwnershipListenerRegistration.java | 44 --------------- .../DefaultEntityOwnershipService.java | 7 +-- .../DefaultEntityOwnershipServiceTest.java | 41 +++++--------- .../EntityOwnershipListenerRegistration.java | 22 -------- .../binding/api/EntityOwnershipService.java | 2 +- ...icEntityOwnershipListenerRegistration.java | 40 -------------- .../api/GenericEntityOwnershipService.java | 2 +- entityownership/mdsal-eos-common-spi/pom.xml | 46 ---------------- .../src/main/java/module-info.java | 15 ----- ...icEntityOwnershipListenerRegistration.java | 43 --------------- ...tityOwnershipListenerRegistrationTest.java | 32 ----------- ...OMEntityOwnershipListenerRegistration.java | 22 -------- .../dom/api/DOMEntityOwnershipService.java | 3 +- .../SimpleDOMEntityOwnershipService.java | 49 +++++------------ entityownership/pom.xml | 1 - features/odl-mdsal-eos-common/pom.xml | 4 -- ...ctClusterSingletonServiceProviderImpl.java | 55 ++++++++----------- ...OMClusterSingletonServiceProviderImpl.java | 8 +-- ...AbstractDOMClusterServiceProviderTest.java | 5 +- 21 files changed, 61 insertions(+), 389 deletions(-) delete mode 100644 entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/BindingEntityOwnershipListenerRegistration.java delete mode 100644 entityownership/mdsal-eos-binding-api/src/main/java/org/opendaylight/mdsal/eos/binding/api/EntityOwnershipListenerRegistration.java delete mode 100644 entityownership/mdsal-eos-common-api/src/main/java/org/opendaylight/mdsal/eos/common/api/GenericEntityOwnershipListenerRegistration.java delete mode 100644 entityownership/mdsal-eos-common-spi/pom.xml delete mode 100644 entityownership/mdsal-eos-common-spi/src/main/java/module-info.java delete mode 100644 entityownership/mdsal-eos-common-spi/src/main/java/org/opendaylight/mdsal/eos/common/spi/AbstractGenericEntityOwnershipListenerRegistration.java delete mode 100644 entityownership/mdsal-eos-common-spi/src/test/java/org/opendaylight/mdsal/eos/common/spi/AbstractGenericEntityOwnershipListenerRegistrationTest.java delete mode 100644 entityownership/mdsal-eos-dom-api/src/main/java/org/opendaylight/mdsal/eos/dom/api/DOMEntityOwnershipListenerRegistration.java diff --git a/artifacts/pom.xml b/artifacts/pom.xml index 577218f836..2efbc72a54 100644 --- a/artifacts/pom.xml +++ b/artifacts/pom.xml @@ -206,11 +206,6 @@ mdsal-eos-common-api 13.0.0-SNAPSHOT - - org.opendaylight.mdsal - mdsal-eos-common-spi - 13.0.0-SNAPSHOT - org.opendaylight.mdsal mdsal-eos-dom-api diff --git a/docs/pom.xml b/docs/pom.xml index 1a5bee8af4..23c31eafe6 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -149,10 +149,6 @@ org.opendaylight.mdsal mdsal-eos-common-api - - org.opendaylight.mdsal - mdsal-eos-common-spi - org.opendaylight.mdsal mdsal-eos-dom-api diff --git a/entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/BindingEntityOwnershipListenerRegistration.java b/entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/BindingEntityOwnershipListenerRegistration.java deleted file mode 100644 index 7e09cac2b1..0000000000 --- a/entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/BindingEntityOwnershipListenerRegistration.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2015 Brocade Communications Systems, Inc. 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.mdsal.eos.binding.dom.adapter; - -import static java.util.Objects.requireNonNull; - -import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListener; -import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListenerRegistration; -import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListenerRegistration; -import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; - -/** - * Implementation of EntityOwnershipListenerRegistration whose instances are returned from the - * {@link DefaultEntityOwnershipService}. - * - * @author Thomas Pantelis - */ -class BindingEntityOwnershipListenerRegistration extends AbstractObjectRegistration - implements EntityOwnershipListenerRegistration { - private final String entityType; - private final DOMEntityOwnershipListenerRegistration domRegistration; - - BindingEntityOwnershipListenerRegistration(String entityType, EntityOwnershipListener listener, - DOMEntityOwnershipListenerRegistration domRegistration) { - super(listener); - this.entityType = requireNonNull(entityType); - this.domRegistration = requireNonNull(domRegistration); - } - - @Override - public String getEntityType() { - return entityType; - } - - @Override - protected void removeRegistration() { - domRegistration.close(); - } -} \ No newline at end of file diff --git a/entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/DefaultEntityOwnershipService.java b/entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/DefaultEntityOwnershipService.java index 2a17f21b6e..606d800b3b 100644 --- a/entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/DefaultEntityOwnershipService.java +++ b/entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/DefaultEntityOwnershipService.java @@ -16,7 +16,6 @@ import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.dom.adapter.AdapterContext; import org.opendaylight.mdsal.eos.binding.api.Entity; import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListener; -import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListenerRegistration; import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService; import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException; import org.opendaylight.mdsal.eos.common.api.EntityOwnershipState; @@ -52,10 +51,8 @@ public final class DefaultEntityOwnershipService implements EntityOwnershipServi } @Override - public EntityOwnershipListenerRegistration registerListener(final String entityType, - final EntityOwnershipListener listener) { - return new BindingEntityOwnershipListenerRegistration(entityType, listener, - domService.registerListener(entityType, new DOMEntityOwnershipListenerAdapter(listener, adapterContext))); + public Registration registerListener(final String entityType, final EntityOwnershipListener listener) { + return domService.registerListener(entityType, new DOMEntityOwnershipListenerAdapter(listener, adapterContext)); } @Override diff --git a/entityownership/mdsal-eos-binding-adapter/src/test/java/org/opendaylight/mdsal/eos/binding/dom/adapter/DefaultEntityOwnershipServiceTest.java b/entityownership/mdsal-eos-binding-adapter/src/test/java/org/opendaylight/mdsal/eos/binding/dom/adapter/DefaultEntityOwnershipServiceTest.java index 4c07869c78..2fe5ffe38f 100644 --- a/entityownership/mdsal-eos-binding-adapter/src/test/java/org/opendaylight/mdsal/eos/binding/dom/adapter/DefaultEntityOwnershipServiceTest.java +++ b/entityownership/mdsal-eos-binding-adapter/src/test/java/org/opendaylight/mdsal/eos/binding/dom/adapter/DefaultEntityOwnershipServiceTest.java @@ -30,14 +30,12 @@ import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices; import org.opendaylight.mdsal.eos.binding.api.Entity; import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipChange; import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListener; -import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListenerRegistration; import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException; import org.opendaylight.mdsal.eos.common.api.EntityOwnershipChangeState; import org.opendaylight.mdsal.eos.common.api.EntityOwnershipState; import org.opendaylight.mdsal.eos.dom.api.DOMEntity; import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipChange; import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListener; -import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListenerRegistration; import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService; import org.opendaylight.yangtools.concepts.Registration; @@ -65,9 +63,7 @@ public class DefaultEntityOwnershipServiceTest { BINDING_ENTITY.getIdentifier()); doReturn(BINDING_ENTITY.getIdentifier()).when(mockCodecRegistry).fromYangInstanceIdentifier( DOM_ENTITY.getIdentifier()); - - adapter = new DefaultEntityOwnershipService(mockDOMService, - new ConstantAdapterContext(mockCodecRegistry)); + adapter = new DefaultEntityOwnershipService(mockDOMService, new ConstantAdapterContext(mockCodecRegistry)); } @Test @@ -83,35 +79,28 @@ public class DefaultEntityOwnershipServiceTest { @Test public void testRegisterListener() { - final DOMEntityOwnershipListenerRegistration mockDOMReg = mock(DOMEntityOwnershipListenerRegistration.class); + final var mockDOMReg = mock(Registration.class); doReturn(mockDOMReg).when(mockDOMService).registerListener(eq(DOM_ENTITY.getType()), any(DOMEntityOwnershipListener.class)); - final EntityOwnershipListener mockListener = mock(EntityOwnershipListener.class); - - final EntityOwnershipListenerRegistration reg = adapter.registerListener( - BINDING_ENTITY.getType(), mockListener); + final var mockListener = mock(EntityOwnershipListener.class); - assertNotNull("registerListener returned null", reg); - assertEquals("getInstance", mockListener, reg.getInstance()); - assertEquals("getEntityType", BINDING_ENTITY.getType(), reg.getEntityType()); + try (var reg = adapter.registerListener(BINDING_ENTITY.getType(), mockListener)) { + assertNotNull("registerListener returned null", reg); - final ArgumentCaptor domListenerCaptor = ArgumentCaptor.forClass( - DOMEntityOwnershipListener.class); - verify(mockDOMService).registerListener(eq(DOM_ENTITY.getType()), domListenerCaptor.capture()); + final var domListenerCaptor = ArgumentCaptor.forClass(DOMEntityOwnershipListener.class); + verify(mockDOMService).registerListener(eq(DOM_ENTITY.getType()), domListenerCaptor.capture()); - final DOMEntityOwnershipChange domOwnershipChange = new DOMEntityOwnershipChange(DOM_ENTITY, + final var domOwnershipChange = new DOMEntityOwnershipChange(DOM_ENTITY, EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED, true); - domListenerCaptor.getValue().ownershipChanged(domOwnershipChange); + domListenerCaptor.getValue().ownershipChanged(domOwnershipChange); - final ArgumentCaptor ownershipChangeCaptor = ArgumentCaptor.forClass( - EntityOwnershipChange.class); - verify(mockListener).ownershipChanged(ownershipChangeCaptor.capture()); + final var ownershipChangeCaptor = ArgumentCaptor.forClass(EntityOwnershipChange.class); + verify(mockListener).ownershipChanged(ownershipChangeCaptor.capture()); - final EntityOwnershipChange change = ownershipChangeCaptor.getValue(); - assertEquals("getEntity", BINDING_ENTITY, change.getEntity()); - assertEquals("getState", EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED, change.getState()); - - reg.close(); + final var change = ownershipChangeCaptor.getValue(); + assertEquals("getEntity", BINDING_ENTITY, change.getEntity()); + assertEquals("getState", EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED, change.getState()); + } verify(mockDOMReg).close(); } diff --git a/entityownership/mdsal-eos-binding-api/src/main/java/org/opendaylight/mdsal/eos/binding/api/EntityOwnershipListenerRegistration.java b/entityownership/mdsal-eos-binding-api/src/main/java/org/opendaylight/mdsal/eos/binding/api/EntityOwnershipListenerRegistration.java deleted file mode 100644 index 68c953e255..0000000000 --- a/entityownership/mdsal-eos-binding-api/src/main/java/org/opendaylight/mdsal/eos/binding/api/EntityOwnershipListenerRegistration.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (c) 2015 Brocade Communications Systems, Inc. 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.mdsal.eos.binding.api; - -import com.google.common.annotations.Beta; -import org.opendaylight.mdsal.eos.common.api.GenericEntityOwnershipListenerRegistration; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -/** - * Binding interface for GenericEntityOwnershipCandidateRegistration. - * - * @author Thomas Pantelis - */ -@Beta -public interface EntityOwnershipListenerRegistration extends - GenericEntityOwnershipListenerRegistration, EntityOwnershipListener> { -} diff --git a/entityownership/mdsal-eos-binding-api/src/main/java/org/opendaylight/mdsal/eos/binding/api/EntityOwnershipService.java b/entityownership/mdsal-eos-binding-api/src/main/java/org/opendaylight/mdsal/eos/binding/api/EntityOwnershipService.java index 557b04a1e1..c7e36f4b1c 100644 --- a/entityownership/mdsal-eos-binding-api/src/main/java/org/opendaylight/mdsal/eos/binding/api/EntityOwnershipService.java +++ b/entityownership/mdsal-eos-binding-api/src/main/java/org/opendaylight/mdsal/eos/binding/api/EntityOwnershipService.java @@ -28,7 +28,7 @@ public interface EntityOwnershipService extends Registration registerCandidate(Entity entity) throws CandidateAlreadyRegisteredException; @Override - EntityOwnershipListenerRegistration registerListener(String entityType, EntityOwnershipListener listener); + Registration registerListener(String entityType, EntityOwnershipListener listener); @Override Optional getOwnershipState(Entity forEntity); diff --git a/entityownership/mdsal-eos-common-api/src/main/java/org/opendaylight/mdsal/eos/common/api/GenericEntityOwnershipListenerRegistration.java b/entityownership/mdsal-eos-common-api/src/main/java/org/opendaylight/mdsal/eos/common/api/GenericEntityOwnershipListenerRegistration.java deleted file mode 100644 index 8e1478dfc6..0000000000 --- a/entityownership/mdsal-eos-common-api/src/main/java/org/opendaylight/mdsal/eos/common/api/GenericEntityOwnershipListenerRegistration.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2015 Brocade Communications Systems, Inc. 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.mdsal.eos.common.api; - -import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.yangtools.concepts.HierarchicalIdentifier; -import org.opendaylight.yangtools.concepts.ObjectRegistration; - -/** - * An interface that records a request to register a ownership status change listener for a given Entity. - * Calling close on the registration will unregister listeners and future ownership changes will not - * be delivered to the listener. - * - * @author Thomas Pantelis - * - * @param

the instance identifier path type - */ -public interface GenericEntityOwnershipListenerRegistration

, - L extends GenericEntityOwnershipListener>>> - extends ObjectRegistration { - - /** - * getEntityType method returns not null entity type. - * - * @return the entity type that the listener was registered for - */ - @NonNull String getEntityType(); - - /** - * Unregister the listener. - */ - @Override - void close(); -} diff --git a/entityownership/mdsal-eos-common-api/src/main/java/org/opendaylight/mdsal/eos/common/api/GenericEntityOwnershipService.java b/entityownership/mdsal-eos-common-api/src/main/java/org/opendaylight/mdsal/eos/common/api/GenericEntityOwnershipService.java index d52ab1cbfa..69f640f845 100644 --- a/entityownership/mdsal-eos-common-api/src/main/java/org/opendaylight/mdsal/eos/common/api/GenericEntityOwnershipService.java +++ b/entityownership/mdsal-eos-common-api/src/main/java/org/opendaylight/mdsal/eos/common/api/GenericEntityOwnershipService.java @@ -55,7 +55,7 @@ public interface GenericEntityOwnershipService

registerListener(@NonNull String entityType, @NonNull L listener); + @NonNull Registration registerListener(@NonNull String entityType, @NonNull L listener); /** * Gets the current ownership state information for an entity. diff --git a/entityownership/mdsal-eos-common-spi/pom.xml b/entityownership/mdsal-eos-common-spi/pom.xml deleted file mode 100644 index b4f14eb6aa..0000000000 --- a/entityownership/mdsal-eos-common-spi/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - 4.0.0 - - org.opendaylight.mdsal - dom-parent - 13.0.0-SNAPSHOT - ../../dom/dom-parent - - - mdsal-eos-common-spi - bundle - - - - org.eclipse.jdt - org.eclipse.jdt.annotation - - - org.opendaylight.mdsal - mdsal-eos-common-api - - - org.opendaylight.yangtools - concepts - - - - org.opendaylight.yangtools - mockito-configuration - - - - scm:git:http://git.opendaylight.org/gerrit/mdsal.git - scm:git:ssh://git.opendaylight.org:29418/mdsal.git - HEAD - https://wiki.opendaylight.org/view/MD-SAL:Main - - diff --git a/entityownership/mdsal-eos-common-spi/src/main/java/module-info.java b/entityownership/mdsal-eos-common-spi/src/main/java/module-info.java deleted file mode 100644 index d6d3164c52..0000000000 --- a/entityownership/mdsal-eos-common-spi/src/main/java/module-info.java +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (c) 2020 PANTHEON.tech, 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 - */ -module org.opendaylight.mdsal.eos.common.spi { - exports org.opendaylight.mdsal.eos.common.spi; - - requires transitive org.opendaylight.mdsal.eos.common.api; - - // Annotations - requires static transitive org.eclipse.jdt.annotation; -} diff --git a/entityownership/mdsal-eos-common-spi/src/main/java/org/opendaylight/mdsal/eos/common/spi/AbstractGenericEntityOwnershipListenerRegistration.java b/entityownership/mdsal-eos-common-spi/src/main/java/org/opendaylight/mdsal/eos/common/spi/AbstractGenericEntityOwnershipListenerRegistration.java deleted file mode 100644 index 9450bdef42..0000000000 --- a/entityownership/mdsal-eos-common-spi/src/main/java/org/opendaylight/mdsal/eos/common/spi/AbstractGenericEntityOwnershipListenerRegistration.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. 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.mdsal.eos.common.spi; - -import static java.util.Objects.requireNonNull; - -import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.mdsal.eos.common.api.GenericEntity; -import org.opendaylight.mdsal.eos.common.api.GenericEntityOwnershipChange; -import org.opendaylight.mdsal.eos.common.api.GenericEntityOwnershipListener; -import org.opendaylight.mdsal.eos.common.api.GenericEntityOwnershipListenerRegistration; -import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; -import org.opendaylight.yangtools.concepts.HierarchicalIdentifier; - -/** - * Abstract base class for an {@link GenericEntityOwnershipListenerRegistration}. - * - * @param

the instance identifier path type - * @param the GenericEntityOwnershipListener type - */ -public abstract class AbstractGenericEntityOwnershipListenerRegistration

, - L extends GenericEntityOwnershipListener>>> - extends AbstractObjectRegistration - implements GenericEntityOwnershipListenerRegistration { - - private final @NonNull String entityType; - - protected AbstractGenericEntityOwnershipListenerRegistration(@NonNull final L instance, - @NonNull final String entityType) { - super(instance); - this.entityType = requireNonNull(entityType, "entityType cannot be null"); - } - - @Override - public String getEntityType() { - return entityType; - } -} diff --git a/entityownership/mdsal-eos-common-spi/src/test/java/org/opendaylight/mdsal/eos/common/spi/AbstractGenericEntityOwnershipListenerRegistrationTest.java b/entityownership/mdsal-eos-common-spi/src/test/java/org/opendaylight/mdsal/eos/common/spi/AbstractGenericEntityOwnershipListenerRegistrationTest.java deleted file mode 100644 index 721119d6f9..0000000000 --- a/entityownership/mdsal-eos-common-spi/src/test/java/org/opendaylight/mdsal/eos/common/spi/AbstractGenericEntityOwnershipListenerRegistrationTest.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. 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.mdsal.eos.common.spi; - -import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.mock; - -import org.junit.Test; -import org.opendaylight.mdsal.eos.common.api.GenericEntityOwnershipListener; - -public class AbstractGenericEntityOwnershipListenerRegistrationTest - extends AbstractGenericEntityOwnershipListenerRegistration { - - @Test - public void basicTest() throws Exception { - assertTrue(this.getEntityType().contains("testEntity")); - } - - public AbstractGenericEntityOwnershipListenerRegistrationTest() { - super(mock(GenericEntityOwnershipListener.class), "testEntity"); - } - - @Override - protected void removeRegistration() { - // NOOP - } -} \ No newline at end of file diff --git a/entityownership/mdsal-eos-dom-api/src/main/java/org/opendaylight/mdsal/eos/dom/api/DOMEntityOwnershipListenerRegistration.java b/entityownership/mdsal-eos-dom-api/src/main/java/org/opendaylight/mdsal/eos/dom/api/DOMEntityOwnershipListenerRegistration.java deleted file mode 100644 index 22b4b3d927..0000000000 --- a/entityownership/mdsal-eos-dom-api/src/main/java/org/opendaylight/mdsal/eos/dom/api/DOMEntityOwnershipListenerRegistration.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (c) 2015 Brocade Communications Systems, Inc. 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.mdsal.eos.dom.api; - -import com.google.common.annotations.Beta; -import org.opendaylight.mdsal.eos.common.api.GenericEntityOwnershipListenerRegistration; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; - -/** - * DOM interface for GenericEntityOwnershipCandidateRegistration. - * - * @author Thomas Pantelis - */ -@Beta -public interface DOMEntityOwnershipListenerRegistration extends - GenericEntityOwnershipListenerRegistration { -} diff --git a/entityownership/mdsal-eos-dom-api/src/main/java/org/opendaylight/mdsal/eos/dom/api/DOMEntityOwnershipService.java b/entityownership/mdsal-eos-dom-api/src/main/java/org/opendaylight/mdsal/eos/dom/api/DOMEntityOwnershipService.java index 1202a685fe..6038c8a09a 100644 --- a/entityownership/mdsal-eos-dom-api/src/main/java/org/opendaylight/mdsal/eos/dom/api/DOMEntityOwnershipService.java +++ b/entityownership/mdsal-eos-dom-api/src/main/java/org/opendaylight/mdsal/eos/dom/api/DOMEntityOwnershipService.java @@ -27,8 +27,7 @@ public interface DOMEntityOwnershipService extends Registration registerCandidate(DOMEntity entity) throws CandidateAlreadyRegisteredException; @Override - DOMEntityOwnershipListenerRegistration registerListener(String entityType, - DOMEntityOwnershipListener listener); + Registration registerListener(String entityType, DOMEntityOwnershipListener listener); @Override Optional getOwnershipState(DOMEntity forEntity); diff --git a/entityownership/mdsal-eos-dom-simple/src/main/java/org/opendaylight/mdsal/eos/dom/simple/SimpleDOMEntityOwnershipService.java b/entityownership/mdsal-eos-dom-simple/src/main/java/org/opendaylight/mdsal/eos/dom/simple/SimpleDOMEntityOwnershipService.java index 64b9a985e5..693d47753f 100644 --- a/entityownership/mdsal-eos-dom-simple/src/main/java/org/opendaylight/mdsal/eos/dom/simple/SimpleDOMEntityOwnershipService.java +++ b/entityownership/mdsal-eos-dom-simple/src/main/java/org/opendaylight/mdsal/eos/dom/simple/SimpleDOMEntityOwnershipService.java @@ -29,10 +29,8 @@ import org.opendaylight.mdsal.eos.common.api.EntityOwnershipState; import org.opendaylight.mdsal.eos.dom.api.DOMEntity; import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipChange; import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListener; -import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListenerRegistration; import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService; import org.opendaylight.mdsal.eos.dom.simple.di.LocalDOMEntityOwnershipService; -import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; import org.opendaylight.yangtools.concepts.AbstractRegistration; import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; @@ -87,9 +85,7 @@ public sealed class SimpleDOMEntityOwnershipService implements DOMEntityOwnershi } @Override - public DOMEntityOwnershipListenerRegistration registerListener(final String entityType, - final DOMEntityOwnershipListener listener) { - + public Registration registerListener(final String entityType, final DOMEntityOwnershipListener listener) { final Collection owned; synchronized (entities) { owned = ImmutableList.copyOf(entities.row(entityType).values()); @@ -100,11 +96,19 @@ public sealed class SimpleDOMEntityOwnershipService implements DOMEntityOwnershi listeners.put(entityType, listener); } - for (DOMEntity entity : owned) { + for (var entity : owned) { notifyListener(listener, new DOMEntityOwnershipChange(entity, LOCAL_OWNERSHIP_GRANTED)); } LOG.debug("{}: registered listener {}", uuid, listener); - return new ListenerRegistration(entityType, listener); + return new AbstractRegistration() { + @Override + protected void removeRegistration() { + synchronized (listeners) { + listeners.remove(entityType, listener); + LOG.debug("{}: unregistered listener {}", uuid, listener); + } + } + }; } @Override @@ -139,7 +143,6 @@ public sealed class SimpleDOMEntityOwnershipService implements DOMEntityOwnershi } private void notifyListeners(final DOMEntity entity, final EntityOwnershipChangeState state) { - final DOMEntityOwnershipChange change = new DOMEntityOwnershipChange(entity, state); final Collection snap; @@ -147,18 +150,12 @@ public sealed class SimpleDOMEntityOwnershipService implements DOMEntityOwnershi snap = ImmutableList.copyOf(listeners.get(entity.getType())); } - for (DOMEntityOwnershipListener listener : snap) { + final var change = new DOMEntityOwnershipChange(entity, state); + for (var listener : snap) { notifyListener(listener, change); } } - void unregisterListener(final ListenerRegistration reg) { - synchronized (listeners) { - listeners.remove(reg.getEntityType(), reg.getInstance()); - LOG.debug("{}: unregistered listener {}", uuid, reg.getInstance()); - } - } - @Override public String toString() { final var helper = MoreObjects.toStringHelper(SimpleDOMEntityOwnershipService.class).add("uuid", uuid); @@ -170,24 +167,4 @@ public sealed class SimpleDOMEntityOwnershipService implements DOMEntityOwnershi } return helper.toString(); } - - private final class ListenerRegistration extends AbstractObjectRegistration - implements DOMEntityOwnershipListenerRegistration { - private final String entityType; - - ListenerRegistration(final String entityType, final DOMEntityOwnershipListener listener) { - super(listener); - this.entityType = requireNonNull(entityType); - } - - @Override - public String getEntityType() { - return entityType; - } - - @Override - protected void removeRegistration() { - unregisterListener(this); - } - } } diff --git a/entityownership/pom.xml b/entityownership/pom.xml index 3e90dedabd..e593cc8128 100644 --- a/entityownership/pom.xml +++ b/entityownership/pom.xml @@ -24,7 +24,6 @@ mdsal-eos-common-api - mdsal-eos-common-spi mdsal-eos-dom-api mdsal-eos-dom-simple mdsal-eos-binding-api diff --git a/features/odl-mdsal-eos-common/pom.xml b/features/odl-mdsal-eos-common/pom.xml index 59c6523064..b4b8847d56 100644 --- a/features/odl-mdsal-eos-common/pom.xml +++ b/features/odl-mdsal-eos-common/pom.xml @@ -31,9 +31,5 @@ org.opendaylight.mdsal mdsal-eos-common-api - - org.opendaylight.mdsal - mdsal-eos-common-spi - diff --git a/singleton-service/mdsal-singleton-dom-impl/src/main/java/org/opendaylight/mdsal/singleton/dom/impl/AbstractClusterSingletonServiceProviderImpl.java b/singleton-service/mdsal-singleton-dom-impl/src/main/java/org/opendaylight/mdsal/singleton/dom/impl/AbstractClusterSingletonServiceProviderImpl.java index e82a7eafce..abec8073bc 100644 --- a/singleton-service/mdsal-singleton-dom-impl/src/main/java/org/opendaylight/mdsal/singleton/dom/impl/AbstractClusterSingletonServiceProviderImpl.java +++ b/singleton-service/mdsal-singleton-dom-impl/src/main/java/org/opendaylight/mdsal/singleton/dom/impl/AbstractClusterSingletonServiceProviderImpl.java @@ -27,12 +27,12 @@ import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException import org.opendaylight.mdsal.eos.common.api.GenericEntity; import org.opendaylight.mdsal.eos.common.api.GenericEntityOwnershipChange; import org.opendaylight.mdsal.eos.common.api.GenericEntityOwnershipListener; -import org.opendaylight.mdsal.eos.common.api.GenericEntityOwnershipListenerRegistration; import org.opendaylight.mdsal.eos.common.api.GenericEntityOwnershipService; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration; import org.opendaylight.yangtools.concepts.HierarchicalIdentifier; +import org.opendaylight.yangtools.concepts.Registration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -47,16 +47,13 @@ import org.slf4j.LoggerFactory; * @param the GenericEntityOwnershipChange type * @param the GenericEntityOwnershipListener type * @param the GenericEntityOwnershipService type - * @param the GenericEntityOwnershipListenerRegistration type */ public abstract class AbstractClusterSingletonServiceProviderImpl

, E extends GenericEntity

, C extends GenericEntityOwnershipChange, G extends GenericEntityOwnershipListener, - S extends GenericEntityOwnershipService, - R extends GenericEntityOwnershipListenerRegistration> + S extends GenericEntityOwnershipService> implements ClusterSingletonServiceProvider, GenericEntityOwnershipListener { - private static final Logger LOG = LoggerFactory.getLogger(AbstractClusterSingletonServiceProviderImpl.class); @VisibleForTesting @@ -68,8 +65,8 @@ public abstract class AbstractClusterSingletonServiceProviderImpl

> serviceGroupMap = new ConcurrentHashMap<>(); /* EOS Entity Listeners Registration */ - private R serviceEntityListenerReg; - private R asyncCloseEntityListenerReg; + private Registration serviceEntityListenerReg; + private Registration asyncCloseEntityListenerReg; /** * Class constructor. @@ -85,8 +82,8 @@ public abstract class AbstractClusterSingletonServiceProviderImpl

serviceGroup; - ClusterSingletonServiceGroup existing = serviceGroupMap.get(serviceIdentifier); + final var existing = serviceGroupMap.get(serviceIdentifier); if (existing == null) { serviceGroup = createGroup(serviceIdentifier, new ArrayList<>(1)); serviceGroupMap.put(serviceIdentifier, serviceGroup); @@ -113,7 +110,7 @@ public abstract class AbstractClusterSingletonServiceProviderImpl

createGroup(final String serviceIdentifier, final List services) { return new ClusterSingletonServiceGroupImpl<>(serviceIdentifier, entityOwnershipService, - createEntity(SERVICE_ENTITY_TYPE, serviceIdentifier), - createEntity(CLOSE_SERVICE_ENTITY_TYPE, serviceIdentifier), services); + createEntity(SERVICE_ENTITY_TYPE, serviceIdentifier), + createEntity(CLOSE_SERVICE_ENTITY_TYPE, serviceIdentifier), services); } private void initializeOrRemoveGroup(final ClusterSingletonServiceGroup group) @@ -144,11 +141,10 @@ public abstract class AbstractClusterSingletonServiceProviderImpl

placeHolder; final ListenableFuture future; synchronized (this) { - final ClusterSingletonServiceGroup lookup = verifyNotNull(serviceGroupMap.get(serviceIdentifier)); + final var lookup = verifyNotNull(serviceGroupMap.get(serviceIdentifier)); future = lookup.unregisterService(reg); if (future == null) { return; @@ -172,7 +168,7 @@ public abstract class AbstractClusterSingletonServiceProviderImpl

services = placeHolder.getServices(); + final var services = placeHolder.getServices(); if (services.isEmpty()) { // No services, we are all done if (serviceGroupMap.remove(identifier, placeHolder)) { @@ -184,7 +180,7 @@ public abstract class AbstractClusterSingletonServiceProviderImpl

group = createGroup(identifier, services); + final var group = createGroup(identifier, services); verify(serviceGroupMap.replace(identifier, placeHolder, group)); placeHolder.setSuccessor(group); LOG.debug("Service group upgraded from {} to {}", placeHolder, group); @@ -205,17 +201,13 @@ public abstract class AbstractClusterSingletonServiceProviderImpl

> listGroupCloseListFuture = new ArrayList<>(); - - for (final ClusterSingletonServiceGroup serviceGroup : serviceGroupMap.values()) { - listGroupCloseListFuture.add(serviceGroup.closeClusterSingletonGroup()); - } - - final ListenableFuture> finalCloseFuture = Futures.allAsList(listGroupCloseListFuture); - Futures.addCallback(finalCloseFuture, new FutureCallback>() { - + final var futures = serviceGroupMap.values().stream() + .map(ClusterSingletonServiceGroup::closeClusterSingletonGroup) + .toList(); + final var future = Futures.allAsList(futures); + Futures.addCallback(future, new FutureCallback<>() { @Override - public void onSuccess(final List result) { + public void onSuccess(final List result) { cleanup(); } @@ -232,7 +224,7 @@ public abstract class AbstractClusterSingletonServiceProviderImpl

serviceHolder = serviceGroupMap.get(serviceIdentifier); + final var serviceHolder = serviceGroupMap.get(serviceIdentifier); if (serviceHolder != null) { serviceHolder.ownershipChanged(ownershipChange); } else { @@ -241,14 +233,13 @@ public abstract class AbstractClusterSingletonServiceProviderImpl

+ DOMEntityOwnershipService> implements DOMEntityOwnershipListener { public DOMClusterSingletonServiceProviderImpl() { @@ -45,8 +44,7 @@ public class DOMClusterSingletonServiceProviderImpl extends } @Override - protected DOMEntityOwnershipListenerRegistration registerListener(final String type, - final DOMEntityOwnershipService eos) { + protected Registration registerListener(final String type, final DOMEntityOwnershipService eos) { return eos.registerListener(type, this); } diff --git a/singleton-service/mdsal-singleton-dom-impl/src/test/java/org/opendaylight/mdsal/singleton/dom/impl/AbstractDOMClusterServiceProviderTest.java b/singleton-service/mdsal-singleton-dom-impl/src/test/java/org/opendaylight/mdsal/singleton/dom/impl/AbstractDOMClusterServiceProviderTest.java index be56f7f41b..818f7e5f3d 100644 --- a/singleton-service/mdsal-singleton-dom-impl/src/test/java/org/opendaylight/mdsal/singleton/dom/impl/AbstractDOMClusterServiceProviderTest.java +++ b/singleton-service/mdsal-singleton-dom-impl/src/test/java/org/opendaylight/mdsal/singleton/dom/impl/AbstractDOMClusterServiceProviderTest.java @@ -29,7 +29,6 @@ import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException import org.opendaylight.mdsal.eos.common.api.EntityOwnershipChangeState; import org.opendaylight.mdsal.eos.dom.api.DOMEntity; import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipChange; -import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListenerRegistration; import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration; @@ -95,9 +94,9 @@ public abstract class AbstractDOMClusterServiceProviderTest { @Mock public Registration mockDoubleEntityCandReg; @Mock - public DOMEntityOwnershipListenerRegistration mockEosEntityListReg; + public Registration mockEosEntityListReg; @Mock - public DOMEntityOwnershipListenerRegistration mockEosDoubleEntityListReg; + public Registration mockEosDoubleEntityListReg; public DOMClusterSingletonServiceProviderImpl clusterSingletonServiceProvider; public TestClusterSingletonService clusterSingletonService; -- 2.36.6