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=461bd00f98f41273d5c4a59a042ea000d9dbff6f;hp=f12fda0aa11a91f93bfffd2d6eb002ec76fb7b5e;hb=1b37a887301c6b9159ddb76492c4a3a820c0dfe8;hpb=753515e8868a1a15982d3f2697439f522f273db5 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..461bd00f98 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,7 +78,7 @@ 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 = @@ -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); rpcServices.registerRpcListener(rpcListener); -// rpcProvisionRegistry.registerRouteChangeListener(routeChangeListener); -// rpcProvisionRegistry.setRoutedRpcDefaultDelegate(rpcImplementation); + registerRoutedRpcDelegate(); announceSupportedRpcs(); } + private void registerRoutedRpcDelegate() { + Set rpcIdentifiers = new HashSet<>(); + Set modules = schemaContext.getModules(); + for(Module module : modules){ + for(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 */ @@ -124,6 +139,7 @@ public class RpcManager extends AbstractUntypedActor { private void updateSchemaContext(final UpdateSchemaContext message) { schemaContext = message.getSchemaContext(); + registerRoutedRpcDelegate(); rpcBroker.tell(message, ActorRef.noSender()); } @@ -133,6 +149,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(); } }