Versions in this module Expand all Collapse all v1 v1.3.3 Nov 16, 2019 Changes in this version + const BackendHTTP + const BackendP2P + const DefaultBlockFactoryTickMs + const DefaultElectionTickCount + const DefaultSlowNodeGap + const DefaultSnapFrequency + const DefaultTickMS + const HasNoLeader + const InvalidClusterID + const MembersNameApplied + const MembersNameInit + const MembersNameRemoved + const MinBlockFactoryTickMs + const RaftServerStateJoinCluster + const RaftServerStateNewCluster + const RaftServerStateRestart + var BlockFactoryTickMs time.Duration + var BlockIntervalMs time.Duration + var ConfSnapFrequency uint64 = DefaultSnapFrequency + var ConfSnapshotCatchUpEntriesN uint64 = ConfSnapFrequency + var DEBUG_PROPOSE_SLEEP = "DEBUG_PROPOSE_SLEEP" + var DfltTimeWaitPeerLive = time.Second * 5 + var ElectionTickCount = DefaultElectionTickCount + var ErrCCAlreadyAdded = errors.New("member has already added") + var ErrCCAlreadyApplied = errors.New("conf change entry is already applied") + var ErrCCAlreadyRemoved = errors.New("member has already removed") + var ErrCCMemberIsNil = errors.New("memeber is nil") + var ErrCCNoMemberToRemove = errors.New("there is no member to remove") + var ErrCancelGenerate = errors.New("cancel generating block because work becomes stale") + var ErrClusterHasNoMember = errors.New("cluster has no member") + var ErrClusterMismatchConfState = errors.New("members of cluster doesn't match with raft confstate") + var ErrClusterNotReady = errors.New("cluster is not ready") + var ErrConChangeTimeOut = errors.New("timeouted membership change request") + var ErrConfChangeChannelBusy = errors.New("channel of conf change propose is busy") + var ErrDupBP = errors.New("raft bp description is duplicated") + var ErrEmptyBPs = errors.New("BP list is empty") + var ErrEmptySnapshot = errors.New("received empty snapshot") + var ErrGetClusterEmpty = errors.New("getcluster reply is empty") + var ErrGetClusterFail = errors.New("failed to get cluster info") + var ErrGetClusterReplyC = errors.New("reply channel of getcluster request is closed") + var ErrGetClusterTimeout = errors.New("timeout for getcluster") + var ErrInvCCType = errors.New("change type of ") + var ErrInvalidConsensusName = errors.New("invalid consensus name") + var ErrInvalidEntry = errors.New("Invalid raftpb.entry") + var ErrInvalidMember = errors.New("member of conf change is invalid") + var ErrInvalidMembershipReqType = errors.New("invalid type of membership change request") + var ErrInvalidRaftIdentity = errors.New("raft identity is not set") + var ErrInvalidRaftPeerID = errors.New("peerID of current raft bp is not equals to p2p configure") + var ErrInvalidWalEntry = errors.New("invalid wal entry") + var ErrMemberAlreadyApplied = errors.New("member is already added") + var ErrNoEnableSyncPeer = errors.New("no peer to sync chain") + var ErrNotExistRaftMember = errors.New("not exist member of raft cluster") + var ErrNotExitRaftProgress = errors.New("progress of this node doesn't exist") + var ErrNotIncludedRaftMember = errors.New("this node isn't included in initial raft members") + var ErrNotMatchedRaftName = errors.New("mismatched name of raft identity") + var ErrNotMatchedRaftPeerID = errors.New("mismatched peerid of raft identity") + var ErrNotMsgSnap = errors.New("not pb.MsgSnap") + var ErrNotRaftLeader = errors.New("this node is not leader") + var ErrPendingConfChange = errors.New(...) + var ErrProposeNilBlock = errors.New("proposed block is nil") + var ErrRaftNotReady = errors.New("raft library is not initialized") + var ErrRaftStatusEmpty = errors.New("raft status is empty") + var ErrRemoveHealthyNode = errors.New("remove of a healthy node may cause the cluster to hang") + var ErrUnhealtyNodeExist = errors.New("can't add some node if unhealthy nodes exist") + var ErrUnmarshal = errors.New("failed to unmarshalEntryData log entry") + var ErrWalConvBlock = errors.New("failed to convert bytes of block from wal entry") + var ErrWalEntryTooLowTerm = errors.New("term of wal entry is too low") + var ErrWalGetHardState = errors.New("failed to read hard state") + var ErrWalGetLastIdx = errors.New("failed to read last Idx") + var MaxConfChangeTimeOut = time.Second * 100 + var MaxSlowNodeGap uint64 = DefaultSlowNodeGap + var MaxTimeOutCluter = time.Second * 10 + var MaxTryGetCluster = 3 + var MemberProgressStateNames = map[MemberProgressState]string + var RaftSkipEmptyBlock = false + var RaftTick = DefaultTickMS + var StopDupCommit = false + func EtcdIDToString(id uint64) string + func GetConstructor(cfg *config.Config, hub *component.ComponentHub, cdb consensus.ChainWAL, ...) consensus.Constructor + func GetName() string + func Init(raftCfg *config.RaftConfig) + func MaxUint64(x, y uint64) uint64 + func RecoverExit() + func ValidateGenesis(genesis *types.Genesis) error + type BlockFactory struct + ID string + func New(cfg *config.Config, hub *component.ComponentHub, cdb consensus.ChainWAL, ...) (*BlockFactory, error) + func (bf *BlockFactory) BlockFactory() consensus.BlockFactory + func (bf *BlockFactory) ClusterInfo(bestBlockHash []byte) *types.GetClusterInfoResponse + func (bf *BlockFactory) ConfChange(req *types.MembershipChange) (*consensus.Member, error) + func (bf *BlockFactory) ConfChangeInfo(requestID uint64) (*types.ConfChangeProgress, error) + func (bf *BlockFactory) ConsensusInfo() *types.ConsensusInfo + func (bf *BlockFactory) GetType() consensus.ConsensusType + func (bf *BlockFactory) HasWAL() bool + func (bf *BlockFactory) Info() string + func (bf *BlockFactory) InitCluster(cfg *config.Config) error + func (bf *BlockFactory) IsBlockValid(block *types.Block, bestBlock *types.Block) error + func (bf *BlockFactory) IsConnectedBlock(block *types.Block) bool + func (bf *BlockFactory) IsForkEnable() bool + func (bf *BlockFactory) IsTransactionValid(tx *types.Tx) bool + func (bf *BlockFactory) JobQueue() chan<- interface{} + func (bf *BlockFactory) MakeConfChangeProposal(req *types.MembershipChange) (*consensus.ConfChangePropose, error) + func (bf *BlockFactory) NeedNotify() bool + func (bf *BlockFactory) NeedReorganization(rootNo types.BlockNo) bool + func (bf *BlockFactory) QueueJob(now time.Time, jq chan<- interface{}) + func (bf *BlockFactory) QuitChan() chan interface{} + func (bf *BlockFactory) RaftAccessor() consensus.AergoRaftAccessor + func (bf *BlockFactory) Save(tx consensus.TxWriter) error + func (bf *BlockFactory) Start() + func (bf *BlockFactory) Ticker() *time.Ticker + func (bf *BlockFactory) Update(block *types.Block) + func (bf *BlockFactory) VerifySign(block *types.Block) error + func (bf *BlockFactory) VerifyTimestamp(*types.Block) bool + type ChainSnapshotter struct + func (chainsnap *ChainSnapshotter) SaveFromRemote(r io.Reader, id uint64, msg raftpb.Message) (int64, error) + type Cluster struct + Size uint32 + func GetClusterInfo(hs *component.ComponentHub, bestHash []byte) (*Cluster, *types.HardStateInfo, error) + func NewCluster(chainID []byte, bf *BlockFactory, raftName string, p2pPeerID types.PeerID, ...) *Cluster + func NewClusterFromMemberAttrs(clusterID uint64, chainID []byte, memberAttrs []*types.MemberAttr) (*Cluster, error) + func (cl *Cluster) AddInitialMembers(mbrs []*types.MemberAttr) error + func (cl *Cluster) AfterConfChange(cc *raftpb.ConfChange, member *consensus.Member, err error) + func (cl *Cluster) AppliedMembers() *Members + func (cl *Cluster) ChangeMembership(req *types.MembershipChange, nowait bool) (*consensus.Member, error) + func (cl *Cluster) ClusterID() uint64 + func (cl *Cluster) GenerateID(useBackup bool) + func (cl *Cluster) IsIDRemoved(id uint64) bool + func (cl *Cluster) Members() *Members + func (cl *Cluster) NewMemberFromAddReq(req *types.MembershipChange) (*consensus.Member, error) + func (cl *Cluster) NewMemberFromRemoveReq(req *types.MembershipChange) (*consensus.Member, error) + func (cl *Cluster) NodeID() uint64 + func (cl *Cluster) NodeName() string + func (cl *Cluster) NodePeerID() string + func (cl *Cluster) Quorum() uint32 + func (cl *Cluster) Recover(snapshot *raftpb.Snapshot) (bool, error) + func (cl *Cluster) RecoverIdentity(id *consensus.RaftIdentity) error + func (cl *Cluster) RemovedMembers() *Members + func (cl *Cluster) ResetMembers() + func (cl *Cluster) SetClusterID(clusterid uint64) + func (cl *Cluster) SetNodeID(nodeid uint64) + func (cl *Cluster) SetThisNodeID() error + func (cl *Cluster) ValidateAndMergeExistingCluster(existingCl *Cluster) bool + type ClusterProgress struct + MemberProgresses map[uint64]*MemberProgress + N int + func (cp *ClusterProgress) ToString() string + type CommitProgress struct + func (cp *CommitProgress) GetConnect() *commitEntry + func (cp *CommitProgress) GetRequest() *commitEntry + func (cp *CommitProgress) IsReadyToPropose() bool + func (cp *CommitProgress) UpdateConnect(ce *commitEntry) + func (cp *CommitProgress) UpdateRequest(ce *commitEntry) + type ErrorMembershipChange struct + Err error + func (e ErrorMembershipChange) Error() string + type HttpTransportWrapper struct + func (t *HttpTransportWrapper) AddPeer(id rtypes.ID, peerID types.PeerID, urls []string) + type LeaderStatus struct + IsLeader bool + Leader uint64 + Term uint64 + type MemberProgress struct + LogDifference uint64 + MemberID uint64 + Status MemberProgressState + func (cp *MemberProgress) ToString() string + type MemberProgressState int32 + const MemberProgressStateHealthy + const MemberProgressStateSlow + const MemberProgressStateSyncing + const MemberProgressStateUnknown + type Members struct + Addresses []string + Index map[types.PeerID]uint64 + MapByID map[uint64]*consensus.Member + MapByName map[string]*consensus.Member + func (mbrs *Members) ToArray() []*consensus.Member + func (mbrs *Members) ToMemberAttrArray() []*types.MemberAttr + type NotifyFn func(event *message.RaftClusterEvent) + type Proposed struct + type RaftInfo struct + Leader string + Name string + RaftId string + Status *json.RawMessage + Total uint32 + type RaftLogger struct + func NewRaftLogger(logger *log.Logger) *RaftLogger + func (l *RaftLogger) Debug(args ...interface{}) + func (l *RaftLogger) Debugf(format string, args ...interface{}) + func (l *RaftLogger) Error(args ...interface{}) + func (l *RaftLogger) Errorf(format string, args ...interface{}) + func (l *RaftLogger) Fatalf(format string, args ...interface{}) + func (l *RaftLogger) Info(args ...interface{}) + func (l *RaftLogger) Infof(format string, args ...interface{}) + func (l *RaftLogger) Panic(args ...interface{}) + func (l *RaftLogger) Panicf(format string, args ...interface{}) + func (l *RaftLogger) Warning(args ...interface{}) + func (l *RaftLogger) Warningf(format string, args ...interface{}) + func (l RaftLogger) Fatal(args ...interface{}) + type RaftOperator struct + func (rop *RaftOperator) ProposeConfChange(proposal *consensus.ConfChangePropose) error + type RaftServerState int + type Transporter interface + ActivePeers func() int + ActiveSince func(id rtypes.ID) time.Time + AddPeer func(id rtypes.ID, peerID types.PeerID, urls []string) + Handler func() http.Handler + RemoveAllPeers func() + RemovePeer func(id rtypes.ID) + Send func(m []raftpb.Message) + SendSnapshot func(m snap.Message) + Start func() error + Stop func() + UpdatePeer func(id rtypes.ID, urls []string) + type WalDB struct + func NewWalDB(chainWal consensus.ChainWAL) *WalDB + func (wal *WalDB) ReadAll(snapshot *raftpb.Snapshot) (id *consensus.RaftIdentity, state *raftpb.HardState, ents []raftpb.Entry, ...) + func (wal *WalDB) SaveEntry(state raftpb.HardState, entries []raftpb.Entry) error + type Work struct + func (work *Work) GetTimeout() time.Duration + func (work *Work) ToString() string