Adds RPCs to vttablet that vtorc requires (#10464)

* feat: add vttablet rpc to reset replication parameters

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: added end to end testing for the rpc and fixed bug

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: fix typing error

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: add basic full status rpc functionality and add test for it

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: add all the fields needed in full status

Signed-off-by: Manan Gupta <manan@planetscale.com>

* test: moved the test to reparent tests and improved it

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: bug fix for no replication status and no primary status

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: add version to the full status output

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: add binlog information to full status

Signed-off-by: Manan Gupta <manan@planetscale.com>

* docs: fix the comment explaining the binlog information

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: add semi-sync statuses to full status

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: call the correct command

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: add server uuid and id to full status

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: make server_id a uint32 to accept the correct range of values

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: add few more fields to the full status like version comment, semi-sync settings, binlog_row_image

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: generate vtadmin proto files

Signed-off-by: Manan Gupta <manan@planetscale.com>

* test: add assertion to check binlog row format is read correctly

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: split GTID mode in its own function because mariadb doesn't support it

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: fix parsing of empty mariadb gtid set

Signed-off-by: Manan Gupta <manan@planetscale.com>

* docs: add doucmentation for existing fields in ReplicationStatus

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: add relay log file position to the replication status output

Signed-off-by: Manan Gupta <manan@planetscale.com>

* test: augmented full status test to check all the different positions stored

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: add additional fields to replication status and read source user

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: read sql delay from show replica status output

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: read ssl allowed from show replica status output

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: read has replication filters from show replica status output

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: read auto position and using gtid from show replica status output

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: add replication lag unknown too to replication status

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: return nils from replication and primary postiion if it is not present

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: rename FileRelayLogPosition in replication status output to RelayLogSourceBinLogEquivalentPosition and augment test to make sure rpc changes are backward compatible

Signed-off-by: Manan Gupta <manan@planetscale.com>

* feat: update vtadmin proto files

Signed-off-by: Manan Gupta <manan@planetscale.com>

* refactor: rename BinLog to binlog in renamed proto field

Signed-off-by: Manan Gupta <manan@planetscale.com>
This commit is contained in:
Manan Gupta 2022-06-20 10:53:04 +05:30 коммит произвёл GitHub
Родитель a595babb65
Коммит 611a2601ed
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
42 изменённых файлов: 5862 добавлений и 583 удалений

Просмотреть файл

@ -75,6 +75,15 @@ type flavor interface {
// primaryGTIDSet returns the current GTIDSet of a server.
primaryGTIDSet(c *Conn) (GTIDSet, error)
// purgedGTIDSet returns the purged GTIDSet of a server.
purgedGTIDSet(c *Conn) (GTIDSet, error)
// gtidMode returns the gtid mode of a server.
gtidMode(c *Conn) (string, error)
// serverUUID returns the UUID of a server.
serverUUID(c *Conn) (string, error)
// startReplicationCommand returns the command to start the replication.
startReplicationCommand() string
@ -112,6 +121,10 @@ type flavor interface {
// replication on the host.
resetReplicationCommands(c *Conn) []string
// resetReplicationParametersCommands returns the commands to reset
// replication parameters on the host.
resetReplicationParametersCommands(c *Conn) []string
// setReplicationPositionCommands returns the commands to set the
// replication position at which the replica will resume.
setReplicationPositionCommands(pos Position) []string
@ -266,6 +279,27 @@ func (c *Conn) PrimaryPosition() (Position, error) {
}, nil
}
// GetGTIDPurged returns the tablet's GTIDs which are purged.
func (c *Conn) GetGTIDPurged() (Position, error) {
gtidSet, err := c.flavor.purgedGTIDSet(c)
if err != nil {
return Position{}, err
}
return Position{
GTIDSet: gtidSet,
}, nil
}
// GetGTIDMode returns the tablet's GTID mode. Only available in MySQL flavour
func (c *Conn) GetGTIDMode() (string, error) {
return c.flavor.gtidMode(c)
}
// GetServerUUID returns the server's UUID.
func (c *Conn) GetServerUUID() (string, error) {
return c.flavor.serverUUID(c)
}
// PrimaryFilePosition returns the current primary's file based replication position.
func (c *Conn) PrimaryFilePosition() (Position, error) {
filePosFlavor := filePosFlavor{}
@ -339,6 +373,12 @@ func (c *Conn) ResetReplicationCommands() []string {
return c.flavor.resetReplicationCommands(c)
}
// ResetReplicationParametersCommands returns the commands to reset
// replication parameters on the host.
func (c *Conn) ResetReplicationParametersCommands() []string {
return c.flavor.resetReplicationParametersCommands(c)
}
// SetReplicationPositionCommands returns the commands to set the
// replication position at which the replica will resume
// when it is later reparented with SetReplicationSourceCommand.
@ -403,6 +443,11 @@ func parseReplicationStatus(fields map[string]string) ReplicationStatus {
// Hence the names still contain Master
status := ReplicationStatus{
SourceHost: fields["Master_Host"],
SourceUser: fields["Master_User"],
SSLAllowed: fields["Master_SSL_Allowed"] == "Yes",
AutoPosition: fields["Auto_Position"] == "1",
UsingGTID: fields["Using_Gtid"] != "No" && fields["Using_Gtid"] != "",
HasReplicationFilters: (fields["Replicate_Do_DB"] != "") || (fields["Replicate_Ignore_DB"] != "") || (fields["Replicate_Do_Table"] != "") || (fields["Replicate_Ignore_Table"] != "") || (fields["Replicate_Wild_Do_Table"] != "") || (fields["Replicate_Wild_Ignore_Table"] != ""),
// These fields are returned from the underlying DB and cannot be renamed
IOState: ReplicationStatusToState(fields["Slave_IO_Running"]),
LastIOError: fields["Last_IO_Error"],
@ -424,6 +469,8 @@ func parseReplicationStatus(fields map[string]string) ReplicationStatus {
}
parseUint, _ = strconv.ParseUint(fields["Master_Server_Id"], 10, 0)
status.SourceServerID = uint(parseUint)
parseUint, _ = strconv.ParseUint(fields["SQL_Delay"], 10, 0)
status.SQLDelay = uint(parseUint)
executedPosStr := fields["Exec_Master_Log_Pos"]
file := fields["Relay_Master_Log_File"]
@ -442,12 +489,24 @@ func parseReplicationStatus(fields map[string]string) ReplicationStatus {
if file != "" && readPosStr != "" {
fileRelayPos, err := strconv.Atoi(readPosStr)
if err == nil {
status.FileRelayLogPosition.GTIDSet = filePosGTID{
status.RelayLogSourceBinlogEquivalentPosition.GTIDSet = filePosGTID{
file: file,
pos: fileRelayPos,
}
}
}
relayPosStr := fields["Relay_Log_Pos"]
file = fields["Relay_Log_File"]
if file != "" && relayPosStr != "" {
relayFilePos, err := strconv.Atoi(relayPosStr)
if err == nil {
status.RelayLogFilePosition.GTIDSet = filePosGTID{
file: file,
pos: relayFilePos,
}
}
}
return status
}

Просмотреть файл

@ -17,13 +17,15 @@ limitations under the License.
package mysql
import (
"context"
"fmt"
"io"
"strconv"
"strings"
"time"
"context"
vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
"vitess.io/vitess/go/vt/vterrors"
)
type filePosFlavor struct {
@ -62,6 +64,36 @@ func (flv *filePosFlavor) primaryGTIDSet(c *Conn) (GTIDSet, error) {
}, nil
}
// purgedGTIDSet is part of the Flavor interface.
func (flv *filePosFlavor) purgedGTIDSet(c *Conn) (GTIDSet, error) {
return nil, nil
}
// gtidMode is part of the Flavor interface.
func (flv *filePosFlavor) gtidMode(c *Conn) (string, error) {
qr, err := c.ExecuteFetch("select @@global.gtid_mode", 1, false)
if err != nil {
return "", err
}
if len(qr.Rows) != 1 || len(qr.Rows[0]) != 1 {
return "", vterrors.Errorf(vtrpcpb.Code_INTERNAL, "unexpected result format for gtid_mode: %#v", qr)
}
return qr.Rows[0][0].ToString(), nil
}
// serverUUID is part of the Flavor interface.
func (flv *filePosFlavor) serverUUID(c *Conn) (string, error) {
// keep @@global as lowercase, as some servers like the Ripple binlog server only honors a lowercase `global` value
qr, err := c.ExecuteFetch("SELECT @@global.server_uuid", 1, false)
if err != nil {
return "", err
}
if len(qr.Rows) != 1 || len(qr.Rows[0]) != 1 {
return "", vterrors.Errorf(vtrpcpb.Code_INTERNAL, "unexpected result format for server_uuid: %#v", qr)
}
return qr.Rows[0][0].ToString(), nil
}
func (flv *filePosFlavor) startReplicationCommand() string {
return "unsupported"
}
@ -183,6 +215,13 @@ func (flv *filePosFlavor) resetReplicationCommands(c *Conn) []string {
}
}
// resetReplicationParametersCommands is part of the Flavor interface.
func (flv *filePosFlavor) resetReplicationParametersCommands(c *Conn) []string {
return []string{
"unsupported",
}
}
// setReplicationPositionCommands is part of the Flavor interface.
func (flv *filePosFlavor) setReplicationPositionCommands(pos Position) []string {
return []string{
@ -219,7 +258,7 @@ func parseFilePosReplicationStatus(resultMap map[string]string) (ReplicationStat
status := parseReplicationStatus(resultMap)
status.Position = status.FilePosition
status.RelayLogPosition = status.FileRelayLogPosition
status.RelayLogPosition = status.RelayLogSourceBinlogEquivalentPosition
return status, nil
}

Просмотреть файл

@ -40,22 +40,26 @@ func TestFilePosRetrieveExecutedPosition(t *testing.T) {
"Relay_Master_Log_File": "master-bin.000002",
"Read_Master_Log_Pos": "1308",
"Master_Log_File": "master-bin.000003",
"Relay_Log_Pos": "1309",
"Relay_Log_File": "relay-bin.000004",
}
want := ReplicationStatus{
Position: Position{GTIDSet: filePosGTID{file: "master-bin.000002", pos: 1307}},
RelayLogPosition: Position{GTIDSet: filePosGTID{file: "master-bin.000003", pos: 1308}},
FilePosition: Position{GTIDSet: filePosGTID{file: "master-bin.000002", pos: 1307}},
FileRelayLogPosition: Position{GTIDSet: filePosGTID{file: "master-bin.000003", pos: 1308}},
RelayLogSourceBinlogEquivalentPosition: Position{GTIDSet: filePosGTID{file: "master-bin.000003", pos: 1308}},
RelayLogFilePosition: Position{GTIDSet: filePosGTID{file: "relay-bin.000004", pos: 1309}},
}
got, err := parseFilePosReplicationStatus(resultMap)
require.NoError(t, err)
assert.Equalf(t, got.Position.GTIDSet, want.Position.GTIDSet, "got Position: %v; want Position: %v", got.Position.GTIDSet, want.Position.GTIDSet)
assert.Equalf(t, got.RelayLogPosition.GTIDSet, want.RelayLogPosition.GTIDSet, "got RelayLogPosition: %v; want RelayLogPosition: %v", got.RelayLogPosition.GTIDSet, want.RelayLogPosition.GTIDSet)
assert.Equalf(t, got.RelayLogFilePosition.GTIDSet, want.RelayLogFilePosition.GTIDSet, "got RelayLogFilePosition: %v; want RelayLogFilePosition: %v", got.RelayLogFilePosition.GTIDSet, want.RelayLogFilePosition.GTIDSet)
assert.Equalf(t, got.FilePosition.GTIDSet, want.FilePosition.GTIDSet, "got FilePosition: %v; want FilePosition: %v", got.FilePosition.GTIDSet, want.FilePosition.GTIDSet)
assert.Equalf(t, got.FileRelayLogPosition.GTIDSet, want.FileRelayLogPosition.GTIDSet, "got FileRelayLogPosition: %v; want FileRelayLogPosition: %v", got.FileRelayLogPosition.GTIDSet, want.FileRelayLogPosition.GTIDSet)
assert.Equalf(t, got.RelayLogSourceBinlogEquivalentPosition.GTIDSet, want.RelayLogSourceBinlogEquivalentPosition.GTIDSet, "got RelayLogSourceBinlogEquivalentPosition: %v; want RelayLogSourceBinlogEquivalentPosition: %v", got.RelayLogSourceBinlogEquivalentPosition.GTIDSet, want.RelayLogSourceBinlogEquivalentPosition.GTIDSet)
assert.Equalf(t, got.Position.GTIDSet, got.FilePosition.GTIDSet, "FilePosition and Position don't match when they should for the FilePos flavor")
assert.Equalf(t, got.RelayLogPosition.GTIDSet, got.FileRelayLogPosition.GTIDSet, "RelayLogPosition and FileRelayLogPosition don't match when they should for the FilePos flavor")
assert.Equalf(t, got.RelayLogPosition.GTIDSet, got.RelayLogSourceBinlogEquivalentPosition.GTIDSet, "RelayLogPosition and RelayLogSourceBinlogEquivalentPosition don't match when they should for the FilePos flavor")
}
func TestFilePosShouldGetPosition(t *testing.T) {

Просмотреть файл

@ -53,6 +53,21 @@ func (mariadbFlavor) primaryGTIDSet(c *Conn) (GTIDSet, error) {
return parseMariadbGTIDSet(qr.Rows[0][0].ToString())
}
// purgedGTIDSet is part of the Flavor interface.
func (mariadbFlavor) purgedGTIDSet(c *Conn) (GTIDSet, error) {
return nil, nil
}
// serverUUID is part of the Flavor interface.
func (mariadbFlavor) serverUUID(c *Conn) (string, error) {
return "", nil
}
// gtidMode is part of the Flavor interface.
func (mariadbFlavor) gtidMode(c *Conn) (string, error) {
return "", nil
}
func (mariadbFlavor) startReplicationUntilAfter(pos Position) string {
return fmt.Sprintf("START SLAVE UNTIL master_gtid_pos = \"%s\"", pos)
}
@ -130,6 +145,14 @@ func (mariadbFlavor) resetReplicationCommands(c *Conn) []string {
return resetCommands
}
// resetReplicationParametersCommands is part of the Flavor interface.
func (mariadbFlavor) resetReplicationParametersCommands(c *Conn) []string {
resetCommands := []string{
"RESET SLAVE ALL", // "ALL" makes it forget source host:port.
}
return resetCommands
}
// setReplicationPositionCommands is part of the Flavor interface.
func (mariadbFlavor) setReplicationPositionCommands(pos Position) []string {
return []string{

Просмотреть файл

@ -99,16 +99,20 @@ func TestMariadbRetrieveFileBasedPositions(t *testing.T) {
"Read_Master_Log_Pos": "1308",
"Master_Log_File": "master-bin.000003",
"Gtid_Slave_Pos": "0-101-2320",
"Relay_Log_Pos": "1309",
"Relay_Log_File": "relay-bin.000004",
}
want := ReplicationStatus{
FilePosition: Position{GTIDSet: filePosGTID{file: "master-bin.000002", pos: 1307}},
FileRelayLogPosition: Position{GTIDSet: filePosGTID{file: "master-bin.000003", pos: 1308}},
RelayLogSourceBinlogEquivalentPosition: Position{GTIDSet: filePosGTID{file: "master-bin.000003", pos: 1308}},
RelayLogFilePosition: Position{GTIDSet: filePosGTID{file: "relay-bin.000004", pos: 1309}},
}
got, err := parseMariadbReplicationStatus(resultMap)
require.NoError(t, err)
assert.Equalf(t, got.RelayLogFilePosition.GTIDSet, want.RelayLogFilePosition.GTIDSet, "got RelayLogFilePosition: %v; want RelayLogFilePosition: %v", got.RelayLogFilePosition.GTIDSet, want.RelayLogFilePosition.GTIDSet)
assert.Equal(t, got.FilePosition.GTIDSet, want.FilePosition.GTIDSet, fmt.Sprintf("got FilePosition: %v; want FilePosition: %v", got.FilePosition.GTIDSet, want.FilePosition.GTIDSet))
assert.Equal(t, got.FileRelayLogPosition.GTIDSet, want.FileRelayLogPosition.GTIDSet, fmt.Sprintf("got FileRelayLogPosition: %v; want FileRelayLogPosition: %v", got.FileRelayLogPosition.GTIDSet, want.FileRelayLogPosition.GTIDSet))
assert.Equal(t, got.RelayLogSourceBinlogEquivalentPosition.GTIDSet, want.RelayLogSourceBinlogEquivalentPosition.GTIDSet, fmt.Sprintf("got RelayLogSourceBinlogEquivalentPosition: %v; want RelayLogSourceBinlogEquivalentPosition: %v", got.RelayLogSourceBinlogEquivalentPosition.GTIDSet, want.RelayLogSourceBinlogEquivalentPosition.GTIDSet))
}
func TestMariadbShouldGetNilRelayLogPosition(t *testing.T) {

Просмотреть файл

@ -56,6 +56,44 @@ func (mysqlFlavor) primaryGTIDSet(c *Conn) (GTIDSet, error) {
return parseMysql56GTIDSet(qr.Rows[0][0].ToString())
}
// purgedGTIDSet is part of the Flavor interface.
func (mysqlFlavor) purgedGTIDSet(c *Conn) (GTIDSet, error) {
// keep @@global as lowercase, as some servers like the Ripple binlog server only honors a lowercase `global` value
qr, err := c.ExecuteFetch("SELECT @@global.gtid_purged", 1, false)
if err != nil {
return nil, err
}
if len(qr.Rows) != 1 || len(qr.Rows[0]) != 1 {
return nil, vterrors.Errorf(vtrpc.Code_INTERNAL, "unexpected result format for gtid_purged: %#v", qr)
}
return parseMysql56GTIDSet(qr.Rows[0][0].ToString())
}
// serverUUID is part of the Flavor interface.
func (mysqlFlavor) serverUUID(c *Conn) (string, error) {
// keep @@global as lowercase, as some servers like the Ripple binlog server only honors a lowercase `global` value
qr, err := c.ExecuteFetch("SELECT @@global.server_uuid", 1, false)
if err != nil {
return "", err
}
if len(qr.Rows) != 1 || len(qr.Rows[0]) != 1 {
return "", vterrors.Errorf(vtrpc.Code_INTERNAL, "unexpected result format for server_uuid: %#v", qr)
}
return qr.Rows[0][0].ToString(), nil
}
// gtidMode is part of the Flavor interface.
func (mysqlFlavor) gtidMode(c *Conn) (string, error) {
qr, err := c.ExecuteFetch("select @@global.gtid_mode", 1, false)
if err != nil {
return "", err
}
if len(qr.Rows) != 1 || len(qr.Rows[0]) != 1 {
return "", vterrors.Errorf(vtrpc.Code_INTERNAL, "unexpected result format for gtid_mode: %#v", qr)
}
return qr.Rows[0][0].ToString(), nil
}
func (mysqlFlavor) startReplicationCommand() string {
return "START SLAVE"
}
@ -117,6 +155,14 @@ func (mysqlFlavor) resetReplicationCommands(c *Conn) []string {
return resetCommands
}
// resetReplicationParametersCommands is part of the Flavor interface.
func (mysqlFlavor) resetReplicationParametersCommands(c *Conn) []string {
resetCommands := []string{
"RESET SLAVE ALL", // "ALL" makes it forget source host:port.
}
return resetCommands
}
// setReplicationPositionCommands is part of the Flavor interface.
func (mysqlFlavor) setReplicationPositionCommands(pos Position) []string {
return []string{

Просмотреть файл

@ -96,16 +96,20 @@ func TestMysqlRetrieveFileBasedPositions(t *testing.T) {
"Relay_Master_Log_File": "master-bin.000002",
"Read_Master_Log_Pos": "1308",
"Master_Log_File": "master-bin.000003",
"Relay_Log_Pos": "1309",
"Relay_Log_File": "relay-bin.000004",
}
want := ReplicationStatus{
FilePosition: Position{GTIDSet: filePosGTID{file: "master-bin.000002", pos: 1307}},
FileRelayLogPosition: Position{GTIDSet: filePosGTID{file: "master-bin.000003", pos: 1308}},
RelayLogSourceBinlogEquivalentPosition: Position{GTIDSet: filePosGTID{file: "master-bin.000003", pos: 1308}},
RelayLogFilePosition: Position{GTIDSet: filePosGTID{file: "relay-bin.000004", pos: 1309}},
}
got, err := parseMysqlReplicationStatus(resultMap)
require.NoError(t, err)
assert.Equalf(t, got.FilePosition.GTIDSet, want.FilePosition.GTIDSet, "got FilePosition: %v; want FilePosition: %v", got.FilePosition.GTIDSet, want.FilePosition.GTIDSet)
assert.Equalf(t, got.FileRelayLogPosition.GTIDSet, want.FileRelayLogPosition.GTIDSet, "got FileRelayLogPosition: %v; want FileRelayLogPosition: %v", got.FileRelayLogPosition.GTIDSet, want.FileRelayLogPosition.GTIDSet)
assert.Equalf(t, got.RelayLogFilePosition.GTIDSet, want.RelayLogFilePosition.GTIDSet, "got RelayLogFilePosition: %v; want RelayLogFilePosition: %v", got.RelayLogFilePosition.GTIDSet, want.RelayLogFilePosition.GTIDSet)
assert.Equalf(t, got.RelayLogSourceBinlogEquivalentPosition.GTIDSet, want.RelayLogSourceBinlogEquivalentPosition.GTIDSet, "got RelayLogSourceBinlogEquivalentPosition: %v; want RelayLogSourceBinlogEquivalentPosition: %v", got.RelayLogSourceBinlogEquivalentPosition.GTIDSet, want.RelayLogSourceBinlogEquivalentPosition.GTIDSet)
}
func TestMysqlShouldGetRelayLogPosition(t *testing.T) {

Просмотреть файл

@ -93,6 +93,11 @@ func (mysqlGRFlavor) resetReplicationCommands(c *Conn) []string {
return []string{}
}
// resetReplicationParametersCommands is part of the Flavor interface.
func (mysqlGRFlavor) resetReplicationParametersCommands(c *Conn) []string {
return []string{}
}
// setReplicationPositionCommands is disabled in mysqlGRFlavor
func (mysqlGRFlavor) setReplicationPositionCommands(pos Position) []string {
return []string{}

Просмотреть файл

@ -67,6 +67,10 @@ func parseMariadbGTIDSet(s string) (GTIDSet, error) {
gtidStrings := strings.Split(s, ",")
gtidSet := make(MariadbGTIDSet, len(gtidStrings))
for _, gtidString := range gtidStrings {
gtidString = strings.TrimSpace(gtidString)
if gtidString == "" {
continue
}
gtid, err := parseMariadbGTID(gtidString)
if err != nil {
return nil, err

Просмотреть файл

@ -25,6 +25,9 @@ import (
// ReplicationStatus holds replication information from SHOW SLAVE STATUS.
type ReplicationStatus struct {
// Position is the current position of the replica. For GTID replication implementations
// it is the executed GTID set. For file replication implementation, it is same as
// FilePosition
Position Position
// RelayLogPosition is the Position that the replica would be at if it
// were to finish executing everything that's currently in its relay log.
@ -32,10 +35,18 @@ type ReplicationStatus struct {
// in which case RelayLogPosition.IsZero() will be true.
// If ReplicationLagUnknown is true then we should not rely on the seconds
// behind value and we can instead try to calculate the lag ourselves when
// appropriate.
// appropriate. For MySQL GTID replication implementation it is the union of
// executed GTID set and retrieved GTID set. For file replication implementation,
// it is same as RelayLogSourceBinlogEquivalentPosition
RelayLogPosition Position
// FilePosition stores the position of the source tablets binary log
// upto which the SQL thread of the replica has run.
FilePosition Position
FileRelayLogPosition Position
// RelayLogSourceBinlogEquivalentPosition stores the position of the source tablets binary log
// upto which the IO thread has read and added to the relay log
RelayLogSourceBinlogEquivalentPosition Position
// RelayLogFilePosition stores the position in the relay log file
RelayLogFilePosition Position
SourceServerID uint
IOState ReplicationState
LastIOError string
@ -45,8 +56,14 @@ type ReplicationStatus struct {
ReplicationLagUnknown bool
SourceHost string
SourcePort int
SourceUser string
ConnectRetry int
SourceUUID SID
SQLDelay uint
AutoPosition bool
UsingGTID bool
HasReplicationFilters bool
SSLAllowed bool
}
// Running returns true if both the IO and SQL threads are running.
@ -79,10 +96,14 @@ func ReplicationStatusToProto(s ReplicationStatus) *replicationdatapb.Status {
Position: EncodePosition(s.Position),
RelayLogPosition: EncodePosition(s.RelayLogPosition),
FilePosition: EncodePosition(s.FilePosition),
FileRelayLogPosition: EncodePosition(s.FileRelayLogPosition),
RelayLogSourceBinlogEquivalentPosition: EncodePosition(s.RelayLogSourceBinlogEquivalentPosition),
SourceServerId: uint32(s.SourceServerID),
ReplicationLagSeconds: uint32(s.ReplicationLagSeconds),
ReplicationLagUnknown: s.ReplicationLagUnknown,
SqlDelay: uint32(s.SQLDelay),
RelayLogFilePosition: EncodePosition(s.RelayLogFilePosition),
SourceHost: s.SourceHost,
SourceUser: s.SourceUser,
SourcePort: int32(s.SourcePort),
ConnectRetry: int32(s.ConnectRetry),
SourceUuid: s.SourceUUID.String(),
@ -90,6 +111,10 @@ func ReplicationStatusToProto(s ReplicationStatus) *replicationdatapb.Status {
LastIoError: s.LastIOError,
SqlState: int32(s.SQLState),
LastSqlError: s.LastSQLError,
SslAllowed: s.SSLAllowed,
HasReplicationFilters: s.HasReplicationFilters,
AutoPosition: s.AutoPosition,
UsingGtid: s.UsingGTID,
}
// We need to be able to send gRPC response messages from v14 and newer tablets to
@ -122,9 +147,13 @@ func ProtoToReplicationStatus(s *replicationdatapb.Status) ReplicationStatus {
if err != nil {
panic(vterrors.Wrapf(err, "cannot decode FilePosition"))
}
fileRelayPos, err := DecodePosition(s.FileRelayLogPosition)
fileRelayPos, err := DecodePosition(s.RelayLogSourceBinlogEquivalentPosition)
if err != nil {
panic(vterrors.Wrapf(err, "cannot decode FileRelayLogPosition"))
panic(vterrors.Wrapf(err, "cannot decode RelayLogSourceBinlogEquivalentPosition"))
}
relayFilePos, err := DecodePosition(s.RelayLogFilePosition)
if err != nil {
panic(vterrors.Wrapf(err, "cannot decode RelayLogFilePosition"))
}
var sid SID
if s.SourceUuid != "" {
@ -137,10 +166,14 @@ func ProtoToReplicationStatus(s *replicationdatapb.Status) ReplicationStatus {
Position: pos,
RelayLogPosition: relayPos,
FilePosition: filePos,
FileRelayLogPosition: fileRelayPos,
RelayLogSourceBinlogEquivalentPosition: fileRelayPos,
RelayLogFilePosition: relayFilePos,
SourceServerID: uint(s.SourceServerId),
ReplicationLagSeconds: uint(s.ReplicationLagSeconds),
ReplicationLagUnknown: s.ReplicationLagUnknown,
SQLDelay: uint(s.SqlDelay),
SourceHost: s.SourceHost,
SourceUser: s.SourceUser,
SourcePort: int(s.SourcePort),
ConnectRetry: int(s.ConnectRetry),
SourceUUID: sid,
@ -148,6 +181,10 @@ func ProtoToReplicationStatus(s *replicationdatapb.Status) ReplicationStatus {
LastIOError: s.LastIoError,
SQLState: ReplicationState(s.SqlState),
LastSQLError: s.LastSqlError,
SSLAllowed: s.SslAllowed,
HasReplicationFilters: s.HasReplicationFilters,
AutoPosition: s.AutoPosition,
UsingGTID: s.UsingGtid,
}
// We need to be able to process gRPC response messages from v13 and older tablets.

Просмотреть файл

@ -18,12 +18,15 @@ package newfeaturetest
import (
"context"
"strconv"
"testing"
"time"
"vitess.io/vitess/go/mysql"
"vitess.io/vitess/go/test/endtoend/cluster"
"vitess.io/vitess/go/test/endtoend/reparent/utils"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
@ -120,3 +123,94 @@ func TestReplicationStopped(t *testing.T) {
// Confirm that tablets[2] which had replication stopped initially still has its replication stopped
utils.CheckReplicationStatus(context.Background(), t, tablets[2], false, false)
}
// TestFullStatus tests that the RPC FullStatus works as intended.
func TestFullStatus(t *testing.T) {
defer cluster.PanicHandler(t)
clusterInstance := utils.SetupReparentCluster(t, true)
defer utils.TeardownCluster(clusterInstance)
tablets := clusterInstance.Keyspaces[0].Shards[0].Vttablets
utils.ConfirmReplication(t, tablets[0], []*cluster.Vttablet{tablets[1], tablets[2], tablets[3]})
// Check that full status gives the correct result for a primary tablet
primaryStatus, err := utils.TmcFullStatus(context.Background(), tablets[0])
require.NoError(t, err)
assert.NotEmpty(t, primaryStatus.ServerUuid)
assert.NotEmpty(t, primaryStatus.ServerId)
// For a primary tablet there is no replication status
assert.Nil(t, primaryStatus.ReplicationStatus)
assert.Contains(t, primaryStatus.PrimaryStatus.String(), "vt-0000000101-bin")
assert.Equal(t, primaryStatus.GtidPurged, "MySQL56/")
assert.False(t, primaryStatus.ReadOnly)
assert.True(t, primaryStatus.SemiSyncPrimaryEnabled)
assert.True(t, primaryStatus.SemiSyncReplicaEnabled)
assert.True(t, primaryStatus.SemiSyncPrimaryStatus)
assert.False(t, primaryStatus.SemiSyncReplicaStatus)
assert.EqualValues(t, 3, primaryStatus.SemiSyncPrimaryClients)
assert.EqualValues(t, 1000000000000000000, primaryStatus.SemiSyncPrimaryTimeout)
assert.EqualValues(t, 1, primaryStatus.SemiSyncWaitForReplicaCount)
assert.Equal(t, "ROW", primaryStatus.BinlogFormat)
assert.Equal(t, "FULL", primaryStatus.BinlogRowImage)
assert.Equal(t, "ON", primaryStatus.GtidMode)
assert.True(t, primaryStatus.LogReplicaUpdates)
assert.True(t, primaryStatus.LogBinEnabled)
assert.Contains(t, primaryStatus.Version, "5.7")
assert.NotEmpty(t, primaryStatus.VersionComment)
// Check that full status gives the correct result for a replica tablet
replicaStatus, err := utils.TmcFullStatus(context.Background(), tablets[1])
require.NoError(t, err)
assert.NotEmpty(t, replicaStatus.ServerUuid)
assert.NotEmpty(t, replicaStatus.ServerId)
assert.Contains(t, replicaStatus.ReplicationStatus.Position, "MySQL56/"+replicaStatus.ReplicationStatus.SourceUuid)
assert.EqualValues(t, mysql.ReplicationStateRunning, replicaStatus.ReplicationStatus.IoState)
assert.EqualValues(t, mysql.ReplicationStateRunning, replicaStatus.ReplicationStatus.SqlState)
assert.Equal(t, fileNameFromPosition(replicaStatus.ReplicationStatus.FilePosition), fileNameFromPosition(primaryStatus.PrimaryStatus.FilePosition))
assert.LessOrEqual(t, rowNumberFromPosition(replicaStatus.ReplicationStatus.FilePosition), rowNumberFromPosition(primaryStatus.PrimaryStatus.FilePosition))
assert.Equal(t, replicaStatus.ReplicationStatus.RelayLogSourceBinlogEquivalentPosition, primaryStatus.PrimaryStatus.FilePosition)
assert.Contains(t, replicaStatus.ReplicationStatus.RelayLogFilePosition, "vt-0000000102-relay")
assert.Equal(t, replicaStatus.ReplicationStatus.Position, primaryStatus.PrimaryStatus.Position)
assert.Equal(t, replicaStatus.ReplicationStatus.RelayLogPosition, primaryStatus.PrimaryStatus.Position)
assert.Empty(t, replicaStatus.ReplicationStatus.LastIoError)
assert.Empty(t, replicaStatus.ReplicationStatus.LastSqlError)
assert.Equal(t, replicaStatus.ReplicationStatus.SourceUuid, primaryStatus.ServerUuid)
assert.EqualValues(t, 0, replicaStatus.ReplicationStatus.ReplicationLagSeconds)
assert.False(t, replicaStatus.ReplicationStatus.ReplicationLagUnknown)
assert.EqualValues(t, 0, replicaStatus.ReplicationStatus.SqlDelay)
assert.False(t, replicaStatus.ReplicationStatus.SslAllowed)
assert.False(t, replicaStatus.ReplicationStatus.HasReplicationFilters)
assert.False(t, replicaStatus.ReplicationStatus.UsingGtid)
assert.True(t, replicaStatus.ReplicationStatus.AutoPosition)
assert.Equal(t, replicaStatus.ReplicationStatus.SourceHost, utils.Hostname)
assert.EqualValues(t, replicaStatus.ReplicationStatus.SourcePort, tablets[0].MySQLPort)
assert.Equal(t, replicaStatus.ReplicationStatus.SourceUser, "vt_repl")
assert.Contains(t, replicaStatus.PrimaryStatus.String(), "vt-0000000102-bin")
assert.Equal(t, replicaStatus.GtidPurged, "MySQL56/")
assert.True(t, replicaStatus.ReadOnly)
assert.False(t, replicaStatus.SemiSyncPrimaryEnabled)
assert.True(t, replicaStatus.SemiSyncReplicaEnabled)
assert.False(t, replicaStatus.SemiSyncPrimaryStatus)
assert.True(t, replicaStatus.SemiSyncReplicaStatus)
assert.EqualValues(t, 0, replicaStatus.SemiSyncPrimaryClients)
assert.EqualValues(t, 1000000000000000000, replicaStatus.SemiSyncPrimaryTimeout)
assert.EqualValues(t, 1, replicaStatus.SemiSyncWaitForReplicaCount)
assert.Equal(t, "ROW", replicaStatus.BinlogFormat)
assert.Equal(t, "FULL", replicaStatus.BinlogRowImage)
assert.Equal(t, "ON", replicaStatus.GtidMode)
assert.True(t, replicaStatus.LogReplicaUpdates)
assert.True(t, replicaStatus.LogBinEnabled)
assert.Contains(t, replicaStatus.Version, "5.7")
assert.NotEmpty(t, replicaStatus.VersionComment)
}
// fileNameFromPosition gets the file name from the position
func fileNameFromPosition(pos string) string {
return pos[0 : len(pos)-4]
}
// rowNumberFromPosition gets the row number from the position
func rowNumberFromPosition(pos string) int {
rowNumStr := pos[len(pos)-4:]
rowNum, _ := strconv.Atoi(rowNumStr)
return rowNum
}

Просмотреть файл

@ -394,6 +394,11 @@ func TestReplicationStatus(t *testing.T) {
ioThread, sqlThread := utils.ReplicationThreadsStatus(t, replicationStatus, clusterInstance.VtctlMajorVersion, clusterInstance.VtTabletMajorVersion)
require.True(t, ioThread)
require.False(t, sqlThread)
// Assert that the 4 file log positions are non-empty
assert.NotEmpty(t, replicationStatus.RelayLogSourceBinlogEquivalentPosition)
assert.NotEmpty(t, replicationStatus.FilePosition)
assert.NotEmpty(t, replicationStatus.Position)
assert.NotEmpty(t, replicationStatus.RelayLogPosition)
// Stop replication on tablets[1] and verify that both the threads are reported as not running
err = clusterInstance.VtctlclientProcess.ExecuteCommand("ExecuteFetchAsDba", tablets[1].Alias, `STOP SLAVE;`)
@ -402,6 +407,11 @@ func TestReplicationStatus(t *testing.T) {
ioThread, sqlThread = utils.ReplicationThreadsStatus(t, replicationStatus, clusterInstance.VtctlMajorVersion, clusterInstance.VtTabletMajorVersion)
require.False(t, ioThread)
require.False(t, sqlThread)
// Assert that the 4 file log positions are non-empty
assert.NotEmpty(t, replicationStatus.RelayLogSourceBinlogEquivalentPosition)
assert.NotEmpty(t, replicationStatus.FilePosition)
assert.NotEmpty(t, replicationStatus.Position)
assert.NotEmpty(t, replicationStatus.RelayLogPosition)
// Start replication on tablets[1] and verify that both the threads are reported as running
err = clusterInstance.VtctlclientProcess.ExecuteCommand("ExecuteFetchAsDba", tablets[1].Alias, `START SLAVE;`)
@ -410,6 +420,11 @@ func TestReplicationStatus(t *testing.T) {
ioThread, sqlThread = utils.ReplicationThreadsStatus(t, replicationStatus, clusterInstance.VtctlMajorVersion, clusterInstance.VtTabletMajorVersion)
require.True(t, ioThread)
require.True(t, sqlThread)
// Assert that the 4 file log positions are non-empty
assert.NotEmpty(t, replicationStatus.RelayLogSourceBinlogEquivalentPosition)
assert.NotEmpty(t, replicationStatus.FilePosition)
assert.NotEmpty(t, replicationStatus.Position)
assert.NotEmpty(t, replicationStatus.RelayLogPosition)
// Stop IO_THREAD on tablets[1] and verify that the IO thread is read to be stopped and SQL thread is running
err = clusterInstance.VtctlclientProcess.ExecuteCommand("ExecuteFetchAsDba", tablets[1].Alias, `STOP SLAVE IO_THREAD;`)
@ -418,4 +433,9 @@ func TestReplicationStatus(t *testing.T) {
ioThread, sqlThread = utils.ReplicationThreadsStatus(t, replicationStatus, clusterInstance.VtctlMajorVersion, clusterInstance.VtTabletMajorVersion)
require.False(t, ioThread)
require.True(t, sqlThread)
// Assert that the 4 file log positions are non-empty
assert.NotEmpty(t, replicationStatus.RelayLogSourceBinlogEquivalentPosition)
assert.NotEmpty(t, replicationStatus.FilePosition)
assert.NotEmpty(t, replicationStatus.Position)
assert.NotEmpty(t, replicationStatus.RelayLogPosition)
}

Просмотреть файл

@ -28,6 +28,8 @@ import (
"testing"
"time"
tmc "vitess.io/vitess/go/vt/vttablet/grpctmclient"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
@ -793,3 +795,18 @@ func ReplicationThreadsStatus(t *testing.T, status *replicationdatapb.Status, vt
}
return ioThread, sqlThread
}
// TmcFullStatus retuns the result of the TabletManagerClient RPC FullStatus
func TmcFullStatus(ctx context.Context, tablet *cluster.Vttablet) (*replicationdatapb.FullStatus, error) {
// create tablet manager client
tmClient := tmc.NewClient()
vttablet := getTablet(tablet.GrpcPort)
return tmClient.FullStatus(ctx, vttablet)
}
func getTablet(tabletGrpcPort int) *topodatapb.Tablet {
portMap := make(map[string]int32)
portMap["grpc"] = int32(tabletGrpcPort)
return &topodatapb.Tablet{Hostname: Hostname, PortMap: portMap}
}

Просмотреть файл

@ -176,6 +176,11 @@ func tmcStartReplication(ctx context.Context, tabletGrpcPort int) error {
return tmClient.StartReplication(ctx, vtablet, false)
}
func tmcResetReplicationParameters(ctx context.Context, tabletGrpcPort int) error {
vttablet := getTablet(tabletGrpcPort)
return tmClient.ResetReplicationParameters(ctx, vttablet)
}
func tmcPrimaryPosition(ctx context.Context, tabletGrpcPort int) (string, error) {
vtablet := getTablet(tabletGrpcPort)
return tmClient.PrimaryPosition(ctx, vtablet)

Просмотреть файл

@ -17,6 +17,7 @@ limitations under the License.
package tabletmanager
import (
"context"
"fmt"
"testing"
@ -111,3 +112,38 @@ func TestLocalMetadata(t *testing.T) {
clusterInstance.VtTabletExtraArgs = []string{}
killTablets(t, rTablet, rTablet2)
}
// TestResetReplicationParameters tests that the RPC ResetReplicationParameters works as intended.
func TestResetReplicationParameters(t *testing.T) {
defer cluster.PanicHandler(t)
// Create new tablet
tablet := clusterInstance.NewVttabletInstance("replica", 0, "")
tablet.MysqlctlProcess = *cluster.MysqlCtlProcessInstance(tablet.TabletUID, tablet.MySQLPort, clusterInstance.TmpDirectory)
err := tablet.MysqlctlProcess.Start()
require.NoError(t, err)
log.Info(fmt.Sprintf("Started vttablet %v", tablet))
// Start vttablet process as replica. It won't be able to serve because there's no db.
err = clusterInstance.StartVttablet(tablet, "NOT_SERVING", false, cell, "dbtest", hostname, "0")
require.NoError(t, err)
// Set a replication source on the tablet and start replication
_, err = tablet.VttabletProcess.QueryTablet("stop slave;change master to master_host = 'localhost', master_port = 123;start slave;", keyspaceName, false)
require.NoError(t, err)
// Check the replica status.
res, err := tablet.VttabletProcess.QueryTablet("show slave status", keyspaceName, false)
require.NoError(t, err)
// This is expected to return 1 row result
require.Len(t, res.Rows, 1)
// Reset the replication parameters on the tablet
err = tmcResetReplicationParameters(context.Background(), tablet.GrpcPort)
require.NoError(t, err)
// Recheck the replica status and this time is should be empty
res, err = tablet.VttabletProcess.QueryTablet("show slave status", keyspaceName, false)
require.NoError(t, err)
require.Len(t, res.Rows, 0)
}

Просмотреть файл

@ -368,6 +368,17 @@ func (fs *fuzzStore) callReplicationStatus() error {
return nil
}
// callFullStatus implements a wrapper
// for fuzzing FullStatus
func (fs *fuzzStore) callFullStatus() error {
tablet, err := fs.getTablet()
if err != nil {
return err
}
_, _ = fs.client.FullStatus(context.Background(), tablet)
return nil
}
// callPrimaryStatus implements a wrapper
// for fuzzing PrimaryStatus
func (fs *fuzzStore) callPrimaryStatus() error {
@ -412,6 +423,17 @@ func (fs *fuzzStore) callReplicaWasPromoted() error {
return nil
}
// callResetReplicationParameters implements a wrapper
// for fuzzing ResetReplicationParameters
func (fs *fuzzStore) callResetReplicationParameters() error {
tablet, err := fs.getTablet()
if err != nil {
return err
}
_ = fs.client.ResetReplicationParameters(context.Background(), tablet)
return nil
}
// callPromoteReplica implements a wrapper
// for fuzzing PromoteReplica
func (fs *fuzzStore) callPromoteReplica() error {
@ -645,6 +667,10 @@ func (fs *fuzzStore) executeInRandomOrder() {
err = fs.callInitReplica()
case 23:
err = fs.callPopulateReparentJournal()
case 24:
err = fs.callResetReplicationParameters()
case 25:
err = fs.callFullStatus()
}
// err means that fuzzStore doesn't have any data

Просмотреть файл

@ -253,6 +253,16 @@ func (fmd *FakeMysqlDaemon) GetMysqlPort() (int32, error) {
return fmd.MysqlPort.Get(), nil
}
// GetServerID is part of the MysqlDaemon interface
func (fmd *FakeMysqlDaemon) GetServerID(ctx context.Context) (uint32, error) {
return 1, nil
}
// GetServerUUID is part of the MysqlDaemon interface
func (fmd *FakeMysqlDaemon) GetServerUUID(ctx context.Context) (string, error) {
return "000000", nil
}
// CurrentPrimaryPositionLocked is thread-safe
func (fmd *FakeMysqlDaemon) CurrentPrimaryPositionLocked(pos mysql.Position) {
fmd.mu.Lock()
@ -270,7 +280,7 @@ func (fmd *FakeMysqlDaemon) ReplicationStatus() (mysql.ReplicationStatus, error)
return mysql.ReplicationStatus{
Position: fmd.CurrentPrimaryPosition,
FilePosition: fmd.CurrentSourceFilePosition,
FileRelayLogPosition: fmd.CurrentSourceFilePosition,
RelayLogSourceBinlogEquivalentPosition: fmd.CurrentSourceFilePosition,
ReplicationLagSeconds: fmd.ReplicationLagSeconds,
// implemented as AND to avoid changing all tests that were
// previously using Replicating = false
@ -292,6 +302,11 @@ func (fmd *FakeMysqlDaemon) PrimaryStatus(ctx context.Context) (mysql.PrimarySta
}, nil
}
// GetGTIDPurged is part of the MysqlDaemon interface
func (fmd *FakeMysqlDaemon) GetGTIDPurged(ctx context.Context) (mysql.Position, error) {
return mysql.Position{}, nil
}
// ResetReplication is part of the MysqlDaemon interface.
func (fmd *FakeMysqlDaemon) ResetReplication(ctx context.Context) error {
return fmd.ExecuteSuperQueryList(ctx, []string{
@ -299,6 +314,27 @@ func (fmd *FakeMysqlDaemon) ResetReplication(ctx context.Context) error {
})
}
// ResetReplicationParameters is part of the MysqlDaemon interface.
func (fmd *FakeMysqlDaemon) ResetReplicationParameters(ctx context.Context) error {
return fmd.ExecuteSuperQueryList(ctx, []string{
"FAKE RESET REPLICA ALL",
})
}
// GetBinlogInformation is part of the MysqlDaemon interface.
func (fmd *FakeMysqlDaemon) GetBinlogInformation(ctx context.Context) (binlogFormat string, logEnabled bool, logReplicaUpdate bool, binlogRowImage string, err error) {
return "ROW", true, true, "FULL", fmd.ExecuteSuperQueryList(ctx, []string{
"FAKE select @@global",
})
}
// GetGTIDMode is part of the MysqlDaemon interface.
func (fmd *FakeMysqlDaemon) GetGTIDMode(ctx context.Context) (gtidMode string, err error) {
return "ON", fmd.ExecuteSuperQueryList(ctx, []string{
"FAKE select @@global",
})
}
// PrimaryPosition is part of the MysqlDaemon interface
func (fmd *FakeMysqlDaemon) PrimaryPosition() (mysql.Position, error) {
return fmd.CurrentPrimaryPosition, nil
@ -592,6 +628,25 @@ func (fmd *FakeMysqlDaemon) SemiSyncEnabled() (primary, replica bool) {
return fmd.SemiSyncPrimaryEnabled, fmd.SemiSyncReplicaEnabled
}
// SemiSyncStatus is part of the MysqlDaemon interface.
func (fmd *FakeMysqlDaemon) SemiSyncStatus() (bool, bool) {
// The fake assumes the status worked.
if fmd.SemiSyncPrimaryEnabled {
return true, false
}
return false, fmd.SemiSyncReplicaEnabled
}
// SemiSyncClients is part of the MysqlDaemon interface.
func (fmd *FakeMysqlDaemon) SemiSyncClients() uint32 {
return 0
}
// SemiSyncSettings is part of the MysqlDaemon interface.
func (fmd *FakeMysqlDaemon) SemiSyncSettings() (timeout uint64, numReplicas uint32) {
return 10000000, 1
}
// SemiSyncReplicationStatus is part of the MysqlDaemon interface.
func (fmd *FakeMysqlDaemon) SemiSyncReplicationStatus() (bool, error) {
// The fake assumes the status worked.
@ -602,3 +657,8 @@ func (fmd *FakeMysqlDaemon) SemiSyncReplicationStatus() (bool, error) {
func (fmd *FakeMysqlDaemon) GetVersionString() string {
return ""
}
// GetVersionComment is part of the MysqlDeamon interface.
func (fmd *FakeMysqlDaemon) GetVersionComment(ctx context.Context) string {
return ""
}

Просмотреть файл

@ -40,6 +40,12 @@ type MysqlDaemon interface {
// GetMysqlPort returns the current port mysql is listening on.
GetMysqlPort() (int32, error)
// GetServerID returns the servers ID.
GetServerID(ctx context.Context) (uint32, error)
// GetServerUUID returns the servers UUID
GetServerUUID(ctx context.Context) (string, error)
// replication related methods
StartReplication(hookExtraEnv map[string]string) error
RestartReplication(hookExtraEnv map[string]string) error
@ -48,9 +54,16 @@ type MysqlDaemon interface {
StopIOThread(ctx context.Context) error
ReplicationStatus() (mysql.ReplicationStatus, error)
PrimaryStatus(ctx context.Context) (mysql.PrimaryStatus, error)
GetGTIDPurged(ctx context.Context) (mysql.Position, error)
SetSemiSyncEnabled(source, replica bool) error
SemiSyncEnabled() (source, replica bool)
SemiSyncStatus() (source, replica bool)
SemiSyncClients() (count uint32)
SemiSyncSettings() (timeout uint64, numReplicas uint32)
SemiSyncReplicationStatus() (bool, error)
ResetReplicationParameters(ctx context.Context) error
GetBinlogInformation(ctx context.Context) (binlogFormat string, logEnabled bool, logReplicaUpdate bool, binlogRowImage string, err error)
GetGTIDMode(ctx context.Context) (gtidMode string, err error)
// reparenting related methods
ResetReplication(ctx context.Context) error
@ -86,6 +99,9 @@ type MysqlDaemon interface {
// GetVersionString returns the database version as a string
GetVersionString() string
// GetVersionComment returns the version comment
GetVersionComment(ctx context.Context) string
// ExecuteSuperQueryList executes a list of queries, no result
ExecuteSuperQueryList(ctx context.Context, queryList []string) error

Просмотреть файл

@ -1146,3 +1146,17 @@ func buildLdPaths() ([]string, error) {
func (mysqld *Mysqld) GetVersionString() string {
return fmt.Sprintf("%d.%d.%d", mysqld.capabilities.version.Major, mysqld.capabilities.version.Minor, mysqld.capabilities.version.Patch)
}
// GetVersionComment gets the version comment.
func (mysqld *Mysqld) GetVersionComment(ctx context.Context) string {
qr, err := mysqld.FetchSuperQuery(ctx, "select @@global.version_comment")
if err != nil {
return ""
}
if len(qr.Rows) != 1 {
return ""
}
res := qr.Named().Row()
versionComment, _ := res.ToString("@@global.version_comment")
return versionComment
}

Просмотреть файл

@ -210,6 +210,24 @@ func (mysqld *Mysqld) fetchVariables(ctx context.Context, pattern string) (map[s
return varMap, nil
}
// fetchStatuses returns a map from MySQL status names to status value
// for variables that match the given pattern.
func (mysqld *Mysqld) fetchStatuses(ctx context.Context, pattern string) (map[string]string, error) {
query := fmt.Sprintf("SHOW STATUS LIKE '%s'", pattern)
qr, err := mysqld.FetchSuperQuery(ctx, query)
if err != nil {
return nil, err
}
if len(qr.Fields) != 2 {
return nil, fmt.Errorf("query %#v returned %d columns, expected 2", query, len(qr.Fields))
}
varMap := make(map[string]string, len(qr.Rows))
for _, row := range qr.Rows {
varMap[row[0].ToString()] = row[1].ToString()
}
return varMap, nil
}
const (
masterPasswordStart = " MASTER_PASSWORD = '"
masterPasswordEnd = "',\n"

Просмотреть файл

@ -24,6 +24,7 @@ import (
"errors"
"fmt"
"net"
"strconv"
"strings"
"time"
@ -188,6 +189,33 @@ func (mysqld *Mysqld) GetMysqlPort() (int32, error) {
return int32(utemp), nil
}
// GetServerID returns mysql server id
func (mysqld *Mysqld) GetServerID(ctx context.Context) (uint32, error) {
qr, err := mysqld.FetchSuperQuery(ctx, "select @@global.server_id")
if err != nil {
return 0, err
}
if len(qr.Rows) != 1 {
return 0, errors.New("no server_id in mysql")
}
utemp, err := evalengine.ToUint64(qr.Rows[0][0])
if err != nil {
return 0, err
}
return uint32(utemp), nil
}
// GetServerUUID returns mysql server uuid
func (mysqld *Mysqld) GetServerUUID(ctx context.Context) (string, error) {
conn, err := getPoolReconnect(ctx, mysqld.dbaPool)
if err != nil {
return "", err
}
defer conn.Recycle()
return conn.GetServerUUID()
}
// IsReadOnly return true if the instance is read only
func (mysqld *Mysqld) IsReadOnly() (bool, error) {
qr, err := mysqld.FetchSuperQuery(context.TODO(), "SHOW VARIABLES LIKE 'read_only'")
@ -315,6 +343,17 @@ func (mysqld *Mysqld) PrimaryStatus(ctx context.Context) (mysql.PrimaryStatus, e
return conn.ShowPrimaryStatus()
}
// GetGTIDPurged returns the gtid purged statuses
func (mysqld *Mysqld) GetGTIDPurged(ctx context.Context) (mysql.Position, error) {
conn, err := getPoolReconnect(ctx, mysqld.dbaPool)
if err != nil {
return mysql.Position{}, err
}
defer conn.Recycle()
return conn.GetGTIDPurged()
}
// PrimaryPosition returns the primary replication position.
func (mysqld *Mysqld) PrimaryPosition() (mysql.Position, error) {
conn, err := getPoolReconnect(context.TODO(), mysqld.dbaPool)
@ -381,6 +420,18 @@ func (mysqld *Mysqld) ResetReplication(ctx context.Context) error {
return mysqld.executeSuperQueryListConn(ctx, conn, cmds)
}
// ResetReplicationParameters resets the replica replication parameters for this host.
func (mysqld *Mysqld) ResetReplicationParameters(ctx context.Context) error {
conn, connErr := getPoolReconnect(ctx, mysqld.dbaPool)
if connErr != nil {
return connErr
}
defer conn.Recycle()
cmds := conn.ResetReplicationParametersCommands()
return mysqld.executeSuperQueryListConn(ctx, conn, cmds)
}
// +------+---------+---------------------+------+-------------+------+----------------------------------------------------------------+------------------+
// | Id | User | Host | db | Command | Time | State | Info |
// +------+---------+---------------------+------+-------------+------+----------------------------------------------------------------+------------------+
@ -484,6 +535,46 @@ func (mysqld *Mysqld) DisableBinlogPlayback() error {
return nil
}
// GetBinlogInformation gets the binlog format, whether binlog is enabled and if updates on replica logging is enabled.
func (mysqld *Mysqld) GetBinlogInformation(ctx context.Context) (string, bool, bool, string, error) {
qr, err := mysqld.FetchSuperQuery(ctx, "select @@global.binlog_format, @@global.log_bin, @@global.log_slave_updates, @@global.binlog_row_image")
if err != nil {
return "", false, false, "", err
}
if len(qr.Rows) != 1 {
return "", false, false, "", errors.New("unable to read global variables binlog_format, log_bin, log_slave_updates, gtid_mode, binlog_rowge")
}
res := qr.Named().Row()
binlogFormat, err := res.ToString("@@global.binlog_format")
if err != nil {
return "", false, false, "", err
}
logBin, err := res.ToInt64("@@global.log_bin")
if err != nil {
return "", false, false, "", err
}
logReplicaUpdates, err := res.ToInt64("@@global.log_slave_updates")
if err != nil {
return "", false, false, "", err
}
binlogRowImage, err := res.ToString("@@global.binlog_row_image")
if err != nil {
return "", false, false, "", err
}
return binlogFormat, logBin == 1, logReplicaUpdates == 1, binlogRowImage, nil
}
// GetGTIDMode gets the GTID mode for the server
func (mysqld *Mysqld) GetGTIDMode(ctx context.Context) (string, error) {
conn, err := getPoolReconnect(ctx, mysqld.dbaPool)
if err != nil {
return "", err
}
defer conn.Recycle()
return conn.GetGTIDMode()
}
// SetSemiSyncEnabled enables or disables semi-sync replication for
// primary and/or replica mode.
func (mysqld *Mysqld) SetSemiSyncEnabled(primary, replica bool) error {
@ -519,6 +610,42 @@ func (mysqld *Mysqld) SemiSyncEnabled() (primary, replica bool) {
return primary, replica
}
// SemiSyncStatus returns the current status of semi-sync for primary and replica.
func (mysqld *Mysqld) SemiSyncStatus() (primary, replica bool) {
vars, err := mysqld.fetchStatuses(context.TODO(), "Rpl_semi_sync_%_status")
if err != nil {
return false, false
}
primary = vars["Rpl_semi_sync_master_status"] == "ON"
replica = vars["Rpl_semi_sync_slave_status"] == "ON"
return primary, replica
}
// SemiSyncClients returns the number of semi-sync clients for the primary.
func (mysqld *Mysqld) SemiSyncClients() uint32 {
qr, err := mysqld.FetchSuperQuery(context.TODO(), "SHOW STATUS LIKE 'Rpl_semi_sync_master_clients'")
if err != nil {
return 0
}
if len(qr.Rows) != 1 {
return 0
}
countStr := qr.Rows[0][1].ToString()
count, _ := strconv.ParseUint(countStr, 10, 0)
return uint32(count)
}
// SemiSyncSettings returns the settings of semi-sync which includes the timeout and the number of replicas to wait for.
func (mysqld *Mysqld) SemiSyncSettings() (timeout uint64, numReplicas uint32) {
vars, err := mysqld.fetchVariables(context.TODO(), "rpl_semi_sync_%")
if err != nil {
return 0, 0
}
timeout, _ = strconv.ParseUint(vars["rpl_semi_sync_master_timeout"], 10, 0)
numReplicasUint, _ := strconv.ParseUint(vars["rpl_semi_sync_master_wait_for_slave_count"], 10, 0)
return timeout, uint32(numReplicasUint)
}
// SemiSyncReplicationStatus returns whether semi-sync is currently used by replication.
func (mysqld *Mysqld) SemiSyncReplicationStatus() (bool, error) {
qr, err := mysqld.FetchSuperQuery(context.TODO(), "SHOW STATUS LIKE 'rpl_semi_sync_slave_status'")

435
go/vt/proto/replicationdata/replicationdata.pb.go сгенерированный
Просмотреть файл

@ -104,13 +104,21 @@ type Status struct {
// RelayLogPosition will be empty for flavors that do not support returning the full GTIDSet from the relay log, such as MariaDB.
RelayLogPosition string `protobuf:"bytes,8,opt,name=relay_log_position,json=relayLogPosition,proto3" json:"relay_log_position,omitempty"`
FilePosition string `protobuf:"bytes,9,opt,name=file_position,json=filePosition,proto3" json:"file_position,omitempty"`
FileRelayLogPosition string `protobuf:"bytes,10,opt,name=file_relay_log_position,json=fileRelayLogPosition,proto3" json:"file_relay_log_position,omitempty"`
RelayLogSourceBinlogEquivalentPosition string `protobuf:"bytes,10,opt,name=relay_log_source_binlog_equivalent_position,json=relayLogSourceBinlogEquivalentPosition,proto3" json:"relay_log_source_binlog_equivalent_position,omitempty"`
SourceServerId uint32 `protobuf:"varint,11,opt,name=source_server_id,json=sourceServerId,proto3" json:"source_server_id,omitempty"`
SourceUuid string `protobuf:"bytes,12,opt,name=source_uuid,json=sourceUuid,proto3" json:"source_uuid,omitempty"`
IoState int32 `protobuf:"varint,13,opt,name=io_state,json=ioState,proto3" json:"io_state,omitempty"`
LastIoError string `protobuf:"bytes,14,opt,name=last_io_error,json=lastIoError,proto3" json:"last_io_error,omitempty"`
SqlState int32 `protobuf:"varint,15,opt,name=sql_state,json=sqlState,proto3" json:"sql_state,omitempty"`
LastSqlError string `protobuf:"bytes,16,opt,name=last_sql_error,json=lastSqlError,proto3" json:"last_sql_error,omitempty"`
RelayLogFilePosition string `protobuf:"bytes,17,opt,name=relay_log_file_position,json=relayLogFilePosition,proto3" json:"relay_log_file_position,omitempty"`
SourceUser string `protobuf:"bytes,18,opt,name=source_user,json=sourceUser,proto3" json:"source_user,omitempty"`
SqlDelay uint32 `protobuf:"varint,19,opt,name=sql_delay,json=sqlDelay,proto3" json:"sql_delay,omitempty"`
AutoPosition bool `protobuf:"varint,20,opt,name=auto_position,json=autoPosition,proto3" json:"auto_position,omitempty"`
UsingGtid bool `protobuf:"varint,21,opt,name=using_gtid,json=usingGtid,proto3" json:"using_gtid,omitempty"`
HasReplicationFilters bool `protobuf:"varint,22,opt,name=has_replication_filters,json=hasReplicationFilters,proto3" json:"has_replication_filters,omitempty"`
SslAllowed bool `protobuf:"varint,23,opt,name=ssl_allowed,json=sslAllowed,proto3" json:"ssl_allowed,omitempty"`
ReplicationLagUnknown bool `protobuf:"varint,24,opt,name=replication_lag_unknown,json=replicationLagUnknown,proto3" json:"replication_lag_unknown,omitempty"`
}
func (x *Status) Reset() {
@ -208,9 +216,9 @@ func (x *Status) GetFilePosition() string {
return ""
}
func (x *Status) GetFileRelayLogPosition() string {
func (x *Status) GetRelayLogSourceBinlogEquivalentPosition() string {
if x != nil {
return x.FileRelayLogPosition
return x.RelayLogSourceBinlogEquivalentPosition
}
return ""
}
@ -257,6 +265,62 @@ func (x *Status) GetLastSqlError() string {
return ""
}
func (x *Status) GetRelayLogFilePosition() string {
if x != nil {
return x.RelayLogFilePosition
}
return ""
}
func (x *Status) GetSourceUser() string {
if x != nil {
return x.SourceUser
}
return ""
}
func (x *Status) GetSqlDelay() uint32 {
if x != nil {
return x.SqlDelay
}
return 0
}
func (x *Status) GetAutoPosition() bool {
if x != nil {
return x.AutoPosition
}
return false
}
func (x *Status) GetUsingGtid() bool {
if x != nil {
return x.UsingGtid
}
return false
}
func (x *Status) GetHasReplicationFilters() bool {
if x != nil {
return x.HasReplicationFilters
}
return false
}
func (x *Status) GetSslAllowed() bool {
if x != nil {
return x.SslAllowed
}
return false
}
func (x *Status) GetReplicationLagUnknown() bool {
if x != nil {
return x.ReplicationLagUnknown
}
return false
}
// StopReplicationStatus represents the replication status before calling StopReplication, and the replication status collected immediately after
// calling StopReplication.
type StopReplicationStatus struct {
@ -370,12 +434,212 @@ func (x *PrimaryStatus) GetFilePosition() string {
return ""
}
// FullStatus contains the full status of MySQL including the replication information, semi-sync information, GTID information among others
type FullStatus struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
ServerId uint32 `protobuf:"varint,1,opt,name=server_id,json=serverId,proto3" json:"server_id,omitempty"`
ServerUuid string `protobuf:"bytes,2,opt,name=server_uuid,json=serverUuid,proto3" json:"server_uuid,omitempty"`
ReplicationStatus *Status `protobuf:"bytes,3,opt,name=replication_status,json=replicationStatus,proto3" json:"replication_status,omitempty"`
PrimaryStatus *PrimaryStatus `protobuf:"bytes,4,opt,name=primary_status,json=primaryStatus,proto3" json:"primary_status,omitempty"`
GtidPurged string `protobuf:"bytes,5,opt,name=gtid_purged,json=gtidPurged,proto3" json:"gtid_purged,omitempty"`
Version string `protobuf:"bytes,6,opt,name=version,proto3" json:"version,omitempty"`
VersionComment string `protobuf:"bytes,7,opt,name=version_comment,json=versionComment,proto3" json:"version_comment,omitempty"`
ReadOnly bool `protobuf:"varint,8,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"`
GtidMode string `protobuf:"bytes,9,opt,name=gtid_mode,json=gtidMode,proto3" json:"gtid_mode,omitempty"`
BinlogFormat string `protobuf:"bytes,10,opt,name=binlog_format,json=binlogFormat,proto3" json:"binlog_format,omitempty"`
BinlogRowImage string `protobuf:"bytes,11,opt,name=binlog_row_image,json=binlogRowImage,proto3" json:"binlog_row_image,omitempty"`
LogBinEnabled bool `protobuf:"varint,12,opt,name=log_bin_enabled,json=logBinEnabled,proto3" json:"log_bin_enabled,omitempty"`
LogReplicaUpdates bool `protobuf:"varint,13,opt,name=log_replica_updates,json=logReplicaUpdates,proto3" json:"log_replica_updates,omitempty"`
SemiSyncPrimaryEnabled bool `protobuf:"varint,14,opt,name=semi_sync_primary_enabled,json=semiSyncPrimaryEnabled,proto3" json:"semi_sync_primary_enabled,omitempty"`
SemiSyncReplicaEnabled bool `protobuf:"varint,15,opt,name=semi_sync_replica_enabled,json=semiSyncReplicaEnabled,proto3" json:"semi_sync_replica_enabled,omitempty"`
SemiSyncPrimaryStatus bool `protobuf:"varint,16,opt,name=semi_sync_primary_status,json=semiSyncPrimaryStatus,proto3" json:"semi_sync_primary_status,omitempty"`
SemiSyncReplicaStatus bool `protobuf:"varint,17,opt,name=semi_sync_replica_status,json=semiSyncReplicaStatus,proto3" json:"semi_sync_replica_status,omitempty"`
SemiSyncPrimaryClients uint32 `protobuf:"varint,18,opt,name=semi_sync_primary_clients,json=semiSyncPrimaryClients,proto3" json:"semi_sync_primary_clients,omitempty"`
SemiSyncPrimaryTimeout uint64 `protobuf:"varint,19,opt,name=semi_sync_primary_timeout,json=semiSyncPrimaryTimeout,proto3" json:"semi_sync_primary_timeout,omitempty"`
SemiSyncWaitForReplicaCount uint32 `protobuf:"varint,20,opt,name=semi_sync_wait_for_replica_count,json=semiSyncWaitForReplicaCount,proto3" json:"semi_sync_wait_for_replica_count,omitempty"`
}
func (x *FullStatus) Reset() {
*x = FullStatus{}
if protoimpl.UnsafeEnabled {
mi := &file_replicationdata_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *FullStatus) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*FullStatus) ProtoMessage() {}
func (x *FullStatus) ProtoReflect() protoreflect.Message {
mi := &file_replicationdata_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use FullStatus.ProtoReflect.Descriptor instead.
func (*FullStatus) Descriptor() ([]byte, []int) {
return file_replicationdata_proto_rawDescGZIP(), []int{3}
}
func (x *FullStatus) GetServerId() uint32 {
if x != nil {
return x.ServerId
}
return 0
}
func (x *FullStatus) GetServerUuid() string {
if x != nil {
return x.ServerUuid
}
return ""
}
func (x *FullStatus) GetReplicationStatus() *Status {
if x != nil {
return x.ReplicationStatus
}
return nil
}
func (x *FullStatus) GetPrimaryStatus() *PrimaryStatus {
if x != nil {
return x.PrimaryStatus
}
return nil
}
func (x *FullStatus) GetGtidPurged() string {
if x != nil {
return x.GtidPurged
}
return ""
}
func (x *FullStatus) GetVersion() string {
if x != nil {
return x.Version
}
return ""
}
func (x *FullStatus) GetVersionComment() string {
if x != nil {
return x.VersionComment
}
return ""
}
func (x *FullStatus) GetReadOnly() bool {
if x != nil {
return x.ReadOnly
}
return false
}
func (x *FullStatus) GetGtidMode() string {
if x != nil {
return x.GtidMode
}
return ""
}
func (x *FullStatus) GetBinlogFormat() string {
if x != nil {
return x.BinlogFormat
}
return ""
}
func (x *FullStatus) GetBinlogRowImage() string {
if x != nil {
return x.BinlogRowImage
}
return ""
}
func (x *FullStatus) GetLogBinEnabled() bool {
if x != nil {
return x.LogBinEnabled
}
return false
}
func (x *FullStatus) GetLogReplicaUpdates() bool {
if x != nil {
return x.LogReplicaUpdates
}
return false
}
func (x *FullStatus) GetSemiSyncPrimaryEnabled() bool {
if x != nil {
return x.SemiSyncPrimaryEnabled
}
return false
}
func (x *FullStatus) GetSemiSyncReplicaEnabled() bool {
if x != nil {
return x.SemiSyncReplicaEnabled
}
return false
}
func (x *FullStatus) GetSemiSyncPrimaryStatus() bool {
if x != nil {
return x.SemiSyncPrimaryStatus
}
return false
}
func (x *FullStatus) GetSemiSyncReplicaStatus() bool {
if x != nil {
return x.SemiSyncReplicaStatus
}
return false
}
func (x *FullStatus) GetSemiSyncPrimaryClients() uint32 {
if x != nil {
return x.SemiSyncPrimaryClients
}
return 0
}
func (x *FullStatus) GetSemiSyncPrimaryTimeout() uint64 {
if x != nil {
return x.SemiSyncPrimaryTimeout
}
return 0
}
func (x *FullStatus) GetSemiSyncWaitForReplicaCount() uint32 {
if x != nil {
return x.SemiSyncWaitForReplicaCount
}
return 0
}
var File_replicationdata_proto protoreflect.FileDescriptor
var file_replicationdata_proto_rawDesc = []byte{
0x0a, 0x15, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74,
0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x22, 0xf4, 0x04, 0x0a, 0x06, 0x53, 0x74, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x22, 0xe4, 0x07, 0x0a, 0x06, 0x53, 0x74, 0x61,
0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12,
0x2a, 0x0a, 0x11, 0x69, 0x6f, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x72, 0x75, 0x6e,
@ -398,23 +662,46 @@ var file_replicationdata_proto_rawDesc = []byte{
0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x4c, 0x6f, 0x67, 0x50, 0x6f,
0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70,
0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66,
0x69, 0x6c, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x17, 0x66,
0x69, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6c, 0x6f, 0x67, 0x5f, 0x70, 0x6f,
0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x66, 0x69,
0x6c, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x4c, 0x6f, 0x67, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69,
0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x72,
0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x73, 0x6f,
0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b,
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28,
0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x75, 0x69, 0x64, 0x12, 0x19, 0x0a,
0x08, 0x69, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52,
0x07, 0x69, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x6c, 0x61, 0x73, 0x74,
0x5f, 0x69, 0x6f, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0b, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09,
0x73, 0x71, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52,
0x08, 0x73, 0x71, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x61, 0x73,
0x74, 0x5f, 0x73, 0x71, 0x6c, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28,
0x09, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x71, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22,
0x69, 0x6c, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5b, 0x0a, 0x2b, 0x72,
0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6c, 0x6f, 0x67, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f,
0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x5f, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e,
0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09,
0x52, 0x26, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x4c, 0x6f, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65,
0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x45, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74,
0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72,
0x63, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x75, 0x75, 0x69,
0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55,
0x75, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18,
0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x69, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x22,
0x0a, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x69, 0x6f, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18,
0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6f, 0x45, 0x72, 0x72,
0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x71, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18,
0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x71, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12,
0x24, 0x0a, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x71, 0x6c, 0x5f, 0x65, 0x72, 0x72, 0x6f,
0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x71, 0x6c,
0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x35, 0x0a, 0x17, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6c,
0x6f, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x4c, 0x6f, 0x67,
0x46, 0x69, 0x6c, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b,
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x12, 0x20, 0x01, 0x28,
0x09, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1b, 0x0a,
0x09, 0x73, 0x71, 0x6c, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x08, 0x73, 0x71, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x75,
0x74, 0x6f, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28,
0x08, 0x52, 0x0c, 0x61, 0x75, 0x74, 0x6f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12,
0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x67, 0x74, 0x69, 0x64, 0x18, 0x15, 0x20,
0x01, 0x28, 0x08, 0x52, 0x09, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x47, 0x74, 0x69, 0x64, 0x12, 0x36,
0x0a, 0x17, 0x68, 0x61, 0x73, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52,
0x15, 0x68, 0x61, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46,
0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x73, 0x6c, 0x5f, 0x61, 0x6c,
0x6c, 0x6f, 0x77, 0x65, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x73, 0x6c,
0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x6c, 0x69,
0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x5f, 0x75, 0x6e, 0x6b, 0x6e, 0x6f,
0x77, 0x6e, 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x22,
0x77, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x62, 0x65, 0x66, 0x6f,
0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69,
@ -427,14 +714,75 @@ var file_replicationdata_proto_rawDesc = []byte{
0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x73,
0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x6f,
0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x69,
0x6c, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x3b, 0x0a, 0x13, 0x53, 0x74,
0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64,
0x65, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4f, 0x41, 0x4e, 0x44, 0x53, 0x51, 0x4c, 0x54, 0x48, 0x52,
0x45, 0x41, 0x44, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x4f, 0x54, 0x48, 0x52, 0x45, 0x41,
0x44, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x42, 0x2e, 0x5a, 0x2c, 0x76, 0x69, 0x74, 0x65, 0x73,
0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76,
0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x6c, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xc3, 0x07, 0x0a, 0x0a, 0x46,
0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x65, 0x72,
0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x73, 0x65,
0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72,
0x76, 0x65, 0x72, 0x55, 0x75, 0x69, 0x64, 0x12, 0x46, 0x0a, 0x12, 0x72, 0x65, 0x70, 0x6c, 0x69,
0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x11, 0x72, 0x65,
0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
0x45, 0x0a, 0x0e, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75,
0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72,
0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79,
0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x67, 0x74, 0x69, 0x64, 0x5f, 0x70,
0x75, 0x72, 0x67, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x67, 0x74, 0x69,
0x64, 0x50, 0x75, 0x72, 0x67, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69,
0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6d,
0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x65, 0x72, 0x73,
0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65,
0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72,
0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x74, 0x69, 0x64, 0x5f,
0x6d, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, 0x74, 0x69, 0x64,
0x4d, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x5f, 0x66,
0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x69, 0x6e,
0x6c, 0x6f, 0x67, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x62, 0x69, 0x6e,
0x6c, 0x6f, 0x67, 0x5f, 0x72, 0x6f, 0x77, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20,
0x01, 0x28, 0x09, 0x52, 0x0e, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x6f, 0x77, 0x49, 0x6d,
0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x6f, 0x67, 0x5f, 0x62, 0x69, 0x6e, 0x5f, 0x65,
0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6c, 0x6f,
0x67, 0x42, 0x69, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x6c,
0x6f, 0x67, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74,
0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x70,
0x6c, 0x69, 0x63, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x19, 0x73,
0x65, 0x6d, 0x69, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79,
0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16,
0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x45,
0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x73, 0x65, 0x6d, 0x69, 0x5f, 0x73,
0x79, 0x6e, 0x63, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x65, 0x6e, 0x61, 0x62,
0x6c, 0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x73, 0x65, 0x6d, 0x69, 0x53,
0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65,
0x64, 0x12, 0x37, 0x0a, 0x18, 0x73, 0x65, 0x6d, 0x69, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x70,
0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x10, 0x20,
0x01, 0x28, 0x08, 0x52, 0x15, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x69,
0x6d, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x18, 0x73, 0x65,
0x6d, 0x69, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f,
0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x73, 0x65,
0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x74, 0x61,
0x74, 0x75, 0x73, 0x12, 0x39, 0x0a, 0x19, 0x73, 0x65, 0x6d, 0x69, 0x5f, 0x73, 0x79, 0x6e, 0x63,
0x5f, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73,
0x18, 0x12, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x16, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63,
0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x39,
0x0a, 0x19, 0x73, 0x65, 0x6d, 0x69, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x70, 0x72, 0x69, 0x6d,
0x61, 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28,
0x04, 0x52, 0x16, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x69, 0x6d, 0x61,
0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x45, 0x0a, 0x20, 0x73, 0x65, 0x6d,
0x69, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f,
0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x14, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x1b, 0x73, 0x65, 0x6d, 0x69, 0x53, 0x79, 0x6e, 0x63, 0x57, 0x61, 0x69,
0x74, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x43, 0x6f, 0x75, 0x6e, 0x74,
0x2a, 0x3b, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4f, 0x41, 0x4e, 0x44,
0x53, 0x51, 0x4c, 0x54, 0x48, 0x52, 0x45, 0x41, 0x44, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x49,
0x4f, 0x54, 0x48, 0x52, 0x45, 0x41, 0x44, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x42, 0x2e, 0x5a,
0x2c, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73,
0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x72, 0x65,
0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x06, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@ -450,21 +798,24 @@ func file_replicationdata_proto_rawDescGZIP() []byte {
}
var file_replicationdata_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_replicationdata_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
var file_replicationdata_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
var file_replicationdata_proto_goTypes = []interface{}{
(StopReplicationMode)(0), // 0: replicationdata.StopReplicationMode
(*Status)(nil), // 1: replicationdata.Status
(*StopReplicationStatus)(nil), // 2: replicationdata.StopReplicationStatus
(*PrimaryStatus)(nil), // 3: replicationdata.PrimaryStatus
(*FullStatus)(nil), // 4: replicationdata.FullStatus
}
var file_replicationdata_proto_depIdxs = []int32{
1, // 0: replicationdata.StopReplicationStatus.before:type_name -> replicationdata.Status
1, // 1: replicationdata.StopReplicationStatus.after:type_name -> replicationdata.Status
2, // [2:2] is the sub-list for method output_type
2, // [2:2] is the sub-list for method input_type
2, // [2:2] is the sub-list for extension type_name
2, // [2:2] is the sub-list for extension extendee
0, // [0:2] is the sub-list for field type_name
1, // 2: replicationdata.FullStatus.replication_status:type_name -> replicationdata.Status
3, // 3: replicationdata.FullStatus.primary_status:type_name -> replicationdata.PrimaryStatus
4, // [4:4] is the sub-list for method output_type
4, // [4:4] is the sub-list for method input_type
4, // [4:4] is the sub-list for extension type_name
4, // [4:4] is the sub-list for extension extendee
0, // [0:4] is the sub-list for field type_name
}
func init() { file_replicationdata_proto_init() }
@ -509,6 +860,18 @@ func file_replicationdata_proto_init() {
return nil
}
}
file_replicationdata_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*FullStatus); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
@ -516,7 +879,7 @@ func file_replicationdata_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_replicationdata_proto_rawDesc,
NumEnums: 1,
NumMessages: 3,
NumMessages: 4,
NumExtensions: 0,
NumServices: 0,
},

1154
go/vt/proto/replicationdata/replicationdata_vtproto.pb.go сгенерированный

Разница между файлами не показана из-за своего большого размера Загрузить разницу

818
go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go сгенерированный

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -3478,6 +3478,148 @@ func (m *ReplicaWasPromotedResponse) MarshalToSizedBufferVT(dAtA []byte) (int, e
return len(dAtA) - i, nil
}
func (m *ResetReplicationParametersRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
size := m.SizeVT()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBufferVT(dAtA[:size])
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *ResetReplicationParametersRequest) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
func (m *ResetReplicationParametersRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
i := len(dAtA)
_ = i
var l int
_ = l
if m.unknownFields != nil {
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
return len(dAtA) - i, nil
}
func (m *ResetReplicationParametersResponse) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
size := m.SizeVT()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBufferVT(dAtA[:size])
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *ResetReplicationParametersResponse) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
func (m *ResetReplicationParametersResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
i := len(dAtA)
_ = i
var l int
_ = l
if m.unknownFields != nil {
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
return len(dAtA) - i, nil
}
func (m *FullStatusRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
size := m.SizeVT()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBufferVT(dAtA[:size])
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *FullStatusRequest) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
func (m *FullStatusRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
i := len(dAtA)
_ = i
var l int
_ = l
if m.unknownFields != nil {
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
return len(dAtA) - i, nil
}
func (m *FullStatusResponse) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
}
size := m.SizeVT()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBufferVT(dAtA[:size])
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *FullStatusResponse) MarshalToVT(dAtA []byte) (int, error) {
size := m.SizeVT()
return m.MarshalToSizedBufferVT(dAtA[:size])
}
func (m *FullStatusResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) {
if m == nil {
return 0, nil
}
i := len(dAtA)
_ = i
var l int
_ = l
if m.unknownFields != nil {
i -= len(m.unknownFields)
copy(dAtA[i:], m.unknownFields)
}
if m.Status != nil {
size, err := m.Status.MarshalToSizedBufferVT(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarint(dAtA, i, uint64(size))
i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
func (m *SetReplicationSourceRequest) MarshalVT() (dAtA []byte, err error) {
if m == nil {
return nil, nil
@ -5869,6 +6011,58 @@ func (m *ReplicaWasPromotedResponse) SizeVT() (n int) {
return n
}
func (m *ResetReplicationParametersRequest) SizeVT() (n int) {
if m == nil {
return 0
}
var l int
_ = l
if m.unknownFields != nil {
n += len(m.unknownFields)
}
return n
}
func (m *ResetReplicationParametersResponse) SizeVT() (n int) {
if m == nil {
return 0
}
var l int
_ = l
if m.unknownFields != nil {
n += len(m.unknownFields)
}
return n
}
func (m *FullStatusRequest) SizeVT() (n int) {
if m == nil {
return 0
}
var l int
_ = l
if m.unknownFields != nil {
n += len(m.unknownFields)
}
return n
}
func (m *FullStatusResponse) SizeVT() (n int) {
if m == nil {
return 0
}
var l int
_ = l
if m.Status != nil {
l = m.Status.SizeVT()
n += 1 + l + sov(uint64(l))
}
if m.unknownFields != nil {
n += len(m.unknownFields)
}
return n
}
func (m *SetReplicationSourceRequest) SizeVT() (n int) {
if m == nil {
return 0
@ -13515,6 +13709,246 @@ func (m *ReplicaWasPromotedResponse) UnmarshalVT(dAtA []byte) error {
}
return nil
}
func (m *ResetReplicationParametersRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflow
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: ResetReplicationParametersRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: ResetReplicationParametersRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
default:
iNdEx = preIndex
skippy, err := skip(dAtA[iNdEx:])
if err != nil {
return err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLength
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *ResetReplicationParametersResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflow
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: ResetReplicationParametersResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: ResetReplicationParametersResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
default:
iNdEx = preIndex
skippy, err := skip(dAtA[iNdEx:])
if err != nil {
return err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLength
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *FullStatusRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflow
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: FullStatusRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: FullStatusRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
default:
iNdEx = preIndex
skippy, err := skip(dAtA[iNdEx:])
if err != nil {
return err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLength
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *FullStatusResponse) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflow
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: FullStatusResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: FullStatusResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflow
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLength
}
postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLength
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.Status == nil {
m.Status = &replicationdata.FullStatus{}
}
if err := m.Status.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skip(dAtA[iNdEx:])
if err != nil {
return err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLength
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *SetReplicationSourceRequest) UnmarshalVT(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0

Просмотреть файл

@ -45,7 +45,7 @@ var file_tabletmanagerservice_proto_rawDesc = []byte{
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x74, 0x61,
0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x73, 0x65, 0x72, 0x76, 0x69,
0x63, 0x65, 0x1a, 0x17, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xa9, 0x25, 0x0a, 0x0d,
0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x94, 0x27, 0x0a, 0x0d,
0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x12, 0x49, 0x0a,
0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65,
@ -296,59 +296,73 @@ var file_tabletmanagerservice_proto_rawDesc = []byte{
0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e,
0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
0x57, 0x61, 0x73, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x79, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c,
0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2e, 0x2e,
0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
0x61, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e,
0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
0x61, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
0x12, 0x76, 0x0a, 0x13, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x57, 0x61, 0x73, 0x52, 0x65,
0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x6c,
0x69, 0x63, 0x61, 0x57, 0x61, 0x73, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d,
0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69,
0x63, 0x61, 0x57, 0x61, 0x73, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8e, 0x01, 0x0a, 0x1b, 0x53, 0x74, 0x6f,
0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x47,
0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x35, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65,
0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x6f,
0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x47,
0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
0x36, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64,
0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x67, 0x0a, 0x0e, 0x50, 0x72, 0x6f,
0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x12, 0x28, 0x2e, 0x74, 0x61,
0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e,
0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74,
0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x22, 0x00, 0x12, 0x51, 0x0a, 0x06, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x20, 0x2e, 0x74,
0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61,
0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21,
0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61,
0x74, 0x61, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x72, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65,
0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x2b, 0x2e, 0x74, 0x61, 0x62,
0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8b, 0x01, 0x0a, 0x1a, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52,
0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65,
0x74, 0x65, 0x72, 0x73, 0x12, 0x34, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e,
0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65,
0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x74, 0x61, 0x62,
0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52,
0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x74,
0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x05, 0x56, 0x45, 0x78,
0x65, 0x63, 0x12, 0x1f, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x56, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x33, 0x5a, 0x31, 0x76, 0x69, 0x74, 0x65, 0x73,
0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76,
0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
0x6e, 0x61, 0x67, 0x65, 0x72, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x33,
0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50,
0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0a, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75,
0x73, 0x12, 0x24, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x75, 0x6c, 0x6c,
0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
0x12, 0x79, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2e, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65,
0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74,
0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63,
0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65,
0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x74,
0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63,
0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x13, 0x52,
0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x57, 0x61, 0x73, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74,
0x65, 0x64, 0x12, 0x2d, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x57, 0x61,
0x73, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65,
0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x57, 0x61, 0x73,
0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x65, 0x22, 0x00, 0x12, 0x8e, 0x01, 0x0a, 0x1b, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c,
0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61,
0x74, 0x75, 0x73, 0x12, 0x35, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61,
0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c,
0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61,
0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x74, 0x61, 0x62,
0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x53,
0x74, 0x6f, 0x70, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e,
0x64, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x22, 0x00, 0x12, 0x67, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x52,
0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x12, 0x28, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d,
0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f,
0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x1a, 0x29, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c,
0x69, 0x63, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a,
0x06, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x20, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x42, 0x61, 0x63, 0x6b,
0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x74, 0x61, 0x62, 0x6c,
0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x42, 0x61,
0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01,
0x12, 0x72, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42,
0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x2b, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61,
0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72,
0x65, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67,
0x65, 0x72, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x72,
0x6f, 0x6d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x22, 0x00, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x05, 0x56, 0x45, 0x78, 0x65, 0x63, 0x12, 0x1f, 0x2e,
0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61, 0x74,
0x61, 0x2e, 0x56, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20,
0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x64, 0x61,
0x74, 0x61, 0x2e, 0x56, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x22, 0x00, 0x42, 0x33, 0x5a, 0x31, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f,
0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72,
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var file_tabletmanagerservice_proto_goTypes = []interface{}{
@ -390,58 +404,62 @@ var file_tabletmanagerservice_proto_goTypes = []interface{}{
(*tabletmanagerdata.DemotePrimaryRequest)(nil), // 35: tabletmanagerdata.DemotePrimaryRequest
(*tabletmanagerdata.UndoDemotePrimaryRequest)(nil), // 36: tabletmanagerdata.UndoDemotePrimaryRequest
(*tabletmanagerdata.ReplicaWasPromotedRequest)(nil), // 37: tabletmanagerdata.ReplicaWasPromotedRequest
(*tabletmanagerdata.SetReplicationSourceRequest)(nil), // 38: tabletmanagerdata.SetReplicationSourceRequest
(*tabletmanagerdata.ReplicaWasRestartedRequest)(nil), // 39: tabletmanagerdata.ReplicaWasRestartedRequest
(*tabletmanagerdata.StopReplicationAndGetStatusRequest)(nil), // 40: tabletmanagerdata.StopReplicationAndGetStatusRequest
(*tabletmanagerdata.PromoteReplicaRequest)(nil), // 41: tabletmanagerdata.PromoteReplicaRequest
(*tabletmanagerdata.BackupRequest)(nil), // 42: tabletmanagerdata.BackupRequest
(*tabletmanagerdata.RestoreFromBackupRequest)(nil), // 43: tabletmanagerdata.RestoreFromBackupRequest
(*tabletmanagerdata.VExecRequest)(nil), // 44: tabletmanagerdata.VExecRequest
(*tabletmanagerdata.PingResponse)(nil), // 45: tabletmanagerdata.PingResponse
(*tabletmanagerdata.SleepResponse)(nil), // 46: tabletmanagerdata.SleepResponse
(*tabletmanagerdata.ExecuteHookResponse)(nil), // 47: tabletmanagerdata.ExecuteHookResponse
(*tabletmanagerdata.GetSchemaResponse)(nil), // 48: tabletmanagerdata.GetSchemaResponse
(*tabletmanagerdata.GetPermissionsResponse)(nil), // 49: tabletmanagerdata.GetPermissionsResponse
(*tabletmanagerdata.SetReadOnlyResponse)(nil), // 50: tabletmanagerdata.SetReadOnlyResponse
(*tabletmanagerdata.SetReadWriteResponse)(nil), // 51: tabletmanagerdata.SetReadWriteResponse
(*tabletmanagerdata.ChangeTypeResponse)(nil), // 52: tabletmanagerdata.ChangeTypeResponse
(*tabletmanagerdata.RefreshStateResponse)(nil), // 53: tabletmanagerdata.RefreshStateResponse
(*tabletmanagerdata.RunHealthCheckResponse)(nil), // 54: tabletmanagerdata.RunHealthCheckResponse
(*tabletmanagerdata.ReloadSchemaResponse)(nil), // 55: tabletmanagerdata.ReloadSchemaResponse
(*tabletmanagerdata.PreflightSchemaResponse)(nil), // 56: tabletmanagerdata.PreflightSchemaResponse
(*tabletmanagerdata.ApplySchemaResponse)(nil), // 57: tabletmanagerdata.ApplySchemaResponse
(*tabletmanagerdata.LockTablesResponse)(nil), // 58: tabletmanagerdata.LockTablesResponse
(*tabletmanagerdata.UnlockTablesResponse)(nil), // 59: tabletmanagerdata.UnlockTablesResponse
(*tabletmanagerdata.ExecuteQueryResponse)(nil), // 60: tabletmanagerdata.ExecuteQueryResponse
(*tabletmanagerdata.ExecuteFetchAsDbaResponse)(nil), // 61: tabletmanagerdata.ExecuteFetchAsDbaResponse
(*tabletmanagerdata.ExecuteFetchAsAllPrivsResponse)(nil), // 62: tabletmanagerdata.ExecuteFetchAsAllPrivsResponse
(*tabletmanagerdata.ExecuteFetchAsAppResponse)(nil), // 63: tabletmanagerdata.ExecuteFetchAsAppResponse
(*tabletmanagerdata.ReplicationStatusResponse)(nil), // 64: tabletmanagerdata.ReplicationStatusResponse
(*tabletmanagerdata.PrimaryStatusResponse)(nil), // 65: tabletmanagerdata.PrimaryStatusResponse
(*tabletmanagerdata.PrimaryPositionResponse)(nil), // 66: tabletmanagerdata.PrimaryPositionResponse
(*tabletmanagerdata.WaitForPositionResponse)(nil), // 67: tabletmanagerdata.WaitForPositionResponse
(*tabletmanagerdata.StopReplicationResponse)(nil), // 68: tabletmanagerdata.StopReplicationResponse
(*tabletmanagerdata.StopReplicationMinimumResponse)(nil), // 69: tabletmanagerdata.StopReplicationMinimumResponse
(*tabletmanagerdata.StartReplicationResponse)(nil), // 70: tabletmanagerdata.StartReplicationResponse
(*tabletmanagerdata.StartReplicationUntilAfterResponse)(nil), // 71: tabletmanagerdata.StartReplicationUntilAfterResponse
(*tabletmanagerdata.GetReplicasResponse)(nil), // 72: tabletmanagerdata.GetReplicasResponse
(*tabletmanagerdata.VReplicationExecResponse)(nil), // 73: tabletmanagerdata.VReplicationExecResponse
(*tabletmanagerdata.VReplicationWaitForPosResponse)(nil), // 74: tabletmanagerdata.VReplicationWaitForPosResponse
(*tabletmanagerdata.VDiffResponse)(nil), // 75: tabletmanagerdata.VDiffResponse
(*tabletmanagerdata.ResetReplicationResponse)(nil), // 76: tabletmanagerdata.ResetReplicationResponse
(*tabletmanagerdata.InitPrimaryResponse)(nil), // 77: tabletmanagerdata.InitPrimaryResponse
(*tabletmanagerdata.PopulateReparentJournalResponse)(nil), // 78: tabletmanagerdata.PopulateReparentJournalResponse
(*tabletmanagerdata.InitReplicaResponse)(nil), // 79: tabletmanagerdata.InitReplicaResponse
(*tabletmanagerdata.DemotePrimaryResponse)(nil), // 80: tabletmanagerdata.DemotePrimaryResponse
(*tabletmanagerdata.UndoDemotePrimaryResponse)(nil), // 81: tabletmanagerdata.UndoDemotePrimaryResponse
(*tabletmanagerdata.ReplicaWasPromotedResponse)(nil), // 82: tabletmanagerdata.ReplicaWasPromotedResponse
(*tabletmanagerdata.SetReplicationSourceResponse)(nil), // 83: tabletmanagerdata.SetReplicationSourceResponse
(*tabletmanagerdata.ReplicaWasRestartedResponse)(nil), // 84: tabletmanagerdata.ReplicaWasRestartedResponse
(*tabletmanagerdata.StopReplicationAndGetStatusResponse)(nil), // 85: tabletmanagerdata.StopReplicationAndGetStatusResponse
(*tabletmanagerdata.PromoteReplicaResponse)(nil), // 86: tabletmanagerdata.PromoteReplicaResponse
(*tabletmanagerdata.BackupResponse)(nil), // 87: tabletmanagerdata.BackupResponse
(*tabletmanagerdata.RestoreFromBackupResponse)(nil), // 88: tabletmanagerdata.RestoreFromBackupResponse
(*tabletmanagerdata.VExecResponse)(nil), // 89: tabletmanagerdata.VExecResponse
(*tabletmanagerdata.ResetReplicationParametersRequest)(nil), // 38: tabletmanagerdata.ResetReplicationParametersRequest
(*tabletmanagerdata.FullStatusRequest)(nil), // 39: tabletmanagerdata.FullStatusRequest
(*tabletmanagerdata.SetReplicationSourceRequest)(nil), // 40: tabletmanagerdata.SetReplicationSourceRequest
(*tabletmanagerdata.ReplicaWasRestartedRequest)(nil), // 41: tabletmanagerdata.ReplicaWasRestartedRequest
(*tabletmanagerdata.StopReplicationAndGetStatusRequest)(nil), // 42: tabletmanagerdata.StopReplicationAndGetStatusRequest
(*tabletmanagerdata.PromoteReplicaRequest)(nil), // 43: tabletmanagerdata.PromoteReplicaRequest
(*tabletmanagerdata.BackupRequest)(nil), // 44: tabletmanagerdata.BackupRequest
(*tabletmanagerdata.RestoreFromBackupRequest)(nil), // 45: tabletmanagerdata.RestoreFromBackupRequest
(*tabletmanagerdata.VExecRequest)(nil), // 46: tabletmanagerdata.VExecRequest
(*tabletmanagerdata.PingResponse)(nil), // 47: tabletmanagerdata.PingResponse
(*tabletmanagerdata.SleepResponse)(nil), // 48: tabletmanagerdata.SleepResponse
(*tabletmanagerdata.ExecuteHookResponse)(nil), // 49: tabletmanagerdata.ExecuteHookResponse
(*tabletmanagerdata.GetSchemaResponse)(nil), // 50: tabletmanagerdata.GetSchemaResponse
(*tabletmanagerdata.GetPermissionsResponse)(nil), // 51: tabletmanagerdata.GetPermissionsResponse
(*tabletmanagerdata.SetReadOnlyResponse)(nil), // 52: tabletmanagerdata.SetReadOnlyResponse
(*tabletmanagerdata.SetReadWriteResponse)(nil), // 53: tabletmanagerdata.SetReadWriteResponse
(*tabletmanagerdata.ChangeTypeResponse)(nil), // 54: tabletmanagerdata.ChangeTypeResponse
(*tabletmanagerdata.RefreshStateResponse)(nil), // 55: tabletmanagerdata.RefreshStateResponse
(*tabletmanagerdata.RunHealthCheckResponse)(nil), // 56: tabletmanagerdata.RunHealthCheckResponse
(*tabletmanagerdata.ReloadSchemaResponse)(nil), // 57: tabletmanagerdata.ReloadSchemaResponse
(*tabletmanagerdata.PreflightSchemaResponse)(nil), // 58: tabletmanagerdata.PreflightSchemaResponse
(*tabletmanagerdata.ApplySchemaResponse)(nil), // 59: tabletmanagerdata.ApplySchemaResponse
(*tabletmanagerdata.LockTablesResponse)(nil), // 60: tabletmanagerdata.LockTablesResponse
(*tabletmanagerdata.UnlockTablesResponse)(nil), // 61: tabletmanagerdata.UnlockTablesResponse
(*tabletmanagerdata.ExecuteQueryResponse)(nil), // 62: tabletmanagerdata.ExecuteQueryResponse
(*tabletmanagerdata.ExecuteFetchAsDbaResponse)(nil), // 63: tabletmanagerdata.ExecuteFetchAsDbaResponse
(*tabletmanagerdata.ExecuteFetchAsAllPrivsResponse)(nil), // 64: tabletmanagerdata.ExecuteFetchAsAllPrivsResponse
(*tabletmanagerdata.ExecuteFetchAsAppResponse)(nil), // 65: tabletmanagerdata.ExecuteFetchAsAppResponse
(*tabletmanagerdata.ReplicationStatusResponse)(nil), // 66: tabletmanagerdata.ReplicationStatusResponse
(*tabletmanagerdata.PrimaryStatusResponse)(nil), // 67: tabletmanagerdata.PrimaryStatusResponse
(*tabletmanagerdata.PrimaryPositionResponse)(nil), // 68: tabletmanagerdata.PrimaryPositionResponse
(*tabletmanagerdata.WaitForPositionResponse)(nil), // 69: tabletmanagerdata.WaitForPositionResponse
(*tabletmanagerdata.StopReplicationResponse)(nil), // 70: tabletmanagerdata.StopReplicationResponse
(*tabletmanagerdata.StopReplicationMinimumResponse)(nil), // 71: tabletmanagerdata.StopReplicationMinimumResponse
(*tabletmanagerdata.StartReplicationResponse)(nil), // 72: tabletmanagerdata.StartReplicationResponse
(*tabletmanagerdata.StartReplicationUntilAfterResponse)(nil), // 73: tabletmanagerdata.StartReplicationUntilAfterResponse
(*tabletmanagerdata.GetReplicasResponse)(nil), // 74: tabletmanagerdata.GetReplicasResponse
(*tabletmanagerdata.VReplicationExecResponse)(nil), // 75: tabletmanagerdata.VReplicationExecResponse
(*tabletmanagerdata.VReplicationWaitForPosResponse)(nil), // 76: tabletmanagerdata.VReplicationWaitForPosResponse
(*tabletmanagerdata.VDiffResponse)(nil), // 77: tabletmanagerdata.VDiffResponse
(*tabletmanagerdata.ResetReplicationResponse)(nil), // 78: tabletmanagerdata.ResetReplicationResponse
(*tabletmanagerdata.InitPrimaryResponse)(nil), // 79: tabletmanagerdata.InitPrimaryResponse
(*tabletmanagerdata.PopulateReparentJournalResponse)(nil), // 80: tabletmanagerdata.PopulateReparentJournalResponse
(*tabletmanagerdata.InitReplicaResponse)(nil), // 81: tabletmanagerdata.InitReplicaResponse
(*tabletmanagerdata.DemotePrimaryResponse)(nil), // 82: tabletmanagerdata.DemotePrimaryResponse
(*tabletmanagerdata.UndoDemotePrimaryResponse)(nil), // 83: tabletmanagerdata.UndoDemotePrimaryResponse
(*tabletmanagerdata.ReplicaWasPromotedResponse)(nil), // 84: tabletmanagerdata.ReplicaWasPromotedResponse
(*tabletmanagerdata.ResetReplicationParametersResponse)(nil), // 85: tabletmanagerdata.ResetReplicationParametersResponse
(*tabletmanagerdata.FullStatusResponse)(nil), // 86: tabletmanagerdata.FullStatusResponse
(*tabletmanagerdata.SetReplicationSourceResponse)(nil), // 87: tabletmanagerdata.SetReplicationSourceResponse
(*tabletmanagerdata.ReplicaWasRestartedResponse)(nil), // 88: tabletmanagerdata.ReplicaWasRestartedResponse
(*tabletmanagerdata.StopReplicationAndGetStatusResponse)(nil), // 89: tabletmanagerdata.StopReplicationAndGetStatusResponse
(*tabletmanagerdata.PromoteReplicaResponse)(nil), // 90: tabletmanagerdata.PromoteReplicaResponse
(*tabletmanagerdata.BackupResponse)(nil), // 91: tabletmanagerdata.BackupResponse
(*tabletmanagerdata.RestoreFromBackupResponse)(nil), // 92: tabletmanagerdata.RestoreFromBackupResponse
(*tabletmanagerdata.VExecResponse)(nil), // 93: tabletmanagerdata.VExecResponse
}
var file_tabletmanagerservice_proto_depIdxs = []int32{
0, // 0: tabletmanagerservice.TabletManager.Ping:input_type -> tabletmanagerdata.PingRequest
@ -482,60 +500,64 @@ var file_tabletmanagerservice_proto_depIdxs = []int32{
35, // 35: tabletmanagerservice.TabletManager.DemotePrimary:input_type -> tabletmanagerdata.DemotePrimaryRequest
36, // 36: tabletmanagerservice.TabletManager.UndoDemotePrimary:input_type -> tabletmanagerdata.UndoDemotePrimaryRequest
37, // 37: tabletmanagerservice.TabletManager.ReplicaWasPromoted:input_type -> tabletmanagerdata.ReplicaWasPromotedRequest
38, // 38: tabletmanagerservice.TabletManager.SetReplicationSource:input_type -> tabletmanagerdata.SetReplicationSourceRequest
39, // 39: tabletmanagerservice.TabletManager.ReplicaWasRestarted:input_type -> tabletmanagerdata.ReplicaWasRestartedRequest
40, // 40: tabletmanagerservice.TabletManager.StopReplicationAndGetStatus:input_type -> tabletmanagerdata.StopReplicationAndGetStatusRequest
41, // 41: tabletmanagerservice.TabletManager.PromoteReplica:input_type -> tabletmanagerdata.PromoteReplicaRequest
42, // 42: tabletmanagerservice.TabletManager.Backup:input_type -> tabletmanagerdata.BackupRequest
43, // 43: tabletmanagerservice.TabletManager.RestoreFromBackup:input_type -> tabletmanagerdata.RestoreFromBackupRequest
44, // 44: tabletmanagerservice.TabletManager.VExec:input_type -> tabletmanagerdata.VExecRequest
45, // 45: tabletmanagerservice.TabletManager.Ping:output_type -> tabletmanagerdata.PingResponse
46, // 46: tabletmanagerservice.TabletManager.Sleep:output_type -> tabletmanagerdata.SleepResponse
47, // 47: tabletmanagerservice.TabletManager.ExecuteHook:output_type -> tabletmanagerdata.ExecuteHookResponse
48, // 48: tabletmanagerservice.TabletManager.GetSchema:output_type -> tabletmanagerdata.GetSchemaResponse
49, // 49: tabletmanagerservice.TabletManager.GetPermissions:output_type -> tabletmanagerdata.GetPermissionsResponse
50, // 50: tabletmanagerservice.TabletManager.SetReadOnly:output_type -> tabletmanagerdata.SetReadOnlyResponse
51, // 51: tabletmanagerservice.TabletManager.SetReadWrite:output_type -> tabletmanagerdata.SetReadWriteResponse
52, // 52: tabletmanagerservice.TabletManager.ChangeType:output_type -> tabletmanagerdata.ChangeTypeResponse
53, // 53: tabletmanagerservice.TabletManager.RefreshState:output_type -> tabletmanagerdata.RefreshStateResponse
54, // 54: tabletmanagerservice.TabletManager.RunHealthCheck:output_type -> tabletmanagerdata.RunHealthCheckResponse
55, // 55: tabletmanagerservice.TabletManager.ReloadSchema:output_type -> tabletmanagerdata.ReloadSchemaResponse
56, // 56: tabletmanagerservice.TabletManager.PreflightSchema:output_type -> tabletmanagerdata.PreflightSchemaResponse
57, // 57: tabletmanagerservice.TabletManager.ApplySchema:output_type -> tabletmanagerdata.ApplySchemaResponse
58, // 58: tabletmanagerservice.TabletManager.LockTables:output_type -> tabletmanagerdata.LockTablesResponse
59, // 59: tabletmanagerservice.TabletManager.UnlockTables:output_type -> tabletmanagerdata.UnlockTablesResponse
60, // 60: tabletmanagerservice.TabletManager.ExecuteQuery:output_type -> tabletmanagerdata.ExecuteQueryResponse
61, // 61: tabletmanagerservice.TabletManager.ExecuteFetchAsDba:output_type -> tabletmanagerdata.ExecuteFetchAsDbaResponse
62, // 62: tabletmanagerservice.TabletManager.ExecuteFetchAsAllPrivs:output_type -> tabletmanagerdata.ExecuteFetchAsAllPrivsResponse
63, // 63: tabletmanagerservice.TabletManager.ExecuteFetchAsApp:output_type -> tabletmanagerdata.ExecuteFetchAsAppResponse
64, // 64: tabletmanagerservice.TabletManager.ReplicationStatus:output_type -> tabletmanagerdata.ReplicationStatusResponse
65, // 65: tabletmanagerservice.TabletManager.PrimaryStatus:output_type -> tabletmanagerdata.PrimaryStatusResponse
66, // 66: tabletmanagerservice.TabletManager.PrimaryPosition:output_type -> tabletmanagerdata.PrimaryPositionResponse
67, // 67: tabletmanagerservice.TabletManager.WaitForPosition:output_type -> tabletmanagerdata.WaitForPositionResponse
68, // 68: tabletmanagerservice.TabletManager.StopReplication:output_type -> tabletmanagerdata.StopReplicationResponse
69, // 69: tabletmanagerservice.TabletManager.StopReplicationMinimum:output_type -> tabletmanagerdata.StopReplicationMinimumResponse
70, // 70: tabletmanagerservice.TabletManager.StartReplication:output_type -> tabletmanagerdata.StartReplicationResponse
71, // 71: tabletmanagerservice.TabletManager.StartReplicationUntilAfter:output_type -> tabletmanagerdata.StartReplicationUntilAfterResponse
72, // 72: tabletmanagerservice.TabletManager.GetReplicas:output_type -> tabletmanagerdata.GetReplicasResponse
73, // 73: tabletmanagerservice.TabletManager.VReplicationExec:output_type -> tabletmanagerdata.VReplicationExecResponse
74, // 74: tabletmanagerservice.TabletManager.VReplicationWaitForPos:output_type -> tabletmanagerdata.VReplicationWaitForPosResponse
75, // 75: tabletmanagerservice.TabletManager.VDiff:output_type -> tabletmanagerdata.VDiffResponse
76, // 76: tabletmanagerservice.TabletManager.ResetReplication:output_type -> tabletmanagerdata.ResetReplicationResponse
77, // 77: tabletmanagerservice.TabletManager.InitPrimary:output_type -> tabletmanagerdata.InitPrimaryResponse
78, // 78: tabletmanagerservice.TabletManager.PopulateReparentJournal:output_type -> tabletmanagerdata.PopulateReparentJournalResponse
79, // 79: tabletmanagerservice.TabletManager.InitReplica:output_type -> tabletmanagerdata.InitReplicaResponse
80, // 80: tabletmanagerservice.TabletManager.DemotePrimary:output_type -> tabletmanagerdata.DemotePrimaryResponse
81, // 81: tabletmanagerservice.TabletManager.UndoDemotePrimary:output_type -> tabletmanagerdata.UndoDemotePrimaryResponse
82, // 82: tabletmanagerservice.TabletManager.ReplicaWasPromoted:output_type -> tabletmanagerdata.ReplicaWasPromotedResponse
83, // 83: tabletmanagerservice.TabletManager.SetReplicationSource:output_type -> tabletmanagerdata.SetReplicationSourceResponse
84, // 84: tabletmanagerservice.TabletManager.ReplicaWasRestarted:output_type -> tabletmanagerdata.ReplicaWasRestartedResponse
85, // 85: tabletmanagerservice.TabletManager.StopReplicationAndGetStatus:output_type -> tabletmanagerdata.StopReplicationAndGetStatusResponse
86, // 86: tabletmanagerservice.TabletManager.PromoteReplica:output_type -> tabletmanagerdata.PromoteReplicaResponse
87, // 87: tabletmanagerservice.TabletManager.Backup:output_type -> tabletmanagerdata.BackupResponse
88, // 88: tabletmanagerservice.TabletManager.RestoreFromBackup:output_type -> tabletmanagerdata.RestoreFromBackupResponse
89, // 89: tabletmanagerservice.TabletManager.VExec:output_type -> tabletmanagerdata.VExecResponse
45, // [45:90] is the sub-list for method output_type
0, // [0:45] is the sub-list for method input_type
38, // 38: tabletmanagerservice.TabletManager.ResetReplicationParameters:input_type -> tabletmanagerdata.ResetReplicationParametersRequest
39, // 39: tabletmanagerservice.TabletManager.FullStatus:input_type -> tabletmanagerdata.FullStatusRequest
40, // 40: tabletmanagerservice.TabletManager.SetReplicationSource:input_type -> tabletmanagerdata.SetReplicationSourceRequest
41, // 41: tabletmanagerservice.TabletManager.ReplicaWasRestarted:input_type -> tabletmanagerdata.ReplicaWasRestartedRequest
42, // 42: tabletmanagerservice.TabletManager.StopReplicationAndGetStatus:input_type -> tabletmanagerdata.StopReplicationAndGetStatusRequest
43, // 43: tabletmanagerservice.TabletManager.PromoteReplica:input_type -> tabletmanagerdata.PromoteReplicaRequest
44, // 44: tabletmanagerservice.TabletManager.Backup:input_type -> tabletmanagerdata.BackupRequest
45, // 45: tabletmanagerservice.TabletManager.RestoreFromBackup:input_type -> tabletmanagerdata.RestoreFromBackupRequest
46, // 46: tabletmanagerservice.TabletManager.VExec:input_type -> tabletmanagerdata.VExecRequest
47, // 47: tabletmanagerservice.TabletManager.Ping:output_type -> tabletmanagerdata.PingResponse
48, // 48: tabletmanagerservice.TabletManager.Sleep:output_type -> tabletmanagerdata.SleepResponse
49, // 49: tabletmanagerservice.TabletManager.ExecuteHook:output_type -> tabletmanagerdata.ExecuteHookResponse
50, // 50: tabletmanagerservice.TabletManager.GetSchema:output_type -> tabletmanagerdata.GetSchemaResponse
51, // 51: tabletmanagerservice.TabletManager.GetPermissions:output_type -> tabletmanagerdata.GetPermissionsResponse
52, // 52: tabletmanagerservice.TabletManager.SetReadOnly:output_type -> tabletmanagerdata.SetReadOnlyResponse
53, // 53: tabletmanagerservice.TabletManager.SetReadWrite:output_type -> tabletmanagerdata.SetReadWriteResponse
54, // 54: tabletmanagerservice.TabletManager.ChangeType:output_type -> tabletmanagerdata.ChangeTypeResponse
55, // 55: tabletmanagerservice.TabletManager.RefreshState:output_type -> tabletmanagerdata.RefreshStateResponse
56, // 56: tabletmanagerservice.TabletManager.RunHealthCheck:output_type -> tabletmanagerdata.RunHealthCheckResponse
57, // 57: tabletmanagerservice.TabletManager.ReloadSchema:output_type -> tabletmanagerdata.ReloadSchemaResponse
58, // 58: tabletmanagerservice.TabletManager.PreflightSchema:output_type -> tabletmanagerdata.PreflightSchemaResponse
59, // 59: tabletmanagerservice.TabletManager.ApplySchema:output_type -> tabletmanagerdata.ApplySchemaResponse
60, // 60: tabletmanagerservice.TabletManager.LockTables:output_type -> tabletmanagerdata.LockTablesResponse
61, // 61: tabletmanagerservice.TabletManager.UnlockTables:output_type -> tabletmanagerdata.UnlockTablesResponse
62, // 62: tabletmanagerservice.TabletManager.ExecuteQuery:output_type -> tabletmanagerdata.ExecuteQueryResponse
63, // 63: tabletmanagerservice.TabletManager.ExecuteFetchAsDba:output_type -> tabletmanagerdata.ExecuteFetchAsDbaResponse
64, // 64: tabletmanagerservice.TabletManager.ExecuteFetchAsAllPrivs:output_type -> tabletmanagerdata.ExecuteFetchAsAllPrivsResponse
65, // 65: tabletmanagerservice.TabletManager.ExecuteFetchAsApp:output_type -> tabletmanagerdata.ExecuteFetchAsAppResponse
66, // 66: tabletmanagerservice.TabletManager.ReplicationStatus:output_type -> tabletmanagerdata.ReplicationStatusResponse
67, // 67: tabletmanagerservice.TabletManager.PrimaryStatus:output_type -> tabletmanagerdata.PrimaryStatusResponse
68, // 68: tabletmanagerservice.TabletManager.PrimaryPosition:output_type -> tabletmanagerdata.PrimaryPositionResponse
69, // 69: tabletmanagerservice.TabletManager.WaitForPosition:output_type -> tabletmanagerdata.WaitForPositionResponse
70, // 70: tabletmanagerservice.TabletManager.StopReplication:output_type -> tabletmanagerdata.StopReplicationResponse
71, // 71: tabletmanagerservice.TabletManager.StopReplicationMinimum:output_type -> tabletmanagerdata.StopReplicationMinimumResponse
72, // 72: tabletmanagerservice.TabletManager.StartReplication:output_type -> tabletmanagerdata.StartReplicationResponse
73, // 73: tabletmanagerservice.TabletManager.StartReplicationUntilAfter:output_type -> tabletmanagerdata.StartReplicationUntilAfterResponse
74, // 74: tabletmanagerservice.TabletManager.GetReplicas:output_type -> tabletmanagerdata.GetReplicasResponse
75, // 75: tabletmanagerservice.TabletManager.VReplicationExec:output_type -> tabletmanagerdata.VReplicationExecResponse
76, // 76: tabletmanagerservice.TabletManager.VReplicationWaitForPos:output_type -> tabletmanagerdata.VReplicationWaitForPosResponse
77, // 77: tabletmanagerservice.TabletManager.VDiff:output_type -> tabletmanagerdata.VDiffResponse
78, // 78: tabletmanagerservice.TabletManager.ResetReplication:output_type -> tabletmanagerdata.ResetReplicationResponse
79, // 79: tabletmanagerservice.TabletManager.InitPrimary:output_type -> tabletmanagerdata.InitPrimaryResponse
80, // 80: tabletmanagerservice.TabletManager.PopulateReparentJournal:output_type -> tabletmanagerdata.PopulateReparentJournalResponse
81, // 81: tabletmanagerservice.TabletManager.InitReplica:output_type -> tabletmanagerdata.InitReplicaResponse
82, // 82: tabletmanagerservice.TabletManager.DemotePrimary:output_type -> tabletmanagerdata.DemotePrimaryResponse
83, // 83: tabletmanagerservice.TabletManager.UndoDemotePrimary:output_type -> tabletmanagerdata.UndoDemotePrimaryResponse
84, // 84: tabletmanagerservice.TabletManager.ReplicaWasPromoted:output_type -> tabletmanagerdata.ReplicaWasPromotedResponse
85, // 85: tabletmanagerservice.TabletManager.ResetReplicationParameters:output_type -> tabletmanagerdata.ResetReplicationParametersResponse
86, // 86: tabletmanagerservice.TabletManager.FullStatus:output_type -> tabletmanagerdata.FullStatusResponse
87, // 87: tabletmanagerservice.TabletManager.SetReplicationSource:output_type -> tabletmanagerdata.SetReplicationSourceResponse
88, // 88: tabletmanagerservice.TabletManager.ReplicaWasRestarted:output_type -> tabletmanagerdata.ReplicaWasRestartedResponse
89, // 89: tabletmanagerservice.TabletManager.StopReplicationAndGetStatus:output_type -> tabletmanagerdata.StopReplicationAndGetStatusResponse
90, // 90: tabletmanagerservice.TabletManager.PromoteReplica:output_type -> tabletmanagerdata.PromoteReplicaResponse
91, // 91: tabletmanagerservice.TabletManager.Backup:output_type -> tabletmanagerdata.BackupResponse
92, // 92: tabletmanagerservice.TabletManager.RestoreFromBackup:output_type -> tabletmanagerdata.RestoreFromBackupResponse
93, // 93: tabletmanagerservice.TabletManager.VExec:output_type -> tabletmanagerdata.VExecResponse
47, // [47:94] is the sub-list for method output_type
0, // [0:47] is the sub-list for method input_type
0, // [0:0] is the sub-list for extension type_name
0, // [0:0] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name

Просмотреть файл

@ -88,6 +88,10 @@ type TabletManagerClient interface {
UndoDemotePrimary(ctx context.Context, in *tabletmanagerdata.UndoDemotePrimaryRequest, opts ...grpc.CallOption) (*tabletmanagerdata.UndoDemotePrimaryResponse, error)
// ReplicaWasPromoted tells the remote tablet it is now the primary
ReplicaWasPromoted(ctx context.Context, in *tabletmanagerdata.ReplicaWasPromotedRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ReplicaWasPromotedResponse, error)
// ResetReplicationParameters resets the replica replication parameters
ResetReplicationParameters(ctx context.Context, in *tabletmanagerdata.ResetReplicationParametersRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ResetReplicationParametersResponse, error)
// FullStatus collects and returns the full status of MySQL including the replication information, semi-sync information, GTID information among others
FullStatus(ctx context.Context, in *tabletmanagerdata.FullStatusRequest, opts ...grpc.CallOption) (*tabletmanagerdata.FullStatusResponse, error)
// SetReplicationSource tells the replica to reparent
SetReplicationSource(ctx context.Context, in *tabletmanagerdata.SetReplicationSourceRequest, opts ...grpc.CallOption) (*tabletmanagerdata.SetReplicationSourceResponse, error)
// ReplicaWasRestarted tells the remote tablet its primary has changed
@ -454,6 +458,24 @@ func (c *tabletManagerClient) ReplicaWasPromoted(ctx context.Context, in *tablet
return out, nil
}
func (c *tabletManagerClient) ResetReplicationParameters(ctx context.Context, in *tabletmanagerdata.ResetReplicationParametersRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ResetReplicationParametersResponse, error) {
out := new(tabletmanagerdata.ResetReplicationParametersResponse)
err := c.cc.Invoke(ctx, "/tabletmanagerservice.TabletManager/ResetReplicationParameters", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *tabletManagerClient) FullStatus(ctx context.Context, in *tabletmanagerdata.FullStatusRequest, opts ...grpc.CallOption) (*tabletmanagerdata.FullStatusResponse, error) {
out := new(tabletmanagerdata.FullStatusResponse)
err := c.cc.Invoke(ctx, "/tabletmanagerservice.TabletManager/FullStatus", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *tabletManagerClient) SetReplicationSource(ctx context.Context, in *tabletmanagerdata.SetReplicationSourceRequest, opts ...grpc.CallOption) (*tabletmanagerdata.SetReplicationSourceResponse, error) {
out := new(tabletmanagerdata.SetReplicationSourceResponse)
err := c.cc.Invoke(ctx, "/tabletmanagerservice.TabletManager/SetReplicationSource", in, out, opts...)
@ -632,6 +654,10 @@ type TabletManagerServer interface {
UndoDemotePrimary(context.Context, *tabletmanagerdata.UndoDemotePrimaryRequest) (*tabletmanagerdata.UndoDemotePrimaryResponse, error)
// ReplicaWasPromoted tells the remote tablet it is now the primary
ReplicaWasPromoted(context.Context, *tabletmanagerdata.ReplicaWasPromotedRequest) (*tabletmanagerdata.ReplicaWasPromotedResponse, error)
// ResetReplicationParameters resets the replica replication parameters
ResetReplicationParameters(context.Context, *tabletmanagerdata.ResetReplicationParametersRequest) (*tabletmanagerdata.ResetReplicationParametersResponse, error)
// FullStatus collects and returns the full status of MySQL including the replication information, semi-sync information, GTID information among others
FullStatus(context.Context, *tabletmanagerdata.FullStatusRequest) (*tabletmanagerdata.FullStatusResponse, error)
// SetReplicationSource tells the replica to reparent
SetReplicationSource(context.Context, *tabletmanagerdata.SetReplicationSourceRequest) (*tabletmanagerdata.SetReplicationSourceResponse, error)
// ReplicaWasRestarted tells the remote tablet its primary has changed
@ -767,6 +793,12 @@ func (UnimplementedTabletManagerServer) UndoDemotePrimary(context.Context, *tabl
func (UnimplementedTabletManagerServer) ReplicaWasPromoted(context.Context, *tabletmanagerdata.ReplicaWasPromotedRequest) (*tabletmanagerdata.ReplicaWasPromotedResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ReplicaWasPromoted not implemented")
}
func (UnimplementedTabletManagerServer) ResetReplicationParameters(context.Context, *tabletmanagerdata.ResetReplicationParametersRequest) (*tabletmanagerdata.ResetReplicationParametersResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ResetReplicationParameters not implemented")
}
func (UnimplementedTabletManagerServer) FullStatus(context.Context, *tabletmanagerdata.FullStatusRequest) (*tabletmanagerdata.FullStatusResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method FullStatus not implemented")
}
func (UnimplementedTabletManagerServer) SetReplicationSource(context.Context, *tabletmanagerdata.SetReplicationSourceRequest) (*tabletmanagerdata.SetReplicationSourceResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method SetReplicationSource not implemented")
}
@ -1485,6 +1517,42 @@ func _TabletManager_ReplicaWasPromoted_Handler(srv interface{}, ctx context.Cont
return interceptor(ctx, in, info, handler)
}
func _TabletManager_ResetReplicationParameters_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(tabletmanagerdata.ResetReplicationParametersRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(TabletManagerServer).ResetReplicationParameters(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/tabletmanagerservice.TabletManager/ResetReplicationParameters",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(TabletManagerServer).ResetReplicationParameters(ctx, req.(*tabletmanagerdata.ResetReplicationParametersRequest))
}
return interceptor(ctx, in, info, handler)
}
func _TabletManager_FullStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(tabletmanagerdata.FullStatusRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(TabletManagerServer).FullStatus(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/tabletmanagerservice.TabletManager/FullStatus",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(TabletManagerServer).FullStatus(ctx, req.(*tabletmanagerdata.FullStatusRequest))
}
return interceptor(ctx, in, info, handler)
}
func _TabletManager_SetReplicationSource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(tabletmanagerdata.SetReplicationSourceRequest)
if err := dec(in); err != nil {
@ -1776,6 +1844,14 @@ var TabletManager_ServiceDesc = grpc.ServiceDesc{
MethodName: "ReplicaWasPromoted",
Handler: _TabletManager_ReplicaWasPromoted_Handler,
},
{
MethodName: "ResetReplicationParameters",
Handler: _TabletManager_ResetReplicationParameters_Handler,
},
{
MethodName: "FullStatus",
Handler: _TabletManager_FullStatus_Handler,
},
{
MethodName: "SetReplicationSource",
Handler: _TabletManager_SetReplicationSource_Handler,

Просмотреть файл

@ -925,6 +925,10 @@ func (itmc *internalTabletManagerClient) ReplicationStatus(context.Context, *top
return nil, fmt.Errorf("not implemented in vtcombo")
}
func (itmc *internalTabletManagerClient) FullStatus(context.Context, *topodatapb.Tablet) (*replicationdatapb.FullStatus, error) {
return nil, fmt.Errorf("not implemented in vtcombo")
}
func (itmc *internalTabletManagerClient) StopReplication(context.Context, *topodatapb.Tablet) error {
return fmt.Errorf("not implemented in vtcombo")
}
@ -953,6 +957,10 @@ func (itmc *internalTabletManagerClient) ReplicaWasPromoted(context.Context, *to
return fmt.Errorf("not implemented in vtcombo")
}
func (itmc *internalTabletManagerClient) ResetReplicationParameters(context.Context, *topodatapb.Tablet) error {
return fmt.Errorf("not implemented in vtcombo")
}
func (itmc *internalTabletManagerClient) ReplicaWasRestarted(context.Context, *topodatapb.Tablet, *topodatapb.TabletAlias) error {
return fmt.Errorf("not implemented in vtcombo")
}

Просмотреть файл

@ -336,7 +336,7 @@ func stopReplicationAndBuildStatusMaps(
func WaitForRelayLogsToApply(ctx context.Context, tmc tmclient.TabletManagerClient, tabletInfo *topo.TabletInfo, status *replicationdatapb.StopReplicationStatus) error {
switch status.After.RelayLogPosition {
case "":
return tmc.WaitForPosition(ctx, tabletInfo.Tablet, status.After.FileRelayLogPosition)
return tmc.WaitForPosition(ctx, tabletInfo.Tablet, status.After.RelayLogSourceBinlogEquivalentPosition)
default:
return tmc.WaitForPosition(ctx, tabletInfo.Tablet, status.After.RelayLogPosition)
}

Просмотреть файл

@ -1349,7 +1349,7 @@ func TestWaitForRelayLogsToApply(t *testing.T) {
client: &waitForRelayLogsToApplyTestTMClient{},
status: &replicationdatapb.StopReplicationStatus{
After: &replicationdatapb.Status{
FileRelayLogPosition: "file-relay-pos",
RelayLogSourceBinlogEquivalentPosition: "file-relay-pos",
},
},
expectedCalledPositions: []string{"file-relay-pos"},

Просмотреть файл

@ -180,6 +180,11 @@ func (client *FakeTabletManagerClient) ReplicationStatus(ctx context.Context, ta
return &replicationdatapb.Status{}, nil
}
// FullStatus is part of the tmclient.TabletManagerClient interface.
func (client *FakeTabletManagerClient) FullStatus(ctx context.Context, tablet *topodatapb.Tablet) (*replicationdatapb.FullStatus, error) {
return &replicationdatapb.FullStatus{}, nil
}
// StopReplication is part of the tmclient.TabletManagerClient interface.
func (client *FakeTabletManagerClient) StopReplication(ctx context.Context, tablet *topodatapb.Tablet) error {
return nil
@ -220,6 +225,11 @@ func (client *FakeTabletManagerClient) ReplicaWasPromoted(ctx context.Context, t
return nil
}
// ResetReplicationParameters is part of the tmclient.TabletManagerClient interface.
func (client *FakeTabletManagerClient) ResetReplicationParameters(ctx context.Context, tablet *topodatapb.Tablet) error {
return nil
}
// ReplicaWasRestarted is part of the tmclient.TabletManagerClient interface.
func (client *FakeTabletManagerClient) ReplicaWasRestarted(ctx context.Context, tablet *topodatapb.Tablet, parent *topodatapb.TabletAlias) error {
return nil

Просмотреть файл

@ -532,6 +532,20 @@ func (client *Client) ReplicationStatus(ctx context.Context, tablet *topodatapb.
return response.Status, nil
}
// FullStatus is part of the tmclient.TabletManagerClient interface.
func (client *Client) FullStatus(ctx context.Context, tablet *topodatapb.Tablet) (*replicationdatapb.FullStatus, error) {
c, closer, err := client.dialer.dial(ctx, tablet)
if err != nil {
return nil, err
}
defer closer.Close()
response, err := c.FullStatus(ctx, &tabletmanagerdatapb.FullStatusRequest{})
if err != nil {
return nil, err
}
return response.Status, nil
}
// PrimaryStatus is part of the tmclient.TabletManagerClient interface.
func (client *Client) PrimaryStatus(ctx context.Context, tablet *topodatapb.Tablet) (*replicationdatapb.PrimaryStatus, error) {
c, closer, err := client.dialer.dial(ctx, tablet)
@ -807,6 +821,17 @@ func (client *Client) ReplicaWasPromoted(ctx context.Context, tablet *topodatapb
return err
}
// ResetReplicationParameters is part of the tmclient.TabletManagerClient interface.
func (client *Client) ResetReplicationParameters(ctx context.Context, tablet *topodatapb.Tablet) error {
c, closer, err := client.dialer.dial(ctx, tablet)
if err != nil {
return err
}
defer closer.Close()
_, err = c.ResetReplicationParameters(ctx, &tabletmanagerdatapb.ResetReplicationParametersRequest{})
return err
}
// SetReplicationSource is part of the tmclient.TabletManagerClient interface.
func (client *Client) SetReplicationSource(ctx context.Context, tablet *topodatapb.Tablet, parent *topodatapb.TabletAlias, timeCreatedNS int64, waitPosition string, forceStartReplication bool, semiSync bool) error {
c, closer, err := client.dialer.dial(ctx, tablet)

Просмотреть файл

@ -261,6 +261,17 @@ func (s *server) ReplicationStatus(ctx context.Context, request *tabletmanagerda
return response, err
}
func (s *server) FullStatus(ctx context.Context, request *tabletmanagerdatapb.FullStatusRequest) (response *tabletmanagerdatapb.FullStatusResponse, err error) {
defer s.tm.HandleRPCPanic(ctx, "FullStatus", request, response, false /*verbose*/, &err)
ctx = callinfo.GRPCCallInfo(ctx)
response = &tabletmanagerdatapb.FullStatusResponse{}
status, err := s.tm.FullStatus(ctx)
if err == nil {
response.Status = status
}
return response, err
}
func (s *server) PrimaryStatus(ctx context.Context, request *tabletmanagerdatapb.PrimaryStatusRequest) (response *tabletmanagerdatapb.PrimaryStatusResponse, err error) {
defer s.tm.HandleRPCPanic(ctx, "PrimaryStatus", request, response, false /*verbose*/, &err)
ctx = callinfo.GRPCCallInfo(ctx)
@ -426,6 +437,13 @@ func (s *server) ReplicaWasPromoted(ctx context.Context, request *tabletmanagerd
return response, s.tm.ReplicaWasPromoted(ctx)
}
func (s *server) ResetReplicationParameters(ctx context.Context, request *tabletmanagerdatapb.ResetReplicationParametersRequest) (response *tabletmanagerdatapb.ResetReplicationParametersResponse, err error) {
defer s.tm.HandleRPCPanic(ctx, "ResetReplicationParameters", request, response, true /*verbose*/, &err)
ctx = callinfo.GRPCCallInfo(ctx)
response = &tabletmanagerdatapb.ResetReplicationParametersResponse{}
return response, s.tm.ResetReplicationParameters(ctx)
}
func (s *server) SetReplicationSource(ctx context.Context, request *tabletmanagerdatapb.SetReplicationSourceRequest) (response *tabletmanagerdatapb.SetReplicationSourceResponse, err error) {
defer s.tm.HandleRPCPanic(ctx, "SetReplicationSource", request, response, true /*verbose*/, &err)
ctx = callinfo.GRPCCallInfo(ctx)

Просмотреть файл

@ -81,6 +81,8 @@ type RPCTM interface {
ReplicationStatus(ctx context.Context) (*replicationdatapb.Status, error)
FullStatus(ctx context.Context) (*replicationdatapb.FullStatus, error)
StopReplication(ctx context.Context) error
StopReplicationMinimum(ctx context.Context, position string, waitTime time.Duration) (string, error)
@ -121,6 +123,8 @@ type RPCTM interface {
ReplicaWasPromoted(ctx context.Context) error
ResetReplicationParameters(ctx context.Context) error
SetReplicationSource(ctx context.Context, parent *topodatapb.TabletAlias, timeCreatedNS int64, waitPosition string, forceStartReplication bool, semiSync bool) error
StopReplicationAndGetStatus(ctx context.Context, stopReplicationMode replicationdatapb.StopReplicationMode) (StopReplicationAndGetStatusResponse, error)

Просмотреть файл

@ -52,6 +52,106 @@ func (tm *TabletManager) ReplicationStatus(ctx context.Context) (*replicationdat
return mysql.ReplicationStatusToProto(status), nil
}
// FullStatus returns the full status of MySQL including the replication information, semi-sync information, GTID information among others
func (tm *TabletManager) FullStatus(ctx context.Context) (*replicationdatapb.FullStatus, error) {
// Server ID - "select @@global.server_id"
serverID, err := tm.MysqlDaemon.GetServerID(ctx)
if err != nil {
return nil, err
}
// Server UUID - "select @@global.server_uuid"
serverUUID, err := tm.MysqlDaemon.GetServerUUID(ctx)
if err != nil {
return nil, err
}
// Replication status - "SHOW REPLICA STATUS"
replicationStatus, err := tm.MysqlDaemon.ReplicationStatus()
var replicationStatusProto *replicationdatapb.Status
if err != nil && err != mysql.ErrNotReplica {
return nil, err
}
if err == nil {
replicationStatusProto = mysql.ReplicationStatusToProto(replicationStatus)
}
// Primary status - "SHOW MASTER STATUS"
primaryStatus, err := tm.MysqlDaemon.PrimaryStatus(ctx)
var primaryStatusProto *replicationdatapb.PrimaryStatus
if err != nil && err != mysql.ErrNoPrimaryStatus {
return nil, err
}
if err == nil {
primaryStatusProto = mysql.PrimaryStatusToProto(primaryStatus)
}
// Purged GTID set
purgedGTIDs, err := tm.MysqlDaemon.GetGTIDPurged(ctx)
if err != nil {
return nil, err
}
// Version string "majorVersion.minorVersion.patchRelease"
version := tm.MysqlDaemon.GetVersionString()
// Version comment "select @@global.version_comment"
versionComment := tm.MysqlDaemon.GetVersionComment(ctx)
// Read only - "SHOW VARIABLES LIKE 'read_only'"
readOnly, err := tm.MysqlDaemon.IsReadOnly()
if err != nil {
return nil, err
}
// Binlog Information - "select @@global.binlog_format, @@global.log_bin, @@global.log_slave_updates, @@global.binlog_row_image"
binlogFormat, logBin, logReplicaUpdates, binlogRowImage, err := tm.MysqlDaemon.GetBinlogInformation(ctx)
if err != nil {
return nil, err
}
// GTID Mode - "select @@global.gtid_mode" - Only applicable for MySQL variants
gtidMode, err := tm.MysqlDaemon.GetGTIDMode(ctx)
if err != nil {
return nil, err
}
// Semi sync settings - "show global variables like 'rpl_semi_sync_%_enabled'"
primarySemiSync, replicaSemiSync := tm.MysqlDaemon.SemiSyncEnabled()
// Semi sync status - "show status like 'Rpl_semi_sync_%_status'"
primarySemiSyncStatus, replicaSemiSyncStatus := tm.MysqlDaemon.SemiSyncStatus()
// Semi sync clients count - "show status like 'semi_sync_primary_clients'"
semiSyncClients := tm.MysqlDaemon.SemiSyncClients()
// Semi sync settings - "show status like 'rpl_semi_sync_%'
semiSyncTimeout, semiSyncNumReplicas := tm.MysqlDaemon.SemiSyncSettings()
return &replicationdatapb.FullStatus{
ServerId: serverID,
ServerUuid: serverUUID,
ReplicationStatus: replicationStatusProto,
PrimaryStatus: primaryStatusProto,
GtidPurged: mysql.EncodePosition(purgedGTIDs),
Version: version,
VersionComment: versionComment,
ReadOnly: readOnly,
GtidMode: gtidMode,
BinlogFormat: binlogFormat,
BinlogRowImage: binlogRowImage,
LogBinEnabled: logBin,
LogReplicaUpdates: logReplicaUpdates,
SemiSyncPrimaryEnabled: primarySemiSync,
SemiSyncReplicaEnabled: replicaSemiSync,
SemiSyncPrimaryStatus: primarySemiSyncStatus,
SemiSyncReplicaStatus: replicaSemiSyncStatus,
SemiSyncPrimaryClients: semiSyncClients,
SemiSyncPrimaryTimeout: semiSyncTimeout,
SemiSyncWaitForReplicaCount: semiSyncNumReplicas,
}, nil
}
// PrimaryStatus returns the replication status for a primary tablet.
func (tm *TabletManager) PrimaryStatus(ctx context.Context) (*replicationdatapb.PrimaryStatus, error) {
status, err := tm.MysqlDaemon.PrimaryStatus(ctx)
@ -529,6 +629,27 @@ func (tm *TabletManager) ReplicaWasPromoted(ctx context.Context) error {
return tm.changeTypeLocked(ctx, topodatapb.TabletType_PRIMARY, DBActionNone, SemiSyncActionNone)
}
// ResetReplicationParameters resets the replica replication parameters
func (tm *TabletManager) ResetReplicationParameters(ctx context.Context) error {
log.Infof("ResetReplicationParameters")
if err := tm.lock(ctx); err != nil {
return err
}
defer tm.unlock()
tm.replManager.setReplicationStopped(true)
err := tm.MysqlDaemon.StopReplication(tm.hookExtraEnv())
if err != nil {
return err
}
err = tm.MysqlDaemon.ResetReplicationParameters(ctx)
if err != nil {
return err
}
return nil
}
// SetReplicationSource sets replication primary, and waits for the
// reparent_journal table entry up to context timeout
func (tm *TabletManager) SetReplicationSource(ctx context.Context, parentAlias *topodatapb.TabletAlias, timeCreatedNS int64, waitPosition string, forceStartReplication bool, semiSync bool) error {
@ -776,7 +897,7 @@ func (tm *TabletManager) StopReplicationAndGetStatus(ctx context.Context, stopRe
rs.Position = rsAfter.Position
rs.RelayLogPosition = rsAfter.RelayLogPosition
rs.FilePosition = rsAfter.FilePosition
rs.FileRelayLogPosition = rsAfter.FileRelayLogPosition
rs.RelayLogSourceBinlogEquivalentPosition = rsAfter.RelayLogSourceBinlogEquivalentPosition
return StopReplicationAndGetStatusResponse{
HybridStatus: mysql.ReplicationStatusToProto(rs),

Просмотреть файл

@ -115,6 +115,9 @@ type TabletManagerClient interface {
// 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
@ -180,6 +183,9 @@ type TabletManagerClient interface {
// 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).

Просмотреть файл

@ -699,6 +699,10 @@ var testReplicationStatus = &replicationdatapb.Status{
ConnectRetry: 12,
}
var testFullStatus = &replicationdatapb.FullStatus{
ReplicationStatus: testReplicationStatus,
}
var testPrimaryStatus = &replicationdatapb.PrimaryStatus{Position: "MariaDB/1-345-789"}
func (fra *fakeRPCTM) PrimaryStatus(ctx context.Context) (*replicationdatapb.PrimaryStatus, error) {
@ -725,6 +729,23 @@ func tmRPCTestReplicationStatusPanic(ctx context.Context, t *testing.T, client t
expectHandleRPCPanic(t, "ReplicationStatus", false /*verbose*/, err)
}
func (fra *fakeRPCTM) FullStatus(ctx context.Context) (*replicationdatapb.FullStatus, error) {
if fra.panics {
panic(fmt.Errorf("test-triggered panic"))
}
return testFullStatus, nil
}
func tmRPCTestFullStatus(ctx context.Context, t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.Tablet) {
rs, err := client.FullStatus(ctx, tablet)
compareError(t, "FullStatus", err, rs, testFullStatus)
}
func tmRPCTestFullStatusPanic(ctx context.Context, t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.Tablet) {
_, err := client.FullStatus(ctx, tablet)
expectHandleRPCPanic(t, "FullStatus", false /*verbose*/, err)
}
var testReplicationPosition = "MariaDB/5-456-890"
func (fra *fakeRPCTM) PrimaryPosition(ctx context.Context) (string, error) {
@ -1049,6 +1070,26 @@ func tmRPCTestReplicaWasPromotedPanic(ctx context.Context, t *testing.T, client
expectHandleRPCPanic(t, "ReplicaWasPromoted", true /*verbose*/, err)
}
var testResetReplicationParametersCalled = false
func (fra *fakeRPCTM) ResetReplicationParameters(ctx context.Context) error {
if fra.panics {
panic(fmt.Errorf("test-triggered panic"))
}
testResetReplicationParametersCalled = true
return nil
}
func tmRPCTestResetReplicationParameters(ctx context.Context, t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.Tablet) {
err := client.ResetReplicationParameters(ctx, tablet)
compareError(t, "ResetReplicationParameters", err, true, testResetReplicationParametersCalled)
}
func tmRPCTestResetReplicationParametersPanic(ctx context.Context, t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.Tablet) {
err := client.ResetReplicationParameters(ctx, tablet)
expectHandleRPCPanic(t, "ResetReplicationParameters", true /*verbose*/, err)
}
var testSetReplicationSourceCalled = false
var testForceStartReplica = true
@ -1260,6 +1301,7 @@ func Run(t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.T
tmRPCTestPrimaryPosition(ctx, t, client, tablet)
tmRPCTestReplicationStatus(ctx, t, client, tablet)
tmRPCTestFullStatus(ctx, t, client, tablet)
tmRPCTestPrimaryPosition(ctx, t, client, tablet)
tmRPCTestStopReplication(ctx, t, client, tablet)
tmRPCTestStopReplicationMinimum(ctx, t, client, tablet)
@ -1284,6 +1326,7 @@ func Run(t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.T
tmRPCTestInitReplica(ctx, t, client, tablet)
tmRPCTestReplicaWasPromoted(ctx, t, client, tablet)
tmRPCTestReplicaWasRestarted(ctx, t, client, tablet)
tmRPCTestResetReplicationParameters(ctx, t, client, tablet)
// Backup / restore related methods
tmRPCTestBackup(ctx, t, client, tablet)
@ -1314,6 +1357,7 @@ func Run(t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.T
// Replication related methods
tmRPCTestPrimaryPositionPanic(ctx, t, client, tablet)
tmRPCTestReplicationStatusPanic(ctx, t, client, tablet)
tmRPCTestFullStatusPanic(ctx, t, client, tablet)
tmRPCTestStopReplicationPanic(ctx, t, client, tablet)
tmRPCTestStopReplicationMinimumPanic(ctx, t, client, tablet)
tmRPCTestStartReplicationPanic(ctx, t, client, tablet)
@ -1334,6 +1378,7 @@ func Run(t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.T
tmRPCTestInitReplicaPanic(ctx, t, client, tablet)
tmRPCTestReplicaWasPromotedPanic(ctx, t, client, tablet)
tmRPCTestResetReplicationParametersPanic(ctx, t, client, tablet)
tmRPCTestReplicaWasRestartedPanic(ctx, t, client, tablet)
// Backup / restore related methods
tmRPCTestBackupPanic(ctx, t, client, tablet)

Просмотреть файл

@ -37,13 +37,21 @@ message Status {
// RelayLogPosition will be empty for flavors that do not support returning the full GTIDSet from the relay log, such as MariaDB.
string relay_log_position = 8;
string file_position = 9;
string file_relay_log_position = 10;
string relay_log_source_binlog_equivalent_position = 10;
uint32 source_server_id = 11;
string source_uuid = 12;
int32 io_state = 13;
string last_io_error = 14;
int32 sql_state = 15;
string last_sql_error = 16;
string relay_log_file_position = 17;
string source_user = 18;
uint32 sql_delay = 19;
bool auto_position = 20;
bool using_gtid = 21;
bool has_replication_filters = 22;
bool ssl_allowed = 23;
bool replication_lag_unknown = 24;
}
// StopReplicationStatus represents the replication status before calling StopReplication, and the replication status collected immediately after
@ -64,3 +72,27 @@ message PrimaryStatus {
string position = 1;
string file_position = 2;
}
// FullStatus contains the full status of MySQL including the replication information, semi-sync information, GTID information among others
message FullStatus {
uint32 server_id = 1;
string server_uuid = 2;
replicationdata.Status replication_status = 3;
replicationdata.PrimaryStatus primary_status = 4;
string gtid_purged = 5;
string version = 6;
string version_comment = 7;
bool read_only = 8;
string gtid_mode = 9;
string binlog_format = 10;
string binlog_row_image = 11;
bool log_bin_enabled = 12;
bool log_replica_updates = 13;
bool semi_sync_primary_enabled = 14;
bool semi_sync_replica_enabled = 15;
bool semi_sync_primary_status = 16;
bool semi_sync_replica_status = 17;
uint32 semi_sync_primary_clients = 18;
uint64 semi_sync_primary_timeout = 19;
uint32 semi_sync_wait_for_replica_count = 20;
}

Просмотреть файл

@ -410,6 +410,19 @@ message ReplicaWasPromotedRequest {
message ReplicaWasPromotedResponse {
}
message ResetReplicationParametersRequest {
}
message ResetReplicationParametersResponse {
}
message FullStatusRequest {
}
message FullStatusResponse {
replicationdata.FullStatus status = 1;
}
message SetReplicationSourceRequest {
topodata.TabletAlias parent = 1;
int64 time_created_ns = 2;

Просмотреть файл

@ -144,6 +144,12 @@ service TabletManager {
// ReplicaWasPromoted tells the remote tablet it is now the primary
rpc ReplicaWasPromoted(tabletmanagerdata.ReplicaWasPromotedRequest) returns (tabletmanagerdata.ReplicaWasPromotedResponse) {};
// ResetReplicationParameters resets the replica replication parameters
rpc ResetReplicationParameters(tabletmanagerdata.ResetReplicationParametersRequest) returns (tabletmanagerdata.ResetReplicationParametersResponse) {};
// FullStatus collects and returns the full status of MySQL including the replication information, semi-sync information, GTID information among others
rpc FullStatus(tabletmanagerdata.FullStatusRequest) returns (tabletmanagerdata.FullStatusResponse) {};
// SetReplicationSource tells the replica to reparent
rpc SetReplicationSource(tabletmanagerdata.SetReplicationSourceRequest) returns (tabletmanagerdata.SetReplicationSourceResponse) {};

602
web/vtadmin/src/proto/vtadmin.d.ts сгенерированный поставляемый
Просмотреть файл

@ -20627,6 +20627,348 @@ export namespace tabletmanagerdata {
public toJSON(): { [k: string]: any };
}
/** Properties of a ResetReplicationParametersRequest. */
interface IResetReplicationParametersRequest {
}
/** Represents a ResetReplicationParametersRequest. */
class ResetReplicationParametersRequest implements IResetReplicationParametersRequest {
/**
* Constructs a new ResetReplicationParametersRequest.
* @param [properties] Properties to set
*/
constructor(properties?: tabletmanagerdata.IResetReplicationParametersRequest);
/**
* Creates a new ResetReplicationParametersRequest instance using the specified properties.
* @param [properties] Properties to set
* @returns ResetReplicationParametersRequest instance
*/
public static create(properties?: tabletmanagerdata.IResetReplicationParametersRequest): tabletmanagerdata.ResetReplicationParametersRequest;
/**
* Encodes the specified ResetReplicationParametersRequest message. Does not implicitly {@link tabletmanagerdata.ResetReplicationParametersRequest.verify|verify} messages.
* @param message ResetReplicationParametersRequest message or plain object to encode
* @param [writer] Writer to encode to
* @returns Writer
*/
public static encode(message: tabletmanagerdata.IResetReplicationParametersRequest, writer?: $protobuf.Writer): $protobuf.Writer;
/**
* Encodes the specified ResetReplicationParametersRequest message, length delimited. Does not implicitly {@link tabletmanagerdata.ResetReplicationParametersRequest.verify|verify} messages.
* @param message ResetReplicationParametersRequest message or plain object to encode
* @param [writer] Writer to encode to
* @returns Writer
*/
public static encodeDelimited(message: tabletmanagerdata.IResetReplicationParametersRequest, writer?: $protobuf.Writer): $protobuf.Writer;
/**
* Decodes a ResetReplicationParametersRequest message from the specified reader or buffer.
* @param reader Reader or buffer to decode from
* @param [length] Message length if known beforehand
* @returns ResetReplicationParametersRequest
* @throws {Error} If the payload is not a reader or valid buffer
* @throws {$protobuf.util.ProtocolError} If required fields are missing
*/
public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): tabletmanagerdata.ResetReplicationParametersRequest;
/**
* Decodes a ResetReplicationParametersRequest message from the specified reader or buffer, length delimited.
* @param reader Reader or buffer to decode from
* @returns ResetReplicationParametersRequest
* @throws {Error} If the payload is not a reader or valid buffer
* @throws {$protobuf.util.ProtocolError} If required fields are missing
*/
public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): tabletmanagerdata.ResetReplicationParametersRequest;
/**
* Verifies a ResetReplicationParametersRequest message.
* @param message Plain object to verify
* @returns `null` if valid, otherwise the reason why it is not
*/
public static verify(message: { [k: string]: any }): (string|null);
/**
* Creates a ResetReplicationParametersRequest message from a plain object. Also converts values to their respective internal types.
* @param object Plain object
* @returns ResetReplicationParametersRequest
*/
public static fromObject(object: { [k: string]: any }): tabletmanagerdata.ResetReplicationParametersRequest;
/**
* Creates a plain object from a ResetReplicationParametersRequest message. Also converts values to other types if specified.
* @param message ResetReplicationParametersRequest
* @param [options] Conversion options
* @returns Plain object
*/
public static toObject(message: tabletmanagerdata.ResetReplicationParametersRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };
/**
* Converts this ResetReplicationParametersRequest to JSON.
* @returns JSON object
*/
public toJSON(): { [k: string]: any };
}
/** Properties of a ResetReplicationParametersResponse. */
interface IResetReplicationParametersResponse {
}
/** Represents a ResetReplicationParametersResponse. */
class ResetReplicationParametersResponse implements IResetReplicationParametersResponse {
/**
* Constructs a new ResetReplicationParametersResponse.
* @param [properties] Properties to set
*/
constructor(properties?: tabletmanagerdata.IResetReplicationParametersResponse);
/**
* Creates a new ResetReplicationParametersResponse instance using the specified properties.
* @param [properties] Properties to set
* @returns ResetReplicationParametersResponse instance
*/
public static create(properties?: tabletmanagerdata.IResetReplicationParametersResponse): tabletmanagerdata.ResetReplicationParametersResponse;
/**
* Encodes the specified ResetReplicationParametersResponse message. Does not implicitly {@link tabletmanagerdata.ResetReplicationParametersResponse.verify|verify} messages.
* @param message ResetReplicationParametersResponse message or plain object to encode
* @param [writer] Writer to encode to
* @returns Writer
*/
public static encode(message: tabletmanagerdata.IResetReplicationParametersResponse, writer?: $protobuf.Writer): $protobuf.Writer;
/**
* Encodes the specified ResetReplicationParametersResponse message, length delimited. Does not implicitly {@link tabletmanagerdata.ResetReplicationParametersResponse.verify|verify} messages.
* @param message ResetReplicationParametersResponse message or plain object to encode
* @param [writer] Writer to encode to
* @returns Writer
*/
public static encodeDelimited(message: tabletmanagerdata.IResetReplicationParametersResponse, writer?: $protobuf.Writer): $protobuf.Writer;
/**
* Decodes a ResetReplicationParametersResponse message from the specified reader or buffer.
* @param reader Reader or buffer to decode from
* @param [length] Message length if known beforehand
* @returns ResetReplicationParametersResponse
* @throws {Error} If the payload is not a reader or valid buffer
* @throws {$protobuf.util.ProtocolError} If required fields are missing
*/
public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): tabletmanagerdata.ResetReplicationParametersResponse;
/**
* Decodes a ResetReplicationParametersResponse message from the specified reader or buffer, length delimited.
* @param reader Reader or buffer to decode from
* @returns ResetReplicationParametersResponse
* @throws {Error} If the payload is not a reader or valid buffer
* @throws {$protobuf.util.ProtocolError} If required fields are missing
*/
public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): tabletmanagerdata.ResetReplicationParametersResponse;
/**
* Verifies a ResetReplicationParametersResponse message.
* @param message Plain object to verify
* @returns `null` if valid, otherwise the reason why it is not
*/
public static verify(message: { [k: string]: any }): (string|null);
/**
* Creates a ResetReplicationParametersResponse message from a plain object. Also converts values to their respective internal types.
* @param object Plain object
* @returns ResetReplicationParametersResponse
*/
public static fromObject(object: { [k: string]: any }): tabletmanagerdata.ResetReplicationParametersResponse;
/**
* Creates a plain object from a ResetReplicationParametersResponse message. Also converts values to other types if specified.
* @param message ResetReplicationParametersResponse
* @param [options] Conversion options
* @returns Plain object
*/
public static toObject(message: tabletmanagerdata.ResetReplicationParametersResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };
/**
* Converts this ResetReplicationParametersResponse to JSON.
* @returns JSON object
*/
public toJSON(): { [k: string]: any };
}
/** Properties of a FullStatusRequest. */
interface IFullStatusRequest {
}
/** Represents a FullStatusRequest. */
class FullStatusRequest implements IFullStatusRequest {
/**
* Constructs a new FullStatusRequest.
* @param [properties] Properties to set
*/
constructor(properties?: tabletmanagerdata.IFullStatusRequest);
/**
* Creates a new FullStatusRequest instance using the specified properties.
* @param [properties] Properties to set
* @returns FullStatusRequest instance
*/
public static create(properties?: tabletmanagerdata.IFullStatusRequest): tabletmanagerdata.FullStatusRequest;
/**
* Encodes the specified FullStatusRequest message. Does not implicitly {@link tabletmanagerdata.FullStatusRequest.verify|verify} messages.
* @param message FullStatusRequest message or plain object to encode
* @param [writer] Writer to encode to
* @returns Writer
*/
public static encode(message: tabletmanagerdata.IFullStatusRequest, writer?: $protobuf.Writer): $protobuf.Writer;
/**
* Encodes the specified FullStatusRequest message, length delimited. Does not implicitly {@link tabletmanagerdata.FullStatusRequest.verify|verify} messages.
* @param message FullStatusRequest message or plain object to encode
* @param [writer] Writer to encode to
* @returns Writer
*/
public static encodeDelimited(message: tabletmanagerdata.IFullStatusRequest, writer?: $protobuf.Writer): $protobuf.Writer;
/**
* Decodes a FullStatusRequest message from the specified reader or buffer.
* @param reader Reader or buffer to decode from
* @param [length] Message length if known beforehand
* @returns FullStatusRequest
* @throws {Error} If the payload is not a reader or valid buffer
* @throws {$protobuf.util.ProtocolError} If required fields are missing
*/
public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): tabletmanagerdata.FullStatusRequest;
/**
* Decodes a FullStatusRequest message from the specified reader or buffer, length delimited.
* @param reader Reader or buffer to decode from
* @returns FullStatusRequest
* @throws {Error} If the payload is not a reader or valid buffer
* @throws {$protobuf.util.ProtocolError} If required fields are missing
*/
public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): tabletmanagerdata.FullStatusRequest;
/**
* Verifies a FullStatusRequest message.
* @param message Plain object to verify
* @returns `null` if valid, otherwise the reason why it is not
*/
public static verify(message: { [k: string]: any }): (string|null);
/**
* Creates a FullStatusRequest message from a plain object. Also converts values to their respective internal types.
* @param object Plain object
* @returns FullStatusRequest
*/
public static fromObject(object: { [k: string]: any }): tabletmanagerdata.FullStatusRequest;
/**
* Creates a plain object from a FullStatusRequest message. Also converts values to other types if specified.
* @param message FullStatusRequest
* @param [options] Conversion options
* @returns Plain object
*/
public static toObject(message: tabletmanagerdata.FullStatusRequest, options?: $protobuf.IConversionOptions): { [k: string]: any };
/**
* Converts this FullStatusRequest to JSON.
* @returns JSON object
*/
public toJSON(): { [k: string]: any };
}
/** Properties of a FullStatusResponse. */
interface IFullStatusResponse {
/** FullStatusResponse status */
status?: (replicationdata.IFullStatus|null);
}
/** Represents a FullStatusResponse. */
class FullStatusResponse implements IFullStatusResponse {
/**
* Constructs a new FullStatusResponse.
* @param [properties] Properties to set
*/
constructor(properties?: tabletmanagerdata.IFullStatusResponse);
/** FullStatusResponse status. */
public status?: (replicationdata.IFullStatus|null);
/**
* Creates a new FullStatusResponse instance using the specified properties.
* @param [properties] Properties to set
* @returns FullStatusResponse instance
*/
public static create(properties?: tabletmanagerdata.IFullStatusResponse): tabletmanagerdata.FullStatusResponse;
/**
* Encodes the specified FullStatusResponse message. Does not implicitly {@link tabletmanagerdata.FullStatusResponse.verify|verify} messages.
* @param message FullStatusResponse message or plain object to encode
* @param [writer] Writer to encode to
* @returns Writer
*/
public static encode(message: tabletmanagerdata.IFullStatusResponse, writer?: $protobuf.Writer): $protobuf.Writer;
/**
* Encodes the specified FullStatusResponse message, length delimited. Does not implicitly {@link tabletmanagerdata.FullStatusResponse.verify|verify} messages.
* @param message FullStatusResponse message or plain object to encode
* @param [writer] Writer to encode to
* @returns Writer
*/
public static encodeDelimited(message: tabletmanagerdata.IFullStatusResponse, writer?: $protobuf.Writer): $protobuf.Writer;
/**
* Decodes a FullStatusResponse message from the specified reader or buffer.
* @param reader Reader or buffer to decode from
* @param [length] Message length if known beforehand
* @returns FullStatusResponse
* @throws {Error} If the payload is not a reader or valid buffer
* @throws {$protobuf.util.ProtocolError} If required fields are missing
*/
public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): tabletmanagerdata.FullStatusResponse;
/**
* Decodes a FullStatusResponse message from the specified reader or buffer, length delimited.
* @param reader Reader or buffer to decode from
* @returns FullStatusResponse
* @throws {Error} If the payload is not a reader or valid buffer
* @throws {$protobuf.util.ProtocolError} If required fields are missing
*/
public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): tabletmanagerdata.FullStatusResponse;
/**
* Verifies a FullStatusResponse message.
* @param message Plain object to verify
* @returns `null` if valid, otherwise the reason why it is not
*/
public static verify(message: { [k: string]: any }): (string|null);
/**
* Creates a FullStatusResponse message from a plain object. Also converts values to their respective internal types.
* @param object Plain object
* @returns FullStatusResponse
*/
public static fromObject(object: { [k: string]: any }): tabletmanagerdata.FullStatusResponse;
/**
* Creates a plain object from a FullStatusResponse message. Also converts values to other types if specified.
* @param message FullStatusResponse
* @param [options] Conversion options
* @returns Plain object
*/
public static toObject(message: tabletmanagerdata.FullStatusResponse, options?: $protobuf.IConversionOptions): { [k: string]: any };
/**
* Converts this FullStatusResponse to JSON.
* @returns JSON object
*/
public toJSON(): { [k: string]: any };
}
/** Properties of a SetReplicationSourceRequest. */
interface ISetReplicationSourceRequest {
@ -29628,8 +29970,8 @@ export namespace replicationdata {
/** Status file_position */
file_position?: (string|null);
/** Status file_relay_log_position */
file_relay_log_position?: (string|null);
/** Status relay_log_source_binlog_equivalent_position */
relay_log_source_binlog_equivalent_position?: (string|null);
/** Status source_server_id */
source_server_id?: (number|null);
@ -29648,6 +29990,30 @@ export namespace replicationdata {
/** Status last_sql_error */
last_sql_error?: (string|null);
/** Status relay_log_file_position */
relay_log_file_position?: (string|null);
/** Status source_user */
source_user?: (string|null);
/** Status sql_delay */
sql_delay?: (number|null);
/** Status auto_position */
auto_position?: (boolean|null);
/** Status using_gtid */
using_gtid?: (boolean|null);
/** Status has_replication_filters */
has_replication_filters?: (boolean|null);
/** Status ssl_allowed */
ssl_allowed?: (boolean|null);
/** Status replication_lag_unknown */
replication_lag_unknown?: (boolean|null);
}
/** Represents a Status. */
@ -29686,8 +30052,8 @@ export namespace replicationdata {
/** Status file_position. */
public file_position: string;
/** Status file_relay_log_position. */
public file_relay_log_position: string;
/** Status relay_log_source_binlog_equivalent_position. */
public relay_log_source_binlog_equivalent_position: string;
/** Status source_server_id. */
public source_server_id: number;
@ -29707,6 +30073,30 @@ export namespace replicationdata {
/** Status last_sql_error. */
public last_sql_error: string;
/** Status relay_log_file_position. */
public relay_log_file_position: string;
/** Status source_user. */
public source_user: string;
/** Status sql_delay. */
public sql_delay: number;
/** Status auto_position. */
public auto_position: boolean;
/** Status using_gtid. */
public using_gtid: boolean;
/** Status has_replication_filters. */
public has_replication_filters: boolean;
/** Status ssl_allowed. */
public ssl_allowed: boolean;
/** Status replication_lag_unknown. */
public replication_lag_unknown: boolean;
/**
* Creates a new Status instance using the specified properties.
* @param [properties] Properties to set
@ -29975,6 +30365,210 @@ export namespace replicationdata {
*/
public toJSON(): { [k: string]: any };
}
/** Properties of a FullStatus. */
interface IFullStatus {
/** FullStatus server_id */
server_id?: (number|null);
/** FullStatus server_uuid */
server_uuid?: (string|null);
/** FullStatus replication_status */
replication_status?: (replicationdata.IStatus|null);
/** FullStatus primary_status */
primary_status?: (replicationdata.IPrimaryStatus|null);
/** FullStatus gtid_purged */
gtid_purged?: (string|null);
/** FullStatus version */
version?: (string|null);
/** FullStatus version_comment */
version_comment?: (string|null);
/** FullStatus read_only */
read_only?: (boolean|null);
/** FullStatus gtid_mode */
gtid_mode?: (string|null);
/** FullStatus binlog_format */
binlog_format?: (string|null);
/** FullStatus binlog_row_image */
binlog_row_image?: (string|null);
/** FullStatus log_bin_enabled */
log_bin_enabled?: (boolean|null);
/** FullStatus log_replica_updates */
log_replica_updates?: (boolean|null);
/** FullStatus semi_sync_primary_enabled */
semi_sync_primary_enabled?: (boolean|null);
/** FullStatus semi_sync_replica_enabled */
semi_sync_replica_enabled?: (boolean|null);
/** FullStatus semi_sync_primary_status */
semi_sync_primary_status?: (boolean|null);
/** FullStatus semi_sync_replica_status */
semi_sync_replica_status?: (boolean|null);
/** FullStatus semi_sync_primary_clients */
semi_sync_primary_clients?: (number|null);
/** FullStatus semi_sync_primary_timeout */
semi_sync_primary_timeout?: (number|Long|null);
/** FullStatus semi_sync_wait_for_replica_count */
semi_sync_wait_for_replica_count?: (number|null);
}
/** Represents a FullStatus. */
class FullStatus implements IFullStatus {
/**
* Constructs a new FullStatus.
* @param [properties] Properties to set
*/
constructor(properties?: replicationdata.IFullStatus);
/** FullStatus server_id. */
public server_id: number;
/** FullStatus server_uuid. */
public server_uuid: string;
/** FullStatus replication_status. */
public replication_status?: (replicationdata.IStatus|null);
/** FullStatus primary_status. */
public primary_status?: (replicationdata.IPrimaryStatus|null);
/** FullStatus gtid_purged. */
public gtid_purged: string;
/** FullStatus version. */
public version: string;
/** FullStatus version_comment. */
public version_comment: string;
/** FullStatus read_only. */
public read_only: boolean;
/** FullStatus gtid_mode. */
public gtid_mode: string;
/** FullStatus binlog_format. */
public binlog_format: string;
/** FullStatus binlog_row_image. */
public binlog_row_image: string;
/** FullStatus log_bin_enabled. */
public log_bin_enabled: boolean;
/** FullStatus log_replica_updates. */
public log_replica_updates: boolean;
/** FullStatus semi_sync_primary_enabled. */
public semi_sync_primary_enabled: boolean;
/** FullStatus semi_sync_replica_enabled. */
public semi_sync_replica_enabled: boolean;
/** FullStatus semi_sync_primary_status. */
public semi_sync_primary_status: boolean;
/** FullStatus semi_sync_replica_status. */
public semi_sync_replica_status: boolean;
/** FullStatus semi_sync_primary_clients. */
public semi_sync_primary_clients: number;
/** FullStatus semi_sync_primary_timeout. */
public semi_sync_primary_timeout: (number|Long);
/** FullStatus semi_sync_wait_for_replica_count. */
public semi_sync_wait_for_replica_count: number;
/**
* Creates a new FullStatus instance using the specified properties.
* @param [properties] Properties to set
* @returns FullStatus instance
*/
public static create(properties?: replicationdata.IFullStatus): replicationdata.FullStatus;
/**
* Encodes the specified FullStatus message. Does not implicitly {@link replicationdata.FullStatus.verify|verify} messages.
* @param message FullStatus message or plain object to encode
* @param [writer] Writer to encode to
* @returns Writer
*/
public static encode(message: replicationdata.IFullStatus, writer?: $protobuf.Writer): $protobuf.Writer;
/**
* Encodes the specified FullStatus message, length delimited. Does not implicitly {@link replicationdata.FullStatus.verify|verify} messages.
* @param message FullStatus message or plain object to encode
* @param [writer] Writer to encode to
* @returns Writer
*/
public static encodeDelimited(message: replicationdata.IFullStatus, writer?: $protobuf.Writer): $protobuf.Writer;
/**
* Decodes a FullStatus message from the specified reader or buffer.
* @param reader Reader or buffer to decode from
* @param [length] Message length if known beforehand
* @returns FullStatus
* @throws {Error} If the payload is not a reader or valid buffer
* @throws {$protobuf.util.ProtocolError} If required fields are missing
*/
public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): replicationdata.FullStatus;
/**
* Decodes a FullStatus message from the specified reader or buffer, length delimited.
* @param reader Reader or buffer to decode from
* @returns FullStatus
* @throws {Error} If the payload is not a reader or valid buffer
* @throws {$protobuf.util.ProtocolError} If required fields are missing
*/
public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): replicationdata.FullStatus;
/**
* Verifies a FullStatus message.
* @param message Plain object to verify
* @returns `null` if valid, otherwise the reason why it is not
*/
public static verify(message: { [k: string]: any }): (string|null);
/**
* Creates a FullStatus message from a plain object. Also converts values to their respective internal types.
* @param object Plain object
* @returns FullStatus
*/
public static fromObject(object: { [k: string]: any }): replicationdata.FullStatus;
/**
* Creates a plain object from a FullStatus message. Also converts values to other types if specified.
* @param message FullStatus
* @param [options] Conversion options
* @returns Plain object
*/
public static toObject(message: replicationdata.FullStatus, options?: $protobuf.IConversionOptions): { [k: string]: any };
/**
* Converts this FullStatus to JSON.
* @returns JSON object
*/
public toJSON(): { [k: string]: any };
}
}
/** Namespace vschema. */

1508
web/vtadmin/src/proto/vtadmin.js сгенерированный

Разница между файлами не показана из-за своего большого размера Загрузить разницу