From 0684451f34cc0cbdc677a345e1e04b21cbacac20 Mon Sep 17 00:00:00 2001 From: Vaclav Demcak Date: Fri, 22 Jul 2016 12:54:16 +0200 Subject: [PATCH 1/1] Add again mdsal-singleton but remove prefix DOM We have only one implementation of ClusterSingletonServiceProvider (DOM implementation) and we'd like to present it without DOM prefix. * remove DOM prefix from ConfigSubsystem yang * again add the odl-mdsal-singleton-dom feature * again add CSSProvider in 06-clustered-entity-ownership.xml file depends on: https://git.opendaylight.org/gerrit/#/c/42294/ Change-Id: Ieae0d462fe9fa523b2b1b18528759e0614b0225f Signed-off-by: Vaclav Demcak --- .../06-clustered-entity-ownership.xml.conf | 16 ++--- opendaylight/md-sal/sal-dom-config/pom.xml | 2 +- ...ClusterSingletonServiceProviderModule.java | 67 +++++++++++++++++++ ...SingletonServiceProviderModuleFactory.java | 35 ++++++++++ .../cluster-singleton-service-impl-cfg.yang | 22 +++--- .../cluster-singleton-service-spi-cfg.yang | 10 +-- 6 files changed, 124 insertions(+), 28 deletions(-) create mode 100644 opendaylight/md-sal/sal-dom-config/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/md/sal/config/impl/cluster/singleton/service/rev160718/ClusterSingletonServiceProviderModule.java create mode 100644 opendaylight/md-sal/sal-dom-config/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/md/sal/config/impl/cluster/singleton/service/rev160718/ClusterSingletonServiceProviderModuleFactory.java 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 index 7f693e275a..9eeeac2035 100644 --- 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 @@ -15,12 +15,10 @@ legacy-eos:legacy-entity-ownership-service-provider legacy-entity-ownership-service-provider - @@ -31,24 +29,20 @@ /modules/module[type='legacy-entity-ownership-service-provider'][name='legacy-entity-ownership-service-provider'] - urn:opendaylight:params:xml:ns:yang:controller:config:legacy-entity-ownership-service-provider?module=opendaylight-legacy-entity-ownership-service-provider&revision=2016-02-26 - diff --git a/opendaylight/md-sal/sal-dom-config/pom.xml b/opendaylight/md-sal/sal-dom-config/pom.xml index 24dd31736a..bf7e316c4a 100644 --- a/opendaylight/md-sal/sal-dom-config/pom.xml +++ b/opendaylight/md-sal/sal-dom-config/pom.xml @@ -28,7 +28,7 @@ org.opendaylight.mdsal - mdsal-singleton-common-api + mdsal-singleton-dom-impl diff --git a/opendaylight/md-sal/sal-dom-config/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/md/sal/config/impl/cluster/singleton/service/rev160718/ClusterSingletonServiceProviderModule.java b/opendaylight/md-sal/sal-dom-config/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/md/sal/config/impl/cluster/singleton/service/rev160718/ClusterSingletonServiceProviderModule.java new file mode 100644 index 0000000000..daeb0a59a4 --- /dev/null +++ b/opendaylight/md-sal/sal-dom-config/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/md/sal/config/impl/cluster/singleton/service/rev160718/ClusterSingletonServiceProviderModule.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2016 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.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.md.sal.config.impl.cluster.singleton.service.rev160718; + +import com.google.common.reflect.AbstractInvocationHandler; +import com.google.common.reflect.Reflection; +import java.lang.reflect.Method; +import org.opendaylight.controller.config.api.DependencyResolver; +import org.opendaylight.controller.config.api.ModuleIdentifier; +import org.opendaylight.controller.config.api.osgi.WaitingServiceTracker; +import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider; +import org.osgi.framework.BundleContext; + +/** + * @deprecated Replaced by blueprint wiring but remains for backwards compatibility until downstream users + * of the provided config system service are converted to blueprint. + */ +@Deprecated +public class ClusterSingletonServiceProviderModule extends AbstractClusterSingletonServiceProviderModule { + private BundleContext bundleContext; + + public ClusterSingletonServiceProviderModule(final ModuleIdentifier identifier, final DependencyResolver dependencyResolver) { + super(identifier, dependencyResolver); + } + + public ClusterSingletonServiceProviderModule(final ModuleIdentifier identifier, final DependencyResolver dependencyResolver, + final ClusterSingletonServiceProviderModule oldModule, final java.lang.AutoCloseable oldInstance) { + super(identifier, dependencyResolver, oldModule, oldInstance); + } + + + @Override + public AutoCloseable createInstance() { + final WaitingServiceTracker tracker = WaitingServiceTracker + .create(ClusterSingletonServiceProvider.class, bundleContext); + final ClusterSingletonServiceProvider service = tracker.waitForService(WaitingServiceTracker.FIVE_MINUTES); + + // Create a proxy to override close to close the ServiceTracker. The actual DOMClusterSingletonServiceProvider + // instance will be closed via blueprint. + return Reflection.newProxy(AutoCloseableDOMClusterSingletonServiceProvider.class, + new AbstractInvocationHandler() { + @Override + protected Object handleInvocation(final Object proxy, final Method method, final Object[] args) + throws Throwable { + if (method.getName().equals("close")) { + tracker.close(); + return null; + } else { + return method.invoke(service, args); + } + } + }); + } + + void setBundleContext(final BundleContext bundleContext) { + this.bundleContext = bundleContext; + } + + private static interface AutoCloseableDOMClusterSingletonServiceProvider + extends ClusterSingletonServiceProvider, AutoCloseable { + } +} \ No newline at end of file diff --git a/opendaylight/md-sal/sal-dom-config/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/md/sal/config/impl/cluster/singleton/service/rev160718/ClusterSingletonServiceProviderModuleFactory.java b/opendaylight/md-sal/sal-dom-config/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/md/sal/config/impl/cluster/singleton/service/rev160718/ClusterSingletonServiceProviderModuleFactory.java new file mode 100644 index 0000000000..0c4aecbfe6 --- /dev/null +++ b/opendaylight/md-sal/sal-dom-config/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/md/sal/config/impl/cluster/singleton/service/rev160718/ClusterSingletonServiceProviderModuleFactory.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2016 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.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.md.sal.config.impl.cluster.singleton.service.rev160718; + +import org.opendaylight.controller.config.api.DependencyResolver; +import org.osgi.framework.BundleContext; + +/** + * @deprecated Replaced by blueprint wiring but remains for backwards compatibility until downstream users + * of the provided config system service are converted to blueprint. + */ +@Deprecated +public class ClusterSingletonServiceProviderModuleFactory extends AbstractClusterSingletonServiceProviderModuleFactory { + @Override + public ClusterSingletonServiceProviderModule instantiateModule(final String instanceName, final DependencyResolver dependencyResolver, + final ClusterSingletonServiceProviderModule oldModule, final AutoCloseable oldInstance, final BundleContext bundleContext) { + final ClusterSingletonServiceProviderModule module = super.instantiateModule(instanceName, dependencyResolver, oldModule, + oldInstance, bundleContext); + module.setBundleContext(bundleContext); + return module; + } + + @Override + public ClusterSingletonServiceProviderModule instantiateModule(final String instanceName, final DependencyResolver dependencyResolver, + final BundleContext bundleContext) { + final ClusterSingletonServiceProviderModule module = super.instantiateModule(instanceName, dependencyResolver, bundleContext); + module.setBundleContext(bundleContext); + return module; + } +} \ No newline at end of file diff --git a/opendaylight/md-sal/sal-dom-config/src/main/yang/cluster-singleton-service-impl-cfg.yang b/opendaylight/md-sal/sal-dom-config/src/main/yang/cluster-singleton-service-impl-cfg.yang index 20c588c9ee..5cd909de2a 100644 --- a/opendaylight/md-sal/sal-dom-config/src/main/yang/cluster-singleton-service-impl-cfg.yang +++ b/opendaylight/md-sal/sal-dom-config/src/main/yang/cluster-singleton-service-impl-cfg.yang @@ -12,15 +12,15 @@ module cluster-singleton-service-impl { description "Initial revision"; } -// identity dom-cluster-singleton-service-impl { -// base config:module-type; -// config:provided-service spi:dom-cluster-singleton-service; -// config:java-name-prefix DOMClusterSingletonServiceProvider; -// } -// -// augment "/config:modules/config:module/config:configuration" { -// case dom-cluster-singleton-service-impl { -// when "/config:modules/config:module/config:type = 'dom-cluster-singleton-service-impl'"; -// } -// } + identity cluster-singleton-service-impl { + base config:module-type; + config:provided-service spi:cluster-singleton-service; + config:java-name-prefix ClusterSingletonServiceProvider; + } + + augment "/config:modules/config:module/config:configuration" { + case cluster-singleton-service-impl { + when "/config:modules/config:module/config:type = 'cluster-singleton-service-impl'"; + } + } } diff --git a/opendaylight/md-sal/sal-dom-config/src/main/yang/cluster-singleton-service-spi-cfg.yang b/opendaylight/md-sal/sal-dom-config/src/main/yang/cluster-singleton-service-spi-cfg.yang index 1d92534d9e..b98660822f 100644 --- a/opendaylight/md-sal/sal-dom-config/src/main/yang/cluster-singleton-service-spi-cfg.yang +++ b/opendaylight/md-sal/sal-dom-config/src/main/yang/cluster-singleton-service-spi-cfg.yang @@ -11,9 +11,9 @@ module cluster-singleton-service-spi { description "Initial revision"; } -// identity dom-cluster-singleton-service { -// base "config:service-type"; -// config:java-class "org.opendaylight.mdsal.singleton.dom.api.DOMClusterSingletonServiceProvider"; -// config:disable-osgi-service-registration; -// } + identity cluster-singleton-service { + base "config:service-type"; + config:java-class "org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider"; + config:disable-osgi-service-registration; + } } -- 2.36.6