From 649cf1dc04c9d9fd3b182b380cfd4291d11436db Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Thu, 13 Feb 2014 16:20:35 -0800 Subject: [PATCH] Fixed bug when RPC was not propagared - Fixed DOM Broker and BI Connector code - The refactoring was done so that DOM Broker does not get exposed to - BA Broker directly but rather through a proxy. This also fixes the issue where DOM Broker would not be initialized in BI Connector, therefore any messages from BA Broker would not flow to DOM Broker via BI Connector. Change-Id: Ia25a71787857c8d052a5dbd40e8237015d8c4d63 Signed-off-by: Abhishek Kumar --- .../connect/dom/BindingIndependentConnector.java | 13 ++++--------- .../md/sal/common/impl/routing/RoutingUtils.java | 2 +- .../sal/core/api/RpcProvisionRegistry.java | 2 +- .../controller/sal/dom/broker/BrokerImpl.xtend | 10 +++++++++- .../sal/dom/broker/ConsumerContextImpl.xtend | 2 +- .../controller/sal/dom/broker/MountPointImpl.java | 2 ++ .../broker/osgi/RpcProvisionRegistryProxy.java | 15 +++++++++++++++ 7 files changed, 33 insertions(+), 13 deletions(-) diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/connect/dom/BindingIndependentConnector.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/connect/dom/BindingIndependentConnector.java index 5b947a5922..e48ebbc057 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/connect/dom/BindingIndependentConnector.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/connect/dom/BindingIndependentConnector.java @@ -149,8 +149,6 @@ public class BindingIndependentConnector implements // private RpcProviderRegistryImpl baRpcRegistryImpl; - private org.opendaylight.controller.sal.dom.broker.spi.RpcRouter biRouter; - private NotificationProviderService baNotifyService; private NotificationPublishService domNotificationService; @@ -319,9 +317,6 @@ public class BindingIndependentConnector implements // baRpcRegistryImpl.registerRouterInstantiationListener(domToBindingRpcManager.getInstance()); baRpcRegistryImpl.registerGlobalRpcRegistrationListener(domToBindingRpcManager.getInstance()); } - if (biRpcRegistry instanceof org.opendaylight.controller.sal.dom.broker.spi.RpcRouter) { - biRouter = (org.opendaylight.controller.sal.dom.broker.spi.RpcRouter) biRpcRegistry; - } rpcForwarding = true; } } @@ -804,10 +799,10 @@ public class BindingIndependentConnector implements // @Override public Future> forwardToDomBroker(DataObject input) { - if(biRouter != null) { + if(biRpcRegistry != null) { CompositeNode xml = mappingService.toDataDom(input); CompositeNode wrappedXml = ImmutableCompositeNode.create(rpc, ImmutableList.> of(xml)); - RpcResult result = biRouter.invokeRpc(rpc, wrappedXml); + RpcResult result = biRpcRegistry.invokeRpc(rpc, wrappedXml); Object baResultValue = null; if (result.getResult() != null) { baResultValue = mappingService.dataObjectFromDataDom(outputClass.get(), result.getResult()); @@ -867,10 +862,10 @@ public class BindingIndependentConnector implements // @Override public Future> forwardToDomBroker(DataObject input) { - if(biRouter != null) { + if(biRpcRegistry != null) { CompositeNode xml = mappingService.toDataDom(input); CompositeNode wrappedXml = ImmutableCompositeNode.create(rpc,ImmutableList.>of(xml)); - RpcResult result = biRouter.invokeRpc(rpc, wrappedXml); + RpcResult result = biRpcRegistry.invokeRpc(rpc, wrappedXml); Object baResultValue = null; RpcResult baResult = Rpcs.getRpcResult(result.isSuccessful(), null, result.getErrors()); return Futures.>immediateFuture(baResult); diff --git a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/routing/RoutingUtils.java b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/routing/RoutingUtils.java index bfa4f36c18..274f084f01 100644 --- a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/routing/RoutingUtils.java +++ b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/routing/RoutingUtils.java @@ -42,7 +42,7 @@ public class RoutingUtils { private final Map> removal; private final Map> announcement; - public RouteChangeImpl(ImmutableMap> removal, ImmutableMap> announcement) { + public RouteChangeImpl(ImmutableMap> announcement, ImmutableMap> removal) { super(); this.removal = removal; this.announcement = announcement; diff --git a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/RpcProvisionRegistry.java b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/RpcProvisionRegistry.java index 24cb99f8c3..8a9d167865 100644 --- a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/RpcProvisionRegistry.java +++ b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/RpcProvisionRegistry.java @@ -14,7 +14,7 @@ import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; -public interface RpcProvisionRegistry extends BrokerService, RouteChangePublisher { +public interface RpcProvisionRegistry extends RpcImplementation, BrokerService, RouteChangePublisher { /** * Registers an implementation of the rpc. diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/BrokerImpl.xtend b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/BrokerImpl.xtend index aa5138a04d..8f734d7d4c 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/BrokerImpl.xtend +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/BrokerImpl.xtend @@ -73,7 +73,7 @@ public class BrokerImpl implements Broker, RpcProvisionRegistry, AutoCloseable { return session; } - protected def Future> invokeRpc(QName rpc, CompositeNode input) { + protected def Future> invokeRpcAsync(QName rpc, CompositeNode input) { val result = executor.submit([|router.invokeRpc(rpc, input)] as Callable>); return result; } @@ -135,5 +135,13 @@ public class BrokerImpl implements Broker, RpcProvisionRegistry, AutoCloseable { override > registerRouteChangeListener(L listener) { return router.registerRouteChangeListener(listener); } + + override invokeRpc(QName rpc,CompositeNode input){ + return router.invokeRpc(rpc,input) + } + + override getSupportedRpcs() { + return router.getSupportedRpcs(); + } } diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/ConsumerContextImpl.xtend b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/ConsumerContextImpl.xtend index e4808e9bd6..813f52b67d 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/ConsumerContextImpl.xtend +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/ConsumerContextImpl.xtend @@ -37,7 +37,7 @@ class ConsumerContextImpl implements ConsumerSession { } override rpc(QName rpc, CompositeNode input) { - return broker.invokeRpc(rpc, input); + return broker.invokeRpcAsync(rpc, input); } override T getService(Class service) { diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/MountPointImpl.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/MountPointImpl.java index 5a3e060a3c..a8bdddb510 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/MountPointImpl.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/MountPointImpl.java @@ -219,4 +219,6 @@ public class MountPointImpl implements MountProvisionInstance, SchemaContextProv L listener) { return rpcs.registerRouteChangeListener(listener); } + + } diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/osgi/RpcProvisionRegistryProxy.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/osgi/RpcProvisionRegistryProxy.java index e375e14cf2..e218a95782 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/osgi/RpcProvisionRegistryProxy.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/osgi/RpcProvisionRegistryProxy.java @@ -16,9 +16,13 @@ import org.opendaylight.controller.sal.core.api.RpcRegistrationListener; import org.opendaylight.controller.sal.core.api.RpcRoutingContext; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.RpcResult; +import org.opendaylight.yangtools.yang.data.api.CompositeNode; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; import org.osgi.framework.ServiceReference; +import java.util.Set; + public class RpcProvisionRegistryProxy extends AbstractBrokerServiceProxy implements RpcProvisionRegistry { @@ -45,4 +49,15 @@ public class RpcProvisionRegistryProxy extends AbstractBrokerServiceProxy> ListenerRegistration registerRouteChangeListener(L listener) { return getDelegate().registerRouteChangeListener(listener); } + + + @Override + public Set getSupportedRpcs() { + return getDelegate().getSupportedRpcs(); + } + + @Override + public RpcResult invokeRpc(QName rpc, CompositeNode input) { + return getDelegate().invokeRpc(rpc,input); + } } -- 2.36.6