Categorygithub.com/libp2p/go-libp2p-raft
modulepackage
0.5.0
Repository: https://github.com/libp2p/go-libp2p-raft.git
Documentation: pkg.go.dev

# README

go-libp2p-raft

GoDoc Build Status codecov Discourse posts

A LibP2P wrapper for hashicorp/raft implementation.

go-libp2p-raft implements a go-libp2p-consensus interface wrapping hashicorp/raftimplementation and providing a libp2p network transport for it.

Table of Contents

Background

Raft is a fault-tolerant consensus algorithm that allows a number of peers to agree on a State. Each peer can submit updates to that State, which are then distributed and agreed upon.

Hashicorp's Raft is a mature implementation of the algorithm, which includes a number of performance improvements over the original version and a modular approach that allows to replace pieces of the system with custom implementations.

LibP2P provides a modular peer-to-peer networking stack, which simplifies the networking layer by adding features like generic addressing, secure channels, protocol multiplexing over single connections or nat traversal in a standarized fashion.

go-libp2p-raft uses Hashicorp's Raft implementation and provides a LibP2P-based network transport for it. At the same time, it wraps the whole system with an implementation of the go-libp2p-consensus interface, ensuring any applications relying on it can easily swap it for a different one.

In short, go-libp2p-raft:

  • can be used to implement raft-consensus-based systems
  • takes advantange of the libp2p features (secure channels, protocol multiplexing, nat transversal...)
  • takes advantage of Hashicorp's Raft implementation matureness and performance improvementes (pipelining)
  • forms a layer which can easily be replaced by a different go-libp2p-consensus implementation.

Install

go-libp2p-raft works like a regular Go library and uses Go modules for depdendency management:

Usage

The documentation and examples for this module can be found in godoc.org/github.com/libp2p/go-libp2p-raft.

Contribute

PRs accepted.

Small note: If editing the README, please conform to the standard-readme specification.

License

MIT © Protocol Labs, Inc.


The last gx published version of this module was: 1.2.20: QmX73JLtJ92tDcZajRrYtQDVSLQ5LPnADHwwQLXkTzNRhE

# Functions

DecodeSnapshot de-serializes a state encoded with EncodeSnapshot onto the given state.
EncodeSnapshot serializes a state and is used by our raft's FSM implementation to describe the format raft stores snapshots on disk.
NewActor returns a new actor given a hashicorp/raft node.
NewConsensus returns a new consensus.
No description provided by the author
NewOpLog returns a new OpLog.

# Constants

No description provided by the author

# Variables

ErrNoState is returned when no state has been agreed upon by the consensus protocol.
MaxSubscriberCh indicates how much buffering the subscriber channel has.
SetStateTimeout specifies how long before giving up on setting a state.

# Structs

Actor implements a consensus.Actor, allowing to SetState in a libp2p Consensus system.
Consensus implements both the go-libp2p-consensus Consensus and the OpLogConsensus interfaces.
FSM implements a minimal raft.FSM that holds a generic consensus.State and applies generic Ops to it.
HcLogToLogger implements github.com/hashicorp/go-hclog.

# Interfaces

Marshable is an interface to be implemented by consensus.States and consensus.Op objects that wish to choose their serialization format for Raft snapshots.