Documentation ¶
Overview ¶
Package membership describes individual etcd members and clusters of members.
Index ¶
- Variables
- func MemberAttributesStorePath(id types.ID) string
- func MemberStoreKey(id types.ID) string
- func MustParseMemberIDFromKey(key string) types.ID
- func RemovedMemberStoreKey(id types.ID) string
- func StoreClusterVersionKey() string
- func ValidateClusterAndAssignIDs(local *RaftCluster, existing *RaftCluster) error
- type Attributes
- type Member
- type MembersByID
- type MembersByPeerURLs
- type RaftAttributes
- type RaftCluster
- func (c *RaftCluster) AddMember(m *Member)
- func (c *RaftCluster) ClientURLs() []string
- func (c *RaftCluster) ID() types.ID
- func (c *RaftCluster) IsIDRemoved(id types.ID) bool
- func (c *RaftCluster) IsReadyToAddNewMember() bool
- func (c *RaftCluster) IsReadyToRemoveMember(id uint64) bool
- func (c *RaftCluster) Member(id types.ID) *Member
- func (c *RaftCluster) MemberByName(name string) *Member
- func (c *RaftCluster) MemberIDs() []types.ID
- func (c *RaftCluster) Members() []*Member
- func (c *RaftCluster) PeerURLs() []string
- func (c *RaftCluster) Recover(onSet func(*semver.Version))
- func (c *RaftCluster) RemoveMember(id types.ID)
- func (c *RaftCluster) SetBackend(be backend.Backend)
- func (c *RaftCluster) SetID(id types.ID)
- func (c *RaftCluster) SetStore(st store.Store)
- func (c *RaftCluster) SetVersion(ver *semver.Version, onSet func(*semver.Version))
- func (c *RaftCluster) String() string
- func (c *RaftCluster) UpdateAttributes(id types.ID, attr Attributes)
- func (c *RaftCluster) UpdateRaftAttributes(id types.ID, raftAttr RaftAttributes)
- func (c *RaftCluster) ValidateConfigurationChange(cc raftpb.ConfChange) error
- func (c *RaftCluster) Version() *semver.Version
Constants ¶
This section is empty.
Variables ¶
var ( ErrIDRemoved = errors.New("membership: ID removed") ErrIDExists = errors.New("membership: ID exists") ErrIDNotFound = errors.New("membership: ID not found") ErrPeerURLexists = errors.New("membership: peerURL exists") )
var (
StoreMembersPrefix = path.Join(storePrefix, "members")
)
Functions ¶
func MemberStoreKey ¶
func RemovedMemberStoreKey ¶
func StoreClusterVersionKey ¶
func StoreClusterVersionKey() string
func ValidateClusterAndAssignIDs ¶
func ValidateClusterAndAssignIDs(local *RaftCluster, existing *RaftCluster) error
ValidateClusterAndAssignIDs validates the local cluster by matching the PeerURLs with the existing cluster. If the validation succeeds, it assigns the IDs from the existing cluster to the local cluster. If the validation fails, an error will be returned.
Types ¶
type Attributes ¶
type Attributes struct { Name string `json:"name,omitempty"` ClientURLs []string `json:"clientURLs,omitempty"` }
Attributes represents all the non-raft related attributes of an etcd member.
type Member ¶
type Member struct { ID types.ID `json:"id"` RaftAttributes Attributes }
func NewMember ¶
NewMember creates a Member without an ID and generates one based on the cluster name, peer URLs, and time. This is used for bootstrapping/adding new member.
func (*Member) PickPeerURL ¶
PickPeerURL chooses a random address from a given Member's PeerURLs. It will panic if there is no PeerURLs available in Member.
type MembersByID ¶
type MembersByID []*Member
MembersByID implements sort by ID interface
func (MembersByID) Len ¶
func (ms MembersByID) Len() int
func (MembersByID) Less ¶
func (ms MembersByID) Less(i, j int) bool
func (MembersByID) Swap ¶
func (ms MembersByID) Swap(i, j int)
type MembersByPeerURLs ¶
type MembersByPeerURLs []*Member
MembersByPeerURLs implements sort by peer urls interface
func (MembersByPeerURLs) Len ¶
func (ms MembersByPeerURLs) Len() int
func (MembersByPeerURLs) Less ¶
func (ms MembersByPeerURLs) Less(i, j int) bool
func (MembersByPeerURLs) Swap ¶
func (ms MembersByPeerURLs) Swap(i, j int)
type RaftAttributes ¶
type RaftAttributes struct { // PeerURLs is the list of peers in the raft cluster. // TODO(philips): ensure these are URLs PeerURLs []string `json:"peerURLs"` }
RaftAttributes represents the raft related attributes of an etcd member.
type RaftCluster ¶
type RaftCluster struct { sync.Mutex // guards the fields below // contains filtered or unexported fields }
RaftCluster is a list of Members that belong to the same raft cluster 在集群的每个节点中,都会使用该结构体记录当前集群的状态。
func NewCluster ¶
func NewCluster(token string) *RaftCluster
func NewClusterFromMembers ¶
func NewClusterFromMembers(token string, id types.ID, membs []*Member) *RaftCluster
func NewClusterFromURLsMap ¶
func NewClusterFromURLsMap(token string, urlsmap types.URLsMap) (*RaftCluster, error)
该函数会根据该映射关系创建相应的Member实例和RaftCluster实例。
func (*RaftCluster) AddMember ¶
func (c *RaftCluster) AddMember(m *Member)
AddMember adds a new Member into the cluster, and saves the given member's raftAttributes into the store. The given member should have empty attributes. A Member with a matching id must not exist.
func (*RaftCluster) ClientURLs ¶
func (c *RaftCluster) ClientURLs() []string
ClientURLs returns a list of all client addresses. The returned list is sorted in ascending lexicographical order.
func (*RaftCluster) ID ¶
func (c *RaftCluster) ID() types.ID
func (*RaftCluster) IsIDRemoved ¶
func (c *RaftCluster) IsIDRemoved(id types.ID) bool
func (*RaftCluster) IsReadyToAddNewMember ¶
func (c *RaftCluster) IsReadyToAddNewMember() bool
func (*RaftCluster) IsReadyToRemoveMember ¶
func (c *RaftCluster) IsReadyToRemoveMember(id uint64) bool
func (*RaftCluster) MemberByName ¶
func (c *RaftCluster) MemberByName(name string) *Member
MemberByName returns a Member with the given name if exists. If more than one member has the given name, it will panic.
func (*RaftCluster) MemberIDs ¶
func (c *RaftCluster) MemberIDs() []types.ID
func (*RaftCluster) PeerURLs ¶
func (c *RaftCluster) PeerURLs() []string
PeerURLs returns a list of all peer addresses. 将所有Member实例中的PeerURLs保存到一个集合中后返回。 The returned list is sorted in ascending lexicographical order.
func (*RaftCluster) Recover ¶
func (c *RaftCluster) Recover(onSet func(*semver.Version))
func (*RaftCluster) RemoveMember ¶
func (c *RaftCluster) RemoveMember(id types.ID)
RemoveMember removes a member from the store. The given id MUST exist, or the function panics.
func (*RaftCluster) SetBackend ¶
func (c *RaftCluster) SetBackend(be backend.Backend)
func (*RaftCluster) SetID ¶
func (c *RaftCluster) SetID(id types.ID)
func (*RaftCluster) SetStore ¶
func (c *RaftCluster) SetStore(st store.Store)
func (*RaftCluster) SetVersion ¶
func (c *RaftCluster) SetVersion(ver *semver.Version, onSet func(*semver.Version))
func (*RaftCluster) String ¶
func (c *RaftCluster) String() string
func (*RaftCluster) UpdateAttributes ¶
func (c *RaftCluster) UpdateAttributes(id types.ID, attr Attributes)
func (*RaftCluster) UpdateRaftAttributes ¶
func (c *RaftCluster) UpdateRaftAttributes(id types.ID, raftAttr RaftAttributes)
func (*RaftCluster) ValidateConfigurationChange ¶
func (c *RaftCluster) ValidateConfigurationChange(cc raftpb.ConfChange) error
ValidateConfigurationChange takes a proposed ConfChange and 该方法会检测待修改的节点信息是否合法,例如,新增节点提供的URL是否与集群中现有节点的URL冲突, ensures that it is still valid. 待删除的节点是否存在,等等。
func (*RaftCluster) Version ¶
func (c *RaftCluster) Version() *semver.Version