Class JGroupsTransport

java.lang.Object
org.infinispan.remoting.transport.jgroups.JGroupsTransport
All Implemented Interfaces:
Lifecycle, Transport, org.jgroups.ChannelListener, org.jgroups.stack.AddressGenerator

public class JGroupsTransport extends Object implements Transport, org.jgroups.ChannelListener, org.jgroups.stack.AddressGenerator
An encapsulation of a JGroups transport. JGroups transports can be configured using a variety of methods, usually by passing in one of the following properties:
  • configurationString - a JGroups configuration String
  • configurationXml - JGroups configuration XML as a String
  • configurationFile - String pointing to a JGroups XML configuration file
  • channelLookup - Fully qualified class name of a JGroupsChannelLookup instance
These are normally passed in as Properties in TransportConfigurationBuilder.withProperties(Properties) or in the Infinispan XML configuration file.
Since:
4.0
Author:
Manik Surtani, Galder Zamarreño
  • Field Details

    • CONFIGURATION_STRING

      public static final String CONFIGURATION_STRING
      See Also:
    • CONFIGURATION_XML

      public static final String CONFIGURATION_XML
      See Also:
    • CONFIGURATION_FILE

      public static final String CONFIGURATION_FILE
      See Also:
    • CHANNEL_LOOKUP

      public static final String CHANNEL_LOOKUP
      See Also:
    • CHANNEL_CONFIGURATOR

      public static final String CHANNEL_CONFIGURATOR
      See Also:
    • SOCKET_FACTORY

      public static final String SOCKET_FACTORY
      See Also:
    • REQUEST_FLAGS_UNORDERED

      public static final short REQUEST_FLAGS_UNORDERED
    • REQUEST_FLAGS_PER_SENDER

      public static final short REQUEST_FLAGS_PER_SENDER
    • REPLY_FLAGS

      public static final short REPLY_FLAGS
    • DEFAULT_JGROUPS_CONFIGURATION_FILE

      protected static final String DEFAULT_JGROUPS_CONFIGURATION_FILE
      See Also:
    • log

      public static final org.infinispan.util.logging.Log log
    • configuration

      protected GlobalConfiguration configuration
    • marshaller

      protected StreamingMarshaller marshaller
    • notifier

      protected CacheManagerNotifier notifier
    • timeService

      protected TimeService timeService
    • invocationHandler

      protected org.infinispan.remoting.inboundhandler.InboundInvocationHandler invocationHandler
    • timeoutExecutor

      protected ScheduledExecutorService timeoutExecutor
    • nonBlockingExecutor

      protected ExecutorService nonBlockingExecutor
    • jmxRegistration

      protected CacheManagerJmxRegistration jmxRegistration
    • metricsManager

      protected JGroupsMetricsManager metricsManager
    • connectChannel

      protected boolean connectChannel
    • disconnectChannel

      protected boolean disconnectChannel
    • closeChannel

      protected boolean closeChannel
    • props

      protected TypedProperties props
    • channel

      protected org.jgroups.JChannel channel
    • address

      protected Address address
    • physicalAddress

      protected Address physicalAddress
    • clusterView

      protected volatile ClusterView clusterView
  • Constructor Details

    • JGroupsTransport

      public JGroupsTransport(org.jgroups.JChannel channel)
      This form is used when the transport is created by an external source and passed in to the GlobalConfiguration.
      Parameters:
      channel - created and running channel to use
    • JGroupsTransport

      public JGroupsTransport()
  • Method Details

    • findFork

      public static org.jgroups.protocols.FORK findFork(org.jgroups.JChannel channel)
    • invokeRemotelyAsync

      public CompletableFuture<Map<Address,Response>> invokeRemotelyAsync(Collection<Address> recipients, ReplicableCommand command, ResponseMode mode, long timeout, ResponseFilter responseFilter, org.infinispan.remoting.inboundhandler.DeliverOrder deliverOrder, boolean anycast)
      Specified by:
      invokeRemotelyAsync in interface Transport
    • sendTo

      public void sendTo(Address destination, ReplicableCommand command, org.infinispan.remoting.inboundhandler.DeliverOrder deliverOrder)
      Description copied from interface: Transport
      Asynchronously sends the ReplicableCommand to the destination using the specified DeliverOrder.
      Specified by:
      sendTo in interface Transport
      Parameters:
      destination - the destination's Address.
      command - the ReplicableCommand to send.
      deliverOrder - the DeliverOrder to use.
    • sendToMany

      public void sendToMany(Collection<Address> targets, ReplicableCommand command, org.infinispan.remoting.inboundhandler.DeliverOrder deliverOrder)
      Description copied from interface: Transport
      Asynchronously sends the ReplicableCommand to the set of destination using the specified DeliverOrder.
      Specified by:
      sendToMany in interface Transport
      Parameters:
      targets - the collection of destination's Address. If null, it sends to all the members in the cluster.
      command - the ReplicableCommand to send.
      deliverOrder - the DeliverOrder to use.
    • invokeRemotely

      @Deprecated(forRemoval=true) public Map<Address,Response> invokeRemotely(Map<Address,ReplicableCommand> commands, ResponseMode mode, long timeout, ResponseFilter responseFilter, org.infinispan.remoting.inboundhandler.DeliverOrder deliverOrder, boolean anycast) throws Exception
      Deprecated, for removal: This API element is subject to removal in a future version.
      Specified by:
      invokeRemotely in interface Transport
      Throws:
      Exception
    • backupRemotely

      public BackupResponse backupRemotely(Collection<org.infinispan.xsite.XSiteBackup> backups, XSiteRequest<?> command)
      Specified by:
      backupRemotely in interface Transport
    • backupRemotely

      public <O> XSiteResponse<O> backupRemotely(org.infinispan.xsite.XSiteBackup backup, XSiteRequest<O> rpcCommand)
      Description copied from interface: Transport
      Sends a cross-site request to a remote site.

      Currently, no reply values are supported. Or the request completes successfully or it throws an Exception.

      If XSiteBackup.isSync() returns false, the XSiteResponse is only completed when the an ACK from the remote site is received. The invoker needs to make sure not to wait for the XSiteResponse.

      Specified by:
      backupRemotely in interface Transport
      Parameters:
      backup - The remote site.
      rpcCommand - The command to send.
      Returns:
      A XSiteResponse that is completed when the request is completed.
    • isCoordinator

      public boolean isCoordinator()
      Specified by:
      isCoordinator in interface Transport
      Returns:
      true if the current Channel is the coordinator of the cluster.
    • getCoordinator

      public Address getCoordinator()
      Specified by:
      getCoordinator in interface Transport
      Returns:
      the Address of the current coordinator.
    • getAddress

      public Address getAddress()
      Description copied from interface: Transport
      Retrieves the current cache instance's network address
      Specified by:
      getAddress in interface Transport
      Returns:
      an Address
    • getPhysicalAddresses

      public List<Address> getPhysicalAddresses()
      Description copied from interface: Transport
      Retrieves the current cache instance's physical network addresses. Some implementations might differentiate between logical and physical addresses in which case, this method allows clients to query the physical ones associated with the logical address. Implementations where logical and physical address are the same will simply return a single entry List that contains the same Address as Transport.getAddress().
      Specified by:
      getPhysicalAddresses in interface Transport
      Returns:
      an List of Address
    • getMembers

      public List<Address> getMembers()
      Description copied from interface: Transport
      Returns a list of members in the current cluster view.
      Specified by:
      getMembers in interface Transport
      Returns:
      a list of members. Typically, this would be defensively copied.
    • getMembersPhysicalAddresses

      public List<Address> getMembersPhysicalAddresses()
      Description copied from interface: Transport
      Returns physical addresses of members in the current cluster view.
      Specified by:
      getMembersPhysicalAddresses in interface Transport
      Returns:
      a list of physical addresses
    • isMulticastCapable

      public boolean isMulticastCapable()
      Description copied from interface: Transport
      Tests whether the transport supports true multicast
      Specified by:
      isMulticastCapable in interface Transport
      Returns:
      true if the transport supports true multicast
    • checkCrossSiteAvailable

      public void checkCrossSiteAvailable() throws CacheConfigurationException
      Description copied from interface: Transport
      Checks if this Transport is able to perform cross-site requests.
      Specified by:
      checkCrossSiteAvailable in interface Transport
      Throws:
      CacheConfigurationException - if cross-site isn't available.
    • localSiteName

      public String localSiteName()
      Specified by:
      localSiteName in interface Transport
      Returns:
      The local site name or null if this Transport cannot make cross-site requests.
    • localNodeName

      public String localNodeName()
      Specified by:
      localNodeName in interface Transport
      Returns:
      The local node name, defaults to the local node address.
    • start

      public void start()
      Description copied from interface: Lifecycle
      Invoked on component start
      Specified by:
      start in interface Lifecycle
      Specified by:
      start in interface Transport
    • initChannel

      protected void initChannel()
    • startJGroupsChannelIfNeeded

      protected void startJGroupsChannelIfNeeded()
      When overwriting this method, it allows third-party libraries to create a new behavior like: After JChannel has been created and before it is connected.
    • receiveClusterView

      protected void receiveClusterView(org.jgroups.View newView, boolean installIfFirst)
    • stop

      public void stop()
      Description copied from interface: Lifecycle
      Invoked on component stop
      Specified by:
      stop in interface Lifecycle
      Specified by:
      stop in interface Transport
    • getViewId

      public int getViewId()
      Specified by:
      getViewId in interface Transport
    • withView

      public CompletableFuture<Void> withView(int expectedViewId)
      Specified by:
      withView in interface Transport
      Returns:
      A CompletableFuture that completes when the transport has installed the expected view.
    • waitForView

      public void waitForView(int viewId) throws InterruptedException
      Specified by:
      waitForView in interface Transport
      Throws:
      InterruptedException
    • getLog

      public org.infinispan.util.logging.Log getLog()
      Specified by:
      getLog in interface Transport
    • getSitesView

      public Set<String> getSitesView()
      Description copied from interface: Transport
      Get the view of interconnected sites. If no cross site replication has been configured, this method returns null. Inspecting the site view can be useful to see if the different sites have managed to join each other, which is pre-requisite to get cross replication working.
      Specified by:
      getSitesView in interface Transport
      Returns:
      set containing the connected sites, or null if no cross site replication has been enabled.
    • isSiteCoordinator

      public boolean isSiteCoordinator()
      Specified by:
      isSiteCoordinator in interface Transport
      Returns:
      true if this node is a cross-site replication coordinator.
    • getRelayNodesAddress

      public Collection<Address> getRelayNodesAddress()
      Specified by:
      getRelayNodesAddress in interface Transport
      Returns:
      The current site coordinators Address.
    • isPrimaryRelayNode

      public boolean isPrimaryRelayNode()
      Specified by:
      isPrimaryRelayNode in interface Transport
    • invokeCommand

      public <T> CompletionStage<T> invokeCommand(Address target, ReplicableCommand command, ResponseCollector<T> collector, org.infinispan.remoting.inboundhandler.DeliverOrder deliverOrder, long timeout, TimeUnit unit)
      Description copied from interface: Transport
      Invoke a command on a single node and pass the response to a ResponseCollector.

      If the target is the local node, the command is never executed and ResponseCollector.finish() is called directly.

      Specified by:
      invokeCommand in interface Transport
    • invokeCommand

      public <T> CompletionStage<T> invokeCommand(Collection<Address> targets, ReplicableCommand command, ResponseCollector<T> collector, org.infinispan.remoting.inboundhandler.DeliverOrder deliverOrder, long timeout, TimeUnit unit)
      Description copied from interface: Transport
      Invoke a command on a collection of node and pass the responses to a ResponseCollector.

      If one of the targets is the local node, it is ignored. The command is only executed on the remote nodes.

      Specified by:
      invokeCommand in interface Transport
    • invokeCommandOnAll

      public <T> CompletionStage<T> invokeCommandOnAll(ReplicableCommand command, ResponseCollector<T> collector, org.infinispan.remoting.inboundhandler.DeliverOrder deliverOrder, long timeout, TimeUnit unit)
      Description copied from interface: Transport
      Invoke a command on all the nodes in the cluster and pass the responses to a ResponseCollector.

      The command is not executed locally and it is not sent across RELAY2 bridges to remote sites.

      Specified by:
      invokeCommandOnAll in interface Transport
    • invokeCommandOnAll

      public <T> CompletionStage<T> invokeCommandOnAll(Collection<Address> requiredTargets, ReplicableCommand command, ResponseCollector<T> collector, org.infinispan.remoting.inboundhandler.DeliverOrder deliverOrder, long timeout, TimeUnit unit)
      Description copied from interface: Transport
      Invoke a command on all the nodes in the cluster and pass the responses to a ResponseCollector.

      he command is not executed locally and it is not sent across RELAY2 bridges to remote sites.

      Specified by:
      invokeCommandOnAll in interface Transport
    • invokeCommandStaggered

      public <T> CompletionStage<T> invokeCommandStaggered(Collection<Address> targets, ReplicableCommand command, ResponseCollector<T> collector, org.infinispan.remoting.inboundhandler.DeliverOrder deliverOrder, long timeout, TimeUnit unit)
      Description copied from interface: Transport
      Invoke a command on a collection of nodes and pass the responses to a ResponseCollector.

      The command is only sent immediately to the first target, and there is an implementation-dependent delay before sending the command to each target. There is no delay if the target responds or leaves the cluster. The remaining targets are skipped if ResponseCollector.addResponse(Address, Response) returns a non-null value.

      The command is only executed on the remote nodes.

      Specified by:
      invokeCommandStaggered in interface Transport
    • invokeCommands

      public <T> CompletionStage<T> invokeCommands(Collection<Address> targets, Function<Address,ReplicableCommand> commandGenerator, ResponseCollector<T> collector, org.infinispan.remoting.inboundhandler.DeliverOrder deliverOrder, long timeout, TimeUnit timeUnit)
      Description copied from interface: Transport
      Invoke different commands on a collection of nodes and pass the responses to a ResponseCollector.

      The command is only executed on the remote nodes.

      Specified by:
      invokeCommands in interface Transport
    • raftManager

      public org.infinispan.remoting.transport.raft.RaftManager raftManager()
      Specified by:
      raftManager in interface Transport
      Returns:
      The RaftManager instance,
    • sendToAll

      public void sendToAll(ReplicableCommand command, org.infinispan.remoting.inboundhandler.DeliverOrder deliverOrder)
      Description copied from interface: Transport
      Asynchronously sends the ReplicableCommand to the entire cluster.
      Specified by:
      sendToAll in interface Transport
    • getChannel

      public org.jgroups.JChannel getChannel()
    • channelConnected

      public void channelConnected(org.jgroups.JChannel channel)
      Specified by:
      channelConnected in interface org.jgroups.ChannelListener
    • channelDisconnected

      public void channelDisconnected(org.jgroups.JChannel channel)
      Specified by:
      channelDisconnected in interface org.jgroups.ChannelListener
    • channelClosed

      public void channelClosed(org.jgroups.JChannel channel)
      Specified by:
      channelClosed in interface org.jgroups.ChannelListener
    • generateAddress

      public org.jgroups.Address generateAddress()
      Specified by:
      generateAddress in interface org.jgroups.stack.AddressGenerator
    • generateAddress

      public org.jgroups.Address generateAddress(String name)
      Specified by:
      generateAddress in interface org.jgroups.stack.AddressGenerator