Documentation
¶
Overview ¶
Package etcdserver defines how etcd servers interact and store their states.
Index ¶
- Constants
- Variables
- func GetClusterFromRemotePeers(lg *zap.Logger, urls []string, rt http.RoundTripper) (*membership.RaftCluster, error)
- type AccessController
- type ApplierV2
- type Authenticator
- type DiscoveryError
- type EtcdServer
- func (s *EtcdServer) AddMember(ctx context.Context, memb membership.Member) ([]*membership.Member, error)
- func (s *EtcdServer) Alarm(ctx context.Context, r *pb.AlarmRequest) (*pb.AlarmResponse, error)
- func (s *EtcdServer) Alarms() []*pb.AlarmMember
- func (s *EtcdServer) AppliedIndex() uint64
- func (s *EtcdServer) ApplyWait() <-chan struct{}
- func (s *EtcdServer) AuthDisable(ctx context.Context, r *pb.AuthDisableRequest) (*pb.AuthDisableResponse, error)
- func (s *EtcdServer) AuthEnable(ctx context.Context, r *pb.AuthEnableRequest) (*pb.AuthEnableResponse, error)
- func (s *EtcdServer) AuthInfoFromCtx(ctx context.Context) (*auth.AuthInfo, error)
- func (s *EtcdServer) AuthStatus(ctx context.Context, r *pb.AuthStatusRequest) (*pb.AuthStatusResponse, error)
- func (s *EtcdServer) AuthStore() auth.AuthStore
- func (s *EtcdServer) Authenticate(ctx context.Context, r *pb.AuthenticateRequest) (*pb.AuthenticateResponse, error)
- func (s *EtcdServer) Backend() backend.Backend
- func (s *EtcdServer) CheckInitialHashKV() error
- func (s *EtcdServer) ClientCertAuthEnabled() bool
- func (s *EtcdServer) Cluster() api.Cluster
- func (s *EtcdServer) ClusterVersion() *semver.Version
- func (s *EtcdServer) CommittedIndex() uint64
- func (s *EtcdServer) Compact(ctx context.Context, r *pb.CompactionRequest) (*pb.CompactionResponse, error)
- func (s *EtcdServer) CutPeer(id types.ID)
- func (s *EtcdServer) DeleteRange(ctx context.Context, r *pb.DeleteRangeRequest) (*pb.DeleteRangeResponse, error)
- func (s *EtcdServer) Do(ctx context.Context, r pb.Request) (Response, error)
- func (s *EtcdServer) Downgrade(ctx context.Context, r *pb.DowngradeRequest) (*pb.DowngradeResponse, error)
- func (s *EtcdServer) HardStop()
- func (s *EtcdServer) HashKVHandler() http.Handler
- func (s *EtcdServer) ID() types.ID
- func (s *EtcdServer) IsIDRemoved(id uint64) bool
- func (s *EtcdServer) IsLearner() bool
- func (s *EtcdServer) IsMemberExist(id types.ID) bool
- func (s *EtcdServer) KV() mvcc.ConsistentWatchableKV
- func (s *EtcdServer) Lead() uint64
- func (s *EtcdServer) Leader() types.ID
- func (s *EtcdServer) LeaderStats() []byte
- func (s *EtcdServer) LeaseGrant(ctx context.Context, r *pb.LeaseGrantRequest) (*pb.LeaseGrantResponse, error)
- func (s *EtcdServer) LeaseHandler() http.Handler
- func (s *EtcdServer) LeaseLeases(ctx context.Context, r *pb.LeaseLeasesRequest) (*pb.LeaseLeasesResponse, error)
- func (s *EtcdServer) LeaseRenew(ctx context.Context, id lease.LeaseID) (int64, error)
- func (s *EtcdServer) LeaseRevoke(ctx context.Context, r *pb.LeaseRevokeRequest) (*pb.LeaseRevokeResponse, error)
- func (s *EtcdServer) LeaseTimeToLive(ctx context.Context, r *pb.LeaseTimeToLiveRequest) (*pb.LeaseTimeToLiveResponse, error)
- func (s *EtcdServer) LinearizableReadNotify(ctx context.Context) error
- func (s *EtcdServer) Logger() *zap.Logger
- func (s *EtcdServer) MendPeer(id types.ID)
- func (s *EtcdServer) MoveLeader(ctx context.Context, lead, transferee uint64) error
- func (s *EtcdServer) PauseSending()
- func (s *EtcdServer) Process(ctx context.Context, m raftpb.Message) error
- func (s *EtcdServer) PromoteMember(ctx context.Context, id uint64) ([]*membership.Member, error)
- func (s *EtcdServer) Put(ctx context.Context, r *pb.PutRequest) (*pb.PutResponse, error)
- func (s *EtcdServer) RaftHandler() http.Handler
- func (s *EtcdServer) Range(ctx context.Context, r *pb.RangeRequest) (*pb.RangeResponse, error)
- func (s *EtcdServer) ReadyNotify() <-chan struct{}
- func (s *EtcdServer) RemoveMember(ctx context.Context, id uint64) ([]*membership.Member, error)
- func (s *EtcdServer) ReportSnapshot(id uint64, status raft.SnapshotStatus)
- func (s *EtcdServer) ReportUnreachable(id uint64)
- func (s *EtcdServer) ResumeSending()
- func (s *EtcdServer) RoleAdd(ctx context.Context, r *pb.AuthRoleAddRequest) (*pb.AuthRoleAddResponse, error)
- func (s *EtcdServer) RoleDelete(ctx context.Context, r *pb.AuthRoleDeleteRequest) (*pb.AuthRoleDeleteResponse, error)
- func (s *EtcdServer) RoleGet(ctx context.Context, r *pb.AuthRoleGetRequest) (*pb.AuthRoleGetResponse, error)
- func (s *EtcdServer) RoleGrantPermission(ctx context.Context, r *pb.AuthRoleGrantPermissionRequest) (*pb.AuthRoleGrantPermissionResponse, error)
- func (s *EtcdServer) RoleList(ctx context.Context, r *pb.AuthRoleListRequest) (*pb.AuthRoleListResponse, error)
- func (s *EtcdServer) RoleRevokePermission(ctx context.Context, r *pb.AuthRoleRevokePermissionRequest) (*pb.AuthRoleRevokePermissionResponse, error)
- func (s *EtcdServer) SelfStats() []byte
- func (s *EtcdServer) Start()
- func (s *EtcdServer) Stop()
- func (s *EtcdServer) StopNotify() <-chan struct{}
- func (s *EtcdServer) StoreStats() []byte
- func (s *EtcdServer) Term() uint64
- func (s *EtcdServer) TransferLeadership() error
- func (s *EtcdServer) Txn(ctx context.Context, r *pb.TxnRequest) (*pb.TxnResponse, error)
- func (s *EtcdServer) UpdateMember(ctx context.Context, memb membership.Member) ([]*membership.Member, error)
- func (s *EtcdServer) UserAdd(ctx context.Context, r *pb.AuthUserAddRequest) (*pb.AuthUserAddResponse, error)
- func (s *EtcdServer) UserChangePassword(ctx context.Context, r *pb.AuthUserChangePasswordRequest) (*pb.AuthUserChangePasswordResponse, error)
- func (s *EtcdServer) UserDelete(ctx context.Context, r *pb.AuthUserDeleteRequest) (*pb.AuthUserDeleteResponse, error)
- func (s *EtcdServer) UserGet(ctx context.Context, r *pb.AuthUserGetRequest) (*pb.AuthUserGetResponse, error)
- func (s *EtcdServer) UserGrantRole(ctx context.Context, r *pb.AuthUserGrantRoleRequest) (*pb.AuthUserGrantRoleResponse, error)
- func (s *EtcdServer) UserList(ctx context.Context, r *pb.AuthUserListRequest) (*pb.AuthUserListResponse, error)
- func (s *EtcdServer) UserRevokeRole(ctx context.Context, r *pb.AuthUserRevokeRoleRequest) (*pb.AuthUserRevokeRoleResponse, error)
- func (s *EtcdServer) Watchable() mvcc.WatchableKV
- type Lessor
- type Quota
- type RaftKV
- type RaftStatusGetter
- type RequestV2
- type RequestV2Handler
- type Response
- type Server
- type ServerConfig
- func (c *ServerConfig) MemberDir() string
- func (c *ServerConfig) ReqTimeout() time.Duration
- func (c *ServerConfig) ShouldDiscover() bool
- func (c *ServerConfig) SnapDir() string
- func (c *ServerConfig) VerifyBootstrap() error
- func (c *ServerConfig) VerifyJoinExisting() error
- func (c *ServerConfig) WALDir() string
- type ServerPeer
- type ServerPeerV2
- type ServerV2
- type ServerV3
- type Storage
Constants ¶
const ( // DefaultQuotaBytes is the number of bytes the backend Size may // consume before exceeding the space quota. DefaultQuotaBytes = int64(2 * 1024 * 1024 * 1024) // 2GB // MaxQuotaBytes is the maximum number of bytes suggested for a backend // quota. A larger quota may lead to degraded performance. MaxQuotaBytes = int64(8 * 1024 * 1024 * 1024) // 8GB )
const ( DefaultSnapshotCount = 100000 // DefaultSnapshotCatchUpEntries is the number of entries for a slow follower // to catch-up after compacting the raft storage entries. // We expect the follower has a millisecond level latency with the leader. // The max throughput is around 10K. Keep a 5K entries is enough for helping // follower to catch up. DefaultSnapshotCatchUpEntries uint64 = 5000 StoreClusterPrefix = "/0" StoreKeysPrefix = "/1" // HealthInterval is the minimum time the cluster should be healthy // before accepting add member requests. HealthInterval = 5 * time.Second )
const PeerHashKVPath = "/members/hashkv"
Variables ¶
var ( ErrUnknownMethod = errors.New("etcdserver: unknown method") ErrStopped = errors.New("etcdserver: server stopped") ErrCanceled = errors.New("etcdserver: request cancelled") ErrTimeout = errors.New("etcdserver: request timed out") ErrTimeoutDueToLeaderFail = errors.New("etcdserver: request timed out, possibly due to previous leader failure") ErrTimeoutDueToConnectionLost = errors.New("etcdserver: request timed out, possibly due to connection lost") ErrTimeoutLeaderTransfer = errors.New("etcdserver: request timed out, leader transfer took too long") ErrLeaderChanged = errors.New("etcdserver: leader changed") ErrNotEnoughStartedMembers = errors.New("etcdserver: re-configuration failed due to not enough started members") ErrLearnerNotReady = errors.New("etcdserver: can only promote a learner member which is in sync with leader") ErrNoLeader = errors.New("etcdserver: no leader") ErrNotLeader = errors.New("etcdserver: not leader") ErrRequestTooLarge = errors.New("etcdserver: request is too large") ErrNoSpace = errors.New("etcdserver: no space") ErrTooManyRequests = errors.New("etcdserver: too many requests") ErrUnhealthy = errors.New("etcdserver: unhealthy cluster") ErrKeyNotFound = errors.New("etcdserver: key not found") ErrCorrupt = errors.New("etcdserver: corrupt cluster") ErrBadLeaderTransferee = errors.New("etcdserver: bad leader transferee") ErrWrongDowngradeVersionFormat = errors.New("etcdserver: wrong downgrade target version format") ErrInvalidDowngradeTargetVersion = errors.New("etcdserver: invalid downgrade target version") ErrDowngradeInProcess = errors.New("etcdserver: cluster has a downgrade job in progress") ErrNoInflightDowngrade = errors.New("etcdserver: no inflight downgrade job") )
var (
DefaultQuotaSize = humanize.Bytes(uint64(DefaultQuotaBytes))
)
Functions ¶
func GetClusterFromRemotePeers ¶
func GetClusterFromRemotePeers(lg *zap.Logger, urls []string, rt http.RoundTripper) (*membership.RaftCluster, error)
GetClusterFromRemotePeers takes a set of URLs representing etcd peers, and attempts to construct a Cluster by accessing the members endpoint on one of these URLs. The first URL to provide a response is used. If no URLs provide a response, or a Cluster cannot be successfully created from a received response, an error is returned. Each request has a 10-second timeout. Because the upper limit of TTL is 5s, 10 second is enough for building connection and finishing request.
Types ¶
type AccessController ¶
type AccessController struct { CORS map[string]struct{} HostWhitelist map[string]struct{} // contains filtered or unexported fields }
AccessController controls etcd server HTTP request access.
func NewAccessController ¶
func NewAccessController() *AccessController
NewAccessController returns a new "AccessController" with default "*" values.
func (*AccessController) IsHostWhitelisted ¶
func (ac *AccessController) IsHostWhitelisted(host string) bool
IsHostWhitelisted returns true if the host is whitelisted. If whitelist is empty, allow all.
func (*AccessController) OriginAllowed ¶
func (ac *AccessController) OriginAllowed(origin string) bool
OriginAllowed determines whether the server will allow a given CORS origin. If CORS is empty, allow all.
type ApplierV2 ¶
type ApplierV2 interface { Delete(r *RequestV2) Response Post(r *RequestV2) Response Put(r *RequestV2) Response QGet(r *RequestV2) Response Sync(r *RequestV2) Response }
ApplierV2 is the interface for processing V2 raft messages
func NewApplierV2 ¶
func NewApplierV2(lg *zap.Logger, s v2store.Store, c *membership.RaftCluster) ApplierV2
type Authenticator ¶
type Authenticator interface { AuthEnable(ctx context.Context, r *pb.AuthEnableRequest) (*pb.AuthEnableResponse, error) AuthDisable(ctx context.Context, r *pb.AuthDisableRequest) (*pb.AuthDisableResponse, error) AuthStatus(ctx context.Context, r *pb.AuthStatusRequest) (*pb.AuthStatusResponse, error) Authenticate(ctx context.Context, r *pb.AuthenticateRequest) (*pb.AuthenticateResponse, error) UserAdd(ctx context.Context, r *pb.AuthUserAddRequest) (*pb.AuthUserAddResponse, error) UserDelete(ctx context.Context, r *pb.AuthUserDeleteRequest) (*pb.AuthUserDeleteResponse, error) UserChangePassword(ctx context.Context, r *pb.AuthUserChangePasswordRequest) (*pb.AuthUserChangePasswordResponse, error) UserGrantRole(ctx context.Context, r *pb.AuthUserGrantRoleRequest) (*pb.AuthUserGrantRoleResponse, error) UserGet(ctx context.Context, r *pb.AuthUserGetRequest) (*pb.AuthUserGetResponse, error) UserRevokeRole(ctx context.Context, r *pb.AuthUserRevokeRoleRequest) (*pb.AuthUserRevokeRoleResponse, error) RoleAdd(ctx context.Context, r *pb.AuthRoleAddRequest) (*pb.AuthRoleAddResponse, error) RoleGrantPermission(ctx context.Context, r *pb.AuthRoleGrantPermissionRequest) (*pb.AuthRoleGrantPermissionResponse, error) RoleGet(ctx context.Context, r *pb.AuthRoleGetRequest) (*pb.AuthRoleGetResponse, error) RoleRevokePermission(ctx context.Context, r *pb.AuthRoleRevokePermissionRequest) (*pb.AuthRoleRevokePermissionResponse, error) RoleDelete(ctx context.Context, r *pb.AuthRoleDeleteRequest) (*pb.AuthRoleDeleteResponse, error) UserList(ctx context.Context, r *pb.AuthUserListRequest) (*pb.AuthUserListResponse, error) RoleList(ctx context.Context, r *pb.AuthRoleListRequest) (*pb.AuthRoleListResponse, error) }
type DiscoveryError ¶
func (DiscoveryError) Error ¶
func (e DiscoveryError) Error() string
type EtcdServer ¶
type EtcdServer struct { Cfg ServerConfig SyncTicker *time.Ticker *AccessController // contains filtered or unexported fields }
EtcdServer is the production implementation of the Server interface
func NewServer ¶
func NewServer(cfg ServerConfig) (srv *EtcdServer, err error)
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 membership.Member) ([]*membership.Member, error)
func (*EtcdServer) Alarm ¶
func (s *EtcdServer) Alarm(ctx context.Context, r *pb.AlarmRequest) (*pb.AlarmResponse, error)
func (*EtcdServer) Alarms ¶
func (s *EtcdServer) Alarms() []*pb.AlarmMember
func (*EtcdServer) AppliedIndex ¶
func (s *EtcdServer) AppliedIndex() uint64
func (*EtcdServer) ApplyWait ¶
func (s *EtcdServer) ApplyWait() <-chan struct{}
func (*EtcdServer) AuthDisable ¶
func (s *EtcdServer) AuthDisable(ctx context.Context, r *pb.AuthDisableRequest) (*pb.AuthDisableResponse, error)
func (*EtcdServer) AuthEnable ¶
func (s *EtcdServer) AuthEnable(ctx context.Context, r *pb.AuthEnableRequest) (*pb.AuthEnableResponse, error)
func (*EtcdServer) AuthInfoFromCtx ¶
func (*EtcdServer) AuthStatus ¶
func (s *EtcdServer) AuthStatus(ctx context.Context, r *pb.AuthStatusRequest) (*pb.AuthStatusResponse, error)
func (*EtcdServer) AuthStore ¶
func (s *EtcdServer) AuthStore() auth.AuthStore
func (*EtcdServer) Authenticate ¶
func (s *EtcdServer) Authenticate(ctx context.Context, r *pb.AuthenticateRequest) (*pb.AuthenticateResponse, error)
func (*EtcdServer) Backend ¶
func (s *EtcdServer) Backend() backend.Backend
func (*EtcdServer) CheckInitialHashKV ¶
func (s *EtcdServer) CheckInitialHashKV() error
CheckInitialHashKV compares initial hash values with its peers before serving any peer/client traffic. Only mismatch when hashes are different at requested revision, with same compact revision.
func (*EtcdServer) ClientCertAuthEnabled ¶
func (s *EtcdServer) ClientCertAuthEnabled() bool
func (*EtcdServer) Cluster ¶
func (s *EtcdServer) Cluster() api.Cluster
func (*EtcdServer) ClusterVersion ¶
func (s *EtcdServer) ClusterVersion() *semver.Version
func (*EtcdServer) CommittedIndex ¶
func (s *EtcdServer) CommittedIndex() uint64
func (*EtcdServer) Compact ¶
func (s *EtcdServer) Compact(ctx context.Context, r *pb.CompactionRequest) (*pb.CompactionResponse, error)
func (*EtcdServer) CutPeer ¶
func (s *EtcdServer) CutPeer(id types.ID)
CutPeer drops messages to the specified peer.
func (*EtcdServer) DeleteRange ¶
func (s *EtcdServer) DeleteRange(ctx context.Context, r *pb.DeleteRangeRequest) (*pb.DeleteRangeResponse, error)
func (*EtcdServer) Downgrade ¶
func (s *EtcdServer) Downgrade(ctx context.Context, r *pb.DowngradeRequest) (*pb.DowngradeResponse, error)
func (*EtcdServer) HardStop ¶
func (s *EtcdServer) HardStop()
HardStop stops the server without coordination with other members in the cluster.
func (*EtcdServer) HashKVHandler ¶
func (s *EtcdServer) HashKVHandler() http.Handler
func (*EtcdServer) ID ¶
func (s *EtcdServer) ID() types.ID
func (*EtcdServer) IsIDRemoved ¶
func (s *EtcdServer) IsIDRemoved(id uint64) bool
func (*EtcdServer) IsLearner ¶
func (s *EtcdServer) IsLearner() bool
IsLearner returns if the local member is raft learner
func (*EtcdServer) IsMemberExist ¶
func (s *EtcdServer) IsMemberExist(id types.ID) bool
IsMemberExist returns if the member with the given id exists in cluster.
func (*EtcdServer) KV ¶
func (s *EtcdServer) KV() mvcc.ConsistentWatchableKV
func (*EtcdServer) Lead ¶
func (s *EtcdServer) Lead() uint64
func (*EtcdServer) Leader ¶
func (s *EtcdServer) Leader() types.ID
func (*EtcdServer) LeaderStats ¶
func (s *EtcdServer) LeaderStats() []byte
func (*EtcdServer) LeaseGrant ¶
func (s *EtcdServer) LeaseGrant(ctx context.Context, r *pb.LeaseGrantRequest) (*pb.LeaseGrantResponse, error)
func (*EtcdServer) LeaseHandler ¶
func (s *EtcdServer) LeaseHandler() http.Handler
func (*EtcdServer) LeaseLeases ¶
func (s *EtcdServer) LeaseLeases(ctx context.Context, r *pb.LeaseLeasesRequest) (*pb.LeaseLeasesResponse, error)
func (*EtcdServer) LeaseRenew ¶
func (*EtcdServer) LeaseRevoke ¶
func (s *EtcdServer) LeaseRevoke(ctx context.Context, r *pb.LeaseRevokeRequest) (*pb.LeaseRevokeResponse, error)
func (*EtcdServer) LeaseTimeToLive ¶
func (s *EtcdServer) LeaseTimeToLive(ctx context.Context, r *pb.LeaseTimeToLiveRequest) (*pb.LeaseTimeToLiveResponse, error)
func (*EtcdServer) LinearizableReadNotify ¶
func (s *EtcdServer) LinearizableReadNotify(ctx context.Context) error
func (*EtcdServer) Logger ¶
func (s *EtcdServer) Logger() *zap.Logger
func (*EtcdServer) MendPeer ¶
func (s *EtcdServer) MendPeer(id types.ID)
MendPeer recovers the message dropping behavior of the given peer.
func (*EtcdServer) MoveLeader ¶
func (s *EtcdServer) MoveLeader(ctx context.Context, lead, transferee uint64) error
MoveLeader transfers the leader to the given transferee.
func (*EtcdServer) PauseSending ¶
func (s *EtcdServer) PauseSending()
func (*EtcdServer) Process ¶
Process takes a raft message and applies it to the server's raft state machine, respecting any timeout of the given context.
func (*EtcdServer) PromoteMember ¶
func (s *EtcdServer) PromoteMember(ctx context.Context, id uint64) ([]*membership.Member, error)
PromoteMember promotes a learner node to a voting node.
func (*EtcdServer) Put ¶
func (s *EtcdServer) Put(ctx context.Context, r *pb.PutRequest) (*pb.PutResponse, error)
func (*EtcdServer) RaftHandler ¶
func (s *EtcdServer) RaftHandler() http.Handler
func (*EtcdServer) Range ¶
func (s *EtcdServer) Range(ctx context.Context, r *pb.RangeRequest) (*pb.RangeResponse, error)
func (*EtcdServer) ReadyNotify ¶
func (s *EtcdServer) ReadyNotify() <-chan struct{}
ReadyNotify returns a channel that will be closed when the server is ready to serve client requests
func (*EtcdServer) RemoveMember ¶
func (s *EtcdServer) RemoveMember(ctx context.Context, id uint64) ([]*membership.Member, error)
func (*EtcdServer) ReportSnapshot ¶
func (s *EtcdServer) ReportSnapshot(id uint64, status raft.SnapshotStatus)
ReportSnapshot reports snapshot sent status to the raft state machine, and clears the used snapshot from the snapshot store.
func (*EtcdServer) ReportUnreachable ¶
func (s *EtcdServer) ReportUnreachable(id uint64)
func (*EtcdServer) ResumeSending ¶
func (s *EtcdServer) ResumeSending()
func (*EtcdServer) RoleAdd ¶
func (s *EtcdServer) RoleAdd(ctx context.Context, r *pb.AuthRoleAddRequest) (*pb.AuthRoleAddResponse, error)
func (*EtcdServer) RoleDelete ¶
func (s *EtcdServer) RoleDelete(ctx context.Context, r *pb.AuthRoleDeleteRequest) (*pb.AuthRoleDeleteResponse, error)
func (*EtcdServer) RoleGet ¶
func (s *EtcdServer) RoleGet(ctx context.Context, r *pb.AuthRoleGetRequest) (*pb.AuthRoleGetResponse, error)
func (*EtcdServer) RoleGrantPermission ¶
func (s *EtcdServer) RoleGrantPermission(ctx context.Context, r *pb.AuthRoleGrantPermissionRequest) (*pb.AuthRoleGrantPermissionResponse, error)
func (*EtcdServer) RoleList ¶
func (s *EtcdServer) RoleList(ctx context.Context, r *pb.AuthRoleListRequest) (*pb.AuthRoleListResponse, error)
func (*EtcdServer) RoleRevokePermission ¶
func (s *EtcdServer) RoleRevokePermission(ctx context.Context, r *pb.AuthRoleRevokePermissionRequest) (*pb.AuthRoleRevokePermissionResponse, error)
func (*EtcdServer) SelfStats ¶
func (s *EtcdServer) SelfStats() []byte
func (*EtcdServer) Start ¶
func (s *EtcdServer) Start()
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.
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. When stopping leader, Stop transfers its leadership to one of its peers before stopping the server. Stop terminates the Server and performs any necessary finalization. Do and Process cannot be called after Stop has been invoked.
func (*EtcdServer) StopNotify ¶
func (s *EtcdServer) StopNotify() <-chan struct{}
StopNotify returns a channel that receives a empty struct when the server is stopped.
func (*EtcdServer) StoreStats ¶
func (s *EtcdServer) StoreStats() []byte
func (*EtcdServer) Term ¶
func (s *EtcdServer) Term() uint64
func (*EtcdServer) TransferLeadership ¶
func (s *EtcdServer) TransferLeadership() error
TransferLeadership transfers the leader to the chosen transferee.
func (*EtcdServer) Txn ¶
func (s *EtcdServer) Txn(ctx context.Context, r *pb.TxnRequest) (*pb.TxnResponse, error)
func (*EtcdServer) UpdateMember ¶
func (s *EtcdServer) UpdateMember(ctx context.Context, memb membership.Member) ([]*membership.Member, error)
func (*EtcdServer) UserAdd ¶
func (s *EtcdServer) UserAdd(ctx context.Context, r *pb.AuthUserAddRequest) (*pb.AuthUserAddResponse, error)
func (*EtcdServer) UserChangePassword ¶
func (s *EtcdServer) UserChangePassword(ctx context.Context, r *pb.AuthUserChangePasswordRequest) (*pb.AuthUserChangePasswordResponse, error)
func (*EtcdServer) UserDelete ¶
func (s *EtcdServer) UserDelete(ctx context.Context, r *pb.AuthUserDeleteRequest) (*pb.AuthUserDeleteResponse, error)
func (*EtcdServer) UserGet ¶
func (s *EtcdServer) UserGet(ctx context.Context, r *pb.AuthUserGetRequest) (*pb.AuthUserGetResponse, error)
func (*EtcdServer) UserGrantRole ¶
func (s *EtcdServer) UserGrantRole(ctx context.Context, r *pb.AuthUserGrantRoleRequest) (*pb.AuthUserGrantRoleResponse, error)
func (*EtcdServer) UserList ¶
func (s *EtcdServer) UserList(ctx context.Context, r *pb.AuthUserListRequest) (*pb.AuthUserListResponse, error)
func (*EtcdServer) UserRevokeRole ¶
func (s *EtcdServer) UserRevokeRole(ctx context.Context, r *pb.AuthUserRevokeRoleRequest) (*pb.AuthUserRevokeRoleResponse, error)
func (*EtcdServer) Watchable ¶
func (s *EtcdServer) Watchable() mvcc.WatchableKV
Watchable returns a watchable interface attached to the etcdserver.
type Lessor ¶
type Lessor interface { // LeaseGrant sends LeaseGrant request to raft and apply it after committed. LeaseGrant(ctx context.Context, r *pb.LeaseGrantRequest) (*pb.LeaseGrantResponse, error) // LeaseRevoke sends LeaseRevoke request to raft and apply it after committed. LeaseRevoke(ctx context.Context, r *pb.LeaseRevokeRequest) (*pb.LeaseRevokeResponse, error) // LeaseRenew renews the lease with given ID. The renewed TTL is returned. Or an error // is returned. LeaseRenew(ctx context.Context, id lease.LeaseID) (int64, error) // LeaseTimeToLive retrieves lease information. LeaseTimeToLive(ctx context.Context, r *pb.LeaseTimeToLiveRequest) (*pb.LeaseTimeToLiveResponse, error) // LeaseLeases lists all leases. LeaseLeases(ctx context.Context, r *pb.LeaseLeasesRequest) (*pb.LeaseLeasesResponse, error) }
type Quota ¶
type Quota interface { // Available judges whether the given request fits within the quota. Available(req interface{}) bool // Cost computes the charge against the quota for a given request. Cost(req interface{}) int // Remaining is the amount of charge left for the quota. Remaining() int64 }
Quota represents an arbitrary quota against arbitrary requests. Each request costs some charge; if there is not enough remaining charge, then there are too few resources available within the quota to apply the request.
func NewBackendQuota ¶
func NewBackendQuota(s *EtcdServer, name string) Quota
NewBackendQuota creates a quota layer with the given storage limit.
type RaftKV ¶
type RaftKV interface { Range(ctx context.Context, r *pb.RangeRequest) (*pb.RangeResponse, error) Put(ctx context.Context, r *pb.PutRequest) (*pb.PutResponse, error) DeleteRange(ctx context.Context, r *pb.DeleteRangeRequest) (*pb.DeleteRangeResponse, error) Txn(ctx context.Context, r *pb.TxnRequest) (*pb.TxnResponse, error) Compact(ctx context.Context, r *pb.CompactionRequest) (*pb.CompactionResponse, error) }
type RaftStatusGetter ¶
type RaftStatusGetter interface { ID() types.ID Leader() types.ID CommittedIndex() uint64 AppliedIndex() uint64 Term() uint64 }
RaftStatusGetter represents etcd server and Raft progress.
type RequestV2 ¶
func (*RequestV2) Handle ¶
Handle 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 (*RequestV2) TTLOptions ¶
func (r *RequestV2) TTLOptions() v2store.TTLOptionSet
type RequestV2Handler ¶
type RequestV2Handler interface { Post(ctx context.Context, r *RequestV2) (Response, error) Put(ctx context.Context, r *RequestV2) (Response, error) Delete(ctx context.Context, r *RequestV2) (Response, error) QGet(ctx context.Context, r *RequestV2) (Response, error) Get(ctx context.Context, r *RequestV2) (Response, error) Head(ctx context.Context, r *RequestV2) (Response, error) }
func NewStoreRequestV2Handler ¶
func NewStoreRequestV2Handler(s v2store.Store, applier ApplierV2) RequestV2Handler
type Server ¶
type Server interface { // 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 membership.Member) ([]*membership.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) ([]*membership.Member, error) // UpdateMember attempts to update an existing member in the cluster. It will // return ErrIDNotFound if the member ID does not exist. UpdateMember(ctx context.Context, updateMemb membership.Member) ([]*membership.Member, error) // PromoteMember attempts to promote a non-voting node to a voting node. It will // return ErrIDNotFound if the member ID does not exist. // return ErrLearnerNotReady if the member are not ready. // return ErrMemberNotLearner if the member is not a learner. PromoteMember(ctx context.Context, id uint64) ([]*membership.Member, error) // ClusterVersion is the cluster-wide minimum major.minor version. // Cluster version is set to the min version that an etcd member is // compatible with when first bootstrap. // // ClusterVersion is nil until the cluster is bootstrapped (has a quorum). // // During a rolling upgrades, the ClusterVersion will be updated // automatically after a sync. (5 second by default) // // The API/raft component can utilize ClusterVersion to determine if // it can accept a client request or a raft RPC. // NOTE: ClusterVersion might be nil when etcd 2.1 works with etcd 2.0 and // the leader is etcd 2.0. etcd 2.0 leader will not update clusterVersion since // this feature is introduced post 2.0. ClusterVersion() *semver.Version Cluster() api.Cluster Alarms() []*pb.AlarmMember }
type ServerConfig ¶
type ServerConfig struct { Name string DiscoveryURL string DiscoveryProxy string ClientURLs types.URLs PeerURLs types.URLs DataDir string // DedicatedWALDir config will make the etcd to write the WAL to the WALDir // rather than the dataDir/member/wal. DedicatedWALDir string SnapshotCount uint64 // SnapshotCatchUpEntries is the number of entries for a slow follower // to catch-up after compacting the raft storage entries. // We expect the follower has a millisecond level latency with the leader. // The max throughput is around 10K. Keep a 5K entries is enough for helping // follower to catch up. // WARNING: only change this for tests. Always use "DefaultSnapshotCatchUpEntries" SnapshotCatchUpEntries uint64 MaxSnapFiles uint MaxWALFiles uint // BackendBatchInterval is the maximum time before commit the backend transaction. BackendBatchInterval time.Duration // BackendBatchLimit is the maximum operations before commit the backend transaction. BackendBatchLimit int // BackendFreelistType is the type of the backend boltdb freelist. BackendFreelistType bolt.FreelistType InitialPeerURLsMap types.URLsMap InitialClusterToken string NewCluster bool PeerTLSInfo transport.TLSInfo CORS map[string]struct{} // HostWhitelist lists acceptable hostnames from client requests. // If server is insecure (no TLS), server only accepts requests // whose Host header value exists in this white list. HostWhitelist map[string]struct{} TickMs uint ElectionTicks int // InitialElectionTickAdvance is true, then local member fast-forwards // election ticks to speed up "initial" leader election trigger. This // benefits the case of larger election ticks. For instance, cross // datacenter deployment may require longer election timeout of 10-second. // If true, local node does not need wait up to 10-second. Instead, // forwards its election ticks to 8-second, and have only 2-second left // before leader election. // // Major assumptions are that: // - cluster has no active leader thus advancing ticks enables faster // leader election, or // - cluster already has an established leader, and rejoining follower // is likely to receive heartbeats from the leader after tick advance // and before election timeout. // // However, when network from leader to rejoining follower is congested, // and the follower does not receive leader heartbeat within left election // ticks, disruptive election has to happen thus affecting cluster // availabilities. // // Disabling this would slow down initial bootstrap process for cross // datacenter deployments. Make your own tradeoffs by configuring // --initial-election-tick-advance at the cost of slow initial bootstrap. // // If single-node, it advances ticks regardless. // // See https://github.com/etcd-io/etcd/issues/9333 for more detail. InitialElectionTickAdvance bool BootstrapTimeout time.Duration AutoCompactionRetention time.Duration AutoCompactionMode string CompactionBatchLimit int QuotaBackendBytes int64 MaxTxnOps uint // MaxRequestBytes is the maximum request size to send over raft. MaxRequestBytes uint StrictReconfigCheck bool // ClientCertAuthEnabled is true when cert has been signed by the client CA. ClientCertAuthEnabled bool AuthToken string BcryptCost uint TokenTTL uint // InitialCorruptCheck is true to check data corruption on boot // before serving any peer/client traffic. InitialCorruptCheck bool CorruptCheckTime time.Duration // PreVote is true to enable Raft Pre-Vote. PreVote bool // Logger logs server-side operations. // If not nil, it disables "capnslog" and uses the given logger. Logger *zap.Logger // LoggerConfig is server logger configuration for Raft logger. // Must be either: "LoggerConfig != nil" or "LoggerCore != nil && LoggerWriteSyncer != nil". LoggerConfig *zap.Config // LoggerCore is "zapcore.Core" for raft logger. // Must be either: "LoggerConfig != nil" or "LoggerCore != nil && LoggerWriteSyncer != nil". LoggerCore zapcore.Core LoggerWriteSyncer zapcore.WriteSyncer ForceNewCluster bool // EnableLeaseCheckpoint enables primary lessor to persist lease remainingTTL to prevent indefinite auto-renewal of long lived leases. EnableLeaseCheckpoint bool // LeaseCheckpointInterval time.Duration is the wait duration between lease checkpoints. LeaseCheckpointInterval time.Duration EnableGRPCGateway bool WatchProgressNotifyInterval time.Duration // UnsafeNoFsync disables all uses of fsync. // Setting this is unsafe and will cause data loss. UnsafeNoFsync bool `json:"unsafe-no-fsync"` }
ServerConfig holds the configuration of etcd as taken from the command line or discovery.
func (*ServerConfig) MemberDir ¶
func (c *ServerConfig) MemberDir() string
func (*ServerConfig) ReqTimeout ¶
func (c *ServerConfig) ReqTimeout() time.Duration
ReqTimeout returns timeout for request to finish.
func (*ServerConfig) ShouldDiscover ¶
func (c *ServerConfig) ShouldDiscover() bool
func (*ServerConfig) SnapDir ¶
func (c *ServerConfig) SnapDir() string
func (*ServerConfig) VerifyBootstrap ¶
func (c *ServerConfig) VerifyBootstrap() error
VerifyBootstrap sanity-checks the initial config for bootstrap case and returns an error for things that should never happen.
func (*ServerConfig) VerifyJoinExisting ¶
func (c *ServerConfig) VerifyJoinExisting() error
VerifyJoinExisting sanity-checks the initial config for join existing cluster case and returns an error for things that should never happen.
func (*ServerConfig) WALDir ¶
func (c *ServerConfig) WALDir() string
type ServerPeer ¶
type ServerPeerV2 ¶
type ServerPeerV2 interface { ServerPeer HashKVHandler() http.Handler }
type ServerV3 ¶
type ServerV3 interface { Server RaftStatusGetter }
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) error // SaveSnap function saves snapshot to the underlying stable storage. SaveSnap(snap raftpb.Snapshot) error // Close closes the Storage and performs finalization. Close() error // Release releases the locked wal files older than the provided snapshot. Release(snap raftpb.Snapshot) error // Sync WAL Sync() error }
func NewStorage ¶
func NewStorage(w *wal.WAL, s *snap.Snapshotter) Storage
Source Files
¶
Directories
¶
Path | Synopsis |
---|---|
Package api manages the capabilities and features that are exposed to clients by the etcd cluster.
|
Package api manages the capabilities and features that are exposed to clients by the etcd cluster. |
etcdhttp
Package etcdhttp implements HTTP transportation layer for etcdserver.
|
Package etcdhttp implements HTTP transportation layer for etcdserver. |
membership
Package membership describes individual etcd members and clusters of members.
|
Package membership describes individual etcd members and clusters of members. |
membership/membershippb
Package membershippb is a generated protocol buffer package.
|
Package membershippb is a generated protocol buffer package. |
rafthttp
Package rafthttp implements HTTP transportation layer for etcd/raft pkg.
|
Package rafthttp implements HTTP transportation layer for etcd/raft pkg. |
snap
Package snap handles Raft nodes' states with snapshots.
|
Package snap handles Raft nodes' states with snapshots. |
snap/snappb
Package snappb is a generated protocol buffer package.
|
Package snappb is a generated protocol buffer package. |
v2auth
Package v2auth implements etcd authentication.
|
Package v2auth implements etcd authentication. |
v2discovery
Package v2discovery provides an implementation of the cluster discovery that is used by etcd with v2 client.
|
Package v2discovery provides an implementation of the cluster discovery that is used by etcd with v2 client. |
v2error
Package v2error describes errors in etcd project.
|
Package v2error describes errors in etcd project. |
v2http
Package v2http provides etcd client and server implementations.
|
Package v2http provides etcd client and server implementations. |
v2http/httptypes
Package httptypes defines how etcd's HTTP API entities are serialized to and deserialized from JSON.
|
Package httptypes defines how etcd's HTTP API entities are serialized to and deserialized from JSON. |
v2stats
Package v2stats defines a standard interface for etcd cluster statistics.
|
Package v2stats defines a standard interface for etcd cluster statistics. |
v2store
Package v2store defines etcd's in-memory key/value store in v2 API.
|
Package v2store defines etcd's in-memory key/value store in v2 API. |
v2v3
Package v2v3 provides a ServerV2 implementation backed by clientv3.Client.
|
Package v2v3 provides a ServerV2 implementation backed by clientv3.Client. |
v3alarm
Package v3alarm manages health status alarms in etcd.
|
Package v3alarm manages health status alarms in etcd. |
v3client
Package v3client provides clientv3 interfaces from an etcdserver.
|
Package v3client provides clientv3 interfaces from an etcdserver. |
v3compactor
Package v3compactor implements automated policies for compacting etcd's mvcc storage.
|
Package v3compactor implements automated policies for compacting etcd's mvcc storage. |
v3election
Package v3election provides a v3 election service from an etcdserver.
|
Package v3election provides a v3 election service from an etcdserver. |
v3election/v3electionpb
Package v3electionpb is a generated protocol buffer package.
|
Package v3electionpb is a generated protocol buffer package. |
v3election/v3electionpb/gw
Package v3electionpb is a reverse proxy.
|
Package v3electionpb is a reverse proxy. |
v3lock
Package v3lock provides a v3 locking service from an etcdserver.
|
Package v3lock provides a v3 locking service from an etcdserver. |
v3lock/v3lockpb
Package v3lockpb is a generated protocol buffer package.
|
Package v3lockpb is a generated protocol buffer package. |
v3lock/v3lockpb/gw
Package v3lockpb is a reverse proxy.
|
Package v3lockpb is a reverse proxy. |
v3rpc
Package v3rpc implements etcd v3 RPC system based on gRPC.
|
Package v3rpc implements etcd v3 RPC system based on gRPC. |
v3rpc/rpctypes
Package rpctypes has types and values shared by the etcd server and client for v3 RPC interaction.
|
Package rpctypes has types and values shared by the etcd server and client for v3 RPC interaction. |
Package cindex provides an interface and implementation for getting/saving consistentIndex.
|
Package cindex provides an interface and implementation for getting/saving consistentIndex. |
Package etcdserverpb is a generated protocol buffer package.
|
Package etcdserverpb is a generated protocol buffer package. |
gw
Package etcdserverpb is a reverse proxy.
|
Package etcdserverpb is a reverse proxy. |