Class RPCNetwork

java.lang.Object
com.yahoo.messagebus.network.rpc.RPCNetwork
All Implemented Interfaces:
com.yahoo.jrt.MethodHandler, Network
Direct Known Subclasses:
TestServer.VersionedRPCNetwork

public class RPCNetwork extends Object implements Network, com.yahoo.jrt.MethodHandler
An RPC implementation of the Network interface.
Author:
havardpe
  • Constructor Details

    • RPCNetwork

      public RPCNetwork(RPCNetworkParams params)
      Create an RPCNetwork. The servicePrefix is combined with session names to create service names. If the service prefix is 'a/b' and the session name is 'c', the resulting service name that identifies the session on the message bus will be 'a/b/c'
      Parameters:
      params - a complete set of parameters
  • Method Details

    • flushTargetPool

      protected void flushTargetPool()
      The network uses a cache of RPC targets (see RPCTargetPool) that allows it to save time by reusing open connections. It works by keeping a set of the most recently used targets open. Calling this method forces all unused connections to close immediately.
    • waitUntilReady

      public boolean waitUntilReady(double seconds)
      Description copied from interface: Network
      Waits for at most the given number of seconds for all dependencies to become ready.
      Specified by:
      waitUntilReady in interface Network
      Parameters:
      seconds - the timeout
      Returns:
      true if ready
    • allocServiceAddress

      public boolean allocServiceAddress(RoutingNode recipient)
      Description copied from interface: Network
      Resolves the service address of the recipient referenced by the given routing node. If a recipient can not be resolved, this method tags the node with an error. If this method succeeds, you need to invoke Network.freeServiceAddress(RoutingNode) once you are done with the service address.
      Specified by:
      allocServiceAddress in interface Network
      Parameters:
      recipient - the node whose service address to allocate
      Returns:
      true if a service address was allocated
    • freeServiceAddress

      public void freeServiceAddress(RoutingNode recipient)
      Description copied from interface: Network
      Frees the service address from the given routing node. This allows the network layer to track and close connections as required.
      Specified by:
      freeServiceAddress in interface Network
      Parameters:
      recipient - the node whose service address to free
    • attach

      public void attach(NetworkOwner owner)
      Description copied from interface: Network
      Attach the network layer to the given owner.
      Specified by:
      attach in interface Network
      Parameters:
      owner - owner of the network
    • registerSession

      public void registerSession(String session)
      Description copied from interface: Network
      Register a session name with the network layer. This will make the session visible to other nodes.
      Specified by:
      registerSession in interface Network
      Parameters:
      session - the session name
    • unregisterSession

      public void unregisterSession(String session)
      Description copied from interface: Network
      Unregister a session name with the network layer. This will make the session unavailable for other nodes.
      Specified by:
      unregisterSession in interface Network
      Parameters:
      session - session name
    • sync

      public void sync()
      Description copied from interface: Network
      Synchronize with internal threads. This method will handshake with all internal threads. This has the implicit effect of waiting for all active callbacks. Note that this method should never be invoked from a callback since that would make the thread wait for itself... forever. This method is typically used to untangle during session shutdown.
      Specified by:
      sync in interface Network
    • shutdown

      public void shutdown()
      Description copied from interface: Network
      Shuts down the network. This is a blocking call that waits for all scheduled tasks to complete.
      Specified by:
      shutdown in interface Network
    • getConnectionSpec

      public String getConnectionSpec()
      Description copied from interface: Network
      Returns a string that represents the connection specs of this network. It is in not a complete address since it know nothing of the sessions that run on it.
      Specified by:
      getConnectionSpec in interface Network
    • getMirror

      public com.yahoo.jrt.slobrok.api.IMirror getMirror()
      Description copied from interface: Network
      Returns a reference to a name server mirror.
      Specified by:
      getMirror in interface Network
    • invoke

      public void invoke(com.yahoo.jrt.Request request)
      Specified by:
      invoke in interface com.yahoo.jrt.MethodHandler
    • send

      public void send(Message msg, List<RoutingNode> recipients)
      Description copied from interface: Network
      Send a message to the given recipients. A RoutingNode contains all the necessary context for sending.
      Specified by:
      send in interface Network
      Parameters:
      msg - the message to send
      recipients - a list of routing leaf nodes resolved for the message
    • destroy

      public boolean destroy()
      Sets the destroyed flag to true. The very first time this method is called, it cleans up all its dependencies. Even if you retain a reference to this object, all of its content is allowed to be garbage collected.
      Returns:
      true if content existed and was destroyed
    • getVersion

      protected com.yahoo.component.Version getVersion()
      Returns the version of this network. This gets called when the "mbus.getVersion" method is invoked on this network, and is separated into its own function so that unit tests can override it to simulate other versions than current.
      Returns:
      the version to claim to be
    • resolveServiceAddress

      public Error resolveServiceAddress(RoutingNode recipient, String serviceName)
      Resolves and assigns a service address for the given recipient using the given address. This is called by the allocServiceAddress(RoutingNode) method. The target allocated here is released when the routing node calls freeServiceAddress(RoutingNode).
      Parameters:
      recipient - the recipient to assign the service address to
      serviceName - the name of the service to resolve
      Returns:
      any error encountered, or null
    • getSendAdapter

      public RPCSendAdapter getSendAdapter(com.yahoo.component.Version version)
      Determines and returns the send adapter that is compatible with the given version. If no adapter can be found, this method returns null.
      Parameters:
      version - the version for which to return an adapter
      Returns:
      the compatible adapter
    • getIdentity

      public Identity getIdentity()
      Returns the identity of this network.
    • getPort

      public int getPort()
      Returns the port number this network listens to.