tmclient

package
v0.15.1 Latest Latest
Warning

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

Go to latest
Published: Nov 29, 2022 License: Apache-2.0 Imports: 12 Imported by: 19

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func RegisterFlags added in v0.15.0

func RegisterFlags(fs *pflag.FlagSet)

RegisterFlags registers the tabletconn flags on a given flagset. It is exported for tests that need to inject a particular TabletManagerProtocol.

func RegisterTabletManagerClientFactory

func RegisterTabletManagerClientFactory(name string, factory TabletManagerClientFactory)

RegisterTabletManagerClientFactory allows modules to register TabletManagerClient implementations. Should be called on init().

Types

type TabletManagerClient

type TabletManagerClient interface {

	// Ping will try to ping the remote tablet
	Ping(ctx context.Context, tablet *topodatapb.Tablet) error

	// GetSchema asks the remote tablet for its database schema
	GetSchema(ctx context.Context, tablet *topodatapb.Tablet, request *tabletmanagerdatapb.GetSchemaRequest) (*tabletmanagerdatapb.SchemaDefinition, error)

	// GetPermissions asks the remote tablet for its permissions list
	GetPermissions(ctx context.Context, tablet *topodatapb.Tablet) (*tabletmanagerdatapb.Permissions, error)

	// SetReadOnly makes the mysql instance read-only
	SetReadOnly(ctx context.Context, tablet *topodatapb.Tablet) error

	// SetReadWrite makes the mysql instance read-write
	SetReadWrite(ctx context.Context, tablet *topodatapb.Tablet) error

	// ChangeType asks the remote tablet to change its type
	ChangeType(ctx context.Context, tablet *topodatapb.Tablet, dbType topodatapb.TabletType, semiSync bool) error

	// Sleep will sleep for a duration (used for tests)
	Sleep(ctx context.Context, tablet *topodatapb.Tablet, duration time.Duration) error

	// ExecuteHook executes the provided hook remotely
	ExecuteHook(ctx context.Context, tablet *topodatapb.Tablet, hk *hook.Hook) (*hook.HookResult, error)

	// RefreshState asks the remote tablet to reload its tablet record
	RefreshState(ctx context.Context, tablet *topodatapb.Tablet) error

	// RunHealthCheck asks the remote tablet to run a health check cycle
	RunHealthCheck(ctx context.Context, tablet *topodatapb.Tablet) error

	// ReloadSchema asks the remote tablet to reload its schema
	ReloadSchema(ctx context.Context, tablet *topodatapb.Tablet, waitPosition string) error

	// PreflightSchema will test a list of schema changes.
	PreflightSchema(ctx context.Context, tablet *topodatapb.Tablet, changes []string) ([]*tabletmanagerdatapb.SchemaChangeResult, error)

	// ApplySchema will apply a schema change
	ApplySchema(ctx context.Context, tablet *topodatapb.Tablet, change *tmutils.SchemaChange) (*tabletmanagerdatapb.SchemaChangeResult, error)

	LockTables(ctx context.Context, tablet *topodatapb.Tablet) error

	UnlockTables(ctx context.Context, tablet *topodatapb.Tablet) error

	// ExecuteQuery executes a query remotely on the tablet.
	// req.DbName is ignored in favor of using the tablet's DbName field, and,
	// if req.CallerId is nil, the effective callerid will be extracted from
	// the context.
	ExecuteQuery(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.ExecuteQueryRequest) (*querypb.QueryResult, error)

	// ExecuteFetchAsDba executes a query remotely using the DBA pool.
	// req.DbName is ignored in favor of using the tablet's DbName field.
	// If usePool is set, a connection pool may be used to make the
	// query faster. Close() should close the pool in that case.
	ExecuteFetchAsDba(ctx context.Context, tablet *topodatapb.Tablet, usePool bool, req *tabletmanagerdatapb.ExecuteFetchAsDbaRequest) (*querypb.QueryResult, error)

	// ExecuteFetchAsAllPrivs executes a query remotely using the allprivs user.
	// req.DbName is ignored in favor of using the tablet's DbName field.
	ExecuteFetchAsAllPrivs(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.ExecuteFetchAsAllPrivsRequest) (*querypb.QueryResult, error)

	// ExecuteFetchAsApp executes a query remotely using the App pool
	// If usePool is set, a connection pool may be used to make the
	// query faster. Close() should close the pool in that case.
	ExecuteFetchAsApp(ctx context.Context, tablet *topodatapb.Tablet, usePool bool, req *tabletmanagerdatapb.ExecuteFetchAsAppRequest) (*querypb.QueryResult, error)

	// PrimaryStatus returns the tablet's mysql primary status.
	PrimaryStatus(ctx context.Context, tablet *topodatapb.Tablet) (*replicationdatapb.PrimaryStatus, error)

	// ReplicationStatus returns the tablet's mysql replication status.
	ReplicationStatus(ctx context.Context, tablet *topodatapb.Tablet) (*replicationdatapb.Status, error)

	// FullStatus returns the tablet's mysql replication status.
	FullStatus(ctx context.Context, tablet *topodatapb.Tablet) (*replicationdatapb.FullStatus, error)

	// StopReplication stops the mysql replication
	StopReplication(ctx context.Context, tablet *topodatapb.Tablet) error

	// StopReplicationMinimum stops the mysql replication after it reaches
	// the provided minimum point
	StopReplicationMinimum(ctx context.Context, tablet *topodatapb.Tablet, stopPos string, waitTime time.Duration) (string, error)

	// StartReplication starts the mysql replication
	StartReplication(ctx context.Context, tablet *topodatapb.Tablet, semiSync bool) error

	// StartReplicationUntilAfter starts replication until after the position specified
	StartReplicationUntilAfter(ctx context.Context, tablet *topodatapb.Tablet, position string, duration time.Duration) error

	// GetReplicas returns the addresses of the replicas
	GetReplicas(ctx context.Context, tablet *topodatapb.Tablet) ([]string, error)

	// PrimaryPosition returns the tablet's primary position
	PrimaryPosition(ctx context.Context, tablet *topodatapb.Tablet) (string, error)

	// WaitForPosition waits for the position to be reached
	WaitForPosition(ctx context.Context, tablet *topodatapb.Tablet, pos string) error

	// VExec executes a generic VExec command
	VExec(ctx context.Context, tablet *topodatapb.Tablet, query, workflow, keyspace string) (*querypb.QueryResult, error)

	// VReplicationExec executes a VReplication command
	VReplicationExec(ctx context.Context, tablet *topodatapb.Tablet, query string) (*querypb.QueryResult, error)
	VReplicationWaitForPos(ctx context.Context, tablet *topodatapb.Tablet, id int, pos string) error

	VDiff(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.VDiffRequest) (*tabletmanagerdatapb.VDiffResponse, error)

	// ResetReplication tells a tablet to completely reset its
	// replication.  All binary and relay logs are flushed. All
	// replication positions are reset.
	ResetReplication(ctx context.Context, tablet *topodatapb.Tablet) error

	// InitPrimary tells a tablet to make itself the new primary,
	// and return the replication position the replicas should use to
	// reparent to it.
	InitPrimary(ctx context.Context, tablet *topodatapb.Tablet, semiSync bool) (string, error)

	// PopulateReparentJournal asks the primary to insert a row in
	// its reparent_journal table.
	PopulateReparentJournal(ctx context.Context, tablet *topodatapb.Tablet, timeCreatedNS int64, actionName string, tabletAlias *topodatapb.TabletAlias, pos string) error

	// InitReplica tells a tablet to start replicating from the
	// passed in primary tablet alias, and wait for the row in the
	// reparent_journal table.
	InitReplica(ctx context.Context, tablet *topodatapb.Tablet, parent *topodatapb.TabletAlias, replicationPosition string, timeCreatedNS int64, semiSync bool) error

	// DemotePrimary tells the soon-to-be-former primary it's going to change,
	// and it should go read-only and return its current position.
	DemotePrimary(ctx context.Context, tablet *topodatapb.Tablet) (*replicationdatapb.PrimaryStatus, error)

	// UndoDemotePrimary reverts all changes made by DemotePrimary
	// To be used if we are unable to promote the chosen new primary
	UndoDemotePrimary(ctx context.Context, tablet *topodatapb.Tablet, semiSync bool) error

	// ReplicaWasPromoted tells the remote tablet it is now the primary
	ReplicaWasPromoted(ctx context.Context, tablet *topodatapb.Tablet) error

	// ResetReplicationParameters resets the replica replication parameters
	ResetReplicationParameters(ctx context.Context, tablet *topodatapb.Tablet) error

	// SetReplicationSource tells a tablet to start replicating from the
	// passed in tablet alias, and wait for the row in the
	// reparent_journal table (if timeCreatedNS is non-zero).
	SetReplicationSource(ctx context.Context, tablet *topodatapb.Tablet, parent *topodatapb.TabletAlias, timeCreatedNS int64, waitPosition string, forceStartReplication bool, semiSync bool) error

	// ReplicaWasRestarted tells the replica tablet its primary has changed
	ReplicaWasRestarted(ctx context.Context, tablet *topodatapb.Tablet, parent *topodatapb.TabletAlias) error

	// StopReplicationAndGetStatus stops replication and returns the
	// current position.
	StopReplicationAndGetStatus(ctx context.Context, tablet *topodatapb.Tablet, stopReplicationMode replicationdatapb.StopReplicationMode) (*replicationdatapb.StopReplicationStatus, error)

	// PromoteReplica makes the tablet the new primary
	PromoteReplica(ctx context.Context, tablet *topodatapb.Tablet, semiSync bool) (string, error)

	// Backup creates a database backup
	Backup(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.BackupRequest) (logutil.EventStream, error)

	// RestoreFromBackup deletes local data and restores database from backup
	RestoreFromBackup(ctx context.Context, tablet *topodatapb.Tablet, backupTime time.Time) (logutil.EventStream, error)

	// Close will be called when this TabletManagerClient won't be
	// used any more. It can be used to free any resource.
	Close()
}

TabletManagerClient defines the interface used to talk to a remote tablet

func NewTabletManagerClient

func NewTabletManagerClient() TabletManagerClient

NewTabletManagerClient creates a new TabletManagerClient. Should be called after flags are parsed.

type TabletManagerClientFactory

type TabletManagerClientFactory func() TabletManagerClient

TabletManagerClientFactory is the factory method to create TabletManagerClient objects.

Jump to

Keyboard shortcuts

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