X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-remoterpc-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fremote%2Frpc%2FRpcManager.java;h=1ade84bd0fc1bee9fb8ad8db9ac33939cf591422;hp=f12fda0aa11a91f93bfffd2d6eb002ec76fb7b5e;hb=9216287a4d1fc310f81f1956685f4e6deb7eefa8;hpb=86024f5f5c072e38b51e8367226ad166e3f42d0f 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 f12fda0aa1..1ade84bd0f 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 @@ -16,14 +16,18 @@ import akka.actor.SupervisorStrategy; import akka.japi.Function; import com.google.common.base.Preconditions; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Set; import org.opendaylight.controller.cluster.common.actor.AbstractUntypedActor; import org.opendaylight.controller.md.sal.dom.api.DOMRpcIdentifier; 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.spi.rpc.RpcRoutingStrategy; import org.opendaylight.controller.remote.rpc.messages.UpdateSchemaContext; import org.opendaylight.controller.remote.rpc.registry.RpcRegistry; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.slf4j.Logger; @@ -45,7 +49,6 @@ public class RpcManager extends AbstractUntypedActor { private ActorRef rpcRegistry; private final RemoteRpcProviderConfig config; private RpcListener rpcListener; - private RoutedRpcListener routeChangeListener; private RemoteRpcImplementation rpcImplementation; private final DOMRpcProviderService rpcProvisionRegistry; private final DOMRpcService rpcServices; @@ -75,11 +78,11 @@ public class RpcManager extends AbstractUntypedActor { LOG.debug("Create rpc registry and broker actors"); rpcRegistry = - getContext().actorOf(Props.create(RpcRegistry.class). + getContext().actorOf(RpcRegistry.props(). withMailbox(config.getMailBoxName()), config.getRpcRegistryName()); rpcBroker = - getContext().actorOf(RpcBroker.props(rpcServices, rpcRegistry). + getContext().actorOf(RpcBroker.props(rpcServices). withMailbox(config.getMailBoxName()), config.getRpcBrokerName()); final RpcRegistry.Messages.SetLocalRouter localRouter = new RpcRegistry.Messages.SetLocalRouter(rpcBroker); @@ -90,16 +93,28 @@ public class RpcManager extends AbstractUntypedActor { LOG.debug("Registers rpc listeners"); rpcListener = new RpcListener(rpcRegistry); - routeChangeListener = new RoutedRpcListener(rpcRegistry); - rpcImplementation = new RemoteRpcImplementation(rpcBroker, config); + rpcImplementation = new RemoteRpcImplementation(rpcRegistry, config); rpcServices.registerRpcListener(rpcListener); -// rpcProvisionRegistry.registerRouteChangeListener(routeChangeListener); -// rpcProvisionRegistry.setRoutedRpcDefaultDelegate(rpcImplementation); + registerRoutedRpcDelegate(); announceSupportedRpcs(); } + private void registerRoutedRpcDelegate() { + final Set rpcIdentifiers = new HashSet<>(); + final Set modules = schemaContext.getModules(); + for(final Module module : modules){ + for(final RpcDefinition rpcDefinition : module.getRpcs()){ + if(RpcRoutingStrategy.from(rpcDefinition).isContextBasedRouted()) { + LOG.debug("Adding routed rpcDefinition for path {}", rpcDefinition.getPath()); + rpcIdentifiers.add(DOMRpcIdentifier.create(rpcDefinition.getPath(), YangInstanceIdentifier.EMPTY)); + } + } + } + rpcProvisionRegistry.registerRpcImplementation(rpcImplementation, rpcIdentifiers); + } + /** * Add all the locally registered RPCs in the clustered routing table */ @@ -110,7 +125,9 @@ public class RpcManager extends AbstractUntypedActor { for (final RpcDefinition rpcDef : currentlySupportedRpc) { rpcs.add(DOMRpcIdentifier.create(rpcDef.getPath())); } - rpcListener.onRpcAvailable(rpcs); + if(!rpcs.isEmpty()) { + rpcListener.onRpcAvailable(rpcs); + } } @@ -124,6 +141,7 @@ public class RpcManager extends AbstractUntypedActor { private void updateSchemaContext(final UpdateSchemaContext message) { schemaContext = message.getSchemaContext(); + registerRoutedRpcDelegate(); rpcBroker.tell(message, ActorRef.noSender()); } @@ -133,6 +151,8 @@ public class RpcManager extends AbstractUntypedActor { new Function() { @Override public SupervisorStrategy.Directive apply(final Throwable t) { + LOG.error("An exception happened actor will be resumed", t); + return SupervisorStrategy.resume(); } }