Documentation ¶
Index ¶
- Constants
- Variables
- func GenID() (n uint64)
- func Sender(t *http.Transport, cl *Cluster, ss *stats.ServerStats, ls *stats.LeaderStats) func(msgs []raftpb.Message)
- type Attributes
- type Cluster
- func (c *Cluster) AddMember(m *Member)
- func (c Cluster) ClientURLs() []string
- func (c Cluster) ID() uint64
- func (c *Cluster) IsIDRemoved(id uint64) bool
- func (c *Cluster) Member(id uint64) *Member
- func (c *Cluster) MemberByName(name string) *Member
- func (c Cluster) MemberIDs() []uint64
- func (c Cluster) Members() []*Member
- func (c Cluster) PeerURLs() []string
- func (c *Cluster) RemoveMember(id uint64)
- func (c *Cluster) SetID(id uint64)
- func (c *Cluster) SetStore(st store.Store)
- func (c Cluster) String() string
- func (c *Cluster) ValidateAndAssignIDs(membs []*Member) error
- type ClusterInfo
- type ClusterState
- type EtcdServer
- func (s *EtcdServer) AddMember(ctx context.Context, memb Member) error
- func (s *EtcdServer) Do(ctx context.Context, r pb.Request) (Response, error)
- func (s *EtcdServer) Index() uint64
- func (s *EtcdServer) LeaderStats() []byte
- func (s *EtcdServer) Process(ctx context.Context, m raftpb.Message) error
- func (s *EtcdServer) RemoveMember(ctx context.Context, id uint64) error
- func (s *EtcdServer) SelfStats() []byte
- func (s *EtcdServer) Start()
- func (s *EtcdServer) Stop()
- func (s *EtcdServer) StoreStats() []byte
- func (s *EtcdServer) Term() uint64
- func (s *EtcdServer) UpdateRecvApp(from uint64, length int64)
- type Member
- type RaftAttributes
- type RaftTimer
- type Response
- type Server
- type ServerConfig
- type SortableMemberSlice
- type SortableMemberSliceByPeerURLs
- type Stats
- type Storage
Constants ¶
const ( ClusterStateValueNew = "new" ClusterStateValueExisting = "existing" )
const ( DefaultSnapCount = 10000 StoreAdminPrefix = "/0" StoreKeysPrefix = "/1" )
Variables ¶
var ( ErrUnknownMethod = errors.New("etcdserver: unknown method") ErrStopped = errors.New("etcdserver: server stopped") ErrRemoved = errors.New("etcdserver: server removed") ErrIDRemoved = errors.New("etcdserver: ID removed") ErrIDExists = errors.New("etcdserver: ID exists") ErrIDNotFound = errors.New("etcdserver: ID not found") )
var ( ClusterStateValues = []string{ ClusterStateValueNew, ClusterStateValueExisting, } )
Functions ¶
func GenID ¶
func GenID() (n uint64)
TODO: move the function to /id pkg maybe? GenID generates a random id that is not equal to 0.
func Sender ¶
func Sender(t *http.Transport, cl *Cluster, ss *stats.ServerStats, ls *stats.LeaderStats) func(msgs []raftpb.Message)
Sender creates the default production sender used to transport raft messages in the cluster. The returned sender will update the given ServerStats and LeaderStats appropriately.
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 Cluster ¶
type Cluster struct {
// contains filtered or unexported fields
}
Cluster is a list of Members that belong to the same raft cluster
func GetClusterFromPeers ¶
func NewClusterFromMembers ¶
func NewClusterFromString ¶
NewClusterFromString returns Cluster through given clusterName and parsing members from a sets of names to IPs discovery formatted like: mach0=http://1.1.1.1,mach0=http://2.2.2.2,mach1=http://3.3.3.3,mach2=http://4.4.4.4
func (*Cluster) AddMember ¶
AddMember puts a new Member into the store. A Member with a matching id must not exist.
func (Cluster) ClientURLs ¶
ClientURLs returns a list of all client addresses. Each address is prefixed with the scheme (currently "http://"). The returned list is sorted in ascending lexicographical order.
func (*Cluster) IsIDRemoved ¶
func (*Cluster) MemberByName ¶
MemberByName returns a Member with the given name if exists. If more than one member has the given name, it will panic.
func (Cluster) PeerURLs ¶
PeerURLs returns a list of all peer addresses. Each address is prefixed with the scheme (currently "http://"). The returned list is sorted in ascending lexicographical order.
func (*Cluster) RemoveMember ¶
RemoveMember removes a member from the store. The given id MUST exist, or the function panics.
func (*Cluster) ValidateAndAssignIDs ¶
ValidateAndAssignIDs validates the given members by matching their PeerURLs with the existing members in the cluster. If the validation succeeds, it assigns the IDs from the given members to the existing members in the cluster. If the validation fails, an error will be returned.
type ClusterInfo ¶
type ClusterState ¶
type ClusterState string
ClusterState implements the flag.Value interface.
func (*ClusterState) Set ¶
func (cs *ClusterState) Set(s string) error
Set verifies the argument to be a valid member of ClusterStateFlagValues before setting the underlying flag value.
func (*ClusterState) String ¶
func (cs *ClusterState) String() string
type EtcdServer ¶
type EtcdServer struct { Cluster *Cluster Ticker <-chan time.Time SyncTicker <-chan time.Time // contains filtered or unexported fields }
EtcdServer is the production implementation of the Server interface
func NewServer ¶
func NewServer(cfg *ServerConfig) *EtcdServer
NewServer creates a new EtcdServer from the supplied configuration. The configuration is considered static for the lifetime of the EtcdServer.
func (*EtcdServer) AddMember ¶
func (s *EtcdServer) AddMember(ctx context.Context, memb Member) error
func (*EtcdServer) Do ¶
Do interprets r and performs an operation on s.store according to r.Method and other fields. If r.Method is "POST", "PUT", "DELETE", or a "GET" with Quorum == true, r will be sent through consensus before performing its respective operation. Do will block until an action is performed or there is an error.
func (*EtcdServer) LeaderStats ¶
func (s *EtcdServer) LeaderStats() []byte
func (*EtcdServer) RemoveMember ¶
func (s *EtcdServer) RemoveMember(ctx context.Context, id uint64) error
func (*EtcdServer) SelfStats ¶
func (s *EtcdServer) SelfStats() []byte
func (*EtcdServer) Start ¶
func (s *EtcdServer) Start()
Start prepares and starts server in a new goroutine. It is no longer safe to modify a server's fields after it has been sent to Start. It also starts a goroutine to publish its server information.
func (*EtcdServer) Stop ¶
func (s *EtcdServer) Stop()
Stop stops the server gracefully, and shuts down the running goroutine. Stop should be called after a Start(s), otherwise it will block forever.
func (*EtcdServer) StoreStats ¶
func (s *EtcdServer) StoreStats() []byte
func (*EtcdServer) Term ¶
func (s *EtcdServer) Term() uint64
func (*EtcdServer) UpdateRecvApp ¶
func (s *EtcdServer) UpdateRecvApp(from uint64, length int64)
type Member ¶
type Member struct { ID uint64 `json:"id"` RaftAttributes Attributes }
func NewMember ¶
newMember creates a Member without an ID and generates one based on the name, peer URLs. 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 RaftAttributes ¶
type RaftAttributes struct { // TODO(philips): ensure these are URLs PeerURLs []string `json:"peerURLs"` }
RaftAttributes represents the raft related attributes of an etcd member.
type Server ¶
type Server interface { // Start performs any initialization of the Server necessary for it to // begin serving requests. It must be called before Do or Process. // Start must be non-blocking; any long-running server functionality // should be implemented in goroutines. Start() // Stop terminates the Server and performs any necessary finalization. // Do and Process cannot be called after Stop has been invoked. Stop() // Do takes a request and attempts to fulfil it, returning a Response. Do(ctx context.Context, r pb.Request) (Response, error) // Process takes a raft message and applies it to the server's raft state // machine, respecting any timeout of the given context. Process(ctx context.Context, m raftpb.Message) error // AddMember attempts to add a member into the cluster. It will return // ErrIDRemoved if member ID is removed from the cluster, or return // ErrIDExists if member ID exists in the cluster. AddMember(ctx context.Context, memb Member) error // RemoveMember attempts to remove a member from the cluster. It will // return ErrIDRemoved if member ID is removed from the cluster, or return // ErrIDNotFound if member ID is not in the cluster. RemoveMember(ctx context.Context, id uint64) error }
type ServerConfig ¶
type ServerConfig struct { Name string DiscoveryURL string ClientURLs types.URLs DataDir string SnapCount uint64 Cluster *Cluster ClusterState ClusterState Transport *http.Transport }
ServerConfig holds the configuration of etcd as taken from the command line or discovery.
func (*ServerConfig) ShouldDiscover ¶
func (c *ServerConfig) ShouldDiscover() bool
func (*ServerConfig) SnapDir ¶
func (c *ServerConfig) SnapDir() string
func (*ServerConfig) VerifyBootstrapConfig ¶
func (c *ServerConfig) VerifyBootstrapConfig() error
VerifyBootstrapConfig sanity-checks the initial config and returns an error for things that should never happen.
func (*ServerConfig) WALDir ¶
func (c *ServerConfig) WALDir() string
type SortableMemberSlice ¶
type SortableMemberSlice []*Member
func (SortableMemberSlice) Len ¶
func (s SortableMemberSlice) Len() int
func (SortableMemberSlice) Less ¶
func (s SortableMemberSlice) Less(i, j int) bool
func (SortableMemberSlice) Swap ¶
func (s SortableMemberSlice) Swap(i, j int)
type SortableMemberSliceByPeerURLs ¶
type SortableMemberSliceByPeerURLs []*Member
func (SortableMemberSliceByPeerURLs) Len ¶
func (p SortableMemberSliceByPeerURLs) Len() int
func (SortableMemberSliceByPeerURLs) Less ¶
func (p SortableMemberSliceByPeerURLs) Less(i, j int) bool
func (SortableMemberSliceByPeerURLs) Swap ¶
func (p SortableMemberSliceByPeerURLs) Swap(i, j int)
type Stats ¶
type Stats interface { // SelfStats returns the struct representing statistics of this server SelfStats() []byte // LeaderStats returns the statistics of all followers in the cluster // if this server is leader. Otherwise, nil is returned. LeaderStats() []byte // StoreStats returns statistics of the store backing this EtcdServer StoreStats() []byte // UpdateRecvApp updates the underlying statistics in response to a receiving an Append request UpdateRecvApp(from uint64, length int64) }
type Storage ¶
type Storage interface { // Save function saves ents and state to the underlying stable storage. // Save MUST block until st and ents are on stable storage. Save(st raftpb.HardState, ents []raftpb.Entry) // SaveSnap function saves snapshot to the underlying stable storage. SaveSnap(snap raftpb.Snapshot) // TODO: WAL should be able to control cut itself. After implement self-controled cut, // remove it in this interface. // Cut cuts out a new wal file for saving new state and entries. Cut() error }
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package etcdserverpb is a generated protocol buffer package.
|
Package etcdserverpb is a generated protocol buffer package. |