Package akka.cluster.ddata
Class PNCounter
- java.lang.Object
-
- akka.cluster.ddata.PNCounter
-
- All Implemented Interfaces:
DeltaReplicatedData
,RemovedNodePruning
,ReplicatedData
,ReplicatedDataSerialization
,ReplicatedDelta
,java.io.Serializable
public final class PNCounter extends java.lang.Object implements DeltaReplicatedData, ReplicatedDelta, ReplicatedDataSerialization, RemovedNodePruning
Implements a 'Increment/Decrement Counter' CRDT, also called a 'PN-Counter'.It is described in the paper A comprehensive study of Convergent and Commutative Replicated Data Types.
PN-Counters allow the counter to be incremented by tracking the increments (P) separate from the decrements (N). Both P and N are represented as two internal
GCounter
s. Merge is handled by merging the internal P and N counters. The value of the counter is the value of the P counter minus the value of the N counter.This class is immutable, i.e. "modifying" methods return a new instance.
- See Also:
- Serialized Form
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description PNCounter
$colon$plus(long n, SelfUniqueAddress node)
Increment the counter with the deltan
specified.PNCounter
$colon$plus(scala.math.BigInt n, SelfUniqueAddress node)
Increment the counter with the deltan
specified.static PNCounter
apply()
static PNCounter
create()
Java APIPNCounter
decrement(long n, SelfUniqueAddress node)
Decrement the counter with the deltan
specified.PNCounter
decrement(SelfUniqueAddress node, long n)
Decrement the counter with the deltan
specified.PNCounter
decrement(SelfUniqueAddress node, java.math.BigInteger n)
Java API: Decrement the counter with the deltan
specified.PNCounter
decrement(SelfUniqueAddress node, scala.math.BigInt n)
Scala API: Decrement the counter with the deltan
specified.PNCounter
decrement(scala.math.BigInt n, SelfUniqueAddress node)
Decrement the counter with the deltan
specified.scala.Option<PNCounter>
delta()
The accumulated delta of mutator operations since previousDeltaReplicatedData.resetDelta()
.static PNCounter
empty()
boolean
equals(java.lang.Object o)
java.math.BigInteger
getValue()
Java API: Current total value of the counter.int
hashCode()
PNCounter
increment(long n, SelfUniqueAddress node)
Scala API: Increment the counter with the deltan
specified.PNCounter
increment(SelfUniqueAddress node, long n)
Java API: Increment the counter with the deltan
specified.PNCounter
increment(SelfUniqueAddress node, java.math.BigInteger n)
Java API: Increment the counter with the deltan
specified.PNCounter
increment(scala.math.BigInt n, SelfUniqueAddress node)
Increment the counter with the deltan
specified.PNCounter
merge(PNCounter that)
PNCounter
mergeDelta(PNCounter thatDelta)
scala.collection.immutable.Set<UniqueAddress>
modifiedByNodes()
The nodes that have changed the state for this data and would need pruning when such node is no longer part of the cluster.boolean
needPruningFrom(UniqueAddress removedNode)
Does it have any state changes from a specific node, which has been removed from the cluster.PNCounter
prune(UniqueAddress removedNode, UniqueAddress collapseInto)
When theremoved
node has been removed from the cluster the state changes from that node will be pruned by collapsing the data entries to another node.PNCounter
pruningCleanup(UniqueAddress removedNode)
Remove data entries from a node that has been removed from the cluster and already been pruned.PNCounter
resetDelta()
Reset collection of deltas from mutator operations.java.lang.String
toString()
static scala.Option<scala.math.BigInt>
unapply(PNCounter c)
Extract theGCounter.value()
.scala.math.BigInt
value()
Scala API: Current total value of the counter.PNCounter
zero()
The empty full state.-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface akka.cluster.ddata.DeltaReplicatedData
mergeDelta
-
Methods inherited from interface akka.cluster.ddata.ReplicatedData
merge
-
-
-
-
Method Detail
-
empty
public static PNCounter empty()
-
apply
public static PNCounter apply()
-
create
public static PNCounter create()
Java API
-
unapply
public static scala.Option<scala.math.BigInt> unapply(PNCounter c)
Extract theGCounter.value()
.
-
value
public scala.math.BigInt value()
Scala API: Current total value of the counter.
-
getValue
public java.math.BigInteger getValue()
Java API: Current total value of the counter.
-
$colon$plus
public PNCounter $colon$plus(long n, SelfUniqueAddress node)
Increment the counter with the deltan
specified. If the delta is negative then it will decrement instead of increment.
-
$colon$plus
public PNCounter $colon$plus(scala.math.BigInt n, SelfUniqueAddress node)
Increment the counter with the deltan
specified. If the delta is negative then it will decrement instead of increment.
-
increment
public PNCounter increment(long n, SelfUniqueAddress node)
Scala API: Increment the counter with the deltan
specified. If the delta is negative then it will decrement instead of increment.
-
increment
public PNCounter increment(scala.math.BigInt n, SelfUniqueAddress node)
Increment the counter with the deltan
specified. If the delta is negative then it will decrement instead of increment.
-
increment
public PNCounter increment(SelfUniqueAddress node, java.math.BigInteger n)
Java API: Increment the counter with the deltan
specified. If the delta is negative then it will decrement instead of increment.
-
increment
public PNCounter increment(SelfUniqueAddress node, long n)
Java API: Increment the counter with the deltan
specified. If the delta is negative then it will decrement instead of increment.
-
decrement
public PNCounter decrement(long n, SelfUniqueAddress node)
Decrement the counter with the deltan
specified. If the delta is negative then it will increment instead of decrement.
-
decrement
public PNCounter decrement(scala.math.BigInt n, SelfUniqueAddress node)
Decrement the counter with the deltan
specified. If the delta is negative then it will increment instead of decrement.
-
decrement
public PNCounter decrement(SelfUniqueAddress node, long n)
Decrement the counter with the deltan
specified. If the deltan
is negative then it will increment instead of decrement.
-
decrement
public PNCounter decrement(SelfUniqueAddress node, scala.math.BigInt n)
Scala API: Decrement the counter with the deltan
specified. If the deltan
is negative then it will increment instead of decrement.
-
decrement
public PNCounter decrement(SelfUniqueAddress node, java.math.BigInteger n)
Java API: Decrement the counter with the deltan
specified. If the deltan
is negative then it will increment instead of decrement.
-
delta
public scala.Option<PNCounter> delta()
Description copied from interface:DeltaReplicatedData
The accumulated delta of mutator operations since previousDeltaReplicatedData.resetDelta()
. When theReplicator
invokes themodify
function of theUpdate
message and the user code is invoking one or more mutator operations the data is collecting the delta of the operations and makes it available for theReplicator
with theDeltaReplicatedData.delta()
accessor. Themodify
function shall still return the full state in the same way asReplicatedData
without support for deltas.- Specified by:
delta
in interfaceDeltaReplicatedData
-
zero
public PNCounter zero()
Description copied from interface:ReplicatedDelta
The empty full state. This is used when a delta is received and no existing full state exists on the receiving side. Then the delta is merged into thezero
to create the initial full state.- Specified by:
zero
in interfaceReplicatedDelta
-
resetDelta
public PNCounter resetDelta()
Description copied from interface:DeltaReplicatedData
Reset collection of deltas from mutator operations. When theReplicator
invokes themodify
function of theUpdate
message the delta is always "reset" and when the user code is invoking one or more mutator operations the data is collecting the delta of the operations and makes it available for theReplicator
with theDeltaReplicatedData.delta()
accessor. When theReplicator
has grabbed thedelta
it will invoke this method to get a clean data instance without the delta.- Specified by:
resetDelta
in interfaceDeltaReplicatedData
-
modifiedByNodes
public scala.collection.immutable.Set<UniqueAddress> modifiedByNodes()
Description copied from interface:RemovedNodePruning
The nodes that have changed the state for this data and would need pruning when such node is no longer part of the cluster.- Specified by:
modifiedByNodes
in interfaceRemovedNodePruning
-
needPruningFrom
public boolean needPruningFrom(UniqueAddress removedNode)
Description copied from interface:RemovedNodePruning
Does it have any state changes from a specific node, which has been removed from the cluster.- Specified by:
needPruningFrom
in interfaceRemovedNodePruning
-
prune
public PNCounter prune(UniqueAddress removedNode, UniqueAddress collapseInto)
Description copied from interface:RemovedNodePruning
When theremoved
node has been removed from the cluster the state changes from that node will be pruned by collapsing the data entries to another node.- Specified by:
prune
in interfaceRemovedNodePruning
-
pruningCleanup
public PNCounter pruningCleanup(UniqueAddress removedNode)
Description copied from interface:RemovedNodePruning
Remove data entries from a node that has been removed from the cluster and already been pruned.- Specified by:
pruningCleanup
in interfaceRemovedNodePruning
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
equals
public boolean equals(java.lang.Object o)
- Overrides:
equals
in classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
-