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 gorumsprotooptsto regenerate thegorums.pb.gofile. (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.goas follows a. add the optionPerNodeArgbool to theserviceMethodstruct. b. add the option to initialize of theserivceMethodstruct in theverifyExtensionsAndCreatefunction, like this:PerNodeArg: hasPerNodeArgExtension(method),c. update the logic in theisQuorumCallVariantfunction if necessary. d. update the error handling logic inverifyExtensionsAndCreate. - Update the template files (
.tmplindevfolder) related to your option. This is were your on your own. - To regenerate the gorums plugin, you need to run
make goldenanddevso that new proto files will understand your option. - Update the
dev/register.protofile with your new option (probably on a new method). - To use the new option in the
dev/register.protofile, you need to runmake devproto.
[1] Tormod E. Lea, Leander Jehl, and Hein Meling. Gorums: New Abstractions for Implementing Quorum-based Systems. In submission.