# 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