Class VersionVector

  • Direct Known Subclasses:
    ManyVersionVector, OneVersionVector

    public abstract class VersionVector
    extends java.lang.Object
    INTERNAL API

    Representation of a Vector-based clock (counting clock), inspired by Lamport logical clocks.

    
     Reference:
        1) Leslie Lamport (1978). "Time, clocks, and the ordering of events in a distributed system". Communications of the ACM 21 (7): 558-565.
        2) Friedemann Mattern (1988). "Virtual Time and Global States of Distributed Systems". Workshop on Parallel and Distributed Algorithms: pp. 215-226
     

    Based on akka.cluster.ddata.VersionVector.

    This class is immutable, i.e. "modifying" methods return a new instance.

    • Constructor Detail

      • VersionVector

        public VersionVector()
    • Method Detail

      • apply

        public static VersionVector apply​(scala.collection.immutable.TreeMap<java.lang.String,​java.lang.Object> versions)
      • apply

        public static VersionVector apply​(java.lang.String key,
                                          long version)
      • apply

        public static VersionVector apply​(scala.collection.immutable.List<scala.Tuple2<java.lang.String,​java.lang.Object>> versions)
        INTERNAL API
      • $plus

        public VersionVector $plus​(java.lang.String key)
        Increment the version for the key passed as argument. Returns a new VersionVector.
      • increment

        public abstract VersionVector increment​(java.lang.String key)
        Increment the version for the key passed as argument. Returns a new VersionVector.
      • updated

        public abstract VersionVector updated​(java.lang.String key,
                                              long version)
      • isEmpty

        public abstract boolean isEmpty()
      • size

        public abstract int size()
        INTERNAL API
      • versionAt

        public abstract long versionAt​(java.lang.String key)
      • contains

        public abstract boolean contains​(java.lang.String key)
        INTERNAL API
      • $less$greater

        public boolean $less$greater​(VersionVector that)
        Returns true if this and that are concurrent else false.
      • $less

        public boolean $less​(VersionVector that)
        Returns true if this is before that else false.
      • $greater

        public boolean $greater​(VersionVector that)
        Returns true if this is after that else false.
      • $eq$eq

        public boolean $eq$eq​(VersionVector that)
        Returns true if this VersionVector has the same history as the 'that' VersionVector else false.
      • versionsIterator

        public abstract scala.collection.Iterator<scala.Tuple2<java.lang.String,​java.lang.Object>> versionsIterator()
        INTERNAL API
      • compareTo

        public VersionVector.Ordering compareTo​(VersionVector that)
        Compare two version vectors. The outcome will be one of the following:

        
           1. Version 1 is SAME (==)       as Version 2 iff for all i c1(i) == c2(i)
           2. Version 1 is BEFORE (<)      Version 2 iff for all i c1(i) <= c2(i) and there exist a j such that c1(j) < c2(j)
           3. Version 1 is AFTER (>)       Version 2 iff for all i c1(i) >= c2(i) and there exist a j such that c1(j) > c2(j).
           4. Version 1 is CONCURRENT (<>) to Version 2 otherwise.