Gorums [1] is a novel framework for building fault tolerant distributed systems. Gorums offers a flexible and simple quorum call abstraction, used to communicate with a set of processes, and to collect and process their responses. Gorums provides separate abstractions for (a) selecting processes for a quorum call and (b) processing replies. These abstractions simplify the main control flow of protocol implementations, especially for quorum-based systems, where only a subset of the replies to a quorum call need to be processed.
Gorums uses code generation to produce an RPC library that clients can use to invoke quorum calls. Gorums is a wrapper around the gRPC library. Services are defined using the protocol buffers interface definition language.
The original EPaxos implementation modified to use Gorums can be found here.
A collection of different algorithms for reconfigurable atomic storage implemented using Gorums can be found here.
- Add your extension option to
gorums.proto
. We currently only have method options. - Run
make gorumsprotoopts
to regenerate thegorums.pb.go
file. (TODO we could probably avoid using a make file for this and instead dogo generate
) - Add a check function, such as
hasPerNodeArgExtension()
, for your option inplugins/gorums/ext.go
. - Update the
plugins/gorums/gorums.go
as follows a. add the optionPerNodeArg
bool to theserviceMethod
struct. b. add the option to initialize of theserivceMethod
struct in theverifyExtensionsAndCreate
function, like this:PerNodeArg: hasPerNodeArgExtension(method),
c. update the logic in theisQuorumCallVariant
function if necessary. d. update the error handling logic inverifyExtensionsAndCreate
. - Update the template files (
.tmpl
indev
folder) related to your option. This is were your on your own. - To regenerate the gorums plugin, you need to run
make goldenanddev
so that new proto files will understand your option. - Update the
dev/register.proto
file with your new option (probably on a new method). - To use the new option in the
dev/register.proto
file, you need to runmake devproto
.
[1] Tormod E. Lea, Leander Jehl, and Hein Meling. Gorums: New Abstractions for Implementing Quorum-based Systems. In submission.