logic

package
v2.0.2+incompatible Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 9, 2017 License: Apache-2.0 Imports: 23 Imported by: 0

Documentation

Index

Constants

View Source
const (
	MasterRecoveryGTID         MasterRecoveryType = "MasterRecoveryGTID"
	MasterRecoveryPseudoGTID                      = "MasterRecoveryPseudoGTID"
	MasterRecoveryBinlogServer                    = "MasterRecoveryBinlogServer"
	MasterRecoveryRemoteSSH                       = "MasterRecoveryRemoteSSH"
)

Variables

This section is empty.

Functions

func AcknowledgeClusterRecoveries

func AcknowledgeClusterRecoveries(clusterName string, owner string, comment string) (countAcknowledgedEntries int64, err error)

AcknowledgeClusterRecoveries marks active recoveries for given cluster as acknowledged. This also implied clearing their active period, which in turn enables further recoveries on those topologies

func AcknowledgeCrashedRecoveries

func AcknowledgeCrashedRecoveries() (countAcknowledgedEntries int64, err error)

AcknowledgeCrashedRecoveries marks recoveries whose processing nodes has crashed as acknowledged.

func AcknowledgeInstanceCompletedRecoveries

func AcknowledgeInstanceCompletedRecoveries(instanceKey *inst.InstanceKey, owner string, comment string) (countAcknowledgedEntries int64, err error)

AcknowledgeInstanceCompletedRecoveries marks active and COMPLETED recoveries for given instane as acknowledged. This also implied clearing their active period, which in turn enables further recoveries on those topologies

func AcknowledgeInstanceRecoveries

func AcknowledgeInstanceRecoveries(instanceKey *inst.InstanceKey, owner string, comment string) (countAcknowledgedEntries int64, err error)

AcknowledgeInstanceRecoveries marks active recoveries for given instane as acknowledged. This also implied clearing their active period, which in turn enables further recoveries on those topologies

func AcknowledgeRecovery

func AcknowledgeRecovery(recoveryId int64, owner string, comment string) (countAcknowledgedEntries int64, err error)

AcknowledgeRecovery acknowledges a particular recovery. This also implied clearing their active period, which in turn enables further recoveries on those topologies

func AttemptFailureDetectionRegistration

func AttemptFailureDetectionRegistration(analysisEntry *inst.ReplicationAnalysis) (bool, error)

AttemptFailureDetectionRegistration tries to add a failure-detection entry; if this fails that means the problem has already been detected

func BeginAsyncRequest

func BeginAsyncRequest(asyncRequest *AsyncRequest) (bool, error)

func CheckAndRecover

func CheckAndRecover(specificInstance *inst.InstanceKey, candidateInstanceKey *inst.InstanceKey, skipProcesses bool) (recoveryAttempted bool, promotedReplicaKey *inst.InstanceKey, err error)

CheckAndRecover is the main entry point for the recovery mechanism

func ClearActiveFailureDetections

func ClearActiveFailureDetections() error

ClearActiveFailureDetections clears the "in_active_period" flag for old-enough detections, thereby allowing for further detections on cleared instances.

func ClearActiveRecoveries

func ClearActiveRecoveries() error

ClearActiveRecoveries clears the "in_active_period" flag for old-enough recoveries, thereby allowing for further recoveries on cleared instances.

func ContinuousAgentsPoll

func ContinuousAgentsPoll()

ContinuousAgentsPoll starts an asynchronuous infinite process where agents are periodically investigated and their status captured, and long since unseen agents are purged and forgotten.

func ContinuousDiscovery

func ContinuousDiscovery()

ContinuousDiscovery starts an asynchronuous infinite discovery process where instances are periodically investigated and their status captured, and long since unseen instances are purged and forgotten.

func DisableRecovery

func DisableRecovery() error

DisableRecovery ensures recoveries are disabled globally

func EnableRecovery

func EnableRecovery() error

EnableRecovery ensures recoveries are enabled globally

func ExpireAsyncRequests

func ExpireAsyncRequests() error

ExpireAsyncRequests will mark "lost" entries as being completed

func ExpireBlockedRecoveries

func ExpireBlockedRecoveries() error

ExpireBlockedRecoveries clears listing of blocked recoveries that are no longer actually blocked.

func GetBestMasterReplacementFromAmongItsReplicas

func GetBestMasterReplacementFromAmongItsReplicas(master *inst.Instance, replicas [](*inst.Instance), requireLogSlaveUpdates bool) (replacement *inst.Instance, err error)

func GetCandidateSiblingOfIntermediateMaster

func GetCandidateSiblingOfIntermediateMaster(intermediateMasterInstance *inst.Instance) (*inst.Instance, error)

