Class 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 Detail

      • 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 java.net.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 java.net.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 java.net.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
      • 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 java.net.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 java.lang.Object expiredMutex
        Mutex for expired member checking.
    • Constructor Detail

      • McastServiceImpl

        public McastServiceImpl​(MemberImpl member,
                                long sendFrequency,
                                long expireTime,
                                int port,
                                java.net.InetAddress bind,
                                java.net.InetAddress mcastAddress,
                                int ttl,
                                int soTimeout,
                                MembershipListener service,
                                MessageListener msgservice,
                                boolean localLoopbackDisabled)
                         throws java.io.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:
        java.io.IOException - Init error
    • Method Detail

      • init

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

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

        public void start​(int level)
                   throws java.io.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:
        java.io.IOException
      • stop

        public boolean stop​(int level)
                     throws java.io.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:
        java.io.IOException
      • receive

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

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

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

        public void send​(boolean checkexpired,
                         java.net.DatagramPacket packet)
                  throws java.io.IOException
        Send a packet.
        Parameters:
        checkexpired - whether to check for expired members
        packet - the packet to send
        Throws:
        java.io.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