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%2FRemoteRpcProvider.java;h=a1b6286a59c764aff95d57650e4356943ea44544;hp=d088f2284d65904cc90d3aa3d6f39a4ca2cc99aa;hb=dea515c8870769408b9bea29f555d6b71ff43211;hpb=28ad802448833cad483f185cfe442497ddc5c296 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 d088f2284d..a1b6286a59 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 @@ -11,18 +11,19 @@ package org.opendaylight.controller.remote.rpc; import akka.actor.ActorRef; import akka.actor.ActorSystem; +import java.util.Collection; +import org.opendaylight.controller.md.sal.dom.api.DOMRpcProviderService; +import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; import org.opendaylight.controller.remote.rpc.messages.UpdateSchemaContext; import org.opendaylight.controller.sal.core.api.Broker; import org.opendaylight.controller.sal.core.api.Provider; -import org.opendaylight.controller.sal.core.api.RpcProvisionRegistry; import org.opendaylight.controller.sal.core.api.model.SchemaService; +import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Collection; - /** * This is the base class which initialize all the actors, listeners and * default RPc implementation so remote invocation of rpcs. @@ -31,26 +32,37 @@ public class RemoteRpcProvider implements AutoCloseable, Provider, SchemaContext private static final Logger LOG = LoggerFactory.getLogger(RemoteRpcProvider.class); - private final ActorSystem actorSystem; - private final RpcProvisionRegistry rpcProvisionRegistry; + private final DOMRpcProviderService rpcProvisionRegistry; + + private ListenerRegistration schemaListenerRegistration; + private ActorSystem actorSystem; private Broker.ProviderSession brokerSession; private SchemaContext schemaContext; private ActorRef rpcManager; + private final RemoteRpcProviderConfig config; - public RemoteRpcProvider(ActorSystem actorSystem, RpcProvisionRegistry rpcProvisionRegistry) { + public RemoteRpcProvider(final ActorSystem actorSystem, final DOMRpcProviderService rpcProvisionRegistry) { this.actorSystem = actorSystem; this.rpcProvisionRegistry = rpcProvisionRegistry; + config = new RemoteRpcProviderConfig(actorSystem.settings().config()); } @Override public void close() throws Exception { - this.actorSystem.shutdown(); + if (actorSystem != null) { + actorSystem.shutdown(); + actorSystem = null; + } + if (schemaListenerRegistration != null) { + schemaListenerRegistration.close(); + schemaListenerRegistration = null; + } } @Override - public void onSessionInitiated(Broker.ProviderSession session) { - this.brokerSession = session; + public void onSessionInitiated(final Broker.ProviderSession session) { + brokerSession = session; start(); } @@ -60,21 +72,20 @@ public class RemoteRpcProvider implements AutoCloseable, Provider, SchemaContext } private void start() { - LOG.info("Starting all rpc listeners and actors."); - // Create actor to handle and sync routing table in cluster - SchemaService schemaService = brokerSession.getService(SchemaService.class); - schemaContext = schemaService.getGlobalContext(); + LOG.info("Starting remote rpc service..."); - rpcManager = actorSystem.actorOf(RpcManager.props(schemaContext, brokerSession, rpcProvisionRegistry), ActorConstants.RPC_MANAGER); - - LOG.debug("Rpc actors are created."); + final SchemaService schemaService = brokerSession.getService(SchemaService.class); + final DOMRpcService rpcService = brokerSession.getService(DOMRpcService.class); + schemaContext = schemaService.getGlobalContext(); + rpcManager = actorSystem.actorOf(RpcManager.props(schemaContext, + rpcProvisionRegistry, rpcService), config.getRpcManagerName()); + schemaListenerRegistration = schemaService.registerSchemaContextListener(this); + LOG.debug("rpc manager started"); } - @Override - public void onGlobalContextUpdated(SchemaContext schemaContext) { + public void onGlobalContextUpdated(final SchemaContext schemaContext) { this.schemaContext = schemaContext; rpcManager.tell(new UpdateSchemaContext(schemaContext), null); - } }