From: Tom Pantelis Date: Fri, 24 Apr 2015 02:51:38 +0000 (+0000) Subject: Merge "Replaced Helium Notification Broker with new Notifcation Broker." X-Git-Tag: release/lithium~229 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=9d382baa1e291f3199089b00f2e9adf910c1f9a0;hp=e20fff4d018e95cefd1934d2be31e5cd692fe7fa Merge "Replaced Helium Notification Broker with new Notifcation Broker." --- diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/BindingNotificationAdapterModule.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/BindingNotificationAdapterModule.java index 903cb27c92..971153bc7b 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/BindingNotificationAdapterModule.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/BindingNotificationAdapterModule.java @@ -9,18 +9,17 @@ package org.opendaylight.controller.config.yang.md.sal.binding.impl; import org.opendaylight.controller.config.api.DependencyResolver; import org.opendaylight.controller.config.api.ModuleIdentifier; -import org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec; import org.opendaylight.controller.md.sal.binding.impl.BindingDOMNotificationServiceAdapter; +import org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec; import org.opendaylight.controller.md.sal.dom.api.DOMNotificationService; -import org.opendaylight.controller.sal.binding.codegen.impl.SingletonHolder; import org.opendaylight.controller.sal.core.api.Broker; public class BindingNotificationAdapterModule extends AbstractBindingNotificationAdapterModule { - public BindingNotificationAdapterModule(ModuleIdentifier identifier, DependencyResolver dependencyResolver) { + public BindingNotificationAdapterModule(final ModuleIdentifier identifier, final DependencyResolver dependencyResolver) { super(identifier, dependencyResolver); } - public BindingNotificationAdapterModule(ModuleIdentifier identifier, DependencyResolver dependencyResolver, org.opendaylight.controller.config.yang.md.sal.binding.impl.BindingNotificationAdapterModule oldModule, java.lang.AutoCloseable oldInstance) { + public BindingNotificationAdapterModule(final ModuleIdentifier identifier, final DependencyResolver dependencyResolver, final org.opendaylight.controller.config.yang.md.sal.binding.impl.BindingNotificationAdapterModule oldModule, final java.lang.AutoCloseable oldInstance) { super(identifier, dependencyResolver, oldModule, oldInstance); } @@ -34,7 +33,7 @@ public class BindingNotificationAdapterModule extends AbstractBindingNotificatio final BindingToNormalizedNodeCodec codec = getBindingMappingServiceDependency(); final Broker.ProviderSession session = getDomAsyncBrokerDependency().registerProvider(new DummyDOMProvider()); final DOMNotificationService notifService = session.getService(DOMNotificationService.class); - return new BindingDOMNotificationServiceAdapter(codec.getCodecRegistry(), notifService, SingletonHolder.INVOKER_FACTORY); + return new BindingDOMNotificationServiceAdapter(codec.getCodecRegistry(), notifService); } } diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/NotificationBrokerImplModule.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/NotificationBrokerImplModule.java index 415c9783da..154000038d 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/NotificationBrokerImplModule.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/NotificationBrokerImplModule.java @@ -7,7 +7,9 @@ */ package org.opendaylight.controller.config.yang.md.sal.binding.impl; -import com.google.common.util.concurrent.ListeningExecutorService; +import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService; +import org.opendaylight.controller.md.sal.binding.api.NotificationService; +import org.opendaylight.controller.md.sal.binding.compat.HeliumNotificationProviderServiceAdapter; import org.opendaylight.controller.sal.binding.codegen.impl.SingletonHolder; import org.opendaylight.controller.sal.binding.impl.NotificationBrokerImpl; @@ -17,14 +19,14 @@ import org.opendaylight.controller.sal.binding.impl.NotificationBrokerImpl; public final class NotificationBrokerImplModule extends org.opendaylight.controller.config.yang.md.sal.binding.impl.AbstractNotificationBrokerImplModule { - public NotificationBrokerImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, - org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { + public NotificationBrokerImplModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, + final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { super(identifier, dependencyResolver); } - public NotificationBrokerImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, - org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, - NotificationBrokerImplModule oldModule, java.lang.AutoCloseable oldInstance) { + public NotificationBrokerImplModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, + final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, + final NotificationBrokerImplModule oldModule, final java.lang.AutoCloseable oldInstance) { super(identifier, dependencyResolver, oldModule, oldInstance); } @@ -37,14 +39,20 @@ public final class NotificationBrokerImplModule extends @Override public java.lang.AutoCloseable createInstance() { + final NotificationPublishService notificationPublishService = getNotificationPublishAdapterDependency(); + final NotificationService notificationService = getNotificationAdapterDependency(); + + if(notificationPublishService != null & notificationService != null) { + return new HeliumNotificationProviderServiceAdapter(notificationPublishService, notificationService); + } + /* * FIXME: Switch to new broker (which has different threading model) * once this change is communicated with downstream users or * we will have adapter implementation which will honor Helium * threading model for notifications. */ - ListeningExecutorService listeningExecutor = SingletonHolder.getDefaultNotificationExecutor(); - NotificationBrokerImpl broker = new NotificationBrokerImpl(listeningExecutor); - return broker; + + return new NotificationBrokerImpl(SingletonHolder.getDefaultNotificationExecutor()); } } diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMNotificationServiceAdapter.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMNotificationServiceAdapter.java index cdf03fa552..2a31d34d01 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMNotificationServiceAdapter.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMNotificationServiceAdapter.java @@ -14,8 +14,6 @@ import org.opendaylight.controller.md.sal.binding.api.NotificationService; import org.opendaylight.controller.md.sal.binding.impl.BindingDOMAdapterBuilder.Factory; import org.opendaylight.controller.md.sal.dom.api.DOMNotificationService; import org.opendaylight.controller.md.sal.dom.api.DOMService; -import org.opendaylight.controller.sal.binding.codegen.impl.SingletonHolder; -import org.opendaylight.controller.sal.binding.spi.NotificationInvokerFactory; import org.opendaylight.yangtools.binding.data.codec.api.BindingNormalizedNodeSerializer; import org.opendaylight.yangtools.concepts.AbstractListenerRegistration; import org.opendaylight.yangtools.concepts.ListenerRegistration; @@ -34,7 +32,7 @@ public class BindingDOMNotificationServiceAdapter implements NotificationService private final BindingNormalizedNodeSerializer codec; private final DOMNotificationService domNotifService; - public BindingDOMNotificationServiceAdapter(final BindingNormalizedNodeSerializer codec, final DOMNotificationService domNotifService, final NotificationInvokerFactory notificationInvokerFactory) { + public BindingDOMNotificationServiceAdapter(final BindingNormalizedNodeSerializer codec, final DOMNotificationService domNotifService) { this.codec = codec; this.domNotifService = domNotifService; } @@ -72,8 +70,7 @@ public class BindingDOMNotificationServiceAdapter implements NotificationService protected NotificationService createInstance(final BindingToNormalizedNodeCodec codec, final ClassToInstanceMap delegates) { final DOMNotificationService domNotification = delegates.getInstance(DOMNotificationService.class); - final NotificationInvokerFactory invokerFactory = SingletonHolder.INVOKER_FACTORY; - return new BindingDOMNotificationServiceAdapter(codec.getCodecRegistry(), domNotification, invokerFactory); + return new BindingDOMNotificationServiceAdapter(codec.getCodecRegistry(), domNotification); } @Override diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/yang/opendaylight-binding-broker-impl.yang b/opendaylight/md-sal/sal-binding-broker/src/main/yang/opendaylight-binding-broker-impl.yang index ee130fdeeb..866cb844d1 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/yang/opendaylight-binding-broker-impl.yang +++ b/opendaylight/md-sal/sal-binding-broker/src/main/yang/opendaylight-binding-broker-impl.yang @@ -217,6 +217,29 @@ module opendaylight-sal-binding-broker-impl { } } + augment "/config:modules/config:module/config:configuration" { + case binding-notification-broker { + when "/config:modules/config:module/config:type = 'binding-notification-broker'"; + container notification-adapter { + uses config:service-ref { + refine type { + mandatory false; + config:required-identity binding-new-notification-service; + } + } + } + + container notification-publish-adapter { + uses config:service-ref { + refine type { + mandatory false; + config:required-identity binding-new-notification-publish-service; + } + } + } + } + } + augment "/config:modules/config:module/config:state" { case binding-notification-broker { when "/config:modules/config:module/config:type = 'binding-notification-broker'"; diff --git a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/test/DataBrokerTestCustomizer.java b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/test/DataBrokerTestCustomizer.java index 547d3498c0..2647477c0f 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/test/DataBrokerTestCustomizer.java +++ b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/test/DataBrokerTestCustomizer.java @@ -23,7 +23,6 @@ import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.opendaylight.controller.md.sal.dom.broker.impl.DOMNotificationRouter; import org.opendaylight.controller.md.sal.dom.broker.impl.SerializedDOMDataBroker; import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore; -import org.opendaylight.controller.sal.binding.codegen.impl.SingletonHolder; import org.opendaylight.controller.sal.binding.test.util.MockSchemaService; import org.opendaylight.controller.sal.core.api.model.SchemaService; import org.opendaylight.controller.sal.core.spi.data.DOMStore; @@ -77,8 +76,7 @@ public class DataBrokerTestCustomizer { } public NotificationService createNotificationService() { - return new BindingDOMNotificationServiceAdapter(bindingToNormalized.getCodecRegistry(), domNotificationRouter, - SingletonHolder.INVOKER_FACTORY); + return new BindingDOMNotificationServiceAdapter(bindingToNormalized.getCodecRegistry(), domNotificationRouter); } public NotificationPublishService createNotificationPublishService() { diff --git a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/util/BindingTestContext.java b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/util/BindingTestContext.java index a439e9ea26..1203a72dc3 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/util/BindingTestContext.java +++ b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/util/BindingTestContext.java @@ -20,19 +20,27 @@ import com.google.common.util.concurrent.MoreExecutors; import javassist.ClassPool; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.MountPointService; +import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService; +import org.opendaylight.controller.md.sal.binding.api.NotificationService; +import org.opendaylight.controller.md.sal.binding.compat.HeliumNotificationProviderServiceAdapter; import org.opendaylight.controller.md.sal.binding.compat.HeliumRpcProviderRegistry; import org.opendaylight.controller.md.sal.binding.compat.HydrogenDataBrokerAdapter; import org.opendaylight.controller.md.sal.binding.compat.HydrogenMountProvisionServiceAdapter; import org.opendaylight.controller.md.sal.binding.impl.BindingDOMDataBrokerAdapter; import org.opendaylight.controller.md.sal.binding.impl.BindingDOMMountPointServiceAdapter; +import org.opendaylight.controller.md.sal.binding.impl.BindingDOMNotificationPublishServiceAdapter; +import org.opendaylight.controller.md.sal.binding.impl.BindingDOMNotificationServiceAdapter; import org.opendaylight.controller.md.sal.binding.impl.BindingDOMRpcProviderServiceAdapter; import org.opendaylight.controller.md.sal.binding.impl.BindingDOMRpcServiceAdapter; import org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; +import org.opendaylight.controller.md.sal.dom.api.DOMNotificationPublishService; +import org.opendaylight.controller.md.sal.dom.api.DOMNotificationService; import org.opendaylight.controller.md.sal.dom.api.DOMRpcProviderService; import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; +import org.opendaylight.controller.md.sal.dom.broker.impl.DOMNotificationRouter; import org.opendaylight.controller.md.sal.dom.broker.impl.DOMRpcRouter; import org.opendaylight.controller.md.sal.dom.broker.impl.SerializedDOMDataBroker; import org.opendaylight.controller.md.sal.dom.broker.impl.mount.DOMMountPointServiceImpl; @@ -41,7 +49,6 @@ import org.opendaylight.controller.sal.binding.api.RpcConsumerRegistry; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; import org.opendaylight.controller.sal.binding.api.data.DataProviderService; import org.opendaylight.controller.sal.binding.api.mount.MountProviderService; -import org.opendaylight.controller.sal.binding.impl.NotificationBrokerImpl; import org.opendaylight.controller.sal.binding.impl.RootBindingAwareBroker; import org.opendaylight.controller.sal.core.api.Broker.ProviderSession; import org.opendaylight.controller.sal.core.api.BrokerService; @@ -65,7 +72,7 @@ public class BindingTestContext implements AutoCloseable { private RootBindingAwareBroker baBrokerImpl; - private NotificationBrokerImpl baNotifyImpl; + private HeliumNotificationProviderServiceAdapter baNotifyImpl; private BrokerImpl biBrokerImpl; @@ -93,6 +100,14 @@ public class BindingTestContext implements AutoCloseable { private BindingDOMRpcProviderServiceAdapter baProviderRpc; private DOMRpcRouter domRouter; + private NotificationPublishService publishService; + + private NotificationService listenService; + + private DOMNotificationPublishService domPublishService; + + private DOMNotificationService domListenService; + public DOMDataBroker getDomAsyncDataBroker() { @@ -249,7 +264,12 @@ public class BindingTestContext implements AutoCloseable { public void startBindingNotificationBroker() { checkState(executor != null); - baNotifyImpl = new NotificationBrokerImpl(executor); + final DOMNotificationRouter router = DOMNotificationRouter.create(16); + domPublishService = router; + domListenService = router; + publishService = new BindingDOMNotificationPublishServiceAdapter(codec, domPublishService); + listenService = new BindingDOMNotificationServiceAdapter(codec, domListenService); + baNotifyImpl = new HeliumNotificationProviderServiceAdapter(publishService,listenService); } diff --git a/opendaylight/md-sal/sal-binding-it/src/test/resources/controller.xml b/opendaylight/md-sal/sal-binding-it/src/test/resources/controller.xml index f9c4a043e5..7bfe254b17 100644 --- a/opendaylight/md-sal/sal-binding-it/src/test/resources/controller.xml +++ b/opendaylight/md-sal/sal-binding-it/src/test/resources/controller.xml @@ -76,6 +76,14 @@ prefix:binding-notification-broker binding-notification-broker + + prefix:binding-new-notification-service + binding-notification-adapter + + + prefix:binding-new-notification-publish-service + binding-notification-publish-adapter + prefix:binding-broker-impl @@ -162,10 +170,21 @@ prefix:dom-inmemory-data-broker inmemory-data-broker + dom:schema-service yang-schema-service + + + config-dom-store-spi:config-dom-datastore + config-store-service + + + + operational-dom-store-spi:operational-dom-datastore + operational-store-service + prefix:dom-broker-impl