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. Need to fix this, could use java.nio and only need one thread to send and receive, or just use a timeout on the receive
  • 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
    • sendPacket

      protected DatagramPacket sendPacket
      Reuse the sendPacket, no need to create a new one every time
    • 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, locking wait
      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