# 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.

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `class`
  `McastServiceImpl.ReceiverThread`
  Thread that receives multicast packets.
  `protected static class`
  `McastServiceImpl.RecoveryThread`
  Thread that handles recovery.
  `class`
  `McastServiceImpl.SenderThread`
  Thread that sends multicast packets.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected final InetAddress`
  `address`
  The multicast address
  `protected boolean`
  `doRunReceiver`
  Flag to control the receiver thread.
  `protected boolean`
  `doRunSender`
  Flag to control the sender thread.
  `protected final Object`
  `expiredMutex`
  Mutex for expired member checking.
  `protected final boolean`
  `localLoopbackDisabled`
  disable/enable local loopback message
  `protected static final int`
  `MAX_PACKET_SIZE`
  The maximum packet size.
  `protected final InetAddress`
  `mcastBindAddress`
  bind address
  `protected int`
  `mcastSoTimeout`
  Read timeout on the mcast socket
  `protected final int`
  `mcastTTL`
  Time to live for the multicast packets that are being sent out
  `protected final MemberImpl`
  `member`
  The local member that we intend to broadcast over and over again
  `protected final MembershipListener`
  `memberService`
  The actual listener, for callback when stuff goes down
  `protected final MessageListener`
  `msgservice`
  The actual listener for broadcast callbacks
  `protected final int`
  `port`
  The multicast port
  `protected DatagramPacket`
  `receivePacket`
  Reuse the receivePacket, no need to create a new one every time
  `protected McastServiceImpl.ReceiverThread`
  `receiver`
  Thread to listen for pings
  `protected int`
  `recoveryCounter`
  nr of times the system has to fail before a recovery is initiated
  `protected boolean`
  `recoveryEnabled`
  Add the ability to turn on/off recovery
  `protected long`
  `recoverySleepTime`
  The time the recovery thread sleeps between recovery attempts
  `protected McastServiceImpl.SenderThread`
  `sender`
  Thread to send pings
  `protected final long`
  `sendFrequency`
  How often to we send out a broadcast saying we are alive, must be smaller than timeToExpiration
  `protected static final StringManager`
  `sm`
  The string manager for this class.
  `protected MulticastSocket`
  `socket`
  Socket that we intend to listen to
  `protected int`
  `startLevel`
  The start level.
  `protected final long`
  `timeToExpiration`
  The time it takes for a member to expire.

  ### Fields inherited from class MembershipProviderBase

  `executor, membership, membershipListener, service`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `McastServiceImpl(MemberImpl member, long sendFrequency, long expireTime, int port, InetAddress bind, InetAddress mcastAddress, int ttl, int soTimeout, MembershipListener service, MessageListener msgservice, boolean localLoopbackDisabled)`
  Create a new mcast service instance.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected void`
  `checkExpired()`
  Check for expired members.
  `Channel`
  `getChannel()`
  Get the channel.
  `int`
  `getRecoveryCounter()`
  Get the recovery counter.
  `long`
  `getRecoverySleepTime()`
  Get the recovery sleep time.
  `long`
  `getServiceStartTime()`
  Get the service start time.
  `void`
  `init()`
  Initialize the mcast service.
  `boolean`
  `isRecoveryEnabled()`
  Check if recovery is enabled.
  `void`
  `receive()`
  Receive a datagram packet from the multicast socket with timeout.
  `void`
  `send(boolean checkexpired)`
  Send a ping.
  `void`
  `send(boolean checkexpired, DatagramPacket packet)`
  Send a packet.
  `void`
  `setChannel(Channel channel)`
  Set the channel.
  `void`
  `setRecoveryCounter(int recoveryCounter)`
  Set the recovery counter.
  `void`
  `setRecoveryEnabled(boolean recoveryEnabled)`
  Set whether recovery is enabled.
  `void`
  `setRecoverySleepTime(long recoverySleepTime)`
  Set the recovery sleep time.
  `protected void`
  `setupSocket()`
  Setup the multicast socket.
  `void`
  `start(int level)`
  Start the membership provider.
  `boolean`
  `stop(int level)`
  Stop the membership provider.

  ### Methods inherited from class MembershipProviderBase

  `getMember, getMembers, hasMembers, init, setMembershipListener, setMembershipService`

  ### Methods inherited from class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### MAX_PACKET_SIZE

    protected static final int MAX_PACKET_SIZE
    The maximum packet size.
    See Also:
      - Constant Field Values

  - ### 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

    protected McastServiceImpl.SenderThread 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