#vector-clock-class
#
A vector clock is a data structure for keeping track of logical time for a set of events, allowing them to be partially ordered.
Install it with
npm install --save vector-clock-class
var Clock = require('vector-clock-class')
Clock(
String | Number id,
(Integer start) | null
) -> vector_clock
id
should distinguish this clock from all the others. It is saved to the class instance asid
start
is an optional parameter which sets the version number from which the clock should start counting.
In the methods below, id
is a hashable object. Semantically, it should be the
unique identifier of another clock.
###vector_clock.clock
###
The vector clock-- a map from source_ids
to version numbers. Like the C
function from Lamport's paper. It's worth noting that this
means this module plays well with npm.im/vectorclock, although this
breaks the contract somewhat, since mixu's library
expects object literals.
###vector_clock.get(id)
-> Integer version
###
Returns the version number for the specified id
, or -Infinity
if it cannot be
found.
###vector_clock.update(id, version)
-> Integer|false
###
Bump the entry for a given id. version
is required to ensure updates from
this vector_clock
which occur after the bump have a later version number.
Note that the version
is optional only if id === vector_clock.id
. The
return value is false
if version
is not specified when it should be.
Otherwise it is the new version number for id
.
###vector_clock.createReadStream()
-> stream
###
This method creates a stream; randomly orders the keys of the clock; pushes
onto a newly-created readableStream one object of form {id: key, version: n}
per key; and then closes the stream. It also
vector_clock.update(vector_clock.id)
. This facilitates easily creating
digests of all the updates the clock has seen, useful for the scuttlebutt
There's already another venerable vector clock library out there. This one more or less grew out of my scuttlebutt implementation. It differs from vectorclock in it's scope (slightly smaller), that it presents a way to stream clock data out of it, and it's API.