etcdraft

package
v0.0.0-...-95b87ed Latest Latest
Warning

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

Go to latest
Published: Sep 16, 2019 License: Apache-2.0 Imports: 43 Imported by: 0

Documentation

Index

Constants

View Source
const (
	BYTE = 1 << (10 * iota)
	KILOBYTE
	MEGABYTE
	GIGABYTE
	TERABYTE
)
View Source
const (
	DefaultSnapshotCatchUpEntries = uint64(20)

	DefaultSnapshotIntervalSize = 20 * MEGABYTE

	DefaultEvictionSuspicion = time.Minute * 10

	DefaultLeaderlessCheckInterval = time.Second * 10
)

Variables

View Source
var (
	ActiveNodesOpts = metrics.GaugeOpts{
		Namespace:    "consensus",
		Subsystem:    "etcdraft",
		Name:         "active_nodes",
		Help:         "Number of active nodes in this channel.",
		LabelNames:   []string{"channel"},
		StatsdFormat: "%{#fqname}.%{channel}",
	}
)
View Source
var MaxSnapshotFiles = 5

Functions

func CheckConfigMetadata

func CheckConfigMetadata(metadata *etcdraft.ConfigMetadata) error

func ConfChange

func ConfChange(blockMetadata *etcdraft.BlockMetadata, confState *raftpb.ConfState) *raftpb.ConfChange

func ConfigChannelHeader

func ConfigChannelHeader(block *common.Block) (hdr *common.ChannelHeader, err error)

func ConfigEnvelopeFromBlock

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

func ConsensusMetadataFromConfigBlock

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

func ConsentersToMap

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

func CreateConsentersMap

func CreateConsentersMap(blockMetadata *etcdraft.BlockMetadata, configMetadata *etcdraft.ConfigMetadata) map[uint64]*etcdraft.Consenter

func EndpointconfigFromSupport

func EndpointconfigFromSupport(support consensus.ConsenterSupport, bccsp bccsp.BCCSP) ([]cluster.EndpointCriteria, error)

func ListSnapshots

func ListSnapshots(logger *flogging.FabricLogger, snapDir string) []uint64

func MembershipByCert

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

func MetadataFromConfigUpdate

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

func MetadataFromConfigValue

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

func MetadataHasDuplication

func MetadataHasDuplication(md *etcdraft.ConfigMetadata) error

func NodeExists

func NodeExists(id uint64, nodes []uint64) bool

func RaftPeers

func RaftPeers(consenterIDs []uint64) []raft.Peer

func ReadBlockMetadata

func ReadBlockMetadata(blockMetadata *common.Metadata, configMetadata *etcdraft.ConfigMetadata) (*etcdraft.BlockMetadata, error)

Types

type BlockPuller

type BlockPuller interface {
	PullBlock(seq uint64) *common.Block
	HeightsByEndpoints() (map[string]uint64, error)
	Close()
}

func NewBlockPuller

func NewBlockPuller(support consensus.ConsenterSupport,
	baseDialer *cluster.PredicateDialer,
	clusterConfig localconfig.Cluster,
	bccsp bccsp.BCCSP,
) (BlockPuller, error)

type Chain

type Chain struct {
	ActiveNodes atomic.Value

	Node *node

	Metrics *Metrics
	// contains filtered or unexported fields
}

func NewChain

func NewChain(
	support consensus.ConsenterSupport,
	opts Options,
	conf Configurator,
	rpc RPC,
	f CreateBlockPuller,
	observeC chan<- raft.SoftState) (*Chain, error)

func (*Chain) Configure

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

func (*Chain) Consensus

func (c *Chain) Consensus(req *orderer.ConsensusRequest, sender uint64) error

func (*Chain) Errored

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

func (*Chain) Halt

func (c *Chain) Halt()

func (*Chain) Order

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

func (*Chain) Start

func (c *Chain) Start()

func (*Chain) Submit

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

func (*Chain) ValidateConsensusMetadata

func (c *Chain) ValidateConsensusMetadata(oldMetadataBytes, newMetadataBytes []byte, newChannel bool) error

func (*Chain) WaitReady

func (c *Chain) WaitReady() error

type ChainGetter

type ChainGetter interface {
	GetChain(chainID string) *multichannel.ChainSupport
}

type Config

type Config struct {
	WALDir            string
	SnapDir           string
	EvictionSuspicion string
}

type Configurator

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

type Consenter

type Consenter struct {
	CreateChain           func(chainName string)
	InactiveChainRegistry InactiveChainRegistry
	Dialer                *cluster.PredicateDialer
	Communication         cluster.Communicator
	*Dispatcher
	Chains         ChainGetter
	Logger         *flogging.FabricLogger
	EtcdRaftConfig Config
	OrdererConfig  localconfig.TopLevel
	Cert           []byte
	Metrics        *Metrics
}

func New

func New(
	clusterDialer *cluster.PredicateDialer,
	conf *localconfig.TopLevel,
	srvConf comm.ServerConfig,
	srv *comm.GRPCServer,
	r *multichannel.Registrar,
	icr InactiveChainRegistry,
	metricsProvider metrics.Provider,
) *Consenter

