-
Notifications
You must be signed in to change notification settings - Fork 27
High level perspective
The library is expected to be embedded in a distributed service (henceforth - 'the application') and each client request should be disseminated to all instances of the library and passed into the library via a call to SubmitRequest
.
The library ensures replication of the requests among instances of itself in a total order manner, and delivery of these requests back to the application by invoking Deliver
.
The Controller
receives clients' requests, submits it to the RequestPool
which start a timer (with the Timeouter
) for each request. If the current View
indicates that this process is the leader, then the Controller
batches requests with the Batcher
, making sure first to check if the VerificationSequence
has changed and if so it verifies each request. Then with the help of the Assembler
it builds a new Proposal
which is then proposed to the current view.
The View
runs all three phases of the normal path, prePrepare, prepare, and commit. If it finished successfully it delivers the decision by calling the Decider
. The View
and the RequestPool
may complain to the ViewChanger
by sending a view change message.
The ViewChanger
runs the view change protocol and informs the Controller
about the new view. The Controller
then aborts the current View
and uses the ViewBuilder
to start a new one.
The Synchronizer
is used for replication when a node is behind. It is called by the View
when it suspects that something is wrong.