X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyang%2Fconfig%2Fdistributed_entity_ownership_service%2FDistributedEntityOwnershipServiceProviderModule.java;fp=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyang%2Fconfig%2Fdistributed_entity_ownership_service%2FDistributedEntityOwnershipServiceProviderModule.java;h=a7ea21f1ab31ab486d57650751ca565131add7d6;hp=c0a45852cc6db2e9a60bab225b757cb06c3068d5;hb=dceb9db7853dabfbd4abdfb3d886a79871097831;hpb=2608b7032d0d019f5125704609eaaa0590c4598a diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/distributed_entity_ownership_service/DistributedEntityOwnershipServiceProviderModule.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/distributed_entity_ownership_service/DistributedEntityOwnershipServiceProviderModule.java index c0a45852cc..a7ea21f1ab 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/distributed_entity_ownership_service/DistributedEntityOwnershipServiceProviderModule.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/distributed_entity_ownership_service/DistributedEntityOwnershipServiceProviderModule.java @@ -8,19 +8,21 @@ package org.opendaylight.controller.config.yang.config.distributed_entity_ownership_service; -import com.google.common.base.Preconditions; -import org.opendaylight.controller.cluster.datastore.DistributedDataStore; -import org.opendaylight.controller.cluster.datastore.entityownership.DistributedEntityOwnershipService; -import org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy.EntityOwnerSelectionStrategyConfig; -import org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy.EntityOwnerSelectionStrategyConfigReader; -import org.opendaylight.controller.cluster.datastore.utils.ActorContext; +import com.google.common.base.Optional; +import com.google.common.collect.ForwardingObject; import org.opendaylight.controller.config.api.DependencyResolver; import org.opendaylight.controller.config.api.ModuleIdentifier; -import org.opendaylight.controller.sal.core.spi.data.DOMStore; +import org.opendaylight.controller.config.api.osgi.WaitingServiceTracker; +import org.opendaylight.controller.md.sal.common.api.clustering.CandidateAlreadyRegisteredException; +import org.opendaylight.controller.md.sal.common.api.clustering.Entity; +import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipCandidateRegistration; +import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipListener; +import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipListenerRegistration; +import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService; +import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipState; import org.osgi.framework.BundleContext; public class DistributedEntityOwnershipServiceProviderModule extends AbstractDistributedEntityOwnershipServiceProviderModule { - private EntityOwnerSelectionStrategyConfig strategyConfig; private BundleContext bundleContext; public DistributedEntityOwnershipServiceProviderModule(final ModuleIdentifier identifier, @@ -36,7 +38,6 @@ public class DistributedEntityOwnershipServiceProviderModule extends AbstractDis @Override public void customValidation() { - strategyConfig = EntityOwnerSelectionStrategyConfigReader.loadStrategyWithConfig(bundleContext); } @Override @@ -46,17 +47,59 @@ public class DistributedEntityOwnershipServiceProviderModule extends AbstractDis @Override public AutoCloseable createInstance() { - // FIXME: EntityOwnership needs only the ActorContext, not the entire datastore - DOMStore dataStore = getDataStoreDependency(); - Preconditions.checkArgument(dataStore instanceof DistributedDataStore, - "Injected DOMStore must be an instance of DistributedDataStore"); - - final ActorContext context = ((DistributedDataStore)dataStore).getActorContext(); - return DistributedEntityOwnershipService.start(context, strategyConfig); + // The DistributedEntityOwnershipService is provided via blueprint so wait for and return it here for + // backwards compatibility. + WaitingServiceTracker tracker = WaitingServiceTracker.create( + EntityOwnershipService.class, bundleContext); + EntityOwnershipService delegate = tracker.waitForService(WaitingServiceTracker.FIVE_MINUTES); + return new ForwardingEntityOwnershipService(delegate, tracker); } public void setBundleContext(final BundleContext bundleContext) { - // What do we need from the bundle context? this.bundleContext = bundleContext; } + + private static class ForwardingEntityOwnershipService extends ForwardingObject + implements EntityOwnershipService, AutoCloseable { + private final EntityOwnershipService delegate; + private final AutoCloseable closeable; + + public ForwardingEntityOwnershipService(EntityOwnershipService delegate, AutoCloseable closeable) { + this.delegate = delegate; + this.closeable = closeable; + } + + @Override + public EntityOwnershipCandidateRegistration registerCandidate(Entity entity) + throws CandidateAlreadyRegisteredException { + return delegate().registerCandidate(entity); + } + + @Override + public EntityOwnershipListenerRegistration registerListener(String entityType, + EntityOwnershipListener listener) { + return delegate().registerListener(entityType, listener); + } + + @Override + public Optional getOwnershipState(Entity forEntity) { + return delegate().getOwnershipState(forEntity); + } + + @Override + public boolean isCandidateRegistered(Entity entity) { + return delegate().isCandidateRegistered(entity); + } + + @Override + protected EntityOwnershipService delegate() { + return delegate; + } + + @Override + public void close() throws Exception { + // We don't close the delegate as the life-cycle is controlled via blueprint. + closeable.close(); + } + } }