Documentation ¶
Overview ¶
Package tabletmanager exports the ActionAgent object. It keeps the local tablet state, starts / stops all associated services (query service, update stream, binlog players, ...), and handles tabletmanager RPCs to update the state.
The agent is responsible for maintaining the tablet record in the topology server. Only 'vtctl DeleteTablet' should be run by other processes, everything else should ask the tablet server to make the change.
Most RPC calls lock the actionMutex, except the easy read-only ones. RPC calls that change the tablet record will also call updateState.
See rpc_server.go for all cases, and which actions take the actionMutex, and which run changeCallback.
Index ¶
- Constants
- Variables
- func ConfigHTML() template.HTML
- func RegisterBinlogPlayerMap(blm *BinlogPlayerMap)
- func SetReparentFlags(timeout time.Duration)
- type ActionAgent
- func NewActionAgent(batchCtx context.Context, mysqld mysqlctl.MysqlDaemon, ...) (agent *ActionAgent, err error)
- func NewComboActionAgent(batchCtx context.Context, ts topo.Server, tabletAlias *pb.TabletAlias, ...) *ActionAgent
- func NewTestActionAgent(batchCtx context.Context, ts topo.Server, tabletAlias *pb.TabletAlias, ...) *ActionAgent
- func (agent *ActionAgent) ApplySchema(ctx context.Context, change *myproto.SchemaChange) (*myproto.SchemaChangeResult, error)
- func (agent *ActionAgent) Backup(ctx context.Context, concurrency int, logger logutil.Logger) error
- func (agent *ActionAgent) BlacklistedTables() []string
- func (agent *ActionAgent) ChangeType(ctx context.Context, tabletType pb.TabletType) error
- func (agent *ActionAgent) DemoteMaster(ctx context.Context) (myproto.ReplicationPosition, error)
- func (agent *ActionAgent) DisableQueryService() bool
- func (agent *ActionAgent) ExecuteFetchAsApp(ctx context.Context, query string, maxrows int, wantFields bool) (*proto.QueryResult, error)
- func (agent *ActionAgent) ExecuteFetchAsDba(ctx context.Context, query string, dbName string, maxrows int, wantFields bool, ...) (*proto.QueryResult, error)
- func (agent *ActionAgent) ExecuteHook(ctx context.Context, hk *hook.Hook) *hook.HookResult
- func (agent *ActionAgent) GetPermissions(ctx context.Context) (*myproto.Permissions, error)
- func (agent *ActionAgent) GetSchema(ctx context.Context, tables, excludeTables []string, includeViews bool) (*myproto.SchemaDefinition, error)
- func (agent *ActionAgent) GetSlaves(ctx context.Context) ([]string, error)
- func (agent *ActionAgent) Healthy() (time.Duration, error)
- func (agent *ActionAgent) InitMaster(ctx context.Context) (myproto.ReplicationPosition, error)
- func (agent *ActionAgent) InitSlave(ctx context.Context, parent *pb.TabletAlias, ...) error
- func (agent *ActionAgent) InitTablet(port, gRPCPort int32) error
- func (agent *ActionAgent) IsRunningHealthCheck() bool
- func (agent *ActionAgent) MasterPosition(ctx context.Context) (myproto.ReplicationPosition, error)
- func (agent *ActionAgent) Ping(ctx context.Context, args string) string
- func (agent *ActionAgent) PopulateReparentJournal(ctx context.Context, timeCreatedNS int64, actionName string, ...) error
- func (agent *ActionAgent) PreflightSchema(ctx context.Context, change string) (*myproto.SchemaChangeResult, error)
- func (agent *ActionAgent) PromoteSlave(ctx context.Context) (myproto.ReplicationPosition, error)
- func (agent *ActionAgent) PromoteSlaveWhenCaughtUp(ctx context.Context, pos myproto.ReplicationPosition) (myproto.ReplicationPosition, error)
- func (agent *ActionAgent) RPCWrap(ctx context.Context, name string, args, reply interface{}, f func() error) error
- func (agent *ActionAgent) RPCWrapLock(ctx context.Context, name string, args, reply interface{}, verbose bool, ...) error
- func (agent *ActionAgent) RPCWrapLockAction(ctx context.Context, name string, args, reply interface{}, verbose bool, ...) error
- func (agent *ActionAgent) RefreshState(ctx context.Context)
- func (agent *ActionAgent) ReloadSchema(ctx context.Context)
- func (agent *ActionAgent) ResetReplication(ctx context.Context) error
- func (agent *ActionAgent) RestoreFromBackup(ctx context.Context) error
- func (agent *ActionAgent) RunBlpUntil(ctx context.Context, bpl *blproto.BlpPositionList, waitTime time.Duration) (*myproto.ReplicationPosition, error)
- func (agent *ActionAgent) RunHealthCheck(ctx context.Context, targetTabletType pb.TabletType)
- func (agent *ActionAgent) SetMaster(ctx context.Context, parent *pb.TabletAlias, timeCreatedNS int64, ...) error
- func (agent *ActionAgent) SetReadOnly(ctx context.Context, rdonly bool) error
- func (agent *ActionAgent) SlaveStatus(ctx context.Context) (myproto.ReplicationStatus, error)
- func (agent *ActionAgent) SlaveWasPromoted(ctx context.Context) error
- func (agent *ActionAgent) SlaveWasRestarted(ctx context.Context, swrd *actionnode.SlaveWasRestartedArgs) error
- func (agent *ActionAgent) Sleep(ctx context.Context, duration time.Duration)
- func (agent *ActionAgent) Start(ctx context.Context, mysqlPort, vtPort, gRPCPort int32, initUpdateStream bool) error
- func (agent *ActionAgent) StartBlp(ctx context.Context) error
- func (agent *ActionAgent) StartSlave(ctx context.Context) error
- func (agent *ActionAgent) Stop()
- func (agent *ActionAgent) StopBlp(ctx context.Context) (*blproto.BlpPositionList, error)
- func (agent *ActionAgent) StopReplicationAndGetStatus(ctx context.Context) (myproto.ReplicationStatus, error)
- func (agent *ActionAgent) StopSlave(ctx context.Context) error
- func (agent *ActionAgent) StopSlaveMinimum(ctx context.Context, position myproto.ReplicationPosition, ...) (myproto.ReplicationPosition, error)
- func (agent *ActionAgent) Tablet() *topo.TabletInfo
- func (agent *ActionAgent) TabletExternallyReparented(ctx context.Context, externalID string) error
- func (agent *ActionAgent) WaitBlpPosition(ctx context.Context, blpPosition *blproto.BlpPosition, waitTime time.Duration) error
- type BinlogPlayerController
- func (bpc *BinlogPlayerController) BlpPosition(vtClient *binlogplayer.DBClient) (*blproto.BlpPosition, string, error)
- func (bpc *BinlogPlayerController) Iteration() (err error)
- func (bpc *BinlogPlayerController) Loop()
- func (bpc *BinlogPlayerController) Start(ctx context.Context)
- func (bpc *BinlogPlayerController) StartUntil(ctx context.Context, stopPos myproto.ReplicationPosition) error
- func (bpc *BinlogPlayerController) Stop()
- func (bpc *BinlogPlayerController) String() string
- func (bpc *BinlogPlayerController) WaitForStop(waitTimeout time.Duration) error
- type BinlogPlayerControllerStatus
- type BinlogPlayerControllerStatusList
- type BinlogPlayerMap
- func (blm *BinlogPlayerMap) BlpPositionList() (*blproto.BlpPositionList, error)
- func (blm *BinlogPlayerMap) RefreshMap(ctx context.Context, tablet *pb.Tablet, keyspaceInfo *topo.KeyspaceInfo, ...)
- func (blm *BinlogPlayerMap) RunUntil(ctx context.Context, blpPositionList *blproto.BlpPositionList, ...) error
- func (blm *BinlogPlayerMap) Start(ctx context.Context)
- func (blm *BinlogPlayerMap) Status() *BinlogPlayerMapStatus
- func (blm *BinlogPlayerMap) StatusSummary() (maxSecondsBehindMaster int64, binlogPlayersCount int32)
- func (blm *BinlogPlayerMap) Stop()
- func (blm *BinlogPlayerMap) StopAllPlayersAndReset()
- type BinlogPlayerMapStatus
- type HealthRecord
- type RPCAgent
- type RegisterQueryService
Constants ¶
const ( // BpmStateRunning indicates BinlogPlayerMap is running. BpmStateRunning int64 = iota // BpmStateStopped indicates BinlogPlayerMap has stopped. BpmStateStopped )
Variables ¶
var RegisterQueryServices []RegisterQueryService
RegisterQueryServices is a list of functions to call when the delayed registration is triggered.
Functions ¶
func ConfigHTML ¶
ConfigHTML returns a formatted summary of health checking config values.
func RegisterBinlogPlayerMap ¶
func RegisterBinlogPlayerMap(blm *BinlogPlayerMap)
RegisterBinlogPlayerMap registers the varz for the players.
func SetReparentFlags ¶
SetReparentFlags changes flag values. It should only be used in tests.
Types ¶
type ActionAgent ¶
type ActionAgent struct { // The following fields are set during creation QueryServiceControl tabletserver.Controller UpdateStream binlog.UpdateStreamControl HealthReporter health.Reporter TopoServer topo.Server TabletAlias *pb.TabletAlias MysqlDaemon mysqlctl.MysqlDaemon DBConfigs dbconfigs.DBConfigs SchemaOverrides []tabletserver.SchemaOverride BinlogPlayerMap *BinlogPlayerMap LockTimeout time.Duration // This is the History of the health checks, public so status // pages can display it History *history.History // contains filtered or unexported fields }
ActionAgent is the main class for the agent.
func NewActionAgent ¶
func NewActionAgent( batchCtx context.Context, mysqld mysqlctl.MysqlDaemon, queryServiceControl tabletserver.Controller, tabletAlias *pb.TabletAlias, dbcfgs dbconfigs.DBConfigs, mycnf *mysqlctl.Mycnf, port, gRPCPort int32, overridesFile string, lockTimeout time.Duration, ) (agent *ActionAgent, err error)
NewActionAgent creates a new ActionAgent and registers all the associated services.
batchCtx is the context that the agent will use for any background tasks it spawns.
func NewComboActionAgent ¶
func NewComboActionAgent(batchCtx context.Context, ts topo.Server, tabletAlias *pb.TabletAlias, vtPort, grpcPort int32, queryServiceControl tabletserver.Controller, dbcfgs dbconfigs.DBConfigs, mysqlDaemon mysqlctl.MysqlDaemon, keyspace, shard, dbname, tabletType string) *ActionAgent
NewComboActionAgent creates an agent tailored specifically to run within the vtcombo binary. It cannot be called concurrently, as it changes the flags.
func NewTestActionAgent ¶
func NewTestActionAgent(batchCtx context.Context, ts topo.Server, tabletAlias *pb.TabletAlias, vtPort, grpcPort int32, mysqlDaemon mysqlctl.MysqlDaemon) *ActionAgent
NewTestActionAgent creates an agent for test purposes. Only a subset of features are supported now, but we'll add more over time.
func (*ActionAgent) ApplySchema ¶
func (agent *ActionAgent) ApplySchema(ctx context.Context, change *myproto.SchemaChange) (*myproto.SchemaChangeResult, error)
ApplySchema will apply a schema change Should be called under RPCWrapLockAction.
func (*ActionAgent) Backup ¶
Backup takes a db backup and sends it to the BackupStorage Should be called under RPCWrapLockAction.
func (*ActionAgent) BlacklistedTables ¶
func (agent *ActionAgent) BlacklistedTables() []string
BlacklistedTables reads the list of blacklisted tables from the TabletControl record (if any) stored in the agent, protected by mutex.
func (*ActionAgent) ChangeType ¶
func (agent *ActionAgent) ChangeType(ctx context.Context, tabletType pb.TabletType) error
ChangeType changes the tablet type Should be called under RPCWrapLockAction.
func (*ActionAgent) DemoteMaster ¶
func (agent *ActionAgent) DemoteMaster(ctx context.Context) (myproto.ReplicationPosition, error)
DemoteMaster marks the server read-only, wait until it is done with its current transactions, and returns its master position. Should be called under RPCWrapLockAction.
func (*ActionAgent) DisableQueryService ¶
func (agent *ActionAgent) DisableQueryService() bool
DisableQueryService reads the DisableQueryService field from the TabletControl record (if any) stored in the agent, protected by mutex.
func (*ActionAgent) ExecuteFetchAsApp ¶
func (agent *ActionAgent) ExecuteFetchAsApp(ctx context.Context, query string, maxrows int, wantFields bool) (*proto.QueryResult, error)
ExecuteFetchAsApp will execute the given query, possibly disabling binlogs. Should be called under RPCWrap.
func (*ActionAgent) ExecuteFetchAsDba ¶
func (agent *ActionAgent) ExecuteFetchAsDba(ctx context.Context, query string, dbName string, maxrows int, wantFields bool, disableBinlogs bool, reloadSchema bool) (*proto.QueryResult, error)
ExecuteFetchAsDba will execute the given query, possibly disabling binlogs and reload schema. Should be called under RPCWrap.
func (*ActionAgent) ExecuteHook ¶
func (agent *ActionAgent) ExecuteHook(ctx context.Context, hk *hook.Hook) *hook.HookResult
ExecuteHook executes the provided hook locally, and returns the result. Should be called under RPCWrapLockAction.
func (*ActionAgent) GetPermissions ¶
func (agent *ActionAgent) GetPermissions(ctx context.Context) (*myproto.Permissions, error)
GetPermissions returns the db permissions. Should be called under RPCWrap.
func (*ActionAgent) GetSchema ¶
func (agent *ActionAgent) GetSchema(ctx context.Context, tables, excludeTables []string, includeViews bool) (*myproto.SchemaDefinition, error)
GetSchema returns the schema. Should be called under RPCWrap.
func (*ActionAgent) GetSlaves ¶
func (agent *ActionAgent) GetSlaves(ctx context.Context) ([]string, error)
GetSlaves returns the address of all the slaves Should be called under RPCWrap.
func (*ActionAgent) Healthy ¶
func (agent *ActionAgent) Healthy() (time.Duration, error)
Healthy reads the result of the latest healthcheck, protected by mutex. If that status is too old, it means healthcheck hasn't run for a while, and is probably stuck, this is not good, we're not healthy.
func (*ActionAgent) InitMaster ¶
func (agent *ActionAgent) InitMaster(ctx context.Context) (myproto.ReplicationPosition, error)
InitMaster breaks slaves replication, get the current MySQL replication position, insert a row in the reparent_journal table, and returns the replication position
func (*ActionAgent) InitSlave ¶
func (agent *ActionAgent) InitSlave(ctx context.Context, parent *pb.TabletAlias, replicationPosition myproto.ReplicationPosition, timeCreatedNS int64) error
InitSlave sets replication master and position, and waits for the reparent_journal table entry up to context timeout
func (*ActionAgent) InitTablet ¶
func (agent *ActionAgent) InitTablet(port, gRPCPort int32) error
InitTablet initializes the tablet record if necessary.
func (*ActionAgent) IsRunningHealthCheck ¶
func (agent *ActionAgent) IsRunningHealthCheck() bool
IsRunningHealthCheck indicates if the agent is configured to run healthchecks.
func (*ActionAgent) MasterPosition ¶
func (agent *ActionAgent) MasterPosition(ctx context.Context) (myproto.ReplicationPosition, error)
MasterPosition returns the master position Should be called under RPCWrap.
func (*ActionAgent) Ping ¶
func (agent *ActionAgent) Ping(ctx context.Context, args string) string
Ping makes sure RPCs work, and refreshes the tablet record. Should be called under RPCWrap.
func (*ActionAgent) PopulateReparentJournal ¶
func (agent *ActionAgent) PopulateReparentJournal(ctx context.Context, timeCreatedNS int64, actionName string, masterAlias *pb.TabletAlias, pos myproto.ReplicationPosition) error
PopulateReparentJournal adds an entry into the reparent_journal table.
func (*ActionAgent) PreflightSchema ¶
func (agent *ActionAgent) PreflightSchema(ctx context.Context, change string) (*myproto.SchemaChangeResult, error)
PreflightSchema will try out the schema change Should be called under RPCWrapLockAction.
func (*ActionAgent) PromoteSlave ¶
func (agent *ActionAgent) PromoteSlave(ctx context.Context) (myproto.ReplicationPosition, error)
PromoteSlave makes the current tablet the master
func (*ActionAgent) PromoteSlaveWhenCaughtUp ¶
func (agent *ActionAgent) PromoteSlaveWhenCaughtUp(ctx context.Context, pos myproto.ReplicationPosition) (myproto.ReplicationPosition, error)
PromoteSlaveWhenCaughtUp waits for this slave to be caught up on replication up to the provided point, and then makes the slave the shard master.
func (*ActionAgent) RPCWrap ¶
func (agent *ActionAgent) RPCWrap(ctx context.Context, name string, args, reply interface{}, f func() error) error
RPCWrap is for read-only actions that can be executed concurrently. verbose is forced to false.
func (*ActionAgent) RPCWrapLock ¶
func (agent *ActionAgent) RPCWrapLock(ctx context.Context, name string, args, reply interface{}, verbose bool, f func() error) error
RPCWrapLock is for actions that should not run concurrently with each other.
func (*ActionAgent) RPCWrapLockAction ¶
func (agent *ActionAgent) RPCWrapLockAction(ctx context.Context, name string, args, reply interface{}, verbose bool, f func() error) error
RPCWrapLockAction is the same as RPCWrapLock, plus it will call refreshTablet after the action returns.
func (*ActionAgent) RefreshState ¶
func (agent *ActionAgent) RefreshState(ctx context.Context)
RefreshState reload the tablet record from the topo server. Should be called under RPCWrapLockAction, so it actually works.
func (*ActionAgent) ReloadSchema ¶
func (agent *ActionAgent) ReloadSchema(ctx context.Context)
ReloadSchema will reload the schema Should be called under RPCWrapLockAction.
func (*ActionAgent) ResetReplication ¶
func (agent *ActionAgent) ResetReplication(ctx context.Context) error
ResetReplication completely resets the replication on the host. All binary and relay logs are flushed. All replication positions are reset.
func (*ActionAgent) RestoreFromBackup ¶
func (agent *ActionAgent) RestoreFromBackup(ctx context.Context) error
RestoreFromBackup is the main entry point for backup restore. It will either work, fail gracefully, or return an error in case of a non-recoverable error. It takes the action lock so no RPC interferes.
func (*ActionAgent) RunBlpUntil ¶
func (agent *ActionAgent) RunBlpUntil(ctx context.Context, bpl *blproto.BlpPositionList, waitTime time.Duration) (*myproto.ReplicationPosition, error)
RunBlpUntil runs the binlog player server until the position is reached, and returns the current mysql master replication position.
func (*ActionAgent) RunHealthCheck ¶
func (agent *ActionAgent) RunHealthCheck(ctx context.Context, targetTabletType pb.TabletType)
RunHealthCheck will manually run the health check on the tablet Should be called under RPCWrap.
func (*ActionAgent) SetMaster ¶
func (agent *ActionAgent) SetMaster(ctx context.Context, parent *pb.TabletAlias, timeCreatedNS int64, forceStartSlave bool) error
SetMaster sets replication master, and waits for the reparent_journal table entry up to context timeout
func (*ActionAgent) SetReadOnly ¶
func (agent *ActionAgent) SetReadOnly(ctx context.Context, rdonly bool) error
SetReadOnly makes the mysql instance read-only or read-write Should be called under RPCWrapLockAction.
func (*ActionAgent) SlaveStatus ¶
func (agent *ActionAgent) SlaveStatus(ctx context.Context) (myproto.ReplicationStatus, error)
SlaveStatus returns the replication status Should be called under RPCWrap.
func (*ActionAgent) SlaveWasPromoted ¶
func (agent *ActionAgent) SlaveWasPromoted(ctx context.Context) error
SlaveWasPromoted promotes a slave to master, no questions asked. Should be called under RPCWrapLockAction.
func (*ActionAgent) SlaveWasRestarted ¶
func (agent *ActionAgent) SlaveWasRestarted(ctx context.Context, swrd *actionnode.SlaveWasRestartedArgs) error
SlaveWasRestarted updates the parent record for a tablet. Should be called under RPCWrapLockAction.
func (*ActionAgent) Sleep ¶
func (agent *ActionAgent) Sleep(ctx context.Context, duration time.Duration)
Sleep sleeps for the duration Should be called under RPCWrapLockAction.
func (*ActionAgent) Start ¶
func (agent *ActionAgent) Start(ctx context.Context, mysqlPort, vtPort, gRPCPort int32, initUpdateStream bool) error
Start validates and updates the topology records for the tablet, and performs the initial state change callback to start tablet services. If initUpdateStream is set, update stream service will also be registered.
func (*ActionAgent) StartBlp ¶
func (agent *ActionAgent) StartBlp(ctx context.Context) error
StartBlp starts the binlog players Should be called under RPCWrapLockAction.
func (*ActionAgent) StartSlave ¶
func (agent *ActionAgent) StartSlave(ctx context.Context) error
StartSlave will start the replication. Works both when Vitess manages replication or not (using hook if not). Should be called under RPCWrapLock.
func (*ActionAgent) StopBlp ¶
func (agent *ActionAgent) StopBlp(ctx context.Context) (*blproto.BlpPositionList, error)
StopBlp stops the binlog players, and return their positions. Should be called under RPCWrapLockAction.
func (*ActionAgent) StopReplicationAndGetStatus ¶
func (agent *ActionAgent) StopReplicationAndGetStatus(ctx context.Context) (myproto.ReplicationStatus, error)
StopReplicationAndGetStatus stops MySQL replication, and returns the current status
func (*ActionAgent) StopSlave ¶
func (agent *ActionAgent) StopSlave(ctx context.Context) error
StopSlave will stop the replication. Works both when Vitess manages replication or not (using hook if not). Should be called under RPCWrapLock.
func (*ActionAgent) StopSlaveMinimum ¶
func (agent *ActionAgent) StopSlaveMinimum(ctx context.Context, position myproto.ReplicationPosition, waitTime time.Duration) (myproto.ReplicationPosition, error)
StopSlaveMinimum will stop the slave after it reaches at least the provided position. Works both when Vitess manages replication or not (using hook if not).
func (*ActionAgent) Tablet ¶
func (agent *ActionAgent) Tablet() *topo.TabletInfo
Tablet reads the stored TabletInfo from the agent, protected by mutex.
func (*ActionAgent) TabletExternallyReparented ¶
func (agent *ActionAgent) TabletExternallyReparented(ctx context.Context, externalID string) error
TabletExternallyReparented updates all topo records so the current tablet is the new master for this shard. Should be called under RPCWrapLock.
func (*ActionAgent) WaitBlpPosition ¶
func (agent *ActionAgent) WaitBlpPosition(ctx context.Context, blpPosition *blproto.BlpPosition, waitTime time.Duration) error
WaitBlpPosition waits until a specific filtered replication position is reached. Should be called under RPCWrapLock.
type BinlogPlayerController ¶
type BinlogPlayerController struct {
// contains filtered or unexported fields
}
BinlogPlayerController controls one player.
func (*BinlogPlayerController) BlpPosition ¶
func (bpc *BinlogPlayerController) BlpPosition(vtClient *binlogplayer.DBClient) (*blproto.BlpPosition, string, error)
BlpPosition returns the current position for a controller, as read from the database.
func (*BinlogPlayerController) Iteration ¶
func (bpc *BinlogPlayerController) Iteration() (err error)
Iteration is a single iteration for the player: get the current status, try to play, and plays until interrupted, or until an error occurs.
func (*BinlogPlayerController) Loop ¶
func (bpc *BinlogPlayerController) Loop()
Loop runs the main player loop: try to play, and in case of error, sleep for 5 seconds and try again.
func (*BinlogPlayerController) Start ¶
func (bpc *BinlogPlayerController) Start(ctx context.Context)
Start will start the player in the background and run forever.
func (*BinlogPlayerController) StartUntil ¶
func (bpc *BinlogPlayerController) StartUntil(ctx context.Context, stopPos myproto.ReplicationPosition) error
StartUntil will start the Player until we reach the given position.
func (*BinlogPlayerController) Stop ¶
func (bpc *BinlogPlayerController) Stop()
Stop will ask the controller to stop playing, and wait until it is stopped.
func (*BinlogPlayerController) String ¶
func (bpc *BinlogPlayerController) String() string
func (*BinlogPlayerController) WaitForStop ¶
func (bpc *BinlogPlayerController) WaitForStop(waitTimeout time.Duration) error
WaitForStop will wait until the player is stopped. Use this after StartUntil.
type BinlogPlayerControllerStatus ¶
type BinlogPlayerControllerStatus struct { // configuration values Index uint32 SourceShard *pb.Shard_SourceShard StopPosition myproto.ReplicationPosition // stats and current values LastPosition myproto.ReplicationPosition SecondsBehindMaster int64 Counts map[string]int64 Rates map[string][]float64 State string SourceTablet *pb.TabletAlias LastError string }
BinlogPlayerControllerStatus is the status of an individual controller.
func (*BinlogPlayerControllerStatus) SourceShardAsHTML ¶
func (bpcs *BinlogPlayerControllerStatus) SourceShardAsHTML() template.HTML
SourceShardAsHTML returns the SourceShard as HTML
func (*BinlogPlayerControllerStatus) SourceTabletAlias ¶
func (bpcs *BinlogPlayerControllerStatus) SourceTabletAlias() string
SourceTabletAlias returns the string version of the SourceTablet alias, if set
type BinlogPlayerControllerStatusList ¶
type BinlogPlayerControllerStatusList []*BinlogPlayerControllerStatus
BinlogPlayerControllerStatusList is the list of statuses.
func (BinlogPlayerControllerStatusList) Len ¶
func (bpcsl BinlogPlayerControllerStatusList) Len() int
Len is part of sort.Interface.
func (BinlogPlayerControllerStatusList) Less ¶
func (bpcsl BinlogPlayerControllerStatusList) Less(i, j int) bool
Less is part of sort.Interface.
func (BinlogPlayerControllerStatusList) Swap ¶
func (bpcsl BinlogPlayerControllerStatusList) Swap(i, j int)
Swap is part of sort.Interface.
type BinlogPlayerMap ¶
type BinlogPlayerMap struct {
// contains filtered or unexported fields
}
BinlogPlayerMap controls all the players. It can be stopped and restarted.
func NewBinlogPlayerMap ¶
func NewBinlogPlayerMap(ts topo.Server, dbConfig *sqldb.ConnParams, mysqld mysqlctl.MysqlDaemon) *BinlogPlayerMap
NewBinlogPlayerMap creates a new map of players.
func (*BinlogPlayerMap) BlpPositionList ¶
func (blm *BinlogPlayerMap) BlpPositionList() (*blproto.BlpPositionList, error)
BlpPositionList returns the current position of all the players.
func (*BinlogPlayerMap) RefreshMap ¶
func (blm *BinlogPlayerMap) RefreshMap(ctx context.Context, tablet *pb.Tablet, keyspaceInfo *topo.KeyspaceInfo, shardInfo *topo.ShardInfo)
RefreshMap reads the right data from topo.Server and makes sure we're playing the right logs.
func (*BinlogPlayerMap) RunUntil ¶
func (blm *BinlogPlayerMap) RunUntil(ctx context.Context, blpPositionList *blproto.BlpPositionList, waitTimeout time.Duration) error
RunUntil will run all the players until they reach the given position. Holds the map lock during that exercise, shouldn't take long at all.
func (*BinlogPlayerMap) Start ¶
func (blm *BinlogPlayerMap) Start(ctx context.Context)
Start restarts the current players.
func (*BinlogPlayerMap) Status ¶
func (blm *BinlogPlayerMap) Status() *BinlogPlayerMapStatus
Status returns the BinlogPlayerMapStatus for the BinlogPlayerMap. It is used to display the complete status in the webinterface.
func (*BinlogPlayerMap) StatusSummary ¶
func (blm *BinlogPlayerMap) StatusSummary() (maxSecondsBehindMaster int64, binlogPlayersCount int32)
StatusSummary returns aggregated health information e.g. the maximum replication delay across all binlog players. It is used by the QueryService.StreamHealth RPC.
func (*BinlogPlayerMap) Stop ¶
func (blm *BinlogPlayerMap) Stop()
Stop stops the current players, but does not remove them from the map. Call 'Start' to restart the playback.
func (*BinlogPlayerMap) StopAllPlayersAndReset ¶
func (blm *BinlogPlayerMap) StopAllPlayersAndReset()
StopAllPlayersAndReset stops all the binlog players, and reset the map of players.
type BinlogPlayerMapStatus ¶
type BinlogPlayerMapStatus struct { State string Controllers BinlogPlayerControllerStatusList }
BinlogPlayerMapStatus is the complete player status.
type HealthRecord ¶
HealthRecord records one run of the health checker
func (*HealthRecord) Class ¶
func (r *HealthRecord) Class() string
Class returns a human-readable one word version of the health state.
func (*HealthRecord) HTML ¶
func (r *HealthRecord) HTML() template.HTML
HTML returns a html version to be displayed on UIs
func (*HealthRecord) IsDuplicate ¶
func (r *HealthRecord) IsDuplicate(other interface{}) bool
IsDuplicate implements history.Deduplicable
type RPCAgent ¶
type RPCAgent interface { Ping(ctx context.Context, args string) string GetSchema(ctx context.Context, tables, excludeTables []string, includeViews bool) (*myproto.SchemaDefinition, error) GetPermissions(ctx context.Context) (*myproto.Permissions, error) SetReadOnly(ctx context.Context, rdonly bool) error ChangeType(ctx context.Context, tabletType pb.TabletType) error Sleep(ctx context.Context, duration time.Duration) ExecuteHook(ctx context.Context, hk *hook.Hook) *hook.HookResult RefreshState(ctx context.Context) RunHealthCheck(ctx context.Context, targetTabletType pb.TabletType) ReloadSchema(ctx context.Context) PreflightSchema(ctx context.Context, change string) (*myproto.SchemaChangeResult, error) ApplySchema(ctx context.Context, change *myproto.SchemaChange) (*myproto.SchemaChangeResult, error) ExecuteFetchAsDba(ctx context.Context, query string, dbName string, maxrows int, wantFields, disableBinlogs bool, reloadSchema bool) (*proto.QueryResult, error) ExecuteFetchAsApp(ctx context.Context, query string, maxrows int, wantFields bool) (*proto.QueryResult, error) SlaveStatus(ctx context.Context) (myproto.ReplicationStatus, error) MasterPosition(ctx context.Context) (myproto.ReplicationPosition, error) StopSlave(ctx context.Context) error StopSlaveMinimum(ctx context.Context, position myproto.ReplicationPosition, waitTime time.Duration) (myproto.ReplicationPosition, error) StartSlave(ctx context.Context) error TabletExternallyReparented(ctx context.Context, externalID string) error GetSlaves(ctx context.Context) ([]string, error) WaitBlpPosition(ctx context.Context, blpPosition *blproto.BlpPosition, waitTime time.Duration) error StopBlp(ctx context.Context) (*blproto.BlpPositionList, error) StartBlp(ctx context.Context) error RunBlpUntil(ctx context.Context, bpl *blproto.BlpPositionList, waitTime time.Duration) (*myproto.ReplicationPosition, error) ResetReplication(ctx context.Context) error InitMaster(ctx context.Context) (myproto.ReplicationPosition, error) PopulateReparentJournal(ctx context.Context, timeCreatedNS int64, actionName string, masterAlias *pb.TabletAlias, pos myproto.ReplicationPosition) error InitSlave(ctx context.Context, parent *pb.TabletAlias, replicationPosition myproto.ReplicationPosition, timeCreatedNS int64) error DemoteMaster(ctx context.Context) (myproto.ReplicationPosition, error) PromoteSlaveWhenCaughtUp(ctx context.Context, replicationPosition myproto.ReplicationPosition) (myproto.ReplicationPosition, error) SlaveWasPromoted(ctx context.Context) error SetMaster(ctx context.Context, parent *pb.TabletAlias, timeCreatedNS int64, forceStartSlave bool) error SlaveWasRestarted(ctx context.Context, swrd *actionnode.SlaveWasRestartedArgs) error StopReplicationAndGetStatus(ctx context.Context) (myproto.ReplicationStatus, error) PromoteSlave(ctx context.Context) (myproto.ReplicationPosition, error) Backup(ctx context.Context, concurrency int, logger logutil.Logger) error // RPC helpers RPCWrap(ctx context.Context, name string, args, reply interface{}, f func() error) error RPCWrapLock(ctx context.Context, name string, args, reply interface{}, verbose bool, f func() error) error RPCWrapLockAction(ctx context.Context, name string, args, reply interface{}, verbose bool, f func() error) error }
RPCAgent defines the interface implemented by the Agent for RPCs. It is useful for RPC implementations to test their full stack.
type RegisterQueryService ¶
type RegisterQueryService func(*ActionAgent)
RegisterQueryService is used to delay registration of RPC servers until we have all the objects.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package events contains event structs used by the tabletmanager package.
|
Package events contains event structs used by the tabletmanager package. |