Documentation
¶
Index ¶
- Variables
- func HealthCheckToString(healthcheck HealthCheckResponse) string
- func NewClientCtx(ctx context.Context, token string, timeout time.Duration) (context.Context, func())
- func NewLock(client *clientv3.Client, clusterdataKey string) locker
- func Pipeline(steps ...*pipelineStep) func(context.Context, context.Context) error
- func RegisterFailoverServer(s *grpc.Server, srv FailoverServer)
- func Step(action func(context.Context) error) *pipelineStep
- type Empty
- func (*Empty) Descriptor() ([]byte, []int)
- func (*Empty) ProtoMessage()
- func (m *Empty) Reset()
- func (m *Empty) String() string
- func (m *Empty) XXX_DiscardUnknown()
- func (m *Empty) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Empty) XXX_Merge(src proto.Message)
- func (m *Empty) XXX_Size() int
- func (m *Empty) XXX_Unmarshal(b []byte) error
- type Failover
- func (f *Failover) AcquireLock(ctx context.Context) error
- func (f *Failover) CheckClusterHealthy(ctx context.Context) error
- func (f *Failover) EachClient(logger kitlog.Logger, action func(string, FailoverClient) error) (result error)
- func (f *Failover) Failkeeper(ctx context.Context) error
- func (f *Failover) HealthCheckClients(ctx context.Context) error
- func (f *Failover) NotifyRecovered(ctx context.Context, logger kitlog.Logger, oldMaster stolon.DB) chan stolon.DB
- func (f *Failover) Pause(ctx context.Context) error
- func (f *Failover) ReleaseLock(ctx context.Context) error
- func (f *Failover) RestoreSleepInterval(ctx context.Context) error
- func (f *Failover) Resume(ctx context.Context) error
- func (f *Failover) Run(ctx context.Context, deferCtx context.Context) error
- func (f *Failover) ShortenSleepInterval(ctx context.Context) error
- type FailoverClient
- type FailoverOptions
- type FailoverServer
- type HealthCheckResponse
- func (*HealthCheckResponse) Descriptor() ([]byte, []int)
- func (m *HealthCheckResponse) GetComponents() []*HealthCheckResponse_ComponentHealthCheck
- func (m *HealthCheckResponse) GetStatus() HealthCheckResponse_Status
- func (*HealthCheckResponse) ProtoMessage()
- func (m *HealthCheckResponse) Reset()
- func (m *HealthCheckResponse) String() string
- func (m *HealthCheckResponse) XXX_DiscardUnknown()
- func (m *HealthCheckResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *HealthCheckResponse) XXX_Merge(src proto.Message)
- func (m *HealthCheckResponse) XXX_Size() int
- func (m *HealthCheckResponse) XXX_Unmarshal(b []byte) error
- type HealthCheckResponse_ComponentHealthCheck
- func (*HealthCheckResponse_ComponentHealthCheck) Descriptor() ([]byte, []int)
- func (m *HealthCheckResponse_ComponentHealthCheck) GetError() string
- func (m *HealthCheckResponse_ComponentHealthCheck) GetName() string
- func (m *HealthCheckResponse_ComponentHealthCheck) GetStatus() HealthCheckResponse_Status
- func (*HealthCheckResponse_ComponentHealthCheck) ProtoMessage()
- func (m *HealthCheckResponse_ComponentHealthCheck) Reset()
- func (m *HealthCheckResponse_ComponentHealthCheck) String() string
- func (m *HealthCheckResponse_ComponentHealthCheck) XXX_DiscardUnknown()
- func (m *HealthCheckResponse_ComponentHealthCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *HealthCheckResponse_ComponentHealthCheck) XXX_Merge(src proto.Message)
- func (m *HealthCheckResponse_ComponentHealthCheck) XXX_Size() int
- func (m *HealthCheckResponse_ComponentHealthCheck) XXX_Unmarshal(b []byte) error
- type HealthCheckResponse_Status
- type PauseRequest
- func (*PauseRequest) Descriptor() ([]byte, []int)
- func (m *PauseRequest) GetExpiry() int64
- func (m *PauseRequest) GetTimeout() int64
- func (*PauseRequest) ProtoMessage()
- func (m *PauseRequest) Reset()
- func (m *PauseRequest) String() string
- func (m *PauseRequest) XXX_DiscardUnknown()
- func (m *PauseRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *PauseRequest) XXX_Merge(src proto.Message)
- func (m *PauseRequest) XXX_Size() int
- func (m *PauseRequest) XXX_Unmarshal(b []byte) error
- type PauseResponse
- func (*PauseResponse) Descriptor() ([]byte, []int)
- func (m *PauseResponse) GetCreatedAt() *timestamp.Timestamp
- func (m *PauseResponse) GetExpiresAt() *timestamp.Timestamp
- func (*PauseResponse) ProtoMessage()
- func (m *PauseResponse) Reset()
- func (m *PauseResponse) String() string
- func (m *PauseResponse) XXX_DiscardUnknown()
- func (m *PauseResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *PauseResponse) XXX_Merge(src proto.Message)
- func (m *PauseResponse) XXX_Size() int
- func (m *PauseResponse) XXX_Unmarshal(b []byte) error
- type ResumeResponse
- func (*ResumeResponse) Descriptor() ([]byte, []int)
- func (m *ResumeResponse) GetCreatedAt() *timestamp.Timestamp
- func (*ResumeResponse) ProtoMessage()
- func (m *ResumeResponse) Reset()
- func (m *ResumeResponse) String() string
- func (m *ResumeResponse) XXX_DiscardUnknown()
- func (m *ResumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *ResumeResponse) XXX_Merge(src proto.Message)
- func (m *ResumeResponse) XXX_Size() int
- func (m *ResumeResponse) XXX_Unmarshal(b []byte) error
- type Server
- func (s *Server) HealthCheck(ctx context.Context, _ *Empty) (*HealthCheckResponse, error)
- func (s *Server) LoggingInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, ...) (resp interface{}, err error)
- func (s *Server) NewAuthenticationInterceptor(token string) ...
- func (s *Server) Pause(ctx context.Context, req *PauseRequest) (resp *PauseResponse, err error)
- func (s *Server) Resume(ctx context.Context, _ *Empty) (*ResumeResponse, error)
- type UnimplementedFailoverServer
- func (*UnimplementedFailoverServer) HealthCheck(ctx context.Context, req *Empty) (*HealthCheckResponse, error)
- func (*UnimplementedFailoverServer) Pause(ctx context.Context, req *PauseRequest) (*PauseResponse, error)
- func (*UnimplementedFailoverServer) Resume(ctx context.Context, req *Empty) (*ResumeResponse, error)
Constants ¶
This section is empty.
Variables ¶
var HealthCheckResponse_Status_name = map[int32]string{
0: "UNKNOWN",
1: "HEALTHY",
2: "UNHEALTHY",
}
var HealthCheckResponse_Status_value = map[string]int32{
"UNKNOWN": 0,
"HEALTHY": 1,
"UNHEALTHY": 2,
}
Functions ¶
func HealthCheckToString ¶
func HealthCheckToString(healthcheck HealthCheckResponse) string
HealthCheckToString renders a healthcheck to a human-readable string
func NewClientCtx ¶
func NewClientCtx(ctx context.Context, token string, timeout time.Duration) (context.Context, func())
NewClientCtx generates a new context that will authenticate against the pauser API
func NewLock ¶ added in v1.5.0
NewLock returns a locker that is expected to provide exclusive access to the clusterdata resource. Any application trying to modify clusterdata- such as a config management system applying clusterdata configuration- should acquire this lock before making changes.
func Pipeline ¶
Pipeline can be used to construct a step-by-step process with deferred actions. By handling the errors and control-flow, it can provide an expressive mechanism for specifying pipelines.
func RegisterFailoverServer ¶
func RegisterFailoverServer(s *grpc.Server, srv FailoverServer)
Types ¶
type Empty ¶
type Empty struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` }
func (*Empty) Descriptor ¶
func (*Empty) ProtoMessage ¶
func (*Empty) ProtoMessage()
func (*Empty) XXX_DiscardUnknown ¶
func (m *Empty) XXX_DiscardUnknown()
func (*Empty) XXX_Marshal ¶
func (*Empty) XXX_Unmarshal ¶
type Failover ¶
type Failover struct {
// contains filtered or unexported fields
}
func NewFailover ¶
func NewFailover(logger kitlog.Logger, client *clientv3.Client, clients map[string]FailoverClient, stolonctl stolon.Stolonctl, opt FailoverOptions) *Failover
func (*Failover) CheckClusterHealthy ¶
func (*Failover) EachClient ¶
func (f *Failover) EachClient(logger kitlog.Logger, action func(string, FailoverClient) error) (result error)
EachClient provides a helper to perform actions on all the failover clients, in parallel. For some operations where there is a penalty for extended running time (such as pause) it's important that each request occurs in parallel.
func (*Failover) Failkeeper ¶
Failkeeper uses stolonctl to mark the current primary keeper as failed
func (*Failover) HealthCheckClients ¶
func (*Failover) NotifyRecovered ¶
func (f *Failover) NotifyRecovered(ctx context.Context, logger kitlog.Logger, oldMaster stolon.DB) chan stolon.DB
NotifyRecovered will return a channel that receives the new master DB only once it is healthy and available for writes. We determine this by checking the new master and all its sync nodes are healthy.
func (*Failover) RestoreSleepInterval ¶ added in v1.5.0
RestoreSleepInterval removes the temporary short sleep interval that we apply for the purpose of fast failover.
func (*Failover) Run ¶
Run triggers the failover process. We model this as a Pipeline of steps, where each step has associated deferred actions that must be scheduled before the primary operation ever takes place.
This has the benefit of clearly expressing the steps required to perform a failover, tidying up some of the error handling and logging noise that would otherwise be present.
func (*Failover) ShortenSleepInterval ¶ added in v1.5.0
ShortenSleepInterval temporarily applies a shorter sleep interval that can help stolon components respond quicker to the failover. We cache the original interval to ensure we can return the cluster to how it was prior to the failover.
type FailoverClient ¶
type FailoverClient interface { HealthCheck(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*HealthCheckResponse, error) Pause(ctx context.Context, in *PauseRequest, opts ...grpc.CallOption) (*PauseResponse, error) Resume(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*ResumeResponse, error) }
FailoverClient is the client API for Failover service.
For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
func NewFailoverClient ¶
func NewFailoverClient(cc *grpc.ClientConn) FailoverClient
type FailoverOptions ¶
type FailoverServer ¶
type FailoverServer interface { HealthCheck(context.Context, *Empty) (*HealthCheckResponse, error) Pause(context.Context, *PauseRequest) (*PauseResponse, error) Resume(context.Context, *Empty) (*ResumeResponse, error) }
FailoverServer is the server API for Failover service.
type HealthCheckResponse ¶
type HealthCheckResponse struct { Status HealthCheckResponse_Status `protobuf:"varint,1,opt,name=status,proto3,enum=failover.HealthCheckResponse_Status" json:"status,omitempty"` Components []*HealthCheckResponse_ComponentHealthCheck `protobuf:"bytes,2,rep,name=components,proto3" json:"components,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` }
func (*HealthCheckResponse) Descriptor ¶
func (*HealthCheckResponse) Descriptor() ([]byte, []int)
func (*HealthCheckResponse) GetComponents ¶
func (m *HealthCheckResponse) GetComponents() []*HealthCheckResponse_ComponentHealthCheck
func (*HealthCheckResponse) GetStatus ¶
func (m *HealthCheckResponse) GetStatus() HealthCheckResponse_Status
func (*HealthCheckResponse) ProtoMessage ¶
func (*HealthCheckResponse) ProtoMessage()
func (*HealthCheckResponse) Reset ¶
func (m *HealthCheckResponse) Reset()
func (*HealthCheckResponse) String ¶
func (m *HealthCheckResponse) String() string
func (*HealthCheckResponse) XXX_DiscardUnknown ¶
func (m *HealthCheckResponse) XXX_DiscardUnknown()
func (*HealthCheckResponse) XXX_Marshal ¶
func (m *HealthCheckResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*HealthCheckResponse) XXX_Merge ¶
func (m *HealthCheckResponse) XXX_Merge(src proto.Message)
func (*HealthCheckResponse) XXX_Size ¶
func (m *HealthCheckResponse) XXX_Size() int
func (*HealthCheckResponse) XXX_Unmarshal ¶
func (m *HealthCheckResponse) XXX_Unmarshal(b []byte) error
type HealthCheckResponse_ComponentHealthCheck ¶
type HealthCheckResponse_ComponentHealthCheck struct { Status HealthCheckResponse_Status `protobuf:"varint,1,opt,name=status,proto3,enum=failover.HealthCheckResponse_Status" json:"status,omitempty"` Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` Error string `protobuf:"bytes,3,opt,name=Error,proto3" json:"Error,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` }
func (*HealthCheckResponse_ComponentHealthCheck) Descriptor ¶
func (*HealthCheckResponse_ComponentHealthCheck) Descriptor() ([]byte, []int)
func (*HealthCheckResponse_ComponentHealthCheck) GetError ¶
func (m *HealthCheckResponse_ComponentHealthCheck) GetError() string
func (*HealthCheckResponse_ComponentHealthCheck) GetName ¶
func (m *HealthCheckResponse_ComponentHealthCheck) GetName() string
func (*HealthCheckResponse_ComponentHealthCheck) GetStatus ¶
func (m *HealthCheckResponse_ComponentHealthCheck) GetStatus() HealthCheckResponse_Status
func (*HealthCheckResponse_ComponentHealthCheck) ProtoMessage ¶
func (*HealthCheckResponse_ComponentHealthCheck) ProtoMessage()
func (*HealthCheckResponse_ComponentHealthCheck) Reset ¶
func (m *HealthCheckResponse_ComponentHealthCheck) Reset()
func (*HealthCheckResponse_ComponentHealthCheck) String ¶
func (m *HealthCheckResponse_ComponentHealthCheck) String() string
func (*HealthCheckResponse_ComponentHealthCheck) XXX_DiscardUnknown ¶
func (m *HealthCheckResponse_ComponentHealthCheck) XXX_DiscardUnknown()
func (*HealthCheckResponse_ComponentHealthCheck) XXX_Marshal ¶
func (m *HealthCheckResponse_ComponentHealthCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*HealthCheckResponse_ComponentHealthCheck) XXX_Merge ¶
func (m *HealthCheckResponse_ComponentHealthCheck) XXX_Merge(src proto.Message)
func (*HealthCheckResponse_ComponentHealthCheck) XXX_Size ¶
func (m *HealthCheckResponse_ComponentHealthCheck) XXX_Size() int
func (*HealthCheckResponse_ComponentHealthCheck) XXX_Unmarshal ¶
func (m *HealthCheckResponse_ComponentHealthCheck) XXX_Unmarshal(b []byte) error
type HealthCheckResponse_Status ¶
type HealthCheckResponse_Status int32
const ( HealthCheckResponse_UNKNOWN HealthCheckResponse_Status = 0 HealthCheckResponse_HEALTHY HealthCheckResponse_Status = 1 HealthCheckResponse_UNHEALTHY HealthCheckResponse_Status = 2 )
func (HealthCheckResponse_Status) EnumDescriptor ¶
func (HealthCheckResponse_Status) EnumDescriptor() ([]byte, []int)
func (HealthCheckResponse_Status) String ¶
func (x HealthCheckResponse_Status) String() string
type PauseRequest ¶
type PauseRequest struct { Timeout int64 `protobuf:"varint,1,opt,name=timeout,proto3" json:"timeout,omitempty"` Expiry int64 `protobuf:"varint,2,opt,name=expiry,proto3" json:"expiry,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` }
func (*PauseRequest) Descriptor ¶
func (*PauseRequest) Descriptor() ([]byte, []int)
func (*PauseRequest) GetExpiry ¶
func (m *PauseRequest) GetExpiry() int64
func (*PauseRequest) GetTimeout ¶
func (m *PauseRequest) GetTimeout() int64
func (*PauseRequest) ProtoMessage ¶
func (*PauseRequest) ProtoMessage()
func (*PauseRequest) Reset ¶
func (m *PauseRequest) Reset()
func (*PauseRequest) String ¶
func (m *PauseRequest) String() string
func (*PauseRequest) XXX_DiscardUnknown ¶
func (m *PauseRequest) XXX_DiscardUnknown()
func (*PauseRequest) XXX_Marshal ¶
func (m *PauseRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*PauseRequest) XXX_Merge ¶
func (m *PauseRequest) XXX_Merge(src proto.Message)
func (*PauseRequest) XXX_Size ¶
func (m *PauseRequest) XXX_Size() int
func (*PauseRequest) XXX_Unmarshal ¶
func (m *PauseRequest) XXX_Unmarshal(b []byte) error
type PauseResponse ¶
type PauseResponse struct { CreatedAt *timestamp.Timestamp `protobuf:"bytes,1,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` ExpiresAt *timestamp.Timestamp `protobuf:"bytes,2,opt,name=expires_at,json=expiresAt,proto3" json:"expires_at,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` }
func (*PauseResponse) Descriptor ¶
func (*PauseResponse) Descriptor() ([]byte, []int)
func (*PauseResponse) GetCreatedAt ¶
func (m *PauseResponse) GetCreatedAt() *timestamp.Timestamp
func (*PauseResponse) GetExpiresAt ¶
func (m *PauseResponse) GetExpiresAt() *timestamp.Timestamp
func (*PauseResponse) ProtoMessage ¶
func (*PauseResponse) ProtoMessage()
func (*PauseResponse) Reset ¶
func (m *PauseResponse) Reset()
func (*PauseResponse) String ¶
func (m *PauseResponse) String() string
func (*PauseResponse) XXX_DiscardUnknown ¶
func (m *PauseResponse) XXX_DiscardUnknown()
func (*PauseResponse) XXX_Marshal ¶
func (m *PauseResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*PauseResponse) XXX_Merge ¶
func (m *PauseResponse) XXX_Merge(src proto.Message)
func (*PauseResponse) XXX_Size ¶
func (m *PauseResponse) XXX_Size() int
func (*PauseResponse) XXX_Unmarshal ¶
func (m *PauseResponse) XXX_Unmarshal(b []byte) error
type ResumeResponse ¶
type ResumeResponse struct { CreatedAt *timestamp.Timestamp `protobuf:"bytes,1,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` }
func (*ResumeResponse) Descriptor ¶
func (*ResumeResponse) Descriptor() ([]byte, []int)
func (*ResumeResponse) GetCreatedAt ¶
func (m *ResumeResponse) GetCreatedAt() *timestamp.Timestamp
func (*ResumeResponse) ProtoMessage ¶
func (*ResumeResponse) ProtoMessage()
func (*ResumeResponse) Reset ¶
func (m *ResumeResponse) Reset()
func (*ResumeResponse) String ¶
func (m *ResumeResponse) String() string
func (*ResumeResponse) XXX_DiscardUnknown ¶
func (m *ResumeResponse) XXX_DiscardUnknown()
func (*ResumeResponse) XXX_Marshal ¶
func (m *ResumeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*ResumeResponse) XXX_Merge ¶
func (m *ResumeResponse) XXX_Merge(src proto.Message)
func (*ResumeResponse) XXX_Size ¶
func (m *ResumeResponse) XXX_Size() int
func (*ResumeResponse) XXX_Unmarshal ¶
func (m *ResumeResponse) XXX_Unmarshal(b []byte) error
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server implements the hooks required to provide the failover interface
func (*Server) HealthCheck ¶
func (*Server) LoggingInterceptor ¶
func (s *Server) LoggingInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error)
LoggingInterceptor returns a UnaryServerInterceptor that logs all incoming requests, both at the start and at the end of their execution.
func (*Server) NewAuthenticationInterceptor ¶
func (s *Server) NewAuthenticationInterceptor(token string) func(context.Context, interface{}, *grpc.UnaryServerInfo, grpc.UnaryHandler) (interface{}, error)
NewAuthenticationInterceptor returns a UnaryServerInterceptor that validates the context token before accepting any requests.
func (*Server) Pause ¶
func (s *Server) Pause(ctx context.Context, req *PauseRequest) (resp *PauseResponse, err error)
type UnimplementedFailoverServer ¶
type UnimplementedFailoverServer struct { }
UnimplementedFailoverServer can be embedded to have forward compatible implementations.
func (*UnimplementedFailoverServer) HealthCheck ¶
func (*UnimplementedFailoverServer) HealthCheck(ctx context.Context, req *Empty) (*HealthCheckResponse, error)
func (*UnimplementedFailoverServer) Pause ¶
func (*UnimplementedFailoverServer) Pause(ctx context.Context, req *PauseRequest) (*PauseResponse, error)
func (*UnimplementedFailoverServer) Resume ¶
func (*UnimplementedFailoverServer) Resume(ctx context.Context, req *Empty) (*ResumeResponse, error)