raft

package
v0.420.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 3, 2025 License: Apache-2.0 Imports: 18 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AddEventView added in v0.418.0

func AddEventView[
	V encoding.BinaryMarshaler,
	VPtr Unmarshallable[V],
	E RaftStreamEvent[V, VPtr],
	EPtr Unmarshallable[E],
](ctx context.Context, builder *Builder, shardID uint64) eventstream.EventView[V, E]

AddEventView to the Builder

Types

type Builder added in v0.418.0

type Builder struct {
	// contains filtered or unexported fields
}

Builder for a Raft Cluster.

func NewBuilder added in v0.418.0

func NewBuilder(cfg *RaftConfig) *Builder

func (*Builder) Build added in v0.418.0

func (b *Builder) Build(ctx context.Context) *Cluster

type Cluster

type Cluster struct {
	// contains filtered or unexported fields
}

Cluster of dragonboat nodes.

func (*Cluster) AddMember

AddMember to the cluster. This needs to be called on an existing running cluster member, before the new member is started.

func (*Cluster) Join

func (c *Cluster) Join(ctx context.Context) error

Join the cluster as a new member. Blocks until the cluster instance is ready.

func (*Cluster) Ping added in v0.420.0

Ping the cluster.

func (*Cluster) Start

func (c *Cluster) Start(ctx context.Context) error

Start the cluster. Blocks until the cluster instance is ready.

func (*Cluster) Stop

func (c *Cluster) Stop(ctx context.Context)

Stop the node host and all shards. After this call, all the shard handlers created with this cluster are invalid.

type Event

type Event interface {
	encoding.BinaryMarshaler
}

Event to update the state machine. These are stored in the Raft log.

type RaftConfig

type RaftConfig struct {
	InitialMembers    []string      `help:"Initial members" required:""`
	ReplicaID         uint64        `help:"Node ID" required:""`
	DataDir           string        `help:"Data directory" required:""`
	RaftAddress       string        `help:"Address to advertise to other nodes" required:""`
	ListenAddress     string        `help:"Address to listen for incoming traffic. If empty, RaftAddress will be used."`
	ShardReadyTimeout time.Duration `help:"Timeout for shard to be ready" default:"5s"`
	// Raft configuration
	RTT                time.Duration `help:"Estimated average round trip time between nodes" default:"200ms"`
	ElectionRTT        uint64        `help:"Election RTT as a multiple of RTT" default:"10"`
	HeartbeatRTT       uint64        `help:"Heartbeat RTT as a multiple of RTT" default:"1"`
	SnapshotEntries    uint64        `help:"Snapshot entries" default:"10"`
	CompactionOverhead uint64        `help:"Compaction overhead" default:"100"`
}

type RaftEventView added in v0.414.0

type RaftEventView[V encoding.BinaryMarshaler, VPrt Unmarshallable[V], E RaftStreamEvent[V, VPrt]] struct {
	// contains filtered or unexported fields
}

func (*RaftEventView[V, VPrt, E]) Publish added in v0.414.0

func (s *RaftEventView[V, VPrt, E]) Publish(ctx context.Context, event E) error

func (*RaftEventView[V, VPrt, E]) View added in v0.414.0

func (s *RaftEventView[V, VPrt, E]) View(ctx context.Context) (V, error)

type RaftStreamEvent added in v0.414.0

type RaftStreamEvent[View encoding.BinaryMarshaler, VPtr Unmarshallable[View]] interface {
	encoding.BinaryMarshaler
	eventstream.Event[View]
}

type ShardHandle

type ShardHandle[E Event, Q any, R any] struct {
	// contains filtered or unexported fields
}

ShardHandle is a handle to a shard in the cluster. It is the interface to update and query the state of a shard.

E is the event type. Q is the query type. R is the query response type.

func AddShard

func AddShard[Q any, R any, E Event, EPtr Unmarshallable[E]](
	ctx context.Context,
	to *Builder,
	shardID uint64,
	sm StateMachine[Q, R, E, EPtr],
) *ShardHandle[E, Q, R]

AddShard adds a shard to the cluster Builder.

func (*ShardHandle[E, Q, R]) Propose

func (s *ShardHandle[E, Q, R]) Propose(ctx context.Context, msg E) error

Propose an event to the shard.

func (*ShardHandle[E, Q, R]) Query

func (s *ShardHandle[E, Q, R]) Query(ctx context.Context, query Q) (R, error)

Query the state of the shard.

type StateMachine

type StateMachine[Q any, R any, E Event, EPtr Unmarshallable[E]] interface {
	// Query the state of the state machine.
	Lookup(key Q) (R, error)
	// Update the state of the state machine.
	Update(msg E) error
	// Save the state of the state machine to a snapshot.
	Save(writer io.Writer) error
	// Recover the state of the state machine from a snapshot.
	Recover(reader io.Reader) error
	// Close the state machine.
	Close() error
}

StateMachine is a typed interface to dragonboat's statemachine.IStateMachine. It is used to implement the state machine for a single shard.

Q is the query type. R is the query response type. E is the event type.

type UnitQuery added in v0.414.0

type UnitQuery struct{}

type Unmarshallable

type Unmarshallable[T any] interface {
	*T
	encoding.BinaryUnmarshaler
}

Unmarshallable is a type that can be unmarshalled from a binary representation.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL