From: Tony Tkacik Date: Wed, 22 Jan 2014 13:41:40 +0000 (+0100) Subject: Fixed bug when global RPCs we're not forwarded X-Git-Tag: jenkins-controller-bulk-release-prepare-only-2-1~13^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=2705c12ece71bbf3961a2bb24bd809c2fff5886a Fixed bug when global RPCs we're not forwarded Change-Id: I2220530609cdbc02549637f92dd550ff657816d6 Signed-off-by: Tony Tkacik --- diff --git a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/RpcProviderRegistry.java b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/RpcProviderRegistry.java index cc764888cc..0fa85d530e 100644 --- a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/RpcProviderRegistry.java +++ b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/RpcProviderRegistry.java @@ -4,6 +4,7 @@ import org.opendaylight.controller.md.sal.common.api.routing.RouteChangePublishe import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RoutedRpcRegistration; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration; import org.opendaylight.controller.sal.binding.api.rpc.RpcContextIdentifier; +import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.RpcService; diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/RpcProviderRegistryImpl.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/RpcProviderRegistryImpl.java index ffc72657f0..f934571101 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/RpcProviderRegistryImpl.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/RpcProviderRegistryImpl.java @@ -56,6 +56,8 @@ public class RpcProviderRegistryImpl implements // private final String name; + private ListenerRegistry globalRpcListeners = ListenerRegistry.create(); + public String getName() { return name; } @@ -86,6 +88,7 @@ public class RpcProviderRegistryImpl implements // checkState(currentDelegate == null, "Rpc service is already registered"); LOG.debug("Registering {} as global implementation of {} in {}", implementation, type.getSimpleName(), this); RuntimeCodeHelper.setDelegate(publicProxy, implementation); + notifyGlobalRpcAdded(type); return new RpcProxyRegistration(type, implementation, this); } @@ -140,6 +143,17 @@ public class RpcProviderRegistryImpl implements // } } + private void notifyGlobalRpcAdded(Class type) { + for(ListenerRegistration listener : globalRpcListeners) { + try { + listener.getInstance().onGlobalRpcRegistered(type); + } catch (Exception e) { + LOG.error("Unhandled exception during invoking listener {}", e); + } + } + + } + private void notifyListenersRoutedCreated(RpcRouter router) { for (ListenerRegistration listener : routerInstantiationListener) { @@ -182,6 +196,16 @@ public class RpcProviderRegistryImpl implements // public interface RouterInstantiationListener extends EventListener { void onRpcRouterCreated(RpcRouter router); } + + public ListenerRegistration registerGlobalRpcRegistrationListener(GlobalRpcRegistrationListener listener) { + return globalRpcListeners.register(listener); + } + + public interface GlobalRpcRegistrationListener extends EventListener { + void onGlobalRpcRegistered(Class cls); + void onGlobalRpcUnregistered(Class cls); + + } private class RouteChangeForwarder implements RouteChangeListener, InstanceIdentifier> { 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 7ec1f6512d..1d6c271f9f 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 @@ -43,6 +43,7 @@ import org.opendaylight.controller.sal.binding.api.data.RuntimeDataProvider; import org.opendaylight.controller.sal.binding.api.rpc.RpcContextIdentifier; import org.opendaylight.controller.sal.binding.api.rpc.RpcRouter; import org.opendaylight.controller.sal.binding.impl.RpcProviderRegistryImpl; +import org.opendaylight.controller.sal.binding.impl.RpcProviderRegistryImpl.GlobalRpcRegistrationListener; import org.opendaylight.controller.sal.binding.impl.RpcProviderRegistryImpl.RouterInstantiationListener; import org.opendaylight.controller.sal.common.util.CommitHandlerTransactions; import org.opendaylight.controller.sal.common.util.Rpcs; @@ -304,6 +305,7 @@ public class BindingIndependentConnector implements // if (baRpcRegistry instanceof RpcProviderRegistryImpl) { baRpcRegistryImpl = (RpcProviderRegistryImpl) baRpcRegistry; 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; @@ -502,7 +504,8 @@ public class BindingIndependentConnector implements // */ private class DomToBindingRpcForwardingManager implements RouteChangeListener>, - RouterInstantiationListener { + RouterInstantiationListener, + GlobalRpcRegistrationListener { private final Map, DomToBindingRpcForwarder> forwarders = new WeakHashMap<>(); private RpcProviderRegistryImpl registryImpl; @@ -515,6 +518,15 @@ public class BindingIndependentConnector implements // this.registryImpl = registryImpl; } + @Override + public void onGlobalRpcRegistered(Class cls) { + getRpcForwarder(cls, null); + } + + @Override + public void onGlobalRpcUnregistered(Class cls) { + // NOOP + } @Override public void onRpcRouterCreated(RpcRouter router) {