(formerly TimeKeeper)
This repository contains the result of a mini-project at Universiteit Utrecht.
The goal was to familiarize ourselves with concurrency and parallellism in Haskell, by exploring 'orchestration'.
In this project, we have built a data store with subscriptions inspired by Apache ZooKeeper, that could be used to communicate information about a cluster.
The code for this part of the project can be found in the timekeeper
directory. Documentation is provided in the timekeeper/src
directory.
Also, in order to validate the concept and implementation, we have made an initial effort to thoroughly test a 'barrier' synchronisation algorithm built on the protocol. More information can be found in the nomadbase-algorithms
readme.
We had plans to make the system robust such that it would keep functioning upon verius crashes or, when failures were to sufear, maintain a state from which the system would be able to recover upon reconnection of failing parts of the system. This was supposed to be realised with some extra measures:
Desired behaviour on Client crash:
Desired behaviour on Client recovery:
Desired behaviour on Server crash:
Desired behaviour on Server recovery:
Desired behaviour on Leader crash:
Desired behaviour on Leader recovery:
Knowledge needed of each component in order to live up to the desired behaviour:
Unfortunately we did not get to the robustness part and this is left for another team to implement.