Class JSyncReplica

  • All Implemented Interfaces:
    JSyncConstants, JaliosConstants

    public class JSyncReplica
    extends java.lang.Object
    implements JSyncConstants
    This class provides supports to manage a replica, manages JSyncListener, send and process the JSyncMessage.
    Version:
    $Revision: 125009 $
    Author:
    Olivier Dedieu
    • Method Detail

      • getInstance

        public static JSyncReplica getInstance​(Store store,
                                               java.lang.String url,
                                               boolean syncFiles,
                                               boolean canBeJoined,
                                               boolean canLeaderJoin,
                                               boolean autoUpdate,
                                               java.io.File logDir,
                                               java.io.File fileDir,
                                               java.io.File downloadDir,
                                               long downloadInterval,
                                               java.lang.String leaderUrl,
                                               java.lang.String sharedSecret)
        Gets a replica
        Parameters:
        store - the store
        url - the url this replica listen to
        syncFiles - true if files must be replicated
        canBeJoined - can other replica join this one
        canLeaderJoin - if this replica is a leader, can it join another leader
        autoUpdate - Enable or disable update propagation when joining
        logDir - the log directory (if null, no log)
        fileDir - the file directory to synchronize (if null, no file sync.)
        downloadDir - the directory used by FileFetcher to manage the file to be downloaded
        downloadInterval - the time interval between each download try.
        leaderUrl - the leader's URL
        sharedSecret - the shared secret
        Returns:
        a replica
        Since:
        jcms-4.1
      • getUrid

        public java.lang.String getUrid()
        Returns:
        the urid of this replica
        Since:
        jcms-4.1
        See Also:
        Store.getUrid()
      • getUrl

        public java.lang.String getUrl()
        Returns:
        the url of this replica
        Since:
        jcms-4.1
      • setUrl

        public void setUrl​(java.lang.String url)
        Set the url of this replica
        Parameters:
        url - the url of this replica
        Since:
        jcms-4.1
      • getSyncFiles

        public boolean getSyncFiles()
        Return true if file replication is enabled
        Returns:
        true if file replication is enabled
        Since:
        jcms-4.1
      • setSyncFiles

        public void setSyncFiles​(boolean syncFiles)
        Enable or disable file replication
        Parameters:
        syncFiles - true if files must be replicated
        Since:
        jcms-4.1
      • setAutoUpdate

        public void setAutoUpdate​(boolean autoUpdate)
        Enable or disable update propagation when joining
        Parameters:
        autoUpdate - true if updates must be propagated at join
        Since:
        jcms-5.0
      • setMaxOpPerUpdate

        public void setMaxOpPerUpdate​(long maxOpPerUpdate)
        Set the maximum count of operations sent per update
        Parameters:
        maxOpPerUpdate - the maximum count of operations sent by update
        Since:
        jcms-4.1
      • getMaxOpPerUpdate

        public long getMaxOpPerUpdate()
        Returns:
        return the maximum count of operations sent per update
        Since:
        jcms-4.1
      • isJoined

        public boolean isJoined()
        Returns:
        true if this replica has joined its leader
        Since:
        jcms-4.1
      • getLeader

        public ReplicaInfo getLeader()
        Returns:
        the leader this replica has joined
        Since:
        jcms-4.1
      • getProgressStamp

        public Stamp getProgressStamp()
        Returns:
        the greatest stamp of this replica
        Since:
        jcms-4.1
        See Also:
        Store.getProgressStamp()
      • isLeader

        public boolean isLeader()
        Returns:
        true if this replica is a leader (i.e. if other replica has joined it)
        Since:
        jcms-4.1
      • isSuperLeader

        public boolean isSuperLeader()
        Returns:
        true if this replica is the super leader. (i.e. if other replica has joined it, and it has not joined any other leader)
        Since:
        jcms-5.0.1
      • isSubLeader

        public boolean isSubLeader()
        Returns:
        true if this replica is a sub leader. (i.e. if other replica has joined it, and it has joined another leader)
        Since:
        jcms-5.0.1
      • isDisconnected

        public boolean isDisconnected()
        Returns true if this replica is disconnected from its leader.
        Returns:
        true if this replica is disconnected from its leader.
        Since:
        jcms-10.0.1
      • isKnownReplica

        public boolean isKnownReplica​(java.lang.String urid)
        Returns true if this replica is known (i.e. is my leader or a replica of my group)
        Parameters:
        urid - the urid to check
        Returns:
        true if this replica is known (i.e. is my leader or a replica of my group)
        Since:
        jcms-5.0.4
      • removeReplica

        public void removeReplica​(java.lang.String urid)
        Removes the given replica of the group of this leader
        Parameters:
        urid - the urid of the replica to be removed
        Since:
        jcms-4.1
      • getReplicaMap

        public java.util.Map<java.lang.String,​ReplicaInfo> getReplicaMap()
        Returns:
        map of replica which has joined this leader
        Since:
        jcms-4.1
      • needForUpdate

        public boolean needForUpdate()
        Returns:
        true if this replica is in advance on its leader
        Since:
        jcms-4.1
      • getLogger

        public JSyncLogger getLogger()
        Returns:
        the JSyncLogger
        Since:
        jcms-4.1
      • getStatusLabel

        public java.lang.String getStatusLabel​(int sc,
                                               java.util.Locale locale)
        Parameters:
        sc - the status code (must be a new status code value (e.g. 1101, 1200, ...)
        locale - the locale
        Returns:
        the label for the given status code
        Since:
        jcms-4.1
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
        Returns:
        the URID of the replica
        Since:
        jcms-4.1
      • getStatus

        public java.lang.String getStatus()
        Return the status of this replica (STATUS_LONE, STATUS_MEMBER, STATUS_SUBLEADER or STATUS_LEADER)
        Returns:
        the status of this replica
        Since:
        jcms-5.0.0
      • join

        public int join()
        Joins a replica. A JoinMessage is sent to the given leaderUrl. If this replica acknowledges, it becomes my leader.
        Returns:
        the status code of the ack message
        Since:
        jcms-4.1
      • globalSuggestJoin

        public void globalSuggestJoin​(JSyncPreviousReplicaManager previousReplicaManager)
        Suggest all replica to join this replica as leader. A SuggestJoinMessage is sent to each replica.
        Parameters:
        previousReplicaManager - the previousReplicaManager
        Since:
        jcms-5.7.4
      • suggestJoin

        public int suggestJoin​(java.lang.String urlReplica)
        Suggest one replica to join this replica as leader. A SuggestJoinMessage is sent to this replica.
        Parameters:
        urlReplica - url of one joined replica
        Returns:
        the status code of the ack message
        Since:
        jcms-5.7.4
      • disjoin

        public int disjoin()
        Disjoins from the leader replica.
        Returns:
        the status code of the ack message
        Since:
        jcms-4.1
      • update

        public int update()
        Sends updates to the leader (if any) and to the group (if any)
        Returns:
        SC_OK (200) if the both update have succeeded. Otherwise returns the SC of the first update which failed.
        Since:
        jcms-4.1
        See Also:
        updateLeader(), updateGroup()
      • updateLeader

        public int updateLeader()
        Sends the updates to the leader replica.
        Returns:
        the status code of the ack message
        Since:
        jcms-4.1
      • updateGroup

        public int updateGroup()
        Sends the update to each replica of the group
        Returns:
        the status code of the ack message
        Since:
        jcms-4.1
      • processMessage

        public boolean processMessage​(java.io.OutputStream out,
                                      Message msg)
                               throws java.io.IOException
        Dispatches on the right method to process the given message
        Parameters:
        out - the output stream to reply
        msg - the message to process
        Returns:
        true if the message has been correctly processed
        Throws:
        java.io.IOException - if an error occurs
        Since:
        jcms-4.1
      • processJoinMessage

        public boolean processJoinMessage​(java.io.OutputStream out,
                                          JoinMessage msg)
                                   throws java.io.IOException
        Process a JoinMessage
        Parameters:
        out - the output stream to reply
        msg - the message to process
        Returns:
        true if the message has been correctly processed
        Throws:
        java.io.IOException - if an error occurs
        Since:
        jcms-4.1
      • processSuggestJoinMessage

        public boolean processSuggestJoinMessage​(java.io.OutputStream out,
                                                 SuggestJoinMessage msg)
                                          throws java.io.IOException
        Process a SuggestJoinMessage
        Parameters:
        out - the output stream to reply
        msg - the message to process
        Returns:
        true if the message has been correctly processed
        Throws:
        java.io.IOException - if an error occurs
        Since:
        jcms-5.7.4
      • processDisjoinMessage

        public boolean processDisjoinMessage​(java.io.OutputStream out,
                                             DisjoinMessage msg)
                                      throws java.io.IOException
        Process a DisjoinMessage
        Parameters:
        out - the output stream to reply
        msg - the message to process
        Returns:
        true if the message has been correctly processed
        Throws:
        java.io.IOException - if an error occurs
        Since:
        jcms-4.1
      • processUpdateMessage

        public boolean processUpdateMessage​(java.io.OutputStream out,
                                            UpdateMessage msg)
                                     throws java.io.IOException
        Process an UpdateMessage
        Parameters:
        out - the output stream to reply
        msg - the message to process
        Returns:
        true if the message has been correctly processed
        Throws:
        java.io.IOException - if an error occurs
        Since:
        jcms-4.1
      • addListener

        public void addListener​(JSyncListener listener)
        Adds a JSync listener
        Parameters:
        listener - the JSync listener to be added
        Since:
        jcms-4.1
      • removeListener

        public void removeListener​(JSyncListener listener)
        Removes a JSync listener
        Parameters:
        listener - the JSync listener to be removed
        Since:
        jcms-4.1
      • close

        public void close()
        Close all JSyncReplica resources when ending.
      • getLeaderUrl

        public java.lang.String getLeaderUrl()
      • setLeaderUrl

        public void setLeaderUrl​(java.lang.String leaderUrl)
      • isCanBeJoined

        public boolean isCanBeJoined()