Click or drag to resize
Akka.NETORSet<T> Class
Implements a 'Observed Remove Set' CRDT, also called a 'OR-Set'. Elements can be added and removed any number of times. Concurrent add wins over remove. It is not implemented as in the paper A comprehensive study of Convergent and Commutative Replicated Data Types. This is more space efficient and doesn't accumulate garbage for removed elements. It is described in the paper An optimized conflict-free replicated set The implementation is inspired by the Riak DT riak_dt_orswot. The ORSet has a version vector that is incremented when an element is added to the set. The `node -> count` pair for that increment is stored against the element as its "birth dot". Every time the element is re-added to the set, its "birth dot" is updated to that of the `node -> count` version vector entry resulting from the add. When an element is removed, we simply drop it, no tombstones. When an element exists in replica A and not replica B, is it because A added it and B has not yet seen that, or that B removed it and A has not yet seen that? In this implementation we compare the `dot` of the present element to the version vector in the Set it is absent from. If the element dot is not "seen" by the Set version vector, that means the other set has yet to see this add, and the item is in the merged Set. If the Set version vector dominates the dot, that means the other Set has removed this element already, and the item is not in the merged Set. This class is immutable, i.e. "modifying" methods return a new instance.
Inheritance Hierarchy
System.Object
  Akka.DistributedData.FastMerge<ORSet<T>>
    Akka.DistributedData.ORSet<T>

Namespace:  Akka.DistributedData
Assembly:  Akka.DistributedData (in Akka.DistributedData.dll) Version: 1.2.3.129 (1.2.3.129)
Syntax
[SerializableAttribute]
public class ORSet<T> : FastMerge<ORSet<T>>, 
	IReplicatedDataSerialization, IRemovedNodePruning<ORSet<T>>, IReplicatedData<ORSet<T>>, 
	IReplicatedData, IEquatable<ORSet<T>>, IEnumerable<T>, IEnumerable

Type Parameters

T

[Missing <typeparam name="T"/> documentation for "T:Akka.DistributedData.ORSet`1"]

The ORSet< T> type exposes the following members.

Constructors
  NameDescription
Public methodORSet<T>()
Initializes a new instance of the ORSet< T> class
Public methodORSet<T>(IImmutableDictionary<T, VersionVector>, VersionVector)
Initializes a new instance of the ORSet< T> class
Top
Properties
  NameDescription
Public propertyCount
Public propertyElements
Public propertyIsEmpty
Top
Methods
  NameDescription
Public methodAdd(Cluster, T)
Adds an element to the set
Public methodAdd(UniqueAddress, T)
Adds an element to the set
Protected methodAssignAncestor
INTERNAL API: should be called from "updating" methods
(Inherited from FastMerge<T>.)
Public methodClear
Protected methodClearAncestor
INTERNAL API: should be called from merge
(Inherited from FastMerge<T>.)
Public methodContains
Public methodEquals(Object)
Determines whether the specified object is equal to the current object.
(Overrides Object.Equals(Object).)
Public methodEquals(ORSet<T>)
Indicates whether the current object is equal to another object of the same type.
Protected methodFinalize
Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.
(Inherited from Object.)
Public methodGetEnumerator
Returns an enumerator that iterates through the collection.
Public methodGetHashCode
Serves as the default hash function.
(Overrides Object.GetHashCode().)
Public methodGetType
Gets the Type of the current instance.
(Inherited from Object.)
Protected methodIsAncestorOf
INTERNAL API: should be used from merge
(Inherited from FastMerge<T>.)
Protected methodMemberwiseClone
Creates a shallow copy of the current Object.
(Inherited from Object.)
Public methodMerge(IReplicatedData)
TBD
(Inherited from FastMerge<T>.)
Public methodMerge(ORSet<T>)
When element is in this Set but not in that Set: Compare the "birth dot" of the present element to the version vector in the Set it is absent from. If the element dot is not "seen" by other Set version vector, that means the other set has yet to see this add, and the element is to be in the merged Set. If the other Set version vector dominates the dot, that means the other Set has removed the element already, and the element is not to be in the merged Set. When element in both this Set and in that Set: Some dots may still need to be shed. If this Set has dots that the other Set does not have, and the other Set version vector dominates those dots, then we need to drop those dots. Keep only common dots, and dots that are not dominated by the other sides version vector
(Overrides FastMerge<T>.Merge(T).)
Public methodNeedPruningFrom
Public methodPrune
Public methodPruningCleanup
Public methodRemove(Cluster, T)
Removes an element from the set.
Public methodRemove(UniqueAddress, T)
Removes an element from the set.
Public methodToString
Returns a string that represents the current object.
(Overrides Object.ToString().)
Top
Fields
  NameDescription
Public fieldStatic memberEmpty
Top
Extension Methods
  NameDescription
Public Extension MethodAsInstanceOf<T>
TBD
(Defined by Extensions.)
Public Extension MethodConcat<T>
TBD
(Defined by Extensions.)
Public Extension MethodDrop<T>
Scala alias for Skip
(Defined by Extensions.)
Public Extension MethodForEach<T>
Applies a delegate action to all elements of this enumerable.
(Defined by Extensions.)
Public Extension MethodGrouped<T>
Partitions elements in fixed size Credits to http://stackoverflow.com/a/13731854/465132
(Defined by EnumerableExtensions.)
Public Extension MethodHead<T>
Scala alias for FirstOrDefault
(Defined by Extensions.)
Public Extension MethodIterator<T>
TBD
(Defined by EnumeratorExtensions.)
Public Extension MethodMatch()Overloaded.
Matches the specified target.
(Defined by PatternMatch.)
Public Extension MethodMatch<T>()Overloaded.
Matches the specified target and return a result of target processing.
(Defined by PatternMatch.)
Public Extension MethodShouldBe<T>
TBD
(Defined by AkkaSpecExtensions.)
Public Extension MethodShouldOnlyContainInOrder<T>
TBD
(Defined by AkkaSpecExtensions.)
Public Extension MethodTakeRight<T>
Selects last n elements.
(Defined by Extensions.)
Top
See Also