LWWMap

org.apache.pekko.cluster.ddata.LWWMap
See theLWWMap companion object

Specialized ORMap with LWWRegister values.

LWWRegister relies on synchronized clocks and should only be used when the choice of value is not important for concurrent updates occurring within the clock skew.

Instead of using timestamps based on System.currentTimeMillis() time it is possible to use a timestamp value based on something else, for example an increasing version number from a database record that is used for optimistic concurrency control.

The defaultClock is using max value of System.currentTimeMillis() and currentTimestamp + 1. This means that the timestamp is increased for changes on the same node that occurs within the same millisecond. It also means that it is safe to use the LWWMap without synchronized clocks when there is only one active writer, e.g. a Cluster Singleton. Such a single writer should then first read current value with ReadMajority (or more) before changing and writing the value with WriteMajority (or more).

For first-write-wins semantics you can use the LWWRegister#reverseClock instead of the LWWRegister#defaultClock

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

Attributes

Companion
object
Source
LWWMap.scala
Graph
Supertypes
trait Serializable
class Object
trait Matchable
class Any
Show all

Members list

Type members

Types

type D = DeltaOp

The type of the delta. To be specified by subclass. It may be the same type as T or a different type if needed. For example GSet uses the same type and ORSet uses different types.

The type of the delta. To be specified by subclass. It may be the same type as T or a different type if needed. For example GSet uses the same type and ORSet uses different types.

Attributes

Source
LWWMap.scala
type T = LWWMap[A, B]

The type of the concrete implementation, e.g. GSet[A]. To be specified by subclass.

The type of the concrete implementation, e.g. GSet[A]. To be specified by subclass.

Attributes

Source
LWWMap.scala

Value members

Concrete methods

def :+(entry: (A, B))(implicit node: SelfUniqueAddress): LWWMap[A, B]

Adds an entry to the map

Adds an entry to the map

Attributes

Source
LWWMap.scala
def contains(key: A): Boolean

Attributes

Source
LWWMap.scala
override def delta: Option[D]

The accumulated delta of mutator operations since previous resetDelta. When the Replicator invokes the modify function of the Update 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 the Replicator with the delta accessor. The modify function shall still return the full state in the same way as ReplicatedData without support for deltas.

The accumulated delta of mutator operations since previous resetDelta. When the Replicator invokes the modify function of the Update 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 the Replicator with the delta accessor. The modify function shall still return the full state in the same way as ReplicatedData without support for deltas.

Attributes

Definition Classes
Source
LWWMap.scala
def entries: Map[A, B]

Scala API: All entries of the map.

Scala API: All entries of the map.

Attributes

Source
LWWMap.scala
override def equals(o: Any): Boolean

Compares the receiver object (this) with the argument object (that) for equivalence.

Compares the receiver object (this) with the argument object (that) for equivalence.

Any implementation of this method should be an equivalence relation:

  • It is reflexive: for any instance x of type Any, x.equals(x) should return true.
  • It is symmetric: for any instances x and y of type Any, x.equals(y) should return true if and only if y.equals(x) returns true.
  • It is transitive: for any instances x, y, and z of type Any if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.

If you override this method, you should verify that your implementation remains an equivalence relation. Additionally, when overriding this method it is usually necessary to override hashCode to ensure that objects which are "equal" (o1.equals(o2) returns true) hash to the same scala.Int. (o1.hashCode.equals(o2.hashCode)).

Value parameters

that

the object to compare against this object for equality.

Attributes

Returns

true if the receiver object is equivalent to the argument; false otherwise.

Definition Classes
Any
Source
LWWMap.scala
def get(key: A): Option[B]

Attributes

Source
LWWMap.scala
def getEntries(): Map[A, B]

Java API: All entries of the map.

Java API: All entries of the map.

Attributes

Source
LWWMap.scala
override def hashCode: Int

Calculate a hash code value for the object.

Calculate a hash code value for the object.

The default hashing algorithm is platform dependent.

Note that it is allowed for two objects to have identical hash codes (o1.hashCode.equals(o2.hashCode)) yet not be equal (o1.equals(o2) returns false). A degenerate implementation could always return 0. However, it is required that if two objects are equal (o1.equals(o2) returns true) that they have identical hash codes (o1.hashCode.equals(o2.hashCode)). Therefore, when overriding this method, be sure to verify that the behavior is consistent with the equals method.

Attributes

Returns

the hash code value for this object.

Definition Classes
Any
Source
LWWMap.scala

Attributes

Source
LWWMap.scala
override def merge(that: LWWMap[A, B]): LWWMap[A, B]

Monotonic merge function.

Monotonic merge function.

Attributes

