...

Package election

import "github.com/hyperledger/fabric/gossip/election"
Overview
Index

Overview ▾

Constants

const (
    DefStartupGracePeriod       = time.Second * 15
    DefMembershipSampleInterval = time.Second
    DefLeaderAliveThreshold     = time.Second * 10
    DefLeaderElectionDuration   = time.Second * 5
)

type ElectionConfig

type ElectionConfig struct {
    StartupGracePeriod       time.Duration
    MembershipSampleInterval time.Duration
    LeaderAliveThreshold     time.Duration
    LeaderElectionDuration   time.Duration
}

type LeaderElectionAdapter

LeaderElectionAdapter is used by the leader election module to send and receive messages and to get membership information

type LeaderElectionAdapter interface {
    // Gossip gossips a message to other peers
    Gossip(Msg)

    // Accept returns a channel that emits messages
    Accept() <-chan Msg

    // CreateProposalMessage
    CreateMessage(isDeclaration bool) Msg

    // Peers returns a list of peers considered alive
    Peers() []Peer

    // ReportMetrics sends a report to the metrics server about a leadership status
    ReportMetrics(isLeader bool)
}

func NewAdapter

func NewAdapter(gossip gossip, pkiid common.PKIidType, channel common.ChainID,
    metrics *metrics.ElectionMetrics) LeaderElectionAdapter

NewAdapter creates new leader election adapter

type LeaderElectionService

LeaderElectionService is the object that runs the leader election algorithm

type LeaderElectionService interface {
    // IsLeader returns whether this peer is a leader or not
    IsLeader() bool

    // Stop stops the LeaderElectionService
    Stop()

    // Yield relinquishes the leadership until a new leader is elected,
    // or a timeout expires
    Yield()
}

func NewLeaderElectionService

func NewLeaderElectionService(adapter LeaderElectionAdapter, id string, callback leadershipCallback, config ElectionConfig) LeaderElectionService

NewLeaderElectionService returns a new LeaderElectionService

type Msg

Msg describes a message sent from a remote peer

type Msg interface {
    // SenderID returns the ID of the peer sent the message
    SenderID() peerID
    // IsProposal returns whether this message is a leadership proposal
    IsProposal() bool
    // IsDeclaration returns whether this message is a leadership declaration
    IsDeclaration() bool
}

type Peer

Peer describes a remote peer

type Peer interface {
    // ID returns the ID of the peer
    ID() peerID
}