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=6bf84a9783b7edb9c91ca4cc9d68e47742ba1172;hp=d088f2284d65904cc90d3aa3d6f39a4ca2cc99aa;hb=a2b838f96589b502578fa4e15cef2769f886a378;hpb=fb3672246b683ba9070336b2ad458eed0256d23c 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..6bf84a9783 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 @@ -8,73 +8,51 @@ package org.opendaylight.controller.remote.rpc; - import akka.actor.ActorRef; import akka.actor.ActorSystem; -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.yang.model.api.SchemaContext; -import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; +import akka.actor.PoisonPill; +import com.google.common.base.Preconditions; +import org.opendaylight.mdsal.dom.api.DOMRpcProviderService; +import org.opendaylight.mdsal.dom.api.DOMRpcService; 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. */ -public class RemoteRpcProvider implements AutoCloseable, Provider, SchemaContextListener { - - private static final Logger LOG = LoggerFactory.getLogger(RemoteRpcProvider.class); - - private final ActorSystem actorSystem; - private final RpcProvisionRegistry rpcProvisionRegistry; - private Broker.ProviderSession brokerSession; - private SchemaContext schemaContext; - private ActorRef rpcManager; - - - public RemoteRpcProvider(ActorSystem actorSystem, RpcProvisionRegistry rpcProvisionRegistry) { - this.actorSystem = actorSystem; - this.rpcProvisionRegistry = rpcProvisionRegistry; - } - - @Override - public void close() throws Exception { - this.actorSystem.shutdown(); - } - - @Override - public void onSessionInitiated(Broker.ProviderSession session) { - this.brokerSession = session; - start(); - } - - @Override - public Collection getProviderFunctionality() { - return null; - } - - 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(); - - rpcManager = actorSystem.actorOf(RpcManager.props(schemaContext, brokerSession, rpcProvisionRegistry), ActorConstants.RPC_MANAGER); - - LOG.debug("Rpc actors are created."); - } - - - @Override - public void onGlobalContextUpdated(SchemaContext schemaContext) { - this.schemaContext = schemaContext; - rpcManager.tell(new UpdateSchemaContext(schemaContext), null); - - } +public class RemoteRpcProvider implements AutoCloseable { + + private static final Logger LOG = LoggerFactory.getLogger(RemoteRpcProvider.class); + + private final DOMRpcProviderService rpcProvisionRegistry; + private final RemoteRpcProviderConfig config; + private final ActorSystem actorSystem; + private final DOMRpcService rpcService; + + private ActorRef rpcManager; + + public RemoteRpcProvider(final ActorSystem actorSystem, final DOMRpcProviderService rpcProvisionRegistry, + final DOMRpcService rpcService, final RemoteRpcProviderConfig config) { + this.actorSystem = Preconditions.checkNotNull(actorSystem); + this.rpcProvisionRegistry = Preconditions.checkNotNull(rpcProvisionRegistry); + this.rpcService = Preconditions.checkNotNull(rpcService); + this.config = Preconditions.checkNotNull(config); + } + + @Override + public void close() { + if (rpcManager != null) { + LOG.info("Stopping RPC Manager at {}", rpcManager); + rpcManager.tell(PoisonPill.getInstance(), ActorRef.noSender()); + rpcManager = null; + } + } + + public void start() { + LOG.info("Starting Remote RPC service..."); + rpcManager = actorSystem.actorOf(RpcManager.props(rpcProvisionRegistry, rpcService, config), + config.getRpcManagerName()); + LOG.debug("RPC Manager started at {}", rpcManager); + } }