Definition Classes
Source
LWWMap.scala
override def mergeDelta(thatDelta: D): LWWMap[A, B]

When delta is merged into the full state this method is used. When the type D of the delta is of the same type as the full state T this method can be implemented by delegating to merge.

When delta is merged into the full state this method is used. When the type D of the delta is of the same type as the full state T this method can be implemented by delegating to merge.

Attributes

Definition Classes
Source
LWWMap.scala

The nodes that have changed the state for this data and would need pruning when such node is no longer part of the cluster.

The nodes that have changed the state for this data and would need pruning when such node is no longer part of the cluster.

Attributes

Definition Classes
Source
LWWMap.scala
override def needPruningFrom(removedNode: UniqueAddress): Boolean

Does it have any state changes from a specific node, which has been removed from the cluster.

Does it have any state changes from a specific node, which has been removed from the cluster.

Attributes

Definition Classes
Source
LWWMap.scala
override def prune(removedNode: UniqueAddress, collapseInto: UniqueAddress): LWWMap[A, B]

When the removed node has been removed from the cluster the state changes from that node will be pruned by collapsing the data entries to another node.

When the removed node has been removed from the cluster the state changes from that node will be pruned by collapsing the data entries to another node.

Attributes

Definition Classes
Source
LWWMap.scala
override def pruningCleanup(removedNode: UniqueAddress): LWWMap[A, B]

Remove data entries from a node that has been removed from the cluster and already been pruned.

Remove data entries from a node that has been removed from the cluster and already been pruned.

Attributes

Definition Classes
Source
LWWMap.scala
def put(node: SelfUniqueAddress, key: A, value: B): LWWMap[A, B]

Adds an entry to the map

Adds an entry to the map

Attributes

Source
LWWMap.scala
def put(node: SelfUniqueAddress, key: A, value: B, clock: Clock[B]): LWWMap[A, B]

Adds an entry to the map.

Adds an entry to the map.

You can provide your clock implementation instead of using timestamps based on System.currentTimeMillis() time. The timestamp can for example be an increasing version number from a database record that is used for optimistic concurrency control.

Attributes

Source
LWWMap.scala
def remove(node: SelfUniqueAddress, key: A): LWWMap[A, B]

Removes an entry from the map. Note that if there is a conflicting update on another node the entry will not be removed after merge.

Removes an entry from the map. Note that if there is a conflicting update on another node the entry will not be removed after merge.

Attributes

Source
LWWMap.scala
override def resetDelta: LWWMap[A, B]

Reset collection of deltas from mutator operations. When the Replicator invokes the modify function of the Update 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 the Replicator with the delta accessor. When the Replicator has grabbed the delta it will invoke this method to get a clean data instance without the delta.

Reset collection of deltas from mutator operations. When the Replicator invokes the modify function of the Update 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 the Replicator with the delta accessor. When the Replicator has grabbed the delta it will invoke this method to get a clean data instance without the delta.

Attributes

Definition Classes
Source
LWWMap.scala
def size: Int

Attributes

Source
LWWMap.scala
override def toString: String

Returns a string representation of the object.

Returns a string representation of the object.

The default representation is platform dependent.

Attributes

Returns

a string representation of the object.

Definition Classes
Any
Source
LWWMap.scala

Deprecated methods

def +(entry: (A, B))(implicit node: Cluster): LWWMap[A, B]

Attributes

Deprecated
[Since version Akka 2.5.20]
Source
LWWMap.scala
def -(key: A)(implicit node: Cluster): LWWMap[A, B]

Removes an entry from the map. Note that if there is a conflicting update on another node the entry will not be removed after merge.

Removes an entry from the map. Note that if there is a conflicting update on another node the entry will not be removed after merge.

Attributes

Deprecated
[Since version Akka 2.5.20]
Source
LWWMap.scala
def put(node: Cluster, key: A, value: B): LWWMap[A, B]

Attributes

Deprecated
[Since version Akka 2.5.20]
Source
LWWMap.scala
def put(node: Cluster, key: A, value: B, clock: Clock[B]): LWWMap[A, B]

Attributes

Deprecated
[Since version Akka 2.5.20]
Source
LWWMap.scala
def put(key: A, value: B)(implicit node: Cluster, clock: Clock[B]): LWWMap[A, B]

Adds an entry to the map.

Adds an entry to the map.

You can provide your clock implementation instead of using timestamps based on System.currentTimeMillis() time. The timestamp can for example be an increasing version number from a database record that is used for optimistic concurrency control.

Attributes

Deprecated
[Since version Akka 2.5.20]
Source
LWWMap.scala
def remove(node: Cluster, key: A): LWWMap[A, B]

Attributes

Deprecated
[Since version Akka 2.5.20]
Source
LWWMap.scala