diff --git a/go/mysql/flavor.go b/go/mysql/flavor.go index 69cf7434b9f..f0a9a53a20d 100644 --- a/go/mysql/flavor.go +++ b/go/mysql/flavor.go @@ -45,6 +45,10 @@ type flavor interface { // startSlave returns the command to start the slave. startSlaveCommand() string + // startSlaveUntilAfter will restart replication, but only allow it + // to run until `pos` is reached. After reaching pos, replication will be stopped again + startSlaveUntilAfter(pos Position) string + // stopSlave returns the command to stop the slave. stopSlaveCommand() string @@ -146,6 +150,11 @@ func (c *Conn) StartSlaveCommand() string { return c.flavor.startSlaveCommand() } +// StartSlaveUntilAfterCommand returns the command to start the slave. +func (c *Conn) StartSlaveUntilAfterCommand(pos Position) string { + return c.flavor.startSlaveUntilAfter(pos) +} + // StopSlaveCommand returns the command to stop the slave. func (c *Conn) StopSlaveCommand() string { return c.flavor.stopSlaveCommand() diff --git a/go/mysql/flavor_mariadb.go b/go/mysql/flavor_mariadb.go index 7374f52d47b..329b6a04b52 100644 --- a/go/mysql/flavor_mariadb.go +++ b/go/mysql/flavor_mariadb.go @@ -41,6 +41,10 @@ func (mariadbFlavor) masterGTIDSet(c *Conn) (GTIDSet, error) { return parseMariadbGTIDSet(qr.Rows[0][0].ToString()) } +func (mariadbFlavor) startSlaveUntilAfter(pos Position) string { + return fmt.Sprintf("START SLAVE UNTIL master_gtid_pos = \"%s\"", pos) +} + func (mariadbFlavor) startSlaveCommand() string { return "START SLAVE" } diff --git a/go/mysql/flavor_mysql.go b/go/mysql/flavor_mysql.go index d8b8eab6c91..3a3fd99400b 100644 --- a/go/mysql/flavor_mysql.go +++ b/go/mysql/flavor_mysql.go @@ -43,6 +43,10 @@ func (mysqlFlavor) startSlaveCommand() string { return "START SLAVE" } +func (mysqlFlavor) startSlaveUntilAfter(pos Position) string { + return fmt.Sprintf("START SLAVE UNTIL SQL_AFTER_GTIDS = '%s'", pos) +} + func (mysqlFlavor) stopSlaveCommand() string { return "STOP SLAVE" } diff --git a/go/vt/mysqlctl/fakemysqldaemon/fakemysqldaemon.go b/go/vt/mysqlctl/fakemysqldaemon/fakemysqldaemon.go index a7d945f06b6..f240b04c0c9 100644 --- a/go/vt/mysqlctl/fakemysqldaemon/fakemysqldaemon.go +++ b/go/vt/mysqlctl/fakemysqldaemon/fakemysqldaemon.go @@ -80,6 +80,9 @@ type FakeMysqlDaemon struct { // If it doesn't match, SetSlavePosition will return an error. SetSlavePositionPos mysql.Position + // StartSlaveUntilAfterPos is matched against the input + StartSlaveUntilAfterPos mysql.Position + // SetMasterInput is matched against the input of SetMaster // (as "%v:%v"). If it doesn't match, SetMaster will return an error. SetMasterInput string @@ -240,6 +243,17 @@ func (fmd *FakeMysqlDaemon) StartSlave(hookExtraEnv map[string]string) error { }) } +// StartSlaveUntilAfter is part of the MysqlDaemon interface. +func (fmd *FakeMysqlDaemon) StartSlaveUntilAfter(ctx context.Context, pos mysql.Position) error { + if !reflect.DeepEqual(fmd.StartSlaveUntilAfterPos, pos) { + return fmt.Errorf("wrong pos for StartSlaveUntilAfter: expected %v got %v", fmd.SetSlavePositionPos, pos) + } + + return fmd.ExecuteSuperQueryList(context.Background(), []string{ + "START SLAVE UNTIL AFTER", + }) +} + // StopSlave is part of the MysqlDaemon interface. func (fmd *FakeMysqlDaemon) StopSlave(hookExtraEnv map[string]string) error { return fmd.ExecuteSuperQueryList(context.Background(), []string{ diff --git a/go/vt/mysqlctl/mysql_daemon.go b/go/vt/mysqlctl/mysql_daemon.go index c8426e8915b..581936b0f74 100644 --- a/go/vt/mysqlctl/mysql_daemon.go +++ b/go/vt/mysqlctl/mysql_daemon.go @@ -41,6 +41,7 @@ type MysqlDaemon interface { // replication related methods StartSlave(hookExtraEnv map[string]string) error + StartSlaveUntilAfter(ctx context.Context, pos mysql.Position) error StopSlave(hookExtraEnv map[string]string) error SlaveStatus() (mysql.SlaveStatus, error) SetSemiSyncEnabled(master, slave bool) error diff --git a/go/vt/mysqlctl/replication.go b/go/vt/mysqlctl/replication.go index 70e08f625e3..12aef08d9ab 100644 --- a/go/vt/mysqlctl/replication.go +++ b/go/vt/mysqlctl/replication.go @@ -83,6 +83,19 @@ func (mysqld *Mysqld) StartSlave(hookExtraEnv map[string]string) error { return h.ExecuteOptional() } +// StartSlaveUntilAfter starts a slave until replication has come to `targetPos`, then it stops replication +func (mysqld *Mysqld) StartSlaveUntilAfter(ctx context.Context, targetPos mysql.Position) error { + conn, err := getPoolReconnect(ctx, mysqld.dbaPool) + if err != nil { + return err + } + defer conn.Recycle() + + queries := []string{conn.StartSlaveUntilAfterCommand(targetPos)} + + return mysqld.executeSuperQueryListConn(ctx, conn, queries) +} + // StopSlave stops a slave. func (mysqld *Mysqld) StopSlave(hookExtraEnv map[string]string) error { h := hook.NewSimpleHook("preflight_stop_slave") diff --git a/go/vt/proto/query/query.pb.go b/go/vt/proto/query/query.pb.go index 1176ca07bd4..34f04da29f9 100644 --- a/go/vt/proto/query/query.pb.go +++ b/go/vt/proto/query/query.pb.go @@ -95,7 +95,7 @@ func (x MySqlFlag) String() string { return proto.EnumName(MySqlFlag_name, int32(x)) } func (MySqlFlag) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{0} + return fileDescriptor_query_b0bca749772b6512, []int{0} } // Flag allows us to qualify types by their common properties. @@ -134,7 +134,7 @@ func (x Flag) String() string { return proto.EnumName(Flag_name, int32(x)) } func (Flag) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{1} + return fileDescriptor_query_b0bca749772b6512, []int{1} } // Type defines the various supported data types in bind vars @@ -315,7 +315,7 @@ func (x Type) String() string { return proto.EnumName(Type_name, int32(x)) } func (Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{2} + return fileDescriptor_query_b0bca749772b6512, []int{2} } // TransactionState represents the state of a distributed transaction. @@ -345,7 +345,7 @@ func (x TransactionState) String() string { return proto.EnumName(TransactionState_name, int32(x)) } func (TransactionState) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{3} + return fileDescriptor_query_b0bca749772b6512, []int{3} } type ExecuteOptions_IncludedFields int32 @@ -371,7 +371,7 @@ func (x ExecuteOptions_IncludedFields) String() string { return proto.EnumName(ExecuteOptions_IncludedFields_name, int32(x)) } func (ExecuteOptions_IncludedFields) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{6, 0} + return fileDescriptor_query_b0bca749772b6512, []int{6, 0} } type ExecuteOptions_Workload int32 @@ -400,7 +400,7 @@ func (x ExecuteOptions_Workload) String() string { return proto.EnumName(ExecuteOptions_Workload_name, int32(x)) } func (ExecuteOptions_Workload) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{6, 1} + return fileDescriptor_query_b0bca749772b6512, []int{6, 1} } type ExecuteOptions_TransactionIsolation int32 @@ -411,6 +411,9 @@ const ( ExecuteOptions_READ_COMMITTED ExecuteOptions_TransactionIsolation = 2 ExecuteOptions_READ_UNCOMMITTED ExecuteOptions_TransactionIsolation = 3 ExecuteOptions_SERIALIZABLE ExecuteOptions_TransactionIsolation = 4 + // This is not an "official" transaction level but it will do a + // START TRANSACTION WITH CONSISTENT SNAPSHOT, READ ONLY + ExecuteOptions_CONSISTENT_SNAPSHOT_READ_ONLY ExecuteOptions_TransactionIsolation = 5 ) var ExecuteOptions_TransactionIsolation_name = map[int32]string{ @@ -419,20 +422,22 @@ var ExecuteOptions_TransactionIsolation_name = map[int32]string{ 2: "READ_COMMITTED", 3: "READ_UNCOMMITTED", 4: "SERIALIZABLE", + 5: "CONSISTENT_SNAPSHOT_READ_ONLY", } var ExecuteOptions_TransactionIsolation_value = map[string]int32{ - "DEFAULT": 0, - "REPEATABLE_READ": 1, - "READ_COMMITTED": 2, - "READ_UNCOMMITTED": 3, - "SERIALIZABLE": 4, + "DEFAULT": 0, + "REPEATABLE_READ": 1, + "READ_COMMITTED": 2, + "READ_UNCOMMITTED": 3, + "SERIALIZABLE": 4, + "CONSISTENT_SNAPSHOT_READ_ONLY": 5, } func (x ExecuteOptions_TransactionIsolation) String() string { return proto.EnumName(ExecuteOptions_TransactionIsolation_name, int32(x)) } func (ExecuteOptions_TransactionIsolation) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{6, 2} + return fileDescriptor_query_b0bca749772b6512, []int{6, 2} } // The category of one statement. @@ -459,7 +464,7 @@ func (x StreamEvent_Statement_Category) String() string { return proto.EnumName(StreamEvent_Statement_Category_name, int32(x)) } func (StreamEvent_Statement_Category) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{12, 0, 0} + return fileDescriptor_query_b0bca749772b6512, []int{12, 0, 0} } type SplitQueryRequest_Algorithm int32 @@ -482,7 +487,7 @@ func (x SplitQueryRequest_Algorithm) String() string { return proto.EnumName(SplitQueryRequest_Algorithm_name, int32(x)) } func (SplitQueryRequest_Algorithm) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{50, 0} + return fileDescriptor_query_b0bca749772b6512, []int{50, 0} } // Target describes what the client expects the tablet is. @@ -503,7 +508,7 @@ func (m *Target) Reset() { *m = Target{} } func (m *Target) String() string { return proto.CompactTextString(m) } func (*Target) ProtoMessage() {} func (*Target) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{0} + return fileDescriptor_query_b0bca749772b6512, []int{0} } func (m *Target) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Target.Unmarshal(m, b) @@ -571,7 +576,7 @@ func (m *VTGateCallerID) Reset() { *m = VTGateCallerID{} } func (m *VTGateCallerID) String() string { return proto.CompactTextString(m) } func (*VTGateCallerID) ProtoMessage() {} func (*VTGateCallerID) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{1} + return fileDescriptor_query_b0bca749772b6512, []int{1} } func (m *VTGateCallerID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VTGateCallerID.Unmarshal(m, b) @@ -627,7 +632,7 @@ func (m *EventToken) Reset() { *m = EventToken{} } func (m *EventToken) String() string { return proto.CompactTextString(m) } func (*EventToken) ProtoMessage() {} func (*EventToken) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{2} + return fileDescriptor_query_b0bca749772b6512, []int{2} } func (m *EventToken) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_EventToken.Unmarshal(m, b) @@ -681,7 +686,7 @@ func (m *Value) Reset() { *m = Value{} } func (m *Value) String() string { return proto.CompactTextString(m) } func (*Value) ProtoMessage() {} func (*Value) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{3} + return fileDescriptor_query_b0bca749772b6512, []int{3} } func (m *Value) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Value.Unmarshal(m, b) @@ -730,7 +735,7 @@ func (m *BindVariable) Reset() { *m = BindVariable{} } func (m *BindVariable) String() string { return proto.CompactTextString(m) } func (*BindVariable) ProtoMessage() {} func (*BindVariable) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{4} + return fileDescriptor_query_b0bca749772b6512, []int{4} } func (m *BindVariable) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BindVariable.Unmarshal(m, b) @@ -787,7 +792,7 @@ func (m *BoundQuery) Reset() { *m = BoundQuery{} } func (m *BoundQuery) String() string { return proto.CompactTextString(m) } func (*BoundQuery) ProtoMessage() {} func (*BoundQuery) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{5} + return fileDescriptor_query_b0bca749772b6512, []int{5} } func (m *BoundQuery) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BoundQuery.Unmarshal(m, b) @@ -861,7 +866,7 @@ func (m *ExecuteOptions) Reset() { *m = ExecuteOptions{} } func (m *ExecuteOptions) String() string { return proto.CompactTextString(m) } func (*ExecuteOptions) ProtoMessage() {} func (*ExecuteOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{6} + return fileDescriptor_query_b0bca749772b6512, []int{6} } func (m *ExecuteOptions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteOptions.Unmarshal(m, b) @@ -967,7 +972,7 @@ func (m *Field) Reset() { *m = Field{} } func (m *Field) String() string { return proto.CompactTextString(m) } func (*Field) ProtoMessage() {} func (*Field) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{7} + return fileDescriptor_query_b0bca749772b6512, []int{7} } func (m *Field) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Field.Unmarshal(m, b) @@ -1075,7 +1080,7 @@ func (m *Row) Reset() { *m = Row{} } func (m *Row) String() string { return proto.CompactTextString(m) } func (*Row) ProtoMessage() {} func (*Row) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{8} + return fileDescriptor_query_b0bca749772b6512, []int{8} } func (m *Row) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Row.Unmarshal(m, b) @@ -1127,7 +1132,7 @@ func (m *ResultExtras) Reset() { *m = ResultExtras{} } func (m *ResultExtras) String() string { return proto.CompactTextString(m) } func (*ResultExtras) ProtoMessage() {} func (*ResultExtras) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{9} + return fileDescriptor_query_b0bca749772b6512, []int{9} } func (m *ResultExtras) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResultExtras.Unmarshal(m, b) @@ -1185,7 +1190,7 @@ func (m *QueryResult) Reset() { *m = QueryResult{} } func (m *QueryResult) String() string { return proto.CompactTextString(m) } func (*QueryResult) ProtoMessage() {} func (*QueryResult) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{10} + return fileDescriptor_query_b0bca749772b6512, []int{10} } func (m *QueryResult) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_QueryResult.Unmarshal(m, b) @@ -1254,7 +1259,7 @@ func (m *QueryWarning) Reset() { *m = QueryWarning{} } func (m *QueryWarning) String() string { return proto.CompactTextString(m) } func (*QueryWarning) ProtoMessage() {} func (*QueryWarning) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{11} + return fileDescriptor_query_b0bca749772b6512, []int{11} } func (m *QueryWarning) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_QueryWarning.Unmarshal(m, b) @@ -1305,7 +1310,7 @@ func (m *StreamEvent) Reset() { *m = StreamEvent{} } func (m *StreamEvent) String() string { return proto.CompactTextString(m) } func (*StreamEvent) ProtoMessage() {} func (*StreamEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{12} + return fileDescriptor_query_b0bca749772b6512, []int{12} } func (m *StreamEvent) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamEvent.Unmarshal(m, b) @@ -1358,7 +1363,7 @@ func (m *StreamEvent_Statement) Reset() { *m = StreamEvent_Statement{} } func (m *StreamEvent_Statement) String() string { return proto.CompactTextString(m) } func (*StreamEvent_Statement) ProtoMessage() {} func (*StreamEvent_Statement) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{12, 0} + return fileDescriptor_query_b0bca749772b6512, []int{12, 0} } func (m *StreamEvent_Statement) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamEvent_Statement.Unmarshal(m, b) @@ -1430,7 +1435,7 @@ func (m *ExecuteRequest) Reset() { *m = ExecuteRequest{} } func (m *ExecuteRequest) String() string { return proto.CompactTextString(m) } func (*ExecuteRequest) ProtoMessage() {} func (*ExecuteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{13} + return fileDescriptor_query_b0bca749772b6512, []int{13} } func (m *ExecuteRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteRequest.Unmarshal(m, b) @@ -1504,7 +1509,7 @@ func (m *ExecuteResponse) Reset() { *m = ExecuteResponse{} } func (m *ExecuteResponse) String() string { return proto.CompactTextString(m) } func (*ExecuteResponse) ProtoMessage() {} func (*ExecuteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{14} + return fileDescriptor_query_b0bca749772b6512, []int{14} } func (m *ExecuteResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteResponse.Unmarshal(m, b) @@ -1548,7 +1553,7 @@ func (m *ResultWithError) Reset() { *m = ResultWithError{} } func (m *ResultWithError) String() string { return proto.CompactTextString(m) } func (*ResultWithError) ProtoMessage() {} func (*ResultWithError) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{15} + return fileDescriptor_query_b0bca749772b6512, []int{15} } func (m *ResultWithError) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResultWithError.Unmarshal(m, b) @@ -1600,7 +1605,7 @@ func (m *ExecuteBatchRequest) Reset() { *m = ExecuteBatchRequest{} } func (m *ExecuteBatchRequest) String() string { return proto.CompactTextString(m) } func (*ExecuteBatchRequest) ProtoMessage() {} func (*ExecuteBatchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{16} + return fileDescriptor_query_b0bca749772b6512, []int{16} } func (m *ExecuteBatchRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteBatchRequest.Unmarshal(m, b) @@ -1681,7 +1686,7 @@ func (m *ExecuteBatchResponse) Reset() { *m = ExecuteBatchResponse{} } func (m *ExecuteBatchResponse) String() string { return proto.CompactTextString(m) } func (*ExecuteBatchResponse) ProtoMessage() {} func (*ExecuteBatchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{17} + return fileDescriptor_query_b0bca749772b6512, []int{17} } func (m *ExecuteBatchResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteBatchResponse.Unmarshal(m, b) @@ -1715,6 +1720,7 @@ type StreamExecuteRequest struct { Target *Target `protobuf:"bytes,3,opt,name=target,proto3" json:"target,omitempty"` Query *BoundQuery `protobuf:"bytes,4,opt,name=query,proto3" json:"query,omitempty"` Options *ExecuteOptions `protobuf:"bytes,5,opt,name=options,proto3" json:"options,omitempty"` + TransactionId int64 `protobuf:"varint,6,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1724,7 +1730,7 @@ func (m *StreamExecuteRequest) Reset() { *m = StreamExecuteRequest{} } func (m *StreamExecuteRequest) String() string { return proto.CompactTextString(m) } func (*StreamExecuteRequest) ProtoMessage() {} func (*StreamExecuteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{18} + return fileDescriptor_query_b0bca749772b6512, []int{18} } func (m *StreamExecuteRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamExecuteRequest.Unmarshal(m, b) @@ -1779,6 +1785,13 @@ func (m *StreamExecuteRequest) GetOptions() *ExecuteOptions { return nil } +func (m *StreamExecuteRequest) GetTransactionId() int64 { + if m != nil { + return m.TransactionId + } + return 0 +} + // StreamExecuteResponse is the returned value from StreamExecute type StreamExecuteResponse struct { Result *QueryResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` @@ -1791,7 +1804,7 @@ func (m *StreamExecuteResponse) Reset() { *m = StreamExecuteResponse{} } func (m *StreamExecuteResponse) String() string { return proto.CompactTextString(m) } func (*StreamExecuteResponse) ProtoMessage() {} func (*StreamExecuteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{19} + return fileDescriptor_query_b0bca749772b6512, []int{19} } func (m *StreamExecuteResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamExecuteResponse.Unmarshal(m, b) @@ -1833,7 +1846,7 @@ func (m *BeginRequest) Reset() { *m = BeginRequest{} } func (m *BeginRequest) String() string { return proto.CompactTextString(m) } func (*BeginRequest) ProtoMessage() {} func (*BeginRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{20} + return fileDescriptor_query_b0bca749772b6512, []int{20} } func (m *BeginRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BeginRequest.Unmarshal(m, b) @@ -1893,7 +1906,7 @@ func (m *BeginResponse) Reset() { *m = BeginResponse{} } func (m *BeginResponse) String() string { return proto.CompactTextString(m) } func (*BeginResponse) ProtoMessage() {} func (*BeginResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{21} + return fileDescriptor_query_b0bca749772b6512, []int{21} } func (m *BeginResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BeginResponse.Unmarshal(m, b) @@ -1935,7 +1948,7 @@ func (m *CommitRequest) Reset() { *m = CommitRequest{} } func (m *CommitRequest) String() string { return proto.CompactTextString(m) } func (*CommitRequest) ProtoMessage() {} func (*CommitRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{22} + return fileDescriptor_query_b0bca749772b6512, []int{22} } func (m *CommitRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommitRequest.Unmarshal(m, b) @@ -1994,7 +2007,7 @@ func (m *CommitResponse) Reset() { *m = CommitResponse{} } func (m *CommitResponse) String() string { return proto.CompactTextString(m) } func (*CommitResponse) ProtoMessage() {} func (*CommitResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{23} + return fileDescriptor_query_b0bca749772b6512, []int{23} } func (m *CommitResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommitResponse.Unmarshal(m, b) @@ -2029,7 +2042,7 @@ func (m *RollbackRequest) Reset() { *m = RollbackRequest{} } func (m *RollbackRequest) String() string { return proto.CompactTextString(m) } func (*RollbackRequest) ProtoMessage() {} func (*RollbackRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{24} + return fileDescriptor_query_b0bca749772b6512, []int{24} } func (m *RollbackRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RollbackRequest.Unmarshal(m, b) @@ -2088,7 +2101,7 @@ func (m *RollbackResponse) Reset() { *m = RollbackResponse{} } func (m *RollbackResponse) String() string { return proto.CompactTextString(m) } func (*RollbackResponse) ProtoMessage() {} func (*RollbackResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{25} + return fileDescriptor_query_b0bca749772b6512, []int{25} } func (m *RollbackResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RollbackResponse.Unmarshal(m, b) @@ -2124,7 +2137,7 @@ func (m *PrepareRequest) Reset() { *m = PrepareRequest{} } func (m *PrepareRequest) String() string { return proto.CompactTextString(m) } func (*PrepareRequest) ProtoMessage() {} func (*PrepareRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{26} + return fileDescriptor_query_b0bca749772b6512, []int{26} } func (m *PrepareRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PrepareRequest.Unmarshal(m, b) @@ -2190,7 +2203,7 @@ func (m *PrepareResponse) Reset() { *m = PrepareResponse{} } func (m *PrepareResponse) String() string { return proto.CompactTextString(m) } func (*PrepareResponse) ProtoMessage() {} func (*PrepareResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{27} + return fileDescriptor_query_b0bca749772b6512, []int{27} } func (m *PrepareResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PrepareResponse.Unmarshal(m, b) @@ -2225,7 +2238,7 @@ func (m *CommitPreparedRequest) Reset() { *m = CommitPreparedRequest{} } func (m *CommitPreparedRequest) String() string { return proto.CompactTextString(m) } func (*CommitPreparedRequest) ProtoMessage() {} func (*CommitPreparedRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{28} + return fileDescriptor_query_b0bca749772b6512, []int{28} } func (m *CommitPreparedRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommitPreparedRequest.Unmarshal(m, b) @@ -2284,7 +2297,7 @@ func (m *CommitPreparedResponse) Reset() { *m = CommitPreparedResponse{} func (m *CommitPreparedResponse) String() string { return proto.CompactTextString(m) } func (*CommitPreparedResponse) ProtoMessage() {} func (*CommitPreparedResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{29} + return fileDescriptor_query_b0bca749772b6512, []int{29} } func (m *CommitPreparedResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommitPreparedResponse.Unmarshal(m, b) @@ -2320,7 +2333,7 @@ func (m *RollbackPreparedRequest) Reset() { *m = RollbackPreparedRequest func (m *RollbackPreparedRequest) String() string { return proto.CompactTextString(m) } func (*RollbackPreparedRequest) ProtoMessage() {} func (*RollbackPreparedRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{30} + return fileDescriptor_query_b0bca749772b6512, []int{30} } func (m *RollbackPreparedRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RollbackPreparedRequest.Unmarshal(m, b) @@ -2386,7 +2399,7 @@ func (m *RollbackPreparedResponse) Reset() { *m = RollbackPreparedRespon func (m *RollbackPreparedResponse) String() string { return proto.CompactTextString(m) } func (*RollbackPreparedResponse) ProtoMessage() {} func (*RollbackPreparedResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{31} + return fileDescriptor_query_b0bca749772b6512, []int{31} } func (m *RollbackPreparedResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RollbackPreparedResponse.Unmarshal(m, b) @@ -2422,7 +2435,7 @@ func (m *CreateTransactionRequest) Reset() { *m = CreateTransactionReque func (m *CreateTransactionRequest) String() string { return proto.CompactTextString(m) } func (*CreateTransactionRequest) ProtoMessage() {} func (*CreateTransactionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{32} + return fileDescriptor_query_b0bca749772b6512, []int{32} } func (m *CreateTransactionRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateTransactionRequest.Unmarshal(m, b) @@ -2488,7 +2501,7 @@ func (m *CreateTransactionResponse) Reset() { *m = CreateTransactionResp func (m *CreateTransactionResponse) String() string { return proto.CompactTextString(m) } func (*CreateTransactionResponse) ProtoMessage() {} func (*CreateTransactionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{33} + return fileDescriptor_query_b0bca749772b6512, []int{33} } func (m *CreateTransactionResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CreateTransactionResponse.Unmarshal(m, b) @@ -2524,7 +2537,7 @@ func (m *StartCommitRequest) Reset() { *m = StartCommitRequest{} } func (m *StartCommitRequest) String() string { return proto.CompactTextString(m) } func (*StartCommitRequest) ProtoMessage() {} func (*StartCommitRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{34} + return fileDescriptor_query_b0bca749772b6512, []int{34} } func (m *StartCommitRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StartCommitRequest.Unmarshal(m, b) @@ -2590,7 +2603,7 @@ func (m *StartCommitResponse) Reset() { *m = StartCommitResponse{} } func (m *StartCommitResponse) String() string { return proto.CompactTextString(m) } func (*StartCommitResponse) ProtoMessage() {} func (*StartCommitResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{35} + return fileDescriptor_query_b0bca749772b6512, []int{35} } func (m *StartCommitResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StartCommitResponse.Unmarshal(m, b) @@ -2626,7 +2639,7 @@ func (m *SetRollbackRequest) Reset() { *m = SetRollbackRequest{} } func (m *SetRollbackRequest) String() string { return proto.CompactTextString(m) } func (*SetRollbackRequest) ProtoMessage() {} func (*SetRollbackRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{36} + return fileDescriptor_query_b0bca749772b6512, []int{36} } func (m *SetRollbackRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetRollbackRequest.Unmarshal(m, b) @@ -2692,7 +2705,7 @@ func (m *SetRollbackResponse) Reset() { *m = SetRollbackResponse{} } func (m *SetRollbackResponse) String() string { return proto.CompactTextString(m) } func (*SetRollbackResponse) ProtoMessage() {} func (*SetRollbackResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{37} + return fileDescriptor_query_b0bca749772b6512, []int{37} } func (m *SetRollbackResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetRollbackResponse.Unmarshal(m, b) @@ -2727,7 +2740,7 @@ func (m *ConcludeTransactionRequest) Reset() { *m = ConcludeTransactionR func (m *ConcludeTransactionRequest) String() string { return proto.CompactTextString(m) } func (*ConcludeTransactionRequest) ProtoMessage() {} func (*ConcludeTransactionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{38} + return fileDescriptor_query_b0bca749772b6512, []int{38} } func (m *ConcludeTransactionRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConcludeTransactionRequest.Unmarshal(m, b) @@ -2786,7 +2799,7 @@ func (m *ConcludeTransactionResponse) Reset() { *m = ConcludeTransaction func (m *ConcludeTransactionResponse) String() string { return proto.CompactTextString(m) } func (*ConcludeTransactionResponse) ProtoMessage() {} func (*ConcludeTransactionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{39} + return fileDescriptor_query_b0bca749772b6512, []int{39} } func (m *ConcludeTransactionResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConcludeTransactionResponse.Unmarshal(m, b) @@ -2821,7 +2834,7 @@ func (m *ReadTransactionRequest) Reset() { *m = ReadTransactionRequest{} func (m *ReadTransactionRequest) String() string { return proto.CompactTextString(m) } func (*ReadTransactionRequest) ProtoMessage() {} func (*ReadTransactionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{40} + return fileDescriptor_query_b0bca749772b6512, []int{40} } func (m *ReadTransactionRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ReadTransactionRequest.Unmarshal(m, b) @@ -2881,7 +2894,7 @@ func (m *ReadTransactionResponse) Reset() { *m = ReadTransactionResponse func (m *ReadTransactionResponse) String() string { return proto.CompactTextString(m) } func (*ReadTransactionResponse) ProtoMessage() {} func (*ReadTransactionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{41} + return fileDescriptor_query_b0bca749772b6512, []int{41} } func (m *ReadTransactionResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ReadTransactionResponse.Unmarshal(m, b) @@ -2924,7 +2937,7 @@ func (m *BeginExecuteRequest) Reset() { *m = BeginExecuteRequest{} } func (m *BeginExecuteRequest) String() string { return proto.CompactTextString(m) } func (*BeginExecuteRequest) ProtoMessage() {} func (*BeginExecuteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{42} + return fileDescriptor_query_b0bca749772b6512, []int{42} } func (m *BeginExecuteRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BeginExecuteRequest.Unmarshal(m, b) @@ -2997,7 +3010,7 @@ func (m *BeginExecuteResponse) Reset() { *m = BeginExecuteResponse{} } func (m *BeginExecuteResponse) String() string { return proto.CompactTextString(m) } func (*BeginExecuteResponse) ProtoMessage() {} func (*BeginExecuteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{43} + return fileDescriptor_query_b0bca749772b6512, []int{43} } func (m *BeginExecuteResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BeginExecuteResponse.Unmarshal(m, b) @@ -3055,7 +3068,7 @@ func (m *BeginExecuteBatchRequest) Reset() { *m = BeginExecuteBatchReque func (m *BeginExecuteBatchRequest) String() string { return proto.CompactTextString(m) } func (*BeginExecuteBatchRequest) ProtoMessage() {} func (*BeginExecuteBatchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{44} + return fileDescriptor_query_b0bca749772b6512, []int{44} } func (m *BeginExecuteBatchRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BeginExecuteBatchRequest.Unmarshal(m, b) @@ -3135,7 +3148,7 @@ func (m *BeginExecuteBatchResponse) Reset() { *m = BeginExecuteBatchResp func (m *BeginExecuteBatchResponse) String() string { return proto.CompactTextString(m) } func (*BeginExecuteBatchResponse) ProtoMessage() {} func (*BeginExecuteBatchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{45} + return fileDescriptor_query_b0bca749772b6512, []int{45} } func (m *BeginExecuteBatchResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BeginExecuteBatchResponse.Unmarshal(m, b) @@ -3192,7 +3205,7 @@ func (m *MessageStreamRequest) Reset() { *m = MessageStreamRequest{} } func (m *MessageStreamRequest) String() string { return proto.CompactTextString(m) } func (*MessageStreamRequest) ProtoMessage() {} func (*MessageStreamRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{46} + return fileDescriptor_query_b0bca749772b6512, []int{46} } func (m *MessageStreamRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageStreamRequest.Unmarshal(m, b) @@ -3252,7 +3265,7 @@ func (m *MessageStreamResponse) Reset() { *m = MessageStreamResponse{} } func (m *MessageStreamResponse) String() string { return proto.CompactTextString(m) } func (*MessageStreamResponse) ProtoMessage() {} func (*MessageStreamResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{47} + return fileDescriptor_query_b0bca749772b6512, []int{47} } func (m *MessageStreamResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageStreamResponse.Unmarshal(m, b) @@ -3296,7 +3309,7 @@ func (m *MessageAckRequest) Reset() { *m = MessageAckRequest{} } func (m *MessageAckRequest) String() string { return proto.CompactTextString(m) } func (*MessageAckRequest) ProtoMessage() {} func (*MessageAckRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{48} + return fileDescriptor_query_b0bca749772b6512, []int{48} } func (m *MessageAckRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageAckRequest.Unmarshal(m, b) @@ -3366,7 +3379,7 @@ func (m *MessageAckResponse) Reset() { *m = MessageAckResponse{} } func (m *MessageAckResponse) String() string { return proto.CompactTextString(m) } func (*MessageAckResponse) ProtoMessage() {} func (*MessageAckResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{49} + return fileDescriptor_query_b0bca749772b6512, []int{49} } func (m *MessageAckResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageAckResponse.Unmarshal(m, b) @@ -3414,7 +3427,7 @@ func (m *SplitQueryRequest) Reset() { *m = SplitQueryRequest{} } func (m *SplitQueryRequest) String() string { return proto.CompactTextString(m) } func (*SplitQueryRequest) ProtoMessage() {} func (*SplitQueryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{50} + return fileDescriptor_query_b0bca749772b6512, []int{50} } func (m *SplitQueryRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SplitQueryRequest.Unmarshal(m, b) @@ -3505,7 +3518,7 @@ func (m *QuerySplit) Reset() { *m = QuerySplit{} } func (m *QuerySplit) String() string { return proto.CompactTextString(m) } func (*QuerySplit) ProtoMessage() {} func (*QuerySplit) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{51} + return fileDescriptor_query_b0bca749772b6512, []int{51} } func (m *QuerySplit) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_QuerySplit.Unmarshal(m, b) @@ -3552,7 +3565,7 @@ func (m *SplitQueryResponse) Reset() { *m = SplitQueryResponse{} } func (m *SplitQueryResponse) String() string { return proto.CompactTextString(m) } func (*SplitQueryResponse) ProtoMessage() {} func (*SplitQueryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{52} + return fileDescriptor_query_b0bca749772b6512, []int{52} } func (m *SplitQueryResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SplitQueryResponse.Unmarshal(m, b) @@ -3590,7 +3603,7 @@ func (m *StreamHealthRequest) Reset() { *m = StreamHealthRequest{} } func (m *StreamHealthRequest) String() string { return proto.CompactTextString(m) } func (*StreamHealthRequest) ProtoMessage() {} func (*StreamHealthRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{53} + return fileDescriptor_query_b0bca749772b6512, []int{53} } func (m *StreamHealthRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamHealthRequest.Unmarshal(m, b) @@ -3649,7 +3662,7 @@ func (m *RealtimeStats) Reset() { *m = RealtimeStats{} } func (m *RealtimeStats) String() string { return proto.CompactTextString(m) } func (*RealtimeStats) ProtoMessage() {} func (*RealtimeStats) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{54} + return fileDescriptor_query_b0bca749772b6512, []int{54} } func (m *RealtimeStats) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RealtimeStats.Unmarshal(m, b) @@ -3737,7 +3750,7 @@ func (m *AggregateStats) Reset() { *m = AggregateStats{} } func (m *AggregateStats) String() string { return proto.CompactTextString(m) } func (*AggregateStats) ProtoMessage() {} func (*AggregateStats) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{55} + return fileDescriptor_query_b0bca749772b6512, []int{55} } func (m *AggregateStats) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AggregateStats.Unmarshal(m, b) @@ -3849,7 +3862,7 @@ func (m *StreamHealthResponse) Reset() { *m = StreamHealthResponse{} } func (m *StreamHealthResponse) String() string { return proto.CompactTextString(m) } func (*StreamHealthResponse) ProtoMessage() {} func (*StreamHealthResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{56} + return fileDescriptor_query_b0bca749772b6512, []int{56} } func (m *StreamHealthResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamHealthResponse.Unmarshal(m, b) @@ -3933,7 +3946,7 @@ func (m *UpdateStreamRequest) Reset() { *m = UpdateStreamRequest{} } func (m *UpdateStreamRequest) String() string { return proto.CompactTextString(m) } func (*UpdateStreamRequest) ProtoMessage() {} func (*UpdateStreamRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{57} + return fileDescriptor_query_b0bca749772b6512, []int{57} } func (m *UpdateStreamRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateStreamRequest.Unmarshal(m, b) @@ -4000,7 +4013,7 @@ func (m *UpdateStreamResponse) Reset() { *m = UpdateStreamResponse{} } func (m *UpdateStreamResponse) String() string { return proto.CompactTextString(m) } func (*UpdateStreamResponse) ProtoMessage() {} func (*UpdateStreamResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{58} + return fileDescriptor_query_b0bca749772b6512, []int{58} } func (m *UpdateStreamResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateStreamResponse.Unmarshal(m, b) @@ -4042,7 +4055,7 @@ func (m *TransactionMetadata) Reset() { *m = TransactionMetadata{} } func (m *TransactionMetadata) String() string { return proto.CompactTextString(m) } func (*TransactionMetadata) ProtoMessage() {} func (*TransactionMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_query_1e32bb78b6357529, []int{59} + return fileDescriptor_query_b0bca749772b6512, []int{59} } func (m *TransactionMetadata) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TransactionMetadata.Unmarshal(m, b) @@ -4164,210 +4177,212 @@ func init() { proto.RegisterEnum("query.SplitQueryRequest_Algorithm", SplitQueryRequest_Algorithm_name, SplitQueryRequest_Algorithm_value) } -func init() { proto.RegisterFile("query.proto", fileDescriptor_query_1e32bb78b6357529) } - -var fileDescriptor_query_1e32bb78b6357529 = []byte{ - // 3231 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0x4b, 0x73, 0x1b, 0xc7, - 0x76, 0xd6, 0xe0, 0x41, 0x02, 0x07, 0x04, 0xd8, 0x6c, 0x90, 0x12, 0x44, 0xf9, 0xda, 0xcc, 0xdc, - 0xab, 0x7b, 0x19, 0xde, 0x1b, 0x4a, 0xa6, 0x64, 0x45, 0xb1, 0x1d, 0x47, 0x43, 0x70, 0x28, 0xc3, - 0xc2, 0x4b, 0x8d, 0x81, 0x64, 0xa9, 0x5c, 0x35, 0x35, 0x04, 0x5a, 0xe0, 0x14, 0x07, 0x33, 0xd0, - 0xcc, 0x80, 0x14, 0x77, 0x4a, 0x1c, 0xe7, 0xfd, 0x70, 0x9e, 0x8e, 0x93, 0x8a, 0x93, 0xaa, 0xec, - 0xf3, 0x1b, 0x52, 0xf9, 0x01, 0xd9, 0x65, 0x91, 0x64, 0x91, 0x45, 0x2a, 0x95, 0x45, 0xaa, 0x5c, - 0x59, 0x65, 0x91, 0x45, 0x2a, 0xd5, 0x8f, 0x19, 0x0c, 0x48, 0xe8, 0x61, 0xe5, 0x6e, 0x28, 0x7b, - 0xd7, 0x7d, 0xce, 0xe9, 0xc7, 0xf7, 0x9d, 0x33, 0xa7, 0x7b, 0xba, 0x1b, 0x0a, 0x8f, 0xc7, 0xd4, - 0x3f, 0xde, 0x1c, 0xf9, 0x5e, 0xe8, 0xe1, 0x2c, 0xaf, 0xac, 0x96, 0x42, 0x6f, 0xe4, 0xf5, 0xad, - 0xd0, 0x12, 0xe2, 0xd5, 0xc2, 0x61, 0xe8, 0x8f, 0x7a, 0xa2, 0xa2, 0x7e, 0xa6, 0xc0, 0x9c, 0x61, - 0xf9, 0x03, 0x1a, 0xe2, 0x55, 0xc8, 0x1d, 0xd0, 0xe3, 0x60, 0x64, 0xf5, 0x68, 0x45, 0x59, 0x53, - 0xd6, 0xf3, 0x24, 0xae, 0xe3, 0x65, 0xc8, 0x06, 0xfb, 0x96, 0xdf, 0xaf, 0xa4, 0xb8, 0x42, 0x54, - 0xf0, 0x3b, 0x50, 0x08, 0xad, 0x3d, 0x87, 0x86, 0x66, 0x78, 0x3c, 0xa2, 0x95, 0xf4, 0x9a, 0xb2, - 0x5e, 0xda, 0x5a, 0xde, 0x8c, 0xc7, 0x33, 0xb8, 0xd2, 0x38, 0x1e, 0x51, 0x02, 0x61, 0x5c, 0xc6, - 0x18, 0x32, 0x3d, 0xea, 0x38, 0x95, 0x0c, 0xef, 0x8b, 0x97, 0xd5, 0x1d, 0x28, 0xdd, 0x33, 0x6e, - 0x5b, 0x21, 0xad, 0x5a, 0x8e, 0x43, 0xfd, 0xda, 0x0e, 0x9b, 0xce, 0x38, 0xa0, 0xbe, 0x6b, 0x0d, - 0xe3, 0xe9, 0x44, 0x75, 0x7c, 0x1e, 0xe6, 0x06, 0xbe, 0x37, 0x1e, 0x05, 0x95, 0xd4, 0x5a, 0x7a, - 0x3d, 0x4f, 0x64, 0x4d, 0xfd, 0x04, 0x40, 0x3f, 0xa4, 0x6e, 0x68, 0x78, 0x07, 0xd4, 0xc5, 0x6f, - 0x40, 0x3e, 0xb4, 0x87, 0x34, 0x08, 0xad, 0xe1, 0x88, 0x77, 0x91, 0x26, 0x13, 0xc1, 0x33, 0x20, - 0xad, 0x42, 0x6e, 0xe4, 0x05, 0x76, 0x68, 0x7b, 0x2e, 0xc7, 0x93, 0x27, 0x71, 0x5d, 0xfd, 0x00, - 0xb2, 0xf7, 0x2c, 0x67, 0x4c, 0xf1, 0x5b, 0x90, 0xe1, 0x80, 0x15, 0x0e, 0xb8, 0xb0, 0x29, 0x48, - 0xe7, 0x38, 0xb9, 0x82, 0xf5, 0x7d, 0xc8, 0x2c, 0x79, 0xdf, 0x0b, 0x44, 0x54, 0xd4, 0x03, 0x58, - 0xd8, 0xb6, 0xdd, 0xfe, 0x3d, 0xcb, 0xb7, 0x19, 0x19, 0xaf, 0xd8, 0x0d, 0xfe, 0x01, 0xcc, 0xf1, - 0x42, 0x50, 0x49, 0xaf, 0xa5, 0xd7, 0x0b, 0x5b, 0x0b, 0xb2, 0x21, 0x9f, 0x1b, 0x91, 0x3a, 0xf5, - 0xef, 0x15, 0x80, 0x6d, 0x6f, 0xec, 0xf6, 0xef, 0x32, 0x25, 0x46, 0x90, 0x0e, 0x1e, 0x3b, 0x92, - 0x48, 0x56, 0xc4, 0x77, 0xa0, 0xb4, 0x67, 0xbb, 0x7d, 0xf3, 0x50, 0x4e, 0x47, 0x70, 0x59, 0xd8, - 0xfa, 0x81, 0xec, 0x6e, 0xd2, 0x78, 0x33, 0x39, 0xeb, 0x40, 0x77, 0x43, 0xff, 0x98, 0x14, 0xf7, - 0x92, 0xb2, 0xd5, 0x2e, 0xe0, 0xd3, 0x46, 0x6c, 0xd0, 0x03, 0x7a, 0x1c, 0x0d, 0x7a, 0x40, 0x8f, - 0xf1, 0xcf, 0x26, 0x11, 0x15, 0xb6, 0xca, 0xd1, 0x58, 0x89, 0xb6, 0x12, 0xe6, 0xbb, 0xa9, 0x9b, - 0x8a, 0xfa, 0x9f, 0x59, 0x28, 0xe9, 0x4f, 0x68, 0x6f, 0x1c, 0xd2, 0xd6, 0x88, 0xf9, 0x20, 0xc0, - 0x9b, 0x50, 0xb6, 0xdd, 0x9e, 0x33, 0xee, 0x53, 0x93, 0x32, 0x57, 0x9b, 0x21, 0xf3, 0x35, 0xef, - 0x2f, 0x47, 0x96, 0xa4, 0x2a, 0x11, 0x04, 0x1a, 0x94, 0x7b, 0xde, 0x70, 0x64, 0xf9, 0xd3, 0xf6, - 0x69, 0x3e, 0xfe, 0x92, 0x1c, 0x7f, 0x62, 0x4f, 0x96, 0xa4, 0x75, 0xa2, 0x8b, 0x06, 0x2c, 0xca, - 0x7e, 0xfb, 0xe6, 0x23, 0x9b, 0x3a, 0xfd, 0x80, 0x87, 0x6e, 0x29, 0xa6, 0x6a, 0x7a, 0x8a, 0x9b, - 0x35, 0x69, 0xbc, 0xcb, 0x6d, 0x49, 0xc9, 0x9e, 0xaa, 0xe3, 0x0d, 0x58, 0xea, 0x39, 0x36, 0x9b, - 0xca, 0x23, 0x46, 0xb1, 0xe9, 0x7b, 0x47, 0x41, 0x25, 0xcb, 0xe7, 0xbf, 0x28, 0x14, 0xbb, 0x4c, - 0x4e, 0xbc, 0xa3, 0x00, 0xbf, 0x0b, 0xb9, 0x23, 0xcf, 0x3f, 0x70, 0x3c, 0xab, 0x5f, 0x99, 0xe3, - 0x63, 0xbe, 0x39, 0x7b, 0xcc, 0xfb, 0xd2, 0x8a, 0xc4, 0xf6, 0x78, 0x1d, 0x50, 0xf0, 0xd8, 0x31, - 0x03, 0xea, 0xd0, 0x5e, 0x68, 0x3a, 0xf6, 0xd0, 0x0e, 0x2b, 0x39, 0xfe, 0x15, 0x94, 0x82, 0xc7, - 0x4e, 0x87, 0x8b, 0xeb, 0x4c, 0x8a, 0x4d, 0x58, 0x09, 0x7d, 0xcb, 0x0d, 0xac, 0x1e, 0xeb, 0xcc, - 0xb4, 0x03, 0xcf, 0xb1, 0xf8, 0x17, 0x90, 0xe7, 0x43, 0x6e, 0xcc, 0x1e, 0xd2, 0x98, 0x34, 0xa9, - 0x45, 0x2d, 0xc8, 0x72, 0x38, 0x43, 0x8a, 0xdf, 0x86, 0x95, 0xe0, 0xc0, 0x1e, 0x99, 0xbc, 0x1f, - 0x73, 0xe4, 0x58, 0xae, 0xd9, 0xb3, 0x7a, 0xfb, 0xb4, 0x02, 0x1c, 0x36, 0x66, 0x4a, 0x1e, 0x6a, - 0x6d, 0xc7, 0x72, 0xab, 0x4c, 0xa3, 0xbe, 0x07, 0xa5, 0x69, 0x1e, 0xf1, 0x12, 0x14, 0x8d, 0x07, - 0x6d, 0xdd, 0xd4, 0x9a, 0x3b, 0x66, 0x53, 0x6b, 0xe8, 0xe8, 0x1c, 0x2e, 0x42, 0x9e, 0x8b, 0x5a, - 0xcd, 0xfa, 0x03, 0xa4, 0xe0, 0x79, 0x48, 0x6b, 0xf5, 0x3a, 0x4a, 0xa9, 0x37, 0x21, 0x17, 0x11, - 0x82, 0x17, 0xa1, 0xd0, 0x6d, 0x76, 0xda, 0x7a, 0xb5, 0xb6, 0x5b, 0xd3, 0x77, 0xd0, 0x39, 0x9c, - 0x83, 0x4c, 0xab, 0x6e, 0xb4, 0x91, 0x22, 0x4a, 0x5a, 0x1b, 0xa5, 0x58, 0xcb, 0x9d, 0x6d, 0x0d, - 0xa5, 0xd5, 0x10, 0x96, 0x67, 0xe1, 0xc2, 0x05, 0x98, 0xdf, 0xd1, 0x77, 0xb5, 0x6e, 0xdd, 0x40, - 0xe7, 0x70, 0x19, 0x16, 0x89, 0xde, 0xd6, 0x35, 0x43, 0xdb, 0xae, 0xeb, 0x26, 0xd1, 0xb5, 0x1d, - 0xa4, 0x60, 0x0c, 0x25, 0x56, 0x32, 0xab, 0xad, 0x46, 0xa3, 0x66, 0x18, 0xfa, 0x0e, 0x4a, 0xe1, - 0x65, 0x40, 0x5c, 0xd6, 0x6d, 0x4e, 0xa4, 0x69, 0x8c, 0x60, 0xa1, 0xa3, 0x93, 0x9a, 0x56, 0xaf, - 0x3d, 0x64, 0x1d, 0xa0, 0xcc, 0x47, 0x99, 0x9c, 0x82, 0x52, 0xea, 0x17, 0x29, 0xc8, 0x72, 0xac, - 0x2c, 0x43, 0x26, 0xf2, 0x1e, 0x2f, 0xc7, 0xd9, 0x22, 0xf5, 0x9c, 0x6c, 0xc1, 0x93, 0xac, 0xcc, - 0x5b, 0xa2, 0x82, 0x2f, 0x41, 0xde, 0xf3, 0x07, 0xa6, 0xd0, 0x88, 0x8c, 0x9b, 0xf3, 0xfc, 0x01, - 0x4f, 0xcd, 0x2c, 0xdb, 0xb1, 0x44, 0xbd, 0x67, 0x05, 0x94, 0x47, 0x60, 0x9e, 0xc4, 0x75, 0x7c, - 0x11, 0x98, 0x9d, 0xc9, 0xe7, 0x31, 0xc7, 0x75, 0xf3, 0x9e, 0x3f, 0x68, 0xb2, 0xa9, 0x7c, 0x1f, - 0x8a, 0x3d, 0xcf, 0x19, 0x0f, 0x5d, 0xd3, 0xa1, 0xee, 0x20, 0xdc, 0xaf, 0xcc, 0xaf, 0x29, 0xeb, - 0x45, 0xb2, 0x20, 0x84, 0x75, 0x2e, 0xc3, 0x15, 0x98, 0xef, 0xed, 0x5b, 0x7e, 0x40, 0x45, 0xd4, - 0x15, 0x49, 0x54, 0xe5, 0xa3, 0xd2, 0x9e, 0x3d, 0xb4, 0x9c, 0x80, 0x47, 0x58, 0x91, 0xc4, 0x75, - 0x06, 0xe2, 0x91, 0x63, 0x0d, 0x02, 0x1e, 0x19, 0x45, 0x22, 0x2a, 0xea, 0xcf, 0x43, 0x9a, 0x78, - 0x47, 0xac, 0x4b, 0x31, 0x60, 0x50, 0x51, 0xd6, 0xd2, 0xeb, 0x98, 0x44, 0x55, 0xb6, 0x20, 0xc8, - 0x9c, 0x28, 0x52, 0x65, 0x94, 0x05, 0x3f, 0x81, 0x05, 0x42, 0x83, 0xb1, 0x13, 0xea, 0x4f, 0x42, - 0xdf, 0x0a, 0xf0, 0x16, 0x14, 0x92, 0x59, 0x40, 0x79, 0x56, 0x16, 0x00, 0x3a, 0xf9, 0xfc, 0x2b, - 0x30, 0xff, 0xc8, 0xa7, 0xc1, 0x3e, 0xf5, 0x65, 0x96, 0x89, 0xaa, 0x2c, 0xc7, 0x16, 0x78, 0xd8, - 0x8a, 0x31, 0x58, 0x66, 0x96, 0xf9, 0x41, 0x99, 0xca, 0xcc, 0xdc, 0xa9, 0x44, 0xea, 0x18, 0x7b, - 0xec, 0x93, 0x37, 0xad, 0x47, 0x8f, 0x68, 0x2f, 0xa4, 0x62, 0x01, 0xca, 0x90, 0x05, 0x26, 0xd4, - 0xa4, 0x8c, 0xb9, 0xcd, 0x76, 0x03, 0xea, 0x87, 0xa6, 0xdd, 0xe7, 0x0e, 0xcd, 0x90, 0x9c, 0x10, - 0xd4, 0xfa, 0xf8, 0x4d, 0xc8, 0xf0, 0xa4, 0x91, 0xe1, 0xa3, 0x80, 0x1c, 0x85, 0x78, 0x47, 0x84, - 0xcb, 0xf1, 0x8f, 0x61, 0x8e, 0x72, 0xbc, 0xdc, 0xa9, 0x93, 0x34, 0x9b, 0xa4, 0x82, 0x48, 0x13, - 0xf5, 0x7d, 0x58, 0xe0, 0x18, 0xee, 0x5b, 0xbe, 0x6b, 0xbb, 0x03, 0xbe, 0x3a, 0x7b, 0x7d, 0x11, - 0x7b, 0x45, 0xc2, 0xcb, 0x8c, 0x82, 0x21, 0x0d, 0x02, 0x6b, 0x40, 0xe5, 0x6a, 0x19, 0x55, 0xd5, - 0xbf, 0x4e, 0x43, 0xa1, 0x13, 0xfa, 0xd4, 0x1a, 0x72, 0xf6, 0xf0, 0xfb, 0x00, 0x41, 0x68, 0x85, - 0x74, 0x48, 0xdd, 0x30, 0xa2, 0xe1, 0x0d, 0x39, 0x7c, 0xc2, 0x6e, 0xb3, 0x13, 0x19, 0x91, 0x84, - 0xfd, 0x49, 0xf7, 0xa4, 0x5e, 0xc2, 0x3d, 0xab, 0x5f, 0xa5, 0x20, 0x1f, 0xf7, 0x86, 0x35, 0xc8, - 0xf5, 0xac, 0x90, 0x0e, 0x3c, 0xff, 0x58, 0xae, 0xab, 0x97, 0x9f, 0x37, 0xfa, 0x66, 0x55, 0x1a, - 0x93, 0xb8, 0x19, 0xfe, 0x1e, 0x88, 0xcd, 0x8a, 0x08, 0x7d, 0x81, 0x37, 0xcf, 0x25, 0x3c, 0xf8, - 0xdf, 0x05, 0x3c, 0xf2, 0xed, 0xa1, 0xe5, 0x1f, 0x9b, 0x07, 0xf4, 0x38, 0x5a, 0x10, 0xd2, 0x33, - 0x1c, 0x8e, 0xa4, 0xdd, 0x1d, 0x7a, 0x2c, 0x53, 0xd8, 0xcd, 0xe9, 0xb6, 0x32, 0x64, 0x4f, 0xbb, - 0x31, 0xd1, 0x92, 0xaf, 0xea, 0x41, 0xb4, 0x7e, 0x67, 0x79, 0x74, 0xb3, 0xa2, 0xfa, 0x23, 0xc8, - 0x45, 0x93, 0xc7, 0x79, 0xc8, 0xea, 0xbe, 0xef, 0xf9, 0xe8, 0x1c, 0xcf, 0x64, 0x8d, 0xba, 0x48, - 0x86, 0x3b, 0x3b, 0x2c, 0x19, 0xfe, 0x5d, 0x2a, 0x5e, 0x44, 0x09, 0x7d, 0x3c, 0xa6, 0x41, 0x88, - 0x7f, 0x09, 0xca, 0x94, 0x47, 0x9a, 0x7d, 0x48, 0xcd, 0x1e, 0xdf, 0x71, 0xb1, 0x38, 0x13, 0x9f, - 0xc3, 0xe2, 0xa6, 0xd8, 0x20, 0x46, 0x3b, 0x31, 0xb2, 0x14, 0xdb, 0x4a, 0x51, 0x1f, 0xeb, 0x50, - 0xb6, 0x87, 0x43, 0xda, 0xb7, 0xad, 0x30, 0xd9, 0x81, 0x70, 0xd8, 0x4a, 0xb4, 0x21, 0x99, 0xda, - 0xd0, 0x91, 0xa5, 0xb8, 0x45, 0xdc, 0xcd, 0x65, 0x98, 0x0b, 0xf9, 0xe6, 0x53, 0xae, 0xc7, 0xc5, - 0x28, 0xab, 0x71, 0x21, 0x91, 0x4a, 0xfc, 0x23, 0x10, 0x5b, 0x59, 0x9e, 0xbf, 0x26, 0x01, 0x31, - 0xd9, 0xa1, 0x10, 0xa1, 0xc7, 0x97, 0xa1, 0x34, 0xb5, 0x90, 0xf5, 0x39, 0x61, 0x69, 0x52, 0x4c, - 0xae, 0x4a, 0x7d, 0x7c, 0x05, 0xe6, 0x3d, 0xb1, 0x88, 0xf1, 0xcc, 0x36, 0x99, 0xf1, 0xf4, 0x0a, - 0x47, 0x22, 0x2b, 0xf5, 0x17, 0x61, 0x31, 0x66, 0x30, 0x18, 0x79, 0x6e, 0x40, 0xf1, 0x06, 0xcc, - 0xf9, 0xfc, 0x73, 0x92, 0xac, 0x61, 0xd9, 0x45, 0x22, 0x1f, 0x10, 0x69, 0xa1, 0xf6, 0x61, 0x51, - 0x48, 0xee, 0xdb, 0xe1, 0x3e, 0x77, 0x14, 0xbe, 0x0c, 0x59, 0xca, 0x0a, 0x27, 0x38, 0x27, 0xed, - 0x2a, 0xd7, 0x13, 0xa1, 0x4d, 0x8c, 0x92, 0x7a, 0xe1, 0x28, 0xff, 0x95, 0x82, 0xb2, 0x9c, 0xe5, - 0xb6, 0x15, 0xf6, 0xf6, 0xcf, 0xa8, 0xb3, 0x7f, 0x0c, 0xf3, 0x4c, 0x6e, 0xc7, 0x1f, 0xc6, 0x0c, - 0x77, 0x47, 0x16, 0xcc, 0xe1, 0x56, 0x60, 0x26, 0xbc, 0x2b, 0x37, 0x52, 0x45, 0x2b, 0x48, 0x2c, - 0xe3, 0x33, 0xe2, 0x62, 0xee, 0x05, 0x71, 0x31, 0xff, 0x52, 0x71, 0xb1, 0x03, 0xcb, 0xd3, 0x8c, - 0xcb, 0xe0, 0xf8, 0x09, 0xcc, 0x0b, 0xa7, 0x44, 0x29, 0x70, 0x96, 0xdf, 0x22, 0x13, 0xf5, 0xaf, - 0x52, 0xb0, 0x2c, 0xb3, 0xd3, 0xb7, 0xe3, 0x33, 0x4d, 0xf0, 0x9c, 0x7d, 0x29, 0x9e, 0xab, 0xb0, - 0x72, 0x82, 0xa0, 0x57, 0xf8, 0x0a, 0xbf, 0x56, 0x60, 0x61, 0x9b, 0x0e, 0x6c, 0xf7, 0x8c, 0xd2, - 0x9b, 0x60, 0x2d, 0xf3, 0x52, 0xac, 0xdd, 0x80, 0xa2, 0xc4, 0x2b, 0xd9, 0x3a, 0xfd, 0x19, 0x28, - 0x33, 0x3e, 0x03, 0xf5, 0xdf, 0x15, 0x28, 0x56, 0xbd, 0xe1, 0xd0, 0x0e, 0xcf, 0x28, 0x53, 0xa7, - 0x71, 0x66, 0x66, 0xe1, 0x44, 0x50, 0x8a, 0x60, 0x0a, 0x82, 0xd4, 0xff, 0x50, 0x60, 0x91, 0x78, - 0x8e, 0xb3, 0x67, 0xf5, 0x0e, 0x5e, 0x6f, 0xec, 0x18, 0xd0, 0x04, 0xa8, 0x44, 0xff, 0x3f, 0x0a, - 0x94, 0xda, 0x3e, 0x65, 0x7f, 0xbf, 0xaf, 0x35, 0x78, 0xb6, 0xc5, 0xed, 0x87, 0x72, 0x73, 0x90, - 0x27, 0xbc, 0xac, 0x2e, 0xc1, 0x62, 0x8c, 0x5d, 0xf2, 0xf1, 0xcf, 0x0a, 0xac, 0x88, 0x00, 0x91, - 0x9a, 0xfe, 0x19, 0xa5, 0x25, 0xc2, 0x9b, 0x49, 0xe0, 0xad, 0xc0, 0xf9, 0x93, 0xd8, 0x24, 0xec, - 0x4f, 0x53, 0x70, 0x21, 0x8a, 0x8d, 0x33, 0x0e, 0xfc, 0xff, 0x11, 0x0f, 0xab, 0x50, 0x39, 0x4d, - 0x82, 0x64, 0xe8, 0xf3, 0x14, 0x54, 0xaa, 0x3e, 0xb5, 0x42, 0x9a, 0xd8, 0x64, 0xbc, 0x3e, 0xb1, - 0x81, 0xdf, 0x86, 0x85, 0x91, 0xe5, 0x87, 0x76, 0xcf, 0x1e, 0x59, 0xec, 0x37, 0x2e, 0xcb, 0xf7, - 0x30, 0x27, 0x3a, 0x98, 0x32, 0x51, 0x2f, 0xc1, 0xc5, 0x19, 0x8c, 0x48, 0xbe, 0xfe, 0x57, 0x01, - 0xdc, 0x09, 0x2d, 0x3f, 0xfc, 0x16, 0xac, 0x2a, 0x33, 0x83, 0x69, 0x05, 0xca, 0x53, 0xf8, 0x93, - 0xbc, 0xd0, 0xf0, 0x5b, 0xb1, 0xe2, 0x3c, 0x93, 0x97, 0x24, 0x7e, 0xc9, 0xcb, 0xbf, 0x2a, 0xb0, - 0x5a, 0xf5, 0xc4, 0xe9, 0xdf, 0x6b, 0xf9, 0x85, 0xa9, 0xdf, 0x83, 0x4b, 0x33, 0x01, 0x4a, 0x02, - 0xfe, 0x45, 0x81, 0xf3, 0x84, 0x5a, 0xfd, 0xd7, 0x13, 0xfc, 0x5d, 0xb8, 0x70, 0x0a, 0x9c, 0xdc, - 0xa1, 0xde, 0x80, 0xdc, 0x90, 0x86, 0x56, 0xdf, 0x0a, 0x2d, 0x09, 0x69, 0x35, 0xea, 0x77, 0x62, - 0xdd, 0x90, 0x16, 0x24, 0xb6, 0x55, 0xbf, 0x4a, 0x41, 0x99, 0xef, 0x75, 0xbf, 0xfb, 0x83, 0x9a, - 0xfd, 0x2f, 0xf0, 0xb9, 0x02, 0xcb, 0xd3, 0x04, 0xc5, 0xff, 0x04, 0x3f, 0xed, 0x83, 0x88, 0x19, - 0x09, 0x21, 0x3d, 0x6b, 0x0b, 0xfa, 0x0f, 0x29, 0xa8, 0x24, 0xa7, 0xf4, 0xdd, 0xa1, 0xc5, 0xf4, - 0xa1, 0xc5, 0x37, 0x3e, 0xa5, 0xfa, 0x42, 0x81, 0x8b, 0x33, 0x08, 0xfd, 0x66, 0x8e, 0x4e, 0x1c, - 0x5d, 0xa4, 0x5e, 0x78, 0x74, 0xf1, 0xb2, 0xae, 0xfe, 0x27, 0x05, 0x96, 0x1b, 0xe2, 0xc4, 0x58, - 0xfc, 0xc7, 0x9f, 0xdd, 0x6c, 0xc6, 0x0f, 0x85, 0x33, 0x93, 0x7b, 0x19, 0xb5, 0x0a, 0x2b, 0x27, - 0xa0, 0xbd, 0xc2, 0xd9, 0xc4, 0x7f, 0x2b, 0xb0, 0x24, 0x7b, 0xd1, 0xce, 0xec, 0x46, 0x60, 0x06, - 0x3b, 0xf8, 0x4d, 0x48, 0xdb, 0xfd, 0x68, 0x07, 0x39, 0x7d, 0x53, 0xcd, 0x14, 0xea, 0x2d, 0xc0, - 0x49, 0xdc, 0xaf, 0x40, 0xdd, 0x3f, 0xa6, 0x61, 0xa9, 0x33, 0x72, 0xec, 0x50, 0x2a, 0x5f, 0xef, - 0xc4, 0xff, 0x33, 0xb0, 0x10, 0x30, 0xb0, 0xa6, 0xb8, 0x6b, 0xe3, 0xc4, 0xe6, 0x49, 0x81, 0xcb, - 0xaa, 0x5c, 0x84, 0xdf, 0x82, 0x42, 0x64, 0x32, 0x76, 0x43, 0x79, 0xd2, 0x09, 0xd2, 0x62, 0xec, - 0x86, 0xf8, 0x3a, 0x5c, 0x70, 0xc7, 0x43, 0x7e, 0xef, 0x6c, 0x8e, 0xa8, 0x1f, 0xdd, 0xca, 0x5a, - 0x7e, 0x74, 0x3f, 0x5c, 0x76, 0xc7, 0x43, 0xe2, 0x1d, 0x05, 0x6d, 0xea, 0x8b, 0x5b, 0x59, 0xcb, - 0x0f, 0xf1, 0x2d, 0xc8, 0x5b, 0xce, 0xc0, 0xf3, 0xed, 0x70, 0x7f, 0x28, 0x2f, 0x86, 0xd5, 0xe8, - 0x6a, 0xe5, 0x24, 0xfd, 0x9b, 0x5a, 0x64, 0x49, 0x26, 0x8d, 0xd4, 0x9f, 0x40, 0x3e, 0x96, 0x63, - 0x04, 0x0b, 0xfa, 0xdd, 0xae, 0x56, 0x37, 0x3b, 0xed, 0x7a, 0xcd, 0xe8, 0x88, 0xcb, 0xdc, 0xdd, - 0x6e, 0xbd, 0x6e, 0x76, 0xaa, 0x5a, 0x13, 0x29, 0x2a, 0x01, 0xe0, 0x5d, 0xf2, 0xce, 0x27, 0x04, - 0x29, 0x2f, 0x20, 0xe8, 0x12, 0xe4, 0x7d, 0xef, 0x48, 0x62, 0x4f, 0x71, 0x38, 0x39, 0xdf, 0x3b, - 0xe2, 0xc8, 0x55, 0x0d, 0x70, 0x72, 0xae, 0x32, 0xda, 0x12, 0xc9, 0x5b, 0x99, 0x4a, 0xde, 0x93, - 0xf1, 0xe3, 0xe4, 0x2d, 0xb6, 0xf2, 0xec, 0x3b, 0xff, 0x90, 0x5a, 0x4e, 0x18, 0xad, 0x57, 0xea, - 0xdf, 0xa4, 0xa0, 0x48, 0x98, 0xc4, 0x1e, 0xd2, 0x4e, 0x68, 0x85, 0x01, 0xf3, 0xd4, 0x3e, 0x37, - 0x31, 0x27, 0x69, 0x37, 0x4f, 0x0a, 0x42, 0x26, 0x2e, 0x01, 0xb6, 0x60, 0x25, 0xa0, 0x3d, 0xcf, - 0xed, 0x07, 0xe6, 0x1e, 0xdd, 0xb7, 0xdd, 0xbe, 0x39, 0xb4, 0x82, 0x50, 0xde, 0x33, 0x16, 0x49, - 0x59, 0x2a, 0xb7, 0xb9, 0xae, 0xc1, 0x55, 0xf8, 0x2a, 0x2c, 0xef, 0xd9, 0xae, 0xe3, 0x0d, 0xcc, - 0x91, 0x63, 0x1d, 0x53, 0x3f, 0x90, 0x50, 0x59, 0x78, 0x65, 0x09, 0x16, 0xba, 0xb6, 0x50, 0x09, - 0x77, 0x3f, 0x84, 0x8d, 0x99, 0xa3, 0x98, 0x8f, 0x6c, 0x27, 0xa4, 0x3e, 0xed, 0x9b, 0x3e, 0x1d, - 0x39, 0x76, 0x4f, 0x5c, 0xf9, 0x8b, 0xbd, 0xfb, 0x0f, 0x67, 0x0c, 0xbd, 0x2b, 0xcd, 0xc9, 0xc4, - 0x9a, 0xb1, 0xdd, 0x1b, 0x8d, 0xcd, 0x31, 0xbf, 0x1a, 0x64, 0xab, 0x98, 0x42, 0x72, 0xbd, 0xd1, - 0xb8, 0xcb, 0xea, 0x18, 0x41, 0xfa, 0xf1, 0x48, 0x2c, 0x5e, 0x0a, 0x61, 0x45, 0xf5, 0x6b, 0x05, - 0x4a, 0xda, 0x60, 0xe0, 0xd3, 0x81, 0x15, 0x4a, 0x9a, 0xae, 0xc2, 0xb2, 0xa0, 0xe4, 0xd8, 0x94, - 0x6f, 0x89, 0x04, 0x1e, 0x45, 0xe0, 0x91, 0x3a, 0xf1, 0x92, 0x28, 0x0a, 0xdf, 0xf3, 0x63, 0x77, - 0x66, 0x9b, 0x14, 0x6f, 0xb3, 0x1c, 0x6b, 0x93, 0xad, 0x7e, 0x01, 0x2e, 0xce, 0x66, 0x61, 0x68, - 0x8b, 0xd7, 0x20, 0x45, 0x72, 0x7e, 0x06, 0xe8, 0x86, 0xed, 0x3e, 0xa7, 0xa9, 0xf5, 0x84, 0xf3, - 0xf5, 0x8c, 0xa6, 0xd6, 0x13, 0xf5, 0xdf, 0xe2, 0xa3, 0xfd, 0x28, 0x5c, 0xe2, 0xd5, 0x38, 0xca, - 0x0b, 0xca, 0xf3, 0xf2, 0x42, 0x05, 0xe6, 0x03, 0xea, 0x1f, 0xda, 0xee, 0x20, 0xba, 0x7b, 0x96, - 0x55, 0xdc, 0x81, 0x1f, 0x4a, 0xec, 0xf4, 0x49, 0x48, 0x7d, 0xd7, 0x72, 0x9c, 0x63, 0x53, 0x1c, - 0x54, 0xb8, 0x21, 0xed, 0x9b, 0x93, 0x97, 0x4f, 0x62, 0x45, 0xfe, 0xbe, 0xb0, 0xd6, 0x63, 0x63, - 0x12, 0xdb, 0x1a, 0xf1, 0x9b, 0xa8, 0xf7, 0xa0, 0xe4, 0xcb, 0x20, 0x36, 0x03, 0xe6, 0x1e, 0x99, - 0x8f, 0x96, 0xe3, 0x0b, 0xe4, 0x44, 0x84, 0x93, 0xa2, 0x3f, 0x15, 0xf0, 0x1f, 0xc0, 0xa2, 0x15, - 0xf9, 0x56, 0xb6, 0x9e, 0xde, 0xb7, 0x4c, 0x7b, 0x9e, 0x94, 0xac, 0xe9, 0x48, 0xb8, 0x09, 0x0b, - 0x12, 0x91, 0xe5, 0xd8, 0xd6, 0x64, 0x63, 0x7b, 0xe2, 0x39, 0x99, 0xc6, 0x94, 0x44, 0x3e, 0x3c, - 0xe3, 0x15, 0xf6, 0x1f, 0x5d, 0xee, 0x8e, 0xfa, 0xbc, 0xa7, 0x33, 0xbc, 0xbb, 0x48, 0xbe, 0x3d, - 0xcb, 0x4c, 0xbf, 0x3d, 0x9b, 0x7e, 0xcb, 0x96, 0x3d, 0xf1, 0x96, 0x4d, 0xbd, 0x05, 0xcb, 0xd3, - 0xf8, 0x65, 0x94, 0xad, 0x43, 0x96, 0xdf, 0x94, 0x9f, 0x58, 0x46, 0x13, 0x57, 0xe1, 0x44, 0x18, - 0xa8, 0x7f, 0xab, 0x40, 0x79, 0xc6, 0x2f, 0x56, 0xfc, 0xff, 0xa6, 0x24, 0x8e, 0x87, 0x7e, 0x0e, - 0xb2, 0xfc, 0xce, 0x5e, 0x3e, 0x45, 0xb9, 0x70, 0xfa, 0x0f, 0x8d, 0xdf, 0xaf, 0x13, 0x61, 0xc5, - 0x12, 0x21, 0x0f, 0xa8, 0x1e, 0x3f, 0x1f, 0x8a, 0x76, 0x88, 0x05, 0x26, 0x13, 0x47, 0x46, 0xa7, - 0x0f, 0x9c, 0x32, 0x2f, 0x3c, 0x70, 0xda, 0xf8, 0xc3, 0x34, 0xe4, 0x1b, 0xc7, 0x9d, 0xc7, 0xce, - 0xae, 0x63, 0x0d, 0xf8, 0x05, 0x78, 0xa3, 0x6d, 0x3c, 0x40, 0xe7, 0xf0, 0x12, 0x14, 0x9b, 0x2d, - 0xc3, 0x6c, 0xb2, 0xa5, 0x64, 0xb7, 0xae, 0xdd, 0x46, 0x0a, 0x5b, 0x6b, 0xda, 0xa4, 0x66, 0xde, - 0xd1, 0x1f, 0x08, 0x49, 0x0a, 0x97, 0x61, 0xb1, 0xdb, 0xac, 0xdd, 0xed, 0xea, 0x13, 0x61, 0x06, - 0xaf, 0xc0, 0x52, 0xa3, 0x5b, 0x37, 0x6a, 0xed, 0x7a, 0x42, 0x9c, 0x63, 0xeb, 0xd2, 0x76, 0xbd, - 0xb5, 0x2d, 0xaa, 0x88, 0xf5, 0xdf, 0x6d, 0x76, 0x6a, 0xb7, 0x9b, 0xfa, 0x8e, 0x10, 0xad, 0x31, - 0xd1, 0x43, 0x9d, 0xb4, 0x76, 0x6b, 0xd1, 0x90, 0xb7, 0x30, 0x82, 0xc2, 0x76, 0xad, 0xa9, 0x11, - 0xd9, 0xcb, 0x53, 0x05, 0x97, 0x20, 0xaf, 0x37, 0xbb, 0x0d, 0x59, 0x4f, 0xe1, 0x0a, 0x94, 0xb5, - 0xae, 0xd1, 0x32, 0x6b, 0xcd, 0x2a, 0xd1, 0x1b, 0x7a, 0xd3, 0x90, 0x9a, 0x0c, 0x2e, 0x43, 0xc9, - 0xa8, 0x35, 0xf4, 0x8e, 0xa1, 0x35, 0xda, 0x52, 0xc8, 0x66, 0x91, 0xeb, 0xe8, 0x91, 0x0d, 0xc2, - 0xab, 0xb0, 0xd2, 0x6c, 0x99, 0xf2, 0x49, 0x92, 0x79, 0x4f, 0xab, 0x77, 0x75, 0xa9, 0x5b, 0xc3, - 0x17, 0x00, 0xb7, 0x9a, 0x66, 0xb7, 0xbd, 0xa3, 0x19, 0xba, 0xd9, 0x6c, 0xdd, 0x97, 0x8a, 0x5b, - 0xb8, 0x04, 0xb9, 0xc9, 0x0c, 0x9e, 0x32, 0x16, 0x8a, 0x6d, 0x8d, 0x18, 0x13, 0xb0, 0x4f, 0x9f, - 0x32, 0xb2, 0xe0, 0x36, 0x69, 0x75, 0xdb, 0x13, 0xb3, 0x25, 0x28, 0x48, 0xb2, 0xa4, 0x28, 0xc3, - 0x44, 0xdb, 0xb5, 0x66, 0x35, 0x9e, 0xdf, 0xd3, 0xdc, 0x6a, 0x0a, 0x29, 0x1b, 0x07, 0x90, 0xe1, - 0xee, 0xc8, 0x41, 0xa6, 0xd9, 0x6a, 0xea, 0xe8, 0x1c, 0x5e, 0x04, 0xa8, 0x75, 0x6a, 0x4d, 0x43, - 0xbf, 0x4d, 0xb4, 0x3a, 0x83, 0xcd, 0x05, 0x11, 0x81, 0x0c, 0xed, 0x02, 0xcc, 0xd7, 0x3a, 0xbb, - 0xf5, 0x96, 0x66, 0x48, 0x98, 0xb5, 0xce, 0xdd, 0x6e, 0xcb, 0x60, 0x4a, 0x84, 0x0b, 0x30, 0x57, - 0xeb, 0x18, 0xfa, 0xc7, 0x06, 0xc3, 0xc5, 0x75, 0x82, 0x55, 0xf4, 0xf4, 0xd6, 0xc6, 0x97, 0x69, - 0xc8, 0xf0, 0xf7, 0xa4, 0x45, 0xc8, 0x73, 0x6f, 0x1b, 0x0f, 0xda, 0x6c, 0xc8, 0x3c, 0x64, 0x6a, - 0x4d, 0xe3, 0x26, 0xfa, 0xe5, 0x14, 0x06, 0xc8, 0x76, 0x79, 0xf9, 0x57, 0xe6, 0x58, 0xb9, 0xd6, - 0x34, 0xde, 0xbe, 0x81, 0x3e, 0x4d, 0xb1, 0x6e, 0xbb, 0xa2, 0xf2, 0xab, 0x91, 0x62, 0xeb, 0x3a, - 0xfa, 0x2c, 0x56, 0x6c, 0x5d, 0x47, 0xbf, 0x16, 0x29, 0xae, 0x6d, 0xa1, 0x5f, 0x8f, 0x15, 0xd7, - 0xb6, 0xd0, 0x6f, 0x44, 0x8a, 0x1b, 0xd7, 0xd1, 0x6f, 0xc6, 0x8a, 0x1b, 0xd7, 0xd1, 0x6f, 0xcd, - 0x31, 0x2c, 0x1c, 0xc9, 0xb5, 0x2d, 0xf4, 0xdb, 0xb9, 0xb8, 0x76, 0xe3, 0x3a, 0xfa, 0x9d, 0x1c, - 0xf3, 0x7f, 0xec, 0x55, 0xf4, 0xbb, 0x88, 0x4d, 0x93, 0x39, 0x08, 0xfd, 0x1e, 0x2f, 0x32, 0x15, - 0xfa, 0x7d, 0xc4, 0x30, 0x32, 0x29, 0xaf, 0x7e, 0xce, 0x35, 0x0f, 0x74, 0x8d, 0xa0, 0x3f, 0x98, - 0x13, 0x2f, 0xd0, 0xaa, 0xb5, 0x86, 0x56, 0x47, 0x98, 0xb7, 0x60, 0xac, 0xfc, 0xd1, 0x55, 0x56, - 0x64, 0xe1, 0x89, 0xfe, 0xb8, 0xcd, 0x06, 0xbc, 0xa7, 0x91, 0xea, 0x87, 0x1a, 0x41, 0x7f, 0x72, - 0x95, 0x0d, 0x78, 0x4f, 0x23, 0x92, 0xaf, 0x3f, 0x6d, 0x33, 0x43, 0xae, 0xfa, 0xe2, 0x2a, 0x9b, - 0xb4, 0x94, 0xff, 0x59, 0x1b, 0xe7, 0x20, 0xbd, 0x5d, 0x33, 0xd0, 0x97, 0x7c, 0x34, 0x16, 0xa2, - 0xe8, 0xcf, 0x11, 0x13, 0x76, 0x74, 0x03, 0xfd, 0x05, 0x13, 0x66, 0x8d, 0x6e, 0xbb, 0xae, 0xa3, - 0x37, 0xd8, 0xe4, 0x6e, 0xeb, 0xad, 0x86, 0x6e, 0x90, 0x07, 0xe8, 0x2f, 0xb9, 0xf9, 0x47, 0x9d, - 0x56, 0x13, 0x7d, 0x85, 0x70, 0x09, 0x40, 0xff, 0xb8, 0x4d, 0xf4, 0x4e, 0xa7, 0xd6, 0x6a, 0xa2, - 0xb7, 0x36, 0x76, 0x01, 0x9d, 0x4c, 0x07, 0x0c, 0x40, 0xb7, 0x79, 0xa7, 0xd9, 0xba, 0xdf, 0x44, - 0xe7, 0x58, 0xa5, 0x4d, 0xf4, 0xb6, 0x46, 0x74, 0xa4, 0x60, 0x80, 0x39, 0xf1, 0x3e, 0x0e, 0xa5, - 0xf0, 0x02, 0xe4, 0x48, 0xab, 0x5e, 0xdf, 0xd6, 0xaa, 0x77, 0x50, 0x7a, 0xfb, 0x1d, 0x58, 0xb4, - 0xbd, 0xcd, 0x43, 0x3b, 0xa4, 0x41, 0x20, 0x5e, 0x2c, 0x3f, 0x54, 0x65, 0xcd, 0xf6, 0xae, 0x88, - 0xd2, 0x95, 0x81, 0x77, 0xe5, 0x30, 0xbc, 0xc2, 0xb5, 0x57, 0x78, 0xc6, 0xd8, 0x9b, 0xe3, 0x95, - 0x6b, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0xda, 0x0b, 0x47, 0xfb, 0x0f, 0x2d, 0x00, 0x00, +func init() { proto.RegisterFile("query.proto", fileDescriptor_query_b0bca749772b6512) } + +var fileDescriptor_query_b0bca749772b6512 = []byte{ + // 3259 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcd, 0x73, 0x1b, 0xc9, + 0x75, 0xd7, 0xe0, 0x8b, 0xc0, 0x03, 0x01, 0x36, 0x1b, 0xa4, 0x84, 0xe5, 0x7e, 0xd1, 0x63, 0xaf, + 0xcd, 0xd0, 0x0e, 0xa5, 0xe5, 0xca, 0x8a, 0xb2, 0x76, 0x1c, 0x0d, 0xc1, 0xa1, 0x16, 0x16, 0x30, + 0x80, 0x1a, 0x03, 0xc9, 0xda, 0x72, 0xd5, 0xd4, 0x10, 0x68, 0x81, 0x53, 0x1c, 0xcc, 0x40, 0x33, + 0x03, 0x52, 0xbc, 0x29, 0x71, 0x9c, 0xef, 0xc4, 0x9b, 0xcf, 0x8d, 0x93, 0xca, 0x56, 0xaa, 0x72, + 0xcf, 0xdf, 0x90, 0xca, 0x21, 0xc7, 0xdc, 0x72, 0x48, 0x72, 0xc8, 0x21, 0x95, 0xca, 0xcd, 0x95, + 0x53, 0x0e, 0x39, 0xa4, 0x52, 0xfd, 0x31, 0x83, 0x01, 0x89, 0x95, 0x64, 0x25, 0x17, 0x6a, 0x7d, + 0xeb, 0x7e, 0xef, 0xf5, 0xc7, 0xef, 0xf7, 0xde, 0xbc, 0xee, 0xe9, 0x6e, 0x28, 0x3f, 0x99, 0xd2, + 0xe0, 0x6c, 0x67, 0x12, 0xf8, 0x91, 0x8f, 0xf3, 0xbc, 0xb2, 0x51, 0x8d, 0xfc, 0x89, 0x3f, 0xb4, + 0x23, 0x5b, 0x88, 0x37, 0xca, 0x27, 0x51, 0x30, 0x19, 0x88, 0x8a, 0xfa, 0x43, 0x05, 0x0a, 0xa6, + 0x1d, 0x8c, 0x68, 0x84, 0x37, 0xa0, 0x78, 0x4c, 0xcf, 0xc2, 0x89, 0x3d, 0xa0, 0x75, 0x65, 0x53, + 0xd9, 0x2a, 0x91, 0xa4, 0x8e, 0xd7, 0x20, 0x1f, 0x1e, 0xd9, 0xc1, 0xb0, 0x9e, 0xe1, 0x0a, 0x51, + 0xc1, 0xdf, 0x84, 0x72, 0x64, 0x1f, 0xba, 0x34, 0xb2, 0xa2, 0xb3, 0x09, 0xad, 0x67, 0x37, 0x95, + 0xad, 0xea, 0xee, 0xda, 0x4e, 0x32, 0x9e, 0xc9, 0x95, 0xe6, 0xd9, 0x84, 0x12, 0x88, 0x92, 0x32, + 0xc6, 0x90, 0x1b, 0x50, 0xd7, 0xad, 0xe7, 0x78, 0x5f, 0xbc, 0xac, 0xee, 0x43, 0xf5, 0x81, 0x79, + 0xd7, 0x8e, 0x68, 0xc3, 0x76, 0x5d, 0x1a, 0x34, 0xf7, 0xd9, 0x74, 0xa6, 0x21, 0x0d, 0x3c, 0x7b, + 0x9c, 0x4c, 0x27, 0xae, 0xe3, 0xab, 0x50, 0x18, 0x05, 0xfe, 0x74, 0x12, 0xd6, 0x33, 0x9b, 0xd9, + 0xad, 0x12, 0x91, 0x35, 0xf5, 0xfb, 0x00, 0xfa, 0x09, 0xf5, 0x22, 0xd3, 0x3f, 0xa6, 0x1e, 0x7e, + 0x0b, 0x4a, 0x91, 0x33, 0xa6, 0x61, 0x64, 0x8f, 0x27, 0xbc, 0x8b, 0x2c, 0x99, 0x09, 0x3e, 0x07, + 0xd2, 0x06, 0x14, 0x27, 0x7e, 0xe8, 0x44, 0x8e, 0xef, 0x71, 0x3c, 0x25, 0x92, 0xd4, 0xd5, 0xef, + 0x40, 0xfe, 0x81, 0xed, 0x4e, 0x29, 0x7e, 0x17, 0x72, 0x1c, 0xb0, 0xc2, 0x01, 0x97, 0x77, 0x04, + 0xe9, 0x1c, 0x27, 0x57, 0xb0, 0xbe, 0x4f, 0x98, 0x25, 0xef, 0x7b, 0x99, 0x88, 0x8a, 0x7a, 0x0c, + 0xcb, 0x7b, 0x8e, 0x37, 0x7c, 0x60, 0x07, 0x0e, 0x23, 0xe3, 0x15, 0xbb, 0xc1, 0x5f, 0x81, 0x02, + 0x2f, 0x84, 0xf5, 0xec, 0x66, 0x76, 0xab, 0xbc, 0xbb, 0x2c, 0x1b, 0xf2, 0xb9, 0x11, 0xa9, 0x53, + 0xff, 0x4e, 0x01, 0xd8, 0xf3, 0xa7, 0xde, 0xf0, 0x3e, 0x53, 0x62, 0x04, 0xd9, 0xf0, 0x89, 0x2b, + 0x89, 0x64, 0x45, 0x7c, 0x0f, 0xaa, 0x87, 0x8e, 0x37, 0xb4, 0x4e, 0xe4, 0x74, 0x04, 0x97, 0xe5, + 0xdd, 0xaf, 0xc8, 0xee, 0x66, 0x8d, 0x77, 0xd2, 0xb3, 0x0e, 0x75, 0x2f, 0x0a, 0xce, 0x48, 0xe5, + 0x30, 0x2d, 0xdb, 0xe8, 0x03, 0xbe, 0x68, 0xc4, 0x06, 0x3d, 0xa6, 0x67, 0xf1, 0xa0, 0xc7, 0xf4, + 0x0c, 0xff, 0x5c, 0x1a, 0x51, 0x79, 0xb7, 0x16, 0x8f, 0x95, 0x6a, 0x2b, 0x61, 0x7e, 0x98, 0xb9, + 0xad, 0xa8, 0x3f, 0x2a, 0x40, 0x55, 0x7f, 0x4a, 0x07, 0xd3, 0x88, 0x76, 0x26, 0xcc, 0x07, 0x21, + 0xde, 0x81, 0x9a, 0xe3, 0x0d, 0xdc, 0xe9, 0x90, 0x5a, 0x94, 0xb9, 0xda, 0x8a, 0x98, 0xaf, 0x79, + 0x7f, 0x45, 0xb2, 0x2a, 0x55, 0xa9, 0x20, 0xd0, 0xa0, 0x36, 0xf0, 0xc7, 0x13, 0x3b, 0x98, 0xb7, + 0xcf, 0xf2, 0xf1, 0x57, 0xe5, 0xf8, 0x33, 0x7b, 0xb2, 0x2a, 0xad, 0x53, 0x5d, 0xb4, 0x61, 0x45, + 0xf6, 0x3b, 0xb4, 0x1e, 0x3b, 0xd4, 0x1d, 0x86, 0x3c, 0x74, 0xab, 0x09, 0x55, 0xf3, 0x53, 0xdc, + 0x69, 0x4a, 0xe3, 0x03, 0x6e, 0x4b, 0xaa, 0xce, 0x5c, 0x1d, 0x6f, 0xc3, 0xea, 0xc0, 0x75, 0xd8, + 0x54, 0x1e, 0x33, 0x8a, 0xad, 0xc0, 0x3f, 0x0d, 0xeb, 0x79, 0x3e, 0xff, 0x15, 0xa1, 0x38, 0x60, + 0x72, 0xe2, 0x9f, 0x86, 0xf8, 0x43, 0x28, 0x9e, 0xfa, 0xc1, 0xb1, 0xeb, 0xdb, 0xc3, 0x7a, 0x81, + 0x8f, 0xf9, 0xce, 0xe2, 0x31, 0x1f, 0x4a, 0x2b, 0x92, 0xd8, 0xe3, 0x2d, 0x40, 0xe1, 0x13, 0xd7, + 0x0a, 0xa9, 0x4b, 0x07, 0x91, 0xe5, 0x3a, 0x63, 0x27, 0xaa, 0x17, 0xf9, 0x57, 0x50, 0x0d, 0x9f, + 0xb8, 0x3d, 0x2e, 0x6e, 0x31, 0x29, 0xb6, 0x60, 0x3d, 0x0a, 0x6c, 0x2f, 0xb4, 0x07, 0xac, 0x33, + 0xcb, 0x09, 0x7d, 0xd7, 0xe6, 0x5f, 0x40, 0x89, 0x0f, 0xb9, 0xbd, 0x78, 0x48, 0x73, 0xd6, 0xa4, + 0x19, 0xb7, 0x20, 0x6b, 0xd1, 0x02, 0x29, 0x7e, 0x1f, 0xd6, 0xc3, 0x63, 0x67, 0x62, 0xf1, 0x7e, + 0xac, 0x89, 0x6b, 0x7b, 0xd6, 0xc0, 0x1e, 0x1c, 0xd1, 0x3a, 0x70, 0xd8, 0x98, 0x29, 0x79, 0xa8, + 0x75, 0x5d, 0xdb, 0x6b, 0x30, 0x8d, 0xfa, 0x2d, 0xa8, 0xce, 0xf3, 0x88, 0x57, 0xa1, 0x62, 0x3e, + 0xea, 0xea, 0x96, 0x66, 0xec, 0x5b, 0x86, 0xd6, 0xd6, 0xd1, 0x15, 0x5c, 0x81, 0x12, 0x17, 0x75, + 0x8c, 0xd6, 0x23, 0xa4, 0xe0, 0x25, 0xc8, 0x6a, 0xad, 0x16, 0xca, 0xa8, 0xb7, 0xa1, 0x18, 0x13, + 0x82, 0x57, 0xa0, 0xdc, 0x37, 0x7a, 0x5d, 0xbd, 0xd1, 0x3c, 0x68, 0xea, 0xfb, 0xe8, 0x0a, 0x2e, + 0x42, 0xae, 0xd3, 0x32, 0xbb, 0x48, 0x11, 0x25, 0xad, 0x8b, 0x32, 0xac, 0xe5, 0xfe, 0x9e, 0x86, + 0xb2, 0xea, 0xa7, 0x0a, 0xac, 0x2d, 0x02, 0x86, 0xcb, 0xb0, 0xb4, 0xaf, 0x1f, 0x68, 0xfd, 0x96, + 0x89, 0xae, 0xe0, 0x1a, 0xac, 0x10, 0xbd, 0xab, 0x6b, 0xa6, 0xb6, 0xd7, 0xd2, 0x2d, 0xa2, 0x6b, + 0xfb, 0x48, 0xc1, 0x18, 0xaa, 0xac, 0x64, 0x35, 0x3a, 0xed, 0x76, 0xd3, 0x34, 0xf5, 0x7d, 0x94, + 0xc1, 0x6b, 0x80, 0xb8, 0xac, 0x6f, 0xcc, 0xa4, 0x59, 0x8c, 0x60, 0xb9, 0xa7, 0x93, 0xa6, 0xd6, + 0x6a, 0x7e, 0xcc, 0x3a, 0x40, 0x39, 0xfc, 0x25, 0x78, 0xbb, 0xd1, 0x31, 0x7a, 0xcd, 0x9e, 0xa9, + 0x1b, 0xa6, 0xd5, 0x33, 0xb4, 0x6e, 0xef, 0xa3, 0x8e, 0xc9, 0x7b, 0x16, 0xe0, 0xf2, 0xdf, 0xcd, + 0x15, 0x15, 0x94, 0x51, 0x3f, 0xcd, 0x40, 0x9e, 0xf3, 0xc1, 0xb2, 0x68, 0x2a, 0x37, 0xf2, 0x72, + 0x92, 0x51, 0x32, 0xcf, 0xc9, 0x28, 0x3c, 0x11, 0xcb, 0xdc, 0x26, 0x2a, 0xf8, 0x4d, 0x28, 0xf9, + 0xc1, 0xc8, 0x12, 0x1a, 0x91, 0x95, 0x8b, 0x7e, 0x30, 0xe2, 0xe9, 0x9b, 0x65, 0x44, 0x96, 0xcc, + 0x0f, 0xed, 0x90, 0xf2, 0x28, 0x2d, 0x91, 0xa4, 0x8e, 0xdf, 0x00, 0x66, 0x67, 0xf1, 0x79, 0x14, + 0xb8, 0x6e, 0xc9, 0x0f, 0x46, 0x06, 0x9b, 0xca, 0x97, 0xa1, 0x32, 0xf0, 0xdd, 0xe9, 0xd8, 0xb3, + 0x5c, 0xea, 0x8d, 0xa2, 0xa3, 0xfa, 0xd2, 0xa6, 0xb2, 0x55, 0x21, 0xcb, 0x42, 0xd8, 0xe2, 0x32, + 0x5c, 0x87, 0xa5, 0xc1, 0x91, 0x1d, 0x84, 0x54, 0x44, 0x66, 0x85, 0xc4, 0x55, 0x3e, 0x2a, 0x1d, + 0x38, 0x63, 0xdb, 0x0d, 0x79, 0x14, 0x56, 0x48, 0x52, 0x67, 0x20, 0x1e, 0xbb, 0xf6, 0x28, 0xe4, + 0xd1, 0x53, 0x21, 0xa2, 0xa2, 0xfe, 0x02, 0x64, 0x89, 0x7f, 0xca, 0xba, 0x14, 0x03, 0x86, 0x75, + 0x65, 0x33, 0xbb, 0x85, 0x49, 0x5c, 0x65, 0x8b, 0x86, 0xcc, 0x9b, 0x22, 0x9d, 0xc6, 0x99, 0xf2, + 0xfb, 0xb0, 0x4c, 0x68, 0x38, 0x75, 0x23, 0xfd, 0x69, 0x14, 0xd8, 0x21, 0xde, 0x85, 0x72, 0x3a, + 0x53, 0x28, 0x9f, 0x97, 0x29, 0x80, 0xce, 0x52, 0x44, 0x1d, 0x96, 0x1e, 0x07, 0x34, 0x3c, 0xa2, + 0x81, 0xcc, 0x44, 0x71, 0x95, 0xe5, 0xe1, 0x32, 0x0f, 0x6d, 0x31, 0x06, 0xcb, 0xde, 0x32, 0x87, + 0x28, 0x73, 0xd9, 0x9b, 0x3b, 0x95, 0x48, 0x1d, 0x63, 0x8f, 0xa5, 0x05, 0xcb, 0x7e, 0xfc, 0x98, + 0x0e, 0x22, 0x2a, 0x16, 0xa9, 0x1c, 0x59, 0x66, 0x42, 0x4d, 0xca, 0x98, 0xdb, 0x1c, 0x2f, 0xa4, + 0x41, 0x64, 0x39, 0x43, 0xee, 0xd0, 0x1c, 0x29, 0x0a, 0x41, 0x73, 0x88, 0xdf, 0x81, 0x1c, 0x4f, + 0x2c, 0x39, 0x3e, 0x0a, 0xc8, 0x51, 0x88, 0x7f, 0x4a, 0xb8, 0x1c, 0x7f, 0x1d, 0x0a, 0x94, 0xe3, + 0xe5, 0x4e, 0x9d, 0xa5, 0xe2, 0x34, 0x15, 0x44, 0x9a, 0xa8, 0xdf, 0x86, 0x65, 0x8e, 0xe1, 0xa1, + 0x1d, 0x78, 0x8e, 0x37, 0xe2, 0x2b, 0xb8, 0x3f, 0x14, 0xb1, 0x57, 0x21, 0xbc, 0xcc, 0x28, 0x18, + 0xd3, 0x30, 0xb4, 0x47, 0x54, 0xae, 0xa8, 0x71, 0x55, 0xfd, 0xab, 0x2c, 0x94, 0x7b, 0x51, 0x40, + 0xed, 0x31, 0x67, 0x0f, 0x7f, 0x1b, 0x20, 0x8c, 0xec, 0x88, 0x8e, 0xa9, 0x17, 0xc5, 0x34, 0xbc, + 0x25, 0x87, 0x4f, 0xd9, 0xed, 0xf4, 0x62, 0x23, 0x92, 0xb2, 0x3f, 0xef, 0x9e, 0xcc, 0x4b, 0xb8, + 0x67, 0xe3, 0xb3, 0x0c, 0x94, 0x92, 0xde, 0xb0, 0x06, 0xc5, 0x81, 0x1d, 0xd1, 0x91, 0x1f, 0x9c, + 0xc9, 0xb5, 0xf7, 0xbd, 0xe7, 0x8d, 0xbe, 0xd3, 0x90, 0xc6, 0x24, 0x69, 0x86, 0xdf, 0x06, 0xb1, + 0xa1, 0x11, 0xa1, 0x2f, 0xf0, 0x96, 0xb8, 0x84, 0x07, 0xff, 0x87, 0x80, 0x27, 0x81, 0x33, 0xb6, + 0x83, 0x33, 0xeb, 0x98, 0x9e, 0xc5, 0x8b, 0x46, 0x76, 0x81, 0xc3, 0x91, 0xb4, 0xbb, 0x47, 0xcf, + 0x64, 0x9a, 0xbb, 0x3d, 0xdf, 0x56, 0x86, 0xec, 0x45, 0x37, 0xa6, 0x5a, 0xf2, 0x95, 0x3f, 0x8c, + 0xd7, 0xf8, 0x3c, 0x8f, 0x6e, 0x56, 0x54, 0xbf, 0x06, 0xc5, 0x78, 0xf2, 0xb8, 0x04, 0x79, 0x3d, + 0x08, 0xfc, 0x00, 0x5d, 0xe1, 0xd9, 0xae, 0xdd, 0x12, 0x09, 0x73, 0x7f, 0x9f, 0x25, 0xcc, 0xbf, + 0xcd, 0x24, 0x0b, 0x2d, 0xa1, 0x4f, 0xa6, 0x34, 0x8c, 0xf0, 0x2f, 0x43, 0x8d, 0xf2, 0x48, 0x73, + 0x4e, 0xa8, 0x35, 0xe0, 0xbb, 0x32, 0x16, 0x67, 0xe2, 0x73, 0x58, 0xd9, 0x11, 0x9b, 0xc8, 0x78, + 0xb7, 0x46, 0x56, 0x13, 0x5b, 0x29, 0x1a, 0x62, 0x1d, 0x6a, 0xce, 0x78, 0x4c, 0x87, 0x8e, 0x1d, + 0xa5, 0x3b, 0x10, 0x0e, 0x5b, 0x8f, 0x37, 0x2d, 0x73, 0x9b, 0x3e, 0xb2, 0x9a, 0xb4, 0x48, 0xba, + 0x79, 0x0f, 0x0a, 0x11, 0xdf, 0xa0, 0xca, 0x35, 0xbb, 0x12, 0x67, 0x35, 0x2e, 0x24, 0x52, 0x89, + 0xbf, 0x06, 0x62, 0xbb, 0xcb, 0xf3, 0xd7, 0x2c, 0x20, 0x66, 0xbb, 0x18, 0x22, 0xf4, 0xf8, 0x3d, + 0xa8, 0xce, 0x2d, 0x76, 0x43, 0x4e, 0x58, 0x96, 0x54, 0xd2, 0x2b, 0xd7, 0x10, 0x5f, 0x87, 0x25, + 0x5f, 0x2c, 0x74, 0x3c, 0xb3, 0xcd, 0x66, 0x3c, 0xbf, 0x0a, 0x92, 0xd8, 0x4a, 0xfd, 0x25, 0x58, + 0x49, 0x18, 0x0c, 0x27, 0xbe, 0x17, 0x52, 0xbc, 0x0d, 0x85, 0x80, 0x7f, 0x4e, 0x92, 0x35, 0x2c, + 0xbb, 0x48, 0xe5, 0x03, 0x22, 0x2d, 0xd4, 0x21, 0xac, 0x08, 0xc9, 0x43, 0x27, 0x3a, 0xe2, 0x8e, + 0xc2, 0xef, 0x41, 0x9e, 0xb2, 0xc2, 0x39, 0xce, 0x49, 0xb7, 0xc1, 0xf5, 0x44, 0x68, 0x53, 0xa3, + 0x64, 0x5e, 0x38, 0xca, 0x7f, 0x66, 0xa0, 0x26, 0x67, 0xb9, 0x67, 0x47, 0x83, 0xa3, 0x4b, 0xea, + 0xec, 0xaf, 0xc3, 0x12, 0x93, 0x3b, 0xc9, 0x87, 0xb1, 0xc0, 0xdd, 0xb1, 0x05, 0x73, 0xb8, 0x1d, + 0x5a, 0x29, 0xef, 0xca, 0xcd, 0x56, 0xc5, 0x0e, 0x53, 0x2b, 0xfd, 0x82, 0xb8, 0x28, 0xbc, 0x20, + 0x2e, 0x96, 0x5e, 0x2a, 0x2e, 0xf6, 0x61, 0x6d, 0x9e, 0x71, 0x19, 0x1c, 0xdf, 0x80, 0x25, 0xe1, + 0x94, 0x38, 0x05, 0x2e, 0xf2, 0x5b, 0x6c, 0xa2, 0xfe, 0x7d, 0x06, 0xd6, 0x64, 0x76, 0xfa, 0x62, + 0x7c, 0xa6, 0x29, 0x9e, 0xf3, 0x2f, 0xc3, 0xf3, 0x4b, 0xfa, 0x4f, 0x6d, 0xc0, 0xfa, 0x39, 0x1e, + 0x5f, 0xe1, 0x63, 0xfd, 0x89, 0x02, 0xcb, 0x7b, 0x74, 0xe4, 0x78, 0x97, 0xd4, 0x0b, 0x29, 0x72, + 0x73, 0x2f, 0x15, 0xc4, 0xb7, 0xa0, 0x22, 0xf1, 0x4a, 0xb6, 0x2e, 0xb2, 0xad, 0x2c, 0x62, 0xfb, + 0xdf, 0x15, 0xa8, 0x34, 0xfc, 0xf1, 0xd8, 0x89, 0x2e, 0x29, 0x53, 0x17, 0x71, 0xe6, 0x16, 0xe1, + 0x44, 0x50, 0x8d, 0x61, 0x0a, 0x82, 0xd4, 0xff, 0x50, 0x60, 0x85, 0xf8, 0xae, 0x7b, 0x68, 0x0f, + 0x8e, 0x5f, 0x6f, 0xec, 0x18, 0xd0, 0x0c, 0xa8, 0x44, 0xff, 0xdf, 0x0a, 0x54, 0xbb, 0x01, 0x65, + 0x3f, 0xd2, 0xaf, 0x35, 0x78, 0xb6, 0x13, 0x1e, 0x46, 0x72, 0x0f, 0x51, 0x22, 0xbc, 0xac, 0xae, + 0xc2, 0x4a, 0x82, 0x5d, 0xf2, 0xf1, 0xcf, 0x0a, 0xac, 0x8b, 0x00, 0x91, 0x9a, 0xe1, 0x25, 0xa5, + 0x25, 0xc6, 0x9b, 0x4b, 0xe1, 0xad, 0xc3, 0xd5, 0xf3, 0xd8, 0x24, 0xec, 0x1f, 0x64, 0xe0, 0x5a, + 0x1c, 0x1b, 0x97, 0x1c, 0xf8, 0xff, 0x21, 0x1e, 0x36, 0xa0, 0x7e, 0x91, 0x04, 0xc9, 0xd0, 0x27, + 0x19, 0xa8, 0x37, 0x02, 0x6a, 0x47, 0x34, 0xb5, 0x17, 0x79, 0x7d, 0x62, 0x03, 0xbf, 0x0f, 0xcb, + 0x13, 0x3b, 0x88, 0x9c, 0x81, 0x33, 0xb1, 0xd9, 0xdf, 0x5e, 0x9e, 0x6f, 0x75, 0xce, 0x75, 0x30, + 0x67, 0xa2, 0xbe, 0x09, 0x6f, 0x2c, 0x60, 0x44, 0xf2, 0xf5, 0x3f, 0x0a, 0xe0, 0x5e, 0x64, 0x07, + 0xd1, 0x17, 0x60, 0x55, 0x59, 0x18, 0x4c, 0xeb, 0x50, 0x9b, 0xc3, 0x9f, 0xe6, 0x85, 0x46, 0x5f, + 0x88, 0x15, 0xe7, 0x73, 0x79, 0x49, 0xe3, 0x97, 0xbc, 0xfc, 0xab, 0x02, 0x1b, 0x0d, 0x5f, 0x1c, + 0x24, 0xbe, 0x96, 0x5f, 0x98, 0xfa, 0x36, 0xbc, 0xb9, 0x10, 0xa0, 0x24, 0xe0, 0x5f, 0x14, 0xb8, + 0x4a, 0xa8, 0x3d, 0x7c, 0x3d, 0xc1, 0xdf, 0x87, 0x6b, 0x17, 0xc0, 0xc9, 0x1d, 0xea, 0x2d, 0x28, + 0x8e, 0x69, 0x64, 0x0f, 0xed, 0xc8, 0x96, 0x90, 0x36, 0xe2, 0x7e, 0x67, 0xd6, 0x6d, 0x69, 0x41, + 0x12, 0x5b, 0xf5, 0xb3, 0x0c, 0xd4, 0xf8, 0x5e, 0xf7, 0x67, 0x3f, 0x5a, 0x8b, 0xff, 0x05, 0x3e, + 0x51, 0x60, 0x6d, 0x9e, 0xa0, 0xe4, 0x9f, 0xe0, 0xff, 0xfb, 0xbc, 0x62, 0x41, 0x42, 0xc8, 0x2e, + 0xda, 0x82, 0xfe, 0x43, 0x06, 0xea, 0xe9, 0x29, 0xfd, 0xec, 0x6c, 0x63, 0xfe, 0x6c, 0xe3, 0xa7, + 0x3e, 0xcc, 0xfa, 0x54, 0x81, 0x37, 0x16, 0x10, 0xfa, 0xd3, 0x39, 0x3a, 0x75, 0xc2, 0x91, 0x79, + 0xe1, 0x09, 0xc7, 0xcb, 0xba, 0xfa, 0x9f, 0x14, 0x58, 0x6b, 0x8b, 0x83, 0x65, 0xf1, 0x1f, 0x7f, + 0x79, 0xb3, 0x19, 0x3f, 0x3b, 0xce, 0xcd, 0xae, 0x6f, 0xd4, 0x06, 0xac, 0x9f, 0x83, 0xf6, 0x0a, + 0x67, 0x13, 0xff, 0xa5, 0xc0, 0xaa, 0xec, 0x45, 0xbb, 0xb4, 0x1b, 0x81, 0x05, 0xec, 0xe0, 0x77, + 0x20, 0xeb, 0x0c, 0xe3, 0x1d, 0xe4, 0xfc, 0xa5, 0x37, 0x53, 0xa8, 0x77, 0x00, 0xa7, 0x71, 0xbf, + 0x02, 0x75, 0xff, 0x98, 0x85, 0xd5, 0xde, 0xc4, 0x75, 0x22, 0xa9, 0x7c, 0xbd, 0x13, 0xff, 0x97, + 0x60, 0x39, 0x64, 0x60, 0x2d, 0x71, 0x25, 0xc7, 0x89, 0x2d, 0x91, 0x32, 0x97, 0x35, 0xb8, 0x08, + 0xbf, 0x0b, 0xe5, 0xd8, 0x64, 0xea, 0x45, 0xf2, 0x40, 0x0d, 0xa4, 0xc5, 0xd4, 0x8b, 0xf0, 0x4d, + 0xb8, 0xe6, 0x4d, 0xc7, 0xfc, 0x0a, 0xdb, 0x9a, 0xd0, 0x20, 0xbe, 0xe0, 0xb5, 0x83, 0xf8, 0xaa, + 0xb9, 0xe6, 0x4d, 0xc7, 0xc4, 0x3f, 0x0d, 0xbb, 0x34, 0x10, 0x17, 0xbc, 0x76, 0x10, 0xe1, 0x3b, + 0x50, 0xb2, 0xdd, 0x91, 0x1f, 0x38, 0xd1, 0xd1, 0x58, 0xde, 0x31, 0xab, 0xf1, 0x0d, 0xcc, 0x79, + 0xfa, 0x77, 0xb4, 0xd8, 0x92, 0xcc, 0x1a, 0xa9, 0xdf, 0x80, 0x52, 0x22, 0xc7, 0x08, 0x96, 0xf5, + 0xfb, 0x7d, 0xad, 0x65, 0xf5, 0xba, 0xad, 0xa6, 0xd9, 0x13, 0xf7, 0xc2, 0x07, 0xfd, 0x56, 0xcb, + 0xea, 0x35, 0x34, 0x03, 0x29, 0x2a, 0x01, 0xe0, 0x5d, 0xf2, 0xce, 0x67, 0x04, 0x29, 0x2f, 0x20, + 0xe8, 0x4d, 0x28, 0x05, 0xfe, 0xa9, 0xc4, 0x9e, 0xe1, 0x70, 0x8a, 0x81, 0x7f, 0xca, 0x91, 0xab, + 0x1a, 0xe0, 0xf4, 0x5c, 0x65, 0xb4, 0xa5, 0x92, 0xb7, 0x32, 0x97, 0xbc, 0x67, 0xe3, 0x27, 0xc9, + 0x5b, 0x6c, 0xe5, 0xd9, 0x77, 0xfe, 0x11, 0xb5, 0xdd, 0x28, 0x5e, 0xaf, 0xd4, 0xbf, 0xce, 0x40, + 0x85, 0x30, 0x89, 0x33, 0xa6, 0xbd, 0xc8, 0x8e, 0x42, 0xe6, 0xa9, 0x23, 0x6e, 0x62, 0xcd, 0xd2, + 0x6e, 0x89, 0x94, 0x85, 0x4c, 0xdc, 0x15, 0xec, 0xc2, 0x7a, 0x48, 0x07, 0xbe, 0x37, 0x0c, 0xad, + 0x43, 0x7a, 0xe4, 0x78, 0x43, 0x6b, 0x6c, 0x87, 0x91, 0xbc, 0x8e, 0xac, 0x90, 0x9a, 0x54, 0xee, + 0x71, 0x5d, 0x9b, 0xab, 0xf0, 0x0d, 0x58, 0x3b, 0x74, 0x3c, 0xd7, 0x1f, 0x59, 0x13, 0xd7, 0x3e, + 0xa3, 0x41, 0x28, 0xa1, 0xb2, 0xf0, 0xca, 0x13, 0x2c, 0x74, 0x5d, 0xa1, 0x12, 0xee, 0xfe, 0x18, + 0xb6, 0x17, 0x8e, 0x62, 0x3d, 0x76, 0xdc, 0x88, 0x06, 0x74, 0x68, 0x05, 0x74, 0xe2, 0x3a, 0x03, + 0xf1, 0x7a, 0x40, 0xec, 0xdd, 0xbf, 0xba, 0x60, 0xe8, 0x03, 0x69, 0x4e, 0x66, 0xd6, 0x8c, 0xed, + 0xc1, 0x64, 0x6a, 0x4d, 0xf9, 0x0d, 0x22, 0x5b, 0xc5, 0x14, 0x52, 0x1c, 0x4c, 0xa6, 0x7d, 0x56, + 0xc7, 0x08, 0xb2, 0x4f, 0x26, 0x62, 0xf1, 0x52, 0x08, 0x2b, 0xaa, 0x3f, 0x51, 0xa0, 0xaa, 0x8d, + 0x46, 0x01, 0x1d, 0xd9, 0x91, 0xa4, 0xe9, 0x06, 0xac, 0x09, 0x4a, 0xce, 0x2c, 0xf9, 0x2c, 0x49, + 0xe0, 0x51, 0x04, 0x1e, 0xa9, 0x13, 0x8f, 0x92, 0xe2, 0xf0, 0xbd, 0x3a, 0xf5, 0x16, 0xb6, 0xc9, + 0xf0, 0x36, 0x6b, 0x89, 0x36, 0xdd, 0xea, 0x17, 0xe1, 0x8d, 0xc5, 0x2c, 0x8c, 0x1d, 0xf1, 0xb0, + 0xa4, 0x42, 0xae, 0x2e, 0x00, 0xdd, 0x76, 0xbc, 0xe7, 0x34, 0xb5, 0x9f, 0x72, 0xbe, 0x3e, 0xa7, + 0xa9, 0xfd, 0x54, 0xfd, 0xb7, 0xe4, 0x06, 0x20, 0x0e, 0x97, 0x64, 0x35, 0x8e, 0xf3, 0x82, 0xf2, + 0xbc, 0xbc, 0x50, 0x87, 0xa5, 0x90, 0x06, 0x27, 0x8e, 0x37, 0x8a, 0xaf, 0xa8, 0x65, 0x15, 0xf7, + 0xe0, 0xab, 0x12, 0x3b, 0x7d, 0x1a, 0xd1, 0xc0, 0xb3, 0x5d, 0xf7, 0xcc, 0x12, 0x07, 0x15, 0x5e, + 0x44, 0x87, 0xd6, 0xec, 0x11, 0x95, 0x58, 0x91, 0xbf, 0x2c, 0xac, 0xf5, 0xc4, 0x98, 0x24, 0xb6, + 0x66, 0xf2, 0xbc, 0xea, 0x5b, 0x50, 0x0d, 0x64, 0x10, 0x5b, 0x21, 0x73, 0x8f, 0xcc, 0x47, 0x6b, + 0xc9, 0x3d, 0x73, 0x2a, 0xc2, 0x49, 0x25, 0x98, 0x0b, 0xf8, 0xef, 0xc0, 0x8a, 0x1d, 0xfb, 0x56, + 0xb6, 0x9e, 0xdf, 0xb7, 0xcc, 0x7b, 0x9e, 0x54, 0xed, 0xf9, 0x48, 0xb8, 0x0d, 0xcb, 0x12, 0x91, + 0xed, 0x3a, 0xf6, 0x6c, 0x63, 0x7b, 0xee, 0x65, 0x9a, 0xc6, 0x94, 0x44, 0xbe, 0x61, 0xe3, 0x15, + 0xf6, 0x1f, 0x5d, 0xeb, 0x4f, 0x86, 0xbc, 0xa7, 0x4b, 0xbc, 0xbb, 0x48, 0x3f, 0x63, 0xcb, 0xcd, + 0x3f, 0x63, 0x9b, 0x7f, 0x16, 0x97, 0x3f, 0xf7, 0x2c, 0x4e, 0xbd, 0x03, 0x6b, 0xf3, 0xf8, 0x65, + 0x94, 0x6d, 0x41, 0x9e, 0x5f, 0xa8, 0x9f, 0x5b, 0x46, 0x53, 0x37, 0xe6, 0x44, 0x18, 0xa8, 0x7f, + 0xa3, 0x40, 0x6d, 0xc1, 0x2f, 0x56, 0xf2, 0xff, 0xa6, 0xa4, 0x8e, 0x87, 0x7e, 0x1e, 0xf2, 0xfc, + 0x6a, 0x5f, 0xbe, 0x58, 0xb9, 0x76, 0xf1, 0x0f, 0x8d, 0x5f, 0xc3, 0x13, 0x61, 0xc5, 0x12, 0x21, + 0x0f, 0xa8, 0x01, 0x3f, 0x1f, 0x8a, 0x77, 0x88, 0x65, 0x26, 0x13, 0x47, 0x46, 0x17, 0x0f, 0x9c, + 0x72, 0x2f, 0x3c, 0x70, 0xda, 0xfe, 0xc3, 0x2c, 0x94, 0xda, 0x67, 0xbd, 0x27, 0xee, 0x81, 0x6b, + 0x8f, 0xf8, 0x3d, 0x79, 0xbb, 0x6b, 0x3e, 0x42, 0x57, 0xf0, 0x2a, 0x54, 0x8c, 0x8e, 0x69, 0x19, + 0x6c, 0x29, 0x39, 0x68, 0x69, 0x77, 0x91, 0xc2, 0xd6, 0x9a, 0x2e, 0x69, 0x5a, 0xf7, 0xf4, 0x47, + 0x42, 0x92, 0xc1, 0x35, 0x58, 0xe9, 0x1b, 0xcd, 0xfb, 0x7d, 0x7d, 0x26, 0xcc, 0xe1, 0x75, 0x58, + 0x6d, 0xf7, 0x5b, 0x66, 0xb3, 0xdb, 0x4a, 0x89, 0x8b, 0x6c, 0x5d, 0xda, 0x6b, 0x75, 0xf6, 0x44, + 0x15, 0xb1, 0xfe, 0xfb, 0x46, 0xaf, 0x79, 0xd7, 0xd0, 0xf7, 0x85, 0x68, 0x93, 0x89, 0x3e, 0xd6, + 0x49, 0xe7, 0xa0, 0x19, 0x0f, 0x79, 0x07, 0x23, 0x28, 0xef, 0x35, 0x0d, 0x8d, 0xc8, 0x5e, 0x9e, + 0x29, 0xb8, 0x0a, 0x25, 0xdd, 0xe8, 0xb7, 0x65, 0x3d, 0x83, 0xeb, 0x50, 0xd3, 0xfa, 0x66, 0xc7, + 0x6a, 0x1a, 0x0d, 0xa2, 0xb7, 0x75, 0xc3, 0x94, 0x9a, 0x1c, 0xae, 0x41, 0xd5, 0x6c, 0xb6, 0xf5, + 0x9e, 0xa9, 0xb5, 0xbb, 0x52, 0xc8, 0x66, 0x51, 0xec, 0xe9, 0xb1, 0x0d, 0xc2, 0x1b, 0xb0, 0x6e, + 0x74, 0x2c, 0xf9, 0xb8, 0xc9, 0x7a, 0xa0, 0xb5, 0xfa, 0xba, 0xd4, 0x6d, 0xe2, 0x6b, 0x80, 0x3b, + 0x86, 0xd5, 0xef, 0xee, 0x6b, 0xa6, 0x6e, 0x19, 0x9d, 0x87, 0x52, 0x71, 0x07, 0x57, 0xa1, 0x38, + 0x9b, 0xc1, 0x33, 0xc6, 0x42, 0xa5, 0xab, 0x11, 0x73, 0x06, 0xf6, 0xd9, 0x33, 0x46, 0x16, 0xdc, + 0x25, 0x9d, 0x7e, 0x77, 0x66, 0xb6, 0x0a, 0x65, 0x49, 0x96, 0x14, 0xe5, 0x98, 0x68, 0xaf, 0x69, + 0x34, 0x92, 0xf9, 0x3d, 0x2b, 0x6e, 0x64, 0x90, 0xb2, 0x7d, 0x0c, 0x39, 0xee, 0x8e, 0x22, 0xe4, + 0x8c, 0x8e, 0xa1, 0xa3, 0x2b, 0x78, 0x05, 0xa0, 0xd9, 0x6b, 0x1a, 0xa6, 0x7e, 0x97, 0x68, 0x2d, + 0x06, 0x9b, 0x0b, 0x62, 0x02, 0x19, 0xda, 0x65, 0x58, 0x6a, 0xf6, 0x0e, 0x5a, 0x1d, 0xcd, 0x94, + 0x30, 0x9b, 0xbd, 0xfb, 0xfd, 0x8e, 0xc9, 0x94, 0x08, 0x97, 0xa1, 0xd0, 0xec, 0x99, 0xfa, 0xf7, + 0x4c, 0x86, 0x8b, 0xeb, 0x04, 0xab, 0xe8, 0xd9, 0x9d, 0xed, 0x1f, 0x67, 0x21, 0xc7, 0x9f, 0xa6, + 0x56, 0xa0, 0xc4, 0xbd, 0x6d, 0x3e, 0xea, 0xb2, 0x21, 0x4b, 0x90, 0x6b, 0x1a, 0xe6, 0x6d, 0xf4, + 0x2b, 0x19, 0x0c, 0x90, 0xef, 0xf3, 0xf2, 0xaf, 0x16, 0x58, 0xb9, 0x69, 0x98, 0xef, 0xdf, 0x42, + 0x3f, 0xc8, 0xb0, 0x6e, 0xfb, 0xa2, 0xf2, 0x6b, 0xb1, 0x62, 0xf7, 0x26, 0xfa, 0x61, 0xa2, 0xd8, + 0xbd, 0x89, 0x7e, 0x3d, 0x56, 0x7c, 0xb0, 0x8b, 0x7e, 0x23, 0x51, 0x7c, 0xb0, 0x8b, 0x7e, 0x33, + 0x56, 0xdc, 0xba, 0x89, 0x7e, 0x2b, 0x51, 0xdc, 0xba, 0x89, 0x7e, 0xbb, 0xc0, 0xb0, 0x70, 0x24, + 0x1f, 0xec, 0xa2, 0xdf, 0x29, 0x26, 0xb5, 0x5b, 0x37, 0xd1, 0xef, 0x16, 0x99, 0xff, 0x13, 0xaf, + 0xa2, 0xdf, 0x43, 0x6c, 0x9a, 0xcc, 0x41, 0xe8, 0xf7, 0x79, 0x91, 0xa9, 0xd0, 0x8f, 0x10, 0xc3, + 0xc8, 0xa4, 0xbc, 0xfa, 0x09, 0xd7, 0x3c, 0xd2, 0x35, 0x82, 0xfe, 0xa0, 0x20, 0xde, 0xb2, 0x35, + 0x9a, 0x6d, 0xad, 0x85, 0x30, 0x6f, 0xc1, 0x58, 0xf9, 0xa3, 0x1b, 0xac, 0xc8, 0xc2, 0x13, 0xfd, + 0x71, 0x97, 0x0d, 0xf8, 0x40, 0x23, 0x8d, 0x8f, 0x34, 0x82, 0xfe, 0xe4, 0x06, 0x1b, 0xf0, 0x81, + 0x46, 0x24, 0x5f, 0x7f, 0xda, 0x65, 0x86, 0x5c, 0xf5, 0xe9, 0x0d, 0x36, 0x69, 0x29, 0xff, 0xb3, + 0x2e, 0x2e, 0x42, 0x76, 0xaf, 0x69, 0xa2, 0x1f, 0xf3, 0xd1, 0x58, 0x88, 0xa2, 0x3f, 0x47, 0x4c, + 0xd8, 0xd3, 0x4d, 0xf4, 0x17, 0x4c, 0x98, 0x37, 0xfb, 0xdd, 0x96, 0x8e, 0xde, 0x62, 0x93, 0xbb, + 0xab, 0x77, 0xda, 0xba, 0x49, 0x1e, 0xa1, 0xbf, 0xe4, 0xe6, 0xdf, 0xed, 0x75, 0x0c, 0xf4, 0x19, + 0xc2, 0x55, 0x00, 0xfd, 0x7b, 0x5d, 0xa2, 0xf7, 0x7a, 0xcd, 0x8e, 0x81, 0xde, 0xdd, 0x3e, 0x00, + 0x74, 0x3e, 0x1d, 0x30, 0x00, 0x7d, 0xe3, 0x9e, 0xd1, 0x79, 0x68, 0xa0, 0x2b, 0xac, 0xd2, 0x25, + 0x7a, 0x57, 0x23, 0x3a, 0x52, 0x30, 0x40, 0x41, 0xbc, 0xb4, 0x43, 0x19, 0xbc, 0x0c, 0x45, 0xd2, + 0x69, 0xb5, 0xf6, 0xb4, 0xc6, 0x3d, 0x94, 0xdd, 0xfb, 0x26, 0xac, 0x38, 0xfe, 0xce, 0x89, 0x13, + 0xd1, 0x30, 0x14, 0x8f, 0x9f, 0x3f, 0x56, 0x65, 0xcd, 0xf1, 0xaf, 0x8b, 0xd2, 0xf5, 0x91, 0x7f, + 0xfd, 0x24, 0xba, 0xce, 0xb5, 0xd7, 0x79, 0xc6, 0x38, 0x2c, 0xf0, 0xca, 0x07, 0xff, 0x1b, 0x00, + 0x00, 0xff, 0xff, 0x0e, 0x62, 0xd9, 0x82, 0x5a, 0x2d, 0x00, 0x00, } diff --git a/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go b/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go index 851721cdec1..432b78cad9b 100644 --- a/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go +++ b/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go @@ -46,7 +46,7 @@ func (m *TableDefinition) Reset() { *m = TableDefinition{} } func (m *TableDefinition) String() string { return proto.CompactTextString(m) } func (*TableDefinition) ProtoMessage() {} func (*TableDefinition) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{0} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{0} } func (m *TableDefinition) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TableDefinition.Unmarshal(m, b) @@ -128,7 +128,7 @@ func (m *SchemaDefinition) Reset() { *m = SchemaDefinition{} } func (m *SchemaDefinition) String() string { return proto.CompactTextString(m) } func (*SchemaDefinition) ProtoMessage() {} func (*SchemaDefinition) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{1} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{1} } func (m *SchemaDefinition) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SchemaDefinition.Unmarshal(m, b) @@ -183,7 +183,7 @@ func (m *SchemaChangeResult) Reset() { *m = SchemaChangeResult{} } func (m *SchemaChangeResult) String() string { return proto.CompactTextString(m) } func (*SchemaChangeResult) ProtoMessage() {} func (*SchemaChangeResult) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{2} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{2} } func (m *SchemaChangeResult) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SchemaChangeResult.Unmarshal(m, b) @@ -234,7 +234,7 @@ func (m *UserPermission) Reset() { *m = UserPermission{} } func (m *UserPermission) String() string { return proto.CompactTextString(m) } func (*UserPermission) ProtoMessage() {} func (*UserPermission) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{3} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{3} } func (m *UserPermission) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserPermission.Unmarshal(m, b) @@ -298,7 +298,7 @@ func (m *DbPermission) Reset() { *m = DbPermission{} } func (m *DbPermission) String() string { return proto.CompactTextString(m) } func (*DbPermission) ProtoMessage() {} func (*DbPermission) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{4} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{4} } func (m *DbPermission) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DbPermission.Unmarshal(m, b) @@ -360,7 +360,7 @@ func (m *Permissions) Reset() { *m = Permissions{} } func (m *Permissions) String() string { return proto.CompactTextString(m) } func (*Permissions) ProtoMessage() {} func (*Permissions) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{5} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{5} } func (m *Permissions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Permissions.Unmarshal(m, b) @@ -405,7 +405,7 @@ func (m *PingRequest) Reset() { *m = PingRequest{} } func (m *PingRequest) String() string { return proto.CompactTextString(m) } func (*PingRequest) ProtoMessage() {} func (*PingRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{6} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{6} } func (m *PingRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PingRequest.Unmarshal(m, b) @@ -443,7 +443,7 @@ func (m *PingResponse) Reset() { *m = PingResponse{} } func (m *PingResponse) String() string { return proto.CompactTextString(m) } func (*PingResponse) ProtoMessage() {} func (*PingResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{7} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{7} } func (m *PingResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PingResponse.Unmarshal(m, b) @@ -482,7 +482,7 @@ func (m *SleepRequest) Reset() { *m = SleepRequest{} } func (m *SleepRequest) String() string { return proto.CompactTextString(m) } func (*SleepRequest) ProtoMessage() {} func (*SleepRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{8} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{8} } func (m *SleepRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SleepRequest.Unmarshal(m, b) @@ -519,7 +519,7 @@ func (m *SleepResponse) Reset() { *m = SleepResponse{} } func (m *SleepResponse) String() string { return proto.CompactTextString(m) } func (*SleepResponse) ProtoMessage() {} func (*SleepResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{9} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{9} } func (m *SleepResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SleepResponse.Unmarshal(m, b) @@ -552,7 +552,7 @@ func (m *ExecuteHookRequest) Reset() { *m = ExecuteHookRequest{} } func (m *ExecuteHookRequest) String() string { return proto.CompactTextString(m) } func (*ExecuteHookRequest) ProtoMessage() {} func (*ExecuteHookRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{10} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{10} } func (m *ExecuteHookRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteHookRequest.Unmarshal(m, b) @@ -606,7 +606,7 @@ func (m *ExecuteHookResponse) Reset() { *m = ExecuteHookResponse{} } func (m *ExecuteHookResponse) String() string { return proto.CompactTextString(m) } func (*ExecuteHookResponse) ProtoMessage() {} func (*ExecuteHookResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{11} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{11} } func (m *ExecuteHookResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteHookResponse.Unmarshal(m, b) @@ -660,7 +660,7 @@ func (m *GetSchemaRequest) Reset() { *m = GetSchemaRequest{} } func (m *GetSchemaRequest) String() string { return proto.CompactTextString(m) } func (*GetSchemaRequest) ProtoMessage() {} func (*GetSchemaRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{12} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{12} } func (m *GetSchemaRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetSchemaRequest.Unmarshal(m, b) @@ -712,7 +712,7 @@ func (m *GetSchemaResponse) Reset() { *m = GetSchemaResponse{} } func (m *GetSchemaResponse) String() string { return proto.CompactTextString(m) } func (*GetSchemaResponse) ProtoMessage() {} func (*GetSchemaResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{13} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{13} } func (m *GetSchemaResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetSchemaResponse.Unmarshal(m, b) @@ -749,7 +749,7 @@ func (m *GetPermissionsRequest) Reset() { *m = GetPermissionsRequest{} } func (m *GetPermissionsRequest) String() string { return proto.CompactTextString(m) } func (*GetPermissionsRequest) ProtoMessage() {} func (*GetPermissionsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{14} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{14} } func (m *GetPermissionsRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetPermissionsRequest.Unmarshal(m, b) @@ -780,7 +780,7 @@ func (m *GetPermissionsResponse) Reset() { *m = GetPermissionsResponse{} func (m *GetPermissionsResponse) String() string { return proto.CompactTextString(m) } func (*GetPermissionsResponse) ProtoMessage() {} func (*GetPermissionsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{15} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{15} } func (m *GetPermissionsResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetPermissionsResponse.Unmarshal(m, b) @@ -817,7 +817,7 @@ func (m *SetReadOnlyRequest) Reset() { *m = SetReadOnlyRequest{} } func (m *SetReadOnlyRequest) String() string { return proto.CompactTextString(m) } func (*SetReadOnlyRequest) ProtoMessage() {} func (*SetReadOnlyRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{16} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{16} } func (m *SetReadOnlyRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetReadOnlyRequest.Unmarshal(m, b) @@ -847,7 +847,7 @@ func (m *SetReadOnlyResponse) Reset() { *m = SetReadOnlyResponse{} } func (m *SetReadOnlyResponse) String() string { return proto.CompactTextString(m) } func (*SetReadOnlyResponse) ProtoMessage() {} func (*SetReadOnlyResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{17} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{17} } func (m *SetReadOnlyResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetReadOnlyResponse.Unmarshal(m, b) @@ -877,7 +877,7 @@ func (m *SetReadWriteRequest) Reset() { *m = SetReadWriteRequest{} } func (m *SetReadWriteRequest) String() string { return proto.CompactTextString(m) } func (*SetReadWriteRequest) ProtoMessage() {} func (*SetReadWriteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{18} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{18} } func (m *SetReadWriteRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetReadWriteRequest.Unmarshal(m, b) @@ -907,7 +907,7 @@ func (m *SetReadWriteResponse) Reset() { *m = SetReadWriteResponse{} } func (m *SetReadWriteResponse) String() string { return proto.CompactTextString(m) } func (*SetReadWriteResponse) ProtoMessage() {} func (*SetReadWriteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{19} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{19} } func (m *SetReadWriteResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetReadWriteResponse.Unmarshal(m, b) @@ -938,7 +938,7 @@ func (m *ChangeTypeRequest) Reset() { *m = ChangeTypeRequest{} } func (m *ChangeTypeRequest) String() string { return proto.CompactTextString(m) } func (*ChangeTypeRequest) ProtoMessage() {} func (*ChangeTypeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{20} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{20} } func (m *ChangeTypeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ChangeTypeRequest.Unmarshal(m, b) @@ -975,7 +975,7 @@ func (m *ChangeTypeResponse) Reset() { *m = ChangeTypeResponse{} } func (m *ChangeTypeResponse) String() string { return proto.CompactTextString(m) } func (*ChangeTypeResponse) ProtoMessage() {} func (*ChangeTypeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{21} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{21} } func (m *ChangeTypeResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ChangeTypeResponse.Unmarshal(m, b) @@ -1005,7 +1005,7 @@ func (m *RefreshStateRequest) Reset() { *m = RefreshStateRequest{} } func (m *RefreshStateRequest) String() string { return proto.CompactTextString(m) } func (*RefreshStateRequest) ProtoMessage() {} func (*RefreshStateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{22} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{22} } func (m *RefreshStateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RefreshStateRequest.Unmarshal(m, b) @@ -1035,7 +1035,7 @@ func (m *RefreshStateResponse) Reset() { *m = RefreshStateResponse{} } func (m *RefreshStateResponse) String() string { return proto.CompactTextString(m) } func (*RefreshStateResponse) ProtoMessage() {} func (*RefreshStateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{23} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{23} } func (m *RefreshStateResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RefreshStateResponse.Unmarshal(m, b) @@ -1065,7 +1065,7 @@ func (m *RunHealthCheckRequest) Reset() { *m = RunHealthCheckRequest{} } func (m *RunHealthCheckRequest) String() string { return proto.CompactTextString(m) } func (*RunHealthCheckRequest) ProtoMessage() {} func (*RunHealthCheckRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{24} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{24} } func (m *RunHealthCheckRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RunHealthCheckRequest.Unmarshal(m, b) @@ -1095,7 +1095,7 @@ func (m *RunHealthCheckResponse) Reset() { *m = RunHealthCheckResponse{} func (m *RunHealthCheckResponse) String() string { return proto.CompactTextString(m) } func (*RunHealthCheckResponse) ProtoMessage() {} func (*RunHealthCheckResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{25} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{25} } func (m *RunHealthCheckResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RunHealthCheckResponse.Unmarshal(m, b) @@ -1126,7 +1126,7 @@ func (m *IgnoreHealthErrorRequest) Reset() { *m = IgnoreHealthErrorReque func (m *IgnoreHealthErrorRequest) String() string { return proto.CompactTextString(m) } func (*IgnoreHealthErrorRequest) ProtoMessage() {} func (*IgnoreHealthErrorRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{26} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{26} } func (m *IgnoreHealthErrorRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_IgnoreHealthErrorRequest.Unmarshal(m, b) @@ -1163,7 +1163,7 @@ func (m *IgnoreHealthErrorResponse) Reset() { *m = IgnoreHealthErrorResp func (m *IgnoreHealthErrorResponse) String() string { return proto.CompactTextString(m) } func (*IgnoreHealthErrorResponse) ProtoMessage() {} func (*IgnoreHealthErrorResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{27} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{27} } func (m *IgnoreHealthErrorResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_IgnoreHealthErrorResponse.Unmarshal(m, b) @@ -1197,7 +1197,7 @@ func (m *ReloadSchemaRequest) Reset() { *m = ReloadSchemaRequest{} } func (m *ReloadSchemaRequest) String() string { return proto.CompactTextString(m) } func (*ReloadSchemaRequest) ProtoMessage() {} func (*ReloadSchemaRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{28} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{28} } func (m *ReloadSchemaRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ReloadSchemaRequest.Unmarshal(m, b) @@ -1234,7 +1234,7 @@ func (m *ReloadSchemaResponse) Reset() { *m = ReloadSchemaResponse{} } func (m *ReloadSchemaResponse) String() string { return proto.CompactTextString(m) } func (*ReloadSchemaResponse) ProtoMessage() {} func (*ReloadSchemaResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{29} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{29} } func (m *ReloadSchemaResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ReloadSchemaResponse.Unmarshal(m, b) @@ -1265,7 +1265,7 @@ func (m *PreflightSchemaRequest) Reset() { *m = PreflightSchemaRequest{} func (m *PreflightSchemaRequest) String() string { return proto.CompactTextString(m) } func (*PreflightSchemaRequest) ProtoMessage() {} func (*PreflightSchemaRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{30} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{30} } func (m *PreflightSchemaRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PreflightSchemaRequest.Unmarshal(m, b) @@ -1305,7 +1305,7 @@ func (m *PreflightSchemaResponse) Reset() { *m = PreflightSchemaResponse func (m *PreflightSchemaResponse) String() string { return proto.CompactTextString(m) } func (*PreflightSchemaResponse) ProtoMessage() {} func (*PreflightSchemaResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{31} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{31} } func (m *PreflightSchemaResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PreflightSchemaResponse.Unmarshal(m, b) @@ -1347,7 +1347,7 @@ func (m *ApplySchemaRequest) Reset() { *m = ApplySchemaRequest{} } func (m *ApplySchemaRequest) String() string { return proto.CompactTextString(m) } func (*ApplySchemaRequest) ProtoMessage() {} func (*ApplySchemaRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{32} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{32} } func (m *ApplySchemaRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ApplySchemaRequest.Unmarshal(m, b) @@ -1414,7 +1414,7 @@ func (m *ApplySchemaResponse) Reset() { *m = ApplySchemaResponse{} } func (m *ApplySchemaResponse) String() string { return proto.CompactTextString(m) } func (*ApplySchemaResponse) ProtoMessage() {} func (*ApplySchemaResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{33} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{33} } func (m *ApplySchemaResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ApplySchemaResponse.Unmarshal(m, b) @@ -1448,6 +1448,126 @@ func (m *ApplySchemaResponse) GetAfterSchema() *SchemaDefinition { return nil } +type LockTablesRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LockTablesRequest) Reset() { *m = LockTablesRequest{} } +func (m *LockTablesRequest) String() string { return proto.CompactTextString(m) } +func (*LockTablesRequest) ProtoMessage() {} +func (*LockTablesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{34} +} +func (m *LockTablesRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LockTablesRequest.Unmarshal(m, b) +} +func (m *LockTablesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LockTablesRequest.Marshal(b, m, deterministic) +} +func (dst *LockTablesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_LockTablesRequest.Merge(dst, src) +} +func (m *LockTablesRequest) XXX_Size() int { + return xxx_messageInfo_LockTablesRequest.Size(m) +} +func (m *LockTablesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_LockTablesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_LockTablesRequest proto.InternalMessageInfo + +type LockTablesResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LockTablesResponse) Reset() { *m = LockTablesResponse{} } +func (m *LockTablesResponse) String() string { return proto.CompactTextString(m) } +func (*LockTablesResponse) ProtoMessage() {} +func (*LockTablesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{35} +} +func (m *LockTablesResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LockTablesResponse.Unmarshal(m, b) +} +func (m *LockTablesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LockTablesResponse.Marshal(b, m, deterministic) +} +func (dst *LockTablesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_LockTablesResponse.Merge(dst, src) +} +func (m *LockTablesResponse) XXX_Size() int { + return xxx_messageInfo_LockTablesResponse.Size(m) +} +func (m *LockTablesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_LockTablesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_LockTablesResponse proto.InternalMessageInfo + +type UnlockTablesRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *UnlockTablesRequest) Reset() { *m = UnlockTablesRequest{} } +func (m *UnlockTablesRequest) String() string { return proto.CompactTextString(m) } +func (*UnlockTablesRequest) ProtoMessage() {} +func (*UnlockTablesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{36} +} +func (m *UnlockTablesRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UnlockTablesRequest.Unmarshal(m, b) +} +func (m *UnlockTablesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UnlockTablesRequest.Marshal(b, m, deterministic) +} +func (dst *UnlockTablesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_UnlockTablesRequest.Merge(dst, src) +} +func (m *UnlockTablesRequest) XXX_Size() int { + return xxx_messageInfo_UnlockTablesRequest.Size(m) +} +func (m *UnlockTablesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_UnlockTablesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_UnlockTablesRequest proto.InternalMessageInfo + +type UnlockTablesResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *UnlockTablesResponse) Reset() { *m = UnlockTablesResponse{} } +func (m *UnlockTablesResponse) String() string { return proto.CompactTextString(m) } +func (*UnlockTablesResponse) ProtoMessage() {} +func (*UnlockTablesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{37} +} +func (m *UnlockTablesResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UnlockTablesResponse.Unmarshal(m, b) +} +func (m *UnlockTablesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UnlockTablesResponse.Marshal(b, m, deterministic) +} +func (dst *UnlockTablesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_UnlockTablesResponse.Merge(dst, src) +} +func (m *UnlockTablesResponse) XXX_Size() int { + return xxx_messageInfo_UnlockTablesResponse.Size(m) +} +func (m *UnlockTablesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_UnlockTablesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_UnlockTablesResponse proto.InternalMessageInfo + type ExecuteFetchAsDbaRequest struct { Query []byte `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` DbName string `protobuf:"bytes,2,opt,name=db_name,json=dbName,proto3" json:"db_name,omitempty"` @@ -1463,7 +1583,7 @@ func (m *ExecuteFetchAsDbaRequest) Reset() { *m = ExecuteFetchAsDbaReque func (m *ExecuteFetchAsDbaRequest) String() string { return proto.CompactTextString(m) } func (*ExecuteFetchAsDbaRequest) ProtoMessage() {} func (*ExecuteFetchAsDbaRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{34} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{38} } func (m *ExecuteFetchAsDbaRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteFetchAsDbaRequest.Unmarshal(m, b) @@ -1529,7 +1649,7 @@ func (m *ExecuteFetchAsDbaResponse) Reset() { *m = ExecuteFetchAsDbaResp func (m *ExecuteFetchAsDbaResponse) String() string { return proto.CompactTextString(m) } func (*ExecuteFetchAsDbaResponse) ProtoMessage() {} func (*ExecuteFetchAsDbaResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{35} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{39} } func (m *ExecuteFetchAsDbaResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteFetchAsDbaResponse.Unmarshal(m, b) @@ -1570,7 +1690,7 @@ func (m *ExecuteFetchAsAllPrivsRequest) Reset() { *m = ExecuteFetchAsAll func (m *ExecuteFetchAsAllPrivsRequest) String() string { return proto.CompactTextString(m) } func (*ExecuteFetchAsAllPrivsRequest) ProtoMessage() {} func (*ExecuteFetchAsAllPrivsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{36} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{40} } func (m *ExecuteFetchAsAllPrivsRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteFetchAsAllPrivsRequest.Unmarshal(m, b) @@ -1629,7 +1749,7 @@ func (m *ExecuteFetchAsAllPrivsResponse) Reset() { *m = ExecuteFetchAsAl func (m *ExecuteFetchAsAllPrivsResponse) String() string { return proto.CompactTextString(m) } func (*ExecuteFetchAsAllPrivsResponse) ProtoMessage() {} func (*ExecuteFetchAsAllPrivsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{37} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{41} } func (m *ExecuteFetchAsAllPrivsResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteFetchAsAllPrivsResponse.Unmarshal(m, b) @@ -1668,7 +1788,7 @@ func (m *ExecuteFetchAsAppRequest) Reset() { *m = ExecuteFetchAsAppReque func (m *ExecuteFetchAsAppRequest) String() string { return proto.CompactTextString(m) } func (*ExecuteFetchAsAppRequest) ProtoMessage() {} func (*ExecuteFetchAsAppRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{38} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{42} } func (m *ExecuteFetchAsAppRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteFetchAsAppRequest.Unmarshal(m, b) @@ -1713,7 +1833,7 @@ func (m *ExecuteFetchAsAppResponse) Reset() { *m = ExecuteFetchAsAppResp func (m *ExecuteFetchAsAppResponse) String() string { return proto.CompactTextString(m) } func (*ExecuteFetchAsAppResponse) ProtoMessage() {} func (*ExecuteFetchAsAppResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{39} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{43} } func (m *ExecuteFetchAsAppResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteFetchAsAppResponse.Unmarshal(m, b) @@ -1750,7 +1870,7 @@ func (m *SlaveStatusRequest) Reset() { *m = SlaveStatusRequest{} } func (m *SlaveStatusRequest) String() string { return proto.CompactTextString(m) } func (*SlaveStatusRequest) ProtoMessage() {} func (*SlaveStatusRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{40} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{44} } func (m *SlaveStatusRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SlaveStatusRequest.Unmarshal(m, b) @@ -1781,7 +1901,7 @@ func (m *SlaveStatusResponse) Reset() { *m = SlaveStatusResponse{} } func (m *SlaveStatusResponse) String() string { return proto.CompactTextString(m) } func (*SlaveStatusResponse) ProtoMessage() {} func (*SlaveStatusResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{41} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{45} } func (m *SlaveStatusResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SlaveStatusResponse.Unmarshal(m, b) @@ -1818,7 +1938,7 @@ func (m *MasterPositionRequest) Reset() { *m = MasterPositionRequest{} } func (m *MasterPositionRequest) String() string { return proto.CompactTextString(m) } func (*MasterPositionRequest) ProtoMessage() {} func (*MasterPositionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{42} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{46} } func (m *MasterPositionRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MasterPositionRequest.Unmarshal(m, b) @@ -1849,7 +1969,7 @@ func (m *MasterPositionResponse) Reset() { *m = MasterPositionResponse{} func (m *MasterPositionResponse) String() string { return proto.CompactTextString(m) } func (*MasterPositionResponse) ProtoMessage() {} func (*MasterPositionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{43} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{47} } func (m *MasterPositionResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MasterPositionResponse.Unmarshal(m, b) @@ -1886,7 +2006,7 @@ func (m *StopSlaveRequest) Reset() { *m = StopSlaveRequest{} } func (m *StopSlaveRequest) String() string { return proto.CompactTextString(m) } func (*StopSlaveRequest) ProtoMessage() {} func (*StopSlaveRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{44} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{48} } func (m *StopSlaveRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StopSlaveRequest.Unmarshal(m, b) @@ -1916,7 +2036,7 @@ func (m *StopSlaveResponse) Reset() { *m = StopSlaveResponse{} } func (m *StopSlaveResponse) String() string { return proto.CompactTextString(m) } func (*StopSlaveResponse) ProtoMessage() {} func (*StopSlaveResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{45} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{49} } func (m *StopSlaveResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StopSlaveResponse.Unmarshal(m, b) @@ -1948,7 +2068,7 @@ func (m *StopSlaveMinimumRequest) Reset() { *m = StopSlaveMinimumRequest func (m *StopSlaveMinimumRequest) String() string { return proto.CompactTextString(m) } func (*StopSlaveMinimumRequest) ProtoMessage() {} func (*StopSlaveMinimumRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{46} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{50} } func (m *StopSlaveMinimumRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StopSlaveMinimumRequest.Unmarshal(m, b) @@ -1993,7 +2113,7 @@ func (m *StopSlaveMinimumResponse) Reset() { *m = StopSlaveMinimumRespon func (m *StopSlaveMinimumResponse) String() string { return proto.CompactTextString(m) } func (*StopSlaveMinimumResponse) ProtoMessage() {} func (*StopSlaveMinimumResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{47} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{51} } func (m *StopSlaveMinimumResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StopSlaveMinimumResponse.Unmarshal(m, b) @@ -2030,7 +2150,7 @@ func (m *StartSlaveRequest) Reset() { *m = StartSlaveRequest{} } func (m *StartSlaveRequest) String() string { return proto.CompactTextString(m) } func (*StartSlaveRequest) ProtoMessage() {} func (*StartSlaveRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{48} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{52} } func (m *StartSlaveRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StartSlaveRequest.Unmarshal(m, b) @@ -2060,7 +2180,7 @@ func (m *StartSlaveResponse) Reset() { *m = StartSlaveResponse{} } func (m *StartSlaveResponse) String() string { return proto.CompactTextString(m) } func (*StartSlaveResponse) ProtoMessage() {} func (*StartSlaveResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{49} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{53} } func (m *StartSlaveResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StartSlaveResponse.Unmarshal(m, b) @@ -2080,6 +2200,82 @@ func (m *StartSlaveResponse) XXX_DiscardUnknown() { var xxx_messageInfo_StartSlaveResponse proto.InternalMessageInfo +type StartSlaveUntilAfterRequest struct { + Position string `protobuf:"bytes,1,opt,name=position,proto3" json:"position,omitempty"` + WaitTimeout int64 `protobuf:"varint,2,opt,name=wait_timeout,json=waitTimeout,proto3" json:"wait_timeout,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *StartSlaveUntilAfterRequest) Reset() { *m = StartSlaveUntilAfterRequest{} } +func (m *StartSlaveUntilAfterRequest) String() string { return proto.CompactTextString(m) } +func (*StartSlaveUntilAfterRequest) ProtoMessage() {} +func (*StartSlaveUntilAfterRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{54} +} +func (m *StartSlaveUntilAfterRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_StartSlaveUntilAfterRequest.Unmarshal(m, b) +} +func (m *StartSlaveUntilAfterRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_StartSlaveUntilAfterRequest.Marshal(b, m, deterministic) +} +func (dst *StartSlaveUntilAfterRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_StartSlaveUntilAfterRequest.Merge(dst, src) +} +func (m *StartSlaveUntilAfterRequest) XXX_Size() int { + return xxx_messageInfo_StartSlaveUntilAfterRequest.Size(m) +} +func (m *StartSlaveUntilAfterRequest) XXX_DiscardUnknown() { + xxx_messageInfo_StartSlaveUntilAfterRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_StartSlaveUntilAfterRequest proto.InternalMessageInfo + +func (m *StartSlaveUntilAfterRequest) GetPosition() string { + if m != nil { + return m.Position + } + return "" +} + +func (m *StartSlaveUntilAfterRequest) GetWaitTimeout() int64 { + if m != nil { + return m.WaitTimeout + } + return 0 +} + +type StartSlaveUntilAfterResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *StartSlaveUntilAfterResponse) Reset() { *m = StartSlaveUntilAfterResponse{} } +func (m *StartSlaveUntilAfterResponse) String() string { return proto.CompactTextString(m) } +func (*StartSlaveUntilAfterResponse) ProtoMessage() {} +func (*StartSlaveUntilAfterResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{55} +} +func (m *StartSlaveUntilAfterResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_StartSlaveUntilAfterResponse.Unmarshal(m, b) +} +func (m *StartSlaveUntilAfterResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_StartSlaveUntilAfterResponse.Marshal(b, m, deterministic) +} +func (dst *StartSlaveUntilAfterResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_StartSlaveUntilAfterResponse.Merge(dst, src) +} +func (m *StartSlaveUntilAfterResponse) XXX_Size() int { + return xxx_messageInfo_StartSlaveUntilAfterResponse.Size(m) +} +func (m *StartSlaveUntilAfterResponse) XXX_DiscardUnknown() { + xxx_messageInfo_StartSlaveUntilAfterResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_StartSlaveUntilAfterResponse proto.InternalMessageInfo + type TabletExternallyReparentedRequest struct { // external_id is an string value that may be provided by an external // agent for tracking purposes. The tablet will emit this string in @@ -2094,7 +2290,7 @@ func (m *TabletExternallyReparentedRequest) Reset() { *m = TabletExterna func (m *TabletExternallyReparentedRequest) String() string { return proto.CompactTextString(m) } func (*TabletExternallyReparentedRequest) ProtoMessage() {} func (*TabletExternallyReparentedRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{50} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{56} } func (m *TabletExternallyReparentedRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TabletExternallyReparentedRequest.Unmarshal(m, b) @@ -2131,7 +2327,7 @@ func (m *TabletExternallyReparentedResponse) Reset() { *m = TabletExtern func (m *TabletExternallyReparentedResponse) String() string { return proto.CompactTextString(m) } func (*TabletExternallyReparentedResponse) ProtoMessage() {} func (*TabletExternallyReparentedResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{51} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{57} } func (m *TabletExternallyReparentedResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TabletExternallyReparentedResponse.Unmarshal(m, b) @@ -2161,7 +2357,7 @@ func (m *TabletExternallyElectedRequest) Reset() { *m = TabletExternally func (m *TabletExternallyElectedRequest) String() string { return proto.CompactTextString(m) } func (*TabletExternallyElectedRequest) ProtoMessage() {} func (*TabletExternallyElectedRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{52} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{58} } func (m *TabletExternallyElectedRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TabletExternallyElectedRequest.Unmarshal(m, b) @@ -2191,7 +2387,7 @@ func (m *TabletExternallyElectedResponse) Reset() { *m = TabletExternall func (m *TabletExternallyElectedResponse) String() string { return proto.CompactTextString(m) } func (*TabletExternallyElectedResponse) ProtoMessage() {} func (*TabletExternallyElectedResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{53} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{59} } func (m *TabletExternallyElectedResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TabletExternallyElectedResponse.Unmarshal(m, b) @@ -2221,7 +2417,7 @@ func (m *GetSlavesRequest) Reset() { *m = GetSlavesRequest{} } func (m *GetSlavesRequest) String() string { return proto.CompactTextString(m) } func (*GetSlavesRequest) ProtoMessage() {} func (*GetSlavesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{54} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{60} } func (m *GetSlavesRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetSlavesRequest.Unmarshal(m, b) @@ -2252,7 +2448,7 @@ func (m *GetSlavesResponse) Reset() { *m = GetSlavesResponse{} } func (m *GetSlavesResponse) String() string { return proto.CompactTextString(m) } func (*GetSlavesResponse) ProtoMessage() {} func (*GetSlavesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{55} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{61} } func (m *GetSlavesResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetSlavesResponse.Unmarshal(m, b) @@ -2289,7 +2485,7 @@ func (m *ResetReplicationRequest) Reset() { *m = ResetReplicationRequest func (m *ResetReplicationRequest) String() string { return proto.CompactTextString(m) } func (*ResetReplicationRequest) ProtoMessage() {} func (*ResetReplicationRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{56} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{62} } func (m *ResetReplicationRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResetReplicationRequest.Unmarshal(m, b) @@ -2319,7 +2515,7 @@ func (m *ResetReplicationResponse) Reset() { *m = ResetReplicationRespon func (m *ResetReplicationResponse) String() string { return proto.CompactTextString(m) } func (*ResetReplicationResponse) ProtoMessage() {} func (*ResetReplicationResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{57} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{63} } func (m *ResetReplicationResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResetReplicationResponse.Unmarshal(m, b) @@ -2350,7 +2546,7 @@ func (m *VReplicationExecRequest) Reset() { *m = VReplicationExecRequest func (m *VReplicationExecRequest) String() string { return proto.CompactTextString(m) } func (*VReplicationExecRequest) ProtoMessage() {} func (*VReplicationExecRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{58} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{64} } func (m *VReplicationExecRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VReplicationExecRequest.Unmarshal(m, b) @@ -2388,7 +2584,7 @@ func (m *VReplicationExecResponse) Reset() { *m = VReplicationExecRespon func (m *VReplicationExecResponse) String() string { return proto.CompactTextString(m) } func (*VReplicationExecResponse) ProtoMessage() {} func (*VReplicationExecResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{59} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{65} } func (m *VReplicationExecResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VReplicationExecResponse.Unmarshal(m, b) @@ -2427,7 +2623,7 @@ func (m *VReplicationWaitForPosRequest) Reset() { *m = VReplicationWaitF func (m *VReplicationWaitForPosRequest) String() string { return proto.CompactTextString(m) } func (*VReplicationWaitForPosRequest) ProtoMessage() {} func (*VReplicationWaitForPosRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{60} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{66} } func (m *VReplicationWaitForPosRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VReplicationWaitForPosRequest.Unmarshal(m, b) @@ -2471,7 +2667,7 @@ func (m *VReplicationWaitForPosResponse) Reset() { *m = VReplicationWait func (m *VReplicationWaitForPosResponse) String() string { return proto.CompactTextString(m) } func (*VReplicationWaitForPosResponse) ProtoMessage() {} func (*VReplicationWaitForPosResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{61} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{67} } func (m *VReplicationWaitForPosResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VReplicationWaitForPosResponse.Unmarshal(m, b) @@ -2501,7 +2697,7 @@ func (m *InitMasterRequest) Reset() { *m = InitMasterRequest{} } func (m *InitMasterRequest) String() string { return proto.CompactTextString(m) } func (*InitMasterRequest) ProtoMessage() {} func (*InitMasterRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{62} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{68} } func (m *InitMasterRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InitMasterRequest.Unmarshal(m, b) @@ -2532,7 +2728,7 @@ func (m *InitMasterResponse) Reset() { *m = InitMasterResponse{} } func (m *InitMasterResponse) String() string { return proto.CompactTextString(m) } func (*InitMasterResponse) ProtoMessage() {} func (*InitMasterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{63} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{69} } func (m *InitMasterResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InitMasterResponse.Unmarshal(m, b) @@ -2573,7 +2769,7 @@ func (m *PopulateReparentJournalRequest) Reset() { *m = PopulateReparent func (m *PopulateReparentJournalRequest) String() string { return proto.CompactTextString(m) } func (*PopulateReparentJournalRequest) ProtoMessage() {} func (*PopulateReparentJournalRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{64} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{70} } func (m *PopulateReparentJournalRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PopulateReparentJournalRequest.Unmarshal(m, b) @@ -2631,7 +2827,7 @@ func (m *PopulateReparentJournalResponse) Reset() { *m = PopulateReparen func (m *PopulateReparentJournalResponse) String() string { return proto.CompactTextString(m) } func (*PopulateReparentJournalResponse) ProtoMessage() {} func (*PopulateReparentJournalResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{65} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{71} } func (m *PopulateReparentJournalResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PopulateReparentJournalResponse.Unmarshal(m, b) @@ -2664,7 +2860,7 @@ func (m *InitSlaveRequest) Reset() { *m = InitSlaveRequest{} } func (m *InitSlaveRequest) String() string { return proto.CompactTextString(m) } func (*InitSlaveRequest) ProtoMessage() {} func (*InitSlaveRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{66} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{72} } func (m *InitSlaveRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InitSlaveRequest.Unmarshal(m, b) @@ -2715,7 +2911,7 @@ func (m *InitSlaveResponse) Reset() { *m = InitSlaveResponse{} } func (m *InitSlaveResponse) String() string { return proto.CompactTextString(m) } func (*InitSlaveResponse) ProtoMessage() {} func (*InitSlaveResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{67} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{73} } func (m *InitSlaveResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InitSlaveResponse.Unmarshal(m, b) @@ -2745,7 +2941,7 @@ func (m *DemoteMasterRequest) Reset() { *m = DemoteMasterRequest{} } func (m *DemoteMasterRequest) String() string { return proto.CompactTextString(m) } func (*DemoteMasterRequest) ProtoMessage() {} func (*DemoteMasterRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{68} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{74} } func (m *DemoteMasterRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DemoteMasterRequest.Unmarshal(m, b) @@ -2776,7 +2972,7 @@ func (m *DemoteMasterResponse) Reset() { *m = DemoteMasterResponse{} } func (m *DemoteMasterResponse) String() string { return proto.CompactTextString(m) } func (*DemoteMasterResponse) ProtoMessage() {} func (*DemoteMasterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{69} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{75} } func (m *DemoteMasterResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DemoteMasterResponse.Unmarshal(m, b) @@ -2814,7 +3010,7 @@ func (m *PromoteSlaveWhenCaughtUpRequest) Reset() { *m = PromoteSlaveWhe func (m *PromoteSlaveWhenCaughtUpRequest) String() string { return proto.CompactTextString(m) } func (*PromoteSlaveWhenCaughtUpRequest) ProtoMessage() {} func (*PromoteSlaveWhenCaughtUpRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{70} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{76} } func (m *PromoteSlaveWhenCaughtUpRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PromoteSlaveWhenCaughtUpRequest.Unmarshal(m, b) @@ -2852,7 +3048,7 @@ func (m *PromoteSlaveWhenCaughtUpResponse) Reset() { *m = PromoteSlaveWh func (m *PromoteSlaveWhenCaughtUpResponse) String() string { return proto.CompactTextString(m) } func (*PromoteSlaveWhenCaughtUpResponse) ProtoMessage() {} func (*PromoteSlaveWhenCaughtUpResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{71} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{77} } func (m *PromoteSlaveWhenCaughtUpResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PromoteSlaveWhenCaughtUpResponse.Unmarshal(m, b) @@ -2889,7 +3085,7 @@ func (m *SlaveWasPromotedRequest) Reset() { *m = SlaveWasPromotedRequest func (m *SlaveWasPromotedRequest) String() string { return proto.CompactTextString(m) } func (*SlaveWasPromotedRequest) ProtoMessage() {} func (*SlaveWasPromotedRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{72} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{78} } func (m *SlaveWasPromotedRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SlaveWasPromotedRequest.Unmarshal(m, b) @@ -2919,7 +3115,7 @@ func (m *SlaveWasPromotedResponse) Reset() { *m = SlaveWasPromotedRespon func (m *SlaveWasPromotedResponse) String() string { return proto.CompactTextString(m) } func (*SlaveWasPromotedResponse) ProtoMessage() {} func (*SlaveWasPromotedResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{73} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{79} } func (m *SlaveWasPromotedResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SlaveWasPromotedResponse.Unmarshal(m, b) @@ -2952,7 +3148,7 @@ func (m *SetMasterRequest) Reset() { *m = SetMasterRequest{} } func (m *SetMasterRequest) String() string { return proto.CompactTextString(m) } func (*SetMasterRequest) ProtoMessage() {} func (*SetMasterRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{74} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{80} } func (m *SetMasterRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetMasterRequest.Unmarshal(m, b) @@ -3003,7 +3199,7 @@ func (m *SetMasterResponse) Reset() { *m = SetMasterResponse{} } func (m *SetMasterResponse) String() string { return proto.CompactTextString(m) } func (*SetMasterResponse) ProtoMessage() {} func (*SetMasterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{75} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{81} } func (m *SetMasterResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetMasterResponse.Unmarshal(m, b) @@ -3035,7 +3231,7 @@ func (m *SlaveWasRestartedRequest) Reset() { *m = SlaveWasRestartedReque func (m *SlaveWasRestartedRequest) String() string { return proto.CompactTextString(m) } func (*SlaveWasRestartedRequest) ProtoMessage() {} func (*SlaveWasRestartedRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{76} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{82} } func (m *SlaveWasRestartedRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SlaveWasRestartedRequest.Unmarshal(m, b) @@ -3072,7 +3268,7 @@ func (m *SlaveWasRestartedResponse) Reset() { *m = SlaveWasRestartedResp func (m *SlaveWasRestartedResponse) String() string { return proto.CompactTextString(m) } func (*SlaveWasRestartedResponse) ProtoMessage() {} func (*SlaveWasRestartedResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{77} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{83} } func (m *SlaveWasRestartedResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SlaveWasRestartedResponse.Unmarshal(m, b) @@ -3102,7 +3298,7 @@ func (m *StopReplicationAndGetStatusRequest) Reset() { *m = StopReplicat func (m *StopReplicationAndGetStatusRequest) String() string { return proto.CompactTextString(m) } func (*StopReplicationAndGetStatusRequest) ProtoMessage() {} func (*StopReplicationAndGetStatusRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{78} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{84} } func (m *StopReplicationAndGetStatusRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StopReplicationAndGetStatusRequest.Unmarshal(m, b) @@ -3133,7 +3329,7 @@ func (m *StopReplicationAndGetStatusResponse) Reset() { *m = StopReplica func (m *StopReplicationAndGetStatusResponse) String() string { return proto.CompactTextString(m) } func (*StopReplicationAndGetStatusResponse) ProtoMessage() {} func (*StopReplicationAndGetStatusResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{79} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{85} } func (m *StopReplicationAndGetStatusResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StopReplicationAndGetStatusResponse.Unmarshal(m, b) @@ -3170,7 +3366,7 @@ func (m *PromoteSlaveRequest) Reset() { *m = PromoteSlaveRequest{} } func (m *PromoteSlaveRequest) String() string { return proto.CompactTextString(m) } func (*PromoteSlaveRequest) ProtoMessage() {} func (*PromoteSlaveRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{80} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{86} } func (m *PromoteSlaveRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PromoteSlaveRequest.Unmarshal(m, b) @@ -3201,7 +3397,7 @@ func (m *PromoteSlaveResponse) Reset() { *m = PromoteSlaveResponse{} } func (m *PromoteSlaveResponse) String() string { return proto.CompactTextString(m) } func (*PromoteSlaveResponse) ProtoMessage() {} func (*PromoteSlaveResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{81} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{87} } func (m *PromoteSlaveResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PromoteSlaveResponse.Unmarshal(m, b) @@ -3239,7 +3435,7 @@ func (m *BackupRequest) Reset() { *m = BackupRequest{} } func (m *BackupRequest) String() string { return proto.CompactTextString(m) } func (*BackupRequest) ProtoMessage() {} func (*BackupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{82} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{88} } func (m *BackupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BackupRequest.Unmarshal(m, b) @@ -3277,7 +3473,7 @@ func (m *BackupResponse) Reset() { *m = BackupResponse{} } func (m *BackupResponse) String() string { return proto.CompactTextString(m) } func (*BackupResponse) ProtoMessage() {} func (*BackupResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{83} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{89} } func (m *BackupResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BackupResponse.Unmarshal(m, b) @@ -3314,7 +3510,7 @@ func (m *RestoreFromBackupRequest) Reset() { *m = RestoreFromBackupReque func (m *RestoreFromBackupRequest) String() string { return proto.CompactTextString(m) } func (*RestoreFromBackupRequest) ProtoMessage() {} func (*RestoreFromBackupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{84} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{90} } func (m *RestoreFromBackupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RestoreFromBackupRequest.Unmarshal(m, b) @@ -3345,7 +3541,7 @@ func (m *RestoreFromBackupResponse) Reset() { *m = RestoreFromBackupResp func (m *RestoreFromBackupResponse) String() string { return proto.CompactTextString(m) } func (*RestoreFromBackupResponse) ProtoMessage() {} func (*RestoreFromBackupResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_tabletmanagerdata_bfd6af383c5f908a, []int{85} + return fileDescriptor_tabletmanagerdata_9e0123608316bc1a, []int{91} } func (m *RestoreFromBackupResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RestoreFromBackupResponse.Unmarshal(m, b) @@ -3410,6 +3606,10 @@ func init() { proto.RegisterType((*PreflightSchemaResponse)(nil), "tabletmanagerdata.PreflightSchemaResponse") proto.RegisterType((*ApplySchemaRequest)(nil), "tabletmanagerdata.ApplySchemaRequest") proto.RegisterType((*ApplySchemaResponse)(nil), "tabletmanagerdata.ApplySchemaResponse") + proto.RegisterType((*LockTablesRequest)(nil), "tabletmanagerdata.LockTablesRequest") + proto.RegisterType((*LockTablesResponse)(nil), "tabletmanagerdata.LockTablesResponse") + proto.RegisterType((*UnlockTablesRequest)(nil), "tabletmanagerdata.UnlockTablesRequest") + proto.RegisterType((*UnlockTablesResponse)(nil), "tabletmanagerdata.UnlockTablesResponse") proto.RegisterType((*ExecuteFetchAsDbaRequest)(nil), "tabletmanagerdata.ExecuteFetchAsDbaRequest") proto.RegisterType((*ExecuteFetchAsDbaResponse)(nil), "tabletmanagerdata.ExecuteFetchAsDbaResponse") proto.RegisterType((*ExecuteFetchAsAllPrivsRequest)(nil), "tabletmanagerdata.ExecuteFetchAsAllPrivsRequest") @@ -3426,6 +3626,8 @@ func init() { proto.RegisterType((*StopSlaveMinimumResponse)(nil), "tabletmanagerdata.StopSlaveMinimumResponse") proto.RegisterType((*StartSlaveRequest)(nil), "tabletmanagerdata.StartSlaveRequest") proto.RegisterType((*StartSlaveResponse)(nil), "tabletmanagerdata.StartSlaveResponse") + proto.RegisterType((*StartSlaveUntilAfterRequest)(nil), "tabletmanagerdata.StartSlaveUntilAfterRequest") + proto.RegisterType((*StartSlaveUntilAfterResponse)(nil), "tabletmanagerdata.StartSlaveUntilAfterResponse") proto.RegisterType((*TabletExternallyReparentedRequest)(nil), "tabletmanagerdata.TabletExternallyReparentedRequest") proto.RegisterType((*TabletExternallyReparentedResponse)(nil), "tabletmanagerdata.TabletExternallyReparentedResponse") proto.RegisterType((*TabletExternallyElectedRequest)(nil), "tabletmanagerdata.TabletExternallyElectedRequest") @@ -3465,134 +3667,138 @@ func init() { } func init() { - proto.RegisterFile("tabletmanagerdata.proto", fileDescriptor_tabletmanagerdata_bfd6af383c5f908a) -} - -var fileDescriptor_tabletmanagerdata_bfd6af383c5f908a = []byte{ - // 1999 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0x5b, 0x6f, 0x1b, 0xc7, - 0x15, 0x06, 0x49, 0x49, 0x96, 0x0e, 0x2f, 0xa2, 0x96, 0x92, 0x48, 0x29, 0x88, 0x24, 0xaf, 0x9d, - 0x46, 0x75, 0x51, 0x2a, 0x56, 0xd2, 0x20, 0x48, 0x91, 0xa2, 0xb2, 0x2e, 0xb6, 0x13, 0x27, 0x66, - 0x56, 0x8e, 0x5d, 0xe4, 0x65, 0x31, 0xe4, 0x1e, 0x91, 0x0b, 0x2d, 0x77, 0xd6, 0x33, 0xb3, 0x94, - 0xf8, 0x27, 0xfa, 0xd6, 0xb7, 0xbe, 0x15, 0x68, 0xdf, 0xfb, 0x63, 0x52, 0xf4, 0x97, 0xf4, 0xa1, - 0x2f, 0xc5, 0x5c, 0x96, 0xdc, 0xe5, 0xc5, 0x96, 0x84, 0x14, 0xc8, 0x8b, 0xc0, 0xf3, 0x9d, 0xfb, - 0x99, 0x33, 0x67, 0xce, 0x0a, 0xea, 0x82, 0xb4, 0x03, 0x14, 0x7d, 0x12, 0x92, 0x2e, 0x32, 0x8f, - 0x08, 0xd2, 0x8c, 0x18, 0x15, 0xd4, 0x5a, 0x9b, 0x62, 0x6c, 0x17, 0xdf, 0xc6, 0xc8, 0x86, 0x9a, - 0xbf, 0x5d, 0x11, 0x34, 0xa2, 0x63, 0xf9, 0xed, 0x0d, 0x86, 0x51, 0xe0, 0x77, 0x88, 0xf0, 0x69, - 0x98, 0x82, 0xcb, 0x01, 0xed, 0xc6, 0xc2, 0x0f, 0x34, 0x69, 0xff, 0x3b, 0x07, 0xab, 0xaf, 0xa4, - 0xe1, 0x13, 0xbc, 0xf0, 0x43, 0x5f, 0x0a, 0x5b, 0x16, 0x2c, 0x84, 0xa4, 0x8f, 0x8d, 0xdc, 0x5e, - 0x6e, 0x7f, 0xc5, 0x51, 0xbf, 0xad, 0x4d, 0x58, 0xe2, 0x9d, 0x1e, 0xf6, 0x49, 0x23, 0xaf, 0x50, - 0x43, 0x59, 0x0d, 0xb8, 0xd7, 0xa1, 0x41, 0xdc, 0x0f, 0x79, 0xa3, 0xb0, 0x57, 0xd8, 0x5f, 0x71, - 0x12, 0xd2, 0x6a, 0x42, 0x2d, 0x62, 0x7e, 0x9f, 0xb0, 0xa1, 0x7b, 0x89, 0x43, 0x37, 0x91, 0x5a, - 0x50, 0x52, 0x6b, 0x86, 0xf5, 0x0d, 0x0e, 0x8f, 0x8d, 0xbc, 0x05, 0x0b, 0x62, 0x18, 0x61, 0x63, - 0x51, 0x7b, 0x95, 0xbf, 0xad, 0x5d, 0x28, 0xca, 0xd0, 0xdd, 0x00, 0xc3, 0xae, 0xe8, 0x35, 0x96, - 0xf6, 0x72, 0xfb, 0x0b, 0x0e, 0x48, 0xe8, 0x85, 0x42, 0xac, 0x0f, 0x60, 0x85, 0xd1, 0x2b, 0xb7, - 0x43, 0xe3, 0x50, 0x34, 0xee, 0x29, 0xf6, 0x32, 0xa3, 0x57, 0xc7, 0x92, 0xb6, 0xff, 0x9e, 0x83, - 0xea, 0xb9, 0x0a, 0x33, 0x95, 0xdc, 0xc7, 0xb0, 0x2a, 0xf5, 0xdb, 0x84, 0xa3, 0x6b, 0x32, 0xd2, - 0x79, 0x56, 0x12, 0x58, 0xab, 0x58, 0x2f, 0x41, 0x57, 0xdc, 0xf5, 0x46, 0xca, 0xbc, 0x91, 0xdf, - 0x2b, 0xec, 0x17, 0x0f, 0xed, 0xe6, 0xf4, 0x21, 0x4d, 0x14, 0xd1, 0xa9, 0x8a, 0x2c, 0xc0, 0x65, - 0xa9, 0x06, 0xc8, 0xb8, 0x4f, 0xc3, 0x46, 0x41, 0x79, 0x4c, 0x48, 0x19, 0xa8, 0xa5, 0xbd, 0x1e, - 0xf7, 0x48, 0xd8, 0x45, 0x07, 0x79, 0x1c, 0x08, 0xeb, 0x19, 0x94, 0xdb, 0x78, 0x41, 0x59, 0x26, - 0xd0, 0xe2, 0xe1, 0x83, 0x19, 0xde, 0x27, 0xd3, 0x74, 0x4a, 0x5a, 0xd3, 0xe4, 0x72, 0x06, 0x25, - 0x72, 0x21, 0x90, 0xb9, 0xa9, 0x33, 0xbc, 0xa1, 0xa1, 0xa2, 0x52, 0xd4, 0xb0, 0xfd, 0x9f, 0x1c, - 0x54, 0x7e, 0xe0, 0xc8, 0x5a, 0xc8, 0xfa, 0x3e, 0xe7, 0xa6, 0x59, 0x7a, 0x94, 0x8b, 0xa4, 0x59, - 0xe4, 0x6f, 0x89, 0xc5, 0x1c, 0x99, 0x69, 0x15, 0xf5, 0xdb, 0xfa, 0x0d, 0xac, 0x45, 0x84, 0xf3, - 0x2b, 0xca, 0x3c, 0xb7, 0xd3, 0xc3, 0xce, 0x25, 0x8f, 0xfb, 0xaa, 0x0e, 0x0b, 0x4e, 0x35, 0x61, - 0x1c, 0x1b, 0xdc, 0xfa, 0x1e, 0x20, 0x62, 0xfe, 0xc0, 0x0f, 0xb0, 0x8b, 0xba, 0x65, 0x8a, 0x87, - 0x8f, 0x67, 0x44, 0x9b, 0x8d, 0xa5, 0xd9, 0x1a, 0xe9, 0x9c, 0x86, 0x82, 0x0d, 0x9d, 0x94, 0x91, - 0xed, 0xaf, 0x60, 0x75, 0x82, 0x6d, 0x55, 0xa1, 0x70, 0x89, 0x43, 0x13, 0xb9, 0xfc, 0x69, 0xad, - 0xc3, 0xe2, 0x80, 0x04, 0x31, 0x9a, 0xc8, 0x35, 0xf1, 0x65, 0xfe, 0x8b, 0x9c, 0xfd, 0x53, 0x0e, - 0x4a, 0x27, 0xed, 0xf7, 0xe4, 0x5d, 0x81, 0xbc, 0xd7, 0x36, 0xba, 0x79, 0xaf, 0x3d, 0xaa, 0x43, - 0x21, 0x55, 0x87, 0x97, 0x33, 0x52, 0x3b, 0x98, 0x91, 0x5a, 0xda, 0xd9, 0xff, 0x33, 0xb1, 0xbf, - 0xe5, 0xa0, 0x38, 0xf6, 0xc4, 0xad, 0x17, 0x50, 0x95, 0x71, 0xba, 0xd1, 0x18, 0x6b, 0xe4, 0x54, - 0x94, 0xf7, 0xdf, 0x7b, 0x00, 0xce, 0x6a, 0x9c, 0xa1, 0xb9, 0x75, 0x06, 0x15, 0xaf, 0x9d, 0xb1, - 0xa5, 0x6f, 0xd0, 0xee, 0x7b, 0x32, 0x76, 0xca, 0x5e, 0x8a, 0xe2, 0xf6, 0xc7, 0x50, 0x6c, 0xf9, - 0x61, 0xd7, 0xc1, 0xb7, 0x31, 0x72, 0x21, 0xaf, 0x52, 0x44, 0x86, 0x01, 0x25, 0x9e, 0x49, 0x32, - 0x21, 0xed, 0x7d, 0x28, 0x69, 0x41, 0x1e, 0xd1, 0x90, 0xe3, 0x3b, 0x24, 0x1f, 0x41, 0xe9, 0x3c, - 0x40, 0x8c, 0x12, 0x9b, 0xdb, 0xb0, 0xec, 0xc5, 0x4c, 0x8d, 0x4b, 0x25, 0x5a, 0x70, 0x46, 0xb4, - 0xbd, 0x0a, 0x65, 0x23, 0xab, 0xcd, 0xda, 0xff, 0xca, 0x81, 0x75, 0x7a, 0x8d, 0x9d, 0x58, 0xe0, - 0x33, 0x4a, 0x2f, 0x13, 0x1b, 0xb3, 0x26, 0xe7, 0x0e, 0x40, 0x44, 0x18, 0xe9, 0xa3, 0x40, 0xa6, - 0xd3, 0x5f, 0x71, 0x52, 0x88, 0xd5, 0x82, 0x15, 0xbc, 0x16, 0x8c, 0xb8, 0x18, 0x0e, 0xd4, 0x0c, - 0x2d, 0x1e, 0x7e, 0x3a, 0xa3, 0x3a, 0xd3, 0xde, 0x9a, 0xa7, 0x52, 0xed, 0x34, 0x1c, 0xe8, 0x9e, - 0x58, 0x46, 0x43, 0x6e, 0xff, 0x1e, 0xca, 0x19, 0xd6, 0xad, 0xfa, 0xe1, 0x02, 0x6a, 0x19, 0x57, - 0xa6, 0x8e, 0xbb, 0x50, 0xc4, 0x6b, 0x5f, 0xb8, 0x5c, 0x10, 0x11, 0x73, 0x53, 0x20, 0x90, 0xd0, - 0xb9, 0x42, 0xd4, 0x03, 0x21, 0x3c, 0x1a, 0x8b, 0xd1, 0x03, 0xa1, 0x28, 0x83, 0x23, 0x4b, 0x6e, - 0x81, 0xa1, 0xec, 0x01, 0x54, 0x9f, 0xa2, 0xd0, 0x73, 0x25, 0x29, 0xdf, 0x26, 0x2c, 0xa9, 0xc4, - 0x75, 0xc7, 0xad, 0x38, 0x86, 0xb2, 0x1e, 0x40, 0xd9, 0x0f, 0x3b, 0x41, 0xec, 0xa1, 0x3b, 0xf0, - 0xf1, 0x8a, 0x2b, 0x17, 0xcb, 0x4e, 0xc9, 0x80, 0xaf, 0x25, 0x66, 0x7d, 0x04, 0x15, 0xbc, 0xd6, - 0x42, 0xc6, 0x88, 0x7e, 0x90, 0xca, 0x06, 0x55, 0x03, 0x9a, 0xdb, 0x08, 0x6b, 0x29, 0xbf, 0x26, - 0xbb, 0x16, 0xac, 0xe9, 0xc9, 0x98, 0x1a, 0xf6, 0xb7, 0x99, 0xb6, 0x55, 0x3e, 0x81, 0xd8, 0x75, - 0xd8, 0x78, 0x8a, 0x22, 0xd5, 0xc2, 0x26, 0x47, 0xfb, 0x47, 0xd8, 0x9c, 0x64, 0x98, 0x20, 0xfe, - 0x08, 0xc5, 0xec, 0xa5, 0x93, 0xee, 0x77, 0x66, 0xb8, 0x4f, 0x2b, 0xa7, 0x55, 0xec, 0x75, 0xb0, - 0xce, 0x51, 0x38, 0x48, 0xbc, 0x97, 0x61, 0x30, 0x4c, 0x3c, 0x6e, 0x40, 0x2d, 0x83, 0x9a, 0x16, - 0x1e, 0xc3, 0x6f, 0x98, 0x2f, 0x30, 0x91, 0xde, 0x84, 0xf5, 0x2c, 0x6c, 0xc4, 0xbf, 0x86, 0x35, - 0xfd, 0x38, 0xbd, 0x1a, 0x46, 0x89, 0xb0, 0xf5, 0x3b, 0x28, 0xea, 0xf0, 0x5c, 0xf5, 0x74, 0xcb, - 0x90, 0x2b, 0x87, 0xeb, 0xcd, 0xd1, 0x26, 0xa2, 0x6a, 0x2e, 0x94, 0x06, 0x88, 0xd1, 0x6f, 0x19, - 0x67, 0xda, 0xd6, 0x38, 0x20, 0x07, 0x2f, 0x18, 0xf2, 0x9e, 0x6c, 0xa9, 0x74, 0x40, 0x59, 0xd8, - 0x88, 0xd7, 0x61, 0xc3, 0x89, 0xc3, 0x67, 0x48, 0x02, 0xd1, 0x53, 0x0f, 0x47, 0xa2, 0xd0, 0x80, - 0xcd, 0x49, 0x86, 0x51, 0xf9, 0x0c, 0x1a, 0xcf, 0xbb, 0x21, 0x65, 0xa8, 0x99, 0xa7, 0x8c, 0x51, - 0x96, 0x19, 0x29, 0x42, 0x20, 0x0b, 0xc7, 0x83, 0x42, 0x91, 0xf6, 0x07, 0xb0, 0x35, 0x43, 0xcb, - 0x98, 0xfc, 0x52, 0x06, 0x2d, 0xe7, 0x49, 0xb6, 0x93, 0x1f, 0x40, 0xf9, 0x8a, 0xf8, 0xc2, 0x8d, - 0x28, 0x1f, 0x37, 0xd3, 0x8a, 0x53, 0x92, 0x60, 0xcb, 0x60, 0x3a, 0xb3, 0xb4, 0xae, 0xb1, 0x79, - 0x08, 0x9b, 0x2d, 0x86, 0x17, 0x81, 0xdf, 0xed, 0x4d, 0x5c, 0x10, 0xb9, 0x6d, 0xa9, 0xc2, 0x25, - 0x37, 0x24, 0x21, 0xed, 0x2e, 0xd4, 0xa7, 0x74, 0x4c, 0x5f, 0xbd, 0x80, 0x8a, 0x96, 0x72, 0x99, - 0xda, 0x2b, 0x92, 0x79, 0xfe, 0xd1, 0xdc, 0xce, 0x4e, 0x6f, 0x21, 0x4e, 0xb9, 0x93, 0xa2, 0xb8, - 0xfd, 0xdf, 0x1c, 0x58, 0x47, 0x51, 0x14, 0x0c, 0xb3, 0x91, 0x55, 0xa1, 0xc0, 0xdf, 0x06, 0xc9, - 0x88, 0xe1, 0x6f, 0x03, 0x39, 0x62, 0x2e, 0x28, 0xeb, 0xa0, 0xb9, 0xac, 0x9a, 0x90, 0x6b, 0x00, - 0x09, 0x02, 0x7a, 0xe5, 0xa6, 0xb6, 0x53, 0x35, 0x19, 0x96, 0x9d, 0xaa, 0x62, 0x38, 0x63, 0x7c, - 0x7a, 0x01, 0x5a, 0xf8, 0xb9, 0x16, 0xa0, 0xc5, 0x3b, 0x2e, 0x40, 0xff, 0xc8, 0x41, 0x2d, 0x93, - 0xbd, 0xa9, 0xf1, 0x2f, 0x6f, 0x55, 0xfb, 0x67, 0x0e, 0x1a, 0x66, 0x90, 0x9f, 0xa1, 0xe8, 0xf4, - 0x8e, 0xf8, 0x49, 0x7b, 0x74, 0x5a, 0xeb, 0xb0, 0xa8, 0x3e, 0x1d, 0x54, 0x98, 0x25, 0x47, 0x13, - 0x56, 0x1d, 0xee, 0x79, 0x6d, 0x57, 0x3d, 0x60, 0x66, 0x86, 0x7b, 0xed, 0xef, 0xe4, 0x13, 0xb6, - 0x05, 0xcb, 0x7d, 0x72, 0xed, 0x32, 0x7a, 0xc5, 0xcd, 0xca, 0x76, 0xaf, 0x4f, 0xae, 0x1d, 0x7a, - 0xc5, 0xd5, 0x3a, 0xed, 0x73, 0xb5, 0x27, 0xb7, 0xfd, 0x30, 0xa0, 0x5d, 0xae, 0x0e, 0x69, 0xd9, - 0xa9, 0x18, 0xf8, 0x89, 0x46, 0xe5, 0x8d, 0x60, 0xaa, 0xd9, 0xd3, 0x47, 0xb0, 0xec, 0x94, 0x58, - 0xea, 0x06, 0xd8, 0x4f, 0x61, 0x6b, 0x46, 0xcc, 0xa6, 0xc6, 0x8f, 0x60, 0x49, 0x37, 0xb0, 0x29, - 0xae, 0xd5, 0xd4, 0x9f, 0x3f, 0xdf, 0xcb, 0xbf, 0xa6, 0x59, 0x8d, 0x84, 0xfd, 0xe7, 0x1c, 0x7c, - 0x98, 0xb5, 0x74, 0x14, 0x04, 0x72, 0x4d, 0xe2, 0x3f, 0x7f, 0x09, 0xa6, 0x32, 0x5b, 0x98, 0x91, - 0xd9, 0x0b, 0xd8, 0x99, 0x17, 0xcf, 0x1d, 0xd2, 0xfb, 0x66, 0xf2, 0x6c, 0x8f, 0xa2, 0xe8, 0xdd, - 0x89, 0xa5, 0xe3, 0xcf, 0x67, 0xe2, 0x9f, 0x2e, 0xba, 0x32, 0x76, 0x87, 0xa8, 0xe4, 0xf3, 0x13, - 0x90, 0x01, 0xea, 0x8d, 0x20, 0x19, 0xc7, 0x67, 0x50, 0xcb, 0xa0, 0xc6, 0xf0, 0x81, 0xdc, 0x0b, - 0x46, 0xbb, 0x44, 0xf1, 0xb0, 0xde, 0x9c, 0xfc, 0x5e, 0x35, 0x0a, 0x46, 0x4c, 0xce, 0xfb, 0x6f, - 0x09, 0x17, 0xc8, 0x92, 0xf9, 0x99, 0x38, 0xf8, 0x0c, 0x36, 0x27, 0x19, 0xc6, 0xc7, 0x36, 0x2c, - 0x4f, 0x0c, 0xe0, 0x11, 0x6d, 0x5b, 0x50, 0x3d, 0x17, 0x34, 0x52, 0xa1, 0x25, 0x96, 0x6a, 0xb0, - 0x96, 0xc2, 0xcc, 0x34, 0xfe, 0x13, 0xd4, 0x47, 0xe0, 0xb7, 0x7e, 0xe8, 0xf7, 0xe3, 0x7e, 0x6a, - 0x65, 0x9c, 0x67, 0xdf, 0xba, 0x0f, 0x6a, 0xd8, 0xbb, 0xc2, 0xef, 0x63, 0xb2, 0x15, 0x15, 0x9c, - 0xa2, 0xc4, 0x5e, 0x69, 0xc8, 0xfe, 0x1c, 0x1a, 0xd3, 0x96, 0x6f, 0x10, 0xba, 0x0a, 0x93, 0x30, - 0x91, 0x89, 0x5d, 0x16, 0x3f, 0x05, 0x9a, 0xe0, 0x4f, 0xe0, 0xbe, 0x7e, 0x83, 0x4f, 0xaf, 0xe5, - 0x5b, 0x46, 0x02, 0xb9, 0x00, 0x44, 0x84, 0x61, 0x28, 0xd0, 0x4b, 0xd2, 0x50, 0xbb, 0x9d, 0x66, - 0xbb, 0x7e, 0xb2, 0x27, 0x43, 0x02, 0x3d, 0xf7, 0xec, 0x87, 0x60, 0xbf, 0xcb, 0x8a, 0xf1, 0xb5, - 0x07, 0x3b, 0x93, 0x52, 0xa7, 0x01, 0x76, 0xc6, 0x8e, 0xec, 0xfb, 0xb0, 0x3b, 0x57, 0xc2, 0x18, - 0xb1, 0xf4, 0x5a, 0x28, 0x93, 0x18, 0x75, 0xd0, 0xaf, 0xf5, 0xca, 0x66, 0x30, 0x53, 0xa0, 0x75, - 0x58, 0x24, 0x9e, 0xc7, 0x92, 0x87, 0x50, 0x13, 0xf6, 0x16, 0xd4, 0x1d, 0xe4, 0x72, 0x7f, 0x19, - 0xf5, 0x52, 0x62, 0x65, 0x1b, 0x1a, 0xd3, 0x2c, 0xe3, 0xf5, 0x00, 0xea, 0xaf, 0x53, 0xb8, 0xbc, - 0x0e, 0x33, 0xaf, 0xd3, 0x8a, 0xb9, 0x4e, 0xf6, 0x19, 0x34, 0xa6, 0x15, 0xee, 0x74, 0x91, 0x3f, - 0x4c, 0xdb, 0x79, 0x43, 0x7c, 0x71, 0x46, 0x65, 0x23, 0x27, 0xee, 0x2b, 0x90, 0x37, 0x47, 0x52, - 0x70, 0xf2, 0xbe, 0x97, 0xe9, 0x8b, 0xfc, 0x44, 0x5f, 0xec, 0xc1, 0xce, 0x3c, 0x63, 0x26, 0xcf, - 0x1a, 0xac, 0x3d, 0x0f, 0x7d, 0xa1, 0xaf, 0x4b, 0x52, 0x98, 0x4f, 0xc0, 0x4a, 0x83, 0x37, 0x68, - 0xc0, 0x9f, 0x72, 0xb0, 0xd3, 0xa2, 0x51, 0x1c, 0xa8, 0x7d, 0x4c, 0x37, 0xc2, 0xd7, 0x34, 0x96, - 0x27, 0x9a, 0xc4, 0xfd, 0x2b, 0x58, 0x95, 0x9d, 0xef, 0x76, 0x18, 0x12, 0x81, 0x9e, 0x1b, 0x26, - 0xdf, 0x0c, 0x65, 0x09, 0x1f, 0x6b, 0xf4, 0x3b, 0x2e, 0x7b, 0x8f, 0x74, 0xa4, 0xd1, 0xf4, 0xd0, - 0x05, 0x0d, 0xa9, 0xc1, 0xfb, 0x05, 0x94, 0xfa, 0x2a, 0x32, 0x97, 0x04, 0x3e, 0xd1, 0xc3, 0xb7, - 0x78, 0xb8, 0x31, 0xb9, 0x63, 0x1e, 0x49, 0xa6, 0x53, 0xd4, 0xa2, 0x8a, 0xb0, 0x1e, 0xc3, 0x7a, - 0x6a, 0xa4, 0x8c, 0x57, 0xb1, 0x05, 0xe5, 0xa3, 0x96, 0xe2, 0x8d, 0x36, 0xb2, 0xfb, 0xb0, 0x3b, - 0x37, 0x2f, 0x53, 0xc2, 0xbf, 0xe6, 0xa0, 0x2a, 0xcb, 0x95, 0xbe, 0x7c, 0xd6, 0x6f, 0x61, 0x49, - 0x4b, 0x9b, 0x23, 0x9f, 0x13, 0x9e, 0x11, 0x9a, 0x1b, 0x59, 0x7e, 0x6e, 0x64, 0xb3, 0xea, 0x59, - 0x98, 0x51, 0xcf, 0xe4, 0x84, 0xb3, 0x53, 0x60, 0x03, 0x6a, 0x27, 0xd8, 0xa7, 0x02, 0xb3, 0x07, - 0x7f, 0x08, 0xeb, 0x59, 0xf8, 0x06, 0x47, 0xff, 0x15, 0xec, 0xb6, 0x18, 0x95, 0x4a, 0xca, 0xc5, - 0x9b, 0x1e, 0x86, 0xc7, 0x24, 0xee, 0xf6, 0xc4, 0x0f, 0xd1, 0x0d, 0xa6, 0xa2, 0xfd, 0x07, 0xd8, - 0x9b, 0xaf, 0x7e, 0x03, 0xf7, 0x5b, 0x50, 0xd7, 0x8a, 0x84, 0x1b, 0x3b, 0x5e, 0xea, 0x7e, 0x4f, - 0xb3, 0x4c, 0x01, 0xfe, 0x92, 0x83, 0xea, 0x39, 0x66, 0xfb, 0xfe, 0xb6, 0x87, 0x36, 0xe3, 0x04, - 0xf2, 0xb3, 0x3a, 0xfa, 0x11, 0xac, 0xa9, 0x55, 0x57, 0x7e, 0x2a, 0x33, 0xe1, 0x72, 0x19, 0x93, - 0xd9, 0x70, 0x57, 0x15, 0x63, 0x3c, 0xa6, 0xd5, 0x24, 0xc7, 0x89, 0x9b, 0x67, 0x3f, 0x1f, 0x27, - 0xe2, 0xa0, 0x32, 0x32, 0x1e, 0xd5, 0xb7, 0x8b, 0x59, 0x7e, 0xba, 0xcc, 0x30, 0x65, 0xfc, 0x3c, - 0x04, 0x5b, 0x3e, 0x3f, 0xa9, 0x89, 0x71, 0x14, 0x7a, 0x72, 0xd0, 0x66, 0x9e, 0xef, 0xd7, 0xf0, - 0xe0, 0x9d, 0x52, 0x77, 0x7d, 0xce, 0x37, 0xa0, 0x96, 0xee, 0x84, 0x54, 0x4f, 0x66, 0xe1, 0x1b, - 0x34, 0xc5, 0x63, 0x28, 0x3f, 0x21, 0x9d, 0xcb, 0x78, 0xd4, 0x81, 0x7b, 0x50, 0xec, 0xd0, 0xb0, - 0x13, 0x33, 0x86, 0x61, 0x67, 0x68, 0x06, 0x4f, 0x1a, 0xb2, 0x3f, 0x87, 0x4a, 0xa2, 0x62, 0x1c, - 0x3c, 0x84, 0x45, 0x1c, 0x8c, 0x0b, 0x5b, 0x69, 0x26, 0xff, 0x27, 0x3f, 0x95, 0xa8, 0xa3, 0x99, - 0xe6, 0x11, 0x11, 0x94, 0xe1, 0x19, 0xa3, 0xfd, 0x8c, 0x57, 0xfb, 0x08, 0xb6, 0x66, 0xf0, 0x6e, - 0x63, 0xfe, 0xc9, 0x27, 0x3f, 0x36, 0x07, 0xbe, 0x40, 0xce, 0x9b, 0x3e, 0x3d, 0xd0, 0xbf, 0x0e, - 0xba, 0xf4, 0x60, 0x20, 0x0e, 0xd4, 0x7f, 0xeb, 0x0f, 0xa6, 0x3e, 0x02, 0xda, 0x4b, 0x8a, 0xf1, - 0xe9, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x7e, 0x8b, 0x0f, 0x3a, 0x37, 0x18, 0x00, 0x00, + proto.RegisterFile("tabletmanagerdata.proto", fileDescriptor_tabletmanagerdata_9e0123608316bc1a) +} + +var fileDescriptor_tabletmanagerdata_9e0123608316bc1a = []byte{ + // 2050 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0x5b, 0x6f, 0x1b, 0xc7, + 0x15, 0x06, 0x49, 0x49, 0x96, 0x0e, 0x2f, 0x22, 0x97, 0x94, 0x48, 0xc9, 0x8d, 0x24, 0xaf, 0x9d, + 0xc6, 0x75, 0x51, 0x2a, 0x56, 0xd2, 0x20, 0x48, 0x91, 0xa2, 0xb2, 0x2e, 0xb6, 0x13, 0x25, 0x56, + 0x56, 0xbe, 0x14, 0x41, 0x81, 0xc5, 0x70, 0x77, 0x44, 0x2e, 0xb4, 0xdc, 0x59, 0xcf, 0xcc, 0x52, + 0xe2, 0x9f, 0xe8, 0x5b, 0xdf, 0xfa, 0x56, 0xa0, 0x7d, 0xef, 0x8f, 0x49, 0xd1, 0x5f, 0xd2, 0x87, + 0xbe, 0x14, 0x73, 0x59, 0x72, 0x96, 0x17, 0x5b, 0x12, 0x5c, 0x20, 0x2f, 0xc6, 0x9e, 0x6f, 0xce, + 0x7d, 0xce, 0x39, 0x73, 0x68, 0x41, 0x93, 0xa3, 0x4e, 0x88, 0x79, 0x1f, 0x45, 0xa8, 0x8b, 0xa9, + 0x8f, 0x38, 0x6a, 0xc7, 0x94, 0x70, 0x62, 0xd5, 0xa6, 0x0e, 0x36, 0x8b, 0x6f, 0x13, 0x4c, 0x87, + 0xea, 0x7c, 0xb3, 0xc2, 0x49, 0x4c, 0xc6, 0xfc, 0x9b, 0x6b, 0x14, 0xc7, 0x61, 0xe0, 0x21, 0x1e, + 0x90, 0xc8, 0x80, 0xcb, 0x21, 0xe9, 0x26, 0x3c, 0x08, 0x15, 0x69, 0xff, 0x3b, 0x07, 0xab, 0x2f, + 0x85, 0xe2, 0x43, 0x7c, 0x1e, 0x44, 0x81, 0x60, 0xb6, 0x2c, 0x58, 0x88, 0x50, 0x1f, 0xb7, 0x72, + 0x3b, 0xb9, 0x87, 0x2b, 0x8e, 0xfc, 0xb6, 0xd6, 0x61, 0x89, 0x79, 0x3d, 0xdc, 0x47, 0xad, 0xbc, + 0x44, 0x35, 0x65, 0xb5, 0xe0, 0x8e, 0x47, 0xc2, 0xa4, 0x1f, 0xb1, 0x56, 0x61, 0xa7, 0xf0, 0x70, + 0xc5, 0x49, 0x49, 0xab, 0x0d, 0xf5, 0x98, 0x06, 0x7d, 0x44, 0x87, 0xee, 0x05, 0x1e, 0xba, 0x29, + 0xd7, 0x82, 0xe4, 0xaa, 0xe9, 0xa3, 0x6f, 0xf1, 0xf0, 0x40, 0xf3, 0x5b, 0xb0, 0xc0, 0x87, 0x31, + 0x6e, 0x2d, 0x2a, 0xab, 0xe2, 0xdb, 0xda, 0x86, 0xa2, 0x70, 0xdd, 0x0d, 0x71, 0xd4, 0xe5, 0xbd, + 0xd6, 0xd2, 0x4e, 0xee, 0xe1, 0x82, 0x03, 0x02, 0x3a, 0x91, 0x88, 0x75, 0x17, 0x56, 0x28, 0xb9, + 0x74, 0x3d, 0x92, 0x44, 0xbc, 0x75, 0x47, 0x1e, 0x2f, 0x53, 0x72, 0x79, 0x20, 0x68, 0xfb, 0xef, + 0x39, 0xa8, 0x9e, 0x49, 0x37, 0x8d, 0xe0, 0x3e, 0x81, 0x55, 0x21, 0xdf, 0x41, 0x0c, 0xbb, 0x3a, + 0x22, 0x15, 0x67, 0x25, 0x85, 0x95, 0x88, 0xf5, 0x02, 0x54, 0xc6, 0x5d, 0x7f, 0x24, 0xcc, 0x5a, + 0xf9, 0x9d, 0xc2, 0xc3, 0xe2, 0x9e, 0xdd, 0x9e, 0xbe, 0xa4, 0x89, 0x24, 0x3a, 0x55, 0x9e, 0x05, + 0x98, 0x48, 0xd5, 0x00, 0x53, 0x16, 0x90, 0xa8, 0x55, 0x90, 0x16, 0x53, 0x52, 0x38, 0x6a, 0x29, + 0xab, 0x07, 0x3d, 0x14, 0x75, 0xb1, 0x83, 0x59, 0x12, 0x72, 0xeb, 0x19, 0x94, 0x3b, 0xf8, 0x9c, + 0xd0, 0x8c, 0xa3, 0xc5, 0xbd, 0xfb, 0x33, 0xac, 0x4f, 0x86, 0xe9, 0x94, 0x94, 0xa4, 0x8e, 0xe5, + 0x18, 0x4a, 0xe8, 0x9c, 0x63, 0xea, 0x1a, 0x77, 0x78, 0x4d, 0x45, 0x45, 0x29, 0xa8, 0x60, 0xfb, + 0x3f, 0x39, 0xa8, 0xbc, 0x62, 0x98, 0x9e, 0x62, 0xda, 0x0f, 0x18, 0xd3, 0xc5, 0xd2, 0x23, 0x8c, + 0xa7, 0xc5, 0x22, 0xbe, 0x05, 0x96, 0x30, 0x4c, 0x75, 0xa9, 0xc8, 0x6f, 0xeb, 0xd7, 0x50, 0x8b, + 0x11, 0x63, 0x97, 0x84, 0xfa, 0xae, 0xd7, 0xc3, 0xde, 0x05, 0x4b, 0xfa, 0x32, 0x0f, 0x0b, 0x4e, + 0x35, 0x3d, 0x38, 0xd0, 0xb8, 0xf5, 0x03, 0x40, 0x4c, 0x83, 0x41, 0x10, 0xe2, 0x2e, 0x56, 0x25, + 0x53, 0xdc, 0x7b, 0x3c, 0xc3, 0xdb, 0xac, 0x2f, 0xed, 0xd3, 0x91, 0xcc, 0x51, 0xc4, 0xe9, 0xd0, + 0x31, 0x94, 0x6c, 0x7e, 0x0d, 0xab, 0x13, 0xc7, 0x56, 0x15, 0x0a, 0x17, 0x78, 0xa8, 0x3d, 0x17, + 0x9f, 0x56, 0x03, 0x16, 0x07, 0x28, 0x4c, 0xb0, 0xf6, 0x5c, 0x11, 0x5f, 0xe5, 0xbf, 0xcc, 0xd9, + 0x3f, 0xe5, 0xa0, 0x74, 0xd8, 0x79, 0x4f, 0xdc, 0x15, 0xc8, 0xfb, 0x1d, 0x2d, 0x9b, 0xf7, 0x3b, + 0xa3, 0x3c, 0x14, 0x8c, 0x3c, 0xbc, 0x98, 0x11, 0xda, 0xee, 0x8c, 0xd0, 0x4c, 0x63, 0xff, 0xcf, + 0xc0, 0xfe, 0x96, 0x83, 0xe2, 0xd8, 0x12, 0xb3, 0x4e, 0xa0, 0x2a, 0xfc, 0x74, 0xe3, 0x31, 0xd6, + 0xca, 0x49, 0x2f, 0xef, 0xbd, 0xf7, 0x02, 0x9c, 0xd5, 0x24, 0x43, 0x33, 0xeb, 0x18, 0x2a, 0x7e, + 0x27, 0xa3, 0x4b, 0x75, 0xd0, 0xf6, 0x7b, 0x22, 0x76, 0xca, 0xbe, 0x41, 0x31, 0xfb, 0x13, 0x28, + 0x9e, 0x06, 0x51, 0xd7, 0xc1, 0x6f, 0x13, 0xcc, 0xb8, 0x68, 0xa5, 0x18, 0x0d, 0x43, 0x82, 0x7c, + 0x1d, 0x64, 0x4a, 0xda, 0x0f, 0xa1, 0xa4, 0x18, 0x59, 0x4c, 0x22, 0x86, 0xdf, 0xc1, 0xf9, 0x08, + 0x4a, 0x67, 0x21, 0xc6, 0x71, 0xaa, 0x73, 0x13, 0x96, 0xfd, 0x84, 0xca, 0x71, 0x29, 0x59, 0x0b, + 0xce, 0x88, 0xb6, 0x57, 0xa1, 0xac, 0x79, 0x95, 0x5a, 0xfb, 0x5f, 0x39, 0xb0, 0x8e, 0xae, 0xb0, + 0x97, 0x70, 0xfc, 0x8c, 0x90, 0x8b, 0x54, 0xc7, 0xac, 0xc9, 0xb9, 0x05, 0x10, 0x23, 0x8a, 0xfa, + 0x98, 0x63, 0xaa, 0xc2, 0x5f, 0x71, 0x0c, 0xc4, 0x3a, 0x85, 0x15, 0x7c, 0xc5, 0x29, 0x72, 0x71, + 0x34, 0x90, 0x33, 0xb4, 0xb8, 0xf7, 0xd9, 0x8c, 0xec, 0x4c, 0x5b, 0x6b, 0x1f, 0x09, 0xb1, 0xa3, + 0x68, 0xa0, 0x6a, 0x62, 0x19, 0x6b, 0x72, 0xf3, 0x77, 0x50, 0xce, 0x1c, 0xdd, 0xa8, 0x1e, 0xce, + 0xa1, 0x9e, 0x31, 0xa5, 0xf3, 0xb8, 0x0d, 0x45, 0x7c, 0x15, 0x70, 0x97, 0x71, 0xc4, 0x13, 0xa6, + 0x13, 0x04, 0x02, 0x3a, 0x93, 0x88, 0x7c, 0x20, 0xb8, 0x4f, 0x12, 0x3e, 0x7a, 0x20, 0x24, 0xa5, + 0x71, 0x4c, 0xd3, 0x2e, 0xd0, 0x94, 0x3d, 0x80, 0xea, 0x53, 0xcc, 0xd5, 0x5c, 0x49, 0xd3, 0xb7, + 0x0e, 0x4b, 0x32, 0x70, 0x55, 0x71, 0x2b, 0x8e, 0xa6, 0xac, 0xfb, 0x50, 0x0e, 0x22, 0x2f, 0x4c, + 0x7c, 0xec, 0x0e, 0x02, 0x7c, 0xc9, 0xa4, 0x89, 0x65, 0xa7, 0xa4, 0xc1, 0xd7, 0x02, 0xb3, 0x3e, + 0x86, 0x0a, 0xbe, 0x52, 0x4c, 0x5a, 0x89, 0x7a, 0x90, 0xca, 0x1a, 0x95, 0x03, 0x9a, 0xd9, 0x18, + 0x6a, 0x86, 0x5d, 0x1d, 0xdd, 0x29, 0xd4, 0xd4, 0x64, 0x34, 0x86, 0xfd, 0x4d, 0xa6, 0x6d, 0x95, + 0x4d, 0x20, 0x76, 0x13, 0xd6, 0x9e, 0x62, 0x6e, 0x94, 0xb0, 0x8e, 0xd1, 0xfe, 0x11, 0xd6, 0x27, + 0x0f, 0xb4, 0x13, 0x7f, 0x80, 0x62, 0xb6, 0xe9, 0x84, 0xf9, 0xad, 0x19, 0xe6, 0x4d, 0x61, 0x53, + 0xc4, 0x6e, 0x80, 0x75, 0x86, 0xb9, 0x83, 0x91, 0xff, 0x22, 0x0a, 0x87, 0xa9, 0xc5, 0x35, 0xa8, + 0x67, 0x50, 0x5d, 0xc2, 0x63, 0xf8, 0x0d, 0x0d, 0x38, 0x4e, 0xb9, 0xd7, 0xa1, 0x91, 0x85, 0x35, + 0xfb, 0x37, 0x50, 0x53, 0x8f, 0xd3, 0xcb, 0x61, 0x9c, 0x32, 0x5b, 0xbf, 0x85, 0xa2, 0x72, 0xcf, + 0x95, 0x4f, 0xb7, 0x70, 0xb9, 0xb2, 0xd7, 0x68, 0x8f, 0x36, 0x11, 0x99, 0x73, 0x2e, 0x25, 0x80, + 0x8f, 0xbe, 0x85, 0x9f, 0xa6, 0xae, 0xb1, 0x43, 0x0e, 0x3e, 0xa7, 0x98, 0xf5, 0x44, 0x49, 0x99, + 0x0e, 0x65, 0x61, 0xcd, 0xde, 0x84, 0x35, 0x27, 0x89, 0x9e, 0x61, 0x14, 0xf2, 0x9e, 0x7c, 0x38, + 0x52, 0x81, 0x16, 0xac, 0x4f, 0x1e, 0x68, 0x91, 0xcf, 0xa1, 0xf5, 0xbc, 0x1b, 0x11, 0x8a, 0xd5, + 0xe1, 0x11, 0xa5, 0x84, 0x66, 0x46, 0x0a, 0xe7, 0x98, 0x46, 0xe3, 0x41, 0x21, 0x49, 0xfb, 0x2e, + 0x6c, 0xcc, 0x90, 0xd2, 0x2a, 0xbf, 0x12, 0x4e, 0x8b, 0x79, 0x92, 0xad, 0xe4, 0xfb, 0x50, 0xbe, + 0x44, 0x01, 0x77, 0x63, 0xc2, 0xc6, 0xc5, 0xb4, 0xe2, 0x94, 0x04, 0x78, 0xaa, 0x31, 0x15, 0x99, + 0x29, 0xab, 0x75, 0xee, 0xc1, 0xfa, 0x29, 0xc5, 0xe7, 0x61, 0xd0, 0xed, 0x4d, 0x34, 0x88, 0xd8, + 0xb6, 0x64, 0xe2, 0xd2, 0x0e, 0x49, 0x49, 0xbb, 0x0b, 0xcd, 0x29, 0x19, 0x5d, 0x57, 0x27, 0x50, + 0x51, 0x5c, 0x2e, 0x95, 0x7b, 0x45, 0x3a, 0xcf, 0x3f, 0x9e, 0x5b, 0xd9, 0xe6, 0x16, 0xe2, 0x94, + 0x3d, 0x83, 0x62, 0xf6, 0x7f, 0x73, 0x60, 0xed, 0xc7, 0x71, 0x38, 0xcc, 0x7a, 0x56, 0x85, 0x02, + 0x7b, 0x1b, 0xa6, 0x23, 0x86, 0xbd, 0x0d, 0xc5, 0x88, 0x39, 0x27, 0xd4, 0xc3, 0xba, 0x59, 0x15, + 0x21, 0xd6, 0x00, 0x14, 0x86, 0xe4, 0xd2, 0x35, 0xb6, 0x53, 0x39, 0x19, 0x96, 0x9d, 0xaa, 0x3c, + 0x70, 0xc6, 0xf8, 0xf4, 0x02, 0xb4, 0xf0, 0xa1, 0x16, 0xa0, 0xc5, 0x5b, 0x2e, 0x40, 0xff, 0xc8, + 0x41, 0x3d, 0x13, 0xbd, 0xce, 0xf1, 0xcf, 0x6f, 0x55, 0xab, 0x43, 0xed, 0x84, 0x78, 0x17, 0x6a, + 0xea, 0xa5, 0xad, 0xd1, 0x00, 0xcb, 0x04, 0xc7, 0x8d, 0xf7, 0x2a, 0x0a, 0xa7, 0x98, 0xd7, 0xa1, + 0x91, 0x85, 0x35, 0xfb, 0x3f, 0x73, 0xd0, 0xd2, 0x4f, 0xc4, 0x31, 0xe6, 0x5e, 0x6f, 0x9f, 0x1d, + 0x76, 0x46, 0x75, 0xd0, 0x80, 0x45, 0xf9, 0xa3, 0x44, 0x26, 0xa0, 0xe4, 0x28, 0xc2, 0x6a, 0xc2, + 0x1d, 0xbf, 0xe3, 0xca, 0xa7, 0x51, 0xbf, 0x0e, 0x7e, 0xe7, 0x7b, 0xf1, 0x38, 0x6e, 0xc0, 0x72, + 0x1f, 0x5d, 0xb9, 0x94, 0x5c, 0x32, 0xbd, 0x0c, 0xde, 0xe9, 0xa3, 0x2b, 0x87, 0x5c, 0x32, 0xb9, + 0xa8, 0x07, 0x4c, 0x6e, 0xe0, 0x9d, 0x20, 0x0a, 0x49, 0x97, 0xc9, 0xeb, 0x5f, 0x76, 0x2a, 0x1a, + 0x7e, 0xa2, 0x50, 0xd1, 0x6b, 0x54, 0xb6, 0x91, 0x79, 0xb9, 0xcb, 0x4e, 0x89, 0x1a, 0xbd, 0x65, + 0x3f, 0x85, 0x8d, 0x19, 0x3e, 0xeb, 0xdb, 0x7b, 0x04, 0x4b, 0xaa, 0x35, 0xf4, 0xb5, 0x59, 0x6d, + 0xf5, 0xc3, 0xea, 0x07, 0xf1, 0xaf, 0x6e, 0x03, 0xcd, 0x61, 0xff, 0x39, 0x07, 0x1f, 0x65, 0x35, + 0xed, 0x87, 0xa1, 0x58, 0xc0, 0xd8, 0x87, 0x4f, 0xc1, 0x54, 0x64, 0x0b, 0x33, 0x22, 0x3b, 0x81, + 0xad, 0x79, 0xfe, 0xdc, 0x22, 0xbc, 0x6f, 0x27, 0xef, 0x76, 0x3f, 0x8e, 0xdf, 0x1d, 0x98, 0xe9, + 0x7f, 0x3e, 0xe3, 0xff, 0x74, 0xd2, 0xa5, 0xb2, 0x5b, 0x78, 0x25, 0x1e, 0xb6, 0x10, 0x0d, 0xb0, + 0xda, 0x35, 0xd2, 0x02, 0x3d, 0x86, 0x7a, 0x06, 0xd5, 0x8a, 0x77, 0xc5, 0xc6, 0x31, 0xda, 0x52, + 0x8a, 0x7b, 0xcd, 0xf6, 0xe4, 0x2f, 0x61, 0x2d, 0xa0, 0xd9, 0xc4, 0x4b, 0xf2, 0x1d, 0x62, 0x1c, + 0xd3, 0x74, 0x32, 0xa7, 0x06, 0x3e, 0x87, 0xf5, 0xc9, 0x03, 0x6d, 0x63, 0x13, 0x96, 0x27, 0x46, + 0xfb, 0x88, 0xb6, 0x2d, 0xa8, 0x9e, 0x71, 0x12, 0x4b, 0xd7, 0x52, 0x4d, 0x75, 0xa8, 0x19, 0x98, + 0x6e, 0xa4, 0x3f, 0x42, 0x73, 0x04, 0x7e, 0x17, 0x44, 0x41, 0x3f, 0xe9, 0x1b, 0xcb, 0xe8, 0x3c, + 0xfd, 0xd6, 0x3d, 0x90, 0xcf, 0x88, 0xcb, 0x83, 0x3e, 0x4e, 0xf7, 0xad, 0x82, 0x53, 0x14, 0xd8, + 0x4b, 0x05, 0xd9, 0x5f, 0x40, 0x6b, 0x5a, 0xf3, 0x35, 0x5c, 0x97, 0x6e, 0x22, 0xca, 0x33, 0xbe, + 0x8b, 0xe4, 0x1b, 0xa0, 0x76, 0xfe, 0x4f, 0x70, 0x77, 0x8c, 0xbe, 0x8a, 0x78, 0x10, 0xee, 0x8b, + 0xe9, 0xf3, 0x81, 0x02, 0xd8, 0x82, 0x5f, 0xcc, 0xd6, 0xae, 0xad, 0x1f, 0xc2, 0x3d, 0xb5, 0x5b, + 0x1c, 0x5d, 0x89, 0x37, 0x1a, 0x85, 0x62, 0xb1, 0x89, 0x11, 0xc5, 0x11, 0xc7, 0x7e, 0xea, 0x83, + 0xdc, 0x59, 0xd5, 0xb1, 0x1b, 0xa4, 0xfb, 0x3f, 0xa4, 0xd0, 0x73, 0xdf, 0x7e, 0x00, 0xf6, 0xbb, + 0xb4, 0x68, 0x5b, 0x3b, 0xb0, 0x35, 0xc9, 0x75, 0x14, 0x62, 0x6f, 0x6c, 0xc8, 0xbe, 0x07, 0xdb, + 0x73, 0x39, 0xb4, 0x12, 0x4b, 0xad, 0xbb, 0x22, 0x9c, 0x51, 0xfd, 0xfe, 0x4a, 0xad, 0xa2, 0x1a, + 0xd3, 0xd7, 0xd3, 0x80, 0x45, 0xe4, 0xfb, 0x34, 0x7d, 0xe0, 0x15, 0x61, 0x6f, 0x40, 0xd3, 0xc1, + 0x4c, 0xec, 0x65, 0xa3, 0x4a, 0x4e, 0xb5, 0x6c, 0x42, 0x6b, 0xfa, 0x48, 0x5b, 0xdd, 0x85, 0xe6, + 0x6b, 0x03, 0x17, 0xcd, 0x38, 0xb3, 0x99, 0x57, 0x74, 0x33, 0xdb, 0xc7, 0xd0, 0x9a, 0x16, 0xb8, + 0xd5, 0x18, 0xf9, 0xc8, 0xd4, 0xf3, 0x06, 0x05, 0xfc, 0x98, 0x88, 0x36, 0x4a, 0xcd, 0x57, 0x20, + 0xaf, 0xaf, 0xa4, 0xe0, 0xe4, 0x03, 0x3f, 0x53, 0x2f, 0xf9, 0x89, 0xaa, 0xdc, 0x81, 0xad, 0x79, + 0xca, 0x74, 0x9c, 0x75, 0xa8, 0x3d, 0x8f, 0x02, 0xae, 0x9a, 0x35, 0x4d, 0xcc, 0xa7, 0x60, 0x99, + 0xe0, 0x35, 0xca, 0xff, 0xa7, 0x1c, 0x6c, 0x9d, 0x92, 0x38, 0x09, 0xe5, 0x9e, 0xa9, 0x0a, 0xe1, + 0x1b, 0x92, 0x88, 0x1b, 0x4d, 0xfd, 0xfe, 0x25, 0xac, 0x8a, 0xb2, 0x75, 0x3d, 0x8a, 0x11, 0xc7, + 0xbe, 0x1b, 0xa5, 0xbf, 0x85, 0xca, 0x02, 0x3e, 0x50, 0xe8, 0xf7, 0x4c, 0xd4, 0x1e, 0xf2, 0x84, + 0x52, 0x73, 0xe4, 0x83, 0x82, 0xe4, 0xd8, 0xff, 0x12, 0x4a, 0x7d, 0xe9, 0x99, 0x8b, 0xc2, 0x00, + 0xa9, 0xd1, 0x5f, 0xdc, 0x5b, 0x9b, 0xdc, 0x9d, 0xf7, 0xc5, 0xa1, 0x53, 0x54, 0xac, 0x92, 0xb0, + 0x1e, 0x43, 0xc3, 0x18, 0x68, 0xe3, 0x15, 0x73, 0x41, 0xda, 0xa8, 0x1b, 0x67, 0xa3, 0x4d, 0xf3, + 0x1e, 0x6c, 0xcf, 0x8d, 0x4b, 0xa7, 0xf0, 0xaf, 0x39, 0xa8, 0x8a, 0x74, 0x99, 0xad, 0x6f, 0xfd, + 0x06, 0x96, 0x14, 0xb7, 0xbe, 0xf2, 0x39, 0xee, 0x69, 0xa6, 0xb9, 0x9e, 0xe5, 0xe7, 0x7a, 0x36, + 0x2b, 0x9f, 0x85, 0x19, 0xf9, 0x4c, 0x6f, 0x38, 0x3b, 0x83, 0xd6, 0xa0, 0x7e, 0x88, 0xfb, 0x84, + 0xe3, 0xec, 0xc5, 0xef, 0x41, 0x23, 0x0b, 0x5f, 0xe3, 0xea, 0xbf, 0x86, 0xed, 0x53, 0x4a, 0x84, + 0x90, 0x34, 0xf1, 0xa6, 0x87, 0xa3, 0x03, 0x94, 0x74, 0x7b, 0xfc, 0x55, 0x7c, 0x8d, 0x91, 0x66, + 0xff, 0x1e, 0x76, 0xe6, 0x8b, 0x5f, 0xc3, 0xfc, 0x06, 0x34, 0x95, 0x20, 0x62, 0x5a, 0x8f, 0x6f, + 0xf4, 0xf7, 0xf4, 0x91, 0x4e, 0xc0, 0x5f, 0x72, 0x50, 0x3d, 0xc3, 0xd9, 0xba, 0xbf, 0xe9, 0xa5, + 0xcd, 0xb8, 0x81, 0xfc, 0xac, 0x8a, 0x7e, 0x04, 0x35, 0xb9, 0xc2, 0xbb, 0x4c, 0x0c, 0x66, 0x97, + 0x09, 0x9f, 0xf4, 0xe6, 0xbe, 0x2a, 0x0f, 0xc6, 0x03, 0x5b, 0xbe, 0x23, 0x78, 0xa2, 0xf3, 0xec, + 0xe7, 0xe3, 0x40, 0x1c, 0x2c, 0x95, 0x8c, 0x47, 0xf5, 0xcd, 0x7c, 0x16, 0x3f, 0xc9, 0x66, 0xa8, + 0xd2, 0x76, 0x1e, 0x80, 0x2d, 0x1e, 0x3f, 0x63, 0x62, 0xec, 0x47, 0xbe, 0x18, 0xb4, 0x99, 0xe5, + 0xe1, 0x35, 0xdc, 0x7f, 0x27, 0xd7, 0x6d, 0x97, 0x89, 0x35, 0xa8, 0x9b, 0x95, 0x60, 0xd4, 0x64, + 0x16, 0xbe, 0x46, 0x51, 0x3c, 0x86, 0xf2, 0x13, 0xe4, 0x5d, 0x24, 0xa3, 0x0a, 0xdc, 0x81, 0xa2, + 0x47, 0x22, 0x2f, 0xa1, 0x14, 0x47, 0xde, 0x50, 0x0f, 0x1e, 0x13, 0xb2, 0xbf, 0x80, 0x4a, 0x2a, + 0xa2, 0x0d, 0x3c, 0x80, 0x45, 0x3c, 0x18, 0x27, 0xb6, 0xd2, 0x4e, 0xff, 0xff, 0xff, 0x48, 0xa0, + 0x8e, 0x3a, 0xd4, 0x8f, 0x08, 0x27, 0x14, 0x1f, 0x53, 0xd2, 0xcf, 0x58, 0xb5, 0xf7, 0x61, 0x63, + 0xc6, 0xd9, 0x4d, 0xd4, 0x3f, 0xf9, 0xf4, 0xc7, 0xf6, 0x20, 0xe0, 0x98, 0xb1, 0x76, 0x40, 0x76, + 0xd5, 0xd7, 0x6e, 0x97, 0xec, 0x0e, 0xf8, 0xae, 0xfc, 0x2b, 0xc4, 0xee, 0xd4, 0x8f, 0x9b, 0xce, + 0x92, 0x3c, 0xf8, 0xec, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x30, 0x7f, 0x51, 0x40, 0x0f, 0x19, + 0x00, 0x00, } diff --git a/go/vt/proto/tabletmanagerservice/tabletmanagerservice.pb.go b/go/vt/proto/tabletmanagerservice/tabletmanagerservice.pb.go index 6153dc90aab..41169028ed6 100644 --- a/go/vt/proto/tabletmanagerservice/tabletmanagerservice.pb.go +++ b/go/vt/proto/tabletmanagerservice/tabletmanagerservice.pb.go @@ -56,6 +56,8 @@ type TabletManagerClient interface { ReloadSchema(ctx context.Context, in *tabletmanagerdata.ReloadSchemaRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ReloadSchemaResponse, error) PreflightSchema(ctx context.Context, in *tabletmanagerdata.PreflightSchemaRequest, opts ...grpc.CallOption) (*tabletmanagerdata.PreflightSchemaResponse, error) ApplySchema(ctx context.Context, in *tabletmanagerdata.ApplySchemaRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ApplySchemaResponse, error) + LockTables(ctx context.Context, in *tabletmanagerdata.LockTablesRequest, opts ...grpc.CallOption) (*tabletmanagerdata.LockTablesResponse, error) + UnlockTables(ctx context.Context, in *tabletmanagerdata.UnlockTablesRequest, opts ...grpc.CallOption) (*tabletmanagerdata.UnlockTablesResponse, error) ExecuteFetchAsDba(ctx context.Context, in *tabletmanagerdata.ExecuteFetchAsDbaRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ExecuteFetchAsDbaResponse, error) ExecuteFetchAsAllPrivs(ctx context.Context, in *tabletmanagerdata.ExecuteFetchAsAllPrivsRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ExecuteFetchAsAllPrivsResponse, error) ExecuteFetchAsApp(ctx context.Context, in *tabletmanagerdata.ExecuteFetchAsAppRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ExecuteFetchAsAppResponse, error) @@ -70,6 +72,9 @@ type TabletManagerClient interface { StopSlaveMinimum(ctx context.Context, in *tabletmanagerdata.StopSlaveMinimumRequest, opts ...grpc.CallOption) (*tabletmanagerdata.StopSlaveMinimumResponse, error) // StartSlave starts the mysql replication StartSlave(ctx context.Context, in *tabletmanagerdata.StartSlaveRequest, opts ...grpc.CallOption) (*tabletmanagerdata.StartSlaveResponse, error) + // StartSlave starts the mysql replication until and including + // the provided position + StartSlaveUntilAfter(ctx context.Context, in *tabletmanagerdata.StartSlaveUntilAfterRequest, opts ...grpc.CallOption) (*tabletmanagerdata.StartSlaveUntilAfterResponse, error) // TabletExternallyReparented tells a tablet that its underlying MySQL is // currently the master. It is only used in environments (tabletmanagerdata.such as Vitess+MoB) // in which MySQL is reparented by some agent external to Vitess, and then @@ -265,6 +270,24 @@ func (c *tabletManagerClient) ApplySchema(ctx context.Context, in *tabletmanager return out, nil } +func (c *tabletManagerClient) LockTables(ctx context.Context, in *tabletmanagerdata.LockTablesRequest, opts ...grpc.CallOption) (*tabletmanagerdata.LockTablesResponse, error) { + out := new(tabletmanagerdata.LockTablesResponse) + err := c.cc.Invoke(ctx, "/tabletmanagerservice.TabletManager/LockTables", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *tabletManagerClient) UnlockTables(ctx context.Context, in *tabletmanagerdata.UnlockTablesRequest, opts ...grpc.CallOption) (*tabletmanagerdata.UnlockTablesResponse, error) { + out := new(tabletmanagerdata.UnlockTablesResponse) + err := c.cc.Invoke(ctx, "/tabletmanagerservice.TabletManager/UnlockTables", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *tabletManagerClient) ExecuteFetchAsDba(ctx context.Context, in *tabletmanagerdata.ExecuteFetchAsDbaRequest, opts ...grpc.CallOption) (*tabletmanagerdata.ExecuteFetchAsDbaResponse, error) { out := new(tabletmanagerdata.ExecuteFetchAsDbaResponse) err := c.cc.Invoke(ctx, "/tabletmanagerservice.TabletManager/ExecuteFetchAsDba", in, out, opts...) @@ -337,6 +360,15 @@ func (c *tabletManagerClient) StartSlave(ctx context.Context, in *tabletmanagerd return out, nil } +func (c *tabletManagerClient) StartSlaveUntilAfter(ctx context.Context, in *tabletmanagerdata.StartSlaveUntilAfterRequest, opts ...grpc.CallOption) (*tabletmanagerdata.StartSlaveUntilAfterResponse, error) { + out := new(tabletmanagerdata.StartSlaveUntilAfterResponse) + err := c.cc.Invoke(ctx, "/tabletmanagerservice.TabletManager/StartSlaveUntilAfter", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *tabletManagerClient) TabletExternallyReparented(ctx context.Context, in *tabletmanagerdata.TabletExternallyReparentedRequest, opts ...grpc.CallOption) (*tabletmanagerdata.TabletExternallyReparentedResponse, error) { out := new(tabletmanagerdata.TabletExternallyReparentedResponse) err := c.cc.Invoke(ctx, "/tabletmanagerservice.TabletManager/TabletExternallyReparented", in, out, opts...) @@ -567,6 +599,8 @@ type TabletManagerServer interface { ReloadSchema(context.Context, *tabletmanagerdata.ReloadSchemaRequest) (*tabletmanagerdata.ReloadSchemaResponse, error) PreflightSchema(context.Context, *tabletmanagerdata.PreflightSchemaRequest) (*tabletmanagerdata.PreflightSchemaResponse, error) ApplySchema(context.Context, *tabletmanagerdata.ApplySchemaRequest) (*tabletmanagerdata.ApplySchemaResponse, error) + LockTables(context.Context, *tabletmanagerdata.LockTablesRequest) (*tabletmanagerdata.LockTablesResponse, error) + UnlockTables(context.Context, *tabletmanagerdata.UnlockTablesRequest) (*tabletmanagerdata.UnlockTablesResponse, error) ExecuteFetchAsDba(context.Context, *tabletmanagerdata.ExecuteFetchAsDbaRequest) (*tabletmanagerdata.ExecuteFetchAsDbaResponse, error) ExecuteFetchAsAllPrivs(context.Context, *tabletmanagerdata.ExecuteFetchAsAllPrivsRequest) (*tabletmanagerdata.ExecuteFetchAsAllPrivsResponse, error) ExecuteFetchAsApp(context.Context, *tabletmanagerdata.ExecuteFetchAsAppRequest) (*tabletmanagerdata.ExecuteFetchAsAppResponse, error) @@ -581,6 +615,9 @@ type TabletManagerServer interface { StopSlaveMinimum(context.Context, *tabletmanagerdata.StopSlaveMinimumRequest) (*tabletmanagerdata.StopSlaveMinimumResponse, error) // StartSlave starts the mysql replication StartSlave(context.Context, *tabletmanagerdata.StartSlaveRequest) (*tabletmanagerdata.StartSlaveResponse, error) + // StartSlave starts the mysql replication until and including + // the provided position + StartSlaveUntilAfter(context.Context, *tabletmanagerdata.StartSlaveUntilAfterRequest) (*tabletmanagerdata.StartSlaveUntilAfterResponse, error) // TabletExternallyReparented tells a tablet that its underlying MySQL is // currently the master. It is only used in environments (tabletmanagerdata.such as Vitess+MoB) // in which MySQL is reparented by some agent external to Vitess, and then @@ -898,6 +935,42 @@ func _TabletManager_ApplySchema_Handler(srv interface{}, ctx context.Context, de return interceptor(ctx, in, info, handler) } +func _TabletManager_LockTables_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(tabletmanagerdata.LockTablesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TabletManagerServer).LockTables(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/tabletmanagerservice.TabletManager/LockTables", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TabletManagerServer).LockTables(ctx, req.(*tabletmanagerdata.LockTablesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TabletManager_UnlockTables_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(tabletmanagerdata.UnlockTablesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TabletManagerServer).UnlockTables(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/tabletmanagerservice.TabletManager/UnlockTables", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TabletManagerServer).UnlockTables(ctx, req.(*tabletmanagerdata.UnlockTablesRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _TabletManager_ExecuteFetchAsDba_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(tabletmanagerdata.ExecuteFetchAsDbaRequest) if err := dec(in); err != nil { @@ -1042,6 +1115,24 @@ func _TabletManager_StartSlave_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } +func _TabletManager_StartSlaveUntilAfter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(tabletmanagerdata.StartSlaveUntilAfterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TabletManagerServer).StartSlaveUntilAfter(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/tabletmanagerservice.TabletManager/StartSlaveUntilAfter", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TabletManagerServer).StartSlaveUntilAfter(ctx, req.(*tabletmanagerdata.StartSlaveUntilAfterRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _TabletManager_TabletExternallyReparented_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(tabletmanagerdata.TabletExternallyReparentedRequest) if err := dec(in); err != nil { @@ -1432,6 +1523,14 @@ var _TabletManager_serviceDesc = grpc.ServiceDesc{ MethodName: "ApplySchema", Handler: _TabletManager_ApplySchema_Handler, }, + { + MethodName: "LockTables", + Handler: _TabletManager_LockTables_Handler, + }, + { + MethodName: "UnlockTables", + Handler: _TabletManager_UnlockTables_Handler, + }, { MethodName: "ExecuteFetchAsDba", Handler: _TabletManager_ExecuteFetchAsDba_Handler, @@ -1464,6 +1563,10 @@ var _TabletManager_serviceDesc = grpc.ServiceDesc{ MethodName: "StartSlave", Handler: _TabletManager_StartSlave_Handler, }, + { + MethodName: "StartSlaveUntilAfter", + Handler: _TabletManager_StartSlaveUntilAfter_Handler, + }, { MethodName: "TabletExternallyReparented", Handler: _TabletManager_TabletExternallyReparented_Handler, @@ -1545,69 +1648,73 @@ var _TabletManager_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("tabletmanagerservice.proto", fileDescriptor_tabletmanagerservice_f4d7827db0506c7d) -} - -var fileDescriptor_tabletmanagerservice_f4d7827db0506c7d = []byte{ - // 956 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x98, 0xdf, 0x8f, 0x1b, 0x35, - 0x10, 0xc7, 0x89, 0x04, 0x95, 0x30, 0x3f, 0x6b, 0x21, 0x8a, 0x0e, 0x09, 0x28, 0x6d, 0xf9, 0xd1, - 0xa2, 0x4b, 0xaf, 0x47, 0x79, 0x4f, 0xaf, 0x77, 0xed, 0x21, 0x4e, 0x84, 0xa4, 0x70, 0x08, 0x24, - 0x24, 0x5f, 0x32, 0xcd, 0x2e, 0xb7, 0x59, 0x1b, 0xdb, 0x1b, 0xdd, 0x3d, 0x21, 0x21, 0xf1, 0x84, - 0xc4, 0x1b, 0xff, 0x2f, 0xf2, 0xee, 0xda, 0x19, 0x27, 0xb3, 0x4e, 0xf2, 0x76, 0xca, 0xf7, 0x33, - 0x33, 0xf6, 0x78, 0x66, 0xec, 0x5b, 0xb6, 0x67, 0xc5, 0x45, 0x01, 0x76, 0x2e, 0x4a, 0x31, 0x03, - 0x6d, 0x40, 0x2f, 0xf2, 0x09, 0xec, 0x2b, 0x2d, 0xad, 0xe4, 0xef, 0x51, 0xda, 0xde, 0xad, 0xe8, - 0xd7, 0xa9, 0xb0, 0xa2, 0xc1, 0x1f, 0xfd, 0x77, 0x9b, 0xbd, 0xf5, 0xa2, 0xd6, 0xce, 0x1a, 0x8d, - 0x9f, 0xb2, 0x57, 0x87, 0x79, 0x39, 0xe3, 0x1f, 0xed, 0xaf, 0xdb, 0x38, 0x61, 0x04, 0x7f, 0x54, - 0x60, 0xec, 0xde, 0xc7, 0x9d, 0xba, 0x51, 0xb2, 0x34, 0xf0, 0xe9, 0x2b, 0xfc, 0x3b, 0xf6, 0xda, - 0xb8, 0x00, 0x50, 0x9c, 0x62, 0x6b, 0xc5, 0x3b, 0xfb, 0xa4, 0x1b, 0x08, 0xde, 0x7e, 0x63, 0x6f, - 0x1c, 0x5f, 0xc1, 0xa4, 0xb2, 0xf0, 0x5c, 0xca, 0x4b, 0x7e, 0x8f, 0x30, 0x41, 0xba, 0xf7, 0xfc, - 0xd9, 0x26, 0x2c, 0xf8, 0xff, 0x99, 0xbd, 0xfe, 0x0c, 0xec, 0x78, 0x92, 0xc1, 0x5c, 0xf0, 0x3b, - 0x84, 0x59, 0x50, 0xbd, 0xef, 0xbb, 0x69, 0x28, 0x78, 0x9e, 0xb1, 0xb7, 0x9f, 0x81, 0x1d, 0x82, - 0x9e, 0xe7, 0xc6, 0xe4, 0xb2, 0x34, 0xfc, 0x0b, 0xda, 0x12, 0x21, 0x3e, 0xc6, 0x97, 0x5b, 0x90, - 0x38, 0x45, 0x63, 0xb0, 0x23, 0x10, 0xd3, 0xef, 0xcb, 0xe2, 0x9a, 0x4c, 0x11, 0xd2, 0x53, 0x29, - 0x8a, 0xb0, 0xe0, 0x5f, 0xb0, 0x37, 0x5b, 0xe1, 0x5c, 0xe7, 0x16, 0x78, 0xc2, 0xb2, 0x06, 0x7c, - 0x84, 0xcf, 0x37, 0x72, 0x21, 0xc4, 0xaf, 0x8c, 0x1d, 0x65, 0xa2, 0x9c, 0xc1, 0x8b, 0x6b, 0x05, - 0x9c, 0xca, 0xf0, 0x52, 0xf6, 0xee, 0xef, 0x6d, 0xa0, 0xf0, 0xfa, 0x47, 0xf0, 0x52, 0x83, 0xc9, - 0xc6, 0x56, 0x74, 0xac, 0x1f, 0x03, 0xa9, 0xf5, 0xc7, 0x1c, 0x3e, 0xeb, 0x51, 0x55, 0x3e, 0x07, - 0x51, 0xd8, 0xec, 0x28, 0x83, 0xc9, 0x25, 0x79, 0xd6, 0x31, 0x92, 0x3a, 0xeb, 0x55, 0x32, 0x04, - 0x52, 0xec, 0xe6, 0xe9, 0xac, 0x94, 0x1a, 0x1a, 0xf9, 0x58, 0x6b, 0xa9, 0xf9, 0x03, 0xc2, 0xc3, - 0x1a, 0xe5, 0xc3, 0x7d, 0xb5, 0x1d, 0x1c, 0x67, 0xaf, 0x90, 0x62, 0xda, 0xf6, 0x08, 0x9d, 0xbd, - 0x25, 0x90, 0xce, 0x1e, 0xe6, 0x42, 0x88, 0xdf, 0xd9, 0x3b, 0x43, 0x0d, 0x2f, 0x8b, 0x7c, 0x96, - 0xf9, 0x4e, 0xa4, 0x92, 0xb2, 0xc2, 0xf8, 0x40, 0xf7, 0xb7, 0x41, 0x71, 0xb3, 0x0c, 0x94, 0x2a, - 0xae, 0xdb, 0x38, 0x54, 0x11, 0x21, 0x3d, 0xd5, 0x2c, 0x11, 0x86, 0x0f, 0xa8, 0x1d, 0x34, 0x27, - 0x60, 0x27, 0xd9, 0xc0, 0x3c, 0xbd, 0x10, 0xe4, 0x01, 0xad, 0x51, 0xa9, 0x03, 0x22, 0xe0, 0x10, - 0xf1, 0x4f, 0xf6, 0x7e, 0x2c, 0x0f, 0x8a, 0x62, 0xa8, 0xf3, 0x85, 0xe1, 0x0f, 0x37, 0x7a, 0xf2, - 0xa8, 0x8f, 0x7d, 0xb0, 0x83, 0x45, 0xf7, 0x96, 0x07, 0x4a, 0x6d, 0xb1, 0xe5, 0x81, 0x52, 0xdb, - 0x6f, 0xb9, 0x86, 0xa3, 0x89, 0x57, 0x88, 0x05, 0xb8, 0x36, 0xac, 0x0c, 0x3d, 0xf1, 0x96, 0x7a, - 0x72, 0xe2, 0x61, 0x0c, 0xb7, 0xf3, 0x99, 0x30, 0x16, 0xf4, 0x50, 0x9a, 0xdc, 0xe6, 0xb2, 0x24, - 0xdb, 0x39, 0x46, 0x52, 0xed, 0xbc, 0x4a, 0xe2, 0xdb, 0x67, 0x6c, 0xa5, 0xaa, 0x57, 0x41, 0xde, - 0x3e, 0x41, 0x4d, 0xdd, 0x3e, 0x08, 0x0a, 0x9e, 0xe7, 0xec, 0xdd, 0xf0, 0xf3, 0x59, 0x5e, 0xe6, - 0xf3, 0x6a, 0xce, 0xef, 0xa7, 0x6c, 0x5b, 0xc8, 0xc7, 0x79, 0xb0, 0x15, 0x8b, 0x07, 0xf8, 0xd8, - 0x0a, 0x6d, 0x9b, 0x9d, 0xd0, 0x8b, 0xf4, 0x72, 0x6a, 0x80, 0x63, 0x2a, 0x38, 0xff, 0xa7, 0xc7, - 0xf6, 0x9a, 0xe7, 0xca, 0xf1, 0x95, 0x05, 0x5d, 0x8a, 0xc2, 0xdd, 0x4f, 0x4a, 0x68, 0x28, 0x2d, - 0x4c, 0xf9, 0xd7, 0x84, 0x9f, 0x6e, 0xdc, 0x47, 0x7f, 0xbc, 0xa3, 0x55, 0x58, 0xcd, 0x5f, 0x3d, - 0x76, 0x6b, 0x15, 0x3c, 0x2e, 0x60, 0xe2, 0x96, 0x72, 0xb0, 0x85, 0xd3, 0x96, 0xf5, 0xeb, 0x78, - 0xb4, 0x8b, 0xc9, 0xea, 0xb3, 0xc5, 0x25, 0xca, 0x74, 0x3e, 0x5b, 0x6a, 0x75, 0xd3, 0xb3, 0xa5, - 0x85, 0x70, 0xe1, 0xfc, 0x34, 0x02, 0x55, 0xe4, 0x13, 0xe1, 0x8a, 0xd5, 0xb5, 0x21, 0x59, 0x38, - 0xab, 0x50, 0xaa, 0x70, 0xd6, 0x59, 0x3c, 0xbd, 0xb0, 0x7a, 0x2e, 0x72, 0x7b, 0x22, 0x5d, 0xab, - 0x90, 0xd3, 0x8b, 0x46, 0x53, 0xd3, 0xab, 0xcb, 0x02, 0xef, 0x77, 0x04, 0xc6, 0x3d, 0x4b, 0x02, - 0x47, 0xee, 0x77, 0x15, 0x4a, 0xed, 0x77, 0x9d, 0xc5, 0x8d, 0x72, 0x5a, 0xe6, 0xb6, 0x99, 0x08, - 0x64, 0xa3, 0x2c, 0xe5, 0x54, 0xa3, 0x60, 0x2a, 0x2a, 0xcd, 0xa1, 0x54, 0x55, 0x51, 0xbf, 0x4e, - 0x9a, 0xda, 0xfd, 0x56, 0x56, 0xae, 0x88, 0xc8, 0xd2, 0xec, 0x60, 0x53, 0xa5, 0xd9, 0x69, 0x82, - 0x4b, 0xd3, 0x2d, 0xae, 0x7b, 0xa6, 0x05, 0x35, 0x55, 0x9a, 0x08, 0xc2, 0x4f, 0x91, 0xa7, 0x30, - 0x97, 0x16, 0xda, 0xec, 0x51, 0x03, 0x1d, 0x03, 0xa9, 0xa7, 0x48, 0xcc, 0x85, 0x10, 0x7f, 0xf7, - 0xd8, 0x07, 0x43, 0x2d, 0x9d, 0x56, 0x47, 0x3f, 0xcf, 0xa0, 0x3c, 0x12, 0xd5, 0x2c, 0xb3, 0x3f, - 0x2a, 0x4e, 0xe6, 0xa3, 0x03, 0xf6, 0xb1, 0x0f, 0x77, 0xb2, 0x89, 0xc6, 0x77, 0x2d, 0x0b, 0xd3, - 0xd2, 0x53, 0x7a, 0x7c, 0xaf, 0x40, 0xc9, 0xf1, 0xbd, 0xc6, 0x46, 0xf7, 0x10, 0xf8, 0xa2, 0xbc, - 0x43, 0xbf, 0xdb, 0xe3, 0x9c, 0xde, 0x4d, 0x43, 0xf8, 0x71, 0xe0, 0xe3, 0x8e, 0xc0, 0xb8, 0xe9, - 0x0e, 0x53, 0x9e, 0x5a, 0x5d, 0xa0, 0x52, 0x8f, 0x03, 0x02, 0x0e, 0x11, 0xff, 0xed, 0xb1, 0x0f, - 0xdd, 0x4d, 0x85, 0xfa, 0x6f, 0x50, 0x4e, 0xdd, 0xa8, 0x6b, 0x5e, 0x0b, 0x8f, 0x3b, 0x6e, 0xb6, - 0x0e, 0xde, 0x2f, 0xe3, 0x9b, 0x5d, 0xcd, 0x70, 0xd9, 0xe2, 0x13, 0x27, 0xcb, 0x16, 0x03, 0xa9, - 0xb2, 0x8d, 0xb9, 0x10, 0xe2, 0x07, 0x76, 0xe3, 0x89, 0x98, 0x5c, 0x56, 0x8a, 0x53, 0xff, 0x53, - 0x37, 0x92, 0x77, 0x7b, 0x3b, 0x41, 0x78, 0x87, 0x0f, 0x7b, 0x5c, 0xb3, 0x9b, 0x2e, 0xbb, 0x52, - 0xc3, 0x89, 0x96, 0xf3, 0xd6, 0x7b, 0xc7, 0xb0, 0x8b, 0xa9, 0xd4, 0xc1, 0x11, 0xf0, 0x32, 0xe6, - 0x93, 0xc3, 0x5f, 0x0e, 0x16, 0xb9, 0x05, 0x63, 0xf6, 0x73, 0xd9, 0x6f, 0xfe, 0xea, 0xcf, 0x64, - 0x7f, 0x61, 0xfb, 0xf5, 0x77, 0x8b, 0x3e, 0xf5, 0x95, 0xe3, 0xe2, 0x46, 0xad, 0x1d, 0xfe, 0x1f, - 0x00, 0x00, 0xff, 0xff, 0x2e, 0xeb, 0x66, 0x65, 0x20, 0x11, 0x00, 0x00, + proto.RegisterFile("tabletmanagerservice.proto", fileDescriptor_tabletmanagerservice_d0dfb5502bc9cb1c) +} + +var fileDescriptor_tabletmanagerservice_d0dfb5502bc9cb1c = []byte{ + // 1012 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x98, 0x5b, 0x6f, 0x1b, 0x45, + 0x14, 0xc7, 0xb1, 0x04, 0x95, 0x18, 0xae, 0x1d, 0x55, 0x14, 0x05, 0x89, 0x5b, 0x5a, 0x2e, 0x2d, + 0x8a, 0x9b, 0x86, 0xf2, 0xee, 0xa6, 0x49, 0x1b, 0xd4, 0x08, 0x63, 0x37, 0x04, 0x81, 0x84, 0x34, + 0xb1, 0x4f, 0xbc, 0x4b, 0xd6, 0x3b, 0xc3, 0xcc, 0xac, 0x95, 0x3c, 0x21, 0x21, 0xf1, 0x84, 0xc4, + 0x67, 0xe3, 0x23, 0xa1, 0xbd, 0xcc, 0xec, 0x19, 0xfb, 0xec, 0xd8, 0x7e, 0x8b, 0xfc, 0xff, 0x9d, + 0xcb, 0x9c, 0x39, 0x73, 0x66, 0xb2, 0x6c, 0xc7, 0x8a, 0x8b, 0x0c, 0xec, 0x5c, 0xe4, 0x62, 0x06, + 0xda, 0x80, 0x5e, 0xa4, 0x13, 0xd8, 0x53, 0x5a, 0x5a, 0xc9, 0xef, 0x50, 0xda, 0xce, 0xdd, 0xe0, + 0xd7, 0xa9, 0xb0, 0xa2, 0xc6, 0x1f, 0xff, 0xb7, 0xcb, 0xde, 0x79, 0x55, 0x69, 0xa7, 0xb5, 0xc6, + 0x4f, 0xd8, 0xeb, 0xc3, 0x34, 0x9f, 0xf1, 0x8f, 0xf7, 0x56, 0x6d, 0x4a, 0x61, 0x04, 0x7f, 0x14, + 0x60, 0xec, 0xce, 0x27, 0x9d, 0xba, 0x51, 0x32, 0x37, 0xf0, 0xf9, 0x6b, 0xfc, 0x25, 0x7b, 0x63, + 0x9c, 0x01, 0x28, 0x4e, 0xb1, 0x95, 0xe2, 0x9c, 0x7d, 0xda, 0x0d, 0x78, 0x6f, 0xbf, 0xb1, 0xb7, + 0x8e, 0xae, 0x61, 0x52, 0x58, 0x78, 0x21, 0xe5, 0x15, 0xbf, 0x4f, 0x98, 0x20, 0xdd, 0x79, 0xfe, + 0x62, 0x1d, 0xe6, 0xfd, 0xff, 0xcc, 0xde, 0x7c, 0x0e, 0x76, 0x3c, 0x49, 0x60, 0x2e, 0xf8, 0x2e, + 0x61, 0xe6, 0x55, 0xe7, 0xfb, 0x5e, 0x1c, 0xf2, 0x9e, 0x67, 0xec, 0xdd, 0xe7, 0x60, 0x87, 0xa0, + 0xe7, 0xa9, 0x31, 0xa9, 0xcc, 0x0d, 0xff, 0x8a, 0xb6, 0x44, 0x88, 0x8b, 0xf1, 0xf5, 0x06, 0x24, + 0x2e, 0xd1, 0x18, 0xec, 0x08, 0xc4, 0xf4, 0x87, 0x3c, 0xbb, 0x21, 0x4b, 0x84, 0xf4, 0x58, 0x89, + 0x02, 0xcc, 0xfb, 0x17, 0xec, 0xed, 0x46, 0x38, 0xd7, 0xa9, 0x05, 0x1e, 0xb1, 0xac, 0x00, 0x17, + 0xe1, 0xcb, 0xb5, 0x9c, 0x0f, 0xf1, 0x2b, 0x63, 0x87, 0x89, 0xc8, 0x67, 0xf0, 0xea, 0x46, 0x01, + 0xa7, 0x2a, 0xdc, 0xca, 0xce, 0xfd, 0xfd, 0x35, 0x14, 0xce, 0x7f, 0x04, 0x97, 0x1a, 0x4c, 0x32, + 0xb6, 0xa2, 0x23, 0x7f, 0x0c, 0xc4, 0xf2, 0x0f, 0x39, 0xbc, 0xd7, 0xa3, 0x22, 0x7f, 0x01, 0x22, + 0xb3, 0xc9, 0x61, 0x02, 0x93, 0x2b, 0x72, 0xaf, 0x43, 0x24, 0xb6, 0xd7, 0xcb, 0xa4, 0x0f, 0xa4, + 0xd8, 0xed, 0x93, 0x59, 0x2e, 0x35, 0xd4, 0xf2, 0x91, 0xd6, 0x52, 0xf3, 0x87, 0x84, 0x87, 0x15, + 0xca, 0x85, 0xfb, 0x66, 0x33, 0x38, 0xac, 0x5e, 0x26, 0xc5, 0xb4, 0x39, 0x23, 0x74, 0xf5, 0x5a, + 0x20, 0x5e, 0x3d, 0xcc, 0xf9, 0x10, 0xbf, 0xb3, 0xf7, 0x86, 0x1a, 0x2e, 0xb3, 0x74, 0x96, 0xb8, + 0x93, 0x48, 0x15, 0x65, 0x89, 0x71, 0x81, 0x1e, 0x6c, 0x82, 0xe2, 0xc3, 0x32, 0x50, 0x2a, 0xbb, + 0x69, 0xe2, 0x50, 0x4d, 0x84, 0xf4, 0xd8, 0x61, 0x09, 0x30, 0xdc, 0xc9, 0x2f, 0xe5, 0xe4, 0xaa, + 0x9a, 0xae, 0x86, 0xec, 0xe4, 0x56, 0x8e, 0x75, 0x32, 0xa6, 0xf0, 0x5e, 0x9c, 0xe5, 0x59, 0xeb, + 0x9e, 0x4a, 0x0b, 0x03, 0xb1, 0xbd, 0x08, 0x39, 0xdc, 0x60, 0xcd, 0xa0, 0x3c, 0x06, 0x3b, 0x49, + 0x06, 0xe6, 0xd9, 0x85, 0x20, 0x1b, 0x6c, 0x85, 0x8a, 0x35, 0x18, 0x01, 0xfb, 0x88, 0x7f, 0xb2, + 0x0f, 0x42, 0x79, 0x90, 0x65, 0x43, 0x9d, 0x2e, 0x0c, 0x7f, 0xb4, 0xd6, 0x93, 0x43, 0x5d, 0xec, + 0xfd, 0x2d, 0x2c, 0xba, 0x97, 0x3c, 0x50, 0x6a, 0x83, 0x25, 0x0f, 0x94, 0xda, 0x7c, 0xc9, 0x15, + 0x1c, 0x4c, 0xec, 0x4c, 0x2c, 0xa0, 0x1c, 0x23, 0x85, 0xa1, 0x27, 0x76, 0xab, 0x47, 0x27, 0x36, + 0xc6, 0xf0, 0x38, 0x3a, 0x15, 0xc6, 0x82, 0x1e, 0x4a, 0x93, 0xda, 0x54, 0xe6, 0xe4, 0x38, 0x0a, + 0x91, 0xd8, 0x38, 0x5a, 0x26, 0xf1, 0xed, 0x39, 0xb6, 0x52, 0x55, 0x59, 0x90, 0xb7, 0xa7, 0x57, + 0x63, 0xb7, 0x27, 0x82, 0xbc, 0xe7, 0x39, 0x7b, 0xdf, 0xff, 0x7c, 0x9a, 0xe6, 0xe9, 0xbc, 0x98, + 0xf3, 0x07, 0x31, 0xdb, 0x06, 0x72, 0x71, 0x1e, 0x6e, 0xc4, 0xe2, 0x63, 0x3b, 0xb6, 0x42, 0xdb, + 0x7a, 0x25, 0x74, 0x92, 0x4e, 0x8e, 0x1d, 0x5b, 0x4c, 0x79, 0xe7, 0x37, 0xec, 0x4e, 0xfb, 0xfb, + 0x59, 0x6e, 0xd3, 0x6c, 0x70, 0x69, 0x41, 0xf3, 0xbd, 0xa8, 0x83, 0x16, 0x74, 0x01, 0xfb, 0x1b, + 0xf3, 0x3e, 0xf4, 0x3f, 0x3d, 0xb6, 0x53, 0xbf, 0xf4, 0x8e, 0xae, 0x2d, 0xe8, 0x5c, 0x64, 0xe5, + 0xd5, 0xae, 0x84, 0x86, 0xdc, 0xc2, 0x94, 0x7f, 0x4b, 0x78, 0xec, 0xc6, 0x5d, 0x1e, 0x4f, 0xb6, + 0xb4, 0xf2, 0xd9, 0xfc, 0xd5, 0x63, 0x77, 0x97, 0xc1, 0xa3, 0x0c, 0x26, 0x65, 0x2a, 0xfb, 0x1b, + 0x38, 0x6d, 0x58, 0x97, 0xc7, 0xe3, 0x6d, 0x4c, 0x96, 0x5f, 0x7c, 0x65, 0xc9, 0x4c, 0xe7, 0x8b, + 0xaf, 0x52, 0xd7, 0xbd, 0xf8, 0x1a, 0x08, 0xf7, 0xec, 0x4f, 0x23, 0x50, 0x59, 0x3a, 0x11, 0xe5, + 0x39, 0x29, 0x27, 0x00, 0xd9, 0xb3, 0xcb, 0x50, 0xac, 0x67, 0x57, 0x59, 0x3c, 0x38, 0xb1, 0x7a, + 0x2e, 0x52, 0x7b, 0x2c, 0xcb, 0x53, 0x4a, 0x0e, 0x4e, 0x1a, 0x8d, 0x0d, 0xce, 0x2e, 0x0b, 0xbc, + 0xde, 0x11, 0x98, 0xf2, 0x45, 0xe7, 0x39, 0x72, 0xbd, 0xcb, 0x50, 0x6c, 0xbd, 0xab, 0x2c, 0x3e, + 0xa3, 0x27, 0x79, 0x6a, 0xeb, 0x61, 0x44, 0x9e, 0xd1, 0x56, 0x8e, 0x9d, 0x51, 0x4c, 0x05, 0xad, + 0x39, 0x94, 0xaa, 0xc8, 0xaa, 0x87, 0x5d, 0xdd, 0xbb, 0xdf, 0xcb, 0xa2, 0x6c, 0x22, 0xb2, 0x35, + 0x3b, 0xd8, 0x58, 0x6b, 0x76, 0x9a, 0xe0, 0xd6, 0x2c, 0x93, 0xeb, 0x1e, 0xa7, 0x5e, 0x8d, 0xb5, + 0x26, 0x82, 0xf0, 0xcb, 0xe1, 0x19, 0xcc, 0xa5, 0x85, 0xa6, 0x7a, 0xd4, 0x5d, 0x82, 0x81, 0xd8, + 0xcb, 0x21, 0xe4, 0x7c, 0x88, 0xbf, 0x7b, 0xec, 0xc3, 0xa1, 0x96, 0xa5, 0x56, 0x45, 0x3f, 0x4f, + 0x20, 0x3f, 0x14, 0xc5, 0x2c, 0xb1, 0x67, 0x8a, 0x93, 0xf5, 0xe8, 0x80, 0x5d, 0xec, 0x83, 0xad, + 0x6c, 0x82, 0x9b, 0xa3, 0x92, 0x85, 0x69, 0xe8, 0x29, 0x7d, 0x73, 0x2c, 0x41, 0xd1, 0x9b, 0x63, + 0x85, 0x0d, 0xae, 0x40, 0x70, 0x4d, 0xb9, 0x4b, 0xff, 0xcb, 0x13, 0xd6, 0xf4, 0x5e, 0x1c, 0xc2, + 0xef, 0x12, 0x17, 0x77, 0x04, 0xa6, 0x9c, 0xf3, 0x30, 0xe5, 0xb1, 0xec, 0x3c, 0x15, 0x7b, 0x97, + 0x10, 0xb0, 0x8f, 0xf8, 0x6f, 0x8f, 0x7d, 0x54, 0x5e, 0x92, 0xe8, 0xfc, 0x0d, 0xf2, 0x69, 0x39, + 0xea, 0xea, 0x87, 0xca, 0x93, 0x8e, 0x4b, 0xb5, 0x83, 0x77, 0x69, 0x7c, 0xb7, 0xad, 0x19, 0x6e, + 0x5b, 0xbc, 0xe3, 0x64, 0xdb, 0x62, 0x20, 0xd6, 0xb6, 0x21, 0xe7, 0x43, 0xfc, 0xc8, 0x6e, 0x3d, + 0x15, 0x93, 0xab, 0x42, 0x71, 0xea, 0x73, 0x44, 0x2d, 0x39, 0xb7, 0x9f, 0x45, 0x08, 0xe7, 0xf0, + 0x51, 0x8f, 0x6b, 0x76, 0xbb, 0xac, 0xae, 0xd4, 0x70, 0xac, 0xe5, 0xbc, 0xf1, 0xde, 0x31, 0xec, + 0x42, 0x2a, 0xb6, 0x71, 0x04, 0xdc, 0xc6, 0x7c, 0x7a, 0xf0, 0xcb, 0xfe, 0x22, 0xb5, 0x60, 0xcc, + 0x5e, 0x2a, 0xfb, 0xf5, 0x5f, 0xfd, 0x99, 0xec, 0x2f, 0x6c, 0xbf, 0xfa, 0xe4, 0xd3, 0xa7, 0x3e, + 0x10, 0x5d, 0xdc, 0xaa, 0xb4, 0x83, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x6a, 0x46, 0xe6, 0xae, + 0x5b, 0x12, 0x00, 0x00, } diff --git a/go/vt/vtcombo/tablet_map.go b/go/vt/vtcombo/tablet_map.go index 0e6c79d254a..afda516f43f 100644 --- a/go/vt/vtcombo/tablet_map.go +++ b/go/vt/vtcombo/tablet_map.go @@ -315,9 +315,9 @@ func (itc *internalTabletConn) ExecuteBatch(ctx context.Context, target *querypb // StreamExecute is part of queryservice.QueryService // We need to copy the bind variables as tablet server will change them. -func (itc *internalTabletConn) StreamExecute(ctx context.Context, target *querypb.Target, query string, bindVars map[string]*querypb.BindVariable, options *querypb.ExecuteOptions, callback func(*sqltypes.Result) error) error { +func (itc *internalTabletConn) StreamExecute(ctx context.Context, target *querypb.Target, query string, bindVars map[string]*querypb.BindVariable, transactionID int64, options *querypb.ExecuteOptions, callback func(*sqltypes.Result) error) error { bindVars = sqltypes.CopyBindVariables(bindVars) - err := itc.tablet.qsc.QueryService().StreamExecute(ctx, target, query, bindVars, options, callback) + err := itc.tablet.qsc.QueryService().StreamExecute(ctx, target, query, bindVars, transactionID, options, callback) return tabletconn.ErrorFromGRPC(vterrors.ToGRPC(err)) } @@ -479,6 +479,14 @@ func (itc *internalTabletConn) UpdateStream(ctx context.Context, target *querypb // internalTabletManagerClient implements tmclient.TabletManagerClient type internalTabletManagerClient struct{} +func (itmc *internalTabletManagerClient) LockTables(ctx context.Context, tablet *topodatapb.Tablet) error { + return fmt.Errorf("not implemented in vtcombo") +} + +func (itmc *internalTabletManagerClient) UnlockTables(ctx context.Context, tablet *topodatapb.Tablet) error { + return fmt.Errorf("not implemented in vtcombo") +} + func (itmc *internalTabletManagerClient) Ping(ctx context.Context, tablet *topodatapb.Tablet) error { t, ok := tabletMap[tablet.Alias.Uid] if !ok { @@ -616,6 +624,10 @@ func (itmc *internalTabletManagerClient) StartSlave(ctx context.Context, tablet return fmt.Errorf("not implemented in vtcombo") } +func (itmc *internalTabletManagerClient) StartSlaveUntilAfter(ctx context.Context, tablet *topodatapb.Tablet, position string, duration time.Duration) error { + return fmt.Errorf("not implemented in vtcombo") +} + func (itmc *internalTabletManagerClient) TabletExternallyReparented(ctx context.Context, tablet *topodatapb.Tablet, externalID string) error { return fmt.Errorf("not implemented in vtcombo") } diff --git a/go/vt/vtgate/gateway/discoverygateway_test.go b/go/vt/vtgate/gateway/discoverygateway_test.go index 510a86d459c..f3e06462a63 100644 --- a/go/vt/vtgate/gateway/discoverygateway_test.go +++ b/go/vt/vtgate/gateway/discoverygateway_test.go @@ -59,7 +59,7 @@ func TestDiscoveryGatewayExecuteBatch(t *testing.T) { func TestDiscoveryGatewayExecuteStream(t *testing.T) { testDiscoveryGatewayGeneric(t, true, func(dg Gateway, target *querypb.Target) error { - err := dg.StreamExecute(context.Background(), target, "query", nil, nil, func(qr *sqltypes.Result) error { + err := dg.StreamExecute(context.Background(), target, "query", nil, 0, nil, func(qr *sqltypes.Result) error { return nil }) return err diff --git a/go/vt/vtgate/scatter_conn.go b/go/vt/vtgate/scatter_conn.go index 32283678d33..8c42c0fa26c 100644 --- a/go/vt/vtgate/scatter_conn.go +++ b/go/vt/vtgate/scatter_conn.go @@ -458,7 +458,7 @@ func (stc *ScatterConn) StreamExecute( fieldSent := false allErrors := stc.multiGo(ctx, "StreamExecute", rss, tabletType, func(rs *srvtopo.ResolvedShard, i int) error { - return rs.QueryService.StreamExecute(ctx, rs.Target, query, bindVars, options, func(qr *sqltypes.Result) error { + return rs.QueryService.StreamExecute(ctx, rs.Target, query, bindVars, 0, options, func(qr *sqltypes.Result) error { return stc.processOneStreamingResult(&mu, &fieldSent, qr, callback) }) }) @@ -484,7 +484,7 @@ func (stc *ScatterConn) StreamExecuteMulti( fieldSent := false allErrors := stc.multiGo(ctx, "StreamExecute", rss, tabletType, func(rs *srvtopo.ResolvedShard, i int) error { - return rs.QueryService.StreamExecute(ctx, rs.Target, query, bindVars[i], options, func(qr *sqltypes.Result) error { + return rs.QueryService.StreamExecute(ctx, rs.Target, query, bindVars[i], 0, options, func(qr *sqltypes.Result) error { return stc.processOneStreamingResult(&mu, &fieldSent, qr, callback) }) }) diff --git a/go/vt/vttablet/agentrpctest/test_agent_rpc.go b/go/vt/vttablet/agentrpctest/test_agent_rpc.go index 0bfa22d1e79..7039a216a46 100644 --- a/go/vt/vttablet/agentrpctest/test_agent_rpc.go +++ b/go/vt/vttablet/agentrpctest/test_agent_rpc.go @@ -52,6 +52,14 @@ type fakeRPCAgent struct { mu sync.Mutex } +func (fra *fakeRPCAgent) LockTables(ctx context.Context) error { + panic("implement me") +} + +func (fra *fakeRPCAgent) UnlockTables(ctx context.Context) error { + panic("implement me") +} + func (fra *fakeRPCAgent) setSlow(slow bool) { fra.mu.Lock() fra.slow = slow @@ -781,11 +789,26 @@ func (fra *fakeRPCAgent) StartSlave(ctx context.Context) error { return nil } +var testStartSlaveUntilAfterCalledWith = "" + +func (fra *fakeRPCAgent) StartSlaveUntilAfter(ctx context.Context, position string, waitTime time.Duration) error { + if fra.panics { + panic(fmt.Errorf("test-triggered panic")) + } + testStartSlaveUntilAfterCalledWith = position + return nil +} + func agentRPCTestStartSlave(ctx context.Context, t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.Tablet) { err := client.StartSlave(ctx, tablet) compareError(t, "StartSlave", err, true, testStartSlaveCalled) } +func agentRPCTestStartSlaveUntilAfter(ctx context.Context, t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.Tablet) { + err := client.StartSlaveUntilAfter(ctx, tablet, "test-position", time.Minute) + compareError(t, "StartSlaveUntilAfter", err, "test-position", testStartSlaveUntilAfterCalledWith) +} + func agentRPCTestStartSlavePanic(ctx context.Context, t *testing.T, client tmclient.TabletManagerClient, tablet *topodatapb.Tablet) { err := client.StartSlave(ctx, tablet) expectHandleRPCPanic(t, "StartSlave", true /*verbose*/, err) diff --git a/go/vt/vttablet/endtoend/framework/client.go b/go/vt/vttablet/endtoend/framework/client.go index 782304b1cc4..a590e08bad7 100644 --- a/go/vt/vttablet/endtoend/framework/client.go +++ b/go/vt/vttablet/endtoend/framework/client.go @@ -188,6 +188,7 @@ func (client *QueryClient) StreamExecuteWithOptions(query string, bindvars map[s &client.target, query, bindvars, + 0, options, func(res *sqltypes.Result) error { if result.Fields == nil { @@ -211,6 +212,7 @@ func (client *QueryClient) Stream(query string, bindvars map[string]*querypb.Bin &client.target, query, bindvars, + 0, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL}, sendFunc, ) diff --git a/go/vt/vttablet/faketmclient/fake_client.go b/go/vt/vttablet/faketmclient/fake_client.go index 77b528d9930..5ce41a95adf 100644 --- a/go/vt/vttablet/faketmclient/fake_client.go +++ b/go/vt/vttablet/faketmclient/fake_client.go @@ -93,6 +93,16 @@ func (client *FakeTabletManagerClient) GetPermissions(ctx context.Context, table return &tabletmanagerdatapb.Permissions{}, nil } +// LockTables is part of the tmclient.TabletManagerClient interface. +func (client *FakeTabletManagerClient) LockTables(ctx context.Context, tablet *topodatapb.Tablet) error { + return nil +} + +// UnlockTables is part of the tmclient.TabletManagerClient interface. +func (client *FakeTabletManagerClient) UnlockTables(ctx context.Context, tablet *topodatapb.Tablet) error { + return nil +} + // // Various read-write methods // @@ -186,6 +196,11 @@ func (client *FakeTabletManagerClient) StartSlave(ctx context.Context, tablet *t return nil } +// StartSlaveUntilAfter is part of the tmclient.TabletManagerClient interface. +func (client *FakeTabletManagerClient) StartSlaveUntilAfter(ctx context.Context, tablet *topodatapb.Tablet, position string, duration time.Duration) error { + return nil +} + // TabletExternallyReparented is part of the tmclient.TabletManagerClient interface. func (client *FakeTabletManagerClient) TabletExternallyReparented(ctx context.Context, tablet *topodatapb.Tablet, externalID string) error { return nil diff --git a/go/vt/vttablet/grpcqueryservice/server.go b/go/vt/vttablet/grpcqueryservice/server.go index c3ada0faecf..0781c3bae21 100644 --- a/go/vt/vttablet/grpcqueryservice/server.go +++ b/go/vt/vttablet/grpcqueryservice/server.go @@ -75,7 +75,7 @@ func (q *query) StreamExecute(request *querypb.StreamExecuteRequest, stream quer request.EffectiveCallerId, request.ImmediateCallerId, ) - if err := q.server.StreamExecute(ctx, request.Target, request.Query.Sql, request.Query.BindVariables, request.Options, func(reply *sqltypes.Result) error { + if err := q.server.StreamExecute(ctx, request.Target, request.Query.Sql, request.Query.BindVariables, request.TransactionId, request.Options, func(reply *sqltypes.Result) error { return stream.Send(&querypb.StreamExecuteResponse{ Result: sqltypes.ResultToProto3(reply), }) diff --git a/go/vt/vttablet/grpctabletconn/conn.go b/go/vt/vttablet/grpctabletconn/conn.go index f4871b5a860..5de510ff06d 100644 --- a/go/vt/vttablet/grpctabletconn/conn.go +++ b/go/vt/vttablet/grpctabletconn/conn.go @@ -138,7 +138,7 @@ func (conn *gRPCQueryClient) ExecuteBatch(ctx context.Context, target *querypb.T } // StreamExecute executes the query and streams results back through callback. -func (conn *gRPCQueryClient) StreamExecute(ctx context.Context, target *querypb.Target, query string, bindVars map[string]*querypb.BindVariable, options *querypb.ExecuteOptions, callback func(*sqltypes.Result) error) error { +func (conn *gRPCQueryClient) StreamExecute(ctx context.Context, target *querypb.Target, query string, bindVars map[string]*querypb.BindVariable, transactionID int64, options *querypb.ExecuteOptions, callback func(*sqltypes.Result) error) error { // All streaming clients should follow the code pattern below. // The first part of the function starts the stream while holding // a lock on conn.mu. The second part receives the data and calls @@ -165,7 +165,8 @@ func (conn *gRPCQueryClient) StreamExecute(ctx context.Context, target *querypb. Sql: query, BindVariables: bindVars, }, - Options: options, + Options: options, + TransactionId: transactionID, } stream, err := conn.c.StreamExecute(ctx, req) if err != nil { diff --git a/go/vt/vttablet/grpctmclient/client.go b/go/vt/vttablet/grpctmclient/client.go index 0a0232c51b0..7b83101e1be 100644 --- a/go/vt/vttablet/grpctmclient/client.go +++ b/go/vt/vttablet/grpctmclient/client.go @@ -344,6 +344,30 @@ func (client *Client) ApplySchema(ctx context.Context, tablet *topodatapb.Tablet }, nil } +// LockTables is part of the tmclient.TabletManagerClient interface. +func (client *Client) LockTables(ctx context.Context, tablet *topodatapb.Tablet) error { + cc, c, err := client.dial(tablet) + if err != nil { + return err + } + defer cc.Close() + + _, err = c.LockTables(ctx, &tabletmanagerdatapb.LockTablesRequest{}) + return err +} + +// UnlockTables is part of the tmclient.TabletManagerClient interface. +func (client *Client) UnlockTables(ctx context.Context, tablet *topodatapb.Tablet) error { + cc, c, err := client.dial(tablet) + if err != nil { + return err + } + defer cc.Close() + + _, err = c.UnlockTables(ctx, &tabletmanagerdatapb.UnlockTablesRequest{}) + return err +} + // ExecuteFetchAsDba is part of the tmclient.TabletManagerClient interface. func (client *Client) ExecuteFetchAsDba(ctx context.Context, tablet *topodatapb.Tablet, usePool bool, query []byte, maxRows int, disableBinlogs, reloadSchema bool) (*querypb.QueryResult, error) { var c tabletmanagerservicepb.TabletManagerClient @@ -497,6 +521,20 @@ func (client *Client) StartSlave(ctx context.Context, tablet *topodatapb.Tablet) return err } +// StartSlaveUntilAfter is part of the tmclient.TabletManagerClient interface. +func (client *Client) StartSlaveUntilAfter(ctx context.Context, tablet *topodatapb.Tablet, position string, waitTime time.Duration) error { + cc, c, err := client.dial(tablet) + if err != nil { + return err + } + defer cc.Close() + _, err = c.StartSlaveUntilAfter(ctx, &tabletmanagerdatapb.StartSlaveUntilAfterRequest{ + Position: position, + WaitTimeout: int64(waitTime), + }) + return err +} + // TabletExternallyReparented is part of the tmclient.TabletManagerClient interface. func (client *Client) TabletExternallyReparented(ctx context.Context, tablet *topodatapb.Tablet, externalID string) error { cc, c, err := client.dial(tablet) diff --git a/go/vt/vttablet/grpctmserver/server.go b/go/vt/vttablet/grpctmserver/server.go index 7054c37b721..bba4157a885 100644 --- a/go/vt/vttablet/grpctmserver/server.go +++ b/go/vt/vttablet/grpctmserver/server.go @@ -178,6 +178,22 @@ func (s *server) ApplySchema(ctx context.Context, request *tabletmanagerdatapb.A return response, err } +func (s *server) LockTables(ctx context.Context, req *tabletmanagerdatapb.LockTablesRequest) (*tabletmanagerdatapb.LockTablesResponse, error) { + err := s.agent.LockTables(ctx) + if err != nil { + return nil, err + } + return &tabletmanagerdatapb.LockTablesResponse{}, nil +} + +func (s *server) UnlockTables(ctx context.Context, req *tabletmanagerdatapb.UnlockTablesRequest) (*tabletmanagerdatapb.UnlockTablesResponse, error) { + err := s.agent.UnlockTables(ctx) + if err != nil { + return nil, err + } + return &tabletmanagerdatapb.UnlockTablesResponse{}, nil +} + func (s *server) ExecuteFetchAsDba(ctx context.Context, request *tabletmanagerdatapb.ExecuteFetchAsDbaRequest) (response *tabletmanagerdatapb.ExecuteFetchAsDbaResponse, err error) { defer s.agent.HandleRPCPanic(ctx, "ExecuteFetchAsDba", request, response, false /*verbose*/, &err) ctx = callinfo.GRPCCallInfo(ctx) @@ -265,6 +281,13 @@ func (s *server) StartSlave(ctx context.Context, request *tabletmanagerdatapb.St return response, s.agent.StartSlave(ctx) } +func (s *server) StartSlaveUntilAfter(ctx context.Context, request *tabletmanagerdatapb.StartSlaveUntilAfterRequest) (response *tabletmanagerdatapb.StartSlaveUntilAfterResponse, err error) { + defer s.agent.HandleRPCPanic(ctx, "StartSlave", request, response, true /*verbose*/, &err) + ctx = callinfo.GRPCCallInfo(ctx) + response = &tabletmanagerdatapb.StartSlaveUntilAfterResponse{} + return response, s.agent.StartSlaveUntilAfter(ctx, request.Position, time.Duration(request.WaitTimeout)) +} + func (s *server) TabletExternallyReparented(ctx context.Context, request *tabletmanagerdatapb.TabletExternallyReparentedRequest) (response *tabletmanagerdatapb.TabletExternallyReparentedResponse, err error) { defer s.agent.HandleRPCPanic(ctx, "TabletExternallyReparented", request, response, false /*verbose*/, &err) ctx = callinfo.GRPCCallInfo(ctx) diff --git a/go/vt/vttablet/queryservice/queryservice.go b/go/vt/vttablet/queryservice/queryservice.go index 225912ab26f..ecff428d518 100644 --- a/go/vt/vttablet/queryservice/queryservice.go +++ b/go/vt/vttablet/queryservice/queryservice.go @@ -77,7 +77,7 @@ type QueryService interface { // Query execution Execute(ctx context.Context, target *querypb.Target, sql string, bindVariables map[string]*querypb.BindVariable, transactionID int64, options *querypb.ExecuteOptions) (*sqltypes.Result, error) - StreamExecute(ctx context.Context, target *querypb.Target, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions, callback func(*sqltypes.Result) error) error + StreamExecute(ctx context.Context, target *querypb.Target, sql string, bindVariables map[string]*querypb.BindVariable, transactionID int64, options *querypb.ExecuteOptions, callback func(*sqltypes.Result) error) error ExecuteBatch(ctx context.Context, target *querypb.Target, queries []*querypb.BoundQuery, asTransaction bool, transactionID int64, options *querypb.ExecuteOptions) ([]sqltypes.Result, error) // Combo methods, they also return the transactionID from the @@ -133,7 +133,30 @@ func ExecuteWithStreamer(ctx context.Context, conn QueryService, target *querypb } go func() { defer close(rs.done) - rs.err = conn.StreamExecute(ctx, target, sql, bindVariables, options, func(qr *sqltypes.Result) error { + rs.err = conn.StreamExecute(ctx, target, sql, bindVariables, 0, options, func(qr *sqltypes.Result) error { + select { + case <-ctx.Done(): + return io.EOF + case rs.ch <- qr: + } + return nil + }) + if rs.err == nil { + rs.err = io.EOF + } + }() + return rs +} + +// ExecuteWithTransactionalStreamer does the same thing as ExecuteWithStreamer, but inside a transaction +func ExecuteWithTransactionalStreamer(ctx context.Context, conn QueryService, target *querypb.Target, sql string, bindVariables map[string]*querypb.BindVariable, transactionID int64, options *querypb.ExecuteOptions) sqltypes.ResultStream { + rs := &resultStreamer{ + done: make(chan struct{}), + ch: make(chan *sqltypes.Result), + } + go func() { + defer close(rs.done) + rs.err = conn.StreamExecute(ctx, target, sql, bindVariables, transactionID, options, func(qr *sqltypes.Result) error { select { case <-ctx.Done(): return io.EOF diff --git a/go/vt/vttablet/queryservice/wrapped.go b/go/vt/vttablet/queryservice/wrapped.go index 0ba474dff63..1d9dbe692bc 100644 --- a/go/vt/vttablet/queryservice/wrapped.go +++ b/go/vt/vttablet/queryservice/wrapped.go @@ -175,10 +175,10 @@ func (ws *wrappedService) Execute(ctx context.Context, target *querypb.Target, q return qr, err } -func (ws *wrappedService) StreamExecute(ctx context.Context, target *querypb.Target, query string, bindVars map[string]*querypb.BindVariable, options *querypb.ExecuteOptions, callback func(*sqltypes.Result) error) error { +func (ws *wrappedService) StreamExecute(ctx context.Context, target *querypb.Target, query string, bindVars map[string]*querypb.BindVariable, transactionID int64, options *querypb.ExecuteOptions, callback func(*sqltypes.Result) error) error { return ws.wrapper(ctx, target, ws.impl, "StreamExecute", false, func(ctx context.Context, target *querypb.Target, conn QueryService) (error, bool) { streamingStarted := false - innerErr := conn.StreamExecute(ctx, target, query, bindVars, options, func(qr *sqltypes.Result) error { + innerErr := conn.StreamExecute(ctx, target, query, bindVars, transactionID, options, func(qr *sqltypes.Result) error { streamingStarted = true return callback(qr) }) diff --git a/go/vt/vttablet/sandboxconn/sandboxconn.go b/go/vt/vttablet/sandboxconn/sandboxconn.go index dc614c7d2be..8c4ebbbca11 100644 --- a/go/vt/vttablet/sandboxconn/sandboxconn.go +++ b/go/vt/vttablet/sandboxconn/sandboxconn.go @@ -152,7 +152,7 @@ func (sbc *SandboxConn) ExecuteBatch(ctx context.Context, target *querypb.Target } // StreamExecute is part of the QueryService interface. -func (sbc *SandboxConn) StreamExecute(ctx context.Context, target *querypb.Target, query string, bindVars map[string]*querypb.BindVariable, options *querypb.ExecuteOptions, callback func(*sqltypes.Result) error) error { +func (sbc *SandboxConn) StreamExecute(ctx context.Context, target *querypb.Target, query string, bindVars map[string]*querypb.BindVariable, transactionID int64, options *querypb.ExecuteOptions, callback func(*sqltypes.Result) error) error { sbc.ExecCount.Add(1) bv := make(map[string]*querypb.BindVariable) for k, v := range bindVars { diff --git a/go/vt/vttablet/tabletconntest/fakequeryservice.go b/go/vt/vttablet/tabletconntest/fakequeryservice.go index 813a48efd3a..f6654cf21ac 100644 --- a/go/vt/vttablet/tabletconntest/fakequeryservice.go +++ b/go/vt/vttablet/tabletconntest/fakequeryservice.go @@ -457,7 +457,7 @@ var StreamExecuteQueryResult2 = sqltypes.Result{ } // StreamExecute is part of the queryservice.QueryService interface -func (f *FakeQueryService) StreamExecute(ctx context.Context, target *querypb.Target, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions, callback func(*sqltypes.Result) error) error { +func (f *FakeQueryService) StreamExecute(ctx context.Context, target *querypb.Target, sql string, bindVariables map[string]*querypb.BindVariable, transactionID int64, options *querypb.ExecuteOptions, callback func(*sqltypes.Result) error) error { if f.Panics && f.StreamExecutePanicsEarly { panic(fmt.Errorf("test-triggered panic early")) } diff --git a/go/vt/vttablet/tabletconntest/tabletconntest.go b/go/vt/vttablet/tabletconntest/tabletconntest.go index 6fb78fa7529..8b25182816e 100644 --- a/go/vt/vttablet/tabletconntest/tabletconntest.go +++ b/go/vt/vttablet/tabletconntest/tabletconntest.go @@ -479,7 +479,7 @@ func testStreamExecute(t *testing.T, conn queryservice.QueryService, f *FakeQuer ctx := context.Background() ctx = callerid.NewContext(ctx, TestCallerID, TestVTGateCallerID) i := 0 - err := conn.StreamExecute(ctx, TestTarget, StreamExecuteQuery, StreamExecuteBindVars, TestExecuteOptions, func(qr *sqltypes.Result) error { + err := conn.StreamExecute(ctx, TestTarget, StreamExecuteQuery, StreamExecuteBindVars, 0, TestExecuteOptions, func(qr *sqltypes.Result) error { switch i { case 0: if len(qr.Rows) == 0 { @@ -515,7 +515,7 @@ func testStreamExecuteError(t *testing.T, conn queryservice.QueryService, f *Fak testErrorHelper(t, f, "StreamExecute", func(ctx context.Context) error { f.ErrorWait = make(chan struct{}) ctx = callerid.NewContext(ctx, TestCallerID, TestVTGateCallerID) - return conn.StreamExecute(ctx, TestTarget, StreamExecuteQuery, StreamExecuteBindVars, TestExecuteOptions, func(qr *sqltypes.Result) error { + return conn.StreamExecute(ctx, TestTarget, StreamExecuteQuery, StreamExecuteBindVars, 0, TestExecuteOptions, func(qr *sqltypes.Result) error { // For some errors, the call can be retried. select { case <-f.ErrorWait: @@ -544,7 +544,7 @@ func testStreamExecutePanics(t *testing.T, conn queryservice.QueryService, f *Fa f.StreamExecutePanicsEarly = true testPanicHelper(t, f, "StreamExecute.Early", func(ctx context.Context) error { ctx = callerid.NewContext(ctx, TestCallerID, TestVTGateCallerID) - return conn.StreamExecute(ctx, TestTarget, StreamExecuteQuery, StreamExecuteBindVars, TestExecuteOptions, func(qr *sqltypes.Result) error { + return conn.StreamExecute(ctx, TestTarget, StreamExecuteQuery, StreamExecuteBindVars, 0, TestExecuteOptions, func(qr *sqltypes.Result) error { return nil }) }) @@ -554,7 +554,7 @@ func testStreamExecutePanics(t *testing.T, conn queryservice.QueryService, f *Fa testPanicHelper(t, f, "StreamExecute.Late", func(ctx context.Context) error { f.PanicWait = make(chan struct{}) ctx = callerid.NewContext(ctx, TestCallerID, TestVTGateCallerID) - return conn.StreamExecute(ctx, TestTarget, StreamExecuteQuery, StreamExecuteBindVars, TestExecuteOptions, func(qr *sqltypes.Result) error { + return conn.StreamExecute(ctx, TestTarget, StreamExecuteQuery, StreamExecuteBindVars, 0, TestExecuteOptions, func(qr *sqltypes.Result) error { // For some errors, the call can be retried. select { case <-f.PanicWait: diff --git a/go/vt/vttablet/tabletmanager/action_agent.go b/go/vt/vttablet/tabletmanager/action_agent.go index d2673b48a76..2663fe4ac10 100644 --- a/go/vt/vttablet/tabletmanager/action_agent.go +++ b/go/vt/vttablet/tabletmanager/action_agent.go @@ -47,6 +47,7 @@ import ( "vitess.io/vitess/go/vt/vterrors" "golang.org/x/net/context" + "vitess.io/vitess/go/vt/dbconnpool" "github.com/golang/protobuf/proto" "vitess.io/vitess/go/history" @@ -204,6 +205,11 @@ type ActionAgent struct { // _slaveStopped remembers if we've been told to stop replicating. // If it's nil, we'll try to check for the slaveStoppedFile. _slaveStopped *bool + + // _lockTablesConnection is used to get and release the table read locks to pause replication + _lockTablesConnection *dbconnpool.DBConnection + _lockTablesTimer *time.Timer + _lockTablesTimeout *time.Duration } // NewActionAgent creates a new ActionAgent and registers all the diff --git a/go/vt/vttablet/tabletmanager/rpc_agent.go b/go/vt/vttablet/tabletmanager/rpc_agent.go index 04f956afdfd..1bef381a7e8 100644 --- a/go/vt/vttablet/tabletmanager/rpc_agent.go +++ b/go/vt/vttablet/tabletmanager/rpc_agent.go @@ -66,6 +66,10 @@ type RPCAgent interface { ApplySchema(ctx context.Context, change *tmutils.SchemaChange) (*tabletmanagerdatapb.SchemaChangeResult, error) + LockTables(ctx context.Context) error + + UnlockTables(ctx context.Context) error + ExecuteFetchAsDba(ctx context.Context, query []byte, dbName string, maxrows int, disableBinlogs bool, reloadSchema bool) (*querypb.QueryResult, error) ExecuteFetchAsAllPrivs(ctx context.Context, query []byte, dbName string, maxrows int, reloadSchema bool) (*querypb.QueryResult, error) @@ -84,6 +88,8 @@ type RPCAgent interface { StartSlave(ctx context.Context) error + StartSlaveUntilAfter(ctx context.Context, position string, waitTime time.Duration) error + TabletExternallyReparented(ctx context.Context, externalID string) error GetSlaves(ctx context.Context) ([]string, error) diff --git a/go/vt/vttablet/tabletmanager/rpc_lock_tables.go b/go/vt/vttablet/tabletmanager/rpc_lock_tables.go new file mode 100644 index 00000000000..66fda083959 --- /dev/null +++ b/go/vt/vttablet/tabletmanager/rpc_lock_tables.go @@ -0,0 +1,144 @@ +/* +Copyright 2017 Google Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package tabletmanager + +import ( + "errors" + "flag" + "fmt" + "strings" + "time" + + "vitess.io/vitess/go/vt/dbconnpool" + + "github.com/golang/glog" + "vitess.io/vitess/go/sqlescape" + + "golang.org/x/net/context" +) + +var ( + lockTablesTimeout = flag.Duration("lock_tables_timeout", 1*time.Minute, "How long to keep the table locked before timing out") +) + +// LockTables will lock all tables with read locks, effectively pausing replication while the lock is held (idempotent) +func (agent *ActionAgent) LockTables(ctx context.Context) error { + // get a connection + agent.mutex.Lock() + defer agent.mutex.Unlock() + + if agent._lockTablesConnection != nil { + // tables are already locked, bail out + return errors.New("tables already locked on this tablet") + } + + conn, err := agent.MysqlDaemon.GetDbaConnection() + if err != nil { + return err + } + + // FTWRL is preferable, so we'll try that first + _, err = conn.ExecuteFetch("FLUSH TABLES WITH READ LOCK", 0, false) + if err != nil { + // as fall back, we can lock each individual table as well. + // this requires slightly less privileges but achieves the same effect + err = agent.lockTablesUsingLockTables(conn) + if err != nil { + return err + } + } + glog.Infof("[%v] Tables locked", conn.ConnectionID) + + agent._lockTablesConnection = conn + agent._lockTablesTimer = time.AfterFunc(*lockTablesTimeout, func() { + // Here we'll sleep until the timeout time has elapsed. + // If the table locks have not been released yet, we'll release them here + agent.mutex.Lock() + defer agent.mutex.Unlock() + + // We need the mutex locked before we check this field + if agent._lockTablesConnection == conn { + glog.Errorf("table lock timed out and released the lock - something went wrong") + err = agent.unlockTablesHoldingMutex() + if err != nil { + glog.Errorf("failed to unlock tables: %v", err) + } + } + }) + + return nil +} + +func (agent *ActionAgent) lockTablesUsingLockTables(conn *dbconnpool.DBConnection) error { + glog.Warningf("failed to lock tables with FTWRL - falling back to LOCK TABLES") + + // Ensure schema engine is Open. If vttablet came up in a non_serving role, + // the schema engine may not have been initialized. Open() is idempotent, so this + // is always safe + se := agent.QueryServiceControl.SchemaEngine() + if err := se.Open(); err != nil { + return err + } + + tables := se.GetSchema() + tableNames := make([]string, 0, len(tables)) + for name := range tables { + if name == "dual" { + continue + } + tableNames = append(tableNames, fmt.Sprintf("%s READ", sqlescape.EscapeID(name))) + } + lockStatement := fmt.Sprintf("LOCK TABLES %v", strings.Join(tableNames, ", ")) + _, err := conn.ExecuteFetch(fmt.Sprintf("USE %s", agent.DBConfigs.DBName.Get()), 0, false) + if err != nil { + return err + } + + _, err = conn.ExecuteFetch(lockStatement, 0, false) + if err != nil { + return err + } + + return nil +} + +// UnlockTables will unlock all tables (idempotent) +func (agent *ActionAgent) UnlockTables(ctx context.Context) error { + agent.mutex.Lock() + defer agent.mutex.Unlock() + + if agent._lockTablesConnection == nil { + return fmt.Errorf("tables were not locked") + } + + return agent.unlockTablesHoldingMutex() +} + +func (agent *ActionAgent) unlockTablesHoldingMutex() error { + // We are cleaning up manually, let's kill the timer + agent._lockTablesTimer.Stop() + _, err := agent._lockTablesConnection.ExecuteFetch("UNLOCK TABLES", 0, false) + if err != nil { + return err + } + glog.Infof("[%v] Tables unlocked", agent._lockTablesConnection.ConnectionID) + agent._lockTablesConnection.Close() + agent._lockTablesConnection = nil + agent._lockTablesTimer = nil + + return nil +} diff --git a/go/vt/vttablet/tabletmanager/rpc_replication.go b/go/vt/vttablet/tabletmanager/rpc_replication.go index f11d2875bd1..4b255b68632 100644 --- a/go/vt/vttablet/tabletmanager/rpc_replication.go +++ b/go/vt/vttablet/tabletmanager/rpc_replication.go @@ -144,6 +144,25 @@ func (agent *ActionAgent) StartSlave(ctx context.Context) error { return agent.MysqlDaemon.StartSlave(agent.hookExtraEnv()) } +// StartSlaveUntilAfter will start the replication and let it catch up +// until and including the transactions in `position` +func (agent *ActionAgent) StartSlaveUntilAfter(ctx context.Context, position string, waitTime time.Duration) error { + if err := agent.lock(ctx); err != nil { + return err + } + defer agent.unlock() + + waitCtx, cancel := context.WithTimeout(ctx, waitTime) + defer cancel() + + pos, err := mysql.DecodePosition(position) + if err != nil { + return err + } + + return agent.MysqlDaemon.StartSlaveUntilAfter(waitCtx, pos) +} + // GetSlaves returns the address of all the slaves func (agent *ActionAgent) GetSlaves(ctx context.Context) ([]string, error) { return mysqlctl.FindSlaves(agent.MysqlDaemon) diff --git a/go/vt/vttablet/tabletserver/connpool/pool.go b/go/vt/vttablet/tabletserver/connpool/pool.go index 7c96b1dd642..02272c1aaec 100644 --- a/go/vt/vttablet/tabletserver/connpool/pool.go +++ b/go/vt/vttablet/tabletserver/connpool/pool.go @@ -277,9 +277,9 @@ func (cp *Pool) IdleClosed() int64 { } func (cp *Pool) isCallerIDAppDebug(ctx context.Context) bool { - callerID := callerid.ImmediateCallerIDFromContext(ctx) - if cp.appDebugParams.Uname == "" { + if cp.appDebugParams == nil || cp.appDebugParams.Uname == "" { return false } + callerID := callerid.ImmediateCallerIDFromContext(ctx) return callerID != nil && callerID.Username == cp.appDebugParams.Uname } diff --git a/go/vt/vttablet/tabletserver/query_executor.go b/go/vt/vttablet/tabletserver/query_executor.go index bf4e103aec5..28b9c42eeec 100644 --- a/go/vt/vttablet/tabletserver/query_executor.go +++ b/go/vt/vttablet/tabletserver/query_executor.go @@ -209,11 +209,23 @@ func (qre *QueryExecutor) Stream(callback func(*sqltypes.Result) error) error { return err } - conn, err := qre.getStreamConn() - if err != nil { - return err + // if we have a transaction id, let's use the txPool for this query + var conn *connpool.DBConn + if qre.transactionID != 0 { + txConn, err := qre.tsv.te.txPool.Get(qre.transactionID, "for streaming query") + if err != nil { + return err + } + defer txConn.Recycle() + conn = txConn.DBConn + } else { + dbConn, err := qre.getStreamConn() + if err != nil { + return err + } + defer dbConn.Recycle() + conn = dbConn } - defer conn.Recycle() qd := NewQueryDetail(qre.logStats.Ctx, conn) qre.tsv.qe.streamQList.Add(qd) diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go index 51b7c0bf907..b2967837c43 100644 --- a/go/vt/vttablet/tabletserver/tabletserver.go +++ b/go/vt/vttablet/tabletserver/tabletserver.go @@ -158,7 +158,6 @@ type TabletServer struct { target querypb.Target alsoAllow []topodatapb.TabletType requests sync.WaitGroup - beginRequests sync.WaitGroup // The following variables should be initialized only once // before starting the tabletserver. @@ -169,6 +168,7 @@ type TabletServer struct { se *schema.Engine qe *QueryEngine te *TxEngine + teCtrl TxPoolController hw *heartbeat.Writer hr *heartbeat.Reader messager *messager.Engine @@ -212,6 +212,43 @@ func NewServer(topoServer *topo.Server, alias topodatapb.TabletAlias) *TabletSer return NewTabletServer(tabletenv.Config, topoServer, alias) } +// TxPoolController is how the tablet server interacts with the tx-pool. +// It is responsible for keeping it's own state - knowing when different types +// of transactions are allowed, and how to do state transitions. +type TxPoolController interface { + // Stop will stop accepting any new transactions. Transactions are immediately aborted. + Stop() error + + // Will start accepting all transactions. If transitioning from RO mode, transactions + // might need to be rolled back before new transactions can be accepts. + AcceptReadWrite() error + + // Will start accepting read-only transactions, but not full read and write transactions. + // If the engine is currently accepting full read and write transactions, they need to + // given a chance to clean up before they are forcefully rolled back. + AcceptReadOnly() error + + // InitDBConfig must be called before Init. + InitDBConfig(dbcfgs *dbconfigs.DBConfigs) + + // Init must be called once when vttablet starts for setting + // up the metadata tables. + Init() error + + // StopGently will change the state to NotServing but first wait for transactions to wrap up + StopGently() + + // Begin begins a transaction, and returns the associated transaction id. + // Subsequent statements can access the connection through the transaction id. + Begin(ctx context.Context, options *querypb.ExecuteOptions) (int64, error) + + // Commit commits the specified transaction. + Commit(ctx context.Context, transactionID int64, mc messageCommitter) error + + // Rollback rolls back the specified transaction. + Rollback(ctx context.Context, transactionID int64) error +} + var tsOnce sync.Once var srvTopoServer srvtopo.Server @@ -238,6 +275,7 @@ func NewTabletServer(config tabletenv.TabletConfig, topoServer *topo.Server, ali tsv.se = schema.NewEngine(tsv, config) tsv.qe = NewQueryEngine(tsv, tsv.se, config) tsv.te = NewTxEngine(tsv, config) + tsv.teCtrl = tsv.te tsv.hw = heartbeat.NewWriter(tsv, alias, config) tsv.hr = heartbeat.NewReader(tsv, config) tsv.txThrottler = txthrottler.CreateTxThrottlerFromTabletConfig(topoServer) @@ -351,7 +389,7 @@ func (tsv *TabletServer) InitDBConfig(target querypb.Target, dbcfgs *dbconfigs.D tsv.se.InitDBConfig(tsv.dbconfigs) tsv.qe.InitDBConfig(tsv.dbconfigs) - tsv.te.InitDBConfig(tsv.dbconfigs) + tsv.teCtrl.InitDBConfig(tsv.dbconfigs) tsv.hw.InitDBConfig(tsv.dbconfigs) tsv.hr.InitDBConfig(tsv.dbconfigs) tsv.messager.InitDBConfig(tsv.dbconfigs) @@ -513,7 +551,7 @@ func (tsv *TabletServer) fullStart() (err error) { if err := tsv.qe.Open(); err != nil { return err } - if err := tsv.te.Init(); err != nil { + if err := tsv.teCtrl.Init(); err != nil { return err } if err := tsv.hw.Init(tsv.target); err != nil { @@ -526,28 +564,25 @@ func (tsv *TabletServer) fullStart() (err error) { } func (tsv *TabletServer) serveNewType() (err error) { + // Wait for in-flight transactional requests to complete + // before rolling back everything. In this state new + // transactional requests are not allowed. So, we can + // be sure that the tx pool won't change after the wait. if tsv.target.TabletType == topodatapb.TabletType_MASTER { + tsv.teCtrl.AcceptReadWrite() if err := tsv.txThrottler.Open(tsv.target.Keyspace, tsv.target.Shard); err != nil { return err } tsv.watcher.Close() - tsv.te.Open() tsv.messager.Open() tsv.hr.Close() tsv.hw.Open() } else { + tsv.teCtrl.AcceptReadOnly() tsv.messager.Close() tsv.hr.Open() tsv.hw.Close() - - // Wait for in-flight transactional requests to complete - // before rolling back everything. In this state new - // transactional requests are not allowed. So, we can - // be sure that the tx pool won't change after the wait. - tsv.beginRequests.Wait() - tsv.te.Close(true) tsv.watcher.Open() - tsv.txThrottler.Close() // Reset the sequences. tsv.se.MakeNonMaster() @@ -597,9 +632,8 @@ func (tsv *TabletServer) waitForShutdown() { // we have the assurance that only non-begin transactional calls // will be allowed. They will enable the conclusion of outstanding // transactions. - tsv.beginRequests.Wait() tsv.messager.Close() - tsv.te.Close(false) + tsv.teCtrl.StopGently() tsv.qe.streamQList.TerminateAll() tsv.updateStreamList.Stop() tsv.watcher.Close() @@ -613,7 +647,7 @@ func (tsv *TabletServer) closeAll() { tsv.messager.Close() tsv.hr.Close() tsv.hw.Close() - tsv.te.Close(true) + tsv.teCtrl.StopGently() tsv.watcher.Close() tsv.updateStreamList.Stop() tsv.qe.Close() @@ -745,7 +779,7 @@ func (tsv *TabletServer) Begin(ctx context.Context, target *querypb.Target, opti // TODO(erez): I think this should be RESOURCE_EXHAUSTED. return vterrors.Errorf(vtrpcpb.Code_UNAVAILABLE, "Transaction throttled") } - transactionID, err = tsv.te.txPool.Begin(ctx, options) + transactionID, err = tsv.teCtrl.Begin(ctx, options) logStats.TransactionID = transactionID return err }, @@ -762,7 +796,7 @@ func (tsv *TabletServer) Commit(ctx context.Context, target *querypb.Target, tra func(ctx context.Context, logStats *tabletenv.LogStats) error { defer tabletenv.QueryStats.Record("COMMIT", time.Now()) logStats.TransactionID = transactionID - return tsv.te.txPool.Commit(ctx, transactionID, tsv.messager) + return tsv.teCtrl.Commit(ctx, transactionID, tsv.messager) }, ) } @@ -776,7 +810,7 @@ func (tsv *TabletServer) Rollback(ctx context.Context, target *querypb.Target, t func(ctx context.Context, logStats *tabletenv.LogStats) error { defer tabletenv.QueryStats.Record("ROLLBACK", time.Now()) logStats.TransactionID = transactionID - return tsv.te.txPool.Rollback(ctx, transactionID) + return tsv.teCtrl.Rollback(ctx, transactionID) }, ) } @@ -973,7 +1007,7 @@ func (tsv *TabletServer) Execute(ctx context.Context, target *querypb.Target, sq // StreamExecute executes the query and streams the result. // The first QueryResult will have Fields set (and Rows nil). // The subsequent QueryResult will have Rows set (and Fields nil). -func (tsv *TabletServer) StreamExecute(ctx context.Context, target *querypb.Target, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions, callback func(*sqltypes.Result) error) (err error) { +func (tsv *TabletServer) StreamExecute(ctx context.Context, target *querypb.Target, sql string, bindVariables map[string]*querypb.BindVariable, transactionID int64, options *querypb.ExecuteOptions, callback func(*sqltypes.Result) error) (err error) { return tsv.execRequest( ctx, 0, "StreamExecute", sql, bindVariables, @@ -991,6 +1025,7 @@ func (tsv *TabletServer) StreamExecute(ctx context.Context, target *querypb.Targ query: query, marginComments: comments, bindVars: bindVariables, + transactionID: transactionID, options: options, plan: plan, ctx: ctx, @@ -1040,7 +1075,7 @@ func (tsv *TabletServer) ExecuteBatch(ctx context.Context, target *querypb.Targe return nil, err } defer tsv.endRequest(false) - defer tsv.handlePanicAndSendLogStats("batch", nil, &err, nil) + defer tsv.handlePanicAndSendLogStats("batch", nil, nil) if asTransaction { transactionID, err = tsv.Begin(ctx, target, options) @@ -1243,7 +1278,7 @@ func (tsv *TabletServer) execDML(ctx context.Context, target *querypb.Target, qu return 0, err } defer tsv.endRequest(true) - defer tsv.handlePanicAndSendLogStats("ack", nil, &err, nil) + defer tsv.handlePanicAndSendLogStats("ack", nil, nil) query, bv, err := queryGenerator() if err != nil { @@ -1335,7 +1370,6 @@ func (tsv *TabletServer) SplitQuery( if err := validateSplitQueryParameters( target, query, - splitColumns, splitCount, numRowsPerQueryPart, algorithm, @@ -1371,7 +1405,7 @@ func (tsv *TabletServer) SplitQuery( return splits, err } -// execRequest performs verfications, sets up the necessary environments +// execRequest performs verifications, sets up the necessary environments // and calls the supplied function for executing the request. func (tsv *TabletServer) execRequest( ctx context.Context, timeout time.Duration, @@ -1383,7 +1417,7 @@ func (tsv *TabletServer) execRequest( logStats.Target = target logStats.OriginalSQL = sql logStats.BindVariables = bindVariables - defer tsv.handlePanicAndSendLogStats(sql, bindVariables, &err, logStats) + defer tsv.handlePanicAndSendLogStats(sql, bindVariables, logStats) if err = tsv.startRequest(ctx, target, isBegin, allowOnShutdown); err != nil { return err } @@ -1404,7 +1438,6 @@ func (tsv *TabletServer) execRequest( func (tsv *TabletServer) handlePanicAndSendLogStats( sql string, bindVariables map[string]*querypb.BindVariable, - err *error, logStats *tabletenv.LogStats, ) { if x := recover(); x != nil { @@ -1415,7 +1448,6 @@ func (tsv *TabletServer) handlePanicAndSendLogStats( tb.Stack(4) /* Skip the last 4 boiler-plate frames. */) log.Errorf(errorMessage) terr := vterrors.Errorf(vtrpcpb.Code_UNKNOWN, "%s", errorMessage) - *err = terr tabletenv.InternalErrors.Add("Panic", 1) if logStats != nil { logStats.Error = terr @@ -1434,7 +1466,7 @@ func (tsv *TabletServer) convertAndLogError(ctx context.Context, sql string, bin return nil } - errCode := tsv.convertErrorCode(err) + errCode := convertErrorCode(err) tabletenv.ErrorStats.Add(errCode.String(), 1) callerID := "" @@ -1534,7 +1566,7 @@ func truncateSQLAndBindVars(sql string, bindVariables map[string]*querypb.BindVa return fmt.Sprintf("Sql: %q, %s", truncatedQuery, bv) } -func (tsv *TabletServer) convertErrorCode(err error) vtrpcpb.Code { +func convertErrorCode(err error) vtrpcpb.Code { errCode := vterrors.Code(err) sqlErr, ok := err.(*mysql.SQLError) if !ok { @@ -1613,7 +1645,6 @@ func (tsv *TabletServer) convertErrorCode(err error) vtrpcpb.Code { func validateSplitQueryParameters( target *querypb.Target, query *querypb.BoundQuery, - splitColumns []string, splitCount int64, numRowsPerQueryPart int64, algorithm querypb.SplitQueryRequest_Algorithm, @@ -1924,8 +1955,6 @@ verifyTarget: return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid keyspace %v", target.Keyspace) case target.Shard != tsv.target.Shard: return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid shard %v", target.Shard) - case isBegin && tsv.target.TabletType != topodatapb.TabletType_MASTER: - return vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "transactional statement disallowed on non-master tablet: %v", tsv.target.TabletType) case target.TabletType != tsv.target.TabletType: for _, otherType := range tsv.alsoAllow { if target.TabletType == otherType { @@ -1940,20 +1969,12 @@ verifyTarget: ok: tsv.requests.Add(1) - // If it's a begin, we should make the shutdown code - // wait for the call to end before it waits for tx empty. - if isBegin { - tsv.beginRequests.Add(1) - } return nil } // endRequest unregisters the current request (a waitgroup) as done. func (tsv *TabletServer) endRequest(isBegin bool) { tsv.requests.Done() - if isBegin { - tsv.beginRequests.Done() - } } func (tsv *TabletServer) registerDebugHealthHandler() { diff --git a/go/vt/vttablet/tabletserver/tabletserver_test.go b/go/vt/vttablet/tabletserver/tabletserver_test.go index b2ba5a51e55..4151045a98b 100644 --- a/go/vt/vttablet/tabletserver/tabletserver_test.go +++ b/go/vt/vttablet/tabletserver/tabletserver_test.go @@ -17,14 +17,12 @@ limitations under the License. package tabletserver import ( - "expvar" "fmt" "io" "io/ioutil" "math/rand" "os" "reflect" - "strconv" "strings" "sync" "syscall" @@ -429,29 +427,6 @@ func TestTabletServerCheckMysqlFailInvalidConn(t *testing.T) { } } -func TestTabletServerCheckMysqlInUnintialized(t *testing.T) { - testUtils := newTestUtils() - config := testUtils.newQueryServiceConfig() - tsv := NewTabletServerWithNilTopoServer(config) - // TabletServer start request fail because we are in StateNotConnected; - // however, isMySQLReachable should return true. Here, we always assume - // MySQL is healthy unless we've verified it is not. - if !tsv.isMySQLReachable() { - t.Fatalf("isMySQLReachable should return true") - } - tabletState := expvar.Get("TabletState") - if tabletState == nil { - t.Fatal("TabletState should be exposed") - } - varzState, err := strconv.Atoi(tabletState.String()) - if err != nil { - t.Fatalf("invalid state reported by expvar, should be a valid state code, but got: %s", tabletState.String()) - } - if varzState != StateNotConnected { - t.Fatalf("queryservice should be in %d state, but exposed varz reports: %d", StateNotConnected, varzState) - } -} - func TestTabletServerReconnect(t *testing.T) { db := setUpTabletServerTest(t) defer db.Close() @@ -575,19 +550,6 @@ func TestTabletServerTarget(t *testing.T) { t.Errorf("err: %v, must contain %s", err, want) } - // Disallow tx statements if non-master. - tsv.SetServingType(topodatapb.TabletType_REPLICA, true, nil) - _, err = tsv.Begin(ctx, &target1, nil) - want = "transactional statement disallowed on non-master tablet" - if err == nil || !strings.Contains(err.Error(), want) { - t.Errorf("err: %v, must contain %s", err, want) - } - err = tsv.Commit(ctx, &target1, 1) - want = "invalid tablet type: MASTER" - if err == nil || !strings.Contains(err.Error(), want) { - t.Errorf("err: %v, must contain %s", err, want) - } - // Disallow all if service is stopped. tsv.StopService() _, err = tsv.Execute(ctx, &target1, "select * from test_table limit 1000", nil, 0, nil) @@ -597,46 +559,50 @@ func TestTabletServerTarget(t *testing.T) { } } -func TestTabletServerStopWithPrepare(t *testing.T) { - // Reuse code from tx_executor_test. - _, tsv, db := newTestTxExecutor(t) +func TestBeginOnReplica(t *testing.T) { + db := setUpTabletServerTest(t) + db.AddQuery("set transaction isolation level REPEATABLE READ", &sqltypes.Result{}) + db.AddQuery("start transaction with consistent snapshot, read only", &sqltypes.Result{}) defer db.Close() - ctx := context.Background() - target := querypb.Target{TabletType: topodatapb.TabletType_MASTER} - transactionID, err := tsv.Begin(ctx, &target, nil) - if err != nil { - t.Error(err) - } - if _, err := tsv.Execute(ctx, &target, "update test_table set name = 2 where pk = 1", nil, transactionID, nil); err != nil { - t.Error(err) + testUtils := newTestUtils() + config := testUtils.newQueryServiceConfig() + tsv := NewTabletServerWithNilTopoServer(config) + dbcfgs := testUtils.newDBConfigs(db) + target1 := querypb.Target{ + Keyspace: "test_keyspace", + Shard: "test_shard", + TabletType: topodatapb.TabletType_REPLICA, } - if err = tsv.Prepare(ctx, &target, transactionID, "aa"); err != nil { - t.Error(err) + err := tsv.StartService(target1, dbcfgs) + if err != nil { + t.Fatalf("StartService failed: %v", err) } - ch := make(chan bool) - go func() { - tsv.StopService() - ch <- true - }() + defer tsv.StopService() - // StopService must wait for the prepared transaction to resolve. - select { - case <-ch: - t.Fatal("ch should not fire") - case <-time.After(10 * time.Millisecond): + tsv.SetServingType(topodatapb.TabletType_REPLICA, true, nil) + ctx := context.Background() + options := querypb.ExecuteOptions{ + TransactionIsolation: querypb.ExecuteOptions_CONSISTENT_SNAPSHOT_READ_ONLY, } - if len(tsv.te.preparedPool.conns) != 1 { - t.Errorf("len(tsv.te.preparedPool.conns): %d, want 1", len(tsv.te.preparedPool.conns)) + txID, err := tsv.Begin(ctx, &target1, &options) + + if err != nil { + t.Errorf("err: %v, failed to create read only tx on replica", err) } - // RollbackPrepared will allow StopService to complete. - err = tsv.RollbackPrepared(ctx, &target, "aa", 0) + err = tsv.Rollback(ctx, &target1, txID) if err != nil { - t.Error(err) + t.Errorf("err: %v, failed to rollback read only tx", err) } - <-ch - if len(tsv.te.preparedPool.conns) != 0 { - t.Errorf("len(tsv.te.preparedPool.conns): %d, want 0", len(tsv.te.preparedPool.conns)) + + // test that RW transactions are refused + options = querypb.ExecuteOptions{ + TransactionIsolation: querypb.ExecuteOptions_DEFAULT, + } + _, err = tsv.Begin(ctx, &target1, &options) + + if err == nil { + t.Error("expected write tx to be refused") } } @@ -687,20 +653,28 @@ func TestTabletServerMasterToReplica(t *testing.T) { <-ch } -func TestTabletServerReplicaToMaster(t *testing.T) { +func TestTabletServerRedoLogIsKeptBetweenRestarts(t *testing.T) { // Reuse code from tx_executor_test. _, tsv, db := newTestTxExecutor(t) defer db.Close() defer tsv.StopService() tsv.SetServingType(topodatapb.TabletType_REPLICA, true, nil) + + turnOnTxEngine := func() { + tsv.SetServingType(topodatapb.TabletType_MASTER, true, nil) + } + turnOffTxEngine := func() { + tsv.SetServingType(topodatapb.TabletType_REPLICA, true, nil) + } + tpc := tsv.te.twoPC db.AddQuery(tpc.readAllRedo, &sqltypes.Result{}) - tsv.SetServingType(topodatapb.TabletType_MASTER, true, nil) + turnOnTxEngine() if len(tsv.te.preparedPool.conns) != 0 { t.Errorf("len(tsv.te.preparedPool.conns): %d, want 0", len(tsv.te.preparedPool.conns)) } - tsv.SetServingType(topodatapb.TabletType_REPLICA, true, nil) + turnOffTxEngine() db.AddQuery(tpc.readAllRedo, &sqltypes.Result{ Fields: []*querypb.Field{ @@ -716,7 +690,7 @@ func TestTabletServerReplicaToMaster(t *testing.T) { sqltypes.NewVarBinary("update test_table set name = 2 where pk in (1) /* _stream test_table (pk ) (1 ); */"), }}, }) - tsv.SetServingType(topodatapb.TabletType_MASTER, true, nil) + turnOnTxEngine() if len(tsv.te.preparedPool.conns) != 1 { t.Errorf("len(tsv.te.preparedPool.conns): %d, want 1", len(tsv.te.preparedPool.conns)) } @@ -725,7 +699,10 @@ func TestTabletServerReplicaToMaster(t *testing.T) { if !reflect.DeepEqual(got, want) { t.Errorf("Prepared queries: %v, want %v", got, want) } - tsv.SetServingType(topodatapb.TabletType_REPLICA, true, nil) + turnOffTxEngine() + if v := len(tsv.te.preparedPool.conns); v != 0 { + t.Errorf("len(tsv.te.preparedPool.conns): %d, want 0", v) + } tsv.te.txPool.lastID.Set(1) // Ensure we continue past errors. @@ -753,7 +730,7 @@ func TestTabletServerReplicaToMaster(t *testing.T) { sqltypes.NewVarBinary("unused"), }}, }) - tsv.SetServingType(topodatapb.TabletType_MASTER, true, nil) + turnOnTxEngine() if len(tsv.te.preparedPool.conns) != 1 { t.Errorf("len(tsv.te.preparedPool.conns): %d, want 1", len(tsv.te.preparedPool.conns)) } @@ -770,7 +747,10 @@ func TestTabletServerReplicaToMaster(t *testing.T) { if v := tsv.te.txPool.lastID.Get(); v != 20 { t.Errorf("tsv.te.txPool.lastID.Get(): %d, want 20", v) } - tsv.SetServingType(topodatapb.TabletType_REPLICA, true, nil) + turnOffTxEngine() + if v := len(tsv.te.preparedPool.conns); v != 0 { + t.Errorf("len(tsv.te.preparedPool.conns): %d, want 0", v) + } } func TestTabletServerCreateTransaction(t *testing.T) { @@ -1182,7 +1162,7 @@ func TestTabletServerStreamExecute(t *testing.T) { defer tsv.StopService() ctx := context.Background() callback := func(*sqltypes.Result) error { return nil } - if err := tsv.StreamExecute(ctx, &target, executeSQL, nil, nil, callback); err != nil { + if err := tsv.StreamExecute(ctx, &target, executeSQL, nil, 0, nil, callback); err != nil { t.Fatalf("TabletServer.StreamExecute should success: %s, but get error: %v", executeSQL, err) } @@ -2512,11 +2492,10 @@ func TestTabletServerSplitQueryEqualSplitsOnStringColumn(t *testing.T) { func TestHandleExecUnknownError(t *testing.T) { ctx := context.Background() logStats := tabletenv.NewLogStats(ctx, "TestHandleExecError") - var err error testUtils := newTestUtils() config := testUtils.newQueryServiceConfig() tsv := NewTabletServerWithNilTopoServer(config) - defer tsv.handlePanicAndSendLogStats("select * from test_table", nil, &err, logStats) + defer tsv.handlePanicAndSendLogStats("select * from test_table", nil, logStats) panic("unknown exec error") } diff --git a/go/vt/vttablet/tabletserver/tx_engine.go b/go/vt/vttablet/tabletserver/tx_engine.go index 17f0405fb82..8ecd19b653c 100644 --- a/go/vt/vttablet/tabletserver/tx_engine.go +++ b/go/vt/vttablet/tabletserver/tx_engine.go @@ -17,9 +17,13 @@ limitations under the License. package tabletserver import ( + "fmt" "sync" "time" + "vitess.io/vitess/go/vt/proto/vtrpc" + "vitess.io/vitess/go/vt/vterrors" + "golang.org/x/net/context" "vitess.io/vitess/go/timer" @@ -35,15 +39,58 @@ import ( querypb "vitess.io/vitess/go/vt/proto/query" ) -// TxEngine handles transactions. +type txEngineState int + +// The TxEngine can be in any of these states +const ( + NotServing txEngineState = iota + Transitioning + AcceptingReadAndWrite + AcceptingReadOnly +) + +func (state txEngineState) String() string { + names := [...]string{ + "NotServing", + "Transitioning", + "AcceptReadWrite", + "AcceptingReadOnly"} + + if state < NotServing || state > AcceptingReadOnly { + return fmt.Sprintf("Unknown - %d", int(state)) + } + + return names[state] +} + +// TxEngine is responsible for handling the tx-pool and keeping read-write, read-only or not-serving +// states. It will start and shut down the underlying tx-pool as required. +// It does this in a concurrently safe way. type TxEngine struct { + // the following four fields are interconnected. `state` and `nextState` should be protected by the + // `stateLock` + // + // `nextState` is used when state is Transitioning. This means that in order to change the state of + // the transaction engine, we had to close transactions. `nextState` is the state we'll end up in + // once the transactions are closed + // while transitioning, `transitionSignal` will contain an open channel. Once the transition is + // over, the channel is closed to signal to any waiting goroutines that the state change is done. + stateLock sync.Mutex + state txEngineState + nextState txEngineState + transitionSignal chan struct{} + + // beginRequests is used to make sure that we do not make a state + // transition while creating new transactions + beginRequests sync.WaitGroup + dbconfigs *dbconfigs.DBConfigs - isOpen, twopcEnabled bool - shutdownGracePeriod time.Duration - coordinatorAddress string - abandonAge time.Duration - ticks *timer.Timer + twopcEnabled bool + shutdownGracePeriod time.Duration + coordinatorAddress string + abandonAge time.Duration + ticks *timer.Timer txPool *TxPool preparedPool *TxPreparedPool @@ -103,9 +150,205 @@ func NewTxEngine(checker connpool.MySQLChecker, config tabletenv.TabletConfig) * checker, ) te.twoPC = NewTwoPC(readPool) + te.transitionSignal = make(chan struct{}) + // By immediately closing this channel, all state changes can simply be made blocking by issuing the + // state change desired, and then selecting on this channel. It will contain an open channel while + // transitioning. + close(te.transitionSignal) + te.nextState = -1 + te.state = NotServing return te } +// Stop will stop accepting any new transactions. Transactions are immediately aborted. +func (te *TxEngine) Stop() error { + te.beginRequests.Wait() + te.stateLock.Lock() + + switch te.state { + case NotServing: + // Nothing to do. We are already stopped or stopping + te.stateLock.Unlock() + return nil + + case AcceptingReadAndWrite: + return te.transitionTo(NotServing) + + case AcceptingReadOnly: + // We are not master, so it's safe to kill all read-only transactions + te.close(true) + te.state = NotServing + te.stateLock.Unlock() + return nil + + case Transitioning: + te.nextState = NotServing + te.stateLock.Unlock() + te.blockUntilEndOfTransition() + return nil + + default: + te.stateLock.Unlock() + return te.unknownStateError() + } +} + +// AcceptReadWrite will start accepting all transactions. +// If transitioning from RO mode, transactions might need to be +// rolled back before new transactions can be accepts. +func (te *TxEngine) AcceptReadWrite() error { + te.beginRequests.Wait() + te.stateLock.Lock() + + switch te.state { + case AcceptingReadAndWrite: + // Nothing to do + te.stateLock.Unlock() + return nil + + case NotServing: + te.state = AcceptingReadAndWrite + te.open() + te.stateLock.Unlock() + return nil + + case Transitioning: + te.nextState = AcceptingReadAndWrite + te.stateLock.Unlock() + te.blockUntilEndOfTransition() + return nil + + case AcceptingReadOnly: + // We need to restart the tx-pool to make sure we handle 2PC correctly + te.close(true) + te.state = AcceptingReadAndWrite + te.open() + te.stateLock.Unlock() + return nil + + default: + return te.unknownStateError() + } +} + +// AcceptReadOnly will start accepting read-only transactions, but not full read and write transactions. +// If the engine is currently accepting full read and write transactions, they need to +// be rolled back. +func (te *TxEngine) AcceptReadOnly() error { + te.beginRequests.Wait() + te.stateLock.Lock() + switch te.state { + case AcceptingReadOnly: + // Nothing to do + te.stateLock.Unlock() + return nil + + case NotServing: + te.state = AcceptingReadOnly + te.open() + te.stateLock.Unlock() + return nil + + case AcceptingReadAndWrite: + return te.transitionTo(AcceptingReadOnly) + + case Transitioning: + te.nextState = AcceptingReadOnly + te.stateLock.Unlock() + te.blockUntilEndOfTransition() + return nil + + default: + te.stateLock.Unlock() + return te.unknownStateError() + } +} + +// Begin begins a transaction, and returns the associated transaction id. +// Subsequent statements can access the connection through the transaction id. +func (te *TxEngine) Begin(ctx context.Context, options *querypb.ExecuteOptions) (int64, error) { + te.stateLock.Lock() + + canOpenTransactions := te.state == AcceptingReadOnly || te.state == AcceptingReadAndWrite + if !canOpenTransactions { + // We are not in a state where we can start new transactions. Abort. + te.stateLock.Unlock() + return 0, vterrors.Errorf(vtrpc.Code_UNAVAILABLE, "tx engine can't accept new transactions in state %v", te.state) + } + + isWriteTransaction := options == nil || options.TransactionIsolation != querypb.ExecuteOptions_CONSISTENT_SNAPSHOT_READ_ONLY + if te.state == AcceptingReadOnly && isWriteTransaction { + te.stateLock.Unlock() + return 0, vterrors.Errorf(vtrpc.Code_UNAVAILABLE, "tx engine can only accept read-only transactions in current state") + } + + // By Add() to beginRequests, we block others from initiating state + // changes until we have finished adding this transaction + te.beginRequests.Add(1) + te.stateLock.Unlock() + + defer te.beginRequests.Done() + return te.txPool.Begin(ctx, options) +} + +// Commit commits the specified transaction. +func (te *TxEngine) Commit(ctx context.Context, transactionID int64, mc messageCommitter) error { + return te.txPool.Commit(ctx, transactionID, mc) +} + +// Rollback rolls back the specified transaction. +func (te *TxEngine) Rollback(ctx context.Context, transactionID int64) error { + return te.txPool.Rollback(ctx, transactionID) +} + +func (te *TxEngine) unknownStateError() error { + return vterrors.Errorf(vtrpc.Code_INTERNAL, "unknown state %v", te.state) +} + +func (te *TxEngine) blockUntilEndOfTransition() error { + select { + case <-te.transitionSignal: + return nil + } +} + +func (te *TxEngine) transitionTo(nextState txEngineState) error { + te.state = Transitioning + te.nextState = nextState + te.transitionSignal = make(chan struct{}) + te.stateLock.Unlock() + + // We do this outside the lock so others can see our state while we close up waiting transactions + te.close(true) + + te.stateLock.Lock() + defer func() { + // we use a lambda to make it clear in which order things need to happen + te.stateLock.Unlock() + close(te.transitionSignal) + }() + + if te.state != Transitioning { + return vterrors.Errorf(vtrpc.Code_INTERNAL, "this should never happen. the goroutine starting the transition should also finish it") + } + + // Once we reach this point, it's as if our state is NotServing, + // and we need to decide what the next step is + switch te.nextState { + case AcceptingReadAndWrite, AcceptingReadOnly: + te.state = te.nextState + te.open() + case NotServing: + te.state = NotServing + case Transitioning: + return vterrors.Errorf(vtrpc.Code_INTERNAL, "this should never happen. nextState cannot be transitioning") + } + + te.nextState = -1 + + return nil +} + // InitDBConfig must be called before Init. func (te *TxEngine) InitDBConfig(dbcfgs *dbconfigs.DBConfigs) { te.dbconfigs = dbcfgs @@ -120,28 +363,32 @@ func (te *TxEngine) Init() error { return nil } -// Open opens the TxEngine. If 2pc is enabled, it restores +// open opens the TxEngine. If 2pc is enabled, it restores // all previously prepared transactions from the redo log. -func (te *TxEngine) Open() { - if te.isOpen { - return - } +// this should only be called when the state is already locked +func (te *TxEngine) open() { te.txPool.Open(te.dbconfigs.AppWithDB(), te.dbconfigs.DbaWithDB(), te.dbconfigs.AppDebugWithDB()) - if !te.twopcEnabled { - te.isOpen = true - return - } - te.twoPC.Open(te.dbconfigs) - if err := te.prepareFromRedo(); err != nil { - // If this operation fails, we choose to raise an alert and - // continue anyway. Serving traffic is considered more important - // than blocking everything for the sake of a few transactions. - tabletenv.InternalErrors.Add("TwopcResurrection", 1) - log.Errorf("Could not prepare transactions: %v", err) + if te.twopcEnabled && te.state == AcceptingReadAndWrite { + te.twoPC.Open(te.dbconfigs) + if err := te.prepareFromRedo(); err != nil { + // If this operation fails, we choose to raise an alert and + // continue anyway. Serving traffic is considered more important + // than blocking everything for the sake of a few transactions. + tabletenv.InternalErrors.Add("TwopcResurrection", 1) + log.Errorf("Could not prepare transactions: %v", err) + } + te.startWatchdog() } - te.startWatchdog() - te.isOpen = true +} + +// StopGently will disregard common rules for when to kill transactions +// and wait forever for transactions to wrap up +func (te *TxEngine) StopGently() { + te.stateLock.Lock() + defer te.stateLock.Unlock() + te.close(false) + te.state = NotServing } // Close closes the TxEngine. If the immediate flag is on, @@ -150,10 +397,7 @@ func (te *TxEngine) Open() { // to conclude. If a shutdown grace period was specified, // the transactions are rolled back if they're not resolved // by that time. -func (te *TxEngine) Close(immediate bool) { - if !te.isOpen { - return - } +func (te *TxEngine) close(immediate bool) { // Shut down functions are idempotent. // No need to check if 2pc is enabled. te.stopWatchdog() @@ -177,6 +421,7 @@ func (te *TxEngine) Close(immediate bool) { } if te.shutdownGracePeriod <= 0 { // No grace period was specified. Never rollback. + te.rollbackPrepared() log.Info("No grace period specified: performing normal wait.") return } @@ -184,9 +429,8 @@ func (te *TxEngine) Close(immediate bool) { defer tmr.Stop() select { case <-tmr.C: - // The grace period has passed. Rollback, but don't touch the 2pc transactions. - log.Info("Grace period exceeded: rolling back non-2pc transactions now.") - te.txPool.RollbackNonBusy(tabletenv.LocalContext()) + log.Info("Grace period exceeded: rolling back now.") + te.rollbackTransactions() case <-poolEmpty: // The pool cleared before the timer kicked in. Just return. log.Info("Transactions completed before grace period: shutting down.") @@ -200,7 +444,6 @@ func (te *TxEngine) Close(immediate bool) { te.txPool.Close() te.twoPC.Close() - te.isOpen = false } // prepareFromRedo replays and prepares the transactions @@ -268,11 +511,18 @@ outer: // serving type. func (te *TxEngine) rollbackTransactions() { ctx := tabletenv.LocalContext() + for _, c := range te.preparedPool.FetchAll() { + te.txPool.LocalConclude(ctx, c) + } // The order of rollbacks is currently not material because // we don't allow new statements or commits during // this function. In case of any such change, this will // have to be revisited. te.txPool.RollbackNonBusy(ctx) +} + +func (te *TxEngine) rollbackPrepared() { + ctx := tabletenv.LocalContext() for _, c := range te.preparedPool.FetchAll() { te.txPool.LocalConclude(ctx, c) } diff --git a/go/vt/vttablet/tabletserver/tx_engine_test.go b/go/vt/vttablet/tabletserver/tx_engine_test.go index e570abed323..8cbfef5556c 100644 --- a/go/vt/vttablet/tabletserver/tx_engine_test.go +++ b/go/vt/vttablet/tabletserver/tx_engine_test.go @@ -17,9 +17,15 @@ limitations under the License. package tabletserver import ( + "fmt" + "strings" + "sync" "testing" "time" + "vitess.io/vitess/go/mysql/fakesqldb" + "vitess.io/vitess/go/sqltypes" + "vitess.io/vitess/go/vt/vttablet/tabletserver/tabletenv" "golang.org/x/net/context" @@ -40,49 +46,49 @@ func TestTxEngineClose(t *testing.T) { te.InitDBConfig(dbcfgs) // Normal close. - te.Open() + te.open() start := time.Now() - te.Close(false) + te.close(false) if diff := time.Now().Sub(start); diff > 500*time.Millisecond { t.Errorf("Close time: %v, must be under 0.5s", diff) } // Normal close with timeout wait. - te.Open() + te.open() c, err := te.txPool.LocalBegin(ctx, &querypb.ExecuteOptions{}) if err != nil { t.Fatal(err) } c.Recycle() start = time.Now() - te.Close(false) + te.close(false) if diff := time.Now().Sub(start); diff < 500*time.Millisecond { t.Errorf("Close time: %v, must be over 0.5s", diff) } // Immediate close. - te.Open() + te.open() c, err = te.txPool.LocalBegin(ctx, &querypb.ExecuteOptions{}) if err != nil { t.Fatal(err) } c.Recycle() start = time.Now() - te.Close(true) + te.close(true) if diff := time.Now().Sub(start); diff > 500*time.Millisecond { t.Errorf("Close time: %v, must be under 0.5s", diff) } // Normal close with short grace period. te.shutdownGracePeriod = 250 * time.Millisecond - te.Open() + te.open() c, err = te.txPool.LocalBegin(ctx, &querypb.ExecuteOptions{}) if err != nil { t.Fatal(err) } c.Recycle() start = time.Now() - te.Close(false) + te.close(false) if diff := time.Now().Sub(start); diff > 500*time.Millisecond { t.Errorf("Close time: %v, must be under 0.5s", diff) } @@ -92,7 +98,7 @@ func TestTxEngineClose(t *testing.T) { // Normal close with short grace period, but pool gets empty early. te.shutdownGracePeriod = 250 * time.Millisecond - te.Open() + te.open() c, err = te.txPool.LocalBegin(ctx, &querypb.ExecuteOptions{}) if err != nil { t.Fatal(err) @@ -107,7 +113,7 @@ func TestTxEngineClose(t *testing.T) { te.txPool.LocalConclude(ctx, c) }() start = time.Now() - te.Close(false) + te.close(false) if diff := time.Now().Sub(start); diff > 250*time.Millisecond { t.Errorf("Close time: %v, must be under 0.25s", diff) } @@ -116,7 +122,7 @@ func TestTxEngineClose(t *testing.T) { } // Immediate close, but connection is in use. - te.Open() + te.open() c, err = te.txPool.LocalBegin(ctx, &querypb.ExecuteOptions{}) if err != nil { t.Fatal(err) @@ -126,7 +132,7 @@ func TestTxEngineClose(t *testing.T) { te.txPool.LocalConclude(ctx, c) }() start = time.Now() - te.Close(true) + te.close(true) if diff := time.Now().Sub(start); diff > 250*time.Millisecond { t.Errorf("Close time: %v, must be under 0.25s", diff) } @@ -134,3 +140,358 @@ func TestTxEngineClose(t *testing.T) { t.Errorf("Close time: %v, must be over 0.1", diff) } } + +type TxType int + +const ( + NoTx TxType = iota + ReadOnlyAccepted + WriteAccepted + ReadOnlyRejected + WriteRejected +) + +func (t TxType) String() string { + names := [...]string{ + "no transaction", + "read only transaction accepted", + "write transaction accepted", + "read only transaction rejected", + "write transaction rejected", + } + + if t < NoTx || t > WriteRejected { + return "unknown" + } + + return names[t] +} + +type TestCase struct { + startState txEngineState + TxEngineStates []txEngineState + tx TxType + stateAssertion func(state txEngineState) error +} + +func (test TestCase) String() string { + var sb strings.Builder + sb.WriteString("start from ") + sb.WriteString(test.startState.String()) + sb.WriteString(" with ") + sb.WriteString(test.tx.String()) + + for _, change := range test.TxEngineStates { + sb.WriteString(" change state to ") + sb.WriteString(change.String()) + } + + return sb.String() +} + +func changeState(te *TxEngine, state txEngineState) error { + switch state { + case AcceptingReadAndWrite: + return te.AcceptReadWrite() + case AcceptingReadOnly: + return te.AcceptReadOnly() + case NotServing: + return te.Stop() + default: + return fmt.Errorf("don't know how to do that: %v", state) + } +} + +func TestWithInnerTests(outerT *testing.T) { + + tests := []TestCase{ + // Start from RW and test all single hop transitions with and without tx + {AcceptingReadAndWrite, []txEngineState{ + NotServing}, + NoTx, assertEndStateIs(NotServing)}, + + {AcceptingReadAndWrite, []txEngineState{ + AcceptingReadAndWrite}, + NoTx, assertEndStateIs(AcceptingReadAndWrite)}, + + {AcceptingReadAndWrite, []txEngineState{ + AcceptingReadOnly}, + NoTx, assertEndStateIs(AcceptingReadOnly)}, + + {AcceptingReadAndWrite, []txEngineState{ + NotServing}, + WriteAccepted, assertEndStateIs(NotServing)}, + + {AcceptingReadAndWrite, []txEngineState{ + AcceptingReadAndWrite}, + WriteAccepted, assertEndStateIs(AcceptingReadAndWrite)}, + + {AcceptingReadAndWrite, []txEngineState{ + AcceptingReadOnly}, + WriteAccepted, assertEndStateIs(AcceptingReadOnly)}, + + {AcceptingReadAndWrite, []txEngineState{ + NotServing}, + ReadOnlyAccepted, assertEndStateIs(NotServing)}, + + {AcceptingReadAndWrite, []txEngineState{ + AcceptingReadAndWrite}, + ReadOnlyAccepted, assertEndStateIs(AcceptingReadAndWrite)}, + + {AcceptingReadAndWrite, []txEngineState{ + AcceptingReadOnly}, + ReadOnlyAccepted, assertEndStateIs(AcceptingReadOnly)}, + + // Start from RW and test all transitions with and without tx, plus a concurrent Stop() + {AcceptingReadAndWrite, []txEngineState{ + NotServing, + NotServing}, + NoTx, assertEndStateIs(NotServing)}, + + {AcceptingReadAndWrite, []txEngineState{ + AcceptingReadAndWrite, + NotServing}, + NoTx, assertEndStateIs(NotServing)}, + + {AcceptingReadAndWrite, []txEngineState{ + AcceptingReadOnly, + NotServing}, + NoTx, assertEndStateIs(NotServing)}, + + {AcceptingReadAndWrite, []txEngineState{ + NotServing, + NotServing}, + WriteAccepted, assertEndStateIs(NotServing)}, + + {AcceptingReadAndWrite, []txEngineState{ + AcceptingReadAndWrite, + NotServing}, + WriteAccepted, assertEndStateIs(NotServing)}, + + {AcceptingReadAndWrite, []txEngineState{ + AcceptingReadOnly, + NotServing}, + WriteAccepted, assertEndStateIs(NotServing)}, + + // Start from RW and test all transitions with and without tx, plus a concurrent ReadOnly() + {AcceptingReadAndWrite, []txEngineState{ + NotServing, + AcceptingReadOnly}, + NoTx, assertEndStateIs(AcceptingReadOnly)}, + + {AcceptingReadAndWrite, []txEngineState{ + AcceptingReadAndWrite, + AcceptingReadOnly}, + NoTx, assertEndStateIs(AcceptingReadOnly)}, + + {AcceptingReadAndWrite, []txEngineState{ + AcceptingReadOnly, + AcceptingReadOnly}, + NoTx, assertEndStateIs(AcceptingReadOnly)}, + + {AcceptingReadAndWrite, []txEngineState{ + NotServing, + AcceptingReadOnly}, + WriteAccepted, assertEndStateIs(AcceptingReadOnly)}, + + {AcceptingReadAndWrite, []txEngineState{ + AcceptingReadAndWrite, + AcceptingReadOnly}, + WriteAccepted, assertEndStateIs(AcceptingReadOnly)}, + + {AcceptingReadAndWrite, []txEngineState{ + AcceptingReadOnly, + AcceptingReadOnly}, + WriteAccepted, assertEndStateIs(AcceptingReadOnly)}, + + // Start from RO and test all single hop transitions with and without tx + {AcceptingReadOnly, []txEngineState{ + NotServing}, + NoTx, assertEndStateIs(NotServing)}, + + {AcceptingReadOnly, []txEngineState{ + AcceptingReadAndWrite}, + NoTx, assertEndStateIs(AcceptingReadAndWrite)}, + + {AcceptingReadOnly, []txEngineState{ + AcceptingReadOnly}, + NoTx, assertEndStateIs(AcceptingReadOnly)}, + + {AcceptingReadOnly, []txEngineState{ + NotServing}, + WriteRejected, assertEndStateIs(NotServing)}, + + {AcceptingReadOnly, []txEngineState{ + AcceptingReadAndWrite}, + WriteRejected, assertEndStateIs(AcceptingReadAndWrite)}, + + {AcceptingReadOnly, []txEngineState{ + AcceptingReadOnly}, + WriteRejected, assertEndStateIs(AcceptingReadOnly)}, + + // Start from RO and test all transitions with and without tx, plus a concurrent Stop() + {AcceptingReadOnly, []txEngineState{ + NotServing, + NotServing}, + NoTx, assertEndStateIs(NotServing)}, + + {AcceptingReadOnly, []txEngineState{ + AcceptingReadAndWrite, + NotServing}, + NoTx, assertEndStateIs(NotServing)}, + + {AcceptingReadOnly, []txEngineState{ + AcceptingReadOnly, + NotServing}, + NoTx, assertEndStateIs(NotServing)}, + + {AcceptingReadOnly, []txEngineState{ + NotServing, + NotServing}, + WriteRejected, assertEndStateIs(NotServing)}, + + {AcceptingReadOnly, []txEngineState{ + AcceptingReadAndWrite, + NotServing}, + WriteRejected, assertEndStateIs(NotServing)}, + + {AcceptingReadOnly, []txEngineState{ + AcceptingReadOnly, + NotServing}, + WriteRejected, assertEndStateIs(NotServing)}, + + // Start from RO and test all transitions with and without tx, plus a concurrent ReadWrite() + {AcceptingReadOnly, []txEngineState{ + NotServing, + AcceptingReadAndWrite}, + NoTx, assertEndStateIs(AcceptingReadAndWrite)}, + + {AcceptingReadOnly, []txEngineState{ + AcceptingReadAndWrite, + AcceptingReadAndWrite}, + NoTx, assertEndStateIs(AcceptingReadAndWrite)}, + + {AcceptingReadOnly, []txEngineState{ + AcceptingReadOnly, + AcceptingReadAndWrite}, + NoTx, assertEndStateIs(AcceptingReadAndWrite)}, + + {AcceptingReadOnly, []txEngineState{ + NotServing, + AcceptingReadAndWrite}, + WriteRejected, assertEndStateIs(AcceptingReadAndWrite)}, + + {AcceptingReadOnly, []txEngineState{ + AcceptingReadAndWrite, + AcceptingReadAndWrite}, + WriteRejected, assertEndStateIs(AcceptingReadAndWrite)}, + + {AcceptingReadOnly, []txEngineState{ + AcceptingReadOnly, + AcceptingReadAndWrite}, + WriteRejected, assertEndStateIs(AcceptingReadAndWrite)}, + + // Make sure that all transactions are rejected when we are not serving + {NotServing, []txEngineState{}, + WriteRejected, assertEndStateIs(NotServing)}, + + {NotServing, []txEngineState{}, + ReadOnlyRejected, assertEndStateIs(NotServing)}, + } + + for _, test := range tests { + outerT.Run(test.String(), func(t *testing.T) { + + db := setUpQueryExecutorTest(t) + db.AddQuery("set transaction isolation level REPEATABLE READ", &sqltypes.Result{}) + db.AddQuery("start transaction with consistent snapshot, read only", &sqltypes.Result{}) + defer db.Close() + te := setupTxEngine(db) + + failIfError(t, + changeState(te, test.startState)) + + switch test.tx { + case NoTx: + // nothing to do + case WriteAccepted: + failIfError(t, + startTransaction(te, true)) + case ReadOnlyAccepted: + failIfError(t, + startTransaction(te, false)) + case WriteRejected: + err := startTransaction(te, true) + if err == nil { + t.Fatalf("expected an error to be returned when opening write transaction, but got nil") + } + case ReadOnlyRejected: + err := startTransaction(te, false) + if err == nil { + t.Fatalf("expected an error to be returned when opening read transaction, but got nil") + } + default: + t.Fatalf("don't know how to [%v]", test.tx) + } + + wg := sync.WaitGroup{} + for _, newState := range test.TxEngineStates { + wg.Add(1) + go func(s txEngineState) { + defer wg.Done() + + failIfError(t, + changeState(te, s)) + }(newState) + + // We give the state changes a chance to get started + time.Sleep(10 * time.Millisecond) + } + + // Let's wait for all transitions to wrap up + wg.Wait() + + failIfError(t, + test.stateAssertion(te.state)) + }) + } +} + +func setupTxEngine(db *fakesqldb.DB) *TxEngine { + testUtils := newTestUtils() + dbcfgs := testUtils.newDBConfigs(db) + config := tabletenv.DefaultQsConfig + config.TransactionCap = 10 + config.TransactionTimeout = 0.5 + config.TxShutDownGracePeriod = 0 + te := NewTxEngine(nil, config) + te.InitDBConfig(dbcfgs) + return te +} + +func failIfError(t *testing.T, err error) { + if err != nil { + t.Logf("%+v", err) + t.FailNow() + } +} + +func assertEndStateIs(expected txEngineState) func(actual txEngineState) error { + return func(actual txEngineState) error { + if actual != expected { + return fmt.Errorf("expected the end state to be %v, but it was %v", expected, actual) + } + return nil + } +} + +func startTransaction(te *TxEngine, writeTransaction bool) error { + options := &querypb.ExecuteOptions{} + if writeTransaction { + options.TransactionIsolation = querypb.ExecuteOptions_DEFAULT + } else { + options.TransactionIsolation = querypb.ExecuteOptions_CONSISTENT_SNAPSHOT_READ_ONLY + } + _, err := te.Begin(context.Background(), options) + return err +} diff --git a/go/vt/vttablet/tabletserver/tx_pool.go b/go/vt/vttablet/tabletserver/tx_pool.go index 8d610becb6d..44b07e125ef 100644 --- a/go/vt/vttablet/tabletserver/tx_pool.go +++ b/go/vt/vttablet/tabletserver/tx_pool.go @@ -54,15 +54,22 @@ const ( const txLogInterval = time.Duration(1 * time.Minute) +type queries struct { + setIsolationLevel string + openTransaction string +} + var ( txOnce sync.Once txStats = stats.NewTimings("Transactions", "Transaction stats", "operation") - txIsolations = map[querypb.ExecuteOptions_TransactionIsolation]string{ - querypb.ExecuteOptions_REPEATABLE_READ: "set transaction isolation level REPEATABLE READ", - querypb.ExecuteOptions_READ_COMMITTED: "set transaction isolation level READ COMMITTED", - querypb.ExecuteOptions_READ_UNCOMMITTED: "set transaction isolation level READ UNCOMMITTED", - querypb.ExecuteOptions_SERIALIZABLE: "set transaction isolation level SERIALIZABLE", + txIsolations = map[querypb.ExecuteOptions_TransactionIsolation]queries{ + querypb.ExecuteOptions_DEFAULT: {setIsolationLevel: "", openTransaction: "begin"}, + querypb.ExecuteOptions_REPEATABLE_READ: {setIsolationLevel: "REPEATABLE READ", openTransaction: "begin"}, + querypb.ExecuteOptions_READ_COMMITTED: {setIsolationLevel: "READ COMMITTED", openTransaction: "begin"}, + querypb.ExecuteOptions_READ_UNCOMMITTED: {setIsolationLevel: "READ UNCOMMITTED", openTransaction: "begin"}, + querypb.ExecuteOptions_SERIALIZABLE: {setIsolationLevel: "SERIALIZABLE", openTransaction: "begin"}, + querypb.ExecuteOptions_CONSISTENT_SNAPSHOT_READ_ONLY: {setIsolationLevel: "REPEATABLE READ", openTransaction: "start transaction with consistent snapshot, read only"}, } ) @@ -232,14 +239,18 @@ func (axp *TxPool) Begin(ctx context.Context, options *querypb.ExecuteOptions) ( return 0, err } - if query, ok := txIsolations[options.GetTransactionIsolation()]; ok { - if _, err := conn.Exec(ctx, query, 1, false); err != nil { - return 0, err + if queries, ok := txIsolations[options.GetTransactionIsolation()]; ok { + if queries.setIsolationLevel != "" { + if _, err := conn.Exec(ctx, "set transaction isolation level "+queries.setIsolationLevel, 1, false); err != nil { + return 0, err + } } - } - if _, err := conn.Exec(ctx, "begin", 1, false); err != nil { - return 0, err + if _, err := conn.Exec(ctx, queries.openTransaction, 1, false); err != nil { + return 0, err + } + } else { + return 0, fmt.Errorf("don't know how to open a transaction of this type: %v", options.GetTransactionIsolation()) } beginSucceeded = true diff --git a/go/vt/vttablet/tmclient/rpc_client_api.go b/go/vt/vttablet/tmclient/rpc_client_api.go index d02115afb40..77c344d35d4 100644 --- a/go/vt/vttablet/tmclient/rpc_client_api.go +++ b/go/vt/vttablet/tmclient/rpc_client_api.go @@ -89,6 +89,10 @@ type TabletManagerClient interface { // ApplySchema will apply a schema change ApplySchema(ctx context.Context, tablet *topodatapb.Tablet, change *tmutils.SchemaChange) (*tabletmanagerdatapb.SchemaChangeResult, error) + LockTables(ctx context.Context, tablet *topodatapb.Tablet) error + + UnlockTables(ctx context.Context, tablet *topodatapb.Tablet) error + // ExecuteFetchAsDba executes a query remotely using the DBA pool. // If usePool is set, a connection pool may be used to make the // query faster. Close() should close the pool in that case. @@ -122,6 +126,9 @@ type TabletManagerClient interface { // StartSlave starts the mysql replication StartSlave(ctx context.Context, tablet *topodatapb.Tablet) error + // StartSlaveUntilAfter starts replication until after the position specified + StartSlaveUntilAfter(ctx context.Context, tablet *topodatapb.Tablet, position string, duration time.Duration) error + // TabletExternallyReparented tells a tablet it is now the master, after an // external tool has already promoted the underlying mysqld to master and // reparented the other mysqld servers to it. diff --git a/go/vt/worker/diff_utils.go b/go/vt/worker/diff_utils.go index 43b469fd21b..551e12281fa 100644 --- a/go/vt/worker/diff_utils.go +++ b/go/vt/worker/diff_utils.go @@ -91,6 +91,61 @@ func NewQueryResultReaderForTablet(ctx context.Context, ts *topo.Server, tabletA }, nil } +// NewTransactionalQueryResultReaderForTablet creates a new QueryResultReader for +// the provided tablet / sql query, and runs it in an existing transaction +func NewTransactionalQueryResultReaderForTablet(ctx context.Context, ts *topo.Server, tabletAlias *topodatapb.TabletAlias, sql string, txID int64) (*QueryResultReader, error) { + shortCtx, cancel := context.WithTimeout(ctx, *remoteActionsTimeout) + tablet, err := ts.GetTablet(shortCtx, tabletAlias) + cancel() + if err != nil { + return nil, err + } + + conn, err := tabletconn.GetDialer()(tablet.Tablet, grpcclient.FailFast(false)) + if err != nil { + return nil, err + } + + stream := queryservice.ExecuteWithTransactionalStreamer(ctx, conn, &querypb.Target{ + Keyspace: tablet.Tablet.Keyspace, + Shard: tablet.Tablet.Shard, + TabletType: tablet.Tablet.Type, + }, sql, make(map[string]*querypb.BindVariable), txID, nil) + + // read the columns, or grab the error + cols, err := stream.Recv() + if err != nil { + return nil, fmt.Errorf("Cannot read Fields for query '%v': %v", sql, err) + } + + return &QueryResultReader{ + output: stream, + fields: cols.Fields, + conn: conn, + }, nil +} + +// RollbackTransaction rolls back the transaction +func RollbackTransaction(ctx context.Context, ts *topo.Server, tabletAlias *topodatapb.TabletAlias, txID int64) error { + shortCtx, cancel := context.WithTimeout(ctx, *remoteActionsTimeout) + tablet, err := ts.GetTablet(shortCtx, tabletAlias) + cancel() + if err != nil { + return err + } + + conn, err := tabletconn.GetDialer()(tablet.Tablet, grpcclient.FailFast(false)) + if err != nil { + return err + } + + return conn.Rollback(ctx, &querypb.Target{ + Keyspace: tablet.Tablet.Keyspace, + Shard: tablet.Tablet.Shard, + TabletType: tablet.Tablet.Type, + }, txID) +} + // Next returns the next result on the stream. It implements ResultReader. func (qrr *QueryResultReader) Next() (*sqltypes.Result, error) { return qrr.output.Recv() @@ -201,6 +256,16 @@ func TableScan(ctx context.Context, log logutil.Logger, ts *topo.Server, tabletA return NewQueryResultReaderForTablet(ctx, ts, tabletAlias, sql) } +// TransactionalTableScan does the same thing as TableScan, but runs inside a transaction +func TransactionalTableScan(ctx context.Context, log logutil.Logger, ts *topo.Server, tabletAlias *topodatapb.TabletAlias, txID int64, td *tabletmanagerdatapb.TableDefinition) (*QueryResultReader, error) { + sql := fmt.Sprintf("SELECT %v FROM %v", strings.Join(escapeAll(orderedColumns(td)), ", "), sqlescape.EscapeID(td.Name)) + if len(td.PrimaryKeyColumns) > 0 { + sql += fmt.Sprintf(" ORDER BY %v", strings.Join(escapeAll(td.PrimaryKeyColumns), ", ")) + } + log.Infof("SQL query for %v/%v: %v", topoproto.TabletAliasString(tabletAlias), td.Name, sql) + return NewTransactionalQueryResultReaderForTablet(ctx, ts, tabletAlias, sql, txID) +} + // TableScanByKeyRange returns a QueryResultReader that gets all the // rows from a table that match the supplied KeyRange, ordered by // Primary Key. The returned columns are ordered with the Primary Key diff --git a/go/vt/worker/legacy_split_clone_test.go b/go/vt/worker/legacy_split_clone_test.go index 8754f0c7d6d..1bdd773fb8b 100644 --- a/go/vt/worker/legacy_split_clone_test.go +++ b/go/vt/worker/legacy_split_clone_test.go @@ -238,7 +238,7 @@ type legacyTestQueryService struct { *fakes.StreamHealthQueryService } -func (sq *legacyTestQueryService) StreamExecute(ctx context.Context, target *querypb.Target, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions, callback func(reply *sqltypes.Result) error) error { +func (sq *legacyTestQueryService) StreamExecute(ctx context.Context, target *querypb.Target, sql string, bindVariables map[string]*querypb.BindVariable, transactionID int64, options *querypb.ExecuteOptions, callback func(reply *sqltypes.Result) error) error { // Custom parsing of the query we expect. min := legacySplitCloneTestMin max := legacySplitCloneTestMax diff --git a/go/vt/worker/multi_split_diff_test.go b/go/vt/worker/multi_split_diff_test.go index 7811f5b1b54..8195fb5628c 100644 --- a/go/vt/worker/multi_split_diff_test.go +++ b/go/vt/worker/multi_split_diff_test.go @@ -49,7 +49,7 @@ type msdDestinationTabletServer struct { shardIndex int } -func (sq *msdDestinationTabletServer) StreamExecute(ctx context.Context, target *querypb.Target, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions, callback func(reply *sqltypes.Result) error) error { +func (sq *msdDestinationTabletServer) StreamExecute(ctx context.Context, target *querypb.Target, sql string, bindVariables map[string]*querypb.BindVariable, transactionID int64, options *querypb.ExecuteOptions, callback func(reply *sqltypes.Result) error) error { if strings.Contains(sql, sq.excludedTable) { sq.t.Errorf("Split Diff operation on destination should skip the excluded table: %v query: %v", sq.excludedTable, sql) } @@ -111,7 +111,7 @@ type msdSourceTabletServer struct { v3 bool } -func (sq *msdSourceTabletServer) StreamExecute(ctx context.Context, target *querypb.Target, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions, callback func(reply *sqltypes.Result) error) error { +func (sq *msdSourceTabletServer) StreamExecute(ctx context.Context, target *querypb.Target, sql string, bindVariables map[string]*querypb.BindVariable, transactionID int64, options *querypb.ExecuteOptions, callback func(reply *sqltypes.Result) error) error { if strings.Contains(sql, sq.excludedTable) { sq.t.Errorf("Split Diff operation on source should skip the excluded table: %v query: %v", sq.excludedTable, sql) } @@ -277,7 +277,7 @@ func testMultiSplitDiff(t *testing.T, v3 bool) { qs := fakes.NewStreamHealthQueryService(sourceRdonly.Target()) qs.AddDefaultHealthResponse() grpcqueryservice.Register(sourceRdonly.RPCServer, &msdSourceTabletServer{ - t: t, + t: t, StreamHealthQueryService: qs, excludedTable: excludedTable, v3: v3, @@ -288,7 +288,7 @@ func testMultiSplitDiff(t *testing.T, v3 bool) { qs := fakes.NewStreamHealthQueryService(destRdonly.Target()) qs.AddDefaultHealthResponse() grpcqueryservice.Register(destRdonly.RPCServer, &msdDestinationTabletServer{ - t: t, + t: t, StreamHealthQueryService: qs, excludedTable: excludedTable, shardIndex: 0, @@ -299,7 +299,7 @@ func testMultiSplitDiff(t *testing.T, v3 bool) { qs := fakes.NewStreamHealthQueryService(destRdonly.Target()) qs.AddDefaultHealthResponse() grpcqueryservice.Register(destRdonly.RPCServer, &msdDestinationTabletServer{ - t: t, + t: t, StreamHealthQueryService: qs, excludedTable: excludedTable, shardIndex: 1, diff --git a/go/vt/worker/split_clone_test.go b/go/vt/worker/split_clone_test.go index 911a5c8ff82..6e219171ed2 100644 --- a/go/vt/worker/split_clone_test.go +++ b/go/vt/worker/split_clone_test.go @@ -342,7 +342,7 @@ func newTestQueryService(t *testing.T, target querypb.Target, shqs *fakes.Stream } } -func (sq *testQueryService) StreamExecute(ctx context.Context, target *querypb.Target, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions, callback func(reply *sqltypes.Result) error) error { +func (sq *testQueryService) StreamExecute(ctx context.Context, target *querypb.Target, sql string, bindVariables map[string]*querypb.BindVariable, transactionID int64, options *querypb.ExecuteOptions, callback func(reply *sqltypes.Result) error) error { // Custom parsing of the query we expect. // Example: SELECT `id`, `msg`, `keyspace_id` FROM table1 WHERE id>=180 AND id<190 ORDER BY id min := math.MinInt32 diff --git a/go/vt/worker/split_diff_test.go b/go/vt/worker/split_diff_test.go index efc8f4be612..c281852f804 100644 --- a/go/vt/worker/split_diff_test.go +++ b/go/vt/worker/split_diff_test.go @@ -48,7 +48,7 @@ type destinationTabletServer struct { excludedTable string } -func (sq *destinationTabletServer) StreamExecute(ctx context.Context, target *querypb.Target, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions, callback func(reply *sqltypes.Result) error) error { +func (sq *destinationTabletServer) StreamExecute(ctx context.Context, target *querypb.Target, sql string, bindVariables map[string]*querypb.BindVariable, transactionID int64, options *querypb.ExecuteOptions, callback func(reply *sqltypes.Result) error) error { if strings.Contains(sql, sq.excludedTable) { sq.t.Errorf("Split Diff operation on destination should skip the excluded table: %v query: %v", sq.excludedTable, sql) } @@ -110,7 +110,7 @@ type sourceTabletServer struct { v3 bool } -func (sq *sourceTabletServer) StreamExecute(ctx context.Context, target *querypb.Target, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions, callback func(reply *sqltypes.Result) error) error { +func (sq *sourceTabletServer) StreamExecute(ctx context.Context, target *querypb.Target, sql string, bindVariables map[string]*querypb.BindVariable, transactionID int64, options *querypb.ExecuteOptions, callback func(reply *sqltypes.Result) error) error { if strings.Contains(sql, sq.excludedTable) { sq.t.Errorf("Split Diff operation on source should skip the excluded table: %v query: %v", sq.excludedTable, sql) } diff --git a/go/vt/worker/vertical_split_diff_test.go b/go/vt/worker/vertical_split_diff_test.go index c2c05a97f2c..826e965700e 100644 --- a/go/vt/worker/vertical_split_diff_test.go +++ b/go/vt/worker/vertical_split_diff_test.go @@ -46,7 +46,7 @@ type verticalDiffTabletServer struct { *fakes.StreamHealthQueryService } -func (sq *verticalDiffTabletServer) StreamExecute(ctx context.Context, target *querypb.Target, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions, callback func(reply *sqltypes.Result) error) error { +func (sq *verticalDiffTabletServer) StreamExecute(ctx context.Context, target *querypb.Target, sql string, bindVariables map[string]*querypb.BindVariable, transactionID int64, options *querypb.ExecuteOptions, callback func(reply *sqltypes.Result) error) error { if !strings.Contains(sql, "moving1") { sq.t.Errorf("Vertical Split Diff operation should only operate on the 'moving1' table. query: %v", sql) } diff --git a/proto/query.proto b/proto/query.proto index e55c95674b9..53525325378 100644 --- a/proto/query.proto +++ b/proto/query.proto @@ -288,6 +288,10 @@ message ExecuteOptions { READ_COMMITTED = 2; READ_UNCOMMITTED = 3; SERIALIZABLE = 4; + + // This is not an "official" transaction level but it will do a + // START TRANSACTION WITH CONSISTENT SNAPSHOT, READ ONLY + CONSISTENT_SNAPSHOT_READ_ONLY = 5; } TransactionIsolation transaction_isolation = 9; @@ -453,6 +457,7 @@ message StreamExecuteRequest { Target target = 3; BoundQuery query = 4; ExecuteOptions options = 5; + int64 transaction_id = 6; } // StreamExecuteResponse is the returned value from StreamExecute diff --git a/proto/tabletmanagerdata.proto b/proto/tabletmanagerdata.proto index 0898209b5a6..7606d568405 100644 --- a/proto/tabletmanagerdata.proto +++ b/proto/tabletmanagerdata.proto @@ -213,6 +213,18 @@ message ApplySchemaResponse { SchemaDefinition after_schema = 2; } +message LockTablesRequest { +} + +message LockTablesResponse { +} + +message UnlockTablesRequest { +} + +message UnlockTablesResponse { +} + message ExecuteFetchAsDbaRequest { bytes query = 1; string db_name = 2; @@ -280,6 +292,14 @@ message StartSlaveRequest { message StartSlaveResponse { } +message StartSlaveUntilAfterRequest { + string position = 1; + int64 wait_timeout = 2; +} + +message StartSlaveUntilAfterResponse { +} + message TabletExternallyReparentedRequest { // external_id is an string value that may be provided by an external // agent for tracking purposes. The tablet will emit this string in diff --git a/proto/tabletmanagerservice.proto b/proto/tabletmanagerservice.proto index e43de2938e1..ebc83056d86 100644 --- a/proto/tabletmanagerservice.proto +++ b/proto/tabletmanagerservice.proto @@ -68,6 +68,10 @@ service TabletManager { rpc ApplySchema(tabletmanagerdata.ApplySchemaRequest) returns (tabletmanagerdata.ApplySchemaResponse) {}; + rpc LockTables(tabletmanagerdata.LockTablesRequest) returns (tabletmanagerdata.LockTablesResponse) {}; + + rpc UnlockTables(tabletmanagerdata.UnlockTablesRequest) returns (tabletmanagerdata.UnlockTablesResponse) {}; + rpc ExecuteFetchAsDba(tabletmanagerdata.ExecuteFetchAsDbaRequest) returns (tabletmanagerdata.ExecuteFetchAsDbaResponse) {}; rpc ExecuteFetchAsAllPrivs(tabletmanagerdata.ExecuteFetchAsAllPrivsRequest) returns (tabletmanagerdata.ExecuteFetchAsAllPrivsResponse) {}; @@ -94,6 +98,10 @@ service TabletManager { // StartSlave starts the mysql replication rpc StartSlave(tabletmanagerdata.StartSlaveRequest) returns (tabletmanagerdata.StartSlaveResponse) {}; + // StartSlave starts the mysql replication until and including + // the provided position + rpc StartSlaveUntilAfter(tabletmanagerdata.StartSlaveUntilAfterRequest) returns (tabletmanagerdata.StartSlaveUntilAfterResponse) {}; + // TabletExternallyReparented tells a tablet that its underlying MySQL is // currently the master. It is only used in environments (tabletmanagerdata.such as Vitess+MoB) // in which MySQL is reparented by some agent external to Vitess, and then diff --git a/py/vtproto/query_pb2.py b/py/vtproto/query_pb2.py index fa74a6018bd..77b47ac9826 100644 --- a/py/vtproto/query_pb2.py +++ b/py/vtproto/query_pb2.py @@ -22,7 +22,7 @@ name='query.proto', package='query', syntax='proto3', - serialized_pb=_b('\n\x0bquery.proto\x12\x05query\x1a\x0etopodata.proto\x1a\x0bvtrpc.proto\"b\n\x06Target\x12\x10\n\x08keyspace\x18\x01 \x01(\t\x12\r\n\x05shard\x18\x02 \x01(\t\x12)\n\x0btablet_type\x18\x03 \x01(\x0e\x32\x14.topodata.TabletType\x12\x0c\n\x04\x63\x65ll\x18\x04 \x01(\t\"2\n\x0eVTGateCallerID\x12\x10\n\x08username\x18\x01 \x01(\t\x12\x0e\n\x06groups\x18\x02 \x03(\t\"@\n\nEventToken\x12\x11\n\ttimestamp\x18\x01 \x01(\x03\x12\r\n\x05shard\x18\x02 \x01(\t\x12\x10\n\x08position\x18\x03 \x01(\t\"1\n\x05Value\x12\x19\n\x04type\x18\x01 \x01(\x0e\x32\x0b.query.Type\x12\r\n\x05value\x18\x02 \x01(\x0c\"V\n\x0c\x42indVariable\x12\x19\n\x04type\x18\x01 \x01(\x0e\x32\x0b.query.Type\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x1c\n\x06values\x18\x03 \x03(\x0b\x32\x0c.query.Value\"\xa2\x01\n\nBoundQuery\x12\x0b\n\x03sql\x18\x01 \x01(\t\x12<\n\x0e\x62ind_variables\x18\x02 \x03(\x0b\x32$.query.BoundQuery.BindVariablesEntry\x1aI\n\x12\x42indVariablesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.query.BindVariable:\x02\x38\x01\"\xe0\x04\n\x0e\x45xecuteOptions\x12\x1b\n\x13include_event_token\x18\x02 \x01(\x08\x12.\n\x13\x63ompare_event_token\x18\x03 \x01(\x0b\x32\x11.query.EventToken\x12=\n\x0fincluded_fields\x18\x04 \x01(\x0e\x32$.query.ExecuteOptions.IncludedFields\x12\x19\n\x11\x63lient_found_rows\x18\x05 \x01(\x08\x12\x30\n\x08workload\x18\x06 \x01(\x0e\x32\x1e.query.ExecuteOptions.Workload\x12\x18\n\x10sql_select_limit\x18\x08 \x01(\x03\x12I\n\x15transaction_isolation\x18\t \x01(\x0e\x32*.query.ExecuteOptions.TransactionIsolation\x12\x1d\n\x15skip_query_plan_cache\x18\n \x01(\x08\";\n\x0eIncludedFields\x12\x11\n\rTYPE_AND_NAME\x10\x00\x12\r\n\tTYPE_ONLY\x10\x01\x12\x07\n\x03\x41LL\x10\x02\"8\n\x08Workload\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x08\n\x04OLTP\x10\x01\x12\x08\n\x04OLAP\x10\x02\x12\x07\n\x03\x44\x42\x41\x10\x03\"t\n\x14TransactionIsolation\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\x13\n\x0fREPEATABLE_READ\x10\x01\x12\x12\n\x0eREAD_COMMITTED\x10\x02\x12\x14\n\x10READ_UNCOMMITTED\x10\x03\x12\x10\n\x0cSERIALIZABLE\x10\x04J\x04\x08\x01\x10\x02\"\xbf\x01\n\x05\x46ield\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x19\n\x04type\x18\x02 \x01(\x0e\x32\x0b.query.Type\x12\r\n\x05table\x18\x03 \x01(\t\x12\x11\n\torg_table\x18\x04 \x01(\t\x12\x10\n\x08\x64\x61tabase\x18\x05 \x01(\t\x12\x10\n\x08org_name\x18\x06 \x01(\t\x12\x15\n\rcolumn_length\x18\x07 \x01(\r\x12\x0f\n\x07\x63harset\x18\x08 \x01(\r\x12\x10\n\x08\x64\x65\x63imals\x18\t \x01(\r\x12\r\n\x05\x66lags\x18\n \x01(\r\"&\n\x03Row\x12\x0f\n\x07lengths\x18\x01 \x03(\x12\x12\x0e\n\x06values\x18\x02 \x01(\x0c\"G\n\x0cResultExtras\x12&\n\x0b\x65vent_token\x18\x01 \x01(\x0b\x32\x11.query.EventToken\x12\x0f\n\x07\x66resher\x18\x02 \x01(\x08\"\x94\x01\n\x0bQueryResult\x12\x1c\n\x06\x66ields\x18\x01 \x03(\x0b\x32\x0c.query.Field\x12\x15\n\rrows_affected\x18\x02 \x01(\x04\x12\x11\n\tinsert_id\x18\x03 \x01(\x04\x12\x18\n\x04rows\x18\x04 \x03(\x0b\x32\n.query.Row\x12#\n\x06\x65xtras\x18\x05 \x01(\x0b\x32\x13.query.ResultExtras\"-\n\x0cQueryWarning\x12\x0c\n\x04\x63ode\x18\x01 \x01(\r\x12\x0f\n\x07message\x18\x02 \x01(\t\"\xca\x02\n\x0bStreamEvent\x12\x30\n\nstatements\x18\x01 \x03(\x0b\x32\x1c.query.StreamEvent.Statement\x12&\n\x0b\x65vent_token\x18\x02 \x01(\x0b\x32\x11.query.EventToken\x1a\xe0\x01\n\tStatement\x12\x37\n\x08\x63\x61tegory\x18\x01 \x01(\x0e\x32%.query.StreamEvent.Statement.Category\x12\x12\n\ntable_name\x18\x02 \x01(\t\x12(\n\x12primary_key_fields\x18\x03 \x03(\x0b\x32\x0c.query.Field\x12&\n\x12primary_key_values\x18\x04 \x03(\x0b\x32\n.query.Row\x12\x0b\n\x03sql\x18\x05 \x01(\x0c\"\'\n\x08\x43\x61tegory\x12\t\n\x05\x45rror\x10\x00\x12\x07\n\x03\x44ML\x10\x01\x12\x07\n\x03\x44\x44L\x10\x02\"\xf3\x01\n\x0e\x45xecuteRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12 \n\x05query\x18\x04 \x01(\x0b\x32\x11.query.BoundQuery\x12\x16\n\x0etransaction_id\x18\x05 \x01(\x03\x12&\n\x07options\x18\x06 \x01(\x0b\x32\x15.query.ExecuteOptions\"5\n\x0f\x45xecuteResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\"U\n\x0fResultWithError\x12\x1e\n\x05\x65rror\x18\x01 \x01(\x0b\x32\x0f.vtrpc.RPCError\x12\"\n\x06result\x18\x02 \x01(\x0b\x32\x12.query.QueryResult\"\x92\x02\n\x13\x45xecuteBatchRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\"\n\x07queries\x18\x04 \x03(\x0b\x32\x11.query.BoundQuery\x12\x16\n\x0e\x61s_transaction\x18\x05 \x01(\x08\x12\x16\n\x0etransaction_id\x18\x06 \x01(\x03\x12&\n\x07options\x18\x07 \x01(\x0b\x32\x15.query.ExecuteOptions\";\n\x14\x45xecuteBatchResponse\x12#\n\x07results\x18\x01 \x03(\x0b\x32\x12.query.QueryResult\"\xe1\x01\n\x14StreamExecuteRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12 \n\x05query\x18\x04 \x01(\x0b\x32\x11.query.BoundQuery\x12&\n\x07options\x18\x05 \x01(\x0b\x32\x15.query.ExecuteOptions\";\n\x15StreamExecuteResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\"\xb7\x01\n\x0c\x42\x65ginRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12&\n\x07options\x18\x04 \x01(\x0b\x32\x15.query.ExecuteOptions\"\'\n\rBeginResponse\x12\x16\n\x0etransaction_id\x18\x01 \x01(\x03\"\xa8\x01\n\rCommitRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\"\x10\n\x0e\x43ommitResponse\"\xaa\x01\n\x0fRollbackRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\"\x12\n\x10RollbackResponse\"\xb7\x01\n\x0ePrepareRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\x12\x0c\n\x04\x64tid\x18\x05 \x01(\t\"\x11\n\x0fPrepareResponse\"\xa6\x01\n\x15\x43ommitPreparedRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04\x64tid\x18\x04 \x01(\t\"\x18\n\x16\x43ommitPreparedResponse\"\xc0\x01\n\x17RollbackPreparedRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\x12\x0c\n\x04\x64tid\x18\x05 \x01(\t\"\x1a\n\x18RollbackPreparedResponse\"\xce\x01\n\x18\x43reateTransactionRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04\x64tid\x18\x04 \x01(\t\x12#\n\x0cparticipants\x18\x05 \x03(\x0b\x32\r.query.Target\"\x1b\n\x19\x43reateTransactionResponse\"\xbb\x01\n\x12StartCommitRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\x12\x0c\n\x04\x64tid\x18\x05 \x01(\t\"\x15\n\x13StartCommitResponse\"\xbb\x01\n\x12SetRollbackRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\x12\x0c\n\x04\x64tid\x18\x05 \x01(\t\"\x15\n\x13SetRollbackResponse\"\xab\x01\n\x1a\x43oncludeTransactionRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04\x64tid\x18\x04 \x01(\t\"\x1d\n\x1b\x43oncludeTransactionResponse\"\xa7\x01\n\x16ReadTransactionRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04\x64tid\x18\x04 \x01(\t\"G\n\x17ReadTransactionResponse\x12,\n\x08metadata\x18\x01 \x01(\x0b\x32\x1a.query.TransactionMetadata\"\xe0\x01\n\x13\x42\x65ginExecuteRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12 \n\x05query\x18\x04 \x01(\x0b\x32\x11.query.BoundQuery\x12&\n\x07options\x18\x05 \x01(\x0b\x32\x15.query.ExecuteOptions\"r\n\x14\x42\x65ginExecuteResponse\x12\x1e\n\x05\x65rror\x18\x01 \x01(\x0b\x32\x0f.vtrpc.RPCError\x12\"\n\x06result\x18\x02 \x01(\x0b\x32\x12.query.QueryResult\x12\x16\n\x0etransaction_id\x18\x03 \x01(\x03\"\xff\x01\n\x18\x42\x65ginExecuteBatchRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\"\n\x07queries\x18\x04 \x03(\x0b\x32\x11.query.BoundQuery\x12\x16\n\x0e\x61s_transaction\x18\x05 \x01(\x08\x12&\n\x07options\x18\x06 \x01(\x0b\x32\x15.query.ExecuteOptions\"x\n\x19\x42\x65ginExecuteBatchResponse\x12\x1e\n\x05\x65rror\x18\x01 \x01(\x0b\x32\x0f.vtrpc.RPCError\x12#\n\x07results\x18\x02 \x03(\x0b\x32\x12.query.QueryResult\x12\x16\n\x0etransaction_id\x18\x03 \x01(\x03\"\xa5\x01\n\x14MessageStreamRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04name\x18\x04 \x01(\t\";\n\x15MessageStreamResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\"\xbd\x01\n\x11MessageAckRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x19\n\x03ids\x18\x05 \x03(\x0b\x32\x0c.query.Value\"8\n\x12MessageAckResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\"\xe7\x02\n\x11SplitQueryRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12 \n\x05query\x18\x04 \x01(\x0b\x32\x11.query.BoundQuery\x12\x14\n\x0csplit_column\x18\x05 \x03(\t\x12\x13\n\x0bsplit_count\x18\x06 \x01(\x03\x12\x1f\n\x17num_rows_per_query_part\x18\x08 \x01(\x03\x12\x35\n\talgorithm\x18\t \x01(\x0e\x32\".query.SplitQueryRequest.Algorithm\",\n\tAlgorithm\x12\x10\n\x0c\x45QUAL_SPLITS\x10\x00\x12\r\n\tFULL_SCAN\x10\x01\"A\n\nQuerySplit\x12 \n\x05query\x18\x01 \x01(\x0b\x32\x11.query.BoundQuery\x12\x11\n\trow_count\x18\x02 \x01(\x03\"8\n\x12SplitQueryResponse\x12\"\n\x07queries\x18\x01 \x03(\x0b\x32\x11.query.QuerySplit\"\x15\n\x13StreamHealthRequest\"\xb6\x01\n\rRealtimeStats\x12\x14\n\x0chealth_error\x18\x01 \x01(\t\x12\x1d\n\x15seconds_behind_master\x18\x02 \x01(\r\x12\x1c\n\x14\x62inlog_players_count\x18\x03 \x01(\x05\x12\x32\n*seconds_behind_master_filtered_replication\x18\x04 \x01(\x03\x12\x11\n\tcpu_usage\x18\x05 \x01(\x01\x12\x0b\n\x03qps\x18\x06 \x01(\x01\"\x94\x01\n\x0e\x41ggregateStats\x12\x1c\n\x14healthy_tablet_count\x18\x01 \x01(\x05\x12\x1e\n\x16unhealthy_tablet_count\x18\x02 \x01(\x05\x12!\n\x19seconds_behind_master_min\x18\x03 \x01(\r\x12!\n\x19seconds_behind_master_max\x18\x04 \x01(\r\"\x81\x02\n\x14StreamHealthResponse\x12\x1d\n\x06target\x18\x01 \x01(\x0b\x32\r.query.Target\x12\x0f\n\x07serving\x18\x02 \x01(\x08\x12.\n&tablet_externally_reparented_timestamp\x18\x03 \x01(\x03\x12,\n\x0erealtime_stats\x18\x04 \x01(\x0b\x32\x14.query.RealtimeStats\x12.\n\x0f\x61ggregate_stats\x18\x06 \x01(\x0b\x32\x15.query.AggregateStats\x12+\n\x0ctablet_alias\x18\x05 \x01(\x0b\x32\x15.topodata.TabletAlias\"\xbb\x01\n\x13UpdateStreamRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x10\n\x08position\x18\x04 \x01(\t\x12\x11\n\ttimestamp\x18\x05 \x01(\x03\"9\n\x14UpdateStreamResponse\x12!\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x12.query.StreamEvent\"\x86\x01\n\x13TransactionMetadata\x12\x0c\n\x04\x64tid\x18\x01 \x01(\t\x12&\n\x05state\x18\x02 \x01(\x0e\x32\x17.query.TransactionState\x12\x14\n\x0ctime_created\x18\x03 \x01(\x03\x12#\n\x0cparticipants\x18\x04 \x03(\x0b\x32\r.query.Target*\x92\x03\n\tMySqlFlag\x12\t\n\x05\x45MPTY\x10\x00\x12\x11\n\rNOT_NULL_FLAG\x10\x01\x12\x10\n\x0cPRI_KEY_FLAG\x10\x02\x12\x13\n\x0fUNIQUE_KEY_FLAG\x10\x04\x12\x15\n\x11MULTIPLE_KEY_FLAG\x10\x08\x12\r\n\tBLOB_FLAG\x10\x10\x12\x11\n\rUNSIGNED_FLAG\x10 \x12\x11\n\rZEROFILL_FLAG\x10@\x12\x10\n\x0b\x42INARY_FLAG\x10\x80\x01\x12\x0e\n\tENUM_FLAG\x10\x80\x02\x12\x18\n\x13\x41UTO_INCREMENT_FLAG\x10\x80\x04\x12\x13\n\x0eTIMESTAMP_FLAG\x10\x80\x08\x12\r\n\x08SET_FLAG\x10\x80\x10\x12\x1a\n\x15NO_DEFAULT_VALUE_FLAG\x10\x80 \x12\x17\n\x12ON_UPDATE_NOW_FLAG\x10\x80@\x12\x0e\n\x08NUM_FLAG\x10\x80\x80\x02\x12\x13\n\rPART_KEY_FLAG\x10\x80\x80\x01\x12\x10\n\nGROUP_FLAG\x10\x80\x80\x02\x12\x11\n\x0bUNIQUE_FLAG\x10\x80\x80\x04\x12\x11\n\x0b\x42INCMP_FLAG\x10\x80\x80\x08\x1a\x02\x10\x01*k\n\x04\x46lag\x12\x08\n\x04NONE\x10\x00\x12\x0f\n\nISINTEGRAL\x10\x80\x02\x12\x0f\n\nISUNSIGNED\x10\x80\x04\x12\x0c\n\x07ISFLOAT\x10\x80\x08\x12\r\n\x08ISQUOTED\x10\x80\x10\x12\x0b\n\x06ISTEXT\x10\x80 \x12\r\n\x08ISBINARY\x10\x80@*\x99\x03\n\x04Type\x12\r\n\tNULL_TYPE\x10\x00\x12\t\n\x04INT8\x10\x81\x02\x12\n\n\x05UINT8\x10\x82\x06\x12\n\n\x05INT16\x10\x83\x02\x12\x0b\n\x06UINT16\x10\x84\x06\x12\n\n\x05INT24\x10\x85\x02\x12\x0b\n\x06UINT24\x10\x86\x06\x12\n\n\x05INT32\x10\x87\x02\x12\x0b\n\x06UINT32\x10\x88\x06\x12\n\n\x05INT64\x10\x89\x02\x12\x0b\n\x06UINT64\x10\x8a\x06\x12\x0c\n\x07\x46LOAT32\x10\x8b\x08\x12\x0c\n\x07\x46LOAT64\x10\x8c\x08\x12\x0e\n\tTIMESTAMP\x10\x8d\x10\x12\t\n\x04\x44\x41TE\x10\x8e\x10\x12\t\n\x04TIME\x10\x8f\x10\x12\r\n\x08\x44\x41TETIME\x10\x90\x10\x12\t\n\x04YEAR\x10\x91\x06\x12\x0b\n\x07\x44\x45\x43IMAL\x10\x12\x12\t\n\x04TEXT\x10\x93\x30\x12\t\n\x04\x42LOB\x10\x94P\x12\x0c\n\x07VARCHAR\x10\x95\x30\x12\x0e\n\tVARBINARY\x10\x96P\x12\t\n\x04\x43HAR\x10\x97\x30\x12\x0b\n\x06\x42INARY\x10\x98P\x12\x08\n\x03\x42IT\x10\x99\x10\x12\t\n\x04\x45NUM\x10\x9a\x10\x12\x08\n\x03SET\x10\x9b\x10\x12\t\n\x05TUPLE\x10\x1c\x12\r\n\x08GEOMETRY\x10\x9d\x10\x12\t\n\x04JSON\x10\x9e\x10\x12\x0e\n\nEXPRESSION\x10\x1f*F\n\x10TransactionState\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0b\n\x07PREPARE\x10\x01\x12\n\n\x06\x43OMMIT\x10\x02\x12\x0c\n\x08ROLLBACK\x10\x03\x42\x35\n\x0fio.vitess.protoZ\"vitess.io/vitess/go/vt/proto/queryb\x06proto3') + serialized_pb=_b('\n\x0bquery.proto\x12\x05query\x1a\x0etopodata.proto\x1a\x0bvtrpc.proto\"b\n\x06Target\x12\x10\n\x08keyspace\x18\x01 \x01(\t\x12\r\n\x05shard\x18\x02 \x01(\t\x12)\n\x0btablet_type\x18\x03 \x01(\x0e\x32\x14.topodata.TabletType\x12\x0c\n\x04\x63\x65ll\x18\x04 \x01(\t\"2\n\x0eVTGateCallerID\x12\x10\n\x08username\x18\x01 \x01(\t\x12\x0e\n\x06groups\x18\x02 \x03(\t\"@\n\nEventToken\x12\x11\n\ttimestamp\x18\x01 \x01(\x03\x12\r\n\x05shard\x18\x02 \x01(\t\x12\x10\n\x08position\x18\x03 \x01(\t\"1\n\x05Value\x12\x19\n\x04type\x18\x01 \x01(\x0e\x32\x0b.query.Type\x12\r\n\x05value\x18\x02 \x01(\x0c\"V\n\x0c\x42indVariable\x12\x19\n\x04type\x18\x01 \x01(\x0e\x32\x0b.query.Type\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x1c\n\x06values\x18\x03 \x03(\x0b\x32\x0c.query.Value\"\xa2\x01\n\nBoundQuery\x12\x0b\n\x03sql\x18\x01 \x01(\t\x12<\n\x0e\x62ind_variables\x18\x02 \x03(\x0b\x32$.query.BoundQuery.BindVariablesEntry\x1aI\n\x12\x42indVariablesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.query.BindVariable:\x02\x38\x01\"\x84\x05\n\x0e\x45xecuteOptions\x12\x1b\n\x13include_event_token\x18\x02 \x01(\x08\x12.\n\x13\x63ompare_event_token\x18\x03 \x01(\x0b\x32\x11.query.EventToken\x12=\n\x0fincluded_fields\x18\x04 \x01(\x0e\x32$.query.ExecuteOptions.IncludedFields\x12\x19\n\x11\x63lient_found_rows\x18\x05 \x01(\x08\x12\x30\n\x08workload\x18\x06 \x01(\x0e\x32\x1e.query.ExecuteOptions.Workload\x12\x18\n\x10sql_select_limit\x18\x08 \x01(\x03\x12I\n\x15transaction_isolation\x18\t \x01(\x0e\x32*.query.ExecuteOptions.TransactionIsolation\x12\x1d\n\x15skip_query_plan_cache\x18\n \x01(\x08\";\n\x0eIncludedFields\x12\x11\n\rTYPE_AND_NAME\x10\x00\x12\r\n\tTYPE_ONLY\x10\x01\x12\x07\n\x03\x41LL\x10\x02\"8\n\x08Workload\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x08\n\x04OLTP\x10\x01\x12\x08\n\x04OLAP\x10\x02\x12\x07\n\x03\x44\x42\x41\x10\x03\"\x97\x01\n\x14TransactionIsolation\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\x13\n\x0fREPEATABLE_READ\x10\x01\x12\x12\n\x0eREAD_COMMITTED\x10\x02\x12\x14\n\x10READ_UNCOMMITTED\x10\x03\x12\x10\n\x0cSERIALIZABLE\x10\x04\x12!\n\x1d\x43ONSISTENT_SNAPSHOT_READ_ONLY\x10\x05J\x04\x08\x01\x10\x02\"\xbf\x01\n\x05\x46ield\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x19\n\x04type\x18\x02 \x01(\x0e\x32\x0b.query.Type\x12\r\n\x05table\x18\x03 \x01(\t\x12\x11\n\torg_table\x18\x04 \x01(\t\x12\x10\n\x08\x64\x61tabase\x18\x05 \x01(\t\x12\x10\n\x08org_name\x18\x06 \x01(\t\x12\x15\n\rcolumn_length\x18\x07 \x01(\r\x12\x0f\n\x07\x63harset\x18\x08 \x01(\r\x12\x10\n\x08\x64\x65\x63imals\x18\t \x01(\r\x12\r\n\x05\x66lags\x18\n \x01(\r\"&\n\x03Row\x12\x0f\n\x07lengths\x18\x01 \x03(\x12\x12\x0e\n\x06values\x18\x02 \x01(\x0c\"G\n\x0cResultExtras\x12&\n\x0b\x65vent_token\x18\x01 \x01(\x0b\x32\x11.query.EventToken\x12\x0f\n\x07\x66resher\x18\x02 \x01(\x08\"\x94\x01\n\x0bQueryResult\x12\x1c\n\x06\x66ields\x18\x01 \x03(\x0b\x32\x0c.query.Field\x12\x15\n\rrows_affected\x18\x02 \x01(\x04\x12\x11\n\tinsert_id\x18\x03 \x01(\x04\x12\x18\n\x04rows\x18\x04 \x03(\x0b\x32\n.query.Row\x12#\n\x06\x65xtras\x18\x05 \x01(\x0b\x32\x13.query.ResultExtras\"-\n\x0cQueryWarning\x12\x0c\n\x04\x63ode\x18\x01 \x01(\r\x12\x0f\n\x07message\x18\x02 \x01(\t\"\xca\x02\n\x0bStreamEvent\x12\x30\n\nstatements\x18\x01 \x03(\x0b\x32\x1c.query.StreamEvent.Statement\x12&\n\x0b\x65vent_token\x18\x02 \x01(\x0b\x32\x11.query.EventToken\x1a\xe0\x01\n\tStatement\x12\x37\n\x08\x63\x61tegory\x18\x01 \x01(\x0e\x32%.query.StreamEvent.Statement.Category\x12\x12\n\ntable_name\x18\x02 \x01(\t\x12(\n\x12primary_key_fields\x18\x03 \x03(\x0b\x32\x0c.query.Field\x12&\n\x12primary_key_values\x18\x04 \x03(\x0b\x32\n.query.Row\x12\x0b\n\x03sql\x18\x05 \x01(\x0c\"\'\n\x08\x43\x61tegory\x12\t\n\x05\x45rror\x10\x00\x12\x07\n\x03\x44ML\x10\x01\x12\x07\n\x03\x44\x44L\x10\x02\"\xf3\x01\n\x0e\x45xecuteRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12 \n\x05query\x18\x04 \x01(\x0b\x32\x11.query.BoundQuery\x12\x16\n\x0etransaction_id\x18\x05 \x01(\x03\x12&\n\x07options\x18\x06 \x01(\x0b\x32\x15.query.ExecuteOptions\"5\n\x0f\x45xecuteResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\"U\n\x0fResultWithError\x12\x1e\n\x05\x65rror\x18\x01 \x01(\x0b\x32\x0f.vtrpc.RPCError\x12\"\n\x06result\x18\x02 \x01(\x0b\x32\x12.query.QueryResult\"\x92\x02\n\x13\x45xecuteBatchRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\"\n\x07queries\x18\x04 \x03(\x0b\x32\x11.query.BoundQuery\x12\x16\n\x0e\x61s_transaction\x18\x05 \x01(\x08\x12\x16\n\x0etransaction_id\x18\x06 \x01(\x03\x12&\n\x07options\x18\x07 \x01(\x0b\x32\x15.query.ExecuteOptions\";\n\x14\x45xecuteBatchResponse\x12#\n\x07results\x18\x01 \x03(\x0b\x32\x12.query.QueryResult\"\xf9\x01\n\x14StreamExecuteRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12 \n\x05query\x18\x04 \x01(\x0b\x32\x11.query.BoundQuery\x12&\n\x07options\x18\x05 \x01(\x0b\x32\x15.query.ExecuteOptions\x12\x16\n\x0etransaction_id\x18\x06 \x01(\x03\";\n\x15StreamExecuteResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\"\xb7\x01\n\x0c\x42\x65ginRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12&\n\x07options\x18\x04 \x01(\x0b\x32\x15.query.ExecuteOptions\"\'\n\rBeginResponse\x12\x16\n\x0etransaction_id\x18\x01 \x01(\x03\"\xa8\x01\n\rCommitRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\"\x10\n\x0e\x43ommitResponse\"\xaa\x01\n\x0fRollbackRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\"\x12\n\x10RollbackResponse\"\xb7\x01\n\x0ePrepareRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\x12\x0c\n\x04\x64tid\x18\x05 \x01(\t\"\x11\n\x0fPrepareResponse\"\xa6\x01\n\x15\x43ommitPreparedRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04\x64tid\x18\x04 \x01(\t\"\x18\n\x16\x43ommitPreparedResponse\"\xc0\x01\n\x17RollbackPreparedRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\x12\x0c\n\x04\x64tid\x18\x05 \x01(\t\"\x1a\n\x18RollbackPreparedResponse\"\xce\x01\n\x18\x43reateTransactionRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04\x64tid\x18\x04 \x01(\t\x12#\n\x0cparticipants\x18\x05 \x03(\x0b\x32\r.query.Target\"\x1b\n\x19\x43reateTransactionResponse\"\xbb\x01\n\x12StartCommitRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\x12\x0c\n\x04\x64tid\x18\x05 \x01(\t\"\x15\n\x13StartCommitResponse\"\xbb\x01\n\x12SetRollbackRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\x12\x0c\n\x04\x64tid\x18\x05 \x01(\t\"\x15\n\x13SetRollbackResponse\"\xab\x01\n\x1a\x43oncludeTransactionRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04\x64tid\x18\x04 \x01(\t\"\x1d\n\x1b\x43oncludeTransactionResponse\"\xa7\x01\n\x16ReadTransactionRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04\x64tid\x18\x04 \x01(\t\"G\n\x17ReadTransactionResponse\x12,\n\x08metadata\x18\x01 \x01(\x0b\x32\x1a.query.TransactionMetadata\"\xe0\x01\n\x13\x42\x65ginExecuteRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12 \n\x05query\x18\x04 \x01(\x0b\x32\x11.query.BoundQuery\x12&\n\x07options\x18\x05 \x01(\x0b\x32\x15.query.ExecuteOptions\"r\n\x14\x42\x65ginExecuteResponse\x12\x1e\n\x05\x65rror\x18\x01 \x01(\x0b\x32\x0f.vtrpc.RPCError\x12\"\n\x06result\x18\x02 \x01(\x0b\x32\x12.query.QueryResult\x12\x16\n\x0etransaction_id\x18\x03 \x01(\x03\"\xff\x01\n\x18\x42\x65ginExecuteBatchRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\"\n\x07queries\x18\x04 \x03(\x0b\x32\x11.query.BoundQuery\x12\x16\n\x0e\x61s_transaction\x18\x05 \x01(\x08\x12&\n\x07options\x18\x06 \x01(\x0b\x32\x15.query.ExecuteOptions\"x\n\x19\x42\x65ginExecuteBatchResponse\x12\x1e\n\x05\x65rror\x18\x01 \x01(\x0b\x32\x0f.vtrpc.RPCError\x12#\n\x07results\x18\x02 \x03(\x0b\x32\x12.query.QueryResult\x12\x16\n\x0etransaction_id\x18\x03 \x01(\x03\"\xa5\x01\n\x14MessageStreamRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04name\x18\x04 \x01(\t\";\n\x15MessageStreamResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\"\xbd\x01\n\x11MessageAckRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x19\n\x03ids\x18\x05 \x03(\x0b\x32\x0c.query.Value\"8\n\x12MessageAckResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\"\xe7\x02\n\x11SplitQueryRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12 \n\x05query\x18\x04 \x01(\x0b\x32\x11.query.BoundQuery\x12\x14\n\x0csplit_column\x18\x05 \x03(\t\x12\x13\n\x0bsplit_count\x18\x06 \x01(\x03\x12\x1f\n\x17num_rows_per_query_part\x18\x08 \x01(\x03\x12\x35\n\talgorithm\x18\t \x01(\x0e\x32\".query.SplitQueryRequest.Algorithm\",\n\tAlgorithm\x12\x10\n\x0c\x45QUAL_SPLITS\x10\x00\x12\r\n\tFULL_SCAN\x10\x01\"A\n\nQuerySplit\x12 \n\x05query\x18\x01 \x01(\x0b\x32\x11.query.BoundQuery\x12\x11\n\trow_count\x18\x02 \x01(\x03\"8\n\x12SplitQueryResponse\x12\"\n\x07queries\x18\x01 \x03(\x0b\x32\x11.query.QuerySplit\"\x15\n\x13StreamHealthRequest\"\xb6\x01\n\rRealtimeStats\x12\x14\n\x0chealth_error\x18\x01 \x01(\t\x12\x1d\n\x15seconds_behind_master\x18\x02 \x01(\r\x12\x1c\n\x14\x62inlog_players_count\x18\x03 \x01(\x05\x12\x32\n*seconds_behind_master_filtered_replication\x18\x04 \x01(\x03\x12\x11\n\tcpu_usage\x18\x05 \x01(\x01\x12\x0b\n\x03qps\x18\x06 \x01(\x01\"\x94\x01\n\x0e\x41ggregateStats\x12\x1c\n\x14healthy_tablet_count\x18\x01 \x01(\x05\x12\x1e\n\x16unhealthy_tablet_count\x18\x02 \x01(\x05\x12!\n\x19seconds_behind_master_min\x18\x03 \x01(\r\x12!\n\x19seconds_behind_master_max\x18\x04 \x01(\r\"\x81\x02\n\x14StreamHealthResponse\x12\x1d\n\x06target\x18\x01 \x01(\x0b\x32\r.query.Target\x12\x0f\n\x07serving\x18\x02 \x01(\x08\x12.\n&tablet_externally_reparented_timestamp\x18\x03 \x01(\x03\x12,\n\x0erealtime_stats\x18\x04 \x01(\x0b\x32\x14.query.RealtimeStats\x12.\n\x0f\x61ggregate_stats\x18\x06 \x01(\x0b\x32\x15.query.AggregateStats\x12+\n\x0ctablet_alias\x18\x05 \x01(\x0b\x32\x15.topodata.TabletAlias\"\xbb\x01\n\x13UpdateStreamRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x10\n\x08position\x18\x04 \x01(\t\x12\x11\n\ttimestamp\x18\x05 \x01(\x03\"9\n\x14UpdateStreamResponse\x12!\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x12.query.StreamEvent\"\x86\x01\n\x13TransactionMetadata\x12\x0c\n\x04\x64tid\x18\x01 \x01(\t\x12&\n\x05state\x18\x02 \x01(\x0e\x32\x17.query.TransactionState\x12\x14\n\x0ctime_created\x18\x03 \x01(\x03\x12#\n\x0cparticipants\x18\x04 \x03(\x0b\x32\r.query.Target*\x92\x03\n\tMySqlFlag\x12\t\n\x05\x45MPTY\x10\x00\x12\x11\n\rNOT_NULL_FLAG\x10\x01\x12\x10\n\x0cPRI_KEY_FLAG\x10\x02\x12\x13\n\x0fUNIQUE_KEY_FLAG\x10\x04\x12\x15\n\x11MULTIPLE_KEY_FLAG\x10\x08\x12\r\n\tBLOB_FLAG\x10\x10\x12\x11\n\rUNSIGNED_FLAG\x10 \x12\x11\n\rZEROFILL_FLAG\x10@\x12\x10\n\x0b\x42INARY_FLAG\x10\x80\x01\x12\x0e\n\tENUM_FLAG\x10\x80\x02\x12\x18\n\x13\x41UTO_INCREMENT_FLAG\x10\x80\x04\x12\x13\n\x0eTIMESTAMP_FLAG\x10\x80\x08\x12\r\n\x08SET_FLAG\x10\x80\x10\x12\x1a\n\x15NO_DEFAULT_VALUE_FLAG\x10\x80 \x12\x17\n\x12ON_UPDATE_NOW_FLAG\x10\x80@\x12\x0e\n\x08NUM_FLAG\x10\x80\x80\x02\x12\x13\n\rPART_KEY_FLAG\x10\x80\x80\x01\x12\x10\n\nGROUP_FLAG\x10\x80\x80\x02\x12\x11\n\x0bUNIQUE_FLAG\x10\x80\x80\x04\x12\x11\n\x0b\x42INCMP_FLAG\x10\x80\x80\x08\x1a\x02\x10\x01*k\n\x04\x46lag\x12\x08\n\x04NONE\x10\x00\x12\x0f\n\nISINTEGRAL\x10\x80\x02\x12\x0f\n\nISUNSIGNED\x10\x80\x04\x12\x0c\n\x07ISFLOAT\x10\x80\x08\x12\r\n\x08ISQUOTED\x10\x80\x10\x12\x0b\n\x06ISTEXT\x10\x80 \x12\r\n\x08ISBINARY\x10\x80@*\x99\x03\n\x04Type\x12\r\n\tNULL_TYPE\x10\x00\x12\t\n\x04INT8\x10\x81\x02\x12\n\n\x05UINT8\x10\x82\x06\x12\n\n\x05INT16\x10\x83\x02\x12\x0b\n\x06UINT16\x10\x84\x06\x12\n\n\x05INT24\x10\x85\x02\x12\x0b\n\x06UINT24\x10\x86\x06\x12\n\n\x05INT32\x10\x87\x02\x12\x0b\n\x06UINT32\x10\x88\x06\x12\n\n\x05INT64\x10\x89\x02\x12\x0b\n\x06UINT64\x10\x8a\x06\x12\x0c\n\x07\x46LOAT32\x10\x8b\x08\x12\x0c\n\x07\x46LOAT64\x10\x8c\x08\x12\x0e\n\tTIMESTAMP\x10\x8d\x10\x12\t\n\x04\x44\x41TE\x10\x8e\x10\x12\t\n\x04TIME\x10\x8f\x10\x12\r\n\x08\x44\x41TETIME\x10\x90\x10\x12\t\n\x04YEAR\x10\x91\x06\x12\x0b\n\x07\x44\x45\x43IMAL\x10\x12\x12\t\n\x04TEXT\x10\x93\x30\x12\t\n\x04\x42LOB\x10\x94P\x12\x0c\n\x07VARCHAR\x10\x95\x30\x12\x0e\n\tVARBINARY\x10\x96P\x12\t\n\x04\x43HAR\x10\x97\x30\x12\x0b\n\x06\x42INARY\x10\x98P\x12\x08\n\x03\x42IT\x10\x99\x10\x12\t\n\x04\x45NUM\x10\x9a\x10\x12\x08\n\x03SET\x10\x9b\x10\x12\t\n\x05TUPLE\x10\x1c\x12\r\n\x08GEOMETRY\x10\x9d\x10\x12\t\n\x04JSON\x10\x9e\x10\x12\x0e\n\nEXPRESSION\x10\x1f*F\n\x10TransactionState\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0b\n\x07PREPARE\x10\x01\x12\n\n\x06\x43OMMIT\x10\x02\x12\x0c\n\x08ROLLBACK\x10\x03\x42\x35\n\x0fio.vitess.protoZ\"vitess.io/vitess/go/vt/proto/queryb\x06proto3') , dependencies=[topodata__pb2.DESCRIPTOR,vtrpc__pb2.DESCRIPTOR,]) @@ -115,8 +115,8 @@ ], containing_type=None, options=_descriptor._ParseOptions(descriptor_pb2.EnumOptions(), _b('\020\001')), - serialized_start=8076, - serialized_end=8478, + serialized_start=8136, + serialized_end=8538, ) _sym_db.RegisterEnumDescriptor(_MYSQLFLAG) @@ -158,8 +158,8 @@ ], containing_type=None, options=None, - serialized_start=8480, - serialized_end=8587, + serialized_start=8540, + serialized_end=8647, ) _sym_db.RegisterEnumDescriptor(_FLAG) @@ -301,8 +301,8 @@ ], containing_type=None, options=None, - serialized_start=8590, - serialized_end=8999, + serialized_start=8650, + serialized_end=9059, ) _sym_db.RegisterEnumDescriptor(_TYPE) @@ -332,8 +332,8 @@ ], containing_type=None, options=None, - serialized_start=9001, - serialized_end=9071, + serialized_start=9061, + serialized_end=9131, ) _sym_db.RegisterEnumDescriptor(_TRANSACTIONSTATE) @@ -485,11 +485,15 @@ name='SERIALIZABLE', index=4, number=4, options=None, type=None), + _descriptor.EnumValueDescriptor( + name='CONSISTENT_SNAPSHOT_READ_ONLY', index=5, number=5, + options=None, + type=None), ], containing_type=None, options=None, - serialized_start=1060, - serialized_end=1176, + serialized_start=1061, + serialized_end=1212, ) _sym_db.RegisterEnumDescriptor(_EXECUTEOPTIONS_TRANSACTIONISOLATION) @@ -514,8 +518,8 @@ ], containing_type=None, options=None, - serialized_start=1981, - serialized_end=2020, + serialized_start=2017, + serialized_end=2056, ) _sym_db.RegisterEnumDescriptor(_STREAMEVENT_STATEMENT_CATEGORY) @@ -536,8 +540,8 @@ ], containing_type=None, options=None, - serialized_start=6899, - serialized_end=6943, + serialized_start=6959, + serialized_end=7003, ) _sym_db.RegisterEnumDescriptor(_SPLITQUERYREQUEST_ALGORITHM) @@ -914,7 +918,7 @@ oneofs=[ ], serialized_start=574, - serialized_end=1182, + serialized_end=1218, ) @@ -1007,8 +1011,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1185, - serialized_end=1376, + serialized_start=1221, + serialized_end=1412, ) @@ -1045,8 +1049,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1378, - serialized_end=1416, + serialized_start=1414, + serialized_end=1452, ) @@ -1083,8 +1087,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1418, - serialized_end=1489, + serialized_start=1454, + serialized_end=1525, ) @@ -1142,8 +1146,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1492, - serialized_end=1640, + serialized_start=1528, + serialized_end=1676, ) @@ -1180,8 +1184,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1642, - serialized_end=1687, + serialized_start=1678, + serialized_end=1723, ) @@ -1240,8 +1244,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1796, - serialized_end=2020, + serialized_start=1832, + serialized_end=2056, ) _STREAMEVENT = _descriptor.Descriptor( @@ -1277,8 +1281,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1690, - serialized_end=2020, + serialized_start=1726, + serialized_end=2056, ) @@ -1343,8 +1347,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2023, - serialized_end=2266, + serialized_start=2059, + serialized_end=2302, ) @@ -1374,8 +1378,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2268, - serialized_end=2321, + serialized_start=2304, + serialized_end=2357, ) @@ -1412,8 +1416,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2323, - serialized_end=2408, + serialized_start=2359, + serialized_end=2444, ) @@ -1485,8 +1489,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2411, - serialized_end=2685, + serialized_start=2447, + serialized_end=2721, ) @@ -1516,8 +1520,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2687, - serialized_end=2746, + serialized_start=2723, + serialized_end=2782, ) @@ -1563,6 +1567,13 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='transaction_id', full_name='query.StreamExecuteRequest.transaction_id', index=5, + number=6, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -1575,8 +1586,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2749, - serialized_end=2974, + serialized_start=2785, + serialized_end=3034, ) @@ -1606,8 +1617,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2976, - serialized_end=3035, + serialized_start=3036, + serialized_end=3095, ) @@ -1658,8 +1669,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3038, - serialized_end=3221, + serialized_start=3098, + serialized_end=3281, ) @@ -1689,8 +1700,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3223, - serialized_end=3262, + serialized_start=3283, + serialized_end=3322, ) @@ -1741,8 +1752,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3265, - serialized_end=3433, + serialized_start=3325, + serialized_end=3493, ) @@ -1765,8 +1776,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3435, - serialized_end=3451, + serialized_start=3495, + serialized_end=3511, ) @@ -1817,8 +1828,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3454, - serialized_end=3624, + serialized_start=3514, + serialized_end=3684, ) @@ -1841,8 +1852,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3626, - serialized_end=3644, + serialized_start=3686, + serialized_end=3704, ) @@ -1900,8 +1911,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3647, - serialized_end=3830, + serialized_start=3707, + serialized_end=3890, ) @@ -1924,8 +1935,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3832, - serialized_end=3849, + serialized_start=3892, + serialized_end=3909, ) @@ -1976,8 +1987,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3852, - serialized_end=4018, + serialized_start=3912, + serialized_end=4078, ) @@ -2000,8 +2011,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4020, - serialized_end=4044, + serialized_start=4080, + serialized_end=4104, ) @@ -2059,8 +2070,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4047, - serialized_end=4239, + serialized_start=4107, + serialized_end=4299, ) @@ -2083,8 +2094,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4241, - serialized_end=4267, + serialized_start=4301, + serialized_end=4327, ) @@ -2142,8 +2153,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4270, - serialized_end=4476, + serialized_start=4330, + serialized_end=4536, ) @@ -2166,8 +2177,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4478, - serialized_end=4505, + serialized_start=4538, + serialized_end=4565, ) @@ -2225,8 +2236,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4508, - serialized_end=4695, + serialized_start=4568, + serialized_end=4755, ) @@ -2249,8 +2260,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4697, - serialized_end=4718, + serialized_start=4757, + serialized_end=4778, ) @@ -2308,8 +2319,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4721, - serialized_end=4908, + serialized_start=4781, + serialized_end=4968, ) @@ -2332,8 +2343,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4910, - serialized_end=4931, + serialized_start=4970, + serialized_end=4991, ) @@ -2384,8 +2395,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4934, - serialized_end=5105, + serialized_start=4994, + serialized_end=5165, ) @@ -2408,8 +2419,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5107, - serialized_end=5136, + serialized_start=5167, + serialized_end=5196, ) @@ -2460,8 +2471,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5139, - serialized_end=5306, + serialized_start=5199, + serialized_end=5366, ) @@ -2491,8 +2502,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5308, - serialized_end=5379, + serialized_start=5368, + serialized_end=5439, ) @@ -2550,8 +2561,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5382, - serialized_end=5606, + serialized_start=5442, + serialized_end=5666, ) @@ -2595,8 +2606,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5608, - serialized_end=5722, + serialized_start=5668, + serialized_end=5782, ) @@ -2661,8 +2672,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5725, - serialized_end=5980, + serialized_start=5785, + serialized_end=6040, ) @@ -2706,8 +2717,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5982, - serialized_end=6102, + serialized_start=6042, + serialized_end=6162, ) @@ -2758,8 +2769,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6105, - serialized_end=6270, + serialized_start=6165, + serialized_end=6330, ) @@ -2789,8 +2800,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6272, - serialized_end=6331, + serialized_start=6332, + serialized_end=6391, ) @@ -2848,8 +2859,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6334, - serialized_end=6523, + serialized_start=6394, + serialized_end=6583, ) @@ -2879,8 +2890,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6525, - serialized_end=6581, + serialized_start=6585, + serialized_end=6641, ) @@ -2960,8 +2971,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6584, - serialized_end=6943, + serialized_start=6644, + serialized_end=7003, ) @@ -2998,8 +3009,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6945, - serialized_end=7010, + serialized_start=7005, + serialized_end=7070, ) @@ -3029,8 +3040,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7012, - serialized_end=7068, + serialized_start=7072, + serialized_end=7128, ) @@ -3053,8 +3064,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7070, - serialized_end=7091, + serialized_start=7130, + serialized_end=7151, ) @@ -3119,8 +3130,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7094, - serialized_end=7276, + serialized_start=7154, + serialized_end=7336, ) @@ -3171,8 +3182,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7279, - serialized_end=7427, + serialized_start=7339, + serialized_end=7487, ) @@ -3237,8 +3248,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7430, - serialized_end=7687, + serialized_start=7490, + serialized_end=7747, ) @@ -3296,8 +3307,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7690, - serialized_end=7877, + serialized_start=7750, + serialized_end=7937, ) @@ -3327,8 +3338,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7879, - serialized_end=7936, + serialized_start=7939, + serialized_end=7996, ) @@ -3379,8 +3390,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7939, - serialized_end=8073, + serialized_start=7999, + serialized_end=8133, ) _TARGET.fields_by_name['tablet_type'].enum_type = topodata__pb2._TABLETTYPE diff --git a/py/vtproto/tabletmanagerdata_pb2.py b/py/vtproto/tabletmanagerdata_pb2.py index a728e5b07fb..62f4a97b3b1 100644 --- a/py/vtproto/tabletmanagerdata_pb2.py +++ b/py/vtproto/tabletmanagerdata_pb2.py @@ -23,7 +23,7 @@ name='tabletmanagerdata.proto', package='tabletmanagerdata', syntax='proto3', - serialized_pb=_b('\n\x17tabletmanagerdata.proto\x12\x11tabletmanagerdata\x1a\x0bquery.proto\x1a\x0etopodata.proto\x1a\x15replicationdata.proto\x1a\rlogutil.proto\"\x93\x01\n\x0fTableDefinition\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06schema\x18\x02 \x01(\t\x12\x0f\n\x07\x63olumns\x18\x03 \x03(\t\x12\x1b\n\x13primary_key_columns\x18\x04 \x03(\t\x12\x0c\n\x04type\x18\x05 \x01(\t\x12\x13\n\x0b\x64\x61ta_length\x18\x06 \x01(\x04\x12\x11\n\trow_count\x18\x07 \x01(\x04\"{\n\x10SchemaDefinition\x12\x17\n\x0f\x64\x61tabase_schema\x18\x01 \x01(\t\x12=\n\x11table_definitions\x18\x02 \x03(\x0b\x32\".tabletmanagerdata.TableDefinition\x12\x0f\n\x07version\x18\x03 \x01(\t\"\x8b\x01\n\x12SchemaChangeResult\x12:\n\rbefore_schema\x18\x01 \x01(\x0b\x32#.tabletmanagerdata.SchemaDefinition\x12\x39\n\x0c\x61\x66ter_schema\x18\x02 \x01(\x0b\x32#.tabletmanagerdata.SchemaDefinition\"\xc1\x01\n\x0eUserPermission\x12\x0c\n\x04host\x18\x01 \x01(\t\x12\x0c\n\x04user\x18\x02 \x01(\t\x12\x19\n\x11password_checksum\x18\x03 \x01(\x04\x12\x45\n\nprivileges\x18\x04 \x03(\x0b\x32\x31.tabletmanagerdata.UserPermission.PrivilegesEntry\x1a\x31\n\x0fPrivilegesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xae\x01\n\x0c\x44\x62Permission\x12\x0c\n\x04host\x18\x01 \x01(\t\x12\n\n\x02\x64\x62\x18\x02 \x01(\t\x12\x0c\n\x04user\x18\x03 \x01(\t\x12\x43\n\nprivileges\x18\x04 \x03(\x0b\x32/.tabletmanagerdata.DbPermission.PrivilegesEntry\x1a\x31\n\x0fPrivilegesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x83\x01\n\x0bPermissions\x12;\n\x10user_permissions\x18\x01 \x03(\x0b\x32!.tabletmanagerdata.UserPermission\x12\x37\n\x0e\x64\x62_permissions\x18\x02 \x03(\x0b\x32\x1f.tabletmanagerdata.DbPermission\"\x1e\n\x0bPingRequest\x12\x0f\n\x07payload\x18\x01 \x01(\t\"\x1f\n\x0cPingResponse\x12\x0f\n\x07payload\x18\x01 \x01(\t\" \n\x0cSleepRequest\x12\x10\n\x08\x64uration\x18\x01 \x01(\x03\"\x0f\n\rSleepResponse\"\xaf\x01\n\x12\x45xecuteHookRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x12\n\nparameters\x18\x02 \x03(\t\x12\x46\n\textra_env\x18\x03 \x03(\x0b\x32\x33.tabletmanagerdata.ExecuteHookRequest.ExtraEnvEntry\x1a/\n\rExtraEnvEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"J\n\x13\x45xecuteHookResponse\x12\x13\n\x0b\x65xit_status\x18\x01 \x01(\x03\x12\x0e\n\x06stdout\x18\x02 \x01(\t\x12\x0e\n\x06stderr\x18\x03 \x01(\t\"Q\n\x10GetSchemaRequest\x12\x0e\n\x06tables\x18\x01 \x03(\t\x12\x15\n\rinclude_views\x18\x02 \x01(\x08\x12\x16\n\x0e\x65xclude_tables\x18\x03 \x03(\t\"S\n\x11GetSchemaResponse\x12>\n\x11schema_definition\x18\x01 \x01(\x0b\x32#.tabletmanagerdata.SchemaDefinition\"\x17\n\x15GetPermissionsRequest\"M\n\x16GetPermissionsResponse\x12\x33\n\x0bpermissions\x18\x01 \x01(\x0b\x32\x1e.tabletmanagerdata.Permissions\"\x14\n\x12SetReadOnlyRequest\"\x15\n\x13SetReadOnlyResponse\"\x15\n\x13SetReadWriteRequest\"\x16\n\x14SetReadWriteResponse\">\n\x11\x43hangeTypeRequest\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\"\x14\n\x12\x43hangeTypeResponse\"\x15\n\x13RefreshStateRequest\"\x16\n\x14RefreshStateResponse\"\x17\n\x15RunHealthCheckRequest\"\x18\n\x16RunHealthCheckResponse\"+\n\x18IgnoreHealthErrorRequest\x12\x0f\n\x07pattern\x18\x01 \x01(\t\"\x1b\n\x19IgnoreHealthErrorResponse\",\n\x13ReloadSchemaRequest\x12\x15\n\rwait_position\x18\x01 \x01(\t\"\x16\n\x14ReloadSchemaResponse\")\n\x16PreflightSchemaRequest\x12\x0f\n\x07\x63hanges\x18\x01 \x03(\t\"X\n\x17PreflightSchemaResponse\x12=\n\x0e\x63hange_results\x18\x01 \x03(\x0b\x32%.tabletmanagerdata.SchemaChangeResult\"\xc2\x01\n\x12\x41pplySchemaRequest\x12\x0b\n\x03sql\x18\x01 \x01(\t\x12\r\n\x05\x66orce\x18\x02 \x01(\x08\x12\x19\n\x11\x61llow_replication\x18\x03 \x01(\x08\x12:\n\rbefore_schema\x18\x04 \x01(\x0b\x32#.tabletmanagerdata.SchemaDefinition\x12\x39\n\x0c\x61\x66ter_schema\x18\x05 \x01(\x0b\x32#.tabletmanagerdata.SchemaDefinition\"\x8c\x01\n\x13\x41pplySchemaResponse\x12:\n\rbefore_schema\x18\x01 \x01(\x0b\x32#.tabletmanagerdata.SchemaDefinition\x12\x39\n\x0c\x61\x66ter_schema\x18\x02 \x01(\x0b\x32#.tabletmanagerdata.SchemaDefinition\"|\n\x18\x45xecuteFetchAsDbaRequest\x12\r\n\x05query\x18\x01 \x01(\x0c\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x10\n\x08max_rows\x18\x03 \x01(\x04\x12\x17\n\x0f\x64isable_binlogs\x18\x04 \x01(\x08\x12\x15\n\rreload_schema\x18\x05 \x01(\x08\"?\n\x19\x45xecuteFetchAsDbaResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\"h\n\x1d\x45xecuteFetchAsAllPrivsRequest\x12\r\n\x05query\x18\x01 \x01(\x0c\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x10\n\x08max_rows\x18\x03 \x01(\x04\x12\x15\n\rreload_schema\x18\x04 \x01(\x08\"D\n\x1e\x45xecuteFetchAsAllPrivsResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\";\n\x18\x45xecuteFetchAsAppRequest\x12\r\n\x05query\x18\x01 \x01(\x0c\x12\x10\n\x08max_rows\x18\x02 \x01(\x04\"?\n\x19\x45xecuteFetchAsAppResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\"\x14\n\x12SlaveStatusRequest\">\n\x13SlaveStatusResponse\x12\'\n\x06status\x18\x01 \x01(\x0b\x32\x17.replicationdata.Status\"\x17\n\x15MasterPositionRequest\"*\n\x16MasterPositionResponse\x12\x10\n\x08position\x18\x01 \x01(\t\"\x12\n\x10StopSlaveRequest\"\x13\n\x11StopSlaveResponse\"A\n\x17StopSlaveMinimumRequest\x12\x10\n\x08position\x18\x01 \x01(\t\x12\x14\n\x0cwait_timeout\x18\x02 \x01(\x03\",\n\x18StopSlaveMinimumResponse\x12\x10\n\x08position\x18\x01 \x01(\t\"\x13\n\x11StartSlaveRequest\"\x14\n\x12StartSlaveResponse\"8\n!TabletExternallyReparentedRequest\x12\x13\n\x0b\x65xternal_id\x18\x01 \x01(\t\"$\n\"TabletExternallyReparentedResponse\" \n\x1eTabletExternallyElectedRequest\"!\n\x1fTabletExternallyElectedResponse\"\x12\n\x10GetSlavesRequest\"\"\n\x11GetSlavesResponse\x12\r\n\x05\x61\x64\x64rs\x18\x01 \x03(\t\"\x19\n\x17ResetReplicationRequest\"\x1a\n\x18ResetReplicationResponse\"(\n\x17VReplicationExecRequest\x12\r\n\x05query\x18\x01 \x01(\t\">\n\x18VReplicationExecResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\"=\n\x1dVReplicationWaitForPosRequest\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x10\n\x08position\x18\x02 \x01(\t\" \n\x1eVReplicationWaitForPosResponse\"\x13\n\x11InitMasterRequest\"&\n\x12InitMasterResponse\x12\x10\n\x08position\x18\x01 \x01(\t\"\x99\x01\n\x1ePopulateReparentJournalRequest\x12\x17\n\x0ftime_created_ns\x18\x01 \x01(\x03\x12\x13\n\x0b\x61\x63tion_name\x18\x02 \x01(\t\x12+\n\x0cmaster_alias\x18\x03 \x01(\x0b\x32\x15.topodata.TabletAlias\x12\x1c\n\x14replication_position\x18\x04 \x01(\t\"!\n\x1fPopulateReparentJournalResponse\"p\n\x10InitSlaveRequest\x12%\n\x06parent\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\x12\x1c\n\x14replication_position\x18\x02 \x01(\t\x12\x17\n\x0ftime_created_ns\x18\x03 \x01(\x03\"\x13\n\x11InitSlaveResponse\"\x15\n\x13\x44\x65moteMasterRequest\"(\n\x14\x44\x65moteMasterResponse\x12\x10\n\x08position\x18\x01 \x01(\t\"3\n\x1fPromoteSlaveWhenCaughtUpRequest\x12\x10\n\x08position\x18\x01 \x01(\t\"4\n PromoteSlaveWhenCaughtUpResponse\x12\x10\n\x08position\x18\x01 \x01(\t\"\x19\n\x17SlaveWasPromotedRequest\"\x1a\n\x18SlaveWasPromotedResponse\"m\n\x10SetMasterRequest\x12%\n\x06parent\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\x12\x17\n\x0ftime_created_ns\x18\x02 \x01(\x03\x12\x19\n\x11\x66orce_start_slave\x18\x03 \x01(\x08\"\x13\n\x11SetMasterResponse\"A\n\x18SlaveWasRestartedRequest\x12%\n\x06parent\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\"\x1b\n\x19SlaveWasRestartedResponse\"$\n\"StopReplicationAndGetStatusRequest\"N\n#StopReplicationAndGetStatusResponse\x12\'\n\x06status\x18\x01 \x01(\x0b\x32\x17.replicationdata.Status\"\x15\n\x13PromoteSlaveRequest\"(\n\x14PromoteSlaveResponse\x12\x10\n\x08position\x18\x01 \x01(\t\"$\n\rBackupRequest\x12\x13\n\x0b\x63oncurrency\x18\x01 \x01(\x03\"/\n\x0e\x42\x61\x63kupResponse\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.logutil.Event\"\x1a\n\x18RestoreFromBackupRequest\":\n\x19RestoreFromBackupResponse\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.logutil.EventB0Z.vitess.io/vitess/go/vt/proto/tabletmanagerdatab\x06proto3') + serialized_pb=_b('\n\x17tabletmanagerdata.proto\x12\x11tabletmanagerdata\x1a\x0bquery.proto\x1a\x0etopodata.proto\x1a\x15replicationdata.proto\x1a\rlogutil.proto\"\x93\x01\n\x0fTableDefinition\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06schema\x18\x02 \x01(\t\x12\x0f\n\x07\x63olumns\x18\x03 \x03(\t\x12\x1b\n\x13primary_key_columns\x18\x04 \x03(\t\x12\x0c\n\x04type\x18\x05 \x01(\t\x12\x13\n\x0b\x64\x61ta_length\x18\x06 \x01(\x04\x12\x11\n\trow_count\x18\x07 \x01(\x04\"{\n\x10SchemaDefinition\x12\x17\n\x0f\x64\x61tabase_schema\x18\x01 \x01(\t\x12=\n\x11table_definitions\x18\x02 \x03(\x0b\x32\".tabletmanagerdata.TableDefinition\x12\x0f\n\x07version\x18\x03 \x01(\t\"\x8b\x01\n\x12SchemaChangeResult\x12:\n\rbefore_schema\x18\x01 \x01(\x0b\x32#.tabletmanagerdata.SchemaDefinition\x12\x39\n\x0c\x61\x66ter_schema\x18\x02 \x01(\x0b\x32#.tabletmanagerdata.SchemaDefinition\"\xc1\x01\n\x0eUserPermission\x12\x0c\n\x04host\x18\x01 \x01(\t\x12\x0c\n\x04user\x18\x02 \x01(\t\x12\x19\n\x11password_checksum\x18\x03 \x01(\x04\x12\x45\n\nprivileges\x18\x04 \x03(\x0b\x32\x31.tabletmanagerdata.UserPermission.PrivilegesEntry\x1a\x31\n\x0fPrivilegesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xae\x01\n\x0c\x44\x62Permission\x12\x0c\n\x04host\x18\x01 \x01(\t\x12\n\n\x02\x64\x62\x18\x02 \x01(\t\x12\x0c\n\x04user\x18\x03 \x01(\t\x12\x43\n\nprivileges\x18\x04 \x03(\x0b\x32/.tabletmanagerdata.DbPermission.PrivilegesEntry\x1a\x31\n\x0fPrivilegesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x83\x01\n\x0bPermissions\x12;\n\x10user_permissions\x18\x01 \x03(\x0b\x32!.tabletmanagerdata.UserPermission\x12\x37\n\x0e\x64\x62_permissions\x18\x02 \x03(\x0b\x32\x1f.tabletmanagerdata.DbPermission\"\x1e\n\x0bPingRequest\x12\x0f\n\x07payload\x18\x01 \x01(\t\"\x1f\n\x0cPingResponse\x12\x0f\n\x07payload\x18\x01 \x01(\t\" \n\x0cSleepRequest\x12\x10\n\x08\x64uration\x18\x01 \x01(\x03\"\x0f\n\rSleepResponse\"\xaf\x01\n\x12\x45xecuteHookRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x12\n\nparameters\x18\x02 \x03(\t\x12\x46\n\textra_env\x18\x03 \x03(\x0b\x32\x33.tabletmanagerdata.ExecuteHookRequest.ExtraEnvEntry\x1a/\n\rExtraEnvEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"J\n\x13\x45xecuteHookResponse\x12\x13\n\x0b\x65xit_status\x18\x01 \x01(\x03\x12\x0e\n\x06stdout\x18\x02 \x01(\t\x12\x0e\n\x06stderr\x18\x03 \x01(\t\"Q\n\x10GetSchemaRequest\x12\x0e\n\x06tables\x18\x01 \x03(\t\x12\x15\n\rinclude_views\x18\x02 \x01(\x08\x12\x16\n\x0e\x65xclude_tables\x18\x03 \x03(\t\"S\n\x11GetSchemaResponse\x12>\n\x11schema_definition\x18\x01 \x01(\x0b\x32#.tabletmanagerdata.SchemaDefinition\"\x17\n\x15GetPermissionsRequest\"M\n\x16GetPermissionsResponse\x12\x33\n\x0bpermissions\x18\x01 \x01(\x0b\x32\x1e.tabletmanagerdata.Permissions\"\x14\n\x12SetReadOnlyRequest\"\x15\n\x13SetReadOnlyResponse\"\x15\n\x13SetReadWriteRequest\"\x16\n\x14SetReadWriteResponse\">\n\x11\x43hangeTypeRequest\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\"\x14\n\x12\x43hangeTypeResponse\"\x15\n\x13RefreshStateRequest\"\x16\n\x14RefreshStateResponse\"\x17\n\x15RunHealthCheckRequest\"\x18\n\x16RunHealthCheckResponse\"+\n\x18IgnoreHealthErrorRequest\x12\x0f\n\x07pattern\x18\x01 \x01(\t\"\x1b\n\x19IgnoreHealthErrorResponse\",\n\x13ReloadSchemaRequest\x12\x15\n\rwait_position\x18\x01 \x01(\t\"\x16\n\x14ReloadSchemaResponse\")\n\x16PreflightSchemaRequest\x12\x0f\n\x07\x63hanges\x18\x01 \x03(\t\"X\n\x17PreflightSchemaResponse\x12=\n\x0e\x63hange_results\x18\x01 \x03(\x0b\x32%.tabletmanagerdata.SchemaChangeResult\"\xc2\x01\n\x12\x41pplySchemaRequest\x12\x0b\n\x03sql\x18\x01 \x01(\t\x12\r\n\x05\x66orce\x18\x02 \x01(\x08\x12\x19\n\x11\x61llow_replication\x18\x03 \x01(\x08\x12:\n\rbefore_schema\x18\x04 \x01(\x0b\x32#.tabletmanagerdata.SchemaDefinition\x12\x39\n\x0c\x61\x66ter_schema\x18\x05 \x01(\x0b\x32#.tabletmanagerdata.SchemaDefinition\"\x8c\x01\n\x13\x41pplySchemaResponse\x12:\n\rbefore_schema\x18\x01 \x01(\x0b\x32#.tabletmanagerdata.SchemaDefinition\x12\x39\n\x0c\x61\x66ter_schema\x18\x02 \x01(\x0b\x32#.tabletmanagerdata.SchemaDefinition\"\x13\n\x11LockTablesRequest\"\x14\n\x12LockTablesResponse\"\x15\n\x13UnlockTablesRequest\"\x16\n\x14UnlockTablesResponse\"|\n\x18\x45xecuteFetchAsDbaRequest\x12\r\n\x05query\x18\x01 \x01(\x0c\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x10\n\x08max_rows\x18\x03 \x01(\x04\x12\x17\n\x0f\x64isable_binlogs\x18\x04 \x01(\x08\x12\x15\n\rreload_schema\x18\x05 \x01(\x08\"?\n\x19\x45xecuteFetchAsDbaResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\"h\n\x1d\x45xecuteFetchAsAllPrivsRequest\x12\r\n\x05query\x18\x01 \x01(\x0c\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x10\n\x08max_rows\x18\x03 \x01(\x04\x12\x15\n\rreload_schema\x18\x04 \x01(\x08\"D\n\x1e\x45xecuteFetchAsAllPrivsResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\";\n\x18\x45xecuteFetchAsAppRequest\x12\r\n\x05query\x18\x01 \x01(\x0c\x12\x10\n\x08max_rows\x18\x02 \x01(\x04\"?\n\x19\x45xecuteFetchAsAppResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\"\x14\n\x12SlaveStatusRequest\">\n\x13SlaveStatusResponse\x12\'\n\x06status\x18\x01 \x01(\x0b\x32\x17.replicationdata.Status\"\x17\n\x15MasterPositionRequest\"*\n\x16MasterPositionResponse\x12\x10\n\x08position\x18\x01 \x01(\t\"\x12\n\x10StopSlaveRequest\"\x13\n\x11StopSlaveResponse\"A\n\x17StopSlaveMinimumRequest\x12\x10\n\x08position\x18\x01 \x01(\t\x12\x14\n\x0cwait_timeout\x18\x02 \x01(\x03\",\n\x18StopSlaveMinimumResponse\x12\x10\n\x08position\x18\x01 \x01(\t\"\x13\n\x11StartSlaveRequest\"\x14\n\x12StartSlaveResponse\"E\n\x1bStartSlaveUntilAfterRequest\x12\x10\n\x08position\x18\x01 \x01(\t\x12\x14\n\x0cwait_timeout\x18\x02 \x01(\x03\"\x1e\n\x1cStartSlaveUntilAfterResponse\"8\n!TabletExternallyReparentedRequest\x12\x13\n\x0b\x65xternal_id\x18\x01 \x01(\t\"$\n\"TabletExternallyReparentedResponse\" \n\x1eTabletExternallyElectedRequest\"!\n\x1fTabletExternallyElectedResponse\"\x12\n\x10GetSlavesRequest\"\"\n\x11GetSlavesResponse\x12\r\n\x05\x61\x64\x64rs\x18\x01 \x03(\t\"\x19\n\x17ResetReplicationRequest\"\x1a\n\x18ResetReplicationResponse\"(\n\x17VReplicationExecRequest\x12\r\n\x05query\x18\x01 \x01(\t\">\n\x18VReplicationExecResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\"=\n\x1dVReplicationWaitForPosRequest\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x10\n\x08position\x18\x02 \x01(\t\" \n\x1eVReplicationWaitForPosResponse\"\x13\n\x11InitMasterRequest\"&\n\x12InitMasterResponse\x12\x10\n\x08position\x18\x01 \x01(\t\"\x99\x01\n\x1ePopulateReparentJournalRequest\x12\x17\n\x0ftime_created_ns\x18\x01 \x01(\x03\x12\x13\n\x0b\x61\x63tion_name\x18\x02 \x01(\t\x12+\n\x0cmaster_alias\x18\x03 \x01(\x0b\x32\x15.topodata.TabletAlias\x12\x1c\n\x14replication_position\x18\x04 \x01(\t\"!\n\x1fPopulateReparentJournalResponse\"p\n\x10InitSlaveRequest\x12%\n\x06parent\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\x12\x1c\n\x14replication_position\x18\x02 \x01(\t\x12\x17\n\x0ftime_created_ns\x18\x03 \x01(\x03\"\x13\n\x11InitSlaveResponse\"\x15\n\x13\x44\x65moteMasterRequest\"(\n\x14\x44\x65moteMasterResponse\x12\x10\n\x08position\x18\x01 \x01(\t\"3\n\x1fPromoteSlaveWhenCaughtUpRequest\x12\x10\n\x08position\x18\x01 \x01(\t\"4\n PromoteSlaveWhenCaughtUpResponse\x12\x10\n\x08position\x18\x01 \x01(\t\"\x19\n\x17SlaveWasPromotedRequest\"\x1a\n\x18SlaveWasPromotedResponse\"m\n\x10SetMasterRequest\x12%\n\x06parent\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\x12\x17\n\x0ftime_created_ns\x18\x02 \x01(\x03\x12\x19\n\x11\x66orce_start_slave\x18\x03 \x01(\x08\"\x13\n\x11SetMasterResponse\"A\n\x18SlaveWasRestartedRequest\x12%\n\x06parent\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\"\x1b\n\x19SlaveWasRestartedResponse\"$\n\"StopReplicationAndGetStatusRequest\"N\n#StopReplicationAndGetStatusResponse\x12\'\n\x06status\x18\x01 \x01(\x0b\x32\x17.replicationdata.Status\"\x15\n\x13PromoteSlaveRequest\"(\n\x14PromoteSlaveResponse\x12\x10\n\x08position\x18\x01 \x01(\t\"$\n\rBackupRequest\x12\x13\n\x0b\x63oncurrency\x18\x01 \x01(\x03\"/\n\x0e\x42\x61\x63kupResponse\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.logutil.Event\"\x1a\n\x18RestoreFromBackupRequest\":\n\x19RestoreFromBackupResponse\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.logutil.EventB0Z.vitess.io/vitess/go/vt/proto/tabletmanagerdatab\x06proto3') , dependencies=[query__pb2.DESCRIPTOR,topodata__pb2.DESCRIPTOR,replicationdata__pb2.DESCRIPTOR,logutil__pb2.DESCRIPTOR,]) @@ -1293,6 +1293,102 @@ ) +_LOCKTABLESREQUEST = _descriptor.Descriptor( + name='LockTablesRequest', + full_name='tabletmanagerdata.LockTablesRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2572, + serialized_end=2591, +) + + +_LOCKTABLESRESPONSE = _descriptor.Descriptor( + name='LockTablesResponse', + full_name='tabletmanagerdata.LockTablesResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2593, + serialized_end=2613, +) + + +_UNLOCKTABLESREQUEST = _descriptor.Descriptor( + name='UnlockTablesRequest', + full_name='tabletmanagerdata.UnlockTablesRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2615, + serialized_end=2636, +) + + +_UNLOCKTABLESRESPONSE = _descriptor.Descriptor( + name='UnlockTablesResponse', + full_name='tabletmanagerdata.UnlockTablesResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2638, + serialized_end=2660, +) + + _EXECUTEFETCHASDBAREQUEST = _descriptor.Descriptor( name='ExecuteFetchAsDbaRequest', full_name='tabletmanagerdata.ExecuteFetchAsDbaRequest', @@ -1347,8 +1443,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2572, - serialized_end=2696, + serialized_start=2662, + serialized_end=2786, ) @@ -1378,8 +1474,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2698, - serialized_end=2761, + serialized_start=2788, + serialized_end=2851, ) @@ -1430,8 +1526,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2763, - serialized_end=2867, + serialized_start=2853, + serialized_end=2957, ) @@ -1461,8 +1557,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2869, - serialized_end=2937, + serialized_start=2959, + serialized_end=3027, ) @@ -1499,8 +1595,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2939, - serialized_end=2998, + serialized_start=3029, + serialized_end=3088, ) @@ -1530,8 +1626,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3000, - serialized_end=3063, + serialized_start=3090, + serialized_end=3153, ) @@ -1554,8 +1650,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3065, - serialized_end=3085, + serialized_start=3155, + serialized_end=3175, ) @@ -1585,8 +1681,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3087, - serialized_end=3149, + serialized_start=3177, + serialized_end=3239, ) @@ -1609,8 +1705,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3151, - serialized_end=3174, + serialized_start=3241, + serialized_end=3264, ) @@ -1640,8 +1736,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3176, - serialized_end=3218, + serialized_start=3266, + serialized_end=3308, ) @@ -1664,8 +1760,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3220, - serialized_end=3238, + serialized_start=3310, + serialized_end=3328, ) @@ -1688,8 +1784,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3240, - serialized_end=3259, + serialized_start=3330, + serialized_end=3349, ) @@ -1726,8 +1822,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3261, - serialized_end=3326, + serialized_start=3351, + serialized_end=3416, ) @@ -1757,8 +1853,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3328, - serialized_end=3372, + serialized_start=3418, + serialized_end=3462, ) @@ -1781,8 +1877,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3374, - serialized_end=3393, + serialized_start=3464, + serialized_end=3483, ) @@ -1805,8 +1901,70 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3395, - serialized_end=3415, + serialized_start=3485, + serialized_end=3505, +) + + +_STARTSLAVEUNTILAFTERREQUEST = _descriptor.Descriptor( + name='StartSlaveUntilAfterRequest', + full_name='tabletmanagerdata.StartSlaveUntilAfterRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='position', full_name='tabletmanagerdata.StartSlaveUntilAfterRequest.position', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='wait_timeout', full_name='tabletmanagerdata.StartSlaveUntilAfterRequest.wait_timeout', index=1, + number=2, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=3507, + serialized_end=3576, +) + + +_STARTSLAVEUNTILAFTERRESPONSE = _descriptor.Descriptor( + name='StartSlaveUntilAfterResponse', + full_name='tabletmanagerdata.StartSlaveUntilAfterResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=3578, + serialized_end=3608, ) @@ -1836,8 +1994,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3417, - serialized_end=3473, + serialized_start=3610, + serialized_end=3666, ) @@ -1860,8 +2018,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3475, - serialized_end=3511, + serialized_start=3668, + serialized_end=3704, ) @@ -1884,8 +2042,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3513, - serialized_end=3545, + serialized_start=3706, + serialized_end=3738, ) @@ -1908,8 +2066,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3547, - serialized_end=3580, + serialized_start=3740, + serialized_end=3773, ) @@ -1932,8 +2090,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3582, - serialized_end=3600, + serialized_start=3775, + serialized_end=3793, ) @@ -1963,8 +2121,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3602, - serialized_end=3636, + serialized_start=3795, + serialized_end=3829, ) @@ -1987,8 +2145,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3638, - serialized_end=3663, + serialized_start=3831, + serialized_end=3856, ) @@ -2011,8 +2169,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3665, - serialized_end=3691, + serialized_start=3858, + serialized_end=3884, ) @@ -2042,8 +2200,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3693, - serialized_end=3733, + serialized_start=3886, + serialized_end=3926, ) @@ -2073,8 +2231,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3735, - serialized_end=3797, + serialized_start=3928, + serialized_end=3990, ) @@ -2111,8 +2269,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3799, - serialized_end=3860, + serialized_start=3992, + serialized_end=4053, ) @@ -2135,8 +2293,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3862, - serialized_end=3894, + serialized_start=4055, + serialized_end=4087, ) @@ -2159,8 +2317,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3896, - serialized_end=3915, + serialized_start=4089, + serialized_end=4108, ) @@ -2190,8 +2348,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3917, - serialized_end=3955, + serialized_start=4110, + serialized_end=4148, ) @@ -2242,8 +2400,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3958, - serialized_end=4111, + serialized_start=4151, + serialized_end=4304, ) @@ -2266,8 +2424,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4113, - serialized_end=4146, + serialized_start=4306, + serialized_end=4339, ) @@ -2311,8 +2469,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4148, - serialized_end=4260, + serialized_start=4341, + serialized_end=4453, ) @@ -2335,8 +2493,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4262, - serialized_end=4281, + serialized_start=4455, + serialized_end=4474, ) @@ -2359,8 +2517,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4283, - serialized_end=4304, + serialized_start=4476, + serialized_end=4497, ) @@ -2390,8 +2548,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4306, - serialized_end=4346, + serialized_start=4499, + serialized_end=4539, ) @@ -2421,8 +2579,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4348, - serialized_end=4399, + serialized_start=4541, + serialized_end=4592, ) @@ -2452,8 +2610,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4401, - serialized_end=4453, + serialized_start=4594, + serialized_end=4646, ) @@ -2476,8 +2634,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4455, - serialized_end=4480, + serialized_start=4648, + serialized_end=4673, ) @@ -2500,8 +2658,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4482, - serialized_end=4508, + serialized_start=4675, + serialized_end=4701, ) @@ -2545,8 +2703,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4510, - serialized_end=4619, + serialized_start=4703, + serialized_end=4812, ) @@ -2569,8 +2727,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4621, - serialized_end=4640, + serialized_start=4814, + serialized_end=4833, ) @@ -2600,8 +2758,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4642, - serialized_end=4707, + serialized_start=4835, + serialized_end=4900, ) @@ -2624,8 +2782,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4709, - serialized_end=4736, + serialized_start=4902, + serialized_end=4929, ) @@ -2648,8 +2806,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4738, - serialized_end=4774, + serialized_start=4931, + serialized_end=4967, ) @@ -2679,8 +2837,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4776, - serialized_end=4854, + serialized_start=4969, + serialized_end=5047, ) @@ -2703,8 +2861,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4856, - serialized_end=4877, + serialized_start=5049, + serialized_end=5070, ) @@ -2734,8 +2892,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4879, - serialized_end=4919, + serialized_start=5072, + serialized_end=5112, ) @@ -2765,8 +2923,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4921, - serialized_end=4957, + serialized_start=5114, + serialized_end=5150, ) @@ -2796,8 +2954,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4959, - serialized_end=5006, + serialized_start=5152, + serialized_end=5199, ) @@ -2820,8 +2978,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5008, - serialized_end=5034, + serialized_start=5201, + serialized_end=5227, ) @@ -2851,8 +3009,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5036, - serialized_end=5094, + serialized_start=5229, + serialized_end=5287, ) _SCHEMADEFINITION.fields_by_name['table_definitions'].message_type = _TABLEDEFINITION @@ -2920,6 +3078,10 @@ DESCRIPTOR.message_types_by_name['PreflightSchemaResponse'] = _PREFLIGHTSCHEMARESPONSE DESCRIPTOR.message_types_by_name['ApplySchemaRequest'] = _APPLYSCHEMAREQUEST DESCRIPTOR.message_types_by_name['ApplySchemaResponse'] = _APPLYSCHEMARESPONSE +DESCRIPTOR.message_types_by_name['LockTablesRequest'] = _LOCKTABLESREQUEST +DESCRIPTOR.message_types_by_name['LockTablesResponse'] = _LOCKTABLESRESPONSE +DESCRIPTOR.message_types_by_name['UnlockTablesRequest'] = _UNLOCKTABLESREQUEST +DESCRIPTOR.message_types_by_name['UnlockTablesResponse'] = _UNLOCKTABLESRESPONSE DESCRIPTOR.message_types_by_name['ExecuteFetchAsDbaRequest'] = _EXECUTEFETCHASDBAREQUEST DESCRIPTOR.message_types_by_name['ExecuteFetchAsDbaResponse'] = _EXECUTEFETCHASDBARESPONSE DESCRIPTOR.message_types_by_name['ExecuteFetchAsAllPrivsRequest'] = _EXECUTEFETCHASALLPRIVSREQUEST @@ -2936,6 +3098,8 @@ DESCRIPTOR.message_types_by_name['StopSlaveMinimumResponse'] = _STOPSLAVEMINIMUMRESPONSE DESCRIPTOR.message_types_by_name['StartSlaveRequest'] = _STARTSLAVEREQUEST DESCRIPTOR.message_types_by_name['StartSlaveResponse'] = _STARTSLAVERESPONSE +DESCRIPTOR.message_types_by_name['StartSlaveUntilAfterRequest'] = _STARTSLAVEUNTILAFTERREQUEST +DESCRIPTOR.message_types_by_name['StartSlaveUntilAfterResponse'] = _STARTSLAVEUNTILAFTERRESPONSE DESCRIPTOR.message_types_by_name['TabletExternallyReparentedRequest'] = _TABLETEXTERNALLYREPARENTEDREQUEST DESCRIPTOR.message_types_by_name['TabletExternallyReparentedResponse'] = _TABLETEXTERNALLYREPARENTEDRESPONSE DESCRIPTOR.message_types_by_name['TabletExternallyElectedRequest'] = _TABLETEXTERNALLYELECTEDREQUEST @@ -3236,6 +3400,34 @@ )) _sym_db.RegisterMessage(ApplySchemaResponse) +LockTablesRequest = _reflection.GeneratedProtocolMessageType('LockTablesRequest', (_message.Message,), dict( + DESCRIPTOR = _LOCKTABLESREQUEST, + __module__ = 'tabletmanagerdata_pb2' + # @@protoc_insertion_point(class_scope:tabletmanagerdata.LockTablesRequest) + )) +_sym_db.RegisterMessage(LockTablesRequest) + +LockTablesResponse = _reflection.GeneratedProtocolMessageType('LockTablesResponse', (_message.Message,), dict( + DESCRIPTOR = _LOCKTABLESRESPONSE, + __module__ = 'tabletmanagerdata_pb2' + # @@protoc_insertion_point(class_scope:tabletmanagerdata.LockTablesResponse) + )) +_sym_db.RegisterMessage(LockTablesResponse) + +UnlockTablesRequest = _reflection.GeneratedProtocolMessageType('UnlockTablesRequest', (_message.Message,), dict( + DESCRIPTOR = _UNLOCKTABLESREQUEST, + __module__ = 'tabletmanagerdata_pb2' + # @@protoc_insertion_point(class_scope:tabletmanagerdata.UnlockTablesRequest) + )) +_sym_db.RegisterMessage(UnlockTablesRequest) + +UnlockTablesResponse = _reflection.GeneratedProtocolMessageType('UnlockTablesResponse', (_message.Message,), dict( + DESCRIPTOR = _UNLOCKTABLESRESPONSE, + __module__ = 'tabletmanagerdata_pb2' + # @@protoc_insertion_point(class_scope:tabletmanagerdata.UnlockTablesResponse) + )) +_sym_db.RegisterMessage(UnlockTablesResponse) + ExecuteFetchAsDbaRequest = _reflection.GeneratedProtocolMessageType('ExecuteFetchAsDbaRequest', (_message.Message,), dict( DESCRIPTOR = _EXECUTEFETCHASDBAREQUEST, __module__ = 'tabletmanagerdata_pb2' @@ -3348,6 +3540,20 @@ )) _sym_db.RegisterMessage(StartSlaveResponse) +StartSlaveUntilAfterRequest = _reflection.GeneratedProtocolMessageType('StartSlaveUntilAfterRequest', (_message.Message,), dict( + DESCRIPTOR = _STARTSLAVEUNTILAFTERREQUEST, + __module__ = 'tabletmanagerdata_pb2' + # @@protoc_insertion_point(class_scope:tabletmanagerdata.StartSlaveUntilAfterRequest) + )) +_sym_db.RegisterMessage(StartSlaveUntilAfterRequest) + +StartSlaveUntilAfterResponse = _reflection.GeneratedProtocolMessageType('StartSlaveUntilAfterResponse', (_message.Message,), dict( + DESCRIPTOR = _STARTSLAVEUNTILAFTERRESPONSE, + __module__ = 'tabletmanagerdata_pb2' + # @@protoc_insertion_point(class_scope:tabletmanagerdata.StartSlaveUntilAfterResponse) + )) +_sym_db.RegisterMessage(StartSlaveUntilAfterResponse) + TabletExternallyReparentedRequest = _reflection.GeneratedProtocolMessageType('TabletExternallyReparentedRequest', (_message.Message,), dict( DESCRIPTOR = _TABLETEXTERNALLYREPARENTEDREQUEST, __module__ = 'tabletmanagerdata_pb2' diff --git a/py/vtproto/tabletmanagerservice_pb2.py b/py/vtproto/tabletmanagerservice_pb2.py index 515efe78587..33d62d43bdc 100644 --- a/py/vtproto/tabletmanagerservice_pb2.py +++ b/py/vtproto/tabletmanagerservice_pb2.py @@ -20,7 +20,7 @@ name='tabletmanagerservice.proto', package='tabletmanagerservice', syntax='proto3', - serialized_pb=_b('\n\x1atabletmanagerservice.proto\x12\x14tabletmanagerservice\x1a\x17tabletmanagerdata.proto2\x95!\n\rTabletManager\x12I\n\x04Ping\x12\x1e.tabletmanagerdata.PingRequest\x1a\x1f.tabletmanagerdata.PingResponse\"\x00\x12L\n\x05Sleep\x12\x1f.tabletmanagerdata.SleepRequest\x1a .tabletmanagerdata.SleepResponse\"\x00\x12^\n\x0b\x45xecuteHook\x12%.tabletmanagerdata.ExecuteHookRequest\x1a&.tabletmanagerdata.ExecuteHookResponse\"\x00\x12X\n\tGetSchema\x12#.tabletmanagerdata.GetSchemaRequest\x1a$.tabletmanagerdata.GetSchemaResponse\"\x00\x12g\n\x0eGetPermissions\x12(.tabletmanagerdata.GetPermissionsRequest\x1a).tabletmanagerdata.GetPermissionsResponse\"\x00\x12^\n\x0bSetReadOnly\x12%.tabletmanagerdata.SetReadOnlyRequest\x1a&.tabletmanagerdata.SetReadOnlyResponse\"\x00\x12\x61\n\x0cSetReadWrite\x12&.tabletmanagerdata.SetReadWriteRequest\x1a\'.tabletmanagerdata.SetReadWriteResponse\"\x00\x12[\n\nChangeType\x12$.tabletmanagerdata.ChangeTypeRequest\x1a%.tabletmanagerdata.ChangeTypeResponse\"\x00\x12\x61\n\x0cRefreshState\x12&.tabletmanagerdata.RefreshStateRequest\x1a\'.tabletmanagerdata.RefreshStateResponse\"\x00\x12g\n\x0eRunHealthCheck\x12(.tabletmanagerdata.RunHealthCheckRequest\x1a).tabletmanagerdata.RunHealthCheckResponse\"\x00\x12p\n\x11IgnoreHealthError\x12+.tabletmanagerdata.IgnoreHealthErrorRequest\x1a,.tabletmanagerdata.IgnoreHealthErrorResponse\"\x00\x12\x61\n\x0cReloadSchema\x12&.tabletmanagerdata.ReloadSchemaRequest\x1a\'.tabletmanagerdata.ReloadSchemaResponse\"\x00\x12j\n\x0fPreflightSchema\x12).tabletmanagerdata.PreflightSchemaRequest\x1a*.tabletmanagerdata.PreflightSchemaResponse\"\x00\x12^\n\x0b\x41pplySchema\x12%.tabletmanagerdata.ApplySchemaRequest\x1a&.tabletmanagerdata.ApplySchemaResponse\"\x00\x12p\n\x11\x45xecuteFetchAsDba\x12+.tabletmanagerdata.ExecuteFetchAsDbaRequest\x1a,.tabletmanagerdata.ExecuteFetchAsDbaResponse\"\x00\x12\x7f\n\x16\x45xecuteFetchAsAllPrivs\x12\x30.tabletmanagerdata.ExecuteFetchAsAllPrivsRequest\x1a\x31.tabletmanagerdata.ExecuteFetchAsAllPrivsResponse\"\x00\x12p\n\x11\x45xecuteFetchAsApp\x12+.tabletmanagerdata.ExecuteFetchAsAppRequest\x1a,.tabletmanagerdata.ExecuteFetchAsAppResponse\"\x00\x12^\n\x0bSlaveStatus\x12%.tabletmanagerdata.SlaveStatusRequest\x1a&.tabletmanagerdata.SlaveStatusResponse\"\x00\x12g\n\x0eMasterPosition\x12(.tabletmanagerdata.MasterPositionRequest\x1a).tabletmanagerdata.MasterPositionResponse\"\x00\x12X\n\tStopSlave\x12#.tabletmanagerdata.StopSlaveRequest\x1a$.tabletmanagerdata.StopSlaveResponse\"\x00\x12m\n\x10StopSlaveMinimum\x12*.tabletmanagerdata.StopSlaveMinimumRequest\x1a+.tabletmanagerdata.StopSlaveMinimumResponse\"\x00\x12[\n\nStartSlave\x12$.tabletmanagerdata.StartSlaveRequest\x1a%.tabletmanagerdata.StartSlaveResponse\"\x00\x12\x8b\x01\n\x1aTabletExternallyReparented\x12\x34.tabletmanagerdata.TabletExternallyReparentedRequest\x1a\x35.tabletmanagerdata.TabletExternallyReparentedResponse\"\x00\x12\x82\x01\n\x17TabletExternallyElected\x12\x31.tabletmanagerdata.TabletExternallyElectedRequest\x1a\x32.tabletmanagerdata.TabletExternallyElectedResponse\"\x00\x12X\n\tGetSlaves\x12#.tabletmanagerdata.GetSlavesRequest\x1a$.tabletmanagerdata.GetSlavesResponse\"\x00\x12m\n\x10VReplicationExec\x12*.tabletmanagerdata.VReplicationExecRequest\x1a+.tabletmanagerdata.VReplicationExecResponse\"\x00\x12\x7f\n\x16VReplicationWaitForPos\x12\x30.tabletmanagerdata.VReplicationWaitForPosRequest\x1a\x31.tabletmanagerdata.VReplicationWaitForPosResponse\"\x00\x12m\n\x10ResetReplication\x12*.tabletmanagerdata.ResetReplicationRequest\x1a+.tabletmanagerdata.ResetReplicationResponse\"\x00\x12[\n\nInitMaster\x12$.tabletmanagerdata.InitMasterRequest\x1a%.tabletmanagerdata.InitMasterResponse\"\x00\x12\x82\x01\n\x17PopulateReparentJournal\x12\x31.tabletmanagerdata.PopulateReparentJournalRequest\x1a\x32.tabletmanagerdata.PopulateReparentJournalResponse\"\x00\x12X\n\tInitSlave\x12#.tabletmanagerdata.InitSlaveRequest\x1a$.tabletmanagerdata.InitSlaveResponse\"\x00\x12\x61\n\x0c\x44\x65moteMaster\x12&.tabletmanagerdata.DemoteMasterRequest\x1a\'.tabletmanagerdata.DemoteMasterResponse\"\x00\x12\x85\x01\n\x18PromoteSlaveWhenCaughtUp\x12\x32.tabletmanagerdata.PromoteSlaveWhenCaughtUpRequest\x1a\x33.tabletmanagerdata.PromoteSlaveWhenCaughtUpResponse\"\x00\x12m\n\x10SlaveWasPromoted\x12*.tabletmanagerdata.SlaveWasPromotedRequest\x1a+.tabletmanagerdata.SlaveWasPromotedResponse\"\x00\x12X\n\tSetMaster\x12#.tabletmanagerdata.SetMasterRequest\x1a$.tabletmanagerdata.SetMasterResponse\"\x00\x12p\n\x11SlaveWasRestarted\x12+.tabletmanagerdata.SlaveWasRestartedRequest\x1a,.tabletmanagerdata.SlaveWasRestartedResponse\"\x00\x12\x8e\x01\n\x1bStopReplicationAndGetStatus\x12\x35.tabletmanagerdata.StopReplicationAndGetStatusRequest\x1a\x36.tabletmanagerdata.StopReplicationAndGetStatusResponse\"\x00\x12\x61\n\x0cPromoteSlave\x12&.tabletmanagerdata.PromoteSlaveRequest\x1a\'.tabletmanagerdata.PromoteSlaveResponse\"\x00\x12Q\n\x06\x42\x61\x63kup\x12 .tabletmanagerdata.BackupRequest\x1a!.tabletmanagerdata.BackupResponse\"\x00\x30\x01\x12r\n\x11RestoreFromBackup\x12+.tabletmanagerdata.RestoreFromBackupRequest\x1a,.tabletmanagerdata.RestoreFromBackupResponse\"\x00\x30\x01\x42\x33Z1vitess.io/vitess/go/vt/proto/tabletmanagerserviceb\x06proto3') + serialized_pb=_b('\n\x1atabletmanagerservice.proto\x12\x14tabletmanagerservice\x1a\x17tabletmanagerdata.proto2\xd0#\n\rTabletManager\x12I\n\x04Ping\x12\x1e.tabletmanagerdata.PingRequest\x1a\x1f.tabletmanagerdata.PingResponse\"\x00\x12L\n\x05Sleep\x12\x1f.tabletmanagerdata.SleepRequest\x1a .tabletmanagerdata.SleepResponse\"\x00\x12^\n\x0b\x45xecuteHook\x12%.tabletmanagerdata.ExecuteHookRequest\x1a&.tabletmanagerdata.ExecuteHookResponse\"\x00\x12X\n\tGetSchema\x12#.tabletmanagerdata.GetSchemaRequest\x1a$.tabletmanagerdata.GetSchemaResponse\"\x00\x12g\n\x0eGetPermissions\x12(.tabletmanagerdata.GetPermissionsRequest\x1a).tabletmanagerdata.GetPermissionsResponse\"\x00\x12^\n\x0bSetReadOnly\x12%.tabletmanagerdata.SetReadOnlyRequest\x1a&.tabletmanagerdata.SetReadOnlyResponse\"\x00\x12\x61\n\x0cSetReadWrite\x12&.tabletmanagerdata.SetReadWriteRequest\x1a\'.tabletmanagerdata.SetReadWriteResponse\"\x00\x12[\n\nChangeType\x12$.tabletmanagerdata.ChangeTypeRequest\x1a%.tabletmanagerdata.ChangeTypeResponse\"\x00\x12\x61\n\x0cRefreshState\x12&.tabletmanagerdata.RefreshStateRequest\x1a\'.tabletmanagerdata.RefreshStateResponse\"\x00\x12g\n\x0eRunHealthCheck\x12(.tabletmanagerdata.RunHealthCheckRequest\x1a).tabletmanagerdata.RunHealthCheckResponse\"\x00\x12p\n\x11IgnoreHealthError\x12+.tabletmanagerdata.IgnoreHealthErrorRequest\x1a,.tabletmanagerdata.IgnoreHealthErrorResponse\"\x00\x12\x61\n\x0cReloadSchema\x12&.tabletmanagerdata.ReloadSchemaRequest\x1a\'.tabletmanagerdata.ReloadSchemaResponse\"\x00\x12j\n\x0fPreflightSchema\x12).tabletmanagerdata.PreflightSchemaRequest\x1a*.tabletmanagerdata.PreflightSchemaResponse\"\x00\x12^\n\x0b\x41pplySchema\x12%.tabletmanagerdata.ApplySchemaRequest\x1a&.tabletmanagerdata.ApplySchemaResponse\"\x00\x12[\n\nLockTables\x12$.tabletmanagerdata.LockTablesRequest\x1a%.tabletmanagerdata.LockTablesResponse\"\x00\x12\x61\n\x0cUnlockTables\x12&.tabletmanagerdata.UnlockTablesRequest\x1a\'.tabletmanagerdata.UnlockTablesResponse\"\x00\x12p\n\x11\x45xecuteFetchAsDba\x12+.tabletmanagerdata.ExecuteFetchAsDbaRequest\x1a,.tabletmanagerdata.ExecuteFetchAsDbaResponse\"\x00\x12\x7f\n\x16\x45xecuteFetchAsAllPrivs\x12\x30.tabletmanagerdata.ExecuteFetchAsAllPrivsRequest\x1a\x31.tabletmanagerdata.ExecuteFetchAsAllPrivsResponse\"\x00\x12p\n\x11\x45xecuteFetchAsApp\x12+.tabletmanagerdata.ExecuteFetchAsAppRequest\x1a,.tabletmanagerdata.ExecuteFetchAsAppResponse\"\x00\x12^\n\x0bSlaveStatus\x12%.tabletmanagerdata.SlaveStatusRequest\x1a&.tabletmanagerdata.SlaveStatusResponse\"\x00\x12g\n\x0eMasterPosition\x12(.tabletmanagerdata.MasterPositionRequest\x1a).tabletmanagerdata.MasterPositionResponse\"\x00\x12X\n\tStopSlave\x12#.tabletmanagerdata.StopSlaveRequest\x1a$.tabletmanagerdata.StopSlaveResponse\"\x00\x12m\n\x10StopSlaveMinimum\x12*.tabletmanagerdata.StopSlaveMinimumRequest\x1a+.tabletmanagerdata.StopSlaveMinimumResponse\"\x00\x12[\n\nStartSlave\x12$.tabletmanagerdata.StartSlaveRequest\x1a%.tabletmanagerdata.StartSlaveResponse\"\x00\x12y\n\x14StartSlaveUntilAfter\x12..tabletmanagerdata.StartSlaveUntilAfterRequest\x1a/.tabletmanagerdata.StartSlaveUntilAfterResponse\"\x00\x12\x8b\x01\n\x1aTabletExternallyReparented\x12\x34.tabletmanagerdata.TabletExternallyReparentedRequest\x1a\x35.tabletmanagerdata.TabletExternallyReparentedResponse\"\x00\x12\x82\x01\n\x17TabletExternallyElected\x12\x31.tabletmanagerdata.TabletExternallyElectedRequest\x1a\x32.tabletmanagerdata.TabletExternallyElectedResponse\"\x00\x12X\n\tGetSlaves\x12#.tabletmanagerdata.GetSlavesRequest\x1a$.tabletmanagerdata.GetSlavesResponse\"\x00\x12m\n\x10VReplicationExec\x12*.tabletmanagerdata.VReplicationExecRequest\x1a+.tabletmanagerdata.VReplicationExecResponse\"\x00\x12\x7f\n\x16VReplicationWaitForPos\x12\x30.tabletmanagerdata.VReplicationWaitForPosRequest\x1a\x31.tabletmanagerdata.VReplicationWaitForPosResponse\"\x00\x12m\n\x10ResetReplication\x12*.tabletmanagerdata.ResetReplicationRequest\x1a+.tabletmanagerdata.ResetReplicationResponse\"\x00\x12[\n\nInitMaster\x12$.tabletmanagerdata.InitMasterRequest\x1a%.tabletmanagerdata.InitMasterResponse\"\x00\x12\x82\x01\n\x17PopulateReparentJournal\x12\x31.tabletmanagerdata.PopulateReparentJournalRequest\x1a\x32.tabletmanagerdata.PopulateReparentJournalResponse\"\x00\x12X\n\tInitSlave\x12#.tabletmanagerdata.InitSlaveRequest\x1a$.tabletmanagerdata.InitSlaveResponse\"\x00\x12\x61\n\x0c\x44\x65moteMaster\x12&.tabletmanagerdata.DemoteMasterRequest\x1a\'.tabletmanagerdata.DemoteMasterResponse\"\x00\x12\x85\x01\n\x18PromoteSlaveWhenCaughtUp\x12\x32.tabletmanagerdata.PromoteSlaveWhenCaughtUpRequest\x1a\x33.tabletmanagerdata.PromoteSlaveWhenCaughtUpResponse\"\x00\x12m\n\x10SlaveWasPromoted\x12*.tabletmanagerdata.SlaveWasPromotedRequest\x1a+.tabletmanagerdata.SlaveWasPromotedResponse\"\x00\x12X\n\tSetMaster\x12#.tabletmanagerdata.SetMasterRequest\x1a$.tabletmanagerdata.SetMasterResponse\"\x00\x12p\n\x11SlaveWasRestarted\x12+.tabletmanagerdata.SlaveWasRestartedRequest\x1a,.tabletmanagerdata.SlaveWasRestartedResponse\"\x00\x12\x8e\x01\n\x1bStopReplicationAndGetStatus\x12\x35.tabletmanagerdata.StopReplicationAndGetStatusRequest\x1a\x36.tabletmanagerdata.StopReplicationAndGetStatusResponse\"\x00\x12\x61\n\x0cPromoteSlave\x12&.tabletmanagerdata.PromoteSlaveRequest\x1a\'.tabletmanagerdata.PromoteSlaveResponse\"\x00\x12Q\n\x06\x42\x61\x63kup\x12 .tabletmanagerdata.BackupRequest\x1a!.tabletmanagerdata.BackupResponse\"\x00\x30\x01\x12r\n\x11RestoreFromBackup\x12+.tabletmanagerdata.RestoreFromBackupRequest\x1a,.tabletmanagerdata.RestoreFromBackupResponse\"\x00\x30\x01\x42\x33Z1vitess.io/vitess/go/vt/proto/tabletmanagerserviceb\x06proto3') , dependencies=[tabletmanagerdata__pb2.DESCRIPTOR,]) @@ -39,7 +39,7 @@ index=0, options=None, serialized_start=78, - serialized_end=4323, + serialized_end=4638, methods=[ _descriptor.MethodDescriptor( name='Ping', @@ -167,10 +167,28 @@ output_type=tabletmanagerdata__pb2._APPLYSCHEMARESPONSE, options=None, ), + _descriptor.MethodDescriptor( + name='LockTables', + full_name='tabletmanagerservice.TabletManager.LockTables', + index=14, + containing_service=None, + input_type=tabletmanagerdata__pb2._LOCKTABLESREQUEST, + output_type=tabletmanagerdata__pb2._LOCKTABLESRESPONSE, + options=None, + ), + _descriptor.MethodDescriptor( + name='UnlockTables', + full_name='tabletmanagerservice.TabletManager.UnlockTables', + index=15, + containing_service=None, + input_type=tabletmanagerdata__pb2._UNLOCKTABLESREQUEST, + output_type=tabletmanagerdata__pb2._UNLOCKTABLESRESPONSE, + options=None, + ), _descriptor.MethodDescriptor( name='ExecuteFetchAsDba', full_name='tabletmanagerservice.TabletManager.ExecuteFetchAsDba', - index=14, + index=16, containing_service=None, input_type=tabletmanagerdata__pb2._EXECUTEFETCHASDBAREQUEST, output_type=tabletmanagerdata__pb2._EXECUTEFETCHASDBARESPONSE, @@ -179,7 +197,7 @@ _descriptor.MethodDescriptor( name='ExecuteFetchAsAllPrivs', full_name='tabletmanagerservice.TabletManager.ExecuteFetchAsAllPrivs', - index=15, + index=17, containing_service=None, input_type=tabletmanagerdata__pb2._EXECUTEFETCHASALLPRIVSREQUEST, output_type=tabletmanagerdata__pb2._EXECUTEFETCHASALLPRIVSRESPONSE, @@ -188,7 +206,7 @@ _descriptor.MethodDescriptor( name='ExecuteFetchAsApp', full_name='tabletmanagerservice.TabletManager.ExecuteFetchAsApp', - index=16, + index=18, containing_service=None, input_type=tabletmanagerdata__pb2._EXECUTEFETCHASAPPREQUEST, output_type=tabletmanagerdata__pb2._EXECUTEFETCHASAPPRESPONSE, @@ -197,7 +215,7 @@ _descriptor.MethodDescriptor( name='SlaveStatus', full_name='tabletmanagerservice.TabletManager.SlaveStatus', - index=17, + index=19, containing_service=None, input_type=tabletmanagerdata__pb2._SLAVESTATUSREQUEST, output_type=tabletmanagerdata__pb2._SLAVESTATUSRESPONSE, @@ -206,7 +224,7 @@ _descriptor.MethodDescriptor( name='MasterPosition', full_name='tabletmanagerservice.TabletManager.MasterPosition', - index=18, + index=20, containing_service=None, input_type=tabletmanagerdata__pb2._MASTERPOSITIONREQUEST, output_type=tabletmanagerdata__pb2._MASTERPOSITIONRESPONSE, @@ -215,7 +233,7 @@ _descriptor.MethodDescriptor( name='StopSlave', full_name='tabletmanagerservice.TabletManager.StopSlave', - index=19, + index=21, containing_service=None, input_type=tabletmanagerdata__pb2._STOPSLAVEREQUEST, output_type=tabletmanagerdata__pb2._STOPSLAVERESPONSE, @@ -224,7 +242,7 @@ _descriptor.MethodDescriptor( name='StopSlaveMinimum', full_name='tabletmanagerservice.TabletManager.StopSlaveMinimum', - index=20, + index=22, containing_service=None, input_type=tabletmanagerdata__pb2._STOPSLAVEMINIMUMREQUEST, output_type=tabletmanagerdata__pb2._STOPSLAVEMINIMUMRESPONSE, @@ -233,16 +251,25 @@ _descriptor.MethodDescriptor( name='StartSlave', full_name='tabletmanagerservice.TabletManager.StartSlave', - index=21, + index=23, containing_service=None, input_type=tabletmanagerdata__pb2._STARTSLAVEREQUEST, output_type=tabletmanagerdata__pb2._STARTSLAVERESPONSE, options=None, ), + _descriptor.MethodDescriptor( + name='StartSlaveUntilAfter', + full_name='tabletmanagerservice.TabletManager.StartSlaveUntilAfter', + index=24, + containing_service=None, + input_type=tabletmanagerdata__pb2._STARTSLAVEUNTILAFTERREQUEST, + output_type=tabletmanagerdata__pb2._STARTSLAVEUNTILAFTERRESPONSE, + options=None, + ), _descriptor.MethodDescriptor( name='TabletExternallyReparented', full_name='tabletmanagerservice.TabletManager.TabletExternallyReparented', - index=22, + index=25, containing_service=None, input_type=tabletmanagerdata__pb2._TABLETEXTERNALLYREPARENTEDREQUEST, output_type=tabletmanagerdata__pb2._TABLETEXTERNALLYREPARENTEDRESPONSE, @@ -251,7 +278,7 @@ _descriptor.MethodDescriptor( name='TabletExternallyElected', full_name='tabletmanagerservice.TabletManager.TabletExternallyElected', - index=23, + index=26, containing_service=None, input_type=tabletmanagerdata__pb2._TABLETEXTERNALLYELECTEDREQUEST, output_type=tabletmanagerdata__pb2._TABLETEXTERNALLYELECTEDRESPONSE, @@ -260,7 +287,7 @@ _descriptor.MethodDescriptor( name='GetSlaves', full_name='tabletmanagerservice.TabletManager.GetSlaves', - index=24, + index=27, containing_service=None, input_type=tabletmanagerdata__pb2._GETSLAVESREQUEST, output_type=tabletmanagerdata__pb2._GETSLAVESRESPONSE, @@ -269,7 +296,7 @@ _descriptor.MethodDescriptor( name='VReplicationExec', full_name='tabletmanagerservice.TabletManager.VReplicationExec', - index=25, + index=28, containing_service=None, input_type=tabletmanagerdata__pb2._VREPLICATIONEXECREQUEST, output_type=tabletmanagerdata__pb2._VREPLICATIONEXECRESPONSE, @@ -278,7 +305,7 @@ _descriptor.MethodDescriptor( name='VReplicationWaitForPos', full_name='tabletmanagerservice.TabletManager.VReplicationWaitForPos', - index=26, + index=29, containing_service=None, input_type=tabletmanagerdata__pb2._VREPLICATIONWAITFORPOSREQUEST, output_type=tabletmanagerdata__pb2._VREPLICATIONWAITFORPOSRESPONSE, @@ -287,7 +314,7 @@ _descriptor.MethodDescriptor( name='ResetReplication', full_name='tabletmanagerservice.TabletManager.ResetReplication', - index=27, + index=30, containing_service=None, input_type=tabletmanagerdata__pb2._RESETREPLICATIONREQUEST, output_type=tabletmanagerdata__pb2._RESETREPLICATIONRESPONSE, @@ -296,7 +323,7 @@ _descriptor.MethodDescriptor( name='InitMaster', full_name='tabletmanagerservice.TabletManager.InitMaster', - index=28, + index=31, containing_service=None, input_type=tabletmanagerdata__pb2._INITMASTERREQUEST, output_type=tabletmanagerdata__pb2._INITMASTERRESPONSE, @@ -305,7 +332,7 @@ _descriptor.MethodDescriptor( name='PopulateReparentJournal', full_name='tabletmanagerservice.TabletManager.PopulateReparentJournal', - index=29, + index=32, containing_service=None, input_type=tabletmanagerdata__pb2._POPULATEREPARENTJOURNALREQUEST, output_type=tabletmanagerdata__pb2._POPULATEREPARENTJOURNALRESPONSE, @@ -314,7 +341,7 @@ _descriptor.MethodDescriptor( name='InitSlave', full_name='tabletmanagerservice.TabletManager.InitSlave', - index=30, + index=33, containing_service=None, input_type=tabletmanagerdata__pb2._INITSLAVEREQUEST, output_type=tabletmanagerdata__pb2._INITSLAVERESPONSE, @@ -323,7 +350,7 @@ _descriptor.MethodDescriptor( name='DemoteMaster', full_name='tabletmanagerservice.TabletManager.DemoteMaster', - index=31, + index=34, containing_service=None, input_type=tabletmanagerdata__pb2._DEMOTEMASTERREQUEST, output_type=tabletmanagerdata__pb2._DEMOTEMASTERRESPONSE, @@ -332,7 +359,7 @@ _descriptor.MethodDescriptor( name='PromoteSlaveWhenCaughtUp', full_name='tabletmanagerservice.TabletManager.PromoteSlaveWhenCaughtUp', - index=32, + index=35, containing_service=None, input_type=tabletmanagerdata__pb2._PROMOTESLAVEWHENCAUGHTUPREQUEST, output_type=tabletmanagerdata__pb2._PROMOTESLAVEWHENCAUGHTUPRESPONSE, @@ -341,7 +368,7 @@ _descriptor.MethodDescriptor( name='SlaveWasPromoted', full_name='tabletmanagerservice.TabletManager.SlaveWasPromoted', - index=33, + index=36, containing_service=None, input_type=tabletmanagerdata__pb2._SLAVEWASPROMOTEDREQUEST, output_type=tabletmanagerdata__pb2._SLAVEWASPROMOTEDRESPONSE, @@ -350,7 +377,7 @@ _descriptor.MethodDescriptor( name='SetMaster', full_name='tabletmanagerservice.TabletManager.SetMaster', - index=34, + index=37, containing_service=None, input_type=tabletmanagerdata__pb2._SETMASTERREQUEST, output_type=tabletmanagerdata__pb2._SETMASTERRESPONSE, @@ -359,7 +386,7 @@ _descriptor.MethodDescriptor( name='SlaveWasRestarted', full_name='tabletmanagerservice.TabletManager.SlaveWasRestarted', - index=35, + index=38, containing_service=None, input_type=tabletmanagerdata__pb2._SLAVEWASRESTARTEDREQUEST, output_type=tabletmanagerdata__pb2._SLAVEWASRESTARTEDRESPONSE, @@ -368,7 +395,7 @@ _descriptor.MethodDescriptor( name='StopReplicationAndGetStatus', full_name='tabletmanagerservice.TabletManager.StopReplicationAndGetStatus', - index=36, + index=39, containing_service=None, input_type=tabletmanagerdata__pb2._STOPREPLICATIONANDGETSTATUSREQUEST, output_type=tabletmanagerdata__pb2._STOPREPLICATIONANDGETSTATUSRESPONSE, @@ -377,7 +404,7 @@ _descriptor.MethodDescriptor( name='PromoteSlave', full_name='tabletmanagerservice.TabletManager.PromoteSlave', - index=37, + index=40, containing_service=None, input_type=tabletmanagerdata__pb2._PROMOTESLAVEREQUEST, output_type=tabletmanagerdata__pb2._PROMOTESLAVERESPONSE, @@ -386,7 +413,7 @@ _descriptor.MethodDescriptor( name='Backup', full_name='tabletmanagerservice.TabletManager.Backup', - index=38, + index=41, containing_service=None, input_type=tabletmanagerdata__pb2._BACKUPREQUEST, output_type=tabletmanagerdata__pb2._BACKUPRESPONSE, @@ -395,7 +422,7 @@ _descriptor.MethodDescriptor( name='RestoreFromBackup', full_name='tabletmanagerservice.TabletManager.RestoreFromBackup', - index=39, + index=42, containing_service=None, input_type=tabletmanagerdata__pb2._RESTOREFROMBACKUPREQUEST, output_type=tabletmanagerdata__pb2._RESTOREFROMBACKUPRESPONSE, diff --git a/py/vtproto/tabletmanagerservice_pb2_grpc.py b/py/vtproto/tabletmanagerservice_pb2_grpc.py index f21854be9f0..e559823327e 100644 --- a/py/vtproto/tabletmanagerservice_pb2_grpc.py +++ b/py/vtproto/tabletmanagerservice_pb2_grpc.py @@ -87,6 +87,16 @@ def __init__(self, channel): request_serializer=tabletmanagerdata__pb2.ApplySchemaRequest.SerializeToString, response_deserializer=tabletmanagerdata__pb2.ApplySchemaResponse.FromString, ) + self.LockTables = channel.unary_unary( + '/tabletmanagerservice.TabletManager/LockTables', + request_serializer=tabletmanagerdata__pb2.LockTablesRequest.SerializeToString, + response_deserializer=tabletmanagerdata__pb2.LockTablesResponse.FromString, + ) + self.UnlockTables = channel.unary_unary( + '/tabletmanagerservice.TabletManager/UnlockTables', + request_serializer=tabletmanagerdata__pb2.UnlockTablesRequest.SerializeToString, + response_deserializer=tabletmanagerdata__pb2.UnlockTablesResponse.FromString, + ) self.ExecuteFetchAsDba = channel.unary_unary( '/tabletmanagerservice.TabletManager/ExecuteFetchAsDba', request_serializer=tabletmanagerdata__pb2.ExecuteFetchAsDbaRequest.SerializeToString, @@ -127,6 +137,11 @@ def __init__(self, channel): request_serializer=tabletmanagerdata__pb2.StartSlaveRequest.SerializeToString, response_deserializer=tabletmanagerdata__pb2.StartSlaveResponse.FromString, ) + self.StartSlaveUntilAfter = channel.unary_unary( + '/tabletmanagerservice.TabletManager/StartSlaveUntilAfter', + request_serializer=tabletmanagerdata__pb2.StartSlaveUntilAfterRequest.SerializeToString, + response_deserializer=tabletmanagerdata__pb2.StartSlaveUntilAfterResponse.FromString, + ) self.TabletExternallyReparented = channel.unary_unary( '/tabletmanagerservice.TabletManager/TabletExternallyReparented', request_serializer=tabletmanagerdata__pb2.TabletExternallyReparentedRequest.SerializeToString, @@ -327,6 +342,20 @@ def ApplySchema(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def LockTables(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UnlockTables(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def ExecuteFetchAsDba(self, request, context): # missing associated documentation comment in .proto file pass @@ -388,6 +417,14 @@ def StartSlave(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def StartSlaveUntilAfter(self, request, context): + """StartSlave starts the mysql replication until and including + the provided position + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def TabletExternallyReparented(self, request, context): """TabletExternallyReparented tells a tablet that its underlying MySQL is currently the master. It is only used in environments (tabletmanagerdata.such as Vitess+MoB) @@ -619,6 +656,16 @@ def add_TabletManagerServicer_to_server(servicer, server): request_deserializer=tabletmanagerdata__pb2.ApplySchemaRequest.FromString, response_serializer=tabletmanagerdata__pb2.ApplySchemaResponse.SerializeToString, ), + 'LockTables': grpc.unary_unary_rpc_method_handler( + servicer.LockTables, + request_deserializer=tabletmanagerdata__pb2.LockTablesRequest.FromString, + response_serializer=tabletmanagerdata__pb2.LockTablesResponse.SerializeToString, + ), + 'UnlockTables': grpc.unary_unary_rpc_method_handler( + servicer.UnlockTables, + request_deserializer=tabletmanagerdata__pb2.UnlockTablesRequest.FromString, + response_serializer=tabletmanagerdata__pb2.UnlockTablesResponse.SerializeToString, + ), 'ExecuteFetchAsDba': grpc.unary_unary_rpc_method_handler( servicer.ExecuteFetchAsDba, request_deserializer=tabletmanagerdata__pb2.ExecuteFetchAsDbaRequest.FromString, @@ -659,6 +706,11 @@ def add_TabletManagerServicer_to_server(servicer, server): request_deserializer=tabletmanagerdata__pb2.StartSlaveRequest.FromString, response_serializer=tabletmanagerdata__pb2.StartSlaveResponse.SerializeToString, ), + 'StartSlaveUntilAfter': grpc.unary_unary_rpc_method_handler( + servicer.StartSlaveUntilAfter, + request_deserializer=tabletmanagerdata__pb2.StartSlaveUntilAfterRequest.FromString, + response_serializer=tabletmanagerdata__pb2.StartSlaveUntilAfterResponse.SerializeToString, + ), 'TabletExternallyReparented': grpc.unary_unary_rpc_method_handler( servicer.TabletExternallyReparented, request_deserializer=tabletmanagerdata__pb2.TabletExternallyReparentedRequest.FromString, diff --git a/test/tablet.py b/test/tablet.py index 930f5941295..1d64bfbe752 100644 --- a/test/tablet.py +++ b/test/tablet.py @@ -30,8 +30,12 @@ from mysql_flavor import mysql_flavor from protocols_flavor import protocols_flavor from topo_flavor.server import topo_server +from urlparse import urlparse import utils +import grpc +from vtproto.tabletmanagerservice_pb2_grpc import TabletManagerStub + # Dropping a table inexplicably produces a warning despite # the 'IF EXISTS' clause. Squelch these warnings. warnings.simplefilter('ignore') @@ -473,6 +477,7 @@ def start_vttablet( args.extend(['-health_check_interval', '2s']) args.extend(['-enable_replication_reporter']) args.extend(['-degraded_threshold', '5s']) + args.extend(['-lock_tables_timeout', '5s']) args.extend(['-watch_replication_stream']) if enable_semi_sync: args.append('-enable_semi_sync') @@ -635,10 +640,10 @@ def wait_for_vttablet_state(self, expected, timeout=60.0, port=None): break else: logging.debug( - ' vttablet %s in state %s != %s', self.tablet_alias, s, + ' vttablet %s in state: %s, expected: %s', self.tablet_alias, s, expected) timeout = utils.wait_step( - 'waiting for %s state %s (last seen state: %s)' % + '%s state %s (last seen state: %s)' % (self.tablet_alias, expected, last_seen_state), timeout, sleep_time=0.1) @@ -842,6 +847,12 @@ def rpc_endpoint(self): return 'localhost:%d' % self.grpc_port return 'localhost:%d' % self.port + def tablet_manager(self): + """Returns a rpc client able to talk to the TabletManager rpc server in go""" + addr = self.rpc_endpoint() + p = urlparse('http://' + addr) + channel = grpc.insecure_channel('%s:%s' % (p.hostname, p.port)) + return TabletManagerStub(channel) def kill_tablets(tablets): for t in tablets: @@ -854,3 +865,5 @@ def kill_tablets(tablets): if t.proc is not None: t.proc.wait() t.proc = None + + diff --git a/test/tabletmanager.py b/test/tabletmanager.py index 68a5bf9f645..1956cf9d245 100755 --- a/test/tabletmanager.py +++ b/test/tabletmanager.py @@ -840,4 +840,4 @@ def test_topocustomrule(self): if __name__ == '__main__': - utils.main() + utils.main() \ No newline at end of file diff --git a/test/tabletmanager2.py b/test/tabletmanager2.py new file mode 100755 index 00000000000..e65af1f1f92 --- /dev/null +++ b/test/tabletmanager2.py @@ -0,0 +1,228 @@ +#!/usr/bin/env python + +# Copyright 2017 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=8 expandtab shiftwidth=2 softtabstop=2 + +import MySQLdb +import logging +import re +import unittest +import os +import environment +import tablet +import utils +import time +from utils import TestError +from vtproto.tabletmanagerdata_pb2 import LockTablesRequest, UnlockTablesRequest, StopSlaveRequest, \ + MasterPositionRequest, StartSlaveUntilAfterRequest + +# regexp to check if the tablet status page reports healthy, +# regardless of actual replication lag +healthy_expr = re.compile(r'Current status: healthy') + +_create_vt_insert_test = '''create table vt_insert_test ( + id bigint auto_increment, + msg varchar(64), + primary key (id) + ) Engine=InnoDB''' + + +class TestServiceTestOfTabletManager(unittest.TestCase): + """This tests the locking functionality by running rpc calls against the tabletmanager, + in contrast to testing the tabletmanager through the vtcl""" + + replica = tablet.Tablet(62344) + master = tablet.Tablet(62044) + + def setUp(self): + try: + os.makedirs(environment.tmproot) + except OSError: + # directory already exists + pass + + try: + topo_flavor = environment.topo_server().flavor() + if topo_flavor == 'zk2': + # This is a one-off test to make sure our 'zk2' implementation + # behave with a server that is not DNS-resolveable. + environment.topo_server().setup(add_bad_host=True) + else: + environment.topo_server().setup() + + # start mysql instance external to the test + setup_procs = [ + self.replica.init_mysql(), + self.master.init_mysql(), + ] + utils.Vtctld().start() + logging.debug(utils.vtctld_connection) + utils.wait_procs(setup_procs) + + for t in self.master, self.replica: + t.create_db('vt_test_keyspace') + + self.master.init_tablet('replica', 'test_keyspace', '0', start=True) + self.replica.init_tablet('replica', 'test_keyspace', '0', start=True) + utils.run_vtctl(['InitShardMaster', '-force', 'test_keyspace/0', + self.master.tablet_alias]) + self.master.mquery('vt_test_keyspace', _create_vt_insert_test) + for t in [self.master, self.replica]: + t.set_semi_sync_enabled(master=False, slave=False) + except Exception as e: + logging.exception(e) + self.tearDown() + + def tearDown(self): + try: + for t in self.master, self.replica: + t.kill_vttablet() + tablet.Tablet.check_vttablet_count() + environment.topo_server().wipe() + for t in [self.master, self.replica]: + t.reset_replication() + t.set_semi_sync_enabled(master=False, slave=False) + t.clean_dbs() + finally: + utils.required_teardown() + + if utils.options.skip_teardown: + return + + teardown_procs = [ + self.master.teardown_mysql(), + self.replica.teardown_mysql(), + ] + utils.wait_procs(teardown_procs, raise_on_error=False) + + environment.topo_server().teardown() + utils.kill_sub_processes() + utils.remove_tmp_files() + + self.replica.remove_tree() + self.master.remove_tree() + + def _write_data_to_master(self): + """Write a single row to the master""" + self.master.mquery('vt_test_keyspace', "insert into vt_insert_test (msg) values ('test')", write=True) + + def _check_data_on_replica(self, count, msg): + """Check that the specified tablet has the expected number of rows.""" + timeout = 3 + while True: + try: + result = self.replica.mquery( + 'vt_test_keyspace', 'select count(*) from vt_insert_test') + if result[0][0] == count: + break + except MySQLdb.DatabaseError: + # ignore exceptions, we'll just timeout (the tablet creation + # can take some time to replicate, and we get a 'table vt_insert_test + # does not exist exception in some rare cases) + logging.exception('exception waiting for data to replicate') + timeout = utils.wait_step(msg, timeout) + + def test_lock_and_unlock(self): + """Test the lock ability by locking a replica and asserting it does not see changes""" + # first make sure that our writes to the master make it to the replica + self._write_data_to_master() + self._check_data_on_replica(1, "replica getting the data") + + # now lock the replica + tablet_manager = self.replica.tablet_manager() + tablet_manager.LockTables(LockTablesRequest()) + + # make sure that writing to the master does not show up on the replica while locked + self._write_data_to_master() + with self.assertRaises(TestError): + self._check_data_on_replica(2, "the replica should not see these updates") + + # finally, make sure that unlocking the replica leads to the previous write showing up + tablet_manager.UnlockTables(UnlockTablesRequest()) + self._check_data_on_replica(2, "after unlocking the replica, we should see these updates") + + def test_unlock_when_we_dont_have_a_lock(self): + """Unlocking when we do not have a valid lock should lead to an exception being raised""" + # unlock the replica + tablet_manager = self.replica.tablet_manager() + with self.assertRaises(Exception): + tablet_manager.UnlockTables(UnlockTablesRequest()) + + def test_start_slave_until_after(self): + """Test by writing three rows, noting the gtid after each, and then replaying them one by one""" + self.replica.start_vttablet() + self.master.start_vttablet() + + # first we stop replication to the replica, so we can move forward step by step. + replica_tablet_manager = self.replica.tablet_manager() + replica_tablet_manager.StopSlave(StopSlaveRequest()) + + master_tablet_manager = self.master.tablet_manager() + self._write_data_to_master() + pos1 = master_tablet_manager.MasterPosition(MasterPositionRequest()) + + self._write_data_to_master() + pos2 = master_tablet_manager.MasterPosition(MasterPositionRequest()) + + self._write_data_to_master() + pos3 = master_tablet_manager.MasterPosition(MasterPositionRequest()) + + # Now, we'll resume stepwise position by position and make sure that we see the expected data + self._check_data_on_replica(0, "no data has yet reached the replica") + + # timeout is given in nanoseconds. we want to wait no more than 10 seconds + timeout = int(10 * 1e9) + + replica_tablet_manager.StartSlaveUntilAfter( + StartSlaveUntilAfterRequest(position=pos1.position, wait_timeout=timeout)) + self._check_data_on_replica(1, "first row is now visible") + + replica_tablet_manager.StartSlaveUntilAfter( + StartSlaveUntilAfterRequest(position=pos2.position, wait_timeout=timeout)) + self._check_data_on_replica(2, "second row is now visible") + + replica_tablet_manager.StartSlaveUntilAfter( + StartSlaveUntilAfterRequest(position=pos3.position, wait_timeout=timeout)) + self._check_data_on_replica(3, "third row is now visible") + + def test_lock_and_timeout(self): + """Test that the lock times out and updates can be seen even though nothing is unlocked""" + + # first make sure that our writes to the master make it to the replica + self._write_data_to_master() + self._check_data_on_replica(1, "replica getting the data") + + # now lock the replica + tablet_manager = self.replica.tablet_manager() + tablet_manager.LockTables(LockTablesRequest()) + + # make sure that writing to the master does not show up on the replica while locked + self._write_data_to_master() + with self.assertRaises(TestError): + self._check_data_on_replica(2, "the replica should not see these updates") + + # the tests sets the lock timeout to 5 seconds, so sleeping 10 should be safe + time.sleep(10) + + self._check_data_on_replica(2, "the replica should now see these updates") + + # finally, trying to unlock should clearly tell us we did not have the lock + with self.assertRaises(Exception): + tablet_manager.UnlockTables(UnlockTablesRequest()) + + +if __name__ == '__main__': + utils.main() diff --git a/test/utils.py b/test/utils.py index d7e65ff23dc..2bae9fa3ebf 100644 --- a/test/utils.py +++ b/test/utils.py @@ -224,10 +224,11 @@ def required_teardown(): """Required cleanup steps that can't be skipped with --skip-teardown.""" # We can't skip closing of gRPC connections, because the Python interpreter # won't let us die if any connections are left open. - global vtctld_connection + global vtctld_connection, vtctld if vtctld_connection: vtctld_connection.close() vtctld_connection = None + vtctld = None def kill_sub_processes():