Class SyncTokenService

  • All Implemented Interfaces:
    ClusterSyncService

    public class SyncTokenService
    extends AbstractServiceWithBackgroundCheck
    implements ClusterSyncService
    Implements the syncToken idea: each instance stores a key-value pair with key=stringId and value=discoveryLiteSequenceNumber under /var/discovery/oak/syncTokens - and then waits until it sees the same token from all other instances in the cluster. This way, once the syncToken is received the local instance knows that all instances in the cluster are now in TOPOLOGY_CHANGING state (thus all topology-dependent activity is now stalled and waiting) and are aware of the new discoveryLite view.
    • Constructor Detail

      • SyncTokenService

        public SyncTokenService()
    • Method Detail

      • setConsistencyHistory

        public void setConsistencyHistory​(ClusterSyncHistory consistencyHistory)
      • sync

        public void sync​(BaseTopologyView view,
                         java.lang.Runnable callback)
        Description copied from interface: ClusterSyncService
        Starts the synchronization process and calls the provided callback upon completion.

        sync() is not thread-safe and should not be invoked concurrently.

        If sync() gets called before a previous invocation finished, that previous invocation will be discarded, ie the callback of the previous invocation will no longer be called.

        The synchronization process consists of making sure that the repository has processed any potential backlog of instances that are no longer part of the provided, new view. Plus it writes a 'sync-token' to a well-defined location, with all peers doing the same, and upon seeing all other sync-tokens declares successful completion - at which point it calls the callback.run().

        Specified by:
        sync in interface ClusterSyncService
        Parameters:
        view - the view which all instances in the local cluster should agree on having seen
        callback - the runnable which should be called after successful syncing