From b09693b984ad221a7effeeec0d72ef20be3c4e65 Mon Sep 17 00:00:00 2001 From: Xin Chang Date: Sat, 29 Nov 2014 15:23:15 +0800 Subject: [PATCH] Fix bug 2449 in sal-remoterpc-connector Regarding to Moiz's comments, replace sender from null to ActorRef.noSender() in RpcManager.java Register SchemeContextListener with global SchemeService and push scheme context to RpcBroker Change-Id: Ia941f25f7b82a8146bf412389fbea5219c76f55a Signed-off-by: Xin Chang --- .../controller/remote/rpc/RemoteRpcProvider.java | 2 ++ .../opendaylight/controller/remote/rpc/RpcBroker.java | 11 ++++++++++- .../controller/remote/rpc/RpcManager.java | 1 + 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RemoteRpcProvider.java b/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RemoteRpcProvider.java index 8b4ce31d2e..d24ed5651a 100644 --- a/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RemoteRpcProvider.java +++ b/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RemoteRpcProvider.java @@ -73,6 +73,8 @@ public class RemoteRpcProvider implements AutoCloseable, Provider, SchemaContext config.getRpcManagerName()); LOG.debug("rpc manager started"); + + schemaService.registerSchemaContextListener(this); } @Override diff --git a/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RpcBroker.java b/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RpcBroker.java index 2046e419d9..31aac92051 100644 --- a/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RpcBroker.java +++ b/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RpcBroker.java @@ -13,14 +13,17 @@ import akka.actor.Props; import akka.dispatch.OnComplete; import akka.japi.Creator; import akka.japi.Pair; + import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.JdkFutureAdapters; import com.google.common.util.concurrent.ListenableFuture; + import org.opendaylight.controller.cluster.common.actor.AbstractUntypedActor; import org.opendaylight.controller.remote.rpc.messages.ExecuteRpc; import org.opendaylight.controller.remote.rpc.messages.InvokeRpc; import org.opendaylight.controller.remote.rpc.messages.RpcResponse; +import org.opendaylight.controller.remote.rpc.messages.UpdateSchemaContext; import org.opendaylight.controller.remote.rpc.registry.RpcRegistry; import org.opendaylight.controller.remote.rpc.utils.LatestEntryRoutingLogic; import org.opendaylight.controller.remote.rpc.utils.RoutingLogic; @@ -53,7 +56,7 @@ public class RpcBroker extends AbstractUntypedActor { private static final Logger LOG = LoggerFactory.getLogger(RpcBroker.class); private final Broker.ProviderSession brokerSession; private final ActorRef rpcRegistry; - private final SchemaContext schemaContext; + private SchemaContext schemaContext; private final RemoteRpcProviderConfig config; private RpcBroker(Broker.ProviderSession brokerSession, ActorRef rpcRegistry, @@ -75,9 +78,15 @@ public class RpcBroker extends AbstractUntypedActor { invokeRemoteRpc((InvokeRpc) message); } else if(message instanceof ExecuteRpc) { executeRpc((ExecuteRpc) message); + } else if(message instanceof UpdateSchemaContext) { + updateSchemaContext((UpdateSchemaContext) message); } } + private void updateSchemaContext(UpdateSchemaContext message) { + this.schemaContext = message.getSchemaContext(); + } + private void invokeRemoteRpc(final InvokeRpc msg) { if(LOG.isDebugEnabled()) { LOG.debug("Looking up the remote actor for rpc {}", msg.getRpc()); diff --git a/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RpcManager.java b/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RpcManager.java index a840712999..fb8822d07c 100644 --- a/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RpcManager.java +++ b/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RpcManager.java @@ -123,6 +123,7 @@ public class RpcManager extends AbstractUntypedActor { private void updateSchemaContext(UpdateSchemaContext message) { this.schemaContext = message.getSchemaContext(); + rpcBroker.tell(message, ActorRef.noSender()); } @Override -- 2.36.6