Python bindings for the libitc library.
Interval Tree Clocks (ITC) are a generalisation of the Vector Clock and Version Vector mechanisms, allowing for scalable and efficient management of a highly dynamic number of replicas/processes in a distributed system.
- Provides easy-to-use, Pythonesque bindings for the underlying C library
- Provides
__str__
methods for easy visualisation of the ITC trees - Provides bindings for the C lib's "extended API"
- Uses 64-bit event counters
Here are some usage examples:
from pyitc import Stamp, StampComparisonResult
from pyitc.extended_api import Id, Event
stamp = Stamp()
stamp.event()
stamp2 = stamp.fork()
print(stamp) # {(0, 1); 1}
print(stamp.peek()) # {0, 1}
print(stamp2) # {(1, 0); 1}
if stamp == stamp2: # all comparision operators are supported
print("yay!")
else:
print("nay")
if stamp.compare_to(stamp2) == StampComparisonResult.EQUAL: # equivalent to stamp == stamp2
print("yay again!")
print(stamp.id_component) # (0, 1)
print(stamp.event_component) # 1
stamp.event_component = Event()
stamp.id_component = Id(seed=True)
print(stamp.serialise()) # b'\x00\t\x01\x02\x01\x00'
print(stamp.id_component.serialise()) # b'\x00\x02'
print(stamp.event_component.serialise()) # b'\x00\x00'
remote_stamp = Stamp.deserialise(b'...')
remote_event = Event.deserialise(b'...')
remote_id = Id.deserialise(b'...')
Released under AGPL-3.0 license, see LICENSE for details.