Class McastServiceImpl

java.lang.Object
org.apache.catalina.tribes.membership.MembershipProviderBase
org.apache.catalina.tribes.membership.McastServiceImpl
All Implemented Interfaces:
MembershipProvider

public class McastServiceImpl extends MembershipProviderBase
A membership implementation using simple multicast. This is the representation of a multicast membership service. This class is responsible for maintaining a list of active cluster nodes in the cluster. If a node fails to send out a heartbeat, the node will be dismissed. This is the low level implementation that handles the multicasting sockets.
  • Field Details

    • MAX_PACKET_SIZE

      protected static final int MAX_PACKET_SIZE
      The maximum packet size.
      See Also:
    • sm

      protected static final StringManager sm
      The string manager for this class.
    • doRunSender

      protected volatile boolean doRunSender
      Flag to control the sender thread.
    • doRunReceiver

      protected volatile boolean doRunReceiver
      Flag to control the receiver thread.
    • startLevel

      protected volatile int startLevel
      The start level.
    • socket

      protected MulticastSocket socket
      Socket that we intend to listen to
    • member

      protected final MemberImpl member
      The local member that we intend to broadcast over and over again
    • address

      protected final InetAddress address
      The multicast address
    • port

      protected final int port
      The multicast port
    • timeToExpiration

      protected final long timeToExpiration
      The time it takes for a member to expire.
    • sendFrequency

      protected final long sendFrequency
      How often to we send out a broadcast saying we are alive, must be smaller than timeToExpiration
    • receivePacket

      protected DatagramPacket receivePacket
      Reuse the receivePacket, no need to create a new one every time
    • memberService

      protected final MembershipListener memberService
      The actual listener, for callback when stuff goes down
    • msgservice

      protected final MessageListener msgservice
      The actual listener for broadcast callbacks
    • receiver

      protected McastServiceImpl.ReceiverThread receiver
      Thread to listen for pings
    • sender

      Thread to send pings
    • mcastTTL

      protected final int mcastTTL
      Time to live for the multicast packets that are being sent out
    • mcastSoTimeout

      protected int mcastSoTimeout
      Read timeout on the mcast socket
    • mcastBindAddress

      protected final InetAddress mcastBindAddress
      bind address
    • recoveryCounter

      protected int recoveryCounter
      nr of times the system has to fail before a recovery is initiated
    • recoverySleepTime

      protected long recoverySleepTime
      The time the recovery thread sleeps between recovery attempts
    • recoveryEnabled

      protected boolean recoveryEnabled
      Add the ability to turn on/off recovery
    • localLoopbackDisabled

      protected final boolean localLoopbackDisabled
      disable/enable local loopback message
    • expiredMutex

      protected final Object expiredMutex
      Mutex for expired member checking.
  • Constructor Details

    • McastServiceImpl

      public McastServiceImpl(MemberImpl member, long sendFrequency, long expireTime, int port, InetAddress bind, InetAddress mcastAddress, int ttl, int soTimeout, MembershipListener service, MessageListener msgservice, boolean localLoopbackDisabled) throws IOException
      Create a new mcast service instance.
      Parameters:
      member - - the local member
      sendFrequency - - the time (ms) in between pings sent out
      expireTime - - the time (ms) for a member to expire
      port - - the mcast port
      bind - - the bind address (not sure this is used yet)
      mcastAddress - - the mcast address
      ttl - multicast ttl that will be set on the socket
      soTimeout - Socket timeout
      service - - the callback service
      msgservice - Message listener
      localLoopbackDisabled - - disable loopbackMode
      Throws:
      IOException - Init error
  • Method Details

    • init

      public void init() throws IOException
      Initialize the mcast service.
      Throws:
      IOException - if initialization fails
    • setupSocket

      protected void setupSocket() throws IOException
      Setup the multicast socket.
      Throws:
      IOException - if socket setup fails
    • start

      public void start(int level) throws IOException
      Description copied from interface: MembershipProvider
      Start the membership provider.
      Parameters:
      level - the readiness level
      • Channel.DEFAULT - will start all services
      • Channel.MBR_RX_SEQ - starts the membership receiver
      • Channel.MBR_TX_SEQ - starts the membership broadcaster
      Throws:
      IOException
    • stop

      public boolean stop(int level) throws IOException
      Description copied from interface: MembershipProvider
      Stop the membership provider.
      Parameters:
      level - the readiness level
      • Channel.DEFAULT - will stop all services
      • Channel.MBR_RX_SEQ - stops the membership receiver
      • Channel.MBR_TX_SEQ - stops the membership broadcaster
      Returns:
      true if successful
      Throws:
      IOException
    • receive

      public void receive() throws IOException
      Receive a datagram packet from the multicast socket with timeout.
      Throws:
      IOException - Received failed
    • checkExpired

      protected void checkExpired()
      Check for expired members.
    • send

      public void send(boolean checkexpired) throws IOException
      Send a ping.
      Parameters:
      checkexpired - true to check for expiration
      Throws:
      IOException - Send error
    • send

      public void send(boolean checkexpired, DatagramPacket packet) throws IOException
      Send a packet.
      Parameters:
      checkexpired - whether to check for expired members
      packet - the packet to send
      Throws:
      IOException - if send fails
    • getServiceStartTime

      public long getServiceStartTime()
      Get the service start time.
      Returns:
      the service start time
    • getRecoveryCounter

      public int getRecoveryCounter()
      Get the recovery counter.
      Returns:
      the recovery counter
    • isRecoveryEnabled

      public boolean isRecoveryEnabled()
      Check if recovery is enabled.
      Returns:
      true if recovery is enabled
    • getRecoverySleepTime

      public long getRecoverySleepTime()
      Get the recovery sleep time.
      Returns:
      the recovery sleep time
    • getChannel

      public Channel getChannel()
      Get the channel.
      Returns:
      the channel
    • setChannel

      public void setChannel(Channel channel)
      Set the channel.
      Parameters:
      channel - the channel to set
    • setRecoveryCounter

      public void setRecoveryCounter(int recoveryCounter)
      Set the recovery counter.
      Parameters:
      recoveryCounter - the recovery counter
    • setRecoveryEnabled

      public void setRecoveryEnabled(boolean recoveryEnabled)
      Set whether recovery is enabled.
      Parameters:
      recoveryEnabled - whether recovery is enabled
    • setRecoverySleepTime

      public void setRecoverySleepTime(long recoverySleepTime)
      Set the recovery sleep time.
      Parameters:
      recoverySleepTime - the recovery sleep time