зеркало из https://github.com/github/vitess-gh.git
Tablet Manager: Add Option To Stop IO Thread Only (#6335)
* Added the option to StopReplicationAndGetStatus() to stop only the IO Thread, and passed it all the way down the call chain to MysqlDaemon, where we can now call a new method (implemented in all flavors) which stops only the io thread, if that's what was requested. Signed-off-by: Peter Farr <Peter@PrismaPhonic.com> * Oops Signed-off-by: Peter Farr <Peter@PrismaPhonic.com> * Remove hook per review suggestion. Signed-off-by: Peter Farr <Peter@PrismaPhonic.com> * Adjusted stop slave io thread to pass in a ctx because it's a new function. Adjusted StopReplicationAndGetStatus so that it stops the slave before getting slave status. This will ensure that the relay log information is correct. Signed-off-by: Peter Farr <Peter@PrismaPhonic.com> * Add back in logic to bail if slave is already stopped. Signed-off-by: Peter Farr <Peter@PrismaPhonic.com> * We have to patch these in because after calling stop slave there won't be a master host and master port anymore when we grab slave status. Instead we need to patch in positions so we retain master host and master port, otherwise set master will assume the tablet is the master because it has no master host and master port. In retrospect its probably a bad idea that we assume no master host and no master port means we've found the master (in set master). Signed-off-by: Peter Farr <Peter@PrismaPhonic.com> * Refactored per offline discussions. We now return before and after slave status, so we are more explicit, and don't nest business logic into subfields of a hybrid struct. Signed-off-by: Peter Farr <Peter@PrismaPhonic.com> * Fix issues that cropped up after merge conflict Signed-off-by: Peter Farr <Peter@PrismaPhonic.com> * Change way we get this state to also pull in the Connecting state. We are either running, or attempting to run. Either way we are not not running. Signed-off-by: Peter Farr <Peter@PrismaPhonic.com> * Changed references from slave to replica per review suggestion. Signed-off-by: Peter Farr <Peter@PrismaPhonic.com> * Embed StopReplicationStatus into StopReplicationAndGetStatusResponse and rename fields to make it clear. Signed-off-by: Peter Farr <Peter@PrismaPhonic.com> * Various fixes per review suggestions. Signed-off-by: Peter Farr <Peter@PrismaPhonic.com> * Lets try out issuing a stop no matter what and see what happens. Signed-off-by: Peter Farr <Peter@PrismaPhonic.com> * Adding back in bailouts. They are necessary. Signed-off-by: Peter Farr <Peter@PrismaPhonic.com> * Get rid of more slave references. Signed-off-by: Peter Farr <Peter@PrismaPhonic.com> * Changed stopIOThreadOnly to an enum so we can change the way in which we stop replication in the future. Signed-off-by: Peter Farr <Peter@PrismaPhonic.com> * Add a test to ensure that we can stop the io thread only. Signed-off-by: Peter Farr <Peter@PrismaPhonic.com> * Fix incorrect test methodology. Signed-off-by: Peter Farr <Peter@PrismaPhonic.com> * Used a generated enum from proto per convention for the stop replication mode. Signed-off-by: Peter Farr <Peter@PrismaPhonic.com> * Scrub more references of slave without obfuscating MySQL statements that are being called under the hood. Signed-off-by: Peter Farr <Peter@PrismaPhonic.com>
This commit is contained in:
Родитель
3e0b0a2a48
Коммит
9f2b0fd0b7
|
@ -65,6 +65,9 @@ type flavor interface {
|
|||
// stopReplicationCommand returns the command to stop the replication.
|
||||
stopReplicationCommand() string
|
||||
|
||||
// stopIOThreadCommand returns the command to stop the replica's io thread only.
|
||||
stopIOThreadCommand() string
|
||||
|
||||
// sendBinlogDumpCommand sends the packet required to start
|
||||
// dumping binlogs from the specified location.
|
||||
sendBinlogDumpCommand(c *Conn, serverID uint32, startPos Position) error
|
||||
|
@ -195,6 +198,11 @@ func (c *Conn) StopReplicationCommand() string {
|
|||
return c.flavor.stopReplicationCommand()
|
||||
}
|
||||
|
||||
// StopIOThreadCommand returns the command to stop the replica's io thread.
|
||||
func (c *Conn) StopIOThreadCommand() string {
|
||||
return c.flavor.stopIOThreadCommand()
|
||||
}
|
||||
|
||||
// SendBinlogDumpCommand sends the flavor-specific version of
|
||||
// the COM_BINLOG_DUMP command to start dumping raw binlog
|
||||
// events over a server connection, starting at a given GTID.
|
||||
|
@ -277,7 +285,7 @@ func parseReplicationStatus(fields map[string]string) ReplicationStatus {
|
|||
status := ReplicationStatus{
|
||||
MasterHost: fields["Master_Host"],
|
||||
// These fields are returned from the underlying DB and cannot be renamed
|
||||
IOThreadRunning: fields["Slave_IO_Running"] == "Yes",
|
||||
IOThreadRunning: fields["Slave_IO_Running"] == "Yes" || fields["Slave_IO_Running"] == "Connecting",
|
||||
SQLThreadRunning: fields["Slave_SQL_Running"] == "Yes",
|
||||
}
|
||||
parseInt, _ := strconv.ParseInt(fields["Master_Port"], 10, 0)
|
||||
|
|
|
@ -75,6 +75,10 @@ func (flv *filePosFlavor) stopReplicationCommand() string {
|
|||
return "unsupported"
|
||||
}
|
||||
|
||||
func (flv *filePosFlavor) stopIOThreadCommand() string {
|
||||
return "unsupported"
|
||||
}
|
||||
|
||||
// sendBinlogDumpCommand is part of the Flavor interface.
|
||||
func (flv *filePosFlavor) sendBinlogDumpCommand(c *Conn, serverID uint32, startPos Position) error {
|
||||
rpos, ok := startPos.GTIDSet.(filePosGTID)
|
||||
|
|
|
@ -63,6 +63,10 @@ func (mariadbFlavor) stopReplicationCommand() string {
|
|||
return "STOP SLAVE"
|
||||
}
|
||||
|
||||
func (mariadbFlavor) stopIOThreadCommand() string {
|
||||
return "STOP SLAVE IO_THREAD"
|
||||
}
|
||||
|
||||
// sendBinlogDumpCommand is part of the Flavor interface.
|
||||
func (mariadbFlavor) sendBinlogDumpCommand(c *Conn, serverID uint32, startPos Position) error {
|
||||
// Tell the server that we understand GTIDs by setting
|
||||
|
|
|
@ -62,6 +62,10 @@ func (mysqlFlavor) stopReplicationCommand() string {
|
|||
return "STOP SLAVE"
|
||||
}
|
||||
|
||||
func (mysqlFlavor) stopIOThreadCommand() string {
|
||||
return "STOP SLAVE IO_THREAD"
|
||||
}
|
||||
|
||||
// sendBinlogDumpCommand is part of the Flavor interface.
|
||||
func (mysqlFlavor) sendBinlogDumpCommand(c *Conn, serverID uint32, startPos Position) error {
|
||||
gtidSet, ok := startPos.GTIDSet.(Mysql56GTIDSet)
|
||||
|
|
|
@ -300,6 +300,13 @@ func (fmd *FakeMysqlDaemon) StopReplication(hookExtraEnv map[string]string) erro
|
|||
})
|
||||
}
|
||||
|
||||
// StopIOThread is part of the MysqlDaemon interface.
|
||||
func (fmd *FakeMysqlDaemon) StopIOThread(ctx context.Context) error {
|
||||
return fmd.ExecuteSuperQueryList(context.Background(), []string{
|
||||
"STOP SLAVE IO_THREAD",
|
||||
})
|
||||
}
|
||||
|
||||
// SetReplicationPosition is part of the MysqlDaemon interface.
|
||||
func (fmd *FakeMysqlDaemon) SetReplicationPosition(ctx context.Context, pos mysql.Position) error {
|
||||
if !reflect.DeepEqual(fmd.SetReplicationPositionPos, pos) {
|
||||
|
|
|
@ -22,6 +22,7 @@ import (
|
|||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"vitess.io/vitess/go/vt/dbconfigs"
|
||||
"vitess.io/vitess/go/vt/servenv"
|
||||
)
|
||||
|
|
|
@ -45,6 +45,7 @@ type MysqlDaemon interface {
|
|||
RestartReplication(hookExtraEnv map[string]string) error
|
||||
StartReplicationUntilAfter(ctx context.Context, pos mysql.Position) error
|
||||
StopReplication(hookExtraEnv map[string]string) error
|
||||
StopIOThread(ctx context.Context) error
|
||||
ReplicationStatus() (mysql.ReplicationStatus, error)
|
||||
SetSemiSyncEnabled(master, replica bool) error
|
||||
SemiSyncEnabled() (master, replica bool)
|
||||
|
|
|
@ -114,6 +114,17 @@ func (mysqld *Mysqld) StopReplication(hookExtraEnv map[string]string) error {
|
|||
return mysqld.executeSuperQueryListConn(ctx, conn, []string{conn.StopReplicationCommand()})
|
||||
}
|
||||
|
||||
// StopIOThread stops a replica's IO thread only.
|
||||
func (mysqld *Mysqld) StopIOThread(ctx context.Context) error {
|
||||
conn, err := getPoolReconnect(ctx, mysqld.dbaPool)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer conn.Recycle()
|
||||
|
||||
return mysqld.executeSuperQueryListConn(ctx, conn, []string{conn.StopIOThreadCommand()})
|
||||
}
|
||||
|
||||
// RestartReplication stops, resets and starts replication.
|
||||
func (mysqld *Mysqld) RestartReplication(hookExtraEnv map[string]string) error {
|
||||
h := hook.NewSimpleHook("preflight_stop_slave")
|
||||
|
|
|
@ -21,6 +21,32 @@ var _ = math.Inf
|
|||
// proto package needs to be updated.
|
||||
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
||||
|
||||
// StopReplicationMode is used to provide controls over how replication is stopped.
|
||||
type StopReplicationMode int32
|
||||
|
||||
const (
|
||||
StopReplicationMode_IOANDSQLTHREAD StopReplicationMode = 0
|
||||
StopReplicationMode_IOTHREADONLY StopReplicationMode = 1
|
||||
)
|
||||
|
||||
var StopReplicationMode_name = map[int32]string{
|
||||
0: "IOANDSQLTHREAD",
|
||||
1: "IOTHREADONLY",
|
||||
}
|
||||
|
||||
var StopReplicationMode_value = map[string]int32{
|
||||
"IOANDSQLTHREAD": 0,
|
||||
"IOTHREADONLY": 1,
|
||||
}
|
||||
|
||||
func (x StopReplicationMode) String() string {
|
||||
return proto.EnumName(StopReplicationMode_name, int32(x))
|
||||
}
|
||||
|
||||
func (StopReplicationMode) EnumDescriptor() ([]byte, []int) {
|
||||
return fileDescriptor_ee8ee22b8c4b9d06, []int{0}
|
||||
}
|
||||
|
||||
// Status is the replication status for MySQL/MariaDB/File-based. Returned by a
|
||||
// flavor-specific command and parsed into a Position and fields.
|
||||
type Status struct {
|
||||
|
@ -151,35 +177,91 @@ func (m *Status) GetMasterUuid() string {
|
|||
return ""
|
||||
}
|
||||
|
||||
// StopReplicationStatus represents the replication status before calling StopReplication, and the replication status collected immediately after
|
||||
// calling StopReplication.
|
||||
type StopReplicationStatus struct {
|
||||
Before *Status `protobuf:"bytes,1,opt,name=before,proto3" json:"before,omitempty"`
|
||||
After *Status `protobuf:"bytes,2,opt,name=after,proto3" json:"after,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *StopReplicationStatus) Reset() { *m = StopReplicationStatus{} }
|
||||
func (m *StopReplicationStatus) String() string { return proto.CompactTextString(m) }
|
||||
func (*StopReplicationStatus) ProtoMessage() {}
|
||||
func (*StopReplicationStatus) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_ee8ee22b8c4b9d06, []int{1}
|
||||
}
|
||||
|
||||
func (m *StopReplicationStatus) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_StopReplicationStatus.Unmarshal(m, b)
|
||||
}
|
||||
func (m *StopReplicationStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
return xxx_messageInfo_StopReplicationStatus.Marshal(b, m, deterministic)
|
||||
}
|
||||
func (m *StopReplicationStatus) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_StopReplicationStatus.Merge(m, src)
|
||||
}
|
||||
func (m *StopReplicationStatus) XXX_Size() int {
|
||||
return xxx_messageInfo_StopReplicationStatus.Size(m)
|
||||
}
|
||||
func (m *StopReplicationStatus) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_StopReplicationStatus.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_StopReplicationStatus proto.InternalMessageInfo
|
||||
|
||||
func (m *StopReplicationStatus) GetBefore() *Status {
|
||||
if m != nil {
|
||||
return m.Before
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *StopReplicationStatus) GetAfter() *Status {
|
||||
if m != nil {
|
||||
return m.After
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func init() {
|
||||
proto.RegisterEnum("replicationdata.StopReplicationMode", StopReplicationMode_name, StopReplicationMode_value)
|
||||
proto.RegisterType((*Status)(nil), "replicationdata.Status")
|
||||
proto.RegisterType((*StopReplicationStatus)(nil), "replicationdata.StopReplicationStatus")
|
||||
}
|
||||
|
||||
func init() { proto.RegisterFile("replicationdata.proto", fileDescriptor_ee8ee22b8c4b9d06) }
|
||||
|
||||
var fileDescriptor_ee8ee22b8c4b9d06 = []byte{
|
||||
// 353 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0x41, 0x4f, 0xe2, 0x40,
|
||||
0x14, 0xc7, 0xd3, 0x65, 0x61, 0x61, 0x80, 0x85, 0x9d, 0x85, 0x38, 0xf1, 0x62, 0xa3, 0x97, 0xc6,
|
||||
0x10, 0x6a, 0x34, 0x7e, 0x01, 0xbc, 0x68, 0xa2, 0x09, 0x29, 0x7a, 0xf1, 0x32, 0x29, 0x9d, 0xb1,
|
||||
0x4c, 0x52, 0xe7, 0x95, 0x99, 0x29, 0x09, 0x9f, 0xdd, 0x8b, 0xe9, 0x2b, 0x20, 0x36, 0xde, 0xda,
|
||||
0xff, 0xef, 0x97, 0xd7, 0xd7, 0x7f, 0x1e, 0x19, 0x1b, 0x99, 0x67, 0x2a, 0x89, 0x9d, 0x02, 0x2d,
|
||||
0x62, 0x17, 0x4f, 0x73, 0x03, 0x0e, 0xe8, 0xa0, 0x16, 0x9f, 0x7f, 0x34, 0x48, 0x6b, 0xe1, 0x62,
|
||||
0x57, 0x58, 0x7a, 0x4a, 0xda, 0x39, 0x58, 0x55, 0x22, 0xe6, 0xf9, 0x5e, 0xd0, 0x89, 0x0e, 0xef,
|
||||
0xf4, 0x92, 0xfc, 0x53, 0xc0, 0xdd, 0xca, 0xc8, 0x58, 0x70, 0x53, 0x68, 0xad, 0x74, 0xca, 0x7e,
|
||||
0xf9, 0x5e, 0xd0, 0x8e, 0x06, 0x0a, 0x9e, 0x31, 0x8f, 0xaa, 0x98, 0x4e, 0x08, 0xb5, 0xeb, 0xac,
|
||||
0x2e, 0x37, 0x50, 0x1e, 0xda, 0x75, 0xf6, 0xdd, 0xbe, 0x26, 0x63, 0x2b, 0x13, 0xd0, 0xc2, 0xf2,
|
||||
0xa5, 0x5c, 0x29, 0x2d, 0xf8, 0x7b, 0x6c, 0x9d, 0x34, 0xec, 0xb7, 0xef, 0x05, 0xfd, 0xe8, 0xff,
|
||||
0x0e, 0xce, 0x90, 0x3d, 0x21, 0xa2, 0x67, 0xa4, 0x5b, 0x49, 0x7c, 0x05, 0xd6, 0xb1, 0x26, 0x2e,
|
||||
0x4b, 0xaa, 0xe8, 0x1e, 0xac, 0x3b, 0x12, 0x72, 0x30, 0x8e, 0xb5, 0x7c, 0x2f, 0x68, 0xee, 0x85,
|
||||
0x39, 0x18, 0x47, 0xaf, 0xc8, 0x68, 0x27, 0x24, 0xa0, 0xb5, 0x4c, 0x1c, 0x37, 0xd2, 0x99, 0x2d,
|
||||
0xfb, 0x83, 0x26, 0xad, 0xd8, 0x5d, 0x85, 0xa2, 0x92, 0x94, 0x7f, 0x65, 0x64, 0x16, 0x6f, 0x79,
|
||||
0x06, 0x29, 0x3f, 0xf4, 0xd4, 0xc6, 0x4f, 0x0f, 0x91, 0x3c, 0x42, 0x3a, 0xdf, 0xf7, 0x75, 0x41,
|
||||
0xfa, 0x6f, 0x2a, 0x93, 0x5f, 0x62, 0x07, 0xc5, 0x5e, 0x19, 0x1e, 0xa4, 0x5b, 0x72, 0x82, 0xd2,
|
||||
0x0f, 0x73, 0x09, 0xea, 0xa3, 0x12, 0x47, 0xf5, 0xd9, 0x01, 0x19, 0xee, 0x76, 0xb7, 0xd2, 0x6c,
|
||||
0xa4, 0xe1, 0x4a, 0xb0, 0x2e, 0x96, 0xf5, 0xb7, 0xca, 0x17, 0x18, 0x3f, 0x88, 0xa3, 0x1a, 0x8a,
|
||||
0x42, 0x09, 0xd6, 0x3b, 0xee, 0xe9, 0xa5, 0x50, 0x62, 0x36, 0x7d, 0x9d, 0x6c, 0x94, 0x93, 0xd6,
|
||||
0x4e, 0x15, 0x84, 0xd5, 0x53, 0x98, 0x42, 0xb8, 0x71, 0x21, 0x9e, 0x4b, 0x58, 0xbb, 0x96, 0x65,
|
||||
0x0b, 0xe3, 0x9b, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5d, 0x10, 0xaa, 0xaa, 0x5e, 0x02, 0x00,
|
||||
0x00,
|
||||
// 439 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xc1, 0x4f, 0xdb, 0x30,
|
||||
0x14, 0xc6, 0x17, 0x58, 0xbb, 0xf2, 0x5a, 0x20, 0x33, 0x54, 0x44, 0xbb, 0xac, 0x62, 0x97, 0x08,
|
||||
0xb1, 0x66, 0x62, 0xda, 0x69, 0x27, 0x18, 0x93, 0xa8, 0x54, 0x28, 0x73, 0xd9, 0x61, 0xbb, 0x58,
|
||||
0x69, 0xed, 0xa6, 0x96, 0x32, 0xbf, 0x60, 0x3b, 0x9d, 0xf8, 0xdb, 0x77, 0x99, 0x62, 0x87, 0xd2,
|
||||
0x45, 0x13, 0xb7, 0xf8, 0xfb, 0x7e, 0xf2, 0x7b, 0xf9, 0xfc, 0x41, 0x5f, 0x8b, 0x22, 0x97, 0xf3,
|
||||
0xd4, 0x4a, 0x54, 0x3c, 0xb5, 0xe9, 0xb0, 0xd0, 0x68, 0x91, 0xec, 0x37, 0xe4, 0xe3, 0x3f, 0xdb,
|
||||
0xd0, 0x9e, 0xda, 0xd4, 0x96, 0x86, 0xbc, 0x81, 0x4e, 0x81, 0x46, 0x56, 0x56, 0x14, 0x0c, 0x82,
|
||||
0x78, 0x87, 0xae, 0xcf, 0xe4, 0x04, 0x5e, 0x4b, 0x64, 0x76, 0xa9, 0x45, 0xca, 0x99, 0x2e, 0x95,
|
||||
0x92, 0x2a, 0x8b, 0xb6, 0x06, 0x41, 0xdc, 0xa1, 0xfb, 0x12, 0xef, 0x9c, 0x4e, 0xbd, 0x4c, 0x4e,
|
||||
0x81, 0x98, 0xfb, 0xbc, 0x09, 0x6f, 0x3b, 0x38, 0x34, 0xf7, 0xf9, 0xbf, 0xf4, 0x19, 0xf4, 0x8d,
|
||||
0x98, 0xa3, 0xe2, 0x86, 0xcd, 0xc4, 0x52, 0x2a, 0xce, 0x7e, 0xa5, 0xc6, 0x0a, 0x1d, 0xbd, 0x1c,
|
||||
0x04, 0xf1, 0x2e, 0x3d, 0xa8, 0xcd, 0x0b, 0xe7, 0x5d, 0x3b, 0x8b, 0xbc, 0x85, 0xae, 0x87, 0xd8,
|
||||
0x12, 0x8d, 0x8d, 0x5a, 0x6e, 0x59, 0xf0, 0xd2, 0x15, 0x1a, 0xbb, 0x01, 0x14, 0xa8, 0x6d, 0xd4,
|
||||
0x1e, 0x04, 0x71, 0xeb, 0x11, 0xb8, 0x45, 0x6d, 0xc9, 0x07, 0x38, 0xac, 0x81, 0x39, 0x2a, 0x25,
|
||||
0xe6, 0x96, 0x69, 0x61, 0xf5, 0x43, 0xf4, 0xca, 0x91, 0xc4, 0x7b, 0x5f, 0xbc, 0x45, 0x2b, 0xa7,
|
||||
0xfa, 0x2b, 0x2d, 0xf2, 0xf4, 0x81, 0xe5, 0x98, 0xb1, 0x75, 0x4e, 0x1d, 0x37, 0x3a, 0x74, 0xce,
|
||||
0x18, 0xb3, 0xdb, 0xc7, 0xbc, 0xde, 0xc1, 0xee, 0x42, 0xe6, 0xe2, 0x09, 0xdc, 0x71, 0x60, 0xaf,
|
||||
0x12, 0xd7, 0xd0, 0x27, 0x38, 0x72, 0xd0, 0x7f, 0xee, 0x05, 0x87, 0x1f, 0x56, 0x36, 0x6d, 0xde,
|
||||
0x1d, 0x43, 0x58, 0xef, 0x6e, 0x84, 0x5e, 0x09, 0xcd, 0x24, 0x8f, 0xba, 0x2e, 0xac, 0x3d, 0xaf,
|
||||
0x4f, 0x9d, 0x3c, 0xe2, 0x1b, 0x31, 0x94, 0xa5, 0xe4, 0x51, 0x6f, 0x33, 0xa7, 0xef, 0xa5, 0xe4,
|
||||
0xc7, 0xbf, 0xa1, 0x3f, 0xb5, 0x58, 0xd0, 0xa7, 0x52, 0xd4, 0x5d, 0x48, 0xa0, 0x3d, 0x13, 0x0b,
|
||||
0xd4, 0xc2, 0x35, 0xa1, 0x7b, 0x76, 0x34, 0x6c, 0xf6, 0xc9, 0x83, 0xb4, 0xc6, 0xc8, 0x7b, 0x68,
|
||||
0xa5, 0x8b, 0xea, 0xd9, 0xb6, 0x9e, 0xe7, 0x3d, 0x75, 0xf2, 0x19, 0x0e, 0x1a, 0x83, 0xaf, 0x91,
|
||||
0x0b, 0x42, 0x60, 0x6f, 0x34, 0x39, 0xbf, 0xb9, 0x9c, 0x7e, 0x1b, 0xdf, 0x5d, 0xd1, 0xaf, 0xe7,
|
||||
0x97, 0xe1, 0x0b, 0x12, 0x42, 0x6f, 0x34, 0xf1, 0xa7, 0xc9, 0xcd, 0xf8, 0x47, 0x18, 0x5c, 0x0c,
|
||||
0x7f, 0x9e, 0xae, 0xa4, 0x15, 0xc6, 0x0c, 0x25, 0x26, 0xfe, 0x2b, 0xc9, 0x30, 0x59, 0xd9, 0xc4,
|
||||
0x95, 0x3c, 0x69, 0x8c, 0x9e, 0xb5, 0x9d, 0xfc, 0xf1, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6e,
|
||||
0x0f, 0xf9, 0x52, 0x14, 0x03, 0x00, 0x00,
|
||||
}
|
||||
|
|
|
@ -3313,9 +3313,10 @@ func (m *ReplicaWasRestartedResponse) XXX_DiscardUnknown() {
|
|||
var xxx_messageInfo_ReplicaWasRestartedResponse proto.InternalMessageInfo
|
||||
|
||||
type StopReplicationAndGetStatusRequest struct {
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
StopReplicationMode replicationdata.StopReplicationMode `protobuf:"varint,1,opt,name=stop_replication_mode,json=stopReplicationMode,proto3,enum=replicationdata.StopReplicationMode" json:"stop_replication_mode,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *StopReplicationAndGetStatusRequest) Reset() { *m = StopReplicationAndGetStatusRequest{} }
|
||||
|
@ -3343,11 +3344,23 @@ func (m *StopReplicationAndGetStatusRequest) XXX_DiscardUnknown() {
|
|||
|
||||
var xxx_messageInfo_StopReplicationAndGetStatusRequest proto.InternalMessageInfo
|
||||
|
||||
func (m *StopReplicationAndGetStatusRequest) GetStopReplicationMode() replicationdata.StopReplicationMode {
|
||||
if m != nil {
|
||||
return m.StopReplicationMode
|
||||
}
|
||||
return replicationdata.StopReplicationMode_IOANDSQLTHREAD
|
||||
}
|
||||
|
||||
type StopReplicationAndGetStatusResponse struct {
|
||||
Status *replicationdata.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
// HybridStatus is deprecated. It currently represents a hybrid struct where all data represents the before state,
|
||||
// except for all position related data which comes from the after state. Please use status instead, which holds
|
||||
// discrete replication status calls before and after stopping the replica, or stopping the replica's io_thread.
|
||||
HybridStatus *replicationdata.Status `protobuf:"bytes,1,opt,name=hybrid_status,json=hybridStatus,proto3" json:"hybrid_status,omitempty"` // Deprecated: Do not use.
|
||||
// Status represents the replication status call right before, and right after telling the replica to stop.
|
||||
Status *replicationdata.StopReplicationStatus `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *StopReplicationAndGetStatusResponse) Reset() { *m = StopReplicationAndGetStatusResponse{} }
|
||||
|
@ -3375,7 +3388,15 @@ func (m *StopReplicationAndGetStatusResponse) XXX_DiscardUnknown() {
|
|||
|
||||
var xxx_messageInfo_StopReplicationAndGetStatusResponse proto.InternalMessageInfo
|
||||
|
||||
func (m *StopReplicationAndGetStatusResponse) GetStatus() *replicationdata.Status {
|
||||
// Deprecated: Do not use.
|
||||
func (m *StopReplicationAndGetStatusResponse) GetHybridStatus() *replicationdata.Status {
|
||||
if m != nil {
|
||||
return m.HybridStatus
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *StopReplicationAndGetStatusResponse) GetStatus() *replicationdata.StopReplicationStatus {
|
||||
if m != nil {
|
||||
return m.Status
|
||||
}
|
||||
|
@ -4390,140 +4411,144 @@ func init() {
|
|||
func init() { proto.RegisterFile("tabletmanagerdata.proto", fileDescriptor_ff9ac4f89e61ffa4) }
|
||||
|
||||
var fileDescriptor_ff9ac4f89e61ffa4 = []byte{
|
||||
// 2154 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0xdd, 0x6e, 0x1b, 0xc7,
|
||||
0x15, 0x06, 0xa9, 0x1f, 0x4b, 0x87, 0x3f, 0xa2, 0x56, 0x94, 0x48, 0x51, 0xb1, 0x2c, 0xaf, 0x9d,
|
||||
0xc6, 0x4d, 0x50, 0x2a, 0x51, 0x52, 0x23, 0x48, 0x5b, 0xa0, 0xb2, 0x2d, 0xd9, 0x8e, 0x95, 0x58,
|
||||
0x59, 0xf9, 0xa7, 0x08, 0x8a, 0x2e, 0x86, 0xdc, 0x11, 0xb5, 0xd0, 0x72, 0x67, 0x3d, 0x33, 0x4b,
|
||||
0x89, 0x2f, 0xd1, 0x27, 0x28, 0x7a, 0x53, 0xa0, 0xbd, 0xef, 0x43, 0xf4, 0x11, 0xd2, 0x47, 0xe9,
|
||||
0x45, 0x2f, 0x5a, 0xcc, 0xcc, 0x59, 0x72, 0x97, 0x5c, 0xc9, 0xb2, 0xa3, 0x00, 0xb9, 0x11, 0x76,
|
||||
0xbe, 0xf3, 0x7f, 0xe6, 0xcc, 0x99, 0x33, 0x14, 0x34, 0x24, 0xe9, 0x04, 0x54, 0xf6, 0x49, 0x48,
|
||||
0x7a, 0x94, 0x7b, 0x44, 0x92, 0x76, 0xc4, 0x99, 0x64, 0xd6, 0xf2, 0x14, 0xa1, 0x55, 0x7a, 0x13,
|
||||
0x53, 0x3e, 0x34, 0xf4, 0x56, 0x55, 0xb2, 0x88, 0x8d, 0xf9, 0x5b, 0xab, 0x9c, 0x46, 0x81, 0xdf,
|
||||
0x25, 0xd2, 0x67, 0x61, 0x0a, 0xae, 0x04, 0xac, 0x17, 0x4b, 0x3f, 0x30, 0x4b, 0xfb, 0x7f, 0x05,
|
||||
0x58, 0x7a, 0xa1, 0x14, 0x3f, 0xa2, 0xc7, 0x7e, 0xe8, 0x2b, 0x66, 0xcb, 0x82, 0xd9, 0x90, 0xf4,
|
||||
0x69, 0xb3, 0xb0, 0x55, 0xb8, 0xb7, 0xe8, 0xe8, 0x6f, 0x6b, 0x0d, 0xe6, 0x45, 0xf7, 0x84, 0xf6,
|
||||
0x49, 0xb3, 0xa8, 0x51, 0x5c, 0x59, 0x4d, 0xb8, 0xd1, 0x65, 0x41, 0xdc, 0x0f, 0x45, 0x73, 0x66,
|
||||
0x6b, 0xe6, 0xde, 0xa2, 0x93, 0x2c, 0xad, 0x36, 0xac, 0x44, 0xdc, 0xef, 0x13, 0x3e, 0x74, 0x4f,
|
||||
0xe9, 0xd0, 0x4d, 0xb8, 0x66, 0x35, 0xd7, 0x32, 0x92, 0x9e, 0xd1, 0xe1, 0x43, 0xe4, 0xb7, 0x60,
|
||||
0x56, 0x0e, 0x23, 0xda, 0x9c, 0x33, 0x56, 0xd5, 0xb7, 0x75, 0x0b, 0x4a, 0xca, 0x75, 0x37, 0xa0,
|
||||
0x61, 0x4f, 0x9e, 0x34, 0xe7, 0xb7, 0x0a, 0xf7, 0x66, 0x1d, 0x50, 0xd0, 0x81, 0x46, 0xac, 0x0d,
|
||||
0x58, 0xe4, 0xec, 0xcc, 0xed, 0xb2, 0x38, 0x94, 0xcd, 0x1b, 0x9a, 0xbc, 0xc0, 0xd9, 0xd9, 0x43,
|
||||
0xb5, 0xb6, 0xee, 0xc2, 0xfc, 0xb1, 0x4f, 0x03, 0x4f, 0x34, 0x17, 0xb6, 0x66, 0xee, 0x95, 0x76,
|
||||
0xca, 0x6d, 0x93, 0xaf, 0x7d, 0x05, 0x3a, 0x48, 0xb3, 0xff, 0x5e, 0x80, 0xda, 0x91, 0x0e, 0x26,
|
||||
0x95, 0x82, 0x8f, 0x60, 0x49, 0x59, 0xe9, 0x10, 0x41, 0x5d, 0x8c, 0xdb, 0x64, 0xa3, 0x9a, 0xc0,
|
||||
0x46, 0xc4, 0x7a, 0x0e, 0x66, 0x5f, 0x5c, 0x6f, 0x24, 0x2c, 0x9a, 0x45, 0x6d, 0xce, 0x6e, 0x4f,
|
||||
0x6f, 0xe5, 0x44, 0xaa, 0x9d, 0x9a, 0xcc, 0x02, 0x42, 0x25, 0x74, 0x40, 0xb9, 0xf0, 0x59, 0xd8,
|
||||
0x9c, 0xd1, 0x16, 0x93, 0xa5, 0x72, 0xd4, 0x32, 0x56, 0x1f, 0x9e, 0x90, 0xb0, 0x47, 0x1d, 0x2a,
|
||||
0xe2, 0x40, 0x5a, 0x4f, 0xa0, 0xd2, 0xa1, 0xc7, 0x8c, 0x67, 0x1c, 0x2d, 0xed, 0xdc, 0xc9, 0xb1,
|
||||
0x3e, 0x19, 0xa6, 0x53, 0x36, 0x92, 0x18, 0xcb, 0x3e, 0x94, 0xc9, 0xb1, 0xa4, 0xdc, 0x4d, 0xed,
|
||||
0xf4, 0x15, 0x15, 0x95, 0xb4, 0xa0, 0x81, 0xed, 0xff, 0x14, 0xa0, 0xfa, 0x52, 0x50, 0x7e, 0x48,
|
||||
0x79, 0xdf, 0x17, 0x02, 0x4b, 0xea, 0x84, 0x09, 0x99, 0x94, 0x94, 0xfa, 0x56, 0x58, 0x2c, 0x28,
|
||||
0xc7, 0x82, 0xd2, 0xdf, 0xd6, 0x27, 0xb0, 0x1c, 0x11, 0x21, 0xce, 0x18, 0xf7, 0xdc, 0xee, 0x09,
|
||||
0xed, 0x9e, 0x8a, 0xb8, 0xaf, 0xf3, 0x30, 0xeb, 0xd4, 0x12, 0xc2, 0x43, 0xc4, 0xad, 0xef, 0x00,
|
||||
0x22, 0xee, 0x0f, 0xfc, 0x80, 0xf6, 0xa8, 0x29, 0xac, 0xd2, 0xce, 0x67, 0x39, 0xde, 0x66, 0x7d,
|
||||
0x69, 0x1f, 0x8e, 0x64, 0xf6, 0x42, 0xc9, 0x87, 0x4e, 0x4a, 0x49, 0xeb, 0x77, 0xb0, 0x34, 0x41,
|
||||
0xb6, 0x6a, 0x30, 0x73, 0x4a, 0x87, 0xe8, 0xb9, 0xfa, 0xb4, 0xea, 0x30, 0x37, 0x20, 0x41, 0x4c,
|
||||
0xd1, 0x73, 0xb3, 0xf8, 0xaa, 0xf8, 0x65, 0xc1, 0xfe, 0xa1, 0x00, 0xe5, 0x47, 0x9d, 0xb7, 0xc4,
|
||||
0x5d, 0x85, 0xa2, 0xd7, 0x41, 0xd9, 0xa2, 0xd7, 0x19, 0xe5, 0x61, 0x26, 0x95, 0x87, 0xe7, 0x39,
|
||||
0xa1, 0x6d, 0xe7, 0x84, 0x96, 0x36, 0xf6, 0x53, 0x06, 0xf6, 0xb7, 0x02, 0x94, 0xc6, 0x96, 0x84,
|
||||
0x75, 0x00, 0x35, 0xe5, 0xa7, 0x1b, 0x8d, 0xb1, 0x66, 0x41, 0x7b, 0x79, 0xfb, 0xad, 0x1b, 0xe0,
|
||||
0x2c, 0xc5, 0x99, 0xb5, 0xb0, 0xf6, 0xa1, 0xea, 0x75, 0x32, 0xba, 0xcc, 0x09, 0xba, 0xf5, 0x96,
|
||||
0x88, 0x9d, 0x8a, 0x97, 0x5a, 0x09, 0xfb, 0x23, 0x28, 0x1d, 0xfa, 0x61, 0xcf, 0xa1, 0x6f, 0x62,
|
||||
0x2a, 0xa4, 0x3a, 0x4a, 0x11, 0x19, 0x06, 0x8c, 0x78, 0x18, 0x64, 0xb2, 0xb4, 0xef, 0x41, 0xd9,
|
||||
0x30, 0x8a, 0x88, 0x85, 0x82, 0x5e, 0xc2, 0xf9, 0x31, 0x94, 0x8f, 0x02, 0x4a, 0xa3, 0x44, 0x67,
|
||||
0x0b, 0x16, 0xbc, 0x98, 0xeb, 0xa6, 0xaa, 0x59, 0x67, 0x9c, 0xd1, 0xda, 0x5e, 0x82, 0x0a, 0xf2,
|
||||
0x1a, 0xb5, 0xf6, 0xbf, 0x0b, 0x60, 0xed, 0x9d, 0xd3, 0x6e, 0x2c, 0xe9, 0x13, 0xc6, 0x4e, 0x13,
|
||||
0x1d, 0x79, 0xfd, 0x75, 0x13, 0x20, 0x22, 0x9c, 0xf4, 0xa9, 0xa4, 0xdc, 0x84, 0xbf, 0xe8, 0xa4,
|
||||
0x10, 0xeb, 0x10, 0x16, 0xe9, 0xb9, 0xe4, 0xc4, 0xa5, 0xe1, 0x40, 0x77, 0xda, 0xd2, 0xce, 0xe7,
|
||||
0x39, 0xd9, 0x99, 0xb6, 0xd6, 0xde, 0x53, 0x62, 0x7b, 0xe1, 0xc0, 0xd4, 0xc4, 0x02, 0xc5, 0x65,
|
||||
0xeb, 0x37, 0x50, 0xc9, 0x90, 0xde, 0xa9, 0x1e, 0x8e, 0x61, 0x25, 0x63, 0x0a, 0xf3, 0x78, 0x0b,
|
||||
0x4a, 0xf4, 0xdc, 0x97, 0xae, 0x90, 0x44, 0xc6, 0x02, 0x13, 0x04, 0x0a, 0x3a, 0xd2, 0x88, 0xbe,
|
||||
0x46, 0xa4, 0xc7, 0x62, 0x39, 0xba, 0x46, 0xf4, 0x0a, 0x71, 0xca, 0x93, 0x53, 0x80, 0x2b, 0x7b,
|
||||
0x00, 0xb5, 0xc7, 0x54, 0x9a, 0xbe, 0x92, 0xa4, 0x6f, 0x0d, 0xe6, 0x75, 0xe0, 0xa6, 0xe2, 0x16,
|
||||
0x1d, 0x5c, 0x59, 0x77, 0xa0, 0xe2, 0x87, 0xdd, 0x20, 0xf6, 0xa8, 0x3b, 0xf0, 0xe9, 0x99, 0xd0,
|
||||
0x26, 0x16, 0x9c, 0x32, 0x82, 0xaf, 0x14, 0x66, 0x7d, 0x08, 0x55, 0x7a, 0x6e, 0x98, 0x50, 0x89,
|
||||
0xb9, 0xb6, 0x2a, 0x88, 0xea, 0x06, 0x2d, 0x6c, 0x0a, 0xcb, 0x29, 0xbb, 0x18, 0xdd, 0x21, 0x2c,
|
||||
0x9b, 0xce, 0x98, 0x6a, 0xf6, 0xef, 0xd2, 0x6d, 0x6b, 0x62, 0x02, 0xb1, 0x1b, 0xb0, 0xfa, 0x98,
|
||||
0xca, 0x54, 0x09, 0x63, 0x8c, 0xf6, 0xf7, 0xb0, 0x36, 0x49, 0x40, 0x27, 0x7e, 0x0f, 0xa5, 0xec,
|
||||
0xa1, 0x53, 0xe6, 0x37, 0x73, 0xcc, 0xa7, 0x85, 0xd3, 0x22, 0x76, 0x1d, 0xac, 0x23, 0x2a, 0x1d,
|
||||
0x4a, 0xbc, 0xe7, 0x61, 0x30, 0x4c, 0x2c, 0xae, 0xc2, 0x4a, 0x06, 0xc5, 0x12, 0x1e, 0xc3, 0xaf,
|
||||
0xb9, 0x2f, 0x69, 0xc2, 0xbd, 0x06, 0xf5, 0x2c, 0x8c, 0xec, 0x5f, 0xc3, 0xb2, 0xb9, 0x9c, 0x5e,
|
||||
0x0c, 0xa3, 0x84, 0xd9, 0xfa, 0x35, 0x94, 0x8c, 0x7b, 0xae, 0xbe, 0xe0, 0x95, 0xcb, 0xd5, 0x9d,
|
||||
0x7a, 0x7b, 0x34, 0xaf, 0xe8, 0x9c, 0x4b, 0x2d, 0x01, 0x72, 0xf4, 0xad, 0xfc, 0x4c, 0xeb, 0x1a,
|
||||
0x3b, 0xe4, 0xd0, 0x63, 0x4e, 0xc5, 0x89, 0x2a, 0xa9, 0xb4, 0x43, 0x59, 0x18, 0xd9, 0x1b, 0xb0,
|
||||
0xea, 0xc4, 0xe1, 0x13, 0x4a, 0x02, 0x79, 0xa2, 0x2f, 0x8e, 0x44, 0xa0, 0x09, 0x6b, 0x93, 0x04,
|
||||
0x14, 0xf9, 0x02, 0x9a, 0x4f, 0x7b, 0x21, 0xe3, 0xd4, 0x10, 0xf7, 0x38, 0x67, 0x3c, 0xd3, 0x52,
|
||||
0xa4, 0xa4, 0x3c, 0x1c, 0x37, 0x0a, 0xbd, 0xb4, 0x37, 0x60, 0x3d, 0x47, 0x0a, 0x55, 0x7e, 0xa5,
|
||||
0x9c, 0x56, 0xfd, 0x24, 0x5b, 0xc9, 0x77, 0xa0, 0x72, 0x46, 0x7c, 0xe9, 0x46, 0x4c, 0x8c, 0x8b,
|
||||
0x69, 0xd1, 0x29, 0x2b, 0xf0, 0x10, 0x31, 0x13, 0x59, 0x5a, 0x16, 0x75, 0xee, 0xc0, 0xda, 0x21,
|
||||
0xa7, 0xc7, 0x81, 0xdf, 0x3b, 0x99, 0x38, 0x20, 0x6a, 0x26, 0xd3, 0x89, 0x4b, 0x4e, 0x48, 0xb2,
|
||||
0xb4, 0x7b, 0xd0, 0x98, 0x92, 0xc1, 0xba, 0x3a, 0x80, 0xaa, 0xe1, 0x72, 0xb9, 0x9e, 0x2b, 0x92,
|
||||
0x7e, 0xfe, 0xe1, 0x85, 0x95, 0x9d, 0x9e, 0x42, 0x9c, 0x4a, 0x37, 0xb5, 0x12, 0xf6, 0x7f, 0x0b,
|
||||
0x60, 0xed, 0x46, 0x51, 0x30, 0xcc, 0x7a, 0x56, 0x83, 0x19, 0xf1, 0x26, 0x48, 0x5a, 0x8c, 0x78,
|
||||
0x13, 0xa8, 0x16, 0x73, 0xcc, 0x78, 0x97, 0xe2, 0x61, 0x35, 0x0b, 0x35, 0x06, 0x90, 0x20, 0x60,
|
||||
0x67, 0x6e, 0x6a, 0x86, 0xd5, 0x9d, 0x61, 0xc1, 0xa9, 0x69, 0x82, 0x33, 0xc6, 0xa7, 0x07, 0xa0,
|
||||
0xd9, 0xeb, 0x1a, 0x80, 0xe6, 0xde, 0x73, 0x00, 0xfa, 0x47, 0x01, 0x56, 0x32, 0xd1, 0x63, 0x8e,
|
||||
0x7f, 0x7e, 0xa3, 0xda, 0x0a, 0x2c, 0x1f, 0xb0, 0xee, 0xa9, 0xe9, 0x7a, 0xc9, 0xd1, 0xa8, 0x83,
|
||||
0x95, 0x06, 0xc7, 0x07, 0xef, 0x65, 0x18, 0x4c, 0x31, 0xaf, 0x41, 0x3d, 0x0b, 0x23, 0xfb, 0x3f,
|
||||
0x0b, 0xd0, 0xc4, 0x2b, 0x62, 0x9f, 0xca, 0xee, 0xc9, 0xae, 0x78, 0xd4, 0x19, 0xd5, 0x41, 0x1d,
|
||||
0xe6, 0xf4, 0x28, 0xae, 0x13, 0x50, 0x76, 0xcc, 0xc2, 0x6a, 0xc0, 0x0d, 0xaf, 0xe3, 0xea, 0xab,
|
||||
0x11, 0x6f, 0x07, 0xaf, 0xf3, 0xad, 0xba, 0x1c, 0xd7, 0x61, 0xa1, 0x4f, 0xce, 0x5d, 0xce, 0xce,
|
||||
0x04, 0x0e, 0x83, 0x37, 0xfa, 0xe4, 0xdc, 0x61, 0x67, 0x42, 0x0f, 0xea, 0xbe, 0xd0, 0x13, 0x78,
|
||||
0xc7, 0x0f, 0x03, 0xd6, 0x13, 0x7a, 0xfb, 0x17, 0x9c, 0x2a, 0xc2, 0x0f, 0x0c, 0xaa, 0xce, 0x1a,
|
||||
0xd7, 0xc7, 0x28, 0xbd, 0xb9, 0x0b, 0x4e, 0x99, 0xa7, 0xce, 0x96, 0xfd, 0x18, 0xd6, 0x73, 0x7c,
|
||||
0xc6, 0xdd, 0xfb, 0x18, 0xe6, 0xcd, 0xd1, 0xc0, 0x6d, 0xb3, 0xf0, 0x39, 0xf1, 0x9d, 0xfa, 0x8b,
|
||||
0xc7, 0x00, 0x39, 0xec, 0x3f, 0x17, 0xe0, 0x66, 0x56, 0xd3, 0x6e, 0x10, 0xa8, 0x01, 0x4c, 0x5c,
|
||||
0x7f, 0x0a, 0xa6, 0x22, 0x9b, 0xcd, 0x89, 0xec, 0x00, 0x36, 0x2f, 0xf2, 0xe7, 0x3d, 0xc2, 0x7b,
|
||||
0x36, 0xb9, 0xb7, 0xbb, 0x51, 0x74, 0x79, 0x60, 0x69, 0xff, 0x8b, 0x19, 0xff, 0xa7, 0x93, 0xae,
|
||||
0x95, 0xbd, 0x87, 0x57, 0x2d, 0x68, 0xa6, 0xfa, 0x82, 0x99, 0x38, 0x92, 0x32, 0x3d, 0x80, 0xf5,
|
||||
0x1c, 0x1a, 0x1a, 0xd9, 0x56, 0xd3, 0xc7, 0x68, 0x62, 0x29, 0xed, 0x34, 0xda, 0x93, 0x6f, 0x67,
|
||||
0x14, 0x40, 0x36, 0x75, 0xab, 0x7c, 0x43, 0x84, 0xa4, 0x3c, 0xe9, 0xd2, 0x89, 0x99, 0x2f, 0x60,
|
||||
0x6d, 0x92, 0x80, 0x36, 0x5a, 0xb0, 0x30, 0xd1, 0xe6, 0x47, 0x6b, 0x25, 0xf5, 0x9a, 0xf8, 0x72,
|
||||
0x9f, 0x4d, 0xea, 0xbb, 0x54, 0x6a, 0x1d, 0x1a, 0x53, 0x52, 0x78, 0xf8, 0x9a, 0xb0, 0x76, 0x24,
|
||||
0x59, 0x94, 0x8a, 0x38, 0x71, 0x70, 0x1d, 0x1a, 0x53, 0x14, 0x14, 0xfa, 0x13, 0xdc, 0x9c, 0x20,
|
||||
0x7d, 0xe3, 0x87, 0x7e, 0x3f, 0xee, 0x5f, 0xc1, 0x19, 0xeb, 0x36, 0xe8, 0x5b, 0xcb, 0x95, 0x7e,
|
||||
0x9f, 0x26, 0xe3, 0xdd, 0x8c, 0x53, 0x52, 0xd8, 0x0b, 0x03, 0xd9, 0xbf, 0x85, 0xcd, 0x8b, 0xf4,
|
||||
0x5f, 0x21, 0x47, 0xda, 0x71, 0xc2, 0x65, 0x4e, 0x4c, 0x2d, 0x68, 0x4e, 0x93, 0x30, 0xa8, 0x0e,
|
||||
0xdc, 0x9e, 0xa4, 0xbd, 0x0c, 0xa5, 0x1f, 0xec, 0xaa, 0x26, 0x78, 0x4d, 0x81, 0xdd, 0x05, 0xfb,
|
||||
0x32, 0x1b, 0xe8, 0x49, 0x1d, 0xac, 0xc7, 0x34, 0xe1, 0x19, 0xd5, 0xe5, 0x27, 0xb0, 0x92, 0x41,
|
||||
0x31, 0x13, 0x75, 0x98, 0x23, 0x9e, 0xc7, 0x93, 0x0b, 0xdc, 0x2c, 0x54, 0x0e, 0x1c, 0x2a, 0xe8,
|
||||
0x05, 0x39, 0x98, 0x26, 0xa1, 0xe5, 0x6d, 0x68, 0xbc, 0x4a, 0xe1, 0xea, 0xb0, 0xe5, 0x1e, 0xd6,
|
||||
0x45, 0x3c, 0xac, 0xf6, 0x3e, 0x34, 0xa7, 0x05, 0xde, 0xab, 0x4d, 0xdc, 0x4c, 0xeb, 0x19, 0x57,
|
||||
0x6b, 0x62, 0xbe, 0x0a, 0x45, 0xdf, 0xc3, 0x67, 0x42, 0xd1, 0xf7, 0x32, 0x1b, 0x51, 0x9c, 0x28,
|
||||
0x80, 0x2d, 0xd8, 0xbc, 0x48, 0x19, 0xc6, 0xb9, 0x02, 0xcb, 0x4f, 0x43, 0x5f, 0x9a, 0x03, 0x98,
|
||||
0x24, 0xe6, 0x53, 0xb0, 0xd2, 0xe0, 0x15, 0x2a, 0xed, 0x87, 0x02, 0x6c, 0x1e, 0xb2, 0x28, 0x0e,
|
||||
0xf4, 0x1c, 0x19, 0x11, 0x4e, 0x43, 0xf9, 0x35, 0x8b, 0x79, 0x48, 0x82, 0xc4, 0xef, 0x5f, 0xc0,
|
||||
0x92, 0xaa, 0x07, 0xb7, 0xcb, 0x29, 0x91, 0xd4, 0x73, 0xc3, 0xe4, 0xad, 0x53, 0x51, 0xf0, 0x43,
|
||||
0x83, 0x7e, 0x2b, 0xd4, 0x7b, 0x88, 0x74, 0x95, 0xd2, 0x74, 0x4b, 0x07, 0x03, 0xe9, 0xb6, 0xfe,
|
||||
0x25, 0x94, 0xfb, 0xda, 0x33, 0x97, 0x04, 0x3e, 0x31, 0xad, 0xbd, 0xb4, 0xb3, 0x3a, 0x39, 0x1b,
|
||||
0xef, 0x2a, 0xa2, 0x53, 0x32, 0xac, 0x7a, 0x61, 0x7d, 0x06, 0xf5, 0x54, 0x93, 0x1a, 0x8f, 0x90,
|
||||
0xb3, 0xda, 0xc6, 0x4a, 0x8a, 0x36, 0x9a, 0x24, 0x6f, 0xc3, 0xad, 0x0b, 0xe3, 0xc2, 0x14, 0xfe,
|
||||
0xb5, 0x60, 0xd2, 0x85, 0x89, 0x4e, 0xe2, 0xfd, 0x15, 0xcc, 0x1b, 0x7e, 0xdc, 0xf4, 0x0b, 0x1c,
|
||||
0x44, 0xa6, 0x0b, 0x7d, 0x2b, 0x5e, 0xe8, 0x5b, 0x5e, 0x46, 0x67, 0x72, 0x32, 0xaa, 0xa6, 0x90,
|
||||
0x8c, 0x7f, 0xe3, 0xe1, 0xe4, 0x11, 0xed, 0x33, 0x49, 0xb3, 0x9b, 0xbf, 0x03, 0xf5, 0x2c, 0x7c,
|
||||
0xb5, 0x46, 0xf3, 0x32, 0xf4, 0x58, 0x9e, 0xba, 0x16, 0x34, 0xa7, 0x49, 0xe8, 0xc1, 0xc6, 0xe8,
|
||||
0x82, 0x79, 0x4d, 0xc4, 0x21, 0x67, 0x8a, 0xc5, 0x4b, 0x04, 0x3f, 0x80, 0x56, 0x1e, 0x11, 0x45,
|
||||
0xff, 0x55, 0x80, 0xda, 0x11, 0xcd, 0xd6, 0xed, 0xbb, 0xa6, 0x3c, 0x27, 0x7f, 0xc5, 0xbc, 0x8a,
|
||||
0xbc, 0x0f, 0x0d, 0x3d, 0x62, 0xab, 0x27, 0x3a, 0x97, 0x39, 0xf3, 0xf5, 0xaa, 0x26, 0x4f, 0xf6,
|
||||
0xb3, 0xe9, 0xa7, 0xca, 0x6c, 0xce, 0x53, 0x65, 0x05, 0x96, 0x53, 0x71, 0x60, 0x74, 0xcf, 0xd2,
|
||||
0xb1, 0x3b, 0x54, 0xdb, 0x1d, 0x65, 0xe6, 0x1d, 0xc3, 0xb4, 0x6f, 0xc2, 0x46, 0xae, 0x32, 0xb4,
|
||||
0xa5, 0x3b, 0x71, 0xe6, 0x8a, 0xd9, 0x0d, 0x3d, 0xf5, 0x90, 0xcf, 0xcc, 0x02, 0xaf, 0xe0, 0xce,
|
||||
0xa5, 0x5c, 0x3f, 0x62, 0x2a, 0xc0, 0xbd, 0xcd, 0x1e, 0x1f, 0x75, 0xbf, 0x4f, 0x12, 0xae, 0x50,
|
||||
0x88, 0x47, 0x50, 0x79, 0x40, 0xba, 0xa7, 0xf1, 0x68, 0xb2, 0xda, 0x82, 0x52, 0x97, 0x85, 0xdd,
|
||||
0x98, 0x73, 0x1a, 0x76, 0x87, 0xd8, 0x71, 0xd2, 0x90, 0xe2, 0xd0, 0xcf, 0x23, 0xb3, 0x05, 0xf8,
|
||||
0xa6, 0x4a, 0x43, 0xf6, 0x7d, 0xa8, 0x26, 0x4a, 0xd1, 0x85, 0xbb, 0x30, 0x47, 0x07, 0xe3, 0x0d,
|
||||
0xa8, 0xb6, 0x93, 0x7f, 0x10, 0xec, 0x29, 0xd4, 0x31, 0x44, 0xbc, 0x5f, 0x24, 0xe3, 0x74, 0x9f,
|
||||
0xb3, 0x7e, 0xc6, 0x2f, 0x7b, 0x57, 0x95, 0xfe, 0x14, 0xed, 0x9d, 0xd4, 0xd7, 0xc1, 0x3a, 0x0a,
|
||||
0xc8, 0x80, 0x66, 0x37, 0x6a, 0x1f, 0x56, 0x32, 0xe8, 0xfb, 0x6e, 0x8c, 0x05, 0x35, 0xb5, 0xe1,
|
||||
0x5a, 0x57, 0xa2, 0x5b, 0xd5, 0xea, 0x18, 0xc3, 0xfa, 0xf9, 0x83, 0x99, 0x8e, 0x34, 0x78, 0xbd,
|
||||
0xc3, 0xcf, 0x7d, 0x35, 0xa3, 0x4c, 0x6a, 0xbe, 0x42, 0x11, 0x68, 0x37, 0x09, 0x97, 0x19, 0xdf,
|
||||
0x55, 0xb6, 0x52, 0x20, 0x3a, 0xff, 0x47, 0xd8, 0x18, 0xa3, 0xd7, 0x3e, 0xe4, 0x6c, 0xc2, 0x07,
|
||||
0xf9, 0xda, 0xd1, 0xba, 0x65, 0x7e, 0xa9, 0x53, 0xd4, 0xd1, 0xfe, 0xfd, 0xd2, 0xfc, 0x8a, 0x86,
|
||||
0xd8, 0xa5, 0xa3, 0xcd, 0x5f, 0x0a, 0x50, 0x53, 0x8d, 0x3d, 0x1d, 0xe7, 0xcf, 0xe8, 0xda, 0xc1,
|
||||
0xd1, 0x22, 0x9b, 0x70, 0x35, 0x92, 0x2a, 0x20, 0xa7, 0xe1, 0xab, 0x91, 0x74, 0x8a, 0x84, 0x62,
|
||||
0x4f, 0xc7, 0xb4, 0x1f, 0xdb, 0x0e, 0x37, 0x60, 0x3d, 0x47, 0x95, 0xb1, 0xf3, 0xe0, 0xd3, 0xef,
|
||||
0xdb, 0x03, 0x5f, 0x52, 0x21, 0xda, 0x3e, 0xdb, 0x36, 0x5f, 0xdb, 0x3d, 0xb6, 0x3d, 0x90, 0xdb,
|
||||
0xfa, 0x5f, 0x7f, 0xdb, 0x53, 0xbf, 0x15, 0x74, 0xe6, 0x35, 0xe1, 0xf3, 0xff, 0x07, 0x00, 0x00,
|
||||
0xff, 0xff, 0x00, 0xaf, 0x7c, 0xe6, 0x84, 0x1c, 0x00, 0x00,
|
||||
// 2217 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0xdd, 0x72, 0xdb, 0xc6,
|
||||
0x15, 0x1e, 0x50, 0x3f, 0x96, 0x0e, 0x7f, 0x44, 0x81, 0x94, 0x08, 0x51, 0xb1, 0x2c, 0xc3, 0x4e,
|
||||
0xe2, 0x26, 0x53, 0x2a, 0x51, 0x52, 0x4f, 0x26, 0xfd, 0x99, 0xca, 0xb6, 0x64, 0x3b, 0x56, 0x62,
|
||||
0x05, 0xb2, 0xe3, 0x4c, 0xa6, 0x53, 0xcc, 0x92, 0x58, 0x91, 0x18, 0x81, 0x58, 0x78, 0x77, 0x41,
|
||||
0x89, 0x37, 0x7d, 0x84, 0x3e, 0x41, 0xa7, 0x37, 0x9d, 0x69, 0xef, 0xfb, 0x10, 0x7d, 0x84, 0xf4,
|
||||
0x51, 0x7a, 0xd1, 0x8b, 0x76, 0xf6, 0x07, 0x24, 0x40, 0x40, 0xb2, 0xec, 0xaa, 0x33, 0xb9, 0xd1,
|
||||
0x60, 0xbf, 0xf3, 0x7f, 0xf6, 0xec, 0xd9, 0xb3, 0x14, 0xb4, 0x38, 0xea, 0x06, 0x98, 0x0f, 0x51,
|
||||
0x88, 0xfa, 0x98, 0x7a, 0x88, 0xa3, 0x4e, 0x44, 0x09, 0x27, 0xe6, 0x6a, 0x8e, 0xd0, 0x2e, 0xbf,
|
||||
0x8e, 0x31, 0x1d, 0x2b, 0x7a, 0xbb, 0xc6, 0x49, 0x44, 0xa6, 0xfc, 0xed, 0x35, 0x8a, 0xa3, 0xc0,
|
||||
0xef, 0x21, 0xee, 0x93, 0x30, 0x05, 0x57, 0x03, 0xd2, 0x8f, 0xb9, 0x1f, 0xa8, 0xa5, 0xfd, 0x1f,
|
||||
0x03, 0x56, 0x5e, 0x08, 0xc5, 0x8f, 0xf0, 0x89, 0x1f, 0xfa, 0x82, 0xd9, 0x34, 0x61, 0x3e, 0x44,
|
||||
0x43, 0x6c, 0x19, 0xdb, 0xc6, 0xbd, 0x65, 0x47, 0x7e, 0x9b, 0xeb, 0xb0, 0xc8, 0x7a, 0x03, 0x3c,
|
||||
0x44, 0x56, 0x49, 0xa2, 0x7a, 0x65, 0x5a, 0x70, 0xa3, 0x47, 0x82, 0x78, 0x18, 0x32, 0x6b, 0x6e,
|
||||
0x7b, 0xee, 0xde, 0xb2, 0x93, 0x2c, 0xcd, 0x0e, 0x34, 0x22, 0xea, 0x0f, 0x11, 0x1d, 0xbb, 0xa7,
|
||||
0x78, 0xec, 0x26, 0x5c, 0xf3, 0x92, 0x6b, 0x55, 0x93, 0x9e, 0xe1, 0xf1, 0x43, 0xcd, 0x6f, 0xc2,
|
||||
0x3c, 0x1f, 0x47, 0xd8, 0x5a, 0x50, 0x56, 0xc5, 0xb7, 0x79, 0x0b, 0xca, 0xc2, 0x75, 0x37, 0xc0,
|
||||
0x61, 0x9f, 0x0f, 0xac, 0xc5, 0x6d, 0xe3, 0xde, 0xbc, 0x03, 0x02, 0x3a, 0x94, 0x88, 0xb9, 0x09,
|
||||
0xcb, 0x94, 0x9c, 0xb9, 0x3d, 0x12, 0x87, 0xdc, 0xba, 0x21, 0xc9, 0x4b, 0x94, 0x9c, 0x3d, 0x14,
|
||||
0x6b, 0xf3, 0x2e, 0x2c, 0x9e, 0xf8, 0x38, 0xf0, 0x98, 0xb5, 0xb4, 0x3d, 0x77, 0xaf, 0xbc, 0x5b,
|
||||
0xe9, 0xa8, 0x7c, 0x1d, 0x08, 0xd0, 0xd1, 0x34, 0xfb, 0xaf, 0x06, 0xd4, 0x8f, 0x65, 0x30, 0xa9,
|
||||
0x14, 0x7c, 0x08, 0x2b, 0xc2, 0x4a, 0x17, 0x31, 0xec, 0xea, 0xb8, 0x55, 0x36, 0x6a, 0x09, 0xac,
|
||||
0x44, 0xcc, 0xe7, 0xa0, 0xf6, 0xc5, 0xf5, 0x26, 0xc2, 0xcc, 0x2a, 0x49, 0x73, 0x76, 0x27, 0xbf,
|
||||
0x95, 0x33, 0xa9, 0x76, 0xea, 0x3c, 0x0b, 0x30, 0x91, 0xd0, 0x11, 0xa6, 0xcc, 0x27, 0xa1, 0x35,
|
||||
0x27, 0x2d, 0x26, 0x4b, 0xe1, 0xa8, 0xa9, 0xac, 0x3e, 0x1c, 0xa0, 0xb0, 0x8f, 0x1d, 0xcc, 0xe2,
|
||||
0x80, 0x9b, 0x4f, 0xa0, 0xda, 0xc5, 0x27, 0x84, 0x66, 0x1c, 0x2d, 0xef, 0xde, 0x29, 0xb0, 0x3e,
|
||||
0x1b, 0xa6, 0x53, 0x51, 0x92, 0x3a, 0x96, 0x03, 0xa8, 0xa0, 0x13, 0x8e, 0xa9, 0x9b, 0xda, 0xe9,
|
||||
0x2b, 0x2a, 0x2a, 0x4b, 0x41, 0x05, 0xdb, 0xff, 0x32, 0xa0, 0xf6, 0x92, 0x61, 0x7a, 0x84, 0xe9,
|
||||
0xd0, 0x67, 0x4c, 0x97, 0xd4, 0x80, 0x30, 0x9e, 0x94, 0x94, 0xf8, 0x16, 0x58, 0xcc, 0x30, 0xd5,
|
||||
0x05, 0x25, 0xbf, 0xcd, 0x8f, 0x61, 0x35, 0x42, 0x8c, 0x9d, 0x11, 0xea, 0xb9, 0xbd, 0x01, 0xee,
|
||||
0x9d, 0xb2, 0x78, 0x28, 0xf3, 0x30, 0xef, 0xd4, 0x13, 0xc2, 0x43, 0x8d, 0x9b, 0xdf, 0x02, 0x44,
|
||||
0xd4, 0x1f, 0xf9, 0x01, 0xee, 0x63, 0x55, 0x58, 0xe5, 0xdd, 0x4f, 0x0b, 0xbc, 0xcd, 0xfa, 0xd2,
|
||||
0x39, 0x9a, 0xc8, 0xec, 0x87, 0x9c, 0x8e, 0x9d, 0x94, 0x92, 0xf6, 0xaf, 0x61, 0x65, 0x86, 0x6c,
|
||||
0xd6, 0x61, 0xee, 0x14, 0x8f, 0xb5, 0xe7, 0xe2, 0xd3, 0x6c, 0xc2, 0xc2, 0x08, 0x05, 0x31, 0xd6,
|
||||
0x9e, 0xab, 0xc5, 0x97, 0xa5, 0x2f, 0x0c, 0xfb, 0x47, 0x03, 0x2a, 0x8f, 0xba, 0x6f, 0x88, 0xbb,
|
||||
0x06, 0x25, 0xaf, 0xab, 0x65, 0x4b, 0x5e, 0x77, 0x92, 0x87, 0xb9, 0x54, 0x1e, 0x9e, 0x17, 0x84,
|
||||
0xb6, 0x53, 0x10, 0x5a, 0xda, 0xd8, 0xff, 0x33, 0xb0, 0xbf, 0x18, 0x50, 0x9e, 0x5a, 0x62, 0xe6,
|
||||
0x21, 0xd4, 0x85, 0x9f, 0x6e, 0x34, 0xc5, 0x2c, 0x43, 0x7a, 0x79, 0xfb, 0x8d, 0x1b, 0xe0, 0xac,
|
||||
0xc4, 0x99, 0x35, 0x33, 0x0f, 0xa0, 0xe6, 0x75, 0x33, 0xba, 0xd4, 0x09, 0xba, 0xf5, 0x86, 0x88,
|
||||
0x9d, 0xaa, 0x97, 0x5a, 0x31, 0xfb, 0x43, 0x28, 0x1f, 0xf9, 0x61, 0xdf, 0xc1, 0xaf, 0x63, 0xcc,
|
||||
0xb8, 0x38, 0x4a, 0x11, 0x1a, 0x07, 0x04, 0x79, 0x3a, 0xc8, 0x64, 0x69, 0xdf, 0x83, 0x8a, 0x62,
|
||||
0x64, 0x11, 0x09, 0x19, 0xbe, 0x84, 0xf3, 0x23, 0xa8, 0x1c, 0x07, 0x18, 0x47, 0x89, 0xce, 0x36,
|
||||
0x2c, 0x79, 0x31, 0x95, 0x4d, 0x55, 0xb2, 0xce, 0x39, 0x93, 0xb5, 0xbd, 0x02, 0x55, 0xcd, 0xab,
|
||||
0xd4, 0xda, 0xff, 0x34, 0xc0, 0xdc, 0x3f, 0xc7, 0xbd, 0x98, 0xe3, 0x27, 0x84, 0x9c, 0x26, 0x3a,
|
||||
0x8a, 0xfa, 0xeb, 0x16, 0x40, 0x84, 0x28, 0x1a, 0x62, 0x8e, 0xa9, 0x0a, 0x7f, 0xd9, 0x49, 0x21,
|
||||
0xe6, 0x11, 0x2c, 0xe3, 0x73, 0x4e, 0x91, 0x8b, 0xc3, 0x91, 0xec, 0xb4, 0xe5, 0xdd, 0xcf, 0x0a,
|
||||
0xb2, 0x93, 0xb7, 0xd6, 0xd9, 0x17, 0x62, 0xfb, 0xe1, 0x48, 0xd5, 0xc4, 0x12, 0xd6, 0xcb, 0xf6,
|
||||
0x2f, 0xa1, 0x9a, 0x21, 0xbd, 0x55, 0x3d, 0x9c, 0x40, 0x23, 0x63, 0x4a, 0xe7, 0xf1, 0x16, 0x94,
|
||||
0xf1, 0xb9, 0xcf, 0x5d, 0xc6, 0x11, 0x8f, 0x99, 0x4e, 0x10, 0x08, 0xe8, 0x58, 0x22, 0xf2, 0x1a,
|
||||
0xe1, 0x1e, 0x89, 0xf9, 0xe4, 0x1a, 0x91, 0x2b, 0x8d, 0x63, 0x9a, 0x9c, 0x02, 0xbd, 0xb2, 0x47,
|
||||
0x50, 0x7f, 0x8c, 0xb9, 0xea, 0x2b, 0x49, 0xfa, 0xd6, 0x61, 0x51, 0x06, 0xae, 0x2a, 0x6e, 0xd9,
|
||||
0xd1, 0x2b, 0xf3, 0x0e, 0x54, 0xfd, 0xb0, 0x17, 0xc4, 0x1e, 0x76, 0x47, 0x3e, 0x3e, 0x63, 0xd2,
|
||||
0xc4, 0x92, 0x53, 0xd1, 0xe0, 0x77, 0x02, 0x33, 0xdf, 0x87, 0x1a, 0x3e, 0x57, 0x4c, 0x5a, 0x89,
|
||||
0xba, 0xb6, 0xaa, 0x1a, 0x95, 0x0d, 0x9a, 0xd9, 0x18, 0x56, 0x53, 0x76, 0x75, 0x74, 0x47, 0xb0,
|
||||
0xaa, 0x3a, 0x63, 0xaa, 0xd9, 0xbf, 0x4d, 0xb7, 0xad, 0xb3, 0x19, 0xc4, 0x6e, 0xc1, 0xda, 0x63,
|
||||
0xcc, 0x53, 0x25, 0xac, 0x63, 0xb4, 0x7f, 0x80, 0xf5, 0x59, 0x82, 0x76, 0xe2, 0xb7, 0x50, 0xce,
|
||||
0x1e, 0x3a, 0x61, 0x7e, 0xab, 0xc0, 0x7c, 0x5a, 0x38, 0x2d, 0x62, 0x37, 0xc1, 0x3c, 0xc6, 0xdc,
|
||||
0xc1, 0xc8, 0x7b, 0x1e, 0x06, 0xe3, 0xc4, 0xe2, 0x1a, 0x34, 0x32, 0xa8, 0x2e, 0xe1, 0x29, 0xfc,
|
||||
0x8a, 0xfa, 0x1c, 0x27, 0xdc, 0xeb, 0xd0, 0xcc, 0xc2, 0x9a, 0xfd, 0x2b, 0x58, 0x55, 0x97, 0xd3,
|
||||
0x8b, 0x71, 0x94, 0x30, 0x9b, 0xbf, 0x80, 0xb2, 0x72, 0xcf, 0x95, 0x17, 0xbc, 0x70, 0xb9, 0xb6,
|
||||
0xdb, 0xec, 0x4c, 0xe6, 0x15, 0x99, 0x73, 0x2e, 0x25, 0x80, 0x4f, 0xbe, 0x85, 0x9f, 0x69, 0x5d,
|
||||
0x53, 0x87, 0x1c, 0x7c, 0x42, 0x31, 0x1b, 0x88, 0x92, 0x4a, 0x3b, 0x94, 0x85, 0x35, 0x7b, 0x0b,
|
||||
0xd6, 0x9c, 0x38, 0x7c, 0x82, 0x51, 0xc0, 0x07, 0xf2, 0xe2, 0x48, 0x04, 0x2c, 0x58, 0x9f, 0x25,
|
||||
0x68, 0x91, 0xcf, 0xc1, 0x7a, 0xda, 0x0f, 0x09, 0xc5, 0x8a, 0xb8, 0x4f, 0x29, 0xa1, 0x99, 0x96,
|
||||
0xc2, 0x39, 0xa6, 0xe1, 0xb4, 0x51, 0xc8, 0xa5, 0xbd, 0x09, 0x1b, 0x05, 0x52, 0x5a, 0xe5, 0x97,
|
||||
0xc2, 0x69, 0xd1, 0x4f, 0xb2, 0x95, 0x7c, 0x07, 0xaa, 0x67, 0xc8, 0xe7, 0x6e, 0x44, 0xd8, 0xb4,
|
||||
0x98, 0x96, 0x9d, 0x8a, 0x00, 0x8f, 0x34, 0xa6, 0x22, 0x4b, 0xcb, 0x6a, 0x9d, 0xbb, 0xb0, 0x7e,
|
||||
0x44, 0xf1, 0x49, 0xe0, 0xf7, 0x07, 0x33, 0x07, 0x44, 0xcc, 0x64, 0x32, 0x71, 0xc9, 0x09, 0x49,
|
||||
0x96, 0x76, 0x1f, 0x5a, 0x39, 0x19, 0x5d, 0x57, 0x87, 0x50, 0x53, 0x5c, 0x2e, 0x95, 0x73, 0x45,
|
||||
0xd2, 0xcf, 0xdf, 0xbf, 0xb0, 0xb2, 0xd3, 0x53, 0x88, 0x53, 0xed, 0xa5, 0x56, 0xcc, 0xfe, 0xb7,
|
||||
0x01, 0xe6, 0x5e, 0x14, 0x05, 0xe3, 0xac, 0x67, 0x75, 0x98, 0x63, 0xaf, 0x83, 0xa4, 0xc5, 0xb0,
|
||||
0xd7, 0x81, 0x68, 0x31, 0x27, 0x84, 0xf6, 0xb0, 0x3e, 0xac, 0x6a, 0x21, 0xc6, 0x00, 0x14, 0x04,
|
||||
0xe4, 0xcc, 0x4d, 0xcd, 0xb0, 0xb2, 0x33, 0x2c, 0x39, 0x75, 0x49, 0x70, 0xa6, 0x78, 0x7e, 0x00,
|
||||
0x9a, 0xbf, 0xae, 0x01, 0x68, 0xe1, 0x1d, 0x07, 0xa0, 0xbf, 0x19, 0xd0, 0xc8, 0x44, 0xaf, 0x73,
|
||||
0xfc, 0xd3, 0x1b, 0xd5, 0x1a, 0xb0, 0x7a, 0x48, 0x7a, 0xa7, 0xaa, 0xeb, 0x25, 0x47, 0xa3, 0x09,
|
||||
0x66, 0x1a, 0x9c, 0x1e, 0xbc, 0x97, 0x61, 0x90, 0x63, 0x5e, 0x87, 0x66, 0x16, 0xd6, 0xec, 0x7f,
|
||||
0x37, 0xc0, 0xd2, 0x57, 0xc4, 0x01, 0xe6, 0xbd, 0xc1, 0x1e, 0x7b, 0xd4, 0x9d, 0xd4, 0x41, 0x13,
|
||||
0x16, 0xe4, 0x28, 0x2e, 0x13, 0x50, 0x71, 0xd4, 0xc2, 0x6c, 0xc1, 0x0d, 0xaf, 0xeb, 0xca, 0xab,
|
||||
0x51, 0xdf, 0x0e, 0x5e, 0xf7, 0x1b, 0x71, 0x39, 0x6e, 0xc0, 0xd2, 0x10, 0x9d, 0xbb, 0x94, 0x9c,
|
||||
0x31, 0x3d, 0x0c, 0xde, 0x18, 0xa2, 0x73, 0x87, 0x9c, 0x31, 0x39, 0xa8, 0xfb, 0x4c, 0x4e, 0xe0,
|
||||
0x5d, 0x3f, 0x0c, 0x48, 0x9f, 0xc9, 0xed, 0x5f, 0x72, 0x6a, 0x1a, 0x7e, 0xa0, 0x50, 0x71, 0xd6,
|
||||
0xa8, 0x3c, 0x46, 0xe9, 0xcd, 0x5d, 0x72, 0x2a, 0x34, 0x75, 0xb6, 0xec, 0xc7, 0xb0, 0x51, 0xe0,
|
||||
0xb3, 0xde, 0xbd, 0x8f, 0x60, 0x51, 0x1d, 0x0d, 0xbd, 0x6d, 0xa6, 0x7e, 0x4e, 0x7c, 0x2b, 0xfe,
|
||||
0xea, 0x63, 0xa0, 0x39, 0xec, 0x3f, 0x1a, 0x70, 0x33, 0xab, 0x69, 0x2f, 0x08, 0xc4, 0x00, 0xc6,
|
||||
0xae, 0x3f, 0x05, 0xb9, 0xc8, 0xe6, 0x0b, 0x22, 0x3b, 0x84, 0xad, 0x8b, 0xfc, 0x79, 0x87, 0xf0,
|
||||
0x9e, 0xcd, 0xee, 0xed, 0x5e, 0x14, 0x5d, 0x1e, 0x58, 0xda, 0xff, 0x52, 0xc6, 0xff, 0x7c, 0xd2,
|
||||
0xa5, 0xb2, 0x77, 0xf0, 0xaa, 0x0d, 0x56, 0xaa, 0x2f, 0xa8, 0x89, 0x23, 0x29, 0xd3, 0x43, 0xd8,
|
||||
0x28, 0xa0, 0x69, 0x23, 0x3b, 0x62, 0xfa, 0x98, 0x4c, 0x2c, 0xe5, 0xdd, 0x56, 0x67, 0xf6, 0xed,
|
||||
0xac, 0x05, 0x34, 0x9b, 0xb8, 0x55, 0xbe, 0x46, 0x8c, 0x63, 0x9a, 0x74, 0xe9, 0xc4, 0xcc, 0xe7,
|
||||
0xb0, 0x3e, 0x4b, 0xd0, 0x36, 0xda, 0xb0, 0x34, 0xd3, 0xe6, 0x27, 0x6b, 0x21, 0xf5, 0x0a, 0xf9,
|
||||
0xfc, 0x80, 0xcc, 0xea, 0xbb, 0x54, 0x6a, 0x03, 0x5a, 0x39, 0x29, 0x7d, 0xf8, 0x2c, 0x58, 0x3f,
|
||||
0xe6, 0x24, 0x4a, 0x45, 0x9c, 0x38, 0xb8, 0x01, 0xad, 0x1c, 0x45, 0x0b, 0xfd, 0x1e, 0x6e, 0xce,
|
||||
0x90, 0xbe, 0xf6, 0x43, 0x7f, 0x18, 0x0f, 0xaf, 0xe0, 0x8c, 0x79, 0x1b, 0xe4, 0xad, 0xe5, 0x72,
|
||||
0x7f, 0x88, 0x93, 0xf1, 0x6e, 0xce, 0x29, 0x0b, 0xec, 0x85, 0x82, 0xec, 0x5f, 0xc1, 0xd6, 0x45,
|
||||
0xfa, 0xaf, 0x90, 0x23, 0xe9, 0x38, 0xa2, 0xbc, 0x20, 0xa6, 0x36, 0x58, 0x79, 0x92, 0x0e, 0xaa,
|
||||
0x0b, 0xb7, 0x67, 0x69, 0x2f, 0x43, 0xee, 0x07, 0x7b, 0xa2, 0x09, 0x5e, 0x53, 0x60, 0x77, 0xc1,
|
||||
0xbe, 0xcc, 0x86, 0xf6, 0xa4, 0x09, 0xe6, 0x63, 0x9c, 0xf0, 0x4c, 0xea, 0xf2, 0x63, 0x68, 0x64,
|
||||
0x50, 0x9d, 0x89, 0x26, 0x2c, 0x20, 0xcf, 0xa3, 0xc9, 0x05, 0xae, 0x16, 0x22, 0x07, 0x0e, 0x66,
|
||||
0xf8, 0x82, 0x1c, 0xe4, 0x49, 0xda, 0xf2, 0x0e, 0xb4, 0xbe, 0x4b, 0xe1, 0xe2, 0xb0, 0x15, 0x1e,
|
||||
0xd6, 0x65, 0x7d, 0x58, 0xed, 0x03, 0xb0, 0xf2, 0x02, 0xef, 0xd4, 0x26, 0x6e, 0xa6, 0xf5, 0x4c,
|
||||
0xab, 0x35, 0x31, 0x5f, 0x83, 0x92, 0xef, 0xe9, 0x67, 0x42, 0xc9, 0xf7, 0x32, 0x1b, 0x51, 0x9a,
|
||||
0x29, 0x80, 0x6d, 0xd8, 0xba, 0x48, 0x99, 0x8e, 0xb3, 0x01, 0xab, 0x4f, 0x43, 0x9f, 0xab, 0x03,
|
||||
0x98, 0x24, 0xe6, 0x13, 0x30, 0xd3, 0xe0, 0x15, 0x2a, 0xed, 0x47, 0x03, 0xb6, 0x8e, 0x48, 0x14,
|
||||
0x07, 0x72, 0x8e, 0x8c, 0x10, 0xc5, 0x21, 0xff, 0x8a, 0xc4, 0x34, 0x44, 0x41, 0xe2, 0xf7, 0x07,
|
||||
0xb0, 0x22, 0xea, 0xc1, 0xed, 0x51, 0x8c, 0x38, 0xf6, 0xdc, 0x30, 0x79, 0xeb, 0x54, 0x05, 0xfc,
|
||||
0x50, 0xa1, 0xdf, 0x30, 0xf1, 0x1e, 0x42, 0x3d, 0xa1, 0x34, 0xdd, 0xd2, 0x41, 0x41, 0xb2, 0xad,
|
||||
0x7f, 0x01, 0x95, 0xa1, 0xf4, 0xcc, 0x45, 0x81, 0x8f, 0x54, 0x6b, 0x2f, 0xef, 0xae, 0xcd, 0xce,
|
||||
0xc6, 0x7b, 0x82, 0xe8, 0x94, 0x15, 0xab, 0x5c, 0x98, 0x9f, 0x42, 0x33, 0xd5, 0xa4, 0xa6, 0x23,
|
||||
0xe4, 0xbc, 0xb4, 0xd1, 0x48, 0xd1, 0x26, 0x93, 0xe4, 0x6d, 0xb8, 0x75, 0x61, 0x5c, 0x3a, 0x85,
|
||||
0x7f, 0x36, 0x54, 0xba, 0x74, 0xa2, 0x93, 0x78, 0x7f, 0x0e, 0x8b, 0x8a, 0x5f, 0x6f, 0xfa, 0x05,
|
||||
0x0e, 0x6a, 0xa6, 0x0b, 0x7d, 0x2b, 0x5d, 0xe8, 0x5b, 0x51, 0x46, 0xe7, 0x0a, 0x32, 0x2a, 0xa6,
|
||||
0x90, 0x8c, 0x7f, 0xd3, 0xe1, 0xe4, 0x11, 0x1e, 0x12, 0x8e, 0xb3, 0x9b, 0xbf, 0x0b, 0xcd, 0x2c,
|
||||
0x7c, 0xb5, 0x46, 0xf3, 0x32, 0xf4, 0x48, 0x91, 0xba, 0x36, 0x58, 0x79, 0x92, 0xf6, 0x60, 0x73,
|
||||
0x72, 0xc1, 0xbc, 0x42, 0xec, 0x88, 0x12, 0xc1, 0xe2, 0x25, 0x82, 0xef, 0x41, 0xbb, 0x88, 0xa8,
|
||||
0x45, 0xff, 0x61, 0x40, 0xfd, 0x18, 0x67, 0xeb, 0xf6, 0x6d, 0x53, 0x5e, 0x90, 0xbf, 0x52, 0x51,
|
||||
0x45, 0xde, 0x87, 0x96, 0x1c, 0xb1, 0xc5, 0x13, 0x9d, 0xf2, 0x82, 0xf9, 0x7a, 0x4d, 0x92, 0x67,
|
||||
0xfb, 0x59, 0xfe, 0xa9, 0x32, 0x5f, 0xf0, 0x54, 0x69, 0xc0, 0x6a, 0x2a, 0x0e, 0x1d, 0xdd, 0xb3,
|
||||
0x74, 0xec, 0x0e, 0x96, 0x76, 0x27, 0x99, 0x79, 0xcb, 0x30, 0xed, 0x9b, 0xb0, 0x59, 0xa8, 0x4c,
|
||||
0xdb, 0xfa, 0x83, 0xe8, 0xc4, 0x99, 0x2b, 0x66, 0x2f, 0xf4, 0xc4, 0x43, 0x3e, 0x3d, 0x0b, 0x98,
|
||||
0xdf, 0xc3, 0x1a, 0xe3, 0x24, 0x4a, 0x07, 0xef, 0x0e, 0x89, 0x97, 0xbc, 0x4c, 0xef, 0x16, 0xdc,
|
||||
0xfe, 0xd9, 0x6b, 0x8b, 0x78, 0xd8, 0x69, 0xb0, 0x3c, 0x28, 0x06, 0xff, 0x3b, 0x97, 0x3a, 0x30,
|
||||
0x79, 0xc4, 0x57, 0x07, 0xe3, 0x2e, 0xf5, 0x3d, 0xf7, 0x4a, 0x73, 0xc7, 0x83, 0x92, 0x65, 0x38,
|
||||
0x15, 0x25, 0xa1, 0x7f, 0x48, 0xf9, 0xcd, 0x64, 0x64, 0x51, 0xa3, 0xff, 0x07, 0x6f, 0x72, 0x3a,
|
||||
0x3f, 0xc1, 0xe8, 0x3a, 0xcc, 0x1e, 0x75, 0x31, 0x8b, 0xcc, 0x12, 0xae, 0x70, 0x68, 0x8e, 0xa1,
|
||||
0xfa, 0x00, 0xf5, 0x4e, 0xe3, 0xc9, 0x14, 0xb8, 0x0d, 0xe5, 0x1e, 0x09, 0x7b, 0x31, 0xa5, 0x38,
|
||||
0xec, 0x8d, 0x75, 0x77, 0x4c, 0x43, 0x82, 0x43, 0x3e, 0xe5, 0x54, 0xb9, 0xe8, 0xf7, 0x5f, 0x1a,
|
||||
0xb2, 0xef, 0x43, 0x2d, 0x51, 0xaa, 0x5d, 0xb8, 0x0b, 0x0b, 0x78, 0x34, 0x2d, 0x96, 0x5a, 0x27,
|
||||
0xf9, 0x67, 0xc6, 0xbe, 0x40, 0x1d, 0x45, 0xd4, 0x77, 0x21, 0x27, 0x14, 0x1f, 0x50, 0x32, 0xcc,
|
||||
0xf8, 0x65, 0xef, 0x89, 0x63, 0x9a, 0xa3, 0xbd, 0x95, 0xfa, 0x26, 0x98, 0xc7, 0x01, 0x1a, 0xe1,
|
||||
0xec, 0x80, 0x79, 0x00, 0x8d, 0x0c, 0xfa, 0xae, 0xa3, 0xa5, 0x09, 0x75, 0xb1, 0x73, 0x52, 0x57,
|
||||
0xa2, 0x5b, 0x9c, 0xab, 0x29, 0xa6, 0x6b, 0xfd, 0x7b, 0x35, 0xc9, 0x49, 0xf0, 0x7a, 0x07, 0xb5,
|
||||
0xfb, 0x62, 0x9e, 0x9a, 0xd5, 0x7c, 0x85, 0x22, 0x90, 0x6e, 0x22, 0xca, 0x33, 0xbe, 0x8b, 0x6c,
|
||||
0xa5, 0x40, 0xed, 0xfc, 0xef, 0x60, 0x73, 0x8a, 0x5e, 0xfb, 0x40, 0xb6, 0x05, 0xef, 0x15, 0x6b,
|
||||
0xd7, 0xd6, 0x4d, 0xf5, 0xab, 0xa2, 0xa0, 0x4e, 0xf6, 0xef, 0x67, 0xea, 0x17, 0x3f, 0x8d, 0x5d,
|
||||
0x3a, 0x86, 0xfd, 0xc9, 0x80, 0xba, 0xb8, 0x84, 0xd2, 0x71, 0xfe, 0x84, 0xae, 0x48, 0x3d, 0x06,
|
||||
0x65, 0x13, 0x2e, 0xc6, 0x67, 0x01, 0x14, 0x5c, 0x4e, 0x62, 0x7c, 0xce, 0x91, 0xb4, 0xd8, 0xd3,
|
||||
0x29, 0xed, 0x7f, 0x6d, 0xdd, 0x9b, 0xb0, 0x51, 0xa0, 0x4a, 0xd9, 0x79, 0xf0, 0xc9, 0x0f, 0x9d,
|
||||
0x91, 0xcf, 0x31, 0x63, 0x1d, 0x9f, 0xec, 0xa8, 0xaf, 0x9d, 0x3e, 0xd9, 0x19, 0xf1, 0x1d, 0xf9,
|
||||
0x6f, 0xca, 0x9d, 0xdc, 0xef, 0x1a, 0xdd, 0x45, 0x49, 0xf8, 0xec, 0xbf, 0x01, 0x00, 0x00, 0xff,
|
||||
0xff, 0x5e, 0x9b, 0xa4, 0x4a, 0x30, 0x1d, 0x00, 0x00,
|
||||
}
|
||||
|
|
|
@ -742,8 +742,8 @@ func (itmc *internalTabletManagerClient) SlaveWasRestarted(ctx context.Context,
|
|||
return fmt.Errorf("not implemented in vtcombo")
|
||||
}
|
||||
|
||||
func (itmc *internalTabletManagerClient) StopReplicationAndGetStatus(ctx context.Context, tablet *topodatapb.Tablet) (*replicationdatapb.Status, error) {
|
||||
return nil, fmt.Errorf("not implemented in vtcombo")
|
||||
func (itmc *internalTabletManagerClient) StopReplicationAndGetStatus(ctx context.Context, tablet *topodatapb.Tablet, stopReplicationMode replicationdatapb.StopReplicationMode) (*replicationdatapb.Status, *replicationdatapb.StopReplicationStatus, error) {
|
||||
return nil, nil, fmt.Errorf("not implemented in vtcombo")
|
||||
}
|
||||
|
||||
func (itmc *internalTabletManagerClient) PromoteReplica(ctx context.Context, tablet *topodatapb.Tablet) (string, error) {
|
||||
|
|
|
@ -21,6 +21,7 @@ import (
|
|||
"sort"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"vitess.io/vitess/go/vt/callerid"
|
||||
querypb "vitess.io/vitess/go/vt/proto/query"
|
||||
vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc"
|
||||
|
|
|
@ -276,8 +276,8 @@ func (client *FakeTabletManagerClient) SetMaster(ctx context.Context, tablet *to
|
|||
}
|
||||
|
||||
// StopReplicationAndGetStatus is part of the tmclient.TabletManagerClient interface.
|
||||
func (client *FakeTabletManagerClient) StopReplicationAndGetStatus(ctx context.Context, tablet *topodatapb.Tablet) (*replicationdatapb.Status, error) {
|
||||
return &replicationdatapb.Status{}, nil
|
||||
func (client *FakeTabletManagerClient) StopReplicationAndGetStatus(ctx context.Context, tablet *topodatapb.Tablet, stopReplicationMode replicationdatapb.StopReplicationMode) (*replicationdatapb.Status, *replicationdatapb.StopReplicationStatus, error) {
|
||||
return &replicationdatapb.Status{}, &replicationdatapb.StopReplicationStatus{}, nil
|
||||
}
|
||||
|
||||
// PromoteReplica is part of the tmclient.TabletManagerClient interface.
|
||||
|
|
|
@ -713,17 +713,22 @@ func (client *Client) ReplicaWasRestarted(ctx context.Context, tablet *topodatap
|
|||
}
|
||||
|
||||
// StopReplicationAndGetStatus is part of the tmclient.TabletManagerClient interface.
|
||||
func (client *Client) StopReplicationAndGetStatus(ctx context.Context, tablet *topodatapb.Tablet) (*replicationdatapb.Status, error) {
|
||||
func (client *Client) StopReplicationAndGetStatus(ctx context.Context, tablet *topodatapb.Tablet, stopReplicationMode replicationdatapb.StopReplicationMode) (hybridStatus *replicationdatapb.Status, status *replicationdatapb.StopReplicationStatus, err error) {
|
||||
cc, c, err := client.dial(tablet)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, nil, err
|
||||
}
|
||||
defer cc.Close()
|
||||
response, err := c.StopReplicationAndGetStatus(ctx, &tabletmanagerdatapb.StopReplicationAndGetStatusRequest{})
|
||||
response, err := c.StopReplicationAndGetStatus(ctx, &tabletmanagerdatapb.StopReplicationAndGetStatusRequest{
|
||||
StopReplicationMode: stopReplicationMode,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, nil, err
|
||||
}
|
||||
return response.Status, nil
|
||||
return response.HybridStatus, &replicationdatapb.StopReplicationStatus{
|
||||
Before: response.Status.Before,
|
||||
After: response.Status.After,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// PromoteReplica is part of the tmclient.TabletManagerClient interface.
|
||||
|
|
|
@ -401,9 +401,11 @@ func (s *server) StopReplicationAndGetStatus(ctx context.Context, request *table
|
|||
defer s.tm.HandleRPCPanic(ctx, "StopReplicationAndGetStatus", request, response, true /*verbose*/, &err)
|
||||
ctx = callinfo.GRPCCallInfo(ctx)
|
||||
response = &tabletmanagerdatapb.StopReplicationAndGetStatusResponse{}
|
||||
status, err := s.tm.StopReplicationAndGetStatus(ctx)
|
||||
statusResponse, err := s.tm.StopReplicationAndGetStatus(ctx, request.StopReplicationMode)
|
||||
if err == nil {
|
||||
response.Status = status
|
||||
response.HybridStatus = statusResponse.HybridStatus
|
||||
response.Status = statusResponse.Status
|
||||
|
||||
}
|
||||
return response, err
|
||||
}
|
||||
|
|
|
@ -143,9 +143,9 @@ type RPCTM interface {
|
|||
// Deprecated
|
||||
SlaveWasRestarted(ctx context.Context, parent *topodatapb.TabletAlias) error
|
||||
|
||||
ReplicaWasRestarted(ctx context.Context, parent *topodatapb.TabletAlias) error
|
||||
StopReplicationAndGetStatus(ctx context.Context, stopReplicationMode replicationdatapb.StopReplicationMode) (StopReplicationAndGetStatusResponse, error)
|
||||
|
||||
StopReplicationAndGetStatus(ctx context.Context) (*replicationdatapb.Status, error)
|
||||
ReplicaWasRestarted(ctx context.Context, parent *topodatapb.TabletAlias) error
|
||||
|
||||
PromoteReplica(ctx context.Context) (string, error)
|
||||
|
||||
|
|
|
@ -97,6 +97,26 @@ func (tm *TabletManager) stopReplicationLocked(ctx context.Context) error {
|
|||
return tm.MysqlDaemon.StopReplication(tm.hookExtraEnv())
|
||||
}
|
||||
|
||||
func (tm *TabletManager) stopIOThreadLocked(ctx context.Context) error {
|
||||
|
||||
// Remember that we were told to stop, so we don't try to
|
||||
// restart ourselves (in replication_reporter).
|
||||
tm.setReplicationStopped(true)
|
||||
|
||||
// Also tell Orchestrator we're stopped on purpose for some Vitess task.
|
||||
// Do this in the background, as it's best-effort.
|
||||
go func() {
|
||||
if tm.orc == nil {
|
||||
return
|
||||
}
|
||||
if err := tm.orc.BeginMaintenance(tm.Tablet(), "vttablet has been told to StopReplication"); err != nil {
|
||||
log.Warningf("Orchestrator BeginMaintenance failed: %v", err)
|
||||
}
|
||||
}()
|
||||
|
||||
return tm.MysqlDaemon.StopIOThread(ctx)
|
||||
}
|
||||
|
||||
// StopReplicationMinimum will stop the replication after it reaches at least the
|
||||
// provided position. Works both when Vitess manages
|
||||
// replication or not (using hook if not).
|
||||
|
@ -602,30 +622,93 @@ func (tm *TabletManager) ReplicaWasRestarted(ctx context.Context, parent *topoda
|
|||
|
||||
// StopReplicationAndGetStatus stops MySQL replication, and returns the
|
||||
// current status.
|
||||
func (tm *TabletManager) StopReplicationAndGetStatus(ctx context.Context) (*replicationdatapb.Status, error) {
|
||||
func (tm *TabletManager) StopReplicationAndGetStatus(ctx context.Context, stopReplicationMode replicationdatapb.StopReplicationMode) (StopReplicationAndGetStatusResponse, error) {
|
||||
if err := tm.lock(ctx); err != nil {
|
||||
return nil, err
|
||||
return StopReplicationAndGetStatusResponse{}, err
|
||||
}
|
||||
defer tm.unlock()
|
||||
|
||||
// get the status before we stop replication
|
||||
// Get the status before we stop replication.
|
||||
// Doing this first allows us to return the status in the case that stopping replication
|
||||
// returns an error, so a user can optionally inspect the status before a stop was called.
|
||||
rs, err := tm.MysqlDaemon.ReplicationStatus()
|
||||
if err != nil {
|
||||
return nil, vterrors.Wrap(err, "before status failed")
|
||||
return StopReplicationAndGetStatusResponse{}, vterrors.Wrap(err, "before status failed")
|
||||
}
|
||||
if !rs.IOThreadRunning && !rs.SQLThreadRunning {
|
||||
// no replication is running, just return what we got
|
||||
return mysql.ReplicationStatusToProto(rs), nil
|
||||
before := mysql.ReplicationStatusToProto(rs)
|
||||
|
||||
if stopReplicationMode == replicationdatapb.StopReplicationMode_IOTHREADONLY {
|
||||
if !rs.IOThreadRunning {
|
||||
return StopReplicationAndGetStatusResponse{
|
||||
HybridStatus: before,
|
||||
Status: &replicationdatapb.StopReplicationStatus{
|
||||
Before: before,
|
||||
After: before,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
if err := tm.stopIOThreadLocked(ctx); err != nil {
|
||||
return StopReplicationAndGetStatusResponse{
|
||||
Status: &replicationdatapb.StopReplicationStatus{
|
||||
Before: before,
|
||||
},
|
||||
}, vterrors.Wrap(err, "stop io thread failed")
|
||||
}
|
||||
} else {
|
||||
if !rs.IOThreadRunning && !rs.SQLThreadRunning {
|
||||
// no replication is running, just return what we got
|
||||
return StopReplicationAndGetStatusResponse{
|
||||
HybridStatus: before,
|
||||
Status: &replicationdatapb.StopReplicationStatus{
|
||||
Before: before,
|
||||
After: before,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
if err := tm.stopReplicationLocked(ctx); err != nil {
|
||||
return StopReplicationAndGetStatusResponse{
|
||||
Status: &replicationdatapb.StopReplicationStatus{
|
||||
Before: before,
|
||||
},
|
||||
}, vterrors.Wrap(err, "stop replication failed")
|
||||
}
|
||||
}
|
||||
if err := tm.stopReplicationLocked(ctx); err != nil {
|
||||
return nil, vterrors.Wrap(err, "failed to stop replication")
|
||||
}
|
||||
// now patch in the current position
|
||||
rs.Position, err = tm.MysqlDaemon.MasterPosition()
|
||||
|
||||
// Get the status after we stop replication so we have up to date position and relay log positions.
|
||||
rsAfter, err := tm.MysqlDaemon.ReplicationStatus()
|
||||
if err != nil {
|
||||
return nil, vterrors.Wrap(err, "after position failed")
|
||||
return StopReplicationAndGetStatusResponse{
|
||||
Status: &replicationdatapb.StopReplicationStatus{
|
||||
Before: before,
|
||||
},
|
||||
}, vterrors.Wrap(err, "acquiring replication status failed")
|
||||
}
|
||||
return mysql.ReplicationStatusToProto(rs), nil
|
||||
after := mysql.ReplicationStatusToProto(rsAfter)
|
||||
|
||||
rs.Position = rsAfter.Position
|
||||
rs.RelayLogPosition = rsAfter.RelayLogPosition
|
||||
rs.FilePosition = rsAfter.FilePosition
|
||||
rs.FileRelayLogPosition = rsAfter.FileRelayLogPosition
|
||||
|
||||
return StopReplicationAndGetStatusResponse{
|
||||
HybridStatus: mysql.ReplicationStatusToProto(rs),
|
||||
Status: &replicationdatapb.StopReplicationStatus{
|
||||
Before: before,
|
||||
After: after,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
||||
// StopReplicationAndGetStatusResponse holds the original hybrid Status struct, as well as a new Status field, which
|
||||
// hold the result of show replica status called before stopping replication, and after stopping replication.
|
||||
type StopReplicationAndGetStatusResponse struct {
|
||||
// HybridStatus is deprecated. It currently represents a hybrid struct where all data represents the before state,
|
||||
// except for all position related data which comes from the after state. Please use status instead, which holds
|
||||
// discrete replication status calls before and after stopping the replica, or stopping the replica's io_thread.
|
||||
HybridStatus *replicationdatapb.Status
|
||||
|
||||
// Status represents the replication status call right before, and right after telling the replica to stop.
|
||||
Status *replicationdatapb.StopReplicationStatus
|
||||
}
|
||||
|
||||
// PromoteReplica makes the current tablet the master
|
||||
|
|
|
@ -210,7 +210,7 @@ type TabletManagerClient interface {
|
|||
|
||||
// StopReplicationAndGetStatus stops replication and returns the
|
||||
// current position.
|
||||
StopReplicationAndGetStatus(ctx context.Context, tablet *topodatapb.Tablet) (*replicationdatapb.Status, error)
|
||||
StopReplicationAndGetStatus(ctx context.Context, tablet *topodatapb.Tablet, stopReplicationMode replicationdatapb.StopReplicationMode) (*replicationdatapb.Status, *replicationdatapb.StopReplicationStatus, error)
|
||||
|
||||
// PromoteReplica makes the tablet the new master
|
||||
PromoteReplica(ctx context.Context, tablet *topodatapb.Tablet) (string, error)
|
||||
|
|
|
@ -1244,6 +1244,19 @@ func tmRPCTestSlaveWasRestartedPanic(ctx context.Context, t *testing.T, client t
|
|||
expectHandleRPCPanic(t, "SlaveWasRestarted", true /*verbose*/, err)
|
||||
}
|
||||
|
||||
func (fra *fakeRPCTM) StopReplicationAndGetStatus(ctx context.Context, stopReplicationMode replicationdatapb.StopReplicationMode) (tabletmanager.StopReplicationAndGetStatusResponse, error) {
|
||||
if fra.panics {
|
||||
panic(fmt.Errorf("test-triggered panic"))
|
||||
}
|
||||
return tabletmanager.StopReplicationAndGetStatusResponse{
|
||||
HybridStatus: testReplicationStatus,
|
||||
Status: &replicationdatapb.StopReplicationStatus{
|
||||
Before: testReplicationStatus,
|
||||
After: testReplicationStatus,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
||||
var testReplicaWasRestartedParent = &topodatapb.TabletAlias{
|
||||
Cell: "prison",
|
||||
Uid: 42,
|
||||
|
@ -1269,20 +1282,15 @@ func tmRPCTestReplicaWasRestartedPanic(ctx context.Context, t *testing.T, client
|
|||
expectHandleRPCPanic(t, "ReplicaWasRestarted", true /*verbose*/, err)
|
||||
}
|
||||
|
||||
func (fra *fakeRPCTM) StopReplicationAndGetStatus(ctx context.Context) (*replicationdatapb.Status, error) {
|
||||
if fra.panics {
|
||||
panic(fmt.Errorf("test-triggered panic"))
|
||||
}
|
||||
return testReplicationStatus, nil
|
||||
}
|
||||
|
||||
func tmRPCTestStopReplicationAndGetStatus(ctx context.Context, t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.Tablet) {
|
||||
rp, err := client.StopReplicationAndGetStatus(ctx, tablet)
|
||||
rp, _, err := client.StopReplicationAndGetStatus(ctx, tablet, replicationdatapb.StopReplicationMode_IOANDSQLTHREAD)
|
||||
compareError(t, "StopReplicationAndGetStatus", err, rp, testReplicationStatus)
|
||||
rp, _, err = client.StopReplicationAndGetStatus(ctx, tablet, replicationdatapb.StopReplicationMode_IOTHREADONLY)
|
||||
compareError(t, "StopReplicationAndGetStatus", err, rp, testReplicationStatus)
|
||||
}
|
||||
|
||||
func tmRPCTestStopReplicationAndGetStatusPanic(ctx context.Context, t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.Tablet) {
|
||||
_, err := client.StopReplicationAndGetStatus(ctx, tablet)
|
||||
_, _, err := client.StopReplicationAndGetStatus(ctx, tablet, replicationdatapb.StopReplicationMode_IOANDSQLTHREAD)
|
||||
expectHandleRPCPanic(t, "StopReplicationAndGetStatus", true /*verbose*/, err)
|
||||
}
|
||||
|
||||
|
|
|
@ -917,7 +917,7 @@ func (wr *Wrangler) emergencyReparentShardLocked(ctx context.Context, ev *events
|
|||
event.DispatchUpdate(ev, "stop replication on all replicas")
|
||||
wg := sync.WaitGroup{}
|
||||
mu := sync.Mutex{}
|
||||
statusMap := make(map[string]*replicationdatapb.Status)
|
||||
statusMap := make(map[string]*replicationdatapb.StopReplicationStatus)
|
||||
for alias, tabletInfo := range tabletMap {
|
||||
wg.Add(1)
|
||||
go func(alias string, tabletInfo *topo.TabletInfo) {
|
||||
|
@ -925,13 +925,14 @@ func (wr *Wrangler) emergencyReparentShardLocked(ctx context.Context, ev *events
|
|||
wr.logger.Infof("getting replication position from %v", alias)
|
||||
ctx, cancel := context.WithTimeout(ctx, waitReplicasTimeout)
|
||||
defer cancel()
|
||||
rp, err := wr.tmc.StopReplicationAndGetStatus(ctx, tabletInfo.Tablet)
|
||||
// TODO: Once we refactor EmergencyReparent, change the stopReplicationOption argument to IOThreadOnly.
|
||||
_, stopReplicationStatus, err := wr.tmc.StopReplicationAndGetStatus(ctx, tabletInfo.Tablet, replicationdatapb.StopReplicationMode_IOANDSQLTHREAD)
|
||||
if err != nil {
|
||||
wr.logger.Warningf("failed to get replication status from %v, ignoring tablet: %v", alias, err)
|
||||
return
|
||||
}
|
||||
mu.Lock()
|
||||
statusMap[alias] = rp
|
||||
statusMap[alias] = stopReplicationStatus
|
||||
mu.Unlock()
|
||||
}(alias, tabletInfo)
|
||||
}
|
||||
|
@ -947,20 +948,22 @@ func (wr *Wrangler) emergencyReparentShardLocked(ctx context.Context, ev *events
|
|||
if !ok {
|
||||
return fmt.Errorf("couldn't get master elect %v replication position", topoproto.TabletAliasString(masterElectTabletAlias))
|
||||
}
|
||||
masterElectPos, err := mysql.DecodePosition(masterElectStatus.Position)
|
||||
masterElectStrPos := masterElectStatus.After.Position
|
||||
masterElectPos, err := mysql.DecodePosition(masterElectStrPos)
|
||||
if err != nil {
|
||||
return fmt.Errorf("cannot decode master elect position %v: %v", masterElectStatus.Position, err)
|
||||
return fmt.Errorf("cannot decode master elect position %v: %v", masterElectStrPos, err)
|
||||
}
|
||||
for alias, status := range statusMap {
|
||||
if alias == masterElectTabletAliasStr {
|
||||
continue
|
||||
}
|
||||
pos, err := mysql.DecodePosition(status.Position)
|
||||
posStr := status.After.Position
|
||||
pos, err := mysql.DecodePosition(posStr)
|
||||
if err != nil {
|
||||
return fmt.Errorf("cannot decode replica %v position %v: %v", alias, status.Position, err)
|
||||
return fmt.Errorf("cannot decode replica %v position %v: %v", alias, posStr, err)
|
||||
}
|
||||
if !masterElectPos.AtLeast(pos) {
|
||||
return fmt.Errorf("tablet %v is more advanced than master elect tablet %v: %v > %v", alias, masterElectTabletAliasStr, status.Position, masterElectStatus.Position)
|
||||
return fmt.Errorf("tablet %v is more advanced than master elect tablet %v: %v > %v", alias, masterElectTabletAliasStr, posStr, masterElectStrPos)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1008,7 +1011,7 @@ func (wr *Wrangler) emergencyReparentShardLocked(ctx context.Context, ev *events
|
|||
wr.logger.Infof("setting new master on replica %v", alias)
|
||||
forceStart := false
|
||||
if status, ok := statusMap[alias]; ok {
|
||||
forceStart = status.IoThreadRunning || status.SqlThreadRunning
|
||||
forceStart = replicaWasRunning(status)
|
||||
}
|
||||
if err := wr.tmc.SetMaster(replCtx, tabletInfo.Tablet, masterElectTabletAlias, now, "", forceStart); err != nil {
|
||||
rec.RecordError(fmt.Errorf("tablet %v SetMaster failed: %v", alias, err))
|
||||
|
@ -1085,3 +1088,7 @@ func (wr *Wrangler) TabletExternallyReparented(ctx context.Context, newMasterAli
|
|||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func replicaWasRunning(stopReplicationStatus *replicationdatapb.StopReplicationStatus) bool {
|
||||
return stopReplicationStatus.Before.IoThreadRunning || stopReplicationStatus.Before.SqlThreadRunning
|
||||
}
|
||||
|
|
|
@ -38,3 +38,16 @@ message Status {
|
|||
uint32 master_server_id = 11;
|
||||
string master_uuid = 12;
|
||||
}
|
||||
|
||||
// StopReplicationStatus represents the replication status before calling StopReplication, and the replication status collected immediately after
|
||||
// calling StopReplication.
|
||||
message StopReplicationStatus {
|
||||
replicationdata.Status before = 1;
|
||||
replicationdata.Status after = 2;
|
||||
}
|
||||
|
||||
// StopReplicationMode is used to provide controls over how replication is stopped.
|
||||
enum StopReplicationMode {
|
||||
IOANDSQLTHREAD = 0;
|
||||
IOTHREADONLY = 1;
|
||||
}
|
||||
|
|
|
@ -404,10 +404,17 @@ message ReplicaWasRestartedResponse {
|
|||
}
|
||||
|
||||
message StopReplicationAndGetStatusRequest {
|
||||
replicationdata.StopReplicationMode stop_replication_mode = 1;
|
||||
}
|
||||
|
||||
message StopReplicationAndGetStatusResponse {
|
||||
replicationdata.Status status = 1;
|
||||
// HybridStatus is deprecated. It currently represents a hybrid struct where all data represents the before state,
|
||||
// except for all position related data which comes from the after state. Please use status instead, which holds
|
||||
// discrete replication status calls before and after stopping the replica, or stopping the replica's io_thread.
|
||||
replicationdata.Status hybrid_status = 1 [deprecated=true];
|
||||
|
||||
// Status represents the replication status call right before, and right after telling the replica to stop.
|
||||
replicationdata.StopReplicationStatus status = 2;
|
||||
}
|
||||
|
||||
message PromoteReplicaRequest {
|
||||
|
|
Загрузка…
Ссылка в новой задаче