consensus

package
v1.11.1 Latest Latest
Warning

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

Go to latest
Published: Jun 4, 2019 License: MIT Imports: 17 Imported by: 23

Documentation

Index

Constants

View Source
const DefaultBlockIntervalSec = int64(1)

DefaultBlockIntervalSec is the default block generation interval in seconds.

Variables

View Source
var (
	// BlockIntervalSec is the block genration interval in seconds.
	BlockIntervalSec = DefaultBlockIntervalSec

	// BlockInterval is the maximum block generation time limit.
	BlockInterval = time.Second * time.Duration(DefaultBlockIntervalSec)
)
View Source
var (
	WalEntryType_name = map[EntryType]string{
		0: "EntryBlock",
		1: "EntryEmpty",
		2: "EntryConfChange",
	}

	ErrURLInvalidScheme = errors.New("url has invalid scheme")
	ErrURLInvalidPort   = errors.New("url must have host:port style")
	ErrInvalidMemberID  = errors.New("member id of conf change doesn't match")
	ErrEmptySnapData    = errors.New("failed to decode snapshot data. encoded data is empty")
)
View Source
var ConsensusName = []string{"dpos", "raft", "sbp"}
View Source
var (
	ErrNotSupportedMethod = errors.New("not supported metehod in this consensus")
)

Functions

func ConfStateToString added in v0.9.0

func ConfStateToString(conf *raftpb.ConfState) string

func InitBlockInterval

func InitBlockInterval(blockIntervalSec int64)

InitBlockInterval initializes block interval parameters.

func ParseToUrl added in v0.9.0

func ParseToUrl(urlstr string) (*url.URL, error)

func SnapToString added in v0.9.0

func SnapToString(snap *raftpb.Snapshot, snapd *SnapshotData) string

func Start

func Start(c Consensus)

Start run a selected consesus service.

func Stop

func Stop(c Consensus)

Stop shutdown consensus service.

Types

type BlockFactory

type BlockFactory interface {
	Start()
	JobQueue() chan<- interface{}
}

BlockFactory is an interface for a block factory implementation.

type ChainConsensus

type ChainConsensus interface {
	GetType() ConsensusType
	IsTransactionValid(tx *types.Tx) bool
	VerifyTimestamp(block *types.Block) bool
	VerifySign(block *types.Block) error
	IsBlockValid(block *types.Block, bestBlock *types.Block) error
	Update(block *types.Block)
	Save(tx TxWriter) error
	NeedReorganization(rootNo types.BlockNo) bool
	NeedNotify() bool
	HasWAL() bool // if consensus has WAL, block has already written in db
	Info() string
}

ChainConsensus includes chainstatus and validation API.

type ChainDB added in v0.9.0

type ChainDB interface {
	GetBestBlock() (*types.Block, error)
	GetBlockByNo(blockNo types.BlockNo) (*types.Block, error)
	GetGenesisInfo() *types.Genesis
	Get(key []byte) []byte
	NewTx() db.Transaction
}

ChainDB is a reader interface for the ChainDB.

type ChainSnapshot added in v0.9.0

type ChainSnapshot struct {
	No   types.BlockNo `json:"no"`
	Hash []byte        `json:"hash"`
}

func NewChainSnapshot added in v0.9.0

func NewChainSnapshot(block *types.Block) *ChainSnapshot

func (*ChainSnapshot) Equal added in v0.9.0

func (csnap *ChainSnapshot) Equal(other *ChainSnapshot) bool

func (*ChainSnapshot) ToString added in v0.9.0

func (csnap *ChainSnapshot) ToString() string

type ChainWAL added in v0.9.0

type ChainWAL interface {
	ChainDB

	IsWALInited() bool
	GetBlock(blockHash []byte) (*types.Block, error)
	ReadAll() (state raftpb.HardState, ents []raftpb.Entry, err error)
	WriteRaftEntry([]*WalEntry, []*types.Block) error
	GetRaftEntry(idx uint64) (*WalEntry, error)
	HasWal() (bool, error)
	GetRaftEntryLastIdx() (uint64, error)
	GetHardState() (*raftpb.HardState, error)
	WriteHardState(hardstate *raftpb.HardState) error
	WriteSnapshot(snap *raftpb.Snapshot) error
	GetSnapshot() (*raftpb.Snapshot, error)
	WriteIdentity(id *RaftIdentity) error
	GetIdentity() (*RaftIdentity, error)
}

type ConfChangePropose added in v0.9.0

type ConfChangePropose struct {
	Ctx context.Context
	Cc  *raftpb.ConfChange

	ReplyC chan *ConfChangeReply
}

type ConfChangeReply added in v0.9.0

type ConfChangeReply struct {
	Member *Member
	Err    error
}

type Consensus

type Consensus interface {
	ChainConsensus
	ConsensusAccessor
	Ticker() *time.Ticker
	QueueJob(now time.Time, jq chan<- interface{})
	BlockFactory() BlockFactory
	QuitChan() chan interface{}
}