func (*Consenter) HandleChain

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

func (*Consenter) ReceiverByChain

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

func (*Consenter) TargetChannel

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

type ConsenterCertificate

type ConsenterCertificate []byte

func (ConsenterCertificate) IsConsenterOfChannel

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

type CreateBlockPuller

type CreateBlockPuller func() (BlockPuller, error)

type CreateChainCallback

type CreateChainCallback func()

type Dispatcher

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

func (*Dispatcher) OnConsensus

func (d *Dispatcher) OnConsensus(channel string, sender uint64, request *orderer.ConsensusRequest) error

func (*Dispatcher) OnSubmit

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

type Disseminator

type Disseminator struct {
	RPC
	// contains filtered or unexported fields
}

func (*Disseminator) SendConsensus

func (d *Disseminator) SendConsensus(dest uint64, msg *orderer.ConsensusRequest) error

func (*Disseminator) UpdateMetadata

func (d *Disseminator) UpdateMetadata(m []byte)

type InactiveChainRegistry

type InactiveChainRegistry interface {
	TrackChain(chainName string, genesisBlock *common.Block, createChain CreateChainCallback)
}

type LedgerBlockPuller

type LedgerBlockPuller struct {
	BlockPuller
	BlockRetriever cluster.BlockRetriever
	Height         func() uint64
}

func (*LedgerBlockPuller) PullBlock

func (lp *LedgerBlockPuller) PullBlock(seq uint64) *common.Block

type MembershipChanges

type MembershipChanges struct {
	NewBlockMetadata *etcdraft.BlockMetadata
	NewConsenters    map[uint64]*etcdraft.Consenter
	AddedNodes       []*etcdraft.Consenter
	RemovedNodes     []*etcdraft.Consenter
	ConfChange       *raftpb.ConfChange
	RotatedNode      uint64
}

func ComputeMembershipChanges

func ComputeMembershipChanges(oldMetadata *etcdraft.BlockMetadata, oldConsenters map[uint64]*etcdraft.Consenter, newConsenters []*etcdraft.Consenter) (mc *MembershipChanges, err error)

func (*MembershipChanges) Changed

func (mc *MembershipChanges) Changed() bool

func (*MembershipChanges) Rotated

func (mc *MembershipChanges) Rotated() bool

func (*MembershipChanges) String

func (mc *MembershipChanges) String() string

func (*MembershipChanges) UnacceptableQuorumLoss

func (mc *MembershipChanges) UnacceptableQuorumLoss(active []uint64) bool

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
}

type MessageReceiver

type MessageReceiver interface {
	Consensus(req *orderer.ConsensusRequest, sender uint64) error

	Submit(req *orderer.SubmitRequest, sender uint64) error
}

type Metrics

type Metrics struct {
	ClusterSize             metrics.Gauge
	IsLeader                metrics.Gauge
	ActiveNodes             metrics.Gauge
	CommittedBlockNumber    metrics.Gauge
	SnapshotBlockNumber     metrics.Gauge
	LeaderChanges           metrics.Counter
	ProposalFailures        metrics.Counter
	DataPersistDuration     metrics.Histogram
	NormalProposalsReceived metrics.Counter
	ConfigProposalsReceived metrics.Counter
}

func NewMetrics

func NewMetrics(p metrics.Provider) *Metrics

type Options

type Options struct {
	RaftID uint64

	Clock clock.Clock

	WALDir               string
	SnapDir              string
	SnapshotIntervalSize uint32

	SnapshotCatchUpEntries uint64

	MemoryStorage MemoryStorage
	Logger        *flogging.FabricLogger

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

	BlockMetadata *etcdraft.BlockMetadata
	Consenters    map[uint64]*etcdraft.Consenter

	MigrationInit bool

	Metrics *Metrics
	Cert    []byte

	EvictionSuspicion   time.Duration
	LeaderCheckInterval time.Duration
}

type PeriodicCheck

type PeriodicCheck struct {
	Logger        *flogging.FabricLogger
	CheckInterval time.Duration
	Condition     func() bool
	Report        func(cumulativePeriod time.Duration)
	// contains filtered or unexported fields
}

func (*PeriodicCheck) Run

func (pc *PeriodicCheck) Run()

func (*PeriodicCheck) Stop

func (pc *PeriodicCheck) Stop()

type RPC

type RPC interface {
	SendConsensus(dest uint64, msg *orderer.ConsensusRequest) error
	SendSubmit(dest uint64, request *orderer.SubmitRequest) error
}

type RaftStorage

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

func CreateStorage

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

func (*RaftStorage) ApplySnapshot

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

func (*RaftStorage) Close

func (rs *RaftStorage) Close() error

func (*RaftStorage) Snapshot

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

func (*RaftStorage) Store

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

func (*RaftStorage) TakeSnapshot

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

type ReceiverGetter

type ReceiverGetter interface {
	ReceiverByChain(channelID string) MessageReceiver
}

type Tracker

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

func (*Tracker) Check

func (t *Tracker) Check(status *raft.Status)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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