GetCandidateSiblingOfIntermediateMaster chooses the best sibling of a dead intermediate master to whom the IM's replicas can be moved.

func IsRecoveryDisabled

func IsRecoveryDisabled() (bool, error)

IsRecoveryDisabled returns true if Recoveries are disabled globally

func RecoverDeadCoMaster

func RecoverDeadCoMaster(topologyRecovery *TopologyRecovery, skipProcesses bool) (promotedReplica *inst.Instance, lostReplicas [](*inst.Instance), err error)

RecoverDeadCoMaster recovers a dead co-master, complete logic inside

func RecoverDeadIntermediateMaster

func RecoverDeadIntermediateMaster(topologyRecovery *TopologyRecovery, skipProcesses bool) (successorInstance *inst.Instance, err error)

RecoverDeadIntermediateMaster performs intermediate master recovery; complete logic inside

func RecoverDeadMaster

func RecoverDeadMaster(topologyRecovery *TopologyRecovery, skipProcesses bool) (promotedReplica *inst.Instance, lostReplicas [](*inst.Instance), err error)

RecoverDeadMaster recovers a dead master, complete logic inside

func RegisterBlockedRecoveries

func RegisterBlockedRecoveries(analysisEntry *inst.ReplicationAnalysis, blockingRecoveries []TopologyRecovery) error

RegisterBlockedRecoveries writes down currently blocked recoveries, and indicates what recovery they are blocked on. Recoveries are blocked thru the in_active_period flag, which comes to avoid flapping.

func ResolveRecovery

func ResolveRecovery(topologyRecovery *TopologyRecovery, successorInstance *inst.Instance) error

ResolveRecovery is called on completion of a recovery process and updates the recovery status. It does not clear the "active period" as this still takes place in order to avoid flapping.

func WriteAsyncRequest

func WriteAsyncRequest(asyncRequest *AsyncRequest) error

WriteAsyncRequest

Types

type AsyncRequest

type AsyncRequest struct {
	Id                  int64
	Story               string
	Command             string
	OperatedInstanceKey *inst.InstanceKey
	DestinationKey      *inst.InstanceKey
	Pattern             string
	GTIDHint            inst.OperationGTIDHint
}

AsyncRequest represents an entry in the async_request table

func NewAsyncRequest

func NewAsyncRequest(story string, command string, instanceKey *inst.InstanceKey, destinationKey *inst.InstanceKey, pattern string, gtidHint inst.OperationGTIDHint) *AsyncRequest

func NewEmptyAsyncRequest

func NewEmptyAsyncRequest() *AsyncRequest

func NewSimpleAsyncRequest

func NewSimpleAsyncRequest(story string, command string, instanceKey *inst.InstanceKey) *AsyncRequest

func ReadPendingAsyncRequests

func ReadPendingAsyncRequests(limit int) (res [](*AsyncRequest), err error)

type BlockedTopologyRecovery

type BlockedTopologyRecovery struct {
	FailedInstanceKey    inst.InstanceKey
	ClusterName          string
	Analysis             inst.AnalysisCode
	LastBlockedTimestamp string
	BlockingRecoveryId   int64
}

BlockedTopologyRecovery represents an entry in the blocked_topology_recovery table

func ReadBlockedRecoveries

func ReadBlockedRecoveries(clusterName string) ([]BlockedTopologyRecovery, error)

ReadBlockedRecoveries reads blocked recovery entries, potentially filtered by cluster name (empty to unfilter)

type InstancesByCountReplicas

type InstancesByCountReplicas [](*inst.Instance)

InstancesByCountReplicas sorts instances by umber of replicas, descending

func (InstancesByCountReplicas) Len

func (this InstancesByCountReplicas) Len() int

func (InstancesByCountReplicas) Less

func (this InstancesByCountReplicas) Less(i, j int) bool

func (InstancesByCountReplicas) Swap

func (this InstancesByCountReplicas) Swap(i, j int)

type MasterRecoveryType

type MasterRecoveryType string

type TopologyRecovery

type TopologyRecovery struct {
	inst.PostponedFunctionsContainer

	Id                        int64
	AnalysisEntry             inst.ReplicationAnalysis
	SuccessorKey              *inst.InstanceKey
	SuccessorAlias            string
	IsActive                  bool
	IsSuccessful              bool
	LostReplicas              inst.InstanceKeyMap
	ParticipatingInstanceKeys inst.InstanceKeyMap
	AllErrors                 []string
	RecoveryStartTimestamp    string
	RecoveryEndTimestamp      string
	ProcessingNodeHostname    string
	ProcessingNodeToken       string
	PostponedFunctions        [](func() error)
	Acknowledged              bool
	AcknowledgedAt            string
	AcknowledgedBy            string
	AcknowledgedComment       string
	LastDetectionId           int64
	RelatedRecoveryId         int64
}

TopologyRecovery represents an entry in the topology_recovery table

func AttemptRecoveryRegistration

func AttemptRecoveryRegistration(analysisEntry *inst.ReplicationAnalysis, failIfFailedInstanceInActiveRecovery bool, failIfClusterInActiveRecovery bool) (*TopologyRecovery, error)

AttemptRecoveryRegistration tries to add a recovery entry; if this fails that means recovery is already in place.

func ForceExecuteRecovery

func ForceExecuteRecovery(clusterName string, analysisCode inst.AnalysisCode, failedInstanceKey *inst.InstanceKey, candidateInstanceKey *inst.InstanceKey, skipProcesses bool) (recoveryAttempted bool, topologyRecovery *TopologyRecovery, err error)

ForceExecuteRecovery can be called to issue a recovery process even if analysis says there is no recovery case. The caller of this function injects the type of analysis it wishes the function to assume. By calling this function one takes responsibility for one's actions.

func ForceMasterTakeover

func ForceMasterTakeover(clusterName string, destination *inst.Instance) (topologyRecovery *TopologyRecovery, err error)

ForceMasterTakeover *trusts* master of given cluster is dead and fails over to designated instance, which has to be its direct child.

func GracefulMasterTakeover

func GracefulMasterTakeover(clusterName string) (topologyRecovery *TopologyRecovery, promotedMasterCoordinates *inst.BinlogCoordinates, err error)

GracefulMasterTakeover will demote master of existing topology and promote its direct replica instead. It expects that replica to have no siblings. This function is graceful in that it will first lock down the master, then wait for the designated replica to catch up with last position. It will point old master at the newly promoted master at the correct coordinates, but will not start replication.

func NewTopologyRecovery

func NewTopologyRecovery(replicationAnalysis inst.ReplicationAnalysis) *TopologyRecovery

func ReadActiveClusterRecovery

func ReadActiveClusterRecovery(clusterName string) ([]TopologyRecovery, error)

ReadActiveRecoveries reads active recovery entry/audit entires from topology_recovery

func ReadActiveRecoveries

func ReadActiveRecoveries() ([]TopologyRecovery, error)

ReadActiveRecoveries reads active recovery entry/audit entires from topology_recovery

func ReadCompletedRecoveries

func ReadCompletedRecoveries(page int) ([]TopologyRecovery, error)

ReadCompletedRecoveries reads completed recovery entry/audit entires from topology_recovery

func ReadFailureDetection

func ReadFailureDetection(detectionId int64) ([]TopologyRecovery, error)

ReadFailureDetection

func ReadInActivePeriodClusterRecovery

func ReadInActivePeriodClusterRecovery(clusterName string) ([]TopologyRecovery, error)

ReadInActivePeriodClusterRecovery reads recoveries (possibly complete!) that are in active period. (may be used to block further recoveries on this cluster)

func ReadInActivePeriodSuccessorInstanceRecovery

func ReadInActivePeriodSuccessorInstanceRecovery(instanceKey *inst.InstanceKey) ([]TopologyRecovery, error)

ReadInActivePeriodSuccessorInstanceRecovery reads completed recoveries for a given instance, where said instance was promoted as result, still in active period (may be used to block further recoveries should this instance die)

func ReadRecentFailureDetections

func ReadRecentFailureDetections(page int) ([]TopologyRecovery, error)

ReadRecentFailureDetections

func ReadRecentRecoveries

func ReadRecentRecoveries(clusterName string, unacknowledgedOnly bool, page int) ([]TopologyRecovery, error)

ReadCRecoveries reads latest recovery entries from topology_recovery

func ReadRecentlyActiveClusterRecovery

func ReadRecentlyActiveClusterRecovery(clusterName string) ([]TopologyRecovery, error)

ReadRecentlyActiveClusterRecovery reads recently completed entries for a given cluster

func ReadRecentlyActiveInstanceRecovery

func ReadRecentlyActiveInstanceRecovery(instanceKey *inst.InstanceKey) ([]TopologyRecovery, error)

ReadRecentlyActiveInstanceRecovery reads recently completed entries for a given instance

func ReadRecovery

func ReadRecovery(recoveryId int64) ([]TopologyRecovery, error)

ReadRecovery reads completed recovery entry/audit entires from topology_recovery

func (*TopologyRecovery) AddError

func (this *TopologyRecovery) AddError(err error) error

func (*TopologyRecovery) AddErrors

func (this *TopologyRecovery) AddErrors(errs []error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL