Bug 4105: Add Cars RPC to test entity ownership 03/26803/1
authorTom Pantelis <tpanteli@brocade.com>
Wed, 12 Aug 2015 04:59:46 +0000 (00:59 -0400)
committerTom Pantelis <tpanteli@brocade.com>
Thu, 10 Sep 2015 19:18:52 +0000 (15:18 -0400)
Change-Id: I8e23698b64ef408ae157ca0d2e94ed1f272128c7
Signed-off-by: Tom Pantelis <tpanteli@brocade.com>
opendaylight/md-sal/samples/clustering-test-app/configuration/src/main/resources/initial/20-clustering-test-app.xml
opendaylight/md-sal/samples/clustering-test-app/model/src/main/yang/car.yang
opendaylight/md-sal/samples/clustering-test-app/provider/pom.xml
opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarProvider.java
opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/config/yang/config/clustering_it_provider/ClusteringItProviderModule.java
opendaylight/md-sal/samples/clustering-test-app/provider/src/main/yang/clustering-it-provider.yang

index f01970908cfa24f5cebacc4bb656256bbcd2a209..dc479efebcffd2a64f9aa88558458852589daa5a 100644 (file)
                         </type>
                         <name>binding-notification-broker</name>
                     </notification-service>
+                    <ownership-service>
+                        <type xmlns:ns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:entity-ownership-service">
+                            ns:entity-ownership-service
+                        </type>
+                        <name>entity-ownership-service</name>
+                    </ownership-service>
                 </module>
             </modules>
         </data>
@@ -40,7 +46,7 @@
     <required-capabilities>
         <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding?module=opendaylight-md-sal-binding&amp;revision=2013-10-28</capability>
         <capability>urn:opendaylight:params:xml:ns:yang:controller:config:clustering-it-provider?module=clustering-it-provider&amp;revision=2014-08-19</capability>
-
+        <capability>urn:opendaylight:params:xml:ns:yang:controller:config:distributed-entity-ownership-service?module=distributed-entity-ownership-service&amp;revision=2015-08-10</capability>
     </required-capabilities>
 
 </snapshot>
index eb02be7f0f1220c725346210d285aafa192a9ef8..2f6079a32f95b50f745b92e1bb0635bf04bfb339 100644 (file)
@@ -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
index 424def29ce308801e9ddc83bf12785be8fb7ef48..850160e8ba2427536a71fa60b6d59768eebf860e 100644 (file)
             <artifactId>sal-binding-api</artifactId>
             <version>${mdsal.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.controller</groupId>
+            <artifactId>sal-common-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.controller</groupId>
             <artifactId>sal-common-util</artifactId>
index 4b5819f81e25a5d5ae66e83b2862e6a28cd463e1..87aa45c8082cafb0dd8ed75823f0725eae7a38d1 100644 (file)
@@ -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.<Void>success().build());
     }
 
+
+    @Override
+    public Future<RpcResult<Void>> registerOwnership(RegisterOwnershipInput input) {
+        Entity entity = new Entity(ENTITY_TYPE, input.getCarId());
+        try {
+            ownershipService.registerCandidate(entity, ownershipCandidate);
+        } catch (CandidateAlreadyRegisteredException e) {
+            return RpcResultBuilder.<Void>failed().withError(ErrorType.APPLICATION,
+                    "Could not register for car " + input.getCarId(), e).buildFuture();
+        }
+
+        return RpcResultBuilder.<Void>success().buildFuture();
+    }
+
+    @Override
+    public Future<RpcResult<Void>> unregisterOwnership(UnregisterOwnershipInput input) {
+        return RpcResultBuilder.<Void>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);
+        }
+    }
 }
index aa24d91063f332bd53ffe8ca11f03cd8d96219af..45b4afaa6e4954c7ed13fac6f24791e77b7dd90c 100644 (file)
@@ -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<PeopleService> peopleRpcReg = getRpcRegistryDependency()
index ff3f9a8e5c19066802b330a5df3b1a786c225dd6..8a802d37e9bdd70e277cca0e104dbf6daaefaebc 100644 (file)
@@ -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;
+                    }
+                }
+            }
         }
     }
 }