Module lasp_vclock

A simple Erlang implementation of vector clocks as inspired by Lamport logical clocks.

References

Description

A simple Erlang implementation of vector clocks as inspired by Lamport logical clocks. Taken from Riak.

Data Types

binary_vclock()

binary_vclock() = binary()

The timestamp is present but not used, in case a client wishes to inspect it.

counter()

counter() = integer()

vc_entry()

vc_entry() = {vclock_node(), counter()}

vclock()

vclock() = [vc_entry()]

vclock_node()

vclock_node() = term()

Function Index

all_nodes/1Return the list of all nodes that have ever incremented VClock.
descends/2Return true if Va is a direct descendant of Vb, else false -- remember, a vclock is its own descendant!
dominates/2
equal/2Compares two VClocks for equality.
fresh/0Create a brand new vclock.
from_binary/1takes the output of to_binary/1 and returns a vclock.
get_counter/2Get the counter value in VClock set from Node.
glb/2take two vclocks and return a vclock that summerizes only the events both have seen.
increment/2Increment VClock at Node.
merge/1Combine all VClocks in the input list into their least possible common descendant.
subtract_dots/2subtract the VClock from the DotList.
to_binary/1an effecient format for disk / wire.

Function Details

all_nodes/1

all_nodes(VClock::vclock()) -> [vclock_node()]

Return the list of all nodes that have ever incremented VClock.

descends/2

descends(Va::vclock() | [], Vb::vclock() | []) -> boolean()

Return true if Va is a direct descendant of Vb, else false -- remember, a vclock is its own descendant!

dominates/2

dominates(A::vclock(), B::vclock()) -> boolean()

equal/2

equal(VClockA::vclock(), VClockB::vclock()) -> boolean()

Compares two VClocks for equality.

fresh/0

fresh() -> vclock()

Create a brand new vclock.

from_binary/1

from_binary(Bin::binary_vclock()) -> vclock()

takes the output of to_binary/1 and returns a vclock

get_counter/2

get_counter(Node::vclock_node(), VClock::vclock()) -> counter()

Get the counter value in VClock set from Node.

glb/2

glb(Clock1::vclock(), Clock2::vclock()) -> vclock()

take two vclocks and return a vclock that summerizes only the events both have seen.

increment/2

increment(Node::vclock_node(), VClock::vclock()) -> vclock()

Increment VClock at Node.

merge/1

merge(VClocks::[vclock()]) -> vclock() | []

Combine all VClocks in the input list into their least possible common descendant.

subtract_dots/2

subtract_dots(DotList::vclock(), VClock::vclock()) -> vclock()

subtract the VClock from the DotList. what this means is that any {actor(), count()} pair in DotList that is <= an entry in VClock is removed from DotList Example [{a, 3}, {b, 2}, {d, 14}, {g, 22}] - [{a, 4}, {b, 1}, {c, 1}, {d, 14}, {e, 5}, {f, 2}] = [{{b, 2}, {g, 22}]

to_binary/1

to_binary(Clock::vclock()) -> binary_vclock()

an effecient format for disk / wire. 5 @see from_binary/1


Generated by EDoc