etcdraft

package
v0.0.0-...-0441c58 Latest Latest
Warning

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

Go to latest
Published: Jun 11, 2019 License: Apache-2.0 Imports: 31 Imported by: 0

Documentation

Index

Constants

View Source
const DefaultSnapshotCatchUpEntries = uint64(500)

DefaultSnapshotCatchUpEntries is the default number of entries to preserve in memory when a snapshot is taken. This is for slow followers to catch up.

Variables

This section is empty.

Functions

func ConfigEnvelopeFromBlock

func ConfigEnvelopeFromBlock(block *common.Block) (*common.Envelope, error)

ConfigEnvelopeFromBlock extracts configuration envelop from the block based on the config type, i.e. HeaderType_ORDERER_TRANSACTION or HeaderType_CONFIG

func ConsensusMetadataFromConfigBlock

func ConsensusMetadataFromConfigBlock(block *common.Block) (*etcdraft.Metadata, error)

ConsensusMetadataFromConfigBlock reads consensus metadata updates from the configuration block

func ConsentersToMap

func ConsentersToMap(consenters []*etcdraft.Consenter) map[string]struct{}

ConsentersToMap maps consenters into set where key is client TLS certificate

func EndpointconfigFromFromSupport

func EndpointconfigFromFromSupport(support consensus.ConsenterSupport) (*cluster.EndpointConfig, error)

EndpointconfigFromFromSupport extracts TLS CA certificates and endpoints from the ConsenterSupport

func IsMembershipUpdate

func IsMembershipUpdate(block *common.Block, currentMetadata *etcdraft.RaftMetadata) (bool, error)

IsMembershipUpdate checks whenever block is config block and carries raft cluster membership updates

func LastConfigBlock

func LastConfigBlock(block *common.Block, support consensus.ConsenterSupport) (*common.Block, error)

LastConfigBlock returns the last config block relative to the given block.

func MembershipByCert

func MembershipByCert(consenters map[uint64]*etcdraft.Consenter) map[string]struct{}

MembershipByCert convert consenters map into set encapsulated by map where key is client TLS certificate

func MetadataFromConfigUpdate

func MetadataFromConfigUpdate(update *common.ConfigUpdate) (*etcdraft.Metadata, error)

MetadataFromConfigUpdate extracts consensus metadata from config update

func MetadataFromConfigValue

func MetadataFromConfigValue(configValue *common.ConfigValue) (*etcdraft.Metadata, error)

MetadataFromConfigValue reads and translates configuration updates from config value into raft metadata

func RaftPeers

func RaftPeers(consenters map[uint64]*etcdraft.Consenter) []raft.Peer

RaftPeers maps consenters to slice of raft.Peer

Types

type BlockPuller

type BlockPuller interface {
	PullBlock(seq uint64) *common.Block
	Close()
}

BlockPuller is used to pull blocks from other OSN

type Chain

type Chain struct {
	BlockCreator *blockCreator
	// contains filtered or unexported fields
}

Chain implements consensus.Chain interface.

func NewChain

func NewChain(
	support consensus.ConsenterSupport,
	opts Options,
	conf Configurator,
	rpc RPC,
	puller BlockPuller,
	observeC chan<- uint64) (*Chain, error)

NewChain constructs a chain object.

func (*Chain) Configure

func (c *Chain) Configure(env *common.Envelope, configSeq uint64) error

Configure submits config type transactions for ordering.

func (*Chain) Errored

func (c *Chain) Errored() <-chan struct{}

Errored returns a channel that closes when the chain stops.

func (*Chain) Halt

func (c *Chain) Halt()

Halt stops the chain.

func (*Chain) Order

func (c *Chain) Order(env *common.Envelope, configSeq uint64) error

Order submits normal type transactions for ordering.

func (*Chain) Start

func (c *Chain) Start()

Start instructs the orderer to begin serving the chain and keep it current.

func (*Chain) Step

func (c *Chain) Step(req *orderer.StepRequest, sender uint64) error

Step passes the given StepRequest message to the raft.Node instance

func (*Chain) Submit