Consensus is an interface for a consensus implementation.

type ConsensusAccessor added in v0.9.0

type ConsensusAccessor interface {
	ConsensusInfo() *types.ConsensusInfo
	ConfChange(req *types.MembershipChange) (*Member, error)
	ClusterInfo() ([]*types.MemberAttr, []byte, error)
}

type ConsensusType added in v0.9.0

type ConsensusType int
const (
	ConsensusDPOS ConsensusType = iota
	ConsensusRAFT
	ConsensusSBP
)

type Constructor added in v0.9.0

type Constructor func() (Consensus, error)

Constructor represents a function returning the Consensus interfactor for each implementation.

type EntryType added in v0.9.0

type EntryType int8
const (
	EntryBlock EntryType = iota
	EntryEmpty           // it is generated when node becomes leader
	EntryConfChange
	InvalidMemberID = 0
)

type ErrorConsensus

type ErrorConsensus struct {
	Msg string
	Err error
}

ErrorConsensus is a basic error struct for consensus modules.

func (ErrorConsensus) Error

func (e ErrorConsensus) Error() string

type Info added in v0.9.0

type Info struct {
	Type   string
	Status *json.RawMessage `json:",omitempty"`
}

Info represents an information for a consensus implementation.

func NewInfo added in v0.9.0

func NewInfo(name string) *Info

NewInfo returns a new Info with name.

func (*Info) AsJSON added in v0.9.0

func (i *Info) AsJSON() string

AsJSON() returns i as a JSON string

type Member added in v0.9.0

type Member struct {
	types.MemberAttr
}

func NewMember added in v0.9.0

func NewMember(name string, url string, peerID types.PeerID, chainID []byte, when int64) *Member

func (*Member) CalculateMemberID added in v0.9.0

func (m *Member) CalculateMemberID(chainID []byte, curTimestamp int64)

func (*Member) Clone added in v0.9.0

func (m *Member) Clone() *Member

func (*Member) Equal added in v0.9.0

func (m *Member) Equal(other *Member) bool

func (*Member) GetPeerID added in v0.9.0

func (m *Member) GetPeerID() types.PeerID

func (*Member) HasDuplicatedAttr added in v0.9.0

func (m *Member) HasDuplicatedAttr(x *Member) bool

func (*Member) IsCompatible added in v0.9.0

func (m *Member) IsCompatible(other *Member) bool

IsCompatible checks if name, url and peerid of this member are the same with other member

func (*Member) IsValid added in v0.9.0

func (m *Member) IsValid() bool

func (*Member) SetAttr added in v0.9.0

func (m *Member) SetAttr(attr *types.MemberAttr)

func (*Member) SetMemberID added in v0.9.0

func (m *Member) SetMemberID(id uint64)

func (*Member) ToString added in v0.9.0

func (m *Member) ToString() string

type MembersByName added in v0.9.0

type MembersByName []*Member

func (MembersByName) Len added in v0.9.0

func (mbrs MembersByName) Len() int

func (MembersByName) Less added in v0.9.0

func (mbrs MembersByName) Less(i, j int) bool

func (MembersByName) Swap added in v0.9.0

func (mbrs MembersByName) Swap(i, j int)

type RaftIdentity added in v0.9.0

type RaftIdentity struct {
	ID   uint64
	Name string
}

func (*RaftIdentity) ToString added in v0.9.0

func (rid *RaftIdentity) ToString() string

type SnapshotData added in v0.9.0

type SnapshotData struct {
	Chain          ChainSnapshot `json:"chain"`
	Members        []*Member     `json:"members"`
	RemovedMembers []*Member
}

func NewSnapshotData added in v0.9.0

func NewSnapshotData(members []*Member, rmMembers []*Member, block *types.Block) *SnapshotData

func (*SnapshotData) Decode added in v0.9.0

func (snapd *SnapshotData) Decode(data []byte) error

func (*SnapshotData) Encode added in v0.9.0

func (snapd *SnapshotData) Encode() ([]byte, error)

func (*SnapshotData) Equal added in v0.9.0

func (snapd *SnapshotData) Equal(t *SnapshotData) bool

func (*SnapshotData) ToString added in v0.9.0

func (snapd *SnapshotData) ToString() string

type TxWriter added in v0.9.0

type TxWriter interface {
	Set(key, value []byte)
}

type WalEntry added in v0.9.0

type WalEntry struct {
	Type  EntryType
	Term  uint64
	Index uint64
	Data  []byte // hash is set if Type is EntryBlock
}

func (*WalEntry) ToBytes added in v0.9.0

func (we *WalEntry) ToBytes() ([]byte, error)

func (*WalEntry) ToString added in v0.9.0

func (we *WalEntry) ToString() string

Directories

Path Synopsis
sbp

Jump to

Keyboard shortcuts

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