Class OortLong

  • All Implemented Interfaces:
    org.eclipse.jetty.util.component.LifeCycle

    public class OortLong
    extends org.eclipse.jetty.util.component.AbstractLifeCycle

    A shared atomic long made of an internal AtomicLong and of an internal OortObject<Long>.

    This class exposes an API similar to that of AtomicLong, and for every successful update of the local value of the internal AtomicLong, it broadcast the local value via the internal OortObject to other nodes.

    This class can be seen as the counterpart of OortPrimaryLong.

    Where the OortPrimaryLong instance in each node has an internal AtomicLong, but only the one in the "primary" node has a non-zero value, the instance of this class in each node has an internal AtomicLong that has its own value.

    Where in OortPrimaryLong updates are always sent to the "primary" node, in this class updates are always local, and then broadcast to the other nodes in the cluster.

    Where in OortPrimaryLong each node has to send a message to the "primary" node to retrieve the total value, in this class the total value can be obtained from the internal OortObject without network communication with other nodes.

    Where OortPrimaryLong trades less memory (one long per node) for larger latencies (every operation on non-primary nodes requires sending a message to the primary node), this class trades more memory (N longs per node - where N is the number of nodes) for smaller latencies (operations do not require messaging).

    See Also:
    OortPrimaryLong
    • Constructor Detail

      • OortLong

        public OortLong​(Oort oort,
                        String name)
      • OortLong

        public OortLong​(Oort oort,
                        String name,
                        long initial)
        Parameters:
        oort - the oort this instance is associated to
        name - the name of this service
        initial - the initial local value
    • Method Detail

      • doStart

        protected void doStart()
                        throws Exception
        Overrides:
        doStart in class org.eclipse.jetty.util.component.AbstractLifeCycle
        Throws:
        Exception
      • doStop

        protected void doStop()
                       throws Exception
        Overrides:
        doStop in class org.eclipse.jetty.util.component.AbstractLifeCycle
        Throws:
        Exception
      • getOort

        public Oort getOort()
        Returns:
        the Oort instance associated with this oort long
      • getLocalSession

        public LocalSession getLocalSession()
        Returns:
        the local session that sends messages to other nodes
      • get

        public long get()
        Returns:
        the local value
      • addAndGet

        public long addAndGet​(long delta)
        Parameters:
        delta - the delta to add to the local value (may be negative)
        Returns:
        the new local value
      • getAndAdd

        public long getAndAdd​(long delta)
        Parameters:
        delta - the delta to add to the local value (may be negative)
        Returns:
        the old local value
      • getAndSet

        public long getAndSet​(long newValue)
        Parameters:
        newValue - the new local value to set
        Returns:
        the old local value
      • compareAndSet

        public boolean compareAndSet​(long expected,
                                     long newValue)
        Parameters:
        expected - the expected local value
        newValue - the new local value
        Returns:
        whether the operation was successful
      • sum

        public long sum()
        Returns:
        the sum of local values of each node