func (c *Chain) Submit(req *orderer.SubmitRequest, sender uint64) error

Submit forwards the incoming request to: - the local serveRequest goroutine if this is leader - the actual leader via the transport mechanism The call fails if there's no leader elected yet.

func (*Chain) WaitReady

func (c *Chain) WaitReady() error

WaitReady blocks when the chain: - is catching up with other nodes using snapshot

In any other case, it returns right away.

type ChainGetter

type ChainGetter interface {
	// GetChain obtains the ChainSupport for the given channel.
	// Returns nil, false when the ChainSupport for the given channel
	// isn't found.
	GetChain(chainID string) *multichannel.ChainSupport
}

ChainGetter obtains instances of ChainSupport for the given channel

type Config

type Config struct {
	WALDir  string // WAL data of <my-channel> is stored in WALDir/<my-channel>
	SnapDir string // Snapshots of <my-channel> are stored in SnapDir/<my-channel>
}

Config contains etcdraft configurations

type Configurator

type Configurator interface {
	Configure(channel string, newNodes []cluster.RemoteNode)
}

Configurator is used to configure the communication layer when the chain starts.

type Consenter

type Consenter struct {
	Dialer        *cluster.PredicateDialer
	Communication cluster.Communicator
	*Dispatcher
	Chains         ChainGetter
	Logger         *flogging.FabricLogger
	EtcdRaftConfig Config
	OrdererConfig  localconfig.TopLevel
	Cert           []byte
}

Consenter implements etddraft consenter

func New

New creates a etcdraft Consenter

func (*Consenter) HandleChain

func (c *Consenter) HandleChain(support consensus.ConsenterSupport, metadata *common.Metadata) (consensus.Chain, error)

HandleChain returns a new Chain instance or an error upon failure

func (*Consenter) ReceiverByChain

func (c *Consenter) ReceiverByChain(channelID string) MessageReceiver

ReceiverByChain returns the MessageReceiver for the given channelID or nil if not found.

func (*Consenter) TargetChannel

func (c *Consenter) TargetChannel(message proto.Message) string

TargetChannel extracts the channel from the given proto.Message. Returns an empty string on failure.

type ConsenterCertificate

type ConsenterCertificate []byte

ConsenterCertificate denotes a TLS certificate of a consenter

func (ConsenterCertificate) IsConsenterOfChannel

func (conCert ConsenterCertificate) IsConsenterOfChannel(configBlock *common.Block) error

IsConsenterOfChannel returns whether the caller is a consenter of a channel by inspecting the given configuration block. It returns nil if true, else returns an error.

type Dispatcher

type Dispatcher struct {
	Logger        *flogging.FabricLogger
	ChainSelector ReceiverGetter
}

Dispatcher dispatches Submit and Step requests to the designated per chain instances

func (*Dispatcher) OnStep

func (d *Dispatcher) OnStep(channel string, sender uint64, request *orderer.StepRequest) (*orderer.StepResponse, error)

OnStep notifies the Dispatcher for a reception of a StepRequest from a given sender on a given channel

func (*Dispatcher) OnSubmit

func (d *Dispatcher) OnSubmit(channel string, sender uint64, request *orderer.SubmitRequest) (*orderer.SubmitResponse, error)

OnSubmit notifies the Dispatcher for a reception of a SubmitRequest from a given sender on a given channel

type MembershipChanges

type MembershipChanges struct {
	AddedNodes   []*etcdraft.Consenter
	RemovedNodes []*etcdraft.Consenter
	TotalChanges uint32
}

MembershipChanges keeps information about membership changes introduced during configuration update

func ComputeMembershipChanges

func ComputeMembershipChanges(oldConsenters map[uint64]*etcdraft.Consenter, newConsenters []*etcdraft.Consenter) *MembershipChanges

ComputeMembershipChanges computes membership update based on information about new conseters, returns two slices: a slice of added consenters and a slice of consenters to be removed

func (*MembershipChanges) UpdateRaftMetadataAndConfChange

func (mc *MembershipChanges) UpdateRaftMetadataAndConfChange(raftMetadata *etcdraft.RaftMetadata) *raftpb.ConfChange

