From b47ac5dfbd7fb8e32f2e023a0ad7491c60a593e8 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 2a5e8f25fd..f67d4f9e1f 100644 --- a/features/mdsal/src/main/resources/features.xml +++ b/features/mdsal/src/main/resources/features.xml @@ -16,6 +16,7 @@ odl-yangtools-data-binding + odl-config-api mvn:org.opendaylight.controller/sal-common-api/${mdsal.version} mvn:org.opendaylight.controller/sal-common-impl/${mdsal.version} mvn:org.opendaylight.controller/sal-common-util/${mdsal.version} @@ -82,6 +83,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 3147b0493e..12cdd6b9f6 100644 --- a/opendaylight/commons/opendaylight/pom.xml +++ b/opendaylight/commons/opendaylight/pom.xml @@ -56,6 +56,7 @@ 0.3.0-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 29d8ae41df..1767fa6ee8 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 b502dac6a9..9b30c72d4c 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