/* * 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.singleton.dom.impl; import com.google.common.util.concurrent.ListenableFuture; import org.eclipse.jdt.annotation.Nullable; 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.singleton.common.api.ClusterSingletonService; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration; import org.opendaylight.yangtools.concepts.Identifiable; import org.opendaylight.yangtools.concepts.Path; /** * {@link ClusterSingletonServiceGroup} maintains a group of {@link ClusterSingletonService} instances. * All EntityOwnershipChange notifications have to applied to all registered services at the same time in the same * manner. All registered services have only one instantiated service instance in a cluster at one time on same * Cluster Node. This is realized via a double candidate approach where a service group instance maintains a candidate * registration for ownership of the service entity in the cluster and also a registration that acts as a guard to * ensure a service group instance has fully closed prior to relinquishing service ownership. To achieve ownership * of the service group, a service group candidate must hold ownership of both these entities. * * @param
the instance identifier path type
* @param , E extends GenericEntity ,
C extends GenericEntityOwnershipChange > implements Identifiable