From: Tom Pantelis Date: Wed, 12 Aug 2015 04:59:46 +0000 (-0400) Subject: Bug 4105: Add Cars RPC to test entity ownership X-Git-Tag: release/beryllium~301 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=refs%2Fchanges%2F03%2F26803%2F1 Bug 4105: Add Cars RPC to test entity ownership Change-Id: I8e23698b64ef408ae157ca0d2e94ed1f272128c7 Signed-off-by: Tom Pantelis --- diff --git a/opendaylight/md-sal/samples/clustering-test-app/configuration/src/main/resources/initial/20-clustering-test-app.xml b/opendaylight/md-sal/samples/clustering-test-app/configuration/src/main/resources/initial/20-clustering-test-app.xml index f01970908c..dc479efebc 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/configuration/src/main/resources/initial/20-clustering-test-app.xml +++ b/opendaylight/md-sal/samples/clustering-test-app/configuration/src/main/resources/initial/20-clustering-test-app.xml @@ -31,6 +31,12 @@ binding-notification-broker + + + ns:entity-ownership-service + + entity-ownership-service + @@ -40,7 +46,7 @@ urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding?module=opendaylight-md-sal-binding&revision=2013-10-28 urn:opendaylight:params:xml:ns:yang:controller:config:clustering-it-provider?module=clustering-it-provider&revision=2014-08-19 - + urn:opendaylight:params:xml:ns:yang:controller:config:distributed-entity-ownership-service?module=distributed-entity-ownership-service&revision=2015-08-10 diff --git a/opendaylight/md-sal/samples/clustering-test-app/model/src/main/yang/car.yang b/opendaylight/md-sal/samples/clustering-test-app/model/src/main/yang/car.yang index eb02be7f0f..2f6079a32f 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/model/src/main/yang/car.yang +++ b/opendaylight/md-sal/samples/clustering-test-app/model/src/main/yang/car.yang @@ -76,5 +76,22 @@ module car { } rpc stop-stress-test { + + } + + rpc register-ownership { + input { + leaf car-id { + type string; + } + } + } + + rpc unregister-ownership { + input { + leaf car-id { + type string; + } + } } } \ No newline at end of file diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/pom.xml b/opendaylight/md-sal/samples/clustering-test-app/provider/pom.xml index 424def29ce..850160e8ba 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/pom.xml +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/pom.xml @@ -88,6 +88,10 @@ sal-binding-api ${mdsal.version} + + org.opendaylight.controller + sal-common-api + org.opendaylight.controller sal-common-util diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarProvider.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarProvider.java index 4b5819f81e..87aa45c808 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarProvider.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarProvider.java @@ -9,21 +9,25 @@ package org.opendaylight.controller.clustering.it.provider; import com.google.common.base.Stopwatch; import com.google.common.util.concurrent.Futures; - import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicLong; - import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +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.EntityOwnershipCandidate; +import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.CarId; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.CarService; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.Cars; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.CarsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.RegisterOwnershipInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.StressTestInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.UnregisterOwnershipInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.cars.CarEntry; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.cars.CarEntryBuilder; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @@ -40,12 +44,21 @@ public class CarProvider implements CarService { private static final Logger log = LoggerFactory.getLogger(PurchaseCarProvider.class); private final DataBroker dataProvider; + private final EntityOwnershipService ownershipService; + private static final Logger LOG = LoggerFactory.getLogger(CarProvider.class); + + private static final String ENTITY_TYPE = "cars"; + + + private final CarEntityOwnershipCandidate ownershipCandidate = new CarEntityOwnershipCandidate(); + private volatile Thread testThread; private volatile boolean stopThread; - public CarProvider(DataBroker dataProvider) { + public CarProvider(DataBroker dataProvider, EntityOwnershipService ownershipService) { this.dataProvider = dataProvider; + this.ownershipService = ownershipService; } private void stopThread() { @@ -139,4 +152,29 @@ public class CarProvider implements CarService { return Futures.immediateFuture(RpcResultBuilder.success().build()); } + + @Override + public Future> registerOwnership(RegisterOwnershipInput input) { + Entity entity = new Entity(ENTITY_TYPE, input.getCarId()); + try { + ownershipService.registerCandidate(entity, ownershipCandidate); + } catch (CandidateAlreadyRegisteredException e) { + return RpcResultBuilder.failed().withError(ErrorType.APPLICATION, + "Could not register for car " + input.getCarId(), e).buildFuture(); + } + + return RpcResultBuilder.success().buildFuture(); + } + + @Override + public Future> unregisterOwnership(UnregisterOwnershipInput input) { + return RpcResultBuilder.success().buildFuture(); + } + + private static class CarEntityOwnershipCandidate implements EntityOwnershipCandidate { + @Override + public void ownershipChanged(Entity entity, boolean wasOwner, boolean isOwner) { + LOG.info("ownershipChanged: entity: {}, wasOwner: {}, isOwner: ()", entity, wasOwner, isOwner); + } + } } diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/config/yang/config/clustering_it_provider/ClusteringItProviderModule.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/config/yang/config/clustering_it_provider/ClusteringItProviderModule.java index aa24d91063..45b4afaa6e 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/config/yang/config/clustering_it_provider/ClusteringItProviderModule.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/config/yang/config/clustering_it_provider/ClusteringItProviderModule.java @@ -54,7 +54,7 @@ public class ClusteringItProviderModule extends org.opendaylight.controller.conf people.setRpcRegistration(purchaseCarRpc); - CarProvider carProvider = new CarProvider(dataBrokerService); + CarProvider carProvider = new CarProvider(dataBrokerService, getOwnershipServiceDependency()); getRpcRegistryDependency().addRpcImplementation(CarService.class, carProvider); final BindingAwareBroker.RpcRegistration peopleRpcReg = getRpcRegistryDependency() diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/yang/clustering-it-provider.yang b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/yang/clustering-it-provider.yang index ff3f9a8e5c..8a802d37e9 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/yang/clustering-it-provider.yang +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/yang/clustering-it-provider.yang @@ -6,6 +6,7 @@ module clustering-it-provider { import config { prefix config; revision-date 2013-04-05; } import opendaylight-md-sal-binding { prefix mdsal; revision-date 2013-10-28; } + import opendaylight-entity-ownership-service { prefix entity-ownership-service; } description "This module contains the base YANG definitions for @@ -55,6 +56,15 @@ module clustering-it-provider { } } } + + container ownership-service { + uses config:service-ref { + refine type { + mandatory false; + config:required-identity entity-ownership-service:entity-ownership-service; + } + } + } } } }