From 12b67e056d4c2db7e2f80fce7758b8d28e0d54fe Mon Sep 17 00:00:00 2001 From: Tom Pantelis Date: Fri, 7 Aug 2015 12:55:48 -0400 Subject: [PATCH] Bug 4105: Added DistributedEntityOwnershipService and wiring Added a skeleton DistributedEntityOwnershipService impl class and config system wiring. I initially tried to instantiate it in the operational store module but it needs to be its own service and AFAIK you can only provide one service per module as createInstance returns a single AutoCloseable. So I created a new config yang and xml for distributed-entity-ownership-service. We also need a separate config yang service identity to allow for multiple impls - I put this in sal-common-api where the EntityOwnershipService is defined. Change-Id: I4883af2e749bca5c9dfdac69cf943017294435a3 Signed-off-by: Tom Pantelis --- .../mdsal/src/main/resources/features.xml | 2 + opendaylight/commons/opendaylight/pom.xml | 1 + .../md-sal/sal-clustering-config/pom.xml | 5 ++ .../06-clustered-entity-ownership.xml.conf | 39 +++++++++++++ opendaylight/md-sal/sal-common-api/pom.xml | 40 ++++++++++++++ ...opendaylight-entity-ownership-service.yang | 18 ++++++ .../DistributedEntityOwnershipService.java | 55 +++++++++++++++++++ ...dEntityOwnershipServiceProviderModule.java | 37 +++++++++++++ ...OwnershipServiceProviderModuleFactory.java | 13 +++++ .../distributed-entity-ownership-service.yang | 38 +++++++++++++ 10 files changed, 248 insertions(+) create mode 100644 opendaylight/md-sal/sal-clustering-config/src/main/resources/initial/06-clustered-entity-ownership.xml.conf create mode 100644 opendaylight/md-sal/sal-common-api/src/main/yang/opendaylight-entity-ownership-service.yang create mode 100644 opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipService.java create mode 100644 opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/distributed_entity_ownership_service/DistributedEntityOwnershipServiceProviderModule.java create mode 100644 opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/distributed_entity_ownership_service/DistributedEntityOwnershipServiceProviderModuleFactory.java create mode 100644 opendaylight/md-sal/sal-distributed-datastore/src/main/yang/distributed-entity-ownership-service.yang diff --git a/features/mdsal/src/main/resources/features.xml b/features/mdsal/src/main/resources/features.xml index cd45f09f12..4a82ecd854 100644 --- a/features/mdsal/src/main/resources/features.xml +++ b/features/mdsal/src/main/resources/features.xml @@ -17,6 +17,7 @@ odl-yangtools-data-binding + odl-config-api mvn:org.opendaylight.controller/sal-common/${mdsal.version} mvn:org.opendaylight.controller/sal-common-api/${mdsal.version} mvn:org.opendaylight.controller/sal-common-impl/${mdsal.version} @@ -98,6 +99,7 @@ odl-mdsal-remoterpc-connector odl-mdsal-distributed-datastore mvn:org.opendaylight.controller/sal-clustering-config/${project.version}/xml/config + mvn:org.opendaylight.controller/sal-clustering-config/${project.version}/xml/entityownershipconfig mvn:org.opendaylight.controller/sal-clustering-config/${project.version}/xml/akkaconf mvn:org.opendaylight.controller/sal-clustering-config/${project.version}/xml/moduleshardconf mvn:org.opendaylight.controller/sal-clustering-config/${project.version}/xml/moduleconf diff --git a/opendaylight/commons/opendaylight/pom.xml b/opendaylight/commons/opendaylight/pom.xml index 637af7df9b..7d0d66d811 100644 --- a/opendaylight/commons/opendaylight/pom.xml +++ b/opendaylight/commons/opendaylight/pom.xml @@ -56,6 +56,7 @@ 0.2.2-SNAPSHOT etc/opendaylight/karaf 05-clustering.xml + 06-clustered-entity-ownership.xml 00-netty.xml 01-md-sal.xml 04-xsql.xml diff --git a/opendaylight/md-sal/sal-clustering-config/pom.xml b/opendaylight/md-sal/sal-clustering-config/pom.xml index fb5cf0ecda..5a3dcdb1cf 100644 --- a/opendaylight/md-sal/sal-clustering-config/pom.xml +++ b/opendaylight/md-sal/sal-clustering-config/pom.xml @@ -36,6 +36,11 @@ xml config + + ${project.build.directory}/classes/initial/06-clustered-entity-ownership.xml.conf + xml + entityownershipconfig + ${project.build.directory}/classes/initial/akka.conf xml diff --git a/opendaylight/md-sal/sal-clustering-config/src/main/resources/initial/06-clustered-entity-ownership.xml.conf b/opendaylight/md-sal/sal-clustering-config/src/main/resources/initial/06-clustered-entity-ownership.xml.conf new file mode 100644 index 0000000000..06a1fcbda5 --- /dev/null +++ b/opendaylight/md-sal/sal-clustering-config/src/main/resources/initial/06-clustered-entity-ownership.xml.conf @@ -0,0 +1,39 @@ + + + + + + + + + prefix:distributed-entity-ownership-service-provider + distributed-entity-ownership-service-provider + + + operational-dom-store-spi:operational-dom-datastore + distributed-operational-store-service + + + + + + + entity-ownership:entity-ownership-service + + entity-ownership-service + /modules/module[type='distributed-entity-ownership-service-provider'][name='distributed-entity-ownership-service-provider'] + + + + + + + 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/sal-common-api/pom.xml b/opendaylight/md-sal/sal-common-api/pom.xml index cc3e1c2bda..6c72304c2b 100644 --- a/opendaylight/md-sal/sal-common-api/pom.xml +++ b/opendaylight/md-sal/sal-common-api/pom.xml @@ -15,6 +15,10 @@ com.google.guava guava + + org.opendaylight.controller + config-api + org.opendaylight.yangtools concepts @@ -33,6 +37,42 @@ + + + + org.opendaylight.yangtools + yang-maven-plugin + + + + generate-sources + + + + + org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl + ${salGeneratorPath} + + + org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator + ${jmxGeneratorPath} + + urn:opendaylight:params:xml:ns:yang:controller==org.opendaylight.controller.config.yang + + + + org.opendaylight.yangtools.yang.unified.doc.generator.maven.DocumentationGeneratorImpl + target/site/models + + + true + + + + + + + scm:git:http://git.opendaylight.org/gerrit/controller.git scm:git:ssh://git.opendaylight.org:29418/controller.git diff --git a/opendaylight/md-sal/sal-common-api/src/main/yang/opendaylight-entity-ownership-service.yang b/opendaylight/md-sal/sal-common-api/src/main/yang/opendaylight-entity-ownership-service.yang new file mode 100644 index 0000000000..f16f7c4430 --- /dev/null +++ b/opendaylight/md-sal/sal-common-api/src/main/yang/opendaylight-entity-ownership-service.yang @@ -0,0 +1,18 @@ +module opendaylight-entity-ownership-service { + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:entity-ownership-service"; + prefix "entity-ownership-service"; + + import config { prefix config; revision-date 2013-04-05; } + + description "EntityOwnershipService interface definition"; + + revision "2015-08-10" { + description "Initial revision"; + } + + identity entity-ownership-service { + base "config:service-type"; + config:java-class "org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService"; + } +} \ No newline at end of file diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipService.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipService.java new file mode 100644 index 0000000000..a4025c55af --- /dev/null +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipService.java @@ -0,0 +1,55 @@ +/* + * 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.controller.cluster.datastore.entityownership; + +import org.opendaylight.controller.cluster.datastore.DistributedDataStore; +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.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.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * The distributed implementation of the EntityOwnershipService. + * + * @author Thomas Pantelis + */ +public class DistributedEntityOwnershipService implements EntityOwnershipService, AutoCloseable { + private static final Logger LOG = LoggerFactory.getLogger(DistributedEntityOwnershipService.class); + + private final DistributedDataStore datastore; + + public DistributedEntityOwnershipService(DistributedDataStore datastore) { + this.datastore = datastore; + } + + public void start() { + LOG.info("DistributedEntityOwnershipService starting"); + } + + @Override + public EntityOwnershipCandidateRegistration registerCandidate(Entity entity, EntityOwnershipCandidate candidate) + throws CandidateAlreadyRegisteredException { + // TODO Auto-generated method stub + return null; + } + + @Override + public EntityOwnershipListenerRegistration registerListener(Entity entity, EntityOwnershipListener listener) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void close() { + } +} 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 new file mode 100644 index 0000000000..fd2f6a88fa --- /dev/null +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/distributed_entity_ownership_service/DistributedEntityOwnershipServiceProviderModule.java @@ -0,0 +1,37 @@ +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.sal.core.spi.data.DOMStore; + + +public class DistributedEntityOwnershipServiceProviderModule extends org.opendaylight.controller.config.yang.config.distributed_entity_ownership_service.AbstractDistributedEntityOwnershipServiceProviderModule { + public DistributedEntityOwnershipServiceProviderModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { + super(identifier, dependencyResolver); + } + + public DistributedEntityOwnershipServiceProviderModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.controller.config.yang.config.distributed_entity_ownership_service.DistributedEntityOwnershipServiceProviderModule oldModule, java.lang.AutoCloseable oldInstance) { + super(identifier, dependencyResolver, oldModule, oldInstance); + } + + @Override + public void customValidation() { + // add custom validation form module attributes here. + } + + @Override + public boolean canReuseInstance(AbstractDistributedEntityOwnershipServiceProviderModule oldModule) { + return true; + } + + @Override + public java.lang.AutoCloseable createInstance() { + DOMStore dataStore = getDataStoreDependency(); + Preconditions.checkArgument(dataStore instanceof DistributedDataStore, + "Injected DOMStore must be an instance of DistributedDataStore"); + DistributedEntityOwnershipService service = new DistributedEntityOwnershipService((DistributedDataStore)dataStore); + service.start(); + return service; + } +} diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/distributed_entity_ownership_service/DistributedEntityOwnershipServiceProviderModuleFactory.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/distributed_entity_ownership_service/DistributedEntityOwnershipServiceProviderModuleFactory.java new file mode 100644 index 0000000000..7d7447d4b0 --- /dev/null +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/distributed_entity_ownership_service/DistributedEntityOwnershipServiceProviderModuleFactory.java @@ -0,0 +1,13 @@ +/* +* Generated file +* +* Generated from: yang module name: distributed-entity-ownership-service yang module local name: distributed-entity-ownership-service-provider +* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator +* Generated at: Thu Aug 06 18:06:54 EDT 2015 +* +* Do not modify this file unless it is present under src/main directory +*/ +package org.opendaylight.controller.config.yang.config.distributed_entity_ownership_service; +public class DistributedEntityOwnershipServiceProviderModuleFactory extends org.opendaylight.controller.config.yang.config.distributed_entity_ownership_service.AbstractDistributedEntityOwnershipServiceProviderModuleFactory { + +} diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/yang/distributed-entity-ownership-service.yang b/opendaylight/md-sal/sal-distributed-datastore/src/main/yang/distributed-entity-ownership-service.yang new file mode 100644 index 0000000000..72c4d4ffd8 --- /dev/null +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/yang/distributed-entity-ownership-service.yang @@ -0,0 +1,38 @@ +module distributed-entity-ownership-service { + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:controller:config:distributed-entity-ownership-service"; + prefix "distributed-entity-ownership-service"; + + import config { prefix config; revision-date 2013-04-05; } + import opendaylight-operational-dom-datastore {prefix operational-dom-store-spi;} + import opendaylight-entity-ownership-service { prefix entity-ownership-service-spi; } + + description + "This module contains the base YANG definitions for the DistributedEntityOwnershipService implementation"; + + revision "2015-08-10" { + description "Initial revision."; + } + + // This is the definition of the service implementation as a module identity. + identity distributed-entity-ownership-service-provider { + base config:module-type; + config:provided-service entity-ownership-service-spi:entity-ownership-service; + config:java-name-prefix DistributedEntityOwnershipServiceProvider; + } + + // Augments the 'configuration' choice node under modules/module. + augment "/config:modules/config:module/config:configuration" { + case distributed-entity-ownership-service-provider { + when "/config:modules/config:module/config:type = 'distributed-entity-ownership-service-provider'"; + container data-store { + uses config:service-ref { + refine type { + mandatory false; + config:required-identity operational-dom-store-spi:operational-dom-datastore; + } + } + } + } + } +} \ No newline at end of file -- 2.36.6