Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func HandleChangeRequests ¶
func HandleChangeRequests(r *raft.Raft, requests <-chan *ChangeRequest)
HandleChangeRequests processes ChangeRequest's received through the given channel, using the given raft.Raft instance to add or remove peers to the cluster according to the received requests.
Types ¶
type ChangeRequest ¶
type ChangeRequest struct {
// contains filtered or unexported fields
}
ChangeRequest represents a request to change a server's membership in a raft cluster (either join or leave).
A requesting server uses an implementation of the membership Changer interface to connect to a target server through some network transport layer and to ask to join or leave the target server's cluster. The target server internally uses ChangeRequest and HandleChangeRequests as helpers to implement handlers to process such requests coming from the network transport layer.
func NewJoinRequest ¶
func NewJoinRequest(id raft.ServerID, address raft.ServerAddress) *ChangeRequest
NewJoinRequest creates a new membership ChangeRequest to join a cluster.
func NewLeaveRequest ¶
func NewLeaveRequest(id raft.ServerID) *ChangeRequest
NewLeaveRequest creates a new membership ChangeRequest to leave a cluster.
func (*ChangeRequest) Address ¶
func (r *ChangeRequest) Address() raft.ServerAddress
Address of the server requesting to change its membership.
func (*ChangeRequest) Done ¶
func (r *ChangeRequest) Done(err error)
Done should be invoked by the code handling this request (such as HandleChangeRequests) to notify callers that the it has been processed, either successfully or not.
func (*ChangeRequest) Error ¶
func (r *ChangeRequest) Error(timeout time.Duration) error
Error blocks until this ChangeRequest is fully processed or the given timeout is reached and returns any error hit while handling the request, or nil if none was met.
func (*ChangeRequest) ID ¶
func (r *ChangeRequest) ID() raft.ServerID
ID of the server requesting to change its membership.
func (*ChangeRequest) Kind ¶
func (r *ChangeRequest) Kind() ChangeRequestKind
Kind is the type of membership change requested, either join leave.
type ChangeRequestKind ¶
type ChangeRequestKind int
ChangeRequestKind is kind of membership change being requested.
const ( JoinRequest ChangeRequestKind = iota LeaveRequest )
Possible values for ChangeRequestKind
func (ChangeRequestKind) String ¶
func (k ChangeRequestKind) String() string
type Changer ¶
type Changer interface { Join(raft.ServerID, raft.ServerAddress, time.Duration) error Leave(raft.ServerID, raft.ServerAddress, time.Duration) error }
Changer is an API that can be used by a raft server to change its membership in a cluster (i.e. either join it or leave it).
It works by using some transport layer (e.g. HTTP, TCP, etc) to send a membership change request to a target server that is part of the cluster and that can handle such requests, possibly redirecting the requesting server to another server (e.g. the cluster leader).
It is effectively an extensions of the raft.Transport interface, with additional semantics for joining/leaving a raft cluster.
type ErrDifferentLeader ¶
type ErrDifferentLeader struct {
// contains filtered or unexported fields
}
ErrDifferentLeader is returned by ChangeRequest.Error() when the request to join or leave a cluster failed because the target peer is not the leader. The network address of the leader as currently known by the target peer is attached to the error, so clients can perform again the request, this time using the given leader address as target peer.
func (*ErrDifferentLeader) Error ¶
func (e *ErrDifferentLeader) Error() string
func (*ErrDifferentLeader) Leader ¶
func (e *ErrDifferentLeader) Leader() string
Leader is the address of the leader as currently known.
type ErrUnknownLeader ¶
type ErrUnknownLeader struct{}
ErrUnknownLeader is returned by ChangeRequest.Error() when the request to join or leave a cluster failed because the target peer is not the leader, and at the moment it also does not know the address of the leader (this can happen for example during leader elections). Clients typically want to retry after a short time.
func (*ErrUnknownLeader) Error ¶
func (e *ErrUnknownLeader) Error() string