Class OortLong
- All Implemented Interfaces:
org.eclipse.jetty.util.component.LifeCycle
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 long
s per node - where N is the
number of nodes) for smaller latencies (operations do not require messaging).
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
org.eclipse.jetty.util.component.AbstractLifeCycle.AbstractLifeCycleListener, org.eclipse.jetty.util.component.AbstractLifeCycle.StopException
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle
org.eclipse.jetty.util.component.LifeCycle.Listener
-
Field Summary
Fields inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
FAILED, STARTED, STARTING, STOPPED, STOPPING
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionlong
addAndGet
(long delta) void
addListener
(OortObject.Listener<Long> listener) boolean
compareAndSet
(long expected, long newValue) protected void
doStart()
protected void
doStop()
long
get()
long
getAndAdd
(long delta) long
getAndSet
(long newValue) getOort()
void
removeListener
(OortObject.Listener<Long> listener) void
Removes all listeners.long
sum()
Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
addEventListener, getEventListeners, getState, getState, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeEventListener, setEventListeners, start, stop, toString
-
Constructor Details
-
OortLong
-
OortLong
-
-
Method Details
-
doStart
-
doStop
-
getOort
-
getLocalSession
- Returns:
- the local session that sends messages to other nodes
-
addListener
- Parameters:
listener
- the listener to add that is notified of updates of the value in a node- See Also:
-
removeListener
- Parameters:
listener
- the listener to remove- See Also:
-
removeListeners
public void removeListeners()Removes all listeners.- See Also:
-
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 valuenewValue
- the new local value- Returns:
- whether the operation was successful
-
sum
public long sum()- Returns:
- the sum of local values of each node
-