Class ReplicationMessage

  • All Implemented Interfaces:
    java.io.Externalizable, java.io.Serializable

    public class ReplicationMessage
    extends java.lang.Object
    implements java.io.Externalizable
    This message is used for the communication between the master and the slave during Replication. The message is composed of a type flag and corresponding object. Each type flag indicating the type of the content bundled inside the message.
    See Also:
    Serialized Form
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.lang.Object message
      This is the content of the replication message.
      static long serialVersionUID
      The version number is determined based on the database version of the current database.
      private int type
      The valid values for the type of the content of the message are listed below.
      static int TYPE_ACK
      This flag is used to send an acknowledgment of successful completion of a requested operation.
      static int TYPE_ERROR
      Indicates that the requested operation was not able to be completed successfully.
      static int TYPE_FAILOVER
      Used to signal the slave that it must failover.
      static int TYPE_INITIATE_INSTANT
      Used during the intial handshake between the master and the slave.
      static int TYPE_INITIATE_VERSION
      used during the intial handshake between the master and the slave.
      static int TYPE_LOG
      This flag will be used for all messages that carry log records.
      static int TYPE_PING
      A message used to check if the replication network is working.
      static int TYPE_PONG
      A message sent as a response to a TYPE_PING message.
      static int TYPE_STOP
      Used to send a stop replication signal to the slave.
    • Constructor Summary

      Constructors 
      Constructor Description
      ReplicationMessage()
      public No args constructor required with Externalizable.
      ReplicationMessage​(int type, java.lang.Object message)
      Constructor used to set the type and message.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      java.lang.Object getMessage()
      Used to get the actual message that is wrapped inside the ReplicationMessage object.
      int getType()
      Used to get the type of this ReplicationMessage.
      void readExternal​(java.io.ObjectInput in)
      Used to restore the contents of this object.
      void writeExternal​(java.io.ObjectOutput out)
      Used to save the contents of this Object.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • serialVersionUID

        public static final long serialVersionUID
        The version number is determined based on the database version of the current database. This would help to establish if the master and the slave in replication are at compatible database versions.
        See Also:
        Constant Field Values
      • message

        private java.lang.Object message
        This is the content of the replication message.
      • type

        private int type
        The valid values for the type of the content of the message are listed below.
      • TYPE_INITIATE_VERSION

        public static final int TYPE_INITIATE_VERSION
        used during the intial handshake between the master and the slave. The initial handshake helps to negotiate the message UIDs and send a appropriate error or acknowledgment. The object this message contains will be a Long. IMPORTANT: This constant must not be changed in future versions since we need it to decide slave/master version mismatch
        See Also:
        Constant Field Values
      • TYPE_INITIATE_INSTANT

        public static final int TYPE_INITIATE_INSTANT
        Used during the intial handshake between the master and the slave. Messages of this type are used to ensure that master and slave have identical log files by checking that they will insert the next log record on the same byte position in the log. The object this message contains will be a Long.
        See Also:
        Constant Field Values
      • TYPE_LOG

        public static final int TYPE_LOG
        This flag will be used for all messages that carry log records. The Object this message type contains will be a byte array. The content of the byte array is the log records in the binary form.
        See Also:
        Constant Field Values
      • TYPE_ACK

        public static final int TYPE_ACK
        This flag is used to send an acknowledgment of successful completion of a requested operation. It will however not be used to signify reception for every message transmission. The object this message type contains will be a String. The SQLState of the error message can be used here.
        See Also:
        Constant Field Values
      • TYPE_ERROR

        public static final int TYPE_ERROR
        Indicates that the requested operation was not able to be completed successfully. The object this message type contains will be a String[] where the first length-1 fields are used as arguments to create the exception and the last field contains the SQLState. The SQLState is the last element in the Array, because this means that the whole Array can be used as input to the StandardException creator. The SQLState will be ignored by the exception creator because there is one argument too many. This way we don't have to make a copy of the received Array, containing all elements except the SQLState element.
        See Also:
        Constant Field Values
      • TYPE_PING

        public static final int TYPE_PING
        A message used to check if the replication network is working. This message type has no object
        See Also:
        Constant Field Values
      • TYPE_PONG

        public static final int TYPE_PONG
        A message sent as a response to a TYPE_PING message. This message type has no object
        See Also:
        Constant Field Values
      • TYPE_STOP

        public static final int TYPE_STOP
        Used to send a stop replication signal to the slave. Since this is a control signal the object this message contains will be null.
        See Also:
        Constant Field Values
      • TYPE_FAILOVER

        public static final int TYPE_FAILOVER
        Used to signal the slave that it must failover. The object associated with this message will be null.
        See Also:
        Constant Field Values
    • Constructor Detail

      • ReplicationMessage

        public ReplicationMessage()
        public No args constructor required with Externalizable.
      • ReplicationMessage

        public ReplicationMessage​(int type,
                                  java.lang.Object message)
        Constructor used to set the type and message. This is used while creating messages for sending while readExternal is used on the receiving end.
        Parameters:
        type - The type of this message. Must be one of the message type constants of this class (TYPE_LOG, TYPE_ACK, TYPE_ERROR, TYPE_INITIATE).
        message - The message to be transmitted.
    • Method Detail

      • getMessage

        public java.lang.Object getMessage()
        Used to get the actual message that is wrapped inside the ReplicationMessage object.
        Returns:
        The object contained in the message
      • getType

        public int getType()
        Used to get the type of this ReplicationMessage.
        Returns:
        The type of the message.
      • readExternal

        public void readExternal​(java.io.ObjectInput in)
                          throws java.io.IOException,
                                 java.lang.ClassNotFoundException
        Used to restore the contents of this object.
        Specified by:
        readExternal in interface java.io.Externalizable
        Parameters:
        in - the stream to read data from in order to restore the object.
        Throws:
        java.io.IOException - If an exception occurs while reading from the InputStream.
        java.lang.ClassNotFoundException - Class of a serialized object cannot be found.
      • writeExternal

        public void writeExternal​(java.io.ObjectOutput out)
                           throws java.io.IOException
        Used to save the contents of this Object.
        Specified by:
        writeExternal in interface java.io.Externalizable
        Parameters:
        out - the stream to write the object to.
        Throws:
        java.io.IOException - if an exception occurs while writing to the OutputStream.