UpdateRaftMetadataAndConfChange given the membership changes and RaftMetadata method calculates updates to be applied to the raft cluster configuration in addition updates mapping between consenter and its id within metadata

type MemoryStorage

type MemoryStorage interface {
	raft.Storage
	Append(entries []raftpb.Entry) error
	SetHardState(st raftpb.HardState) error
	CreateSnapshot(i uint64, cs *raftpb.ConfState, data []byte) (raftpb.Snapshot, error)
	Compact(compactIndex uint64) error
	ApplySnapshot(snap raftpb.Snapshot) error
}

MemoryStorage is currently backed by etcd/raft.MemoryStorage. This interface is defined to expose dependencies of fsm so that it may be swapped in the future. TODO(jay) Add other necessary methods to this interface once we need them in implementation, e.g. ApplySnapshot.

type MessageReceiver

type MessageReceiver interface {
	// Step passes the given StepRequest message to the MessageReceiver
	Step(req *orderer.StepRequest, sender uint64) error

	// Submit passes the given SubmitRequest message to the MessageReceiver
	Submit(req *orderer.SubmitRequest, sender uint64) error
}

MessageReceiver receives messages

type Options

type Options struct {
	RaftID uint64

	Clock clock.Clock

	WALDir       string
	SnapDir      string
	SnapInterval uint64

	// This is configurable mainly for testing purpose. Users are not
	// expected to alter this. Instead, DefaultSnapshotCatchUpEntries is used.
	SnapshotCatchUpEntries uint64

	MemoryStorage MemoryStorage
	Logger        *flogging.FabricLogger

	TickInterval    time.Duration
	ElectionTick    int
	HeartbeatTick   int
	MaxSizePerMsg   uint64
	MaxInflightMsgs int

	RaftMetadata *etcdraft.RaftMetadata
}

Options contains all the configurations relevant to the chain.

type RPC

type RPC interface {
	Step(dest uint64, msg *orderer.StepRequest) (*orderer.StepResponse, error)
	SendSubmit(dest uint64, request *orderer.SubmitRequest) error
}

RPC is used to mock the transport layer in tests.

type RaftStorage

type RaftStorage struct {
	SnapshotCatchUpEntries uint64
	// contains filtered or unexported fields
}

RaftStorage encapsulates storages needed for etcd/raft data, i.e. memory, wal

func CreateStorage

func CreateStorage(
	lg *flogging.FabricLogger,
	applied uint64,
	walDir string,
	snapDir string,
	ram MemoryStorage,
) (*RaftStorage, error)

CreateStorage attempts to create a storage to persist etcd/raft data. If data presents in specified disk, they are loaded to reconstruct storage state.

func (*RaftStorage) ApplySnapshot

func (rs *RaftStorage) ApplySnapshot(snap raftpb.Snapshot)

ApplySnapshot applies snapshot to local memory storage

func (*RaftStorage) Close

func (rs *RaftStorage) Close() error

Close closes storage

func (*RaftStorage) Snapshot

func (rs *RaftStorage) Snapshot() raftpb.Snapshot

Snapshot returns the latest snapshot stored in memory

func (*RaftStorage) Store

func (rs *RaftStorage) Store(entries []raftpb.Entry, hardstate raftpb.HardState, snapshot raftpb.Snapshot) error

Store persists etcd/raft data

func (*RaftStorage) TakeSnapshot

func (rs *RaftStorage) TakeSnapshot(i uint64, cs *raftpb.ConfState, data []byte) error

TakeSnapshot takes a snapshot at index i from MemoryStorage, and persists it to wal and disk.

type ReceiverGetter

type ReceiverGetter interface {
	// ReceiverByChain returns the MessageReceiver if it exists, or nil if it doesn't
	ReceiverByChain(channelID string) MessageReceiver
}

ReceiverGetter obtains instances of MessageReceiver given a channel ID

Directories

Path Synopsis
Code generated by counterfeiter.
Code generated by counterfeiter.

Jump to

Keyboard shortcuts

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