Class OortPrimaryLong
- All Implemented Interfaces:
EventListener,org.cometd.bayeux.Bayeux.BayeuxListener,org.cometd.bayeux.server.ConfigurableServerChannel.ServerChannelListener,org.cometd.bayeux.server.ServerChannel.MessageListener,org.eclipse.jetty.util.component.LifeCycle
A distributed counter service to be deployed on a Oort cluster that
modifies a long value hosted in a "primary" node.
Instances of this service may be used as unique ID generator, or as unique counter across the cluster, for example to aggregate values from different nodes, such as the number of users connected to each node.
Applications may call methods addAndGet(long, Callback) or
getAndAdd(long, Callback) providing the amount to add
(it may be negative) and a OortPrimaryLong.Callback object that will be
invoked on the requesting node when the result has been
computed and transmitted back by the "primary" node.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceCallback invoked when the result of the operation on the counter is available, or when the operation failed.protected static classNested classes/interfaces inherited from class org.cometd.oort.OortService
OortService.Request, OortService.Result<U>, OortService.ServerContextNested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
org.eclipse.jetty.util.component.AbstractLifeCycle.AbstractLifeCycleListener, org.eclipse.jetty.util.component.AbstractLifeCycle.StopExceptionNested classes/interfaces inherited from interface org.cometd.bayeux.server.ConfigurableServerChannel.ServerChannelListener
org.cometd.bayeux.server.ConfigurableServerChannel.ServerChannelListener.WeakNested 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
ConstructorsConstructorDescriptionOortPrimaryLong(Oort oort, String name, boolean primary) OortPrimaryLong(Oort oort, String name, boolean primary, long initial) -
Method Summary
Modifier and TypeMethodDescriptionbooleanaddAndGet(long delta, OortPrimaryLong.Callback callback) Adds the givendeltaand then invokes the givencallbackwith the counter value after the addition.booleanget(OortPrimaryLong.Callback callback) Retrieves the value from the "primary" node and then invokes the givencallbackwith the result value.booleangetAndAdd(long delta, OortPrimaryLong.Callback callback) Adds the givendeltaand then invokes the givencallbackwith the counter value before the addition.protected longgetValue()protected OortService.Result<Long>onForward(OortService.Request request) Subclasses must implement this method, that runs on the owner node, to implement the action functionality.protected voidonForwardFailed(Object failure, OortPrimaryLong.Context context) Subclasses must implement this method, that runs on the requesting node, to complete the functionality after the action failed on the owner node.protected voidonForwardSucceeded(Long result, OortPrimaryLong.Context context) Subclasses must implement this method, that runs on the requesting node, to complete the functionality after the action has been successfully run on the owner node.Methods inherited from class org.cometd.oort.OortPrimaryService
doStart, doStop, getPrimaryOortURL, isPrimaryMethods inherited from class org.cometd.oort.OortService
forward, getLocalSession, getName, getOort, getTimeout, onForwardMessage, onMessage, onResultMessage, setTimeout, toStringMethods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
addEventListener, getEventListeners, getState, getState, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeEventListener, setEventListeners, start, stopMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.cometd.bayeux.server.ServerChannel.MessageListener
onMessage
-
Constructor Details
-
OortPrimaryLong
-
OortPrimaryLong
- Parameters:
oort- the oort this instance is associated toname- the name of this serviceprimary- whether this service lives on the "primary" nodeinitial- the initial local value
-
-
Method Details
-
getValue
protected long getValue()- Returns:
- the local value, which makes sense only if called on the "primary" node.
-
get
Retrieves the value from the "primary" node and then invokes the givencallbackwith the result value.- Parameters:
callback- the callback invoked when the result is available- Returns:
- whether the request could be forwarded to the "primary" node
-
addAndGet
Adds the givendeltaand then invokes the givencallbackwith the counter value after the addition. The counter value may be already out of date at the moment of the invocation of thecallback.- Parameters:
delta- the value to add, may be negativecallback- the callback invoked when the result is available- Returns:
- whether the request could be forwarded to the "primary" node
- See Also:
-
getAndAdd
Adds the givendeltaand then invokes the givencallbackwith the counter value before the addition.- Parameters:
delta- the value to add, may be negativecallback- the callback invoked when the result is available- Returns:
- whether the request could be forwarded to the "primary" node
- See Also:
-
onForward
Description copied from class:OortServiceSubclasses must implement this method, that runs on the owner node, to implement the action functionality.
The result to return is
OortService.Result.success(Object)orOortService.Result.failure(Object)if the implementation of this method was able to find the entity on which the action functionality was meant to be applied, orOortService.Result.ignore(Object)if the entity was not found.- Specified by:
onForwardin classOortService<Long,OortPrimaryLong.Context> - Parameters:
request- the request containing the parameter passed fromOortService.forward(String, Object, Object)- Returns:
- the result containing the data that will be passed to
OortService.onForwardSucceeded(Object, Object)
-
onForwardSucceeded
Description copied from class:OortServiceSubclasses must implement this method, that runs on the requesting node, to complete the functionality after the action has been successfully run on the owner node.- Specified by:
onForwardSucceededin classOortService<Long,OortPrimaryLong.Context> - Parameters:
result- the result of the actioncontext- the opaque context fromOortService.forward(String, Object, Object)
-
onForwardFailed
Description copied from class:OortServiceSubclasses must implement this method, that runs on the requesting node, to complete the functionality after the action failed on the owner node.- Specified by:
onForwardFailedin classOortService<Long,OortPrimaryLong.Context> - Parameters:
failure- the failure of the actioncontext- the opaque context fromOortService.forward(String, Object, Object)
-