Class MaxOneThreadPerSender

java.lang.Object
org.jgroups.util.SubmitToThreadPool
org.jgroups.util.MaxOneThreadPerSender
All Implemented Interfaces:
MessageProcessingPolicy
Direct Known Subclasses:
UnbatchOOBBatches

public class MaxOneThreadPerSender extends SubmitToThreadPool
MessageProcessingPolicy which processes regular messages and message batches by assigning a max of 1 thread per message from the same sender. So if we have senders A, B, C and D, we'll have no more than 4 threads handling regular unicasts and 4 threads handling regular multicasts.

See JGRP-2143 for details.

When using virtual threads, we probably don't need this anymore, and can use a virtual thread to send messages / message batches directly up to UNICAST or NAKACK.

Since:
4.0
  • Field Details

  • Constructor Details

    • MaxOneThreadPerSender

      public MaxOneThreadPerSender()
  • Method Details

    • dump

      public String dump()
    • reset

      public void reset()
      Description copied from interface: MessageProcessingPolicy
      To reset stats
    • init

      public void init(TP transport)
      Description copied from interface: MessageProcessingPolicy
      Called after creation. Implementations may want to cache the transport reference to get access to thread pools, message counters etc
      Specified by:
      init in interface MessageProcessingPolicy
      Overrides:
      init in class SubmitToThreadPool
    • destroy

      public void destroy()
      Description copied from interface: MessageProcessingPolicy
      Called before the transport is stopped
    • loopback

      public boolean loopback(Message msg, boolean oob)
      Description copied from interface: MessageProcessingPolicy
      Process a message that was not received from the transport but from above (e.g. the channel or a protocol), and needs to be looped back up because (1) the destination address is null (every multicast message is looped back) or (2) the destination address is the sender's address (unicast message to self).

      A message that is looped back can bypass cluster name matching.

      Specified by:
      loopback in interface MessageProcessingPolicy
      Overrides:
      loopback in class SubmitToThreadPool
      Parameters:
      msg - the message to be looped back up the stack.
      oob - true if the message is an OOB message
      Returns:
    • process

      public boolean process(Message msg, boolean oob)
      Description copied from interface: MessageProcessingPolicy
      Process a message received from the transport
      Specified by:
      process in interface MessageProcessingPolicy
      Overrides:
      process in class SubmitToThreadPool
      Parameters:
      msg - the message
      oob - true if the message is an OOB message
      Returns:
    • process

      public boolean process(MessageBatch batch, boolean oob)
      Description copied from interface: MessageProcessingPolicy
      Process a batch received from the transport
      Specified by:
      process in interface MessageProcessingPolicy
      Overrides:
      process in class SubmitToThreadPool
      Parameters:
      batch - the batch
      oob - true if the batch contains only OOB messages
      Returns:
    • viewChange

      public void viewChange(List<Address> members)