<artifactId>mdsal-eos-common-api</artifactId>
<version>13.0.0-SNAPSHOT</version>
</dependency>
- <dependency>
- <groupId>org.opendaylight.mdsal</groupId>
- <artifactId>mdsal-eos-common-spi</artifactId>
- <version>13.0.0-SNAPSHOT</version>
- </dependency>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-eos-dom-api</artifactId>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-eos-common-api</artifactId>
</dependency>
- <dependency>
- <groupId>org.opendaylight.mdsal</groupId>
- <artifactId>mdsal-eos-common-spi</artifactId>
- </dependency>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-eos-dom-api</artifactId>
+++ /dev/null
-/*
- * 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<EntityOwnershipListener>
- 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
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;
}
@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
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;
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
@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<DOMEntityOwnershipListener> 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<EntityOwnershipChange> 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();
}
+++ /dev/null
-/*
- * 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<InstanceIdentifier<?>, EntityOwnershipListener> {
-}
Registration registerCandidate(Entity entity) throws CandidateAlreadyRegisteredException;
@Override
- EntityOwnershipListenerRegistration registerListener(String entityType, EntityOwnershipListener listener);
+ Registration registerListener(String entityType, EntityOwnershipListener listener);
@Override
Optional<EntityOwnershipState> getOwnershipState(Entity forEntity);
+++ /dev/null
-/*
- * 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 <P> the instance identifier path type
- */
-public interface GenericEntityOwnershipListenerRegistration<P extends HierarchicalIdentifier<P>,
- L extends GenericEntityOwnershipListener<P, ?
- extends GenericEntityOwnershipChange<P, ? extends GenericEntity<P>>>>
- extends ObjectRegistration<L> {
-
- /**
- * 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();
-}
* @param listener the listener that is interested in the entities
* @return a registration object that can be used to unregister the Listener
*/
- GenericEntityOwnershipListenerRegistration<P, L> 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.
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- 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
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.opendaylight.mdsal</groupId>
- <artifactId>dom-parent</artifactId>
- <version>13.0.0-SNAPSHOT</version>
- <relativePath>../../dom/dom-parent</relativePath>
- </parent>
-
- <artifactId>mdsal-eos-common-spi</artifactId>
- <packaging>bundle</packaging>
-
- <dependencies>
- <dependency>
- <groupId>org.eclipse.jdt</groupId>
- <artifactId>org.eclipse.jdt.annotation</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.mdsal</groupId>
- <artifactId>mdsal-eos-common-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>concepts</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>mockito-configuration</artifactId>
- </dependency>
- </dependencies>
- <scm>
- <connection>scm:git:http://git.opendaylight.org/gerrit/mdsal.git</connection>
- <developerConnection>scm:git:ssh://git.opendaylight.org:29418/mdsal.git</developerConnection>
- <tag>HEAD</tag>
- <url>https://wiki.opendaylight.org/view/MD-SAL:Main</url>
- </scm>
-</project>
+++ /dev/null
-/*
- * 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;
-}
+++ /dev/null
-/*
- * 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 <P> the instance identifier path type
- * @param <L> the GenericEntityOwnershipListener type
- */
-public abstract class AbstractGenericEntityOwnershipListenerRegistration<P extends HierarchicalIdentifier<P>,
- L extends GenericEntityOwnershipListener<P, ? extends GenericEntityOwnershipChange<P, ? extends GenericEntity<P>>>>
- extends AbstractObjectRegistration<L>
- implements GenericEntityOwnershipListenerRegistration<P, L> {
-
- 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;
- }
-}
+++ /dev/null
-/*
- * 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
+++ /dev/null
-/*
- * 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<YangInstanceIdentifier, DOMEntityOwnershipListener> {
-}
Registration registerCandidate(DOMEntity entity) throws CandidateAlreadyRegisteredException;
@Override
- DOMEntityOwnershipListenerRegistration registerListener(String entityType,
- DOMEntityOwnershipListener listener);
+ Registration registerListener(String entityType, DOMEntityOwnershipListener listener);
@Override
Optional<EntityOwnershipState> getOwnershipState(DOMEntity forEntity);
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;
}
@Override
- public DOMEntityOwnershipListenerRegistration registerListener(final String entityType,
- final DOMEntityOwnershipListener listener) {
-
+ public Registration registerListener(final String entityType, final DOMEntityOwnershipListener listener) {
final Collection<DOMEntity> owned;
synchronized (entities) {
owned = ImmutableList.copyOf(entities.row(entityType).values());
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
}
private void notifyListeners(final DOMEntity entity, final EntityOwnershipChangeState state) {
- final DOMEntityOwnershipChange change = new DOMEntityOwnershipChange(entity, state);
final Collection<DOMEntityOwnershipListener> snap;
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);
}
return helper.toString();
}
-
- private final class ListenerRegistration extends AbstractObjectRegistration<DOMEntityOwnershipListener>
- 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);
- }
- }
}
<modules>
<module>mdsal-eos-common-api</module>
- <module>mdsal-eos-common-spi</module>
<module>mdsal-eos-dom-api</module>
<module>mdsal-eos-dom-simple</module>
<module>mdsal-eos-binding-api</module>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-eos-common-api</artifactId>
</dependency>
- <dependency>
- <groupId>org.opendaylight.mdsal</groupId>
- <artifactId>mdsal-eos-common-spi</artifactId>
- </dependency>
</dependencies>
</project>
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;
* @param <C> the GenericEntityOwnershipChange type
* @param <G> the GenericEntityOwnershipListener type
* @param <S> the GenericEntityOwnershipService type
- * @param <R> the GenericEntityOwnershipListenerRegistration type
*/
public abstract class AbstractClusterSingletonServiceProviderImpl<P extends HierarchicalIdentifier<P>,
E extends GenericEntity<P>,
C extends GenericEntityOwnershipChange<P, E>,
G extends GenericEntityOwnershipListener<P, C>,
- S extends GenericEntityOwnershipService<P, E, G>,
- R extends GenericEntityOwnershipListenerRegistration<P, G>>
+ S extends GenericEntityOwnershipService<P, E, G>>
implements ClusterSingletonServiceProvider, GenericEntityOwnershipListener<P, C> {
-
private static final Logger LOG = LoggerFactory.getLogger(AbstractClusterSingletonServiceProviderImpl.class);
@VisibleForTesting
private final Map<String, ClusterSingletonServiceGroup<P, E, C>> serviceGroupMap = new ConcurrentHashMap<>();
/* EOS Entity Listeners Registration */
- private R serviceEntityListenerReg;
- private R asyncCloseEntityListenerReg;
+ private Registration serviceEntityListenerReg;
+ private Registration asyncCloseEntityListenerReg;
/**
* Class constructor.
*/
public final void initializeProvider() {
LOG.debug("Initialization method for ClusterSingletonService Provider {}", this);
- this.serviceEntityListenerReg = registerListener(SERVICE_ENTITY_TYPE, entityOwnershipService);
- this.asyncCloseEntityListenerReg = registerListener(CLOSE_SERVICE_ENTITY_TYPE, entityOwnershipService);
+ serviceEntityListenerReg = registerListener(SERVICE_ENTITY_TYPE, entityOwnershipService);
+ asyncCloseEntityListenerReg = registerListener(CLOSE_SERVICE_ENTITY_TYPE, entityOwnershipService);
}
@Override
"ClusterSingletonService identifier may not be null nor empty");
final ClusterSingletonServiceGroup<P, E, C> serviceGroup;
- ClusterSingletonServiceGroup<P, E, C> existing = serviceGroupMap.get(serviceIdentifier);
+ final var existing = serviceGroupMap.get(serviceIdentifier);
if (existing == null) {
serviceGroup = createGroup(serviceIdentifier, new ArrayList<>(1));
serviceGroupMap.put(serviceIdentifier, serviceGroup);
serviceGroup = existing;
}
- final ClusterSingletonServiceRegistration reg = new AbstractClusterSingletonServiceRegistration(service) {
+ final var reg = new AbstractClusterSingletonServiceRegistration(service) {
@Override
protected void removeRegistration() {
// We need to bounce the unregistration through a ordered lock in order not to deal with asynchronous
private ClusterSingletonServiceGroup<P, E, C> createGroup(final String serviceIdentifier,
final List<ClusterSingletonServiceRegistration> 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<P, E, C> group)
}
void removeRegistration(final String serviceIdentifier, final ClusterSingletonServiceRegistration reg) {
-
final PlaceholderGroup<P, E, C> placeHolder;
final ListenableFuture<?> future;
synchronized (this) {
- final ClusterSingletonServiceGroup<P, E, C> lookup = verifyNotNull(serviceGroupMap.get(serviceIdentifier));
+ final var lookup = verifyNotNull(serviceGroupMap.get(serviceIdentifier));
future = lookup.unregisterService(reg);
if (future == null) {
return;
final String identifier = placeHolder.getIdentifier();
LOG.debug("Service group {} closed", identifier);
- final List<ClusterSingletonServiceRegistration> services = placeHolder.getServices();
+ final var services = placeHolder.getServices();
if (services.isEmpty()) {
// No services, we are all done
if (serviceGroupMap.remove(identifier, placeHolder)) {
}
// Placeholder is being retired, we are reusing its services as the seed for the group.
- final ClusterSingletonServiceGroup<P, E, C> 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);
serviceEntityListenerReg = null;
}
- final List<ListenableFuture<?>> listGroupCloseListFuture = new ArrayList<>();
-
- for (final ClusterSingletonServiceGroup<P, E, C> serviceGroup : serviceGroupMap.values()) {
- listGroupCloseListFuture.add(serviceGroup.closeClusterSingletonGroup());
- }
-
- final ListenableFuture<List<Object>> finalCloseFuture = Futures.allAsList(listGroupCloseListFuture);
- Futures.addCallback(finalCloseFuture, new FutureCallback<List<?>>() {
-
+ 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<Object> result) {
cleanup();
}
public final void ownershipChanged(final C ownershipChange) {
LOG.debug("Ownership change for ClusterSingletonService Provider {}", ownershipChange);
final String serviceIdentifier = getServiceIdentifierFromEntity(ownershipChange.getEntity());
- final ClusterSingletonServiceGroup<P, E, C> serviceHolder = serviceGroupMap.get(serviceIdentifier);
+ final var serviceHolder = serviceGroupMap.get(serviceIdentifier);
if (serviceHolder != null) {
serviceHolder.ownershipChanged(ownershipChange);
} else {
}
/**
- * Method implementation registers a defined {@link GenericEntityOwnershipListenerRegistration} type
- * EntityOwnershipListenerRegistration.
+ * Method implementation registers the listener.
*
* @param entityType the type of the entity
* @param entityOwnershipServiceInst - EOS type
- * @return instance of EntityOwnershipListenerRegistration
+ * @return a {@link Registration}
*/
- protected abstract R registerListener(String entityType, S entityOwnershipServiceInst);
+ protected abstract Registration registerListener(String entityType, S entityOwnershipServiceInst);
/**
* Creates an extended {@link GenericEntity} instance.
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.singleton.common.api.ClusterSingletonServiceProvider;
+import org.opendaylight.yangtools.concepts.Registration;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
AbstractClusterSingletonServiceProviderImpl<YangInstanceIdentifier, DOMEntity,
DOMEntityOwnershipChange,
DOMEntityOwnershipListener,
- DOMEntityOwnershipService,
- DOMEntityOwnershipListenerRegistration>
+ DOMEntityOwnershipService>
implements DOMEntityOwnershipListener {
public DOMClusterSingletonServiceProviderImpl() {
}
@Override
- protected DOMEntityOwnershipListenerRegistration registerListener(final String type,
- final DOMEntityOwnershipService eos) {
+ protected Registration registerListener(final String type, final DOMEntityOwnershipService eos) {
return eos.registerListener(type, this);
}
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;
@Mock
public Registration mockDoubleEntityCandReg;
@Mock
- public DOMEntityOwnershipListenerRegistration mockEosEntityListReg;
+ public Registration mockEosEntityListReg;
@Mock
- public DOMEntityOwnershipListenerRegistration mockEosDoubleEntityListReg;
+ public Registration mockEosDoubleEntityListReg;
public DOMClusterSingletonServiceProviderImpl clusterSingletonServiceProvider;
public TestClusterSingletonService clusterSingletonService;