From 59b1a2cf9b9b1656fee820f4df645f5c786617a0 Mon Sep 17 00:00:00 2001 From: Andrew Mason Date: Mon, 22 Feb 2021 22:12:28 -0500 Subject: [PATCH 01/20] Organize vtctldata.proto and regenerate Signed-off-by: Andrew Mason --- go/vt/proto/topodata/topodata.pb.go | 2 +- go/vt/proto/vtctldata/vtctldata.pb.go | 4105 +++++++++++++------------ proto/vtctldata.proto | 100 +- 3 files changed, 2106 insertions(+), 2101 deletions(-) diff --git a/go/vt/proto/topodata/topodata.pb.go b/go/vt/proto/topodata/topodata.pb.go index 84e06dc199..7f8e815186 100644 --- a/go/vt/proto/topodata/topodata.pb.go +++ b/go/vt/proto/topodata/topodata.pb.go @@ -6802,7 +6802,7 @@ func (m *ExternalClusters) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ExternalVitessCluster", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field VitessCluster", wireType) } var msglen int for shift := uint(0); ; shift += 7 { diff --git a/go/vt/proto/vtctldata/vtctldata.pb.go b/go/vt/proto/vtctldata/vtctldata.pb.go index f955b88275..e36fc0baf5 100644 --- a/go/vt/proto/vtctldata/vtctldata.pb.go +++ b/go/vt/proto/vtctldata/vtctldata.pb.go @@ -134,6 +134,301 @@ func (m *ExecuteVtctlCommandResponse) GetEvent() *logutil.Event { return nil } +// TableMaterializeSttings contains the settings for one table. +type TableMaterializeSettings struct { + TargetTable string `protobuf:"bytes,1,opt,name=target_table,json=targetTable,proto3" json:"target_table,omitempty"` + // source_expression is a select statement. + SourceExpression string `protobuf:"bytes,2,opt,name=source_expression,json=sourceExpression,proto3" json:"source_expression,omitempty"` + // create_ddl contains the DDL to create the target table. + // If empty, the target table must already exist. + // if "copy", the target table DDL is the same as the source table. + CreateDdl string `protobuf:"bytes,3,opt,name=create_ddl,json=createDdl,proto3" json:"create_ddl,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TableMaterializeSettings) Reset() { *m = TableMaterializeSettings{} } +func (m *TableMaterializeSettings) String() string { return proto.CompactTextString(m) } +func (*TableMaterializeSettings) ProtoMessage() {} +func (*TableMaterializeSettings) Descriptor() ([]byte, []int) { + return fileDescriptor_f41247b323a1ab2e, []int{2} +} +func (m *TableMaterializeSettings) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TableMaterializeSettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TableMaterializeSettings.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TableMaterializeSettings) XXX_Merge(src proto.Message) { + xxx_messageInfo_TableMaterializeSettings.Merge(m, src) +} +func (m *TableMaterializeSettings) XXX_Size() int { + return m.Size() +} +func (m *TableMaterializeSettings) XXX_DiscardUnknown() { + xxx_messageInfo_TableMaterializeSettings.DiscardUnknown(m) +} + +var xxx_messageInfo_TableMaterializeSettings proto.InternalMessageInfo + +func (m *TableMaterializeSettings) GetTargetTable() string { + if m != nil { + return m.TargetTable + } + return "" +} + +func (m *TableMaterializeSettings) GetSourceExpression() string { + if m != nil { + return m.SourceExpression + } + return "" +} + +func (m *TableMaterializeSettings) GetCreateDdl() string { + if m != nil { + return m.CreateDdl + } + return "" +} + +// MaterializeSettings contains the settings for the Materialize command. +type MaterializeSettings struct { + // workflow is the name of the workflow. + Workflow string `protobuf:"bytes,1,opt,name=workflow,proto3" json:"workflow,omitempty"` + SourceKeyspace string `protobuf:"bytes,2,opt,name=source_keyspace,json=sourceKeyspace,proto3" json:"source_keyspace,omitempty"` + TargetKeyspace string `protobuf:"bytes,3,opt,name=target_keyspace,json=targetKeyspace,proto3" json:"target_keyspace,omitempty"` + // stop_after_copy specifies if vreplication should be stopped after copying. + StopAfterCopy bool `protobuf:"varint,4,opt,name=stop_after_copy,json=stopAfterCopy,proto3" json:"stop_after_copy,omitempty"` + TableSettings []*TableMaterializeSettings `protobuf:"bytes,5,rep,name=table_settings,json=tableSettings,proto3" json:"table_settings,omitempty"` + // optional parameters. + Cell string `protobuf:"bytes,6,opt,name=cell,proto3" json:"cell,omitempty"` + TabletTypes string `protobuf:"bytes,7,opt,name=tablet_types,json=tabletTypes,proto3" json:"tablet_types,omitempty"` + // ExternalCluster is the name of the mounted cluster which has the source keyspace/db for this workflow + // it is of the type + ExternalCluster string `protobuf:"bytes,8,opt,name=external_cluster,json=externalCluster,proto3" json:"external_cluster,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MaterializeSettings) Reset() { *m = MaterializeSettings{} } +func (m *MaterializeSettings) String() string { return proto.CompactTextString(m) } +func (*MaterializeSettings) ProtoMessage() {} +func (*MaterializeSettings) Descriptor() ([]byte, []int) { + return fileDescriptor_f41247b323a1ab2e, []int{3} +} +func (m *MaterializeSettings) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MaterializeSettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MaterializeSettings.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MaterializeSettings) XXX_Merge(src proto.Message) { + xxx_messageInfo_MaterializeSettings.Merge(m, src) +} +func (m *MaterializeSettings) XXX_Size() int { + return m.Size() +} +func (m *MaterializeSettings) XXX_DiscardUnknown() { + xxx_messageInfo_MaterializeSettings.DiscardUnknown(m) +} + +var xxx_messageInfo_MaterializeSettings proto.InternalMessageInfo + +func (m *MaterializeSettings) GetWorkflow() string { + if m != nil { + return m.Workflow + } + return "" +} + +func (m *MaterializeSettings) GetSourceKeyspace() string { + if m != nil { + return m.SourceKeyspace + } + return "" +} + +func (m *MaterializeSettings) GetTargetKeyspace() string { + if m != nil { + return m.TargetKeyspace + } + return "" +} + +func (m *MaterializeSettings) GetStopAfterCopy() bool { + if m != nil { + return m.StopAfterCopy + } + return false +} + +func (m *MaterializeSettings) GetTableSettings() []*TableMaterializeSettings { + if m != nil { + return m.TableSettings + } + return nil +} + +func (m *MaterializeSettings) GetCell() string { + if m != nil { + return m.Cell + } + return "" +} + +func (m *MaterializeSettings) GetTabletTypes() string { + if m != nil { + return m.TabletTypes + } + return "" +} + +func (m *MaterializeSettings) GetExternalCluster() string { + if m != nil { + return m.ExternalCluster + } + return "" +} + +type Keyspace struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Keyspace *topodata.Keyspace `protobuf:"bytes,2,opt,name=keyspace,proto3" json:"keyspace,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Keyspace) Reset() { *m = Keyspace{} } +func (m *Keyspace) String() string { return proto.CompactTextString(m) } +func (*Keyspace) ProtoMessage() {} +func (*Keyspace) Descriptor() ([]byte, []int) { + return fileDescriptor_f41247b323a1ab2e, []int{4} +} +func (m *Keyspace) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Keyspace) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Keyspace.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Keyspace) XXX_Merge(src proto.Message) { + xxx_messageInfo_Keyspace.Merge(m, src) +} +func (m *Keyspace) XXX_Size() int { + return m.Size() +} +func (m *Keyspace) XXX_DiscardUnknown() { + xxx_messageInfo_Keyspace.DiscardUnknown(m) +} + +var xxx_messageInfo_Keyspace proto.InternalMessageInfo + +func (m *Keyspace) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Keyspace) GetKeyspace() *topodata.Keyspace { + if m != nil { + return m.Keyspace + } + return nil +} + +type Shard struct { + Keyspace string `protobuf:"bytes,1,opt,name=keyspace,proto3" json:"keyspace,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Shard *topodata.Shard `protobuf:"bytes,3,opt,name=shard,proto3" json:"shard,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Shard) Reset() { *m = Shard{} } +func (m *Shard) String() string { return proto.CompactTextString(m) } +func (*Shard) ProtoMessage() {} +func (*Shard) Descriptor() ([]byte, []int) { + return fileDescriptor_f41247b323a1ab2e, []int{5} +} +func (m *Shard) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Shard) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Shard.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Shard) XXX_Merge(src proto.Message) { + xxx_messageInfo_Shard.Merge(m, src) +} +func (m *Shard) XXX_Size() int { + return m.Size() +} +func (m *Shard) XXX_DiscardUnknown() { + xxx_messageInfo_Shard.DiscardUnknown(m) +} + +var xxx_messageInfo_Shard proto.InternalMessageInfo + +func (m *Shard) GetKeyspace() string { + if m != nil { + return m.Keyspace + } + return "" +} + +func (m *Shard) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Shard) GetShard() *topodata.Shard { + if m != nil { + return m.Shard + } + return nil +} + type ChangeTabletTypeRequest struct { TabletAlias *topodata.TabletAlias `protobuf:"bytes,1,opt,name=tablet_alias,json=tabletAlias,proto3" json:"tablet_alias,omitempty"` DbType topodata.TabletType `protobuf:"varint,2,opt,name=db_type,json=dbType,proto3,enum=topodata.TabletType" json:"db_type,omitempty"` @@ -147,7 +442,7 @@ func (m *ChangeTabletTypeRequest) Reset() { *m = ChangeTabletTypeRequest func (m *ChangeTabletTypeRequest) String() string { return proto.CompactTextString(m) } func (*ChangeTabletTypeRequest) ProtoMessage() {} func (*ChangeTabletTypeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{2} + return fileDescriptor_f41247b323a1ab2e, []int{6} } func (m *ChangeTabletTypeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -210,7 +505,7 @@ func (m *ChangeTabletTypeResponse) Reset() { *m = ChangeTabletTypeRespon func (m *ChangeTabletTypeResponse) String() string { return proto.CompactTextString(m) } func (*ChangeTabletTypeResponse) ProtoMessage() {} func (*ChangeTabletTypeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{3} + return fileDescriptor_f41247b323a1ab2e, []int{7} } func (m *ChangeTabletTypeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -292,7 +587,7 @@ func (m *CreateKeyspaceRequest) Reset() { *m = CreateKeyspaceRequest{} } func (m *CreateKeyspaceRequest) String() string { return proto.CompactTextString(m) } func (*CreateKeyspaceRequest) ProtoMessage() {} func (*CreateKeyspaceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{4} + return fileDescriptor_f41247b323a1ab2e, []int{8} } func (m *CreateKeyspaceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -396,7 +691,7 @@ func (m *CreateKeyspaceResponse) Reset() { *m = CreateKeyspaceResponse{} func (m *CreateKeyspaceResponse) String() string { return proto.CompactTextString(m) } func (*CreateKeyspaceResponse) ProtoMessage() {} func (*CreateKeyspaceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{5} + return fileDescriptor_f41247b323a1ab2e, []int{9} } func (m *CreateKeyspaceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -452,7 +747,7 @@ func (m *CreateShardRequest) Reset() { *m = CreateShardRequest{} } func (m *CreateShardRequest) String() string { return proto.CompactTextString(m) } func (*CreateShardRequest) ProtoMessage() {} func (*CreateShardRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{6} + return fileDescriptor_f41247b323a1ab2e, []int{10} } func (m *CreateShardRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -527,7 +822,7 @@ func (m *CreateShardResponse) Reset() { *m = CreateShardResponse{} } func (m *CreateShardResponse) String() string { return proto.CompactTextString(m) } func (*CreateShardResponse) ProtoMessage() {} func (*CreateShardResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{7} + return fileDescriptor_f41247b323a1ab2e, []int{11} } func (m *CreateShardResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -593,7 +888,7 @@ func (m *DeleteKeyspaceRequest) Reset() { *m = DeleteKeyspaceRequest{} } func (m *DeleteKeyspaceRequest) String() string { return proto.CompactTextString(m) } func (*DeleteKeyspaceRequest) ProtoMessage() {} func (*DeleteKeyspaceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{8} + return fileDescriptor_f41247b323a1ab2e, []int{12} } func (m *DeleteKeyspaceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -646,7 +941,7 @@ func (m *DeleteKeyspaceResponse) Reset() { *m = DeleteKeyspaceResponse{} func (m *DeleteKeyspaceResponse) String() string { return proto.CompactTextString(m) } func (*DeleteKeyspaceResponse) ProtoMessage() {} func (*DeleteKeyspaceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{9} + return fileDescriptor_f41247b323a1ab2e, []int{13} } func (m *DeleteKeyspaceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -695,7 +990,7 @@ func (m *DeleteShardsRequest) Reset() { *m = DeleteShardsRequest{} } func (m *DeleteShardsRequest) String() string { return proto.CompactTextString(m) } func (*DeleteShardsRequest) ProtoMessage() {} func (*DeleteShardsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{10} + return fileDescriptor_f41247b323a1ab2e, []int{14} } func (m *DeleteShardsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -755,7 +1050,7 @@ func (m *DeleteShardsResponse) Reset() { *m = DeleteShardsResponse{} } func (m *DeleteShardsResponse) String() string { return proto.CompactTextString(m) } func (*DeleteShardsResponse) ProtoMessage() {} func (*DeleteShardsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{11} + return fileDescriptor_f41247b323a1ab2e, []int{15} } func (m *DeleteShardsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -799,7 +1094,7 @@ func (m *DeleteTabletsRequest) Reset() { *m = DeleteTabletsRequest{} } func (m *DeleteTabletsRequest) String() string { return proto.CompactTextString(m) } func (*DeleteTabletsRequest) ProtoMessage() {} func (*DeleteTabletsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{12} + return fileDescriptor_f41247b323a1ab2e, []int{16} } func (m *DeleteTabletsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -852,7 +1147,7 @@ func (m *DeleteTabletsResponse) Reset() { *m = DeleteTabletsResponse{} } func (m *DeleteTabletsResponse) String() string { return proto.CompactTextString(m) } func (*DeleteTabletsResponse) ProtoMessage() {} func (*DeleteTabletsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{13} + return fileDescriptor_f41247b323a1ab2e, []int{17} } func (m *DeleteTabletsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -906,7 +1201,7 @@ func (m *EmergencyReparentShardRequest) Reset() { *m = EmergencyReparent func (m *EmergencyReparentShardRequest) String() string { return proto.CompactTextString(m) } func (*EmergencyReparentShardRequest) ProtoMessage() {} func (*EmergencyReparentShardRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{14} + return fileDescriptor_f41247b323a1ab2e, []int{18} } func (m *EmergencyReparentShardRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -990,7 +1285,7 @@ func (m *EmergencyReparentShardResponse) Reset() { *m = EmergencyReparen func (m *EmergencyReparentShardResponse) String() string { return proto.CompactTextString(m) } func (*EmergencyReparentShardResponse) ProtoMessage() {} func (*EmergencyReparentShardResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{15} + return fileDescriptor_f41247b323a1ab2e, []int{19} } func (m *EmergencyReparentShardResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1047,6 +1342,100 @@ func (m *EmergencyReparentShardResponse) GetEvents() []*logutil.Event { return nil } +type FindAllShardsInKeyspaceRequest struct { + Keyspace string `protobuf:"bytes,1,opt,name=keyspace,proto3" json:"keyspace,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FindAllShardsInKeyspaceRequest) Reset() { *m = FindAllShardsInKeyspaceRequest{} } +func (m *FindAllShardsInKeyspaceRequest) String() string { return proto.CompactTextString(m) } +func (*FindAllShardsInKeyspaceRequest) ProtoMessage() {} +func (*FindAllShardsInKeyspaceRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_f41247b323a1ab2e, []int{20} +} +func (m *FindAllShardsInKeyspaceRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *FindAllShardsInKeyspaceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_FindAllShardsInKeyspaceRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *FindAllShardsInKeyspaceRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_FindAllShardsInKeyspaceRequest.Merge(m, src) +} +func (m *FindAllShardsInKeyspaceRequest) XXX_Size() int { + return m.Size() +} +func (m *FindAllShardsInKeyspaceRequest) XXX_DiscardUnknown() { + xxx_messageInfo_FindAllShardsInKeyspaceRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_FindAllShardsInKeyspaceRequest proto.InternalMessageInfo + +func (m *FindAllShardsInKeyspaceRequest) GetKeyspace() string { + if m != nil { + return m.Keyspace + } + return "" +} + +type FindAllShardsInKeyspaceResponse struct { + Shards map[string]*Shard `protobuf:"bytes,1,rep,name=shards,proto3" json:"shards,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FindAllShardsInKeyspaceResponse) Reset() { *m = FindAllShardsInKeyspaceResponse{} } +func (m *FindAllShardsInKeyspaceResponse) String() string { return proto.CompactTextString(m) } +func (*FindAllShardsInKeyspaceResponse) ProtoMessage() {} +func (*FindAllShardsInKeyspaceResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_f41247b323a1ab2e, []int{21} +} +func (m *FindAllShardsInKeyspaceResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *FindAllShardsInKeyspaceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_FindAllShardsInKeyspaceResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *FindAllShardsInKeyspaceResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_FindAllShardsInKeyspaceResponse.Merge(m, src) +} +func (m *FindAllShardsInKeyspaceResponse) XXX_Size() int { + return m.Size() +} +func (m *FindAllShardsInKeyspaceResponse) XXX_DiscardUnknown() { + xxx_messageInfo_FindAllShardsInKeyspaceResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_FindAllShardsInKeyspaceResponse proto.InternalMessageInfo + +func (m *FindAllShardsInKeyspaceResponse) GetShards() map[string]*Shard { + if m != nil { + return m.Shards + } + return nil +} + type GetBackupsRequest struct { Keyspace string `protobuf:"bytes,1,opt,name=keyspace,proto3" json:"keyspace,omitempty"` Shard string `protobuf:"bytes,2,opt,name=shard,proto3" json:"shard,omitempty"` @@ -1059,7 +1448,7 @@ func (m *GetBackupsRequest) Reset() { *m = GetBackupsRequest{} } func (m *GetBackupsRequest) String() string { return proto.CompactTextString(m) } func (*GetBackupsRequest) ProtoMessage() {} func (*GetBackupsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{16} + return fileDescriptor_f41247b323a1ab2e, []int{22} } func (m *GetBackupsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1113,7 +1502,7 @@ func (m *GetBackupsResponse) Reset() { *m = GetBackupsResponse{} } func (m *GetBackupsResponse) String() string { return proto.CompactTextString(m) } func (*GetBackupsResponse) ProtoMessage() {} func (*GetBackupsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{17} + return fileDescriptor_f41247b323a1ab2e, []int{23} } func (m *GetBackupsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1159,7 +1548,7 @@ func (m *GetCellInfoNamesRequest) Reset() { *m = GetCellInfoNamesRequest func (m *GetCellInfoNamesRequest) String() string { return proto.CompactTextString(m) } func (*GetCellInfoNamesRequest) ProtoMessage() {} func (*GetCellInfoNamesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{18} + return fileDescriptor_f41247b323a1ab2e, []int{24} } func (m *GetCellInfoNamesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1199,7 +1588,7 @@ func (m *GetCellInfoNamesResponse) Reset() { *m = GetCellInfoNamesRespon func (m *GetCellInfoNamesResponse) String() string { return proto.CompactTextString(m) } func (*GetCellInfoNamesResponse) ProtoMessage() {} func (*GetCellInfoNamesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{19} + return fileDescriptor_f41247b323a1ab2e, []int{25} } func (m *GetCellInfoNamesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1246,7 +1635,7 @@ func (m *GetCellInfoRequest) Reset() { *m = GetCellInfoRequest{} } func (m *GetCellInfoRequest) String() string { return proto.CompactTextString(m) } func (*GetCellInfoRequest) ProtoMessage() {} func (*GetCellInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{20} + return fileDescriptor_f41247b323a1ab2e, []int{26} } func (m *GetCellInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1293,7 +1682,7 @@ func (m *GetCellInfoResponse) Reset() { *m = GetCellInfoResponse{} } func (m *GetCellInfoResponse) String() string { return proto.CompactTextString(m) } func (*GetCellInfoResponse) ProtoMessage() {} func (*GetCellInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{21} + return fileDescriptor_f41247b323a1ab2e, []int{27} } func (m *GetCellInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1339,7 +1728,7 @@ func (m *GetCellsAliasesRequest) Reset() { *m = GetCellsAliasesRequest{} func (m *GetCellsAliasesRequest) String() string { return proto.CompactTextString(m) } func (*GetCellsAliasesRequest) ProtoMessage() {} func (*GetCellsAliasesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{22} + return fileDescriptor_f41247b323a1ab2e, []int{28} } func (m *GetCellsAliasesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1379,7 +1768,7 @@ func (m *GetCellsAliasesResponse) Reset() { *m = GetCellsAliasesResponse func (m *GetCellsAliasesResponse) String() string { return proto.CompactTextString(m) } func (*GetCellsAliasesResponse) ProtoMessage() {} func (*GetCellsAliasesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{23} + return fileDescriptor_f41247b323a1ab2e, []int{29} } func (m *GetCellsAliasesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1425,7 +1814,7 @@ func (m *GetKeyspacesRequest) Reset() { *m = GetKeyspacesRequest{} } func (m *GetKeyspacesRequest) String() string { return proto.CompactTextString(m) } func (*GetKeyspacesRequest) ProtoMessage() {} func (*GetKeyspacesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{24} + return fileDescriptor_f41247b323a1ab2e, []int{30} } func (m *GetKeyspacesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1465,7 +1854,7 @@ func (m *GetKeyspacesResponse) Reset() { *m = GetKeyspacesResponse{} } func (m *GetKeyspacesResponse) String() string { return proto.CompactTextString(m) } func (*GetKeyspacesResponse) ProtoMessage() {} func (*GetKeyspacesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{25} + return fileDescriptor_f41247b323a1ab2e, []int{31} } func (m *GetKeyspacesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1512,7 +1901,7 @@ func (m *GetKeyspaceRequest) Reset() { *m = GetKeyspaceRequest{} } func (m *GetKeyspaceRequest) String() string { return proto.CompactTextString(m) } func (*GetKeyspaceRequest) ProtoMessage() {} func (*GetKeyspaceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{26} + return fileDescriptor_f41247b323a1ab2e, []int{32} } func (m *GetKeyspaceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1559,7 +1948,7 @@ func (m *GetKeyspaceResponse) Reset() { *m = GetKeyspaceResponse{} } func (m *GetKeyspaceResponse) String() string { return proto.CompactTextString(m) } func (*GetKeyspaceResponse) ProtoMessage() {} func (*GetKeyspaceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{27} + return fileDescriptor_f41247b323a1ab2e, []int{33} } func (m *GetKeyspaceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1621,7 +2010,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_f41247b323a1ab2e, []int{28} + return fileDescriptor_f41247b323a1ab2e, []int{34} } func (m *GetSchemaRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1703,7 +2092,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_f41247b323a1ab2e, []int{29} + return fileDescriptor_f41247b323a1ab2e, []int{35} } func (m *GetSchemaResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1751,7 +2140,7 @@ func (m *GetShardRequest) Reset() { *m = GetShardRequest{} } func (m *GetShardRequest) String() string { return proto.CompactTextString(m) } func (*GetShardRequest) ProtoMessage() {} func (*GetShardRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{30} + return fileDescriptor_f41247b323a1ab2e, []int{36} } func (m *GetShardRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1805,7 +2194,7 @@ func (m *GetShardResponse) Reset() { *m = GetShardResponse{} } func (m *GetShardResponse) String() string { return proto.CompactTextString(m) } func (*GetShardResponse) ProtoMessage() {} func (*GetShardResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{31} + return fileDescriptor_f41247b323a1ab2e, []int{37} } func (m *GetShardResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1852,7 +2241,7 @@ func (m *GetSrvVSchemaRequest) Reset() { *m = GetSrvVSchemaRequest{} } func (m *GetSrvVSchemaRequest) String() string { return proto.CompactTextString(m) } func (*GetSrvVSchemaRequest) ProtoMessage() {} func (*GetSrvVSchemaRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{32} + return fileDescriptor_f41247b323a1ab2e, []int{38} } func (m *GetSrvVSchemaRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1899,7 +2288,7 @@ func (m *GetSrvVSchemaResponse) Reset() { *m = GetSrvVSchemaResponse{} } func (m *GetSrvVSchemaResponse) String() string { return proto.CompactTextString(m) } func (*GetSrvVSchemaResponse) ProtoMessage() {} func (*GetSrvVSchemaResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{33} + return fileDescriptor_f41247b323a1ab2e, []int{39} } func (m *GetSrvVSchemaResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1946,7 +2335,7 @@ func (m *GetTabletRequest) Reset() { *m = GetTabletRequest{} } func (m *GetTabletRequest) String() string { return proto.CompactTextString(m) } func (*GetTabletRequest) ProtoMessage() {} func (*GetTabletRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{34} + return fileDescriptor_f41247b323a1ab2e, []int{40} } func (m *GetTabletRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1993,7 +2382,7 @@ func (m *GetTabletResponse) Reset() { *m = GetTabletResponse{} } func (m *GetTabletResponse) String() string { return proto.CompactTextString(m) } func (*GetTabletResponse) ProtoMessage() {} func (*GetTabletResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{35} + return fileDescriptor_f41247b323a1ab2e, []int{41} } func (m *GetTabletResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2047,7 +2436,7 @@ func (m *GetTabletsRequest) Reset() { *m = GetTabletsRequest{} } func (m *GetTabletsRequest) String() string { return proto.CompactTextString(m) } func (*GetTabletsRequest) ProtoMessage() {} func (*GetTabletsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{36} + return fileDescriptor_f41247b323a1ab2e, []int{42} } func (m *GetTabletsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2108,7 +2497,7 @@ func (m *GetTabletsResponse) Reset() { *m = GetTabletsResponse{} } func (m *GetTabletsResponse) String() string { return proto.CompactTextString(m) } func (*GetTabletsResponse) ProtoMessage() {} func (*GetTabletsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{37} + return fileDescriptor_f41247b323a1ab2e, []int{43} } func (m *GetTabletsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2155,7 +2544,7 @@ func (m *GetVSchemaRequest) Reset() { *m = GetVSchemaRequest{} } func (m *GetVSchemaRequest) String() string { return proto.CompactTextString(m) } func (*GetVSchemaRequest) ProtoMessage() {} func (*GetVSchemaRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{38} + return fileDescriptor_f41247b323a1ab2e, []int{44} } func (m *GetVSchemaRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2202,7 +2591,7 @@ func (m *GetVSchemaResponse) Reset() { *m = GetVSchemaResponse{} } func (m *GetVSchemaResponse) String() string { return proto.CompactTextString(m) } func (*GetVSchemaResponse) ProtoMessage() {} func (*GetVSchemaResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{39} + return fileDescriptor_f41247b323a1ab2e, []int{45} } func (m *GetVSchemaResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2253,7 +2642,7 @@ func (m *InitShardPrimaryRequest) Reset() { *m = InitShardPrimaryRequest func (m *InitShardPrimaryRequest) String() string { return proto.CompactTextString(m) } func (*InitShardPrimaryRequest) ProtoMessage() {} func (*InitShardPrimaryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{40} + return fileDescriptor_f41247b323a1ab2e, []int{46} } func (m *InitShardPrimaryRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2328,7 +2717,7 @@ func (m *InitShardPrimaryResponse) Reset() { *m = InitShardPrimaryRespon func (m *InitShardPrimaryResponse) String() string { return proto.CompactTextString(m) } func (*InitShardPrimaryResponse) ProtoMessage() {} func (*InitShardPrimaryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{41} + return fileDescriptor_f41247b323a1ab2e, []int{47} } func (m *InitShardPrimaryResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2396,7 +2785,7 @@ func (m *PlannedReparentShardRequest) Reset() { *m = PlannedReparentShar func (m *PlannedReparentShardRequest) String() string { return proto.CompactTextString(m) } func (*PlannedReparentShardRequest) ProtoMessage() {} func (*PlannedReparentShardRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{42} + return fileDescriptor_f41247b323a1ab2e, []int{48} } func (m *PlannedReparentShardRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2480,7 +2869,7 @@ func (m *PlannedReparentShardResponse) Reset() { *m = PlannedReparentSha func (m *PlannedReparentShardResponse) String() string { return proto.CompactTextString(m) } func (*PlannedReparentShardResponse) ProtoMessage() {} func (*PlannedReparentShardResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{43} + return fileDescriptor_f41247b323a1ab2e, []int{49} } func (m *PlannedReparentShardResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2556,7 +2945,7 @@ func (m *RemoveKeyspaceCellRequest) Reset() { *m = RemoveKeyspaceCellReq func (m *RemoveKeyspaceCellRequest) String() string { return proto.CompactTextString(m) } func (*RemoveKeyspaceCellRequest) ProtoMessage() {} func (*RemoveKeyspaceCellRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{44} + return fileDescriptor_f41247b323a1ab2e, []int{50} } func (m *RemoveKeyspaceCellRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2623,7 +3012,7 @@ func (m *RemoveKeyspaceCellResponse) Reset() { *m = RemoveKeyspaceCellRe func (m *RemoveKeyspaceCellResponse) String() string { return proto.CompactTextString(m) } func (*RemoveKeyspaceCellResponse) ProtoMessage() {} func (*RemoveKeyspaceCellResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{45} + return fileDescriptor_f41247b323a1ab2e, []int{51} } func (m *RemoveKeyspaceCellResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2672,7 +3061,7 @@ func (m *RemoveShardCellRequest) Reset() { *m = RemoveShardCellRequest{} func (m *RemoveShardCellRequest) String() string { return proto.CompactTextString(m) } func (*RemoveShardCellRequest) ProtoMessage() {} func (*RemoveShardCellRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{46} + return fileDescriptor_f41247b323a1ab2e, []int{52} } func (m *RemoveShardCellRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2746,7 +3135,7 @@ func (m *RemoveShardCellResponse) Reset() { *m = RemoveShardCellResponse func (m *RemoveShardCellResponse) String() string { return proto.CompactTextString(m) } func (*RemoveShardCellResponse) ProtoMessage() {} func (*RemoveShardCellResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{47} + return fileDescriptor_f41247b323a1ab2e, []int{53} } func (m *RemoveShardCellResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2788,7 +3177,7 @@ func (m *ReparentTabletRequest) Reset() { *m = ReparentTabletRequest{} } func (m *ReparentTabletRequest) String() string { return proto.CompactTextString(m) } func (*ReparentTabletRequest) ProtoMessage() {} func (*ReparentTabletRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{48} + return fileDescriptor_f41247b323a1ab2e, []int{54} } func (m *ReparentTabletRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2840,7 +3229,7 @@ func (m *ReparentTabletResponse) Reset() { *m = ReparentTabletResponse{} func (m *ReparentTabletResponse) String() string { return proto.CompactTextString(m) } func (*ReparentTabletResponse) ProtoMessage() {} func (*ReparentTabletResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{49} + return fileDescriptor_f41247b323a1ab2e, []int{55} } func (m *ReparentTabletResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2903,7 +3292,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_f41247b323a1ab2e, []int{50} + return fileDescriptor_f41247b323a1ab2e, []int{56} } func (m *TabletExternallyReparentedRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2953,7 +3342,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_f41247b323a1ab2e, []int{51} + return fileDescriptor_f41247b323a1ab2e, []int{57} } func (m *TabletExternallyReparentedResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3010,398 +3399,13 @@ func (m *TabletExternallyReparentedResponse) GetOldPrimary() *topodata.TabletAli return nil } -type Keyspace struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Keyspace *topodata.Keyspace `protobuf:"bytes,2,opt,name=keyspace,proto3" json:"keyspace,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Keyspace) Reset() { *m = Keyspace{} } -func (m *Keyspace) String() string { return proto.CompactTextString(m) } -func (*Keyspace) ProtoMessage() {} -func (*Keyspace) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{52} -} -func (m *Keyspace) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Keyspace) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Keyspace.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *Keyspace) XXX_Merge(src proto.Message) { - xxx_messageInfo_Keyspace.Merge(m, src) -} -func (m *Keyspace) XXX_Size() int { - return m.Size() -} -func (m *Keyspace) XXX_DiscardUnknown() { - xxx_messageInfo_Keyspace.DiscardUnknown(m) -} - -var xxx_messageInfo_Keyspace proto.InternalMessageInfo - -func (m *Keyspace) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *Keyspace) GetKeyspace() *topodata.Keyspace { - if m != nil { - return m.Keyspace - } - return nil -} - -type FindAllShardsInKeyspaceRequest struct { - Keyspace string `protobuf:"bytes,1,opt,name=keyspace,proto3" json:"keyspace,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FindAllShardsInKeyspaceRequest) Reset() { *m = FindAllShardsInKeyspaceRequest{} } -func (m *FindAllShardsInKeyspaceRequest) String() string { return proto.CompactTextString(m) } -func (*FindAllShardsInKeyspaceRequest) ProtoMessage() {} -func (*FindAllShardsInKeyspaceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{53} -} -func (m *FindAllShardsInKeyspaceRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *FindAllShardsInKeyspaceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_FindAllShardsInKeyspaceRequest.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *FindAllShardsInKeyspaceRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_FindAllShardsInKeyspaceRequest.Merge(m, src) -} -func (m *FindAllShardsInKeyspaceRequest) XXX_Size() int { - return m.Size() -} -func (m *FindAllShardsInKeyspaceRequest) XXX_DiscardUnknown() { - xxx_messageInfo_FindAllShardsInKeyspaceRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_FindAllShardsInKeyspaceRequest proto.InternalMessageInfo - -func (m *FindAllShardsInKeyspaceRequest) GetKeyspace() string { - if m != nil { - return m.Keyspace - } - return "" -} - -type FindAllShardsInKeyspaceResponse struct { - Shards map[string]*Shard `protobuf:"bytes,1,rep,name=shards,proto3" json:"shards,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FindAllShardsInKeyspaceResponse) Reset() { *m = FindAllShardsInKeyspaceResponse{} } -func (m *FindAllShardsInKeyspaceResponse) String() string { return proto.CompactTextString(m) } -func (*FindAllShardsInKeyspaceResponse) ProtoMessage() {} -func (*FindAllShardsInKeyspaceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{54} -} -func (m *FindAllShardsInKeyspaceResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *FindAllShardsInKeyspaceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_FindAllShardsInKeyspaceResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *FindAllShardsInKeyspaceResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_FindAllShardsInKeyspaceResponse.Merge(m, src) -} -func (m *FindAllShardsInKeyspaceResponse) XXX_Size() int { - return m.Size() -} -func (m *FindAllShardsInKeyspaceResponse) XXX_DiscardUnknown() { - xxx_messageInfo_FindAllShardsInKeyspaceResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_FindAllShardsInKeyspaceResponse proto.InternalMessageInfo - -func (m *FindAllShardsInKeyspaceResponse) GetShards() map[string]*Shard { - if m != nil { - return m.Shards - } - return nil -} - -type Shard struct { - Keyspace string `protobuf:"bytes,1,opt,name=keyspace,proto3" json:"keyspace,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Shard *topodata.Shard `protobuf:"bytes,3,opt,name=shard,proto3" json:"shard,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Shard) Reset() { *m = Shard{} } -func (m *Shard) String() string { return proto.CompactTextString(m) } -func (*Shard) ProtoMessage() {} -func (*Shard) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{55} -} -func (m *Shard) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Shard) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Shard.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *Shard) XXX_Merge(src proto.Message) { - xxx_messageInfo_Shard.Merge(m, src) -} -func (m *Shard) XXX_Size() int { - return m.Size() -} -func (m *Shard) XXX_DiscardUnknown() { - xxx_messageInfo_Shard.DiscardUnknown(m) -} - -var xxx_messageInfo_Shard proto.InternalMessageInfo - -func (m *Shard) GetKeyspace() string { - if m != nil { - return m.Keyspace - } - return "" -} - -func (m *Shard) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *Shard) GetShard() *topodata.Shard { - if m != nil { - return m.Shard - } - return nil -} - -// TableMaterializeSttings contains the settings for one table. -type TableMaterializeSettings struct { - TargetTable string `protobuf:"bytes,1,opt,name=target_table,json=targetTable,proto3" json:"target_table,omitempty"` - // source_expression is a select statement. - SourceExpression string `protobuf:"bytes,2,opt,name=source_expression,json=sourceExpression,proto3" json:"source_expression,omitempty"` - // create_ddl contains the DDL to create the target table. - // If empty, the target table must already exist. - // if "copy", the target table DDL is the same as the source table. - CreateDdl string `protobuf:"bytes,3,opt,name=create_ddl,json=createDdl,proto3" json:"create_ddl,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *TableMaterializeSettings) Reset() { *m = TableMaterializeSettings{} } -func (m *TableMaterializeSettings) String() string { return proto.CompactTextString(m) } -func (*TableMaterializeSettings) ProtoMessage() {} -func (*TableMaterializeSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{56} -} -func (m *TableMaterializeSettings) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *TableMaterializeSettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_TableMaterializeSettings.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *TableMaterializeSettings) XXX_Merge(src proto.Message) { - xxx_messageInfo_TableMaterializeSettings.Merge(m, src) -} -func (m *TableMaterializeSettings) XXX_Size() int { - return m.Size() -} -func (m *TableMaterializeSettings) XXX_DiscardUnknown() { - xxx_messageInfo_TableMaterializeSettings.DiscardUnknown(m) -} - -var xxx_messageInfo_TableMaterializeSettings proto.InternalMessageInfo - -func (m *TableMaterializeSettings) GetTargetTable() string { - if m != nil { - return m.TargetTable - } - return "" -} - -func (m *TableMaterializeSettings) GetSourceExpression() string { - if m != nil { - return m.SourceExpression - } - return "" -} - -func (m *TableMaterializeSettings) GetCreateDdl() string { - if m != nil { - return m.CreateDdl - } - return "" -} - -// MaterializeSettings contains the settings for the Materialize command. -type MaterializeSettings struct { - // workflow is the name of the workflow. - Workflow string `protobuf:"bytes,1,opt,name=workflow,proto3" json:"workflow,omitempty"` - SourceKeyspace string `protobuf:"bytes,2,opt,name=source_keyspace,json=sourceKeyspace,proto3" json:"source_keyspace,omitempty"` - TargetKeyspace string `protobuf:"bytes,3,opt,name=target_keyspace,json=targetKeyspace,proto3" json:"target_keyspace,omitempty"` - // stop_after_copy specifies if vreplication should be stopped after copying. - StopAfterCopy bool `protobuf:"varint,4,opt,name=stop_after_copy,json=stopAfterCopy,proto3" json:"stop_after_copy,omitempty"` - TableSettings []*TableMaterializeSettings `protobuf:"bytes,5,rep,name=table_settings,json=tableSettings,proto3" json:"table_settings,omitempty"` - // optional parameters. - Cell string `protobuf:"bytes,6,opt,name=cell,proto3" json:"cell,omitempty"` - TabletTypes string `protobuf:"bytes,7,opt,name=tablet_types,json=tabletTypes,proto3" json:"tablet_types,omitempty"` - // ExternalCluster is the name of the mounted cluster which has the source keyspace/db for this workflow - // it is of the type - ExternalCluster string `protobuf:"bytes,8,opt,name=external_cluster,json=externalCluster,proto3" json:"external_cluster,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MaterializeSettings) Reset() { *m = MaterializeSettings{} } -func (m *MaterializeSettings) String() string { return proto.CompactTextString(m) } -func (*MaterializeSettings) ProtoMessage() {} -func (*MaterializeSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{57} -} -func (m *MaterializeSettings) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MaterializeSettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MaterializeSettings.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MaterializeSettings) XXX_Merge(src proto.Message) { - xxx_messageInfo_MaterializeSettings.Merge(m, src) -} -func (m *MaterializeSettings) XXX_Size() int { - return m.Size() -} -func (m *MaterializeSettings) XXX_DiscardUnknown() { - xxx_messageInfo_MaterializeSettings.DiscardUnknown(m) -} - -var xxx_messageInfo_MaterializeSettings proto.InternalMessageInfo - -func (m *MaterializeSettings) GetWorkflow() string { - if m != nil { - return m.Workflow - } - return "" -} - -func (m *MaterializeSettings) GetSourceKeyspace() string { - if m != nil { - return m.SourceKeyspace - } - return "" -} - -func (m *MaterializeSettings) GetTargetKeyspace() string { - if m != nil { - return m.TargetKeyspace - } - return "" -} - -func (m *MaterializeSettings) GetStopAfterCopy() bool { - if m != nil { - return m.StopAfterCopy - } - return false -} - -func (m *MaterializeSettings) GetTableSettings() []*TableMaterializeSettings { - if m != nil { - return m.TableSettings - } - return nil -} - -func (m *MaterializeSettings) GetCell() string { - if m != nil { - return m.Cell - } - return "" -} - -func (m *MaterializeSettings) GetTabletTypes() string { - if m != nil { - return m.TabletTypes - } - return "" -} - -func (m *MaterializeSettings) GetExternalCluster() string { - if m != nil { - return m.ExternalCluster - } - return "" -} - func init() { proto.RegisterType((*ExecuteVtctlCommandRequest)(nil), "vtctldata.ExecuteVtctlCommandRequest") proto.RegisterType((*ExecuteVtctlCommandResponse)(nil), "vtctldata.ExecuteVtctlCommandResponse") + proto.RegisterType((*TableMaterializeSettings)(nil), "vtctldata.TableMaterializeSettings") + proto.RegisterType((*MaterializeSettings)(nil), "vtctldata.MaterializeSettings") + proto.RegisterType((*Keyspace)(nil), "vtctldata.Keyspace") + proto.RegisterType((*Shard)(nil), "vtctldata.Shard") proto.RegisterType((*ChangeTabletTypeRequest)(nil), "vtctldata.ChangeTabletTypeRequest") proto.RegisterType((*ChangeTabletTypeResponse)(nil), "vtctldata.ChangeTabletTypeResponse") proto.RegisterType((*CreateKeyspaceRequest)(nil), "vtctldata.CreateKeyspaceRequest") @@ -3416,6 +3420,9 @@ func init() { proto.RegisterType((*DeleteTabletsResponse)(nil), "vtctldata.DeleteTabletsResponse") proto.RegisterType((*EmergencyReparentShardRequest)(nil), "vtctldata.EmergencyReparentShardRequest") proto.RegisterType((*EmergencyReparentShardResponse)(nil), "vtctldata.EmergencyReparentShardResponse") + proto.RegisterType((*FindAllShardsInKeyspaceRequest)(nil), "vtctldata.FindAllShardsInKeyspaceRequest") + proto.RegisterType((*FindAllShardsInKeyspaceResponse)(nil), "vtctldata.FindAllShardsInKeyspaceResponse") + proto.RegisterMapType((map[string]*Shard)(nil), "vtctldata.FindAllShardsInKeyspaceResponse.ShardsEntry") proto.RegisterType((*GetBackupsRequest)(nil), "vtctldata.GetBackupsRequest") proto.RegisterType((*GetBackupsResponse)(nil), "vtctldata.GetBackupsResponse") proto.RegisterType((*GetCellInfoNamesRequest)(nil), "vtctldata.GetCellInfoNamesRequest") @@ -3453,148 +3460,142 @@ func init() { proto.RegisterType((*ReparentTabletResponse)(nil), "vtctldata.ReparentTabletResponse") proto.RegisterType((*TabletExternallyReparentedRequest)(nil), "vtctldata.TabletExternallyReparentedRequest") proto.RegisterType((*TabletExternallyReparentedResponse)(nil), "vtctldata.TabletExternallyReparentedResponse") - proto.RegisterType((*Keyspace)(nil), "vtctldata.Keyspace") - proto.RegisterType((*FindAllShardsInKeyspaceRequest)(nil), "vtctldata.FindAllShardsInKeyspaceRequest") - proto.RegisterType((*FindAllShardsInKeyspaceResponse)(nil), "vtctldata.FindAllShardsInKeyspaceResponse") - proto.RegisterMapType((map[string]*Shard)(nil), "vtctldata.FindAllShardsInKeyspaceResponse.ShardsEntry") - proto.RegisterType((*Shard)(nil), "vtctldata.Shard") - proto.RegisterType((*TableMaterializeSettings)(nil), "vtctldata.TableMaterializeSettings") - proto.RegisterType((*MaterializeSettings)(nil), "vtctldata.MaterializeSettings") } func init() { proto.RegisterFile("vtctldata.proto", fileDescriptor_f41247b323a1ab2e) } var fileDescriptor_f41247b323a1ab2e = []byte{ - // 2063 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x19, 0x4d, 0x6f, 0xdb, 0xc8, - 0xb5, 0x94, 0x2c, 0x59, 0x7a, 0xfa, 0x72, 0x68, 0xd9, 0x56, 0xb4, 0x89, 0xeb, 0x30, 0x8d, 0x57, - 0x4d, 0xbb, 0x52, 0x36, 0x8b, 0x06, 0x41, 0xba, 0x2d, 0x92, 0xd8, 0x4a, 0xe0, 0xcd, 0xd6, 0x75, - 0x69, 0x23, 0x05, 0x5a, 0xa0, 0x04, 0x4d, 0x8e, 0x14, 0x22, 0x14, 0xc9, 0xe5, 0x8c, 0x64, 0x73, - 0x7b, 0xe8, 0xa5, 0x3d, 0x2c, 0x50, 0xa0, 0xd7, 0x02, 0x7b, 0xe9, 0xa9, 0x3f, 0x21, 0x87, 0xa2, - 0xe8, 0xb1, 0xe8, 0xb1, 0xd7, 0xde, 0x8a, 0xf4, 0x67, 0xf4, 0x52, 0xcc, 0x17, 0x49, 0x51, 0x1f, - 0x71, 0x9c, 0x00, 0xc5, 0x9e, 0xc4, 0x79, 0x1f, 0xf3, 0x3e, 0xe7, 0xbd, 0x37, 0x23, 0x68, 0x4c, - 0x88, 0x45, 0x5c, 0xdb, 0x24, 0x66, 0x37, 0x08, 0x7d, 0xe2, 0xab, 0xe5, 0x18, 0xd0, 0xae, 0xb9, - 0xfe, 0x70, 0x4c, 0x1c, 0x97, 0x63, 0xda, 0xf5, 0x51, 0x84, 0xbf, 0x70, 0x2d, 0x22, 0xd7, 0x5b, - 0xc4, 0x3c, 0x75, 0x11, 0x19, 0x99, 0x9e, 0x39, 0x44, 0x61, 0xb2, 0x45, 0xbb, 0x4e, 0xfc, 0xc0, - 0x4f, 0xad, 0x6b, 0x13, 0x6c, 0xbd, 0x40, 0x23, 0xb9, 0xac, 0x4e, 0x08, 0x71, 0x46, 0x88, 0xaf, - 0xb4, 0x9f, 0x43, 0xbb, 0x7f, 0x8e, 0xac, 0x31, 0x41, 0xcf, 0xa9, 0xe0, 0x3d, 0x7f, 0x34, 0x32, - 0x3d, 0x5b, 0x47, 0x5f, 0x8c, 0x11, 0x26, 0xaa, 0x0a, 0x2b, 0x66, 0x38, 0xc4, 0x2d, 0x65, 0x27, - 0xdf, 0x29, 0xeb, 0xec, 0x5b, 0xbd, 0x05, 0x75, 0xd3, 0x22, 0x8e, 0xef, 0x19, 0x74, 0x1b, 0x7f, - 0x4c, 0x5a, 0xb9, 0x1d, 0xa5, 0x93, 0xd7, 0x6b, 0x1c, 0x7a, 0xc2, 0x81, 0xda, 0x1e, 0x7c, 0x30, - 0x77, 0x63, 0x1c, 0xf8, 0x1e, 0x46, 0xea, 0x77, 0xa0, 0x80, 0x26, 0xc8, 0x23, 0x2d, 0x65, 0x47, - 0xe9, 0x54, 0xee, 0xd6, 0xbb, 0xd2, 0xd8, 0x3e, 0x85, 0xea, 0x1c, 0xa9, 0x7d, 0xad, 0xc0, 0xd6, - 0xde, 0x0b, 0xd3, 0x1b, 0xa2, 0x13, 0x66, 0xec, 0x49, 0x14, 0x20, 0xa9, 0xdb, 0x7d, 0xa8, 0x72, - 0x0f, 0x18, 0xa6, 0xeb, 0x98, 0x58, 0x6c, 0xb4, 0xd1, 0x8d, 0xad, 0xe7, 0x2c, 0x8f, 0x28, 0x52, - 0xaf, 0x90, 0x64, 0xa1, 0x7e, 0x04, 0xab, 0xf6, 0xa9, 0x41, 0xa2, 0x00, 0x31, 0xd5, 0xeb, 0x77, - 0x9b, 0x59, 0x26, 0x26, 0xa7, 0x68, 0x9f, 0xd2, 0x5f, 0x75, 0x0b, 0x56, 0xed, 0x30, 0x32, 0xc2, - 0xb1, 0xd7, 0xca, 0xef, 0x28, 0x9d, 0x92, 0x5e, 0xb4, 0xc3, 0x48, 0x1f, 0x7b, 0xda, 0x9f, 0x15, - 0x68, 0xcd, 0x6a, 0x27, 0x0c, 0xfc, 0x01, 0xd4, 0x4e, 0xd1, 0xc0, 0x0f, 0x91, 0xc1, 0x45, 0x0b, - 0xfd, 0xd6, 0xb2, 0xa2, 0xf4, 0x2a, 0x27, 0xe3, 0x2b, 0xf5, 0x13, 0xa8, 0x9a, 0x03, 0x82, 0x42, - 0xc9, 0x95, 0x5b, 0xc0, 0x55, 0x61, 0x54, 0x82, 0x69, 0x1b, 0x2a, 0x67, 0x26, 0x36, 0xa6, 0xb5, - 0x2c, 0x9f, 0x99, 0x78, 0x9f, 0x2b, 0xfa, 0x2a, 0x0f, 0x1b, 0x7b, 0x21, 0x32, 0x09, 0x7a, 0x86, - 0x22, 0x1c, 0x98, 0x16, 0x4a, 0x05, 0xd8, 0x33, 0x47, 0x88, 0x29, 0x57, 0xd6, 0xd9, 0xb7, 0xda, - 0x84, 0xc2, 0xc0, 0x0f, 0x2d, 0xee, 0x9c, 0x92, 0xce, 0x17, 0x6a, 0x0f, 0x9a, 0xa6, 0xeb, 0xfa, - 0x67, 0x06, 0x1a, 0x05, 0x24, 0x32, 0x26, 0x06, 0x4f, 0x2a, 0x21, 0xec, 0x0a, 0xc3, 0xf5, 0x29, - 0xea, 0xf9, 0x31, 0x43, 0xa8, 0x77, 0xa0, 0x89, 0x5f, 0x98, 0xa1, 0xed, 0x78, 0x43, 0xc3, 0xf2, - 0xdd, 0xf1, 0xc8, 0x33, 0x98, 0xa8, 0x15, 0x26, 0x4a, 0x95, 0xb8, 0x3d, 0x86, 0x3a, 0xa4, 0x82, - 0x3f, 0x9b, 0xe5, 0x60, 0x41, 0x2a, 0xb0, 0x20, 0xb5, 0x12, 0x1f, 0x48, 0x2b, 0x0e, 0x6c, 0xe6, - 0xf2, 0xcc, 0x5e, 0x2c, 0x68, 0x0f, 0xa1, 0x8a, 0x51, 0x38, 0x41, 0xb6, 0x31, 0x08, 0xfd, 0x11, - 0x6e, 0x15, 0x77, 0xf2, 0x9d, 0xca, 0xdd, 0xeb, 0xb3, 0x7b, 0x74, 0x8f, 0x19, 0xd9, 0x93, 0xd0, - 0x1f, 0xe9, 0x15, 0x1c, 0x7f, 0x63, 0xf5, 0x36, 0xac, 0x30, 0xe9, 0xab, 0x4c, 0xfa, 0xe6, 0x2c, - 0x27, 0x93, 0xcd, 0x68, 0xd4, 0x9b, 0x50, 0x3b, 0x35, 0x31, 0x32, 0x5e, 0x0a, 0x54, 0xab, 0xc4, - 0x8c, 0xac, 0x52, 0xa0, 0x24, 0x57, 0x3f, 0x86, 0x1a, 0xf6, 0xcc, 0x00, 0xbf, 0xf0, 0x09, 0x3b, - 0x3a, 0xad, 0x32, 0x8b, 0x6d, 0xb5, 0x2b, 0x0e, 0x24, 0x3d, 0x39, 0x7a, 0x55, 0x92, 0xd0, 0x95, - 0x76, 0x00, 0x9b, 0xd9, 0xb8, 0x89, 0xf4, 0xea, 0x41, 0x29, 0x16, 0xc6, 0x33, 0x6b, 0xbd, 0x9b, - 0xd4, 0x92, 0x98, 0x3c, 0x26, 0xd2, 0x7e, 0xaf, 0x80, 0xca, 0xf7, 0x3a, 0xa6, 0xde, 0x92, 0x09, - 0xd0, 0xce, 0xec, 0x53, 0x4e, 0x58, 0xd4, 0xeb, 0x00, 0xcc, 0xb3, 0x3c, 0x6e, 0x39, 0x86, 0x2d, - 0x33, 0xc8, 0xe1, 0x54, 0x9e, 0xe4, 0xd3, 0x79, 0x72, 0x0b, 0xea, 0x8e, 0x67, 0xb9, 0x63, 0x1b, - 0x19, 0x81, 0x19, 0xd2, 0x13, 0xbe, 0xc2, 0xd0, 0x35, 0x01, 0x3d, 0x62, 0x40, 0xed, 0x4f, 0x0a, - 0xac, 0x4f, 0xa9, 0x73, 0x49, 0xbb, 0xd4, 0x5d, 0x28, 0x30, 0x95, 0xe2, 0x93, 0x92, 0x50, 0xf3, - 0x9d, 0x39, 0x3a, 0x4e, 0x47, 0xc3, 0x74, 0x43, 0x64, 0xda, 0x91, 0x81, 0xce, 0x1d, 0x4c, 0xb0, - 0x50, 0x9e, 0xa7, 0xd0, 0x23, 0x8e, 0xea, 0x33, 0x8c, 0xf6, 0x33, 0xd8, 0xd8, 0x47, 0x2e, 0x9a, - 0x3d, 0x34, 0xcb, 0x7c, 0x76, 0x0d, 0xca, 0x21, 0xb2, 0xc6, 0x21, 0x76, 0x26, 0xf2, 0x00, 0x25, - 0x00, 0xad, 0x05, 0x9b, 0xd9, 0x2d, 0xb9, 0xdd, 0xda, 0xef, 0x14, 0x58, 0xe7, 0x28, 0xa6, 0x35, - 0x96, 0xb2, 0x3a, 0x50, 0x64, 0xaa, 0xf1, 0x1a, 0x3c, 0xcf, 0x3e, 0x81, 0x5f, 0x2e, 0x59, 0xdd, - 0x85, 0x06, 0x2d, 0xa9, 0x86, 0x33, 0x30, 0x68, 0x92, 0x3b, 0xde, 0x50, 0xc6, 0x85, 0x82, 0x0f, - 0x06, 0xc7, 0x1c, 0xa8, 0x6d, 0x42, 0x73, 0x5a, 0x0d, 0xa1, 0x5f, 0x24, 0xe1, 0xbc, 0xe4, 0xc4, - 0xfa, 0x7d, 0x0a, 0xf5, 0x74, 0x15, 0x46, 0x52, 0xcf, 0x05, 0x75, 0xb8, 0x96, 0xaa, 0xc3, 0x08, - 0xd3, 0x73, 0xc3, 0x8b, 0x4a, 0x10, 0x3a, 0x23, 0x33, 0x8c, 0x84, 0xde, 0x55, 0x06, 0x3c, 0xe2, - 0x30, 0x6d, 0x4b, 0xc6, 0x21, 0x16, 0x2d, 0x74, 0xfa, 0x43, 0x0e, 0xae, 0xf7, 0x47, 0x28, 0x1c, - 0x22, 0xcf, 0x8a, 0x74, 0xc4, 0xd3, 0xed, 0xc2, 0xd9, 0xdd, 0x4c, 0x27, 0x4e, 0x59, 0xa6, 0xc9, - 0x3d, 0xa8, 0x78, 0x28, 0xd1, 0x27, 0xbf, 0xac, 0xa9, 0x80, 0x87, 0xa4, 0x92, 0xea, 0x8f, 0xa1, - 0xe1, 0x0c, 0x3d, 0x5a, 0xee, 0x43, 0x14, 0xb8, 0x8e, 0x65, 0xe2, 0xd6, 0xca, 0x32, 0x47, 0xd4, - 0x39, 0xb5, 0x2e, 0x88, 0xd5, 0x7d, 0xd8, 0x38, 0x33, 0x1d, 0x12, 0x73, 0xc7, 0xcd, 0xb5, 0x10, - 0xa7, 0x35, 0x2b, 0x12, 0xfb, 0xe3, 0xd0, 0xa4, 0x6d, 0x56, 0x5f, 0xa7, 0xe4, 0x92, 0x5d, 0x36, - 0xdd, 0xbf, 0x2a, 0xb0, 0xbd, 0xc8, 0x23, 0xe2, 0x80, 0xbd, 0xbd, 0x4b, 0x1e, 0xc2, 0x5a, 0x10, - 0xfa, 0x23, 0x9f, 0x20, 0xfb, 0x62, 0x7e, 0x69, 0x48, 0x72, 0xe9, 0x9c, 0x5d, 0x28, 0xb2, 0x7e, - 0x2e, 0x7d, 0x92, 0xed, 0xf6, 0x02, 0xab, 0xf5, 0xe1, 0xca, 0x53, 0x44, 0x1e, 0x9b, 0xd6, 0xcb, - 0x71, 0x80, 0x2f, 0x1d, 0x43, 0x6d, 0x1f, 0xd4, 0xf4, 0x36, 0xc2, 0xf0, 0x2e, 0xac, 0x9e, 0x72, - 0x90, 0x48, 0xd1, 0x66, 0x37, 0x9e, 0xa8, 0x38, 0xed, 0x81, 0x37, 0xf0, 0x75, 0x49, 0xa4, 0x5d, - 0x85, 0xad, 0xa7, 0x88, 0xec, 0x21, 0xd7, 0xa5, 0x70, 0x5a, 0xf1, 0xa4, 0x4a, 0xda, 0x1d, 0x68, - 0xcd, 0xa2, 0x84, 0x98, 0x26, 0x14, 0x68, 0xb9, 0x94, 0x33, 0x13, 0x5f, 0x68, 0x1d, 0xa6, 0x92, - 0xe4, 0x48, 0x75, 0x5f, 0x0b, 0xb9, 0xae, 0xec, 0xbe, 0xf4, 0x5b, 0x7b, 0x02, 0xeb, 0x53, 0x94, - 0x71, 0x5d, 0x2c, 0x53, 0xb4, 0xe1, 0x78, 0x03, 0x5f, 0x14, 0x46, 0x35, 0xf1, 0x7e, 0x4c, 0x5e, - 0xb2, 0xc4, 0x17, 0x2d, 0x35, 0x62, 0x1f, 0x2c, 0x4e, 0x9b, 0xd4, 0xfe, 0x95, 0x12, 0x5b, 0x96, - 0xa0, 0x84, 0x98, 0x03, 0x58, 0x9d, 0x3e, 0xc7, 0xbd, 0x54, 0xbd, 0x59, 0xc0, 0xd4, 0x15, 0xeb, - 0xbe, 0x47, 0xc2, 0x48, 0x97, 0xfc, 0xed, 0x23, 0xa8, 0xa6, 0x11, 0xea, 0x1a, 0xe4, 0x5f, 0xa2, - 0x48, 0xd8, 0x4a, 0x3f, 0xd5, 0xdb, 0x50, 0x98, 0x98, 0xee, 0x18, 0x89, 0xd2, 0xdd, 0x9c, 0xb6, - 0x87, 0x8b, 0xd1, 0x39, 0xc9, 0x83, 0xdc, 0x7d, 0x45, 0xdb, 0x60, 0xae, 0x91, 0xa5, 0x33, 0xb6, - 0xe7, 0x00, 0x9a, 0xd3, 0x60, 0x61, 0xcb, 0xc7, 0x50, 0x96, 0x89, 0x22, 0xad, 0x99, 0xdb, 0x4b, - 0x12, 0x2a, 0xed, 0x0e, 0x0b, 0xd3, 0x5b, 0xd4, 0x7b, 0x11, 0xae, 0x77, 0x6f, 0xcf, 0xbf, 0xcd, - 0xc1, 0xda, 0x53, 0x44, 0xf8, 0xec, 0xf4, 0xee, 0x23, 0xee, 0x26, 0x14, 0xd9, 0x12, 0xb7, 0x72, - 0x2c, 0x0d, 0xc5, 0x8a, 0x76, 0x67, 0x74, 0xce, 0xbb, 0xb3, 0xc0, 0xe7, 0x19, 0xbe, 0x26, 0xa0, - 0x27, 0x9c, 0xec, 0x26, 0xc8, 0x76, 0x6d, 0x4c, 0x1c, 0x74, 0x86, 0x45, 0xaf, 0xa8, 0x0a, 0xe0, - 0x73, 0x0a, 0x53, 0x3b, 0xb0, 0xc6, 0xf6, 0x60, 0xe3, 0x01, 0x36, 0x7c, 0xcf, 0x8d, 0x58, 0xb5, - 0x2a, 0xe9, 0xbc, 0x25, 0xb0, 0x73, 0xf1, 0x53, 0xcf, 0x8d, 0x12, 0x4a, 0xec, 0x7c, 0x29, 0x29, - 0x8b, 0x29, 0xca, 0x63, 0x0a, 0xa6, 0x94, 0xda, 0x11, 0xab, 0x00, 0xd2, 0x0b, 0xc2, 0x99, 0x3f, - 0x84, 0xa2, 0x18, 0x36, 0xb9, 0x03, 0x6e, 0x76, 0x67, 0xaf, 0x3e, 0x9c, 0x65, 0x1f, 0x0d, 0x1c, - 0xcf, 0x61, 0xf5, 0x51, 0xb0, 0x68, 0x9f, 0x43, 0x83, 0xee, 0xf8, 0x7e, 0x66, 0x1e, 0xed, 0x01, - 0x8f, 0xd2, 0x54, 0x45, 0x8d, 0x27, 0x10, 0x65, 0xe9, 0x04, 0xa2, 0xdd, 0x66, 0x79, 0x7a, 0x1c, - 0x4e, 0x9e, 0x4f, 0x47, 0x79, 0x5e, 0x15, 0x38, 0x84, 0x8d, 0x0c, 0x6d, 0x7c, 0xad, 0xa8, 0xe2, - 0x70, 0x92, 0x8c, 0xdf, 0x71, 0x72, 0x89, 0x3b, 0x5e, 0x8a, 0x05, 0x70, 0xfc, 0xad, 0x7d, 0xce, - 0xf4, 0x16, 0x77, 0x87, 0x77, 0xcd, 0x2e, 0xed, 0x47, 0x2c, 0x4a, 0x72, 0x37, 0xa1, 0x59, 0x47, - 0xa4, 0xdc, 0xe2, 0x9b, 0x8e, 0xc0, 0x6b, 0xbf, 0x4c, 0xb1, 0x5f, 0xbe, 0xcc, 0x53, 0x28, 0xf5, - 0x95, 0x4c, 0x61, 0xbe, 0xd0, 0x1e, 0xb2, 0x23, 0x9c, 0x19, 0x15, 0xd4, 0xdb, 0xb0, 0xca, 0x85, - 0x27, 0x73, 0x54, 0x56, 0x3b, 0x49, 0xa0, 0xf5, 0x98, 0x7a, 0x99, 0x20, 0x2d, 0xab, 0x01, 0x8f, - 0x99, 0xc8, 0x6c, 0xa4, 0xbe, 0x0f, 0xa5, 0x4c, 0x94, 0xae, 0xc4, 0x51, 0x8a, 0x0b, 0xc0, 0xea, - 0x44, 0x04, 0xe8, 0xbf, 0x0a, 0x6c, 0x1d, 0x78, 0x0e, 0x4f, 0x2d, 0xd1, 0x37, 0x2f, 0xef, 0x1a, - 0x1d, 0xda, 0xa2, 0x53, 0x1b, 0xc8, 0x45, 0x16, 0x31, 0xa6, 0x02, 0xbd, 0xb4, 0x79, 0x6f, 0x09, - 0xc6, 0x3e, 0xe5, 0x4b, 0x21, 0x92, 0x71, 0x7f, 0x25, 0x3d, 0xee, 0xbf, 0x9f, 0xb9, 0xe5, 0x31, - 0xb4, 0x66, 0x8d, 0x8f, 0x8f, 0x97, 0x1c, 0x1e, 0x94, 0xa5, 0xc3, 0xc3, 0x57, 0x39, 0xf8, 0xe0, - 0xc8, 0x35, 0x3d, 0x0f, 0xd9, 0xff, 0xe7, 0x59, 0xf0, 0x01, 0xd4, 0xcc, 0x89, 0xef, 0x24, 0xd3, - 0xd2, 0xca, 0x32, 0xce, 0x2a, 0xa3, 0x95, 0xbc, 0xef, 0xc7, 0x9f, 0x7f, 0x51, 0xe0, 0xda, 0x7c, - 0x5f, 0x7c, 0x03, 0xa6, 0xc0, 0xdf, 0xc0, 0x55, 0x1d, 0x8d, 0xfc, 0x49, 0x7c, 0x49, 0xa2, 0xd3, - 0xc0, 0x45, 0xa2, 0x28, 0x0b, 0x69, 0x2e, 0x29, 0xa4, 0x0b, 0x2e, 0xa9, 0x53, 0x77, 0xa5, 0x95, - 0xec, 0x2d, 0xed, 0x1a, 0xb4, 0xe7, 0x29, 0x20, 0x6e, 0x1d, 0x5f, 0x2b, 0xb0, 0xc9, 0xd1, 0xcc, - 0xa5, 0x17, 0x55, 0xee, 0x0d, 0x97, 0x69, 0xa9, 0x7b, 0x7e, 0x9e, 0xee, 0x2b, 0x0b, 0x75, 0x2f, - 0x64, 0x75, 0xbf, 0x0a, 0x5b, 0x33, 0xca, 0x09, 0xc5, 0x9f, 0xc0, 0x86, 0x4c, 0x86, 0xe9, 0x46, - 0xf0, 0x51, 0xa6, 0x72, 0x2f, 0x08, 0xa8, 0x2c, 0xdf, 0xbf, 0xa6, 0xf6, 0x4f, 0xef, 0x73, 0xe9, - 0xac, 0xea, 0xc1, 0xea, 0x85, 0x92, 0x49, 0x52, 0x69, 0x3a, 0xdc, 0xe0, 0xf0, 0xfe, 0x39, 0x41, - 0xa1, 0x67, 0xba, 0x6e, 0x7c, 0xcf, 0x41, 0xf6, 0x25, 0x0d, 0xfa, 0xbb, 0x02, 0xda, 0xb2, 0x4d, - 0x2f, 0x6d, 0xdd, 0x65, 0x0b, 0xc8, 0x3d, 0xa8, 0xf8, 0xee, 0x05, 0xcb, 0x07, 0xf8, 0xae, 0x3c, - 0x61, 0xda, 0x21, 0x94, 0x9e, 0xa5, 0x0e, 0xc3, 0xcc, 0xcb, 0x5e, 0x37, 0x65, 0x41, 0x2e, 0x7b, - 0x87, 0x98, 0x33, 0x94, 0x7e, 0x0a, 0xdb, 0x4f, 0x1c, 0xcf, 0x7e, 0xe4, 0xba, 0xfc, 0x35, 0xe0, - 0xc0, 0x7b, 0x9b, 0xd1, 0xf8, 0x6f, 0x0a, 0x7c, 0x7b, 0x21, 0xbb, 0xf0, 0xe9, 0x61, 0xe6, 0x79, - 0xe3, 0x5e, 0x6a, 0x78, 0x7a, 0x03, 0x2f, 0x1f, 0xae, 0xc4, 0xad, 0x43, 0xec, 0xd2, 0x7e, 0x06, - 0x95, 0x14, 0x78, 0xce, 0x9d, 0x63, 0x77, 0xfa, 0xce, 0x31, 0x67, 0x58, 0x4b, 0xee, 0x1b, 0xbf, - 0x82, 0x02, 0x83, 0xbd, 0xa9, 0xe8, 0xa4, 0x4e, 0x34, 0xf7, 0xf3, 0x2d, 0x99, 0x0d, 0x3c, 0xe2, - 0x8d, 0xc4, 0xc9, 0x53, 0x03, 0xe1, 0x57, 0x0a, 0xb4, 0x58, 0x28, 0x7f, 0x62, 0x12, 0x14, 0x3a, - 0xa6, 0xeb, 0x7c, 0x89, 0x8e, 0x11, 0x21, 0x8e, 0x37, 0xc4, 0xea, 0x0d, 0x3a, 0x9d, 0x85, 0x43, - 0x24, 0x7a, 0xb7, 0x90, 0x5b, 0xe1, 0x30, 0xc6, 0xa5, 0x7e, 0x0f, 0xae, 0x60, 0x7f, 0x1c, 0x5a, - 0xc8, 0x40, 0xe7, 0x41, 0x88, 0x30, 0x76, 0x7c, 0x4f, 0xe8, 0xb1, 0xc6, 0x11, 0xfd, 0x18, 0x4e, - 0xeb, 0x8f, 0xc5, 0xde, 0xdb, 0x0c, 0xdb, 0x96, 0x65, 0xa6, 0xcc, 0x21, 0xfb, 0xb6, 0xab, 0xfd, - 0x2b, 0x07, 0xeb, 0xf3, 0xd4, 0x68, 0x43, 0xe9, 0xcc, 0x0f, 0x5f, 0x0e, 0x5c, 0xff, 0x4c, 0x9a, - 0x2e, 0xd7, 0xea, 0x87, 0xd0, 0x10, 0xf2, 0xa7, 0xb2, 0xaa, 0xac, 0xd7, 0x39, 0x38, 0xce, 0xc5, - 0x0f, 0xa1, 0x21, 0x6c, 0x89, 0x09, 0xb9, 0x02, 0x75, 0x0e, 0x7e, 0x96, 0x3c, 0xe6, 0x35, 0x30, - 0xf1, 0x03, 0x83, 0x3f, 0x81, 0x5b, 0x7e, 0x10, 0xc9, 0x57, 0x2a, 0x0a, 0x7e, 0x44, 0xa1, 0x7b, - 0x7e, 0x10, 0xa9, 0x9f, 0x89, 0x57, 0x27, 0x03, 0x0b, 0x3d, 0x5b, 0x05, 0x96, 0x3e, 0x37, 0x53, - 0xe1, 0x5c, 0xe4, 0x59, 0xf1, 0x06, 0x15, 0x5b, 0x28, 0x2b, 0x6f, 0x31, 0x55, 0x79, 0x6f, 0xc4, - 0xa3, 0x31, 0x89, 0x02, 0x84, 0xd9, 0x1b, 0x70, 0x59, 0xce, 0xc0, 0x27, 0x14, 0xa4, 0x7e, 0x17, - 0xd6, 0x90, 0xa8, 0x16, 0x86, 0xe5, 0x8e, 0x31, 0x41, 0xa1, 0x78, 0xf5, 0x6d, 0x48, 0xf8, 0x1e, - 0x07, 0x3f, 0xbe, 0xff, 0x8f, 0xd7, 0xdb, 0xca, 0x3f, 0x5f, 0x6f, 0x2b, 0xff, 0x7e, 0xbd, 0xad, - 0xfc, 0xf1, 0x3f, 0xdb, 0xdf, 0xfa, 0xc5, 0xee, 0xc4, 0x21, 0x08, 0xe3, 0xae, 0xe3, 0xf7, 0xf8, - 0x57, 0x6f, 0xe8, 0xf7, 0x26, 0xa4, 0xc7, 0xfe, 0x93, 0xe9, 0xc5, 0x36, 0x9c, 0x16, 0x19, 0xe0, - 0x93, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xf2, 0x55, 0x21, 0xc8, 0x27, 0x1a, 0x00, 0x00, + // 2067 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xcb, 0x6f, 0x1c, 0x49, + 0x19, 0xa7, 0x67, 0xc6, 0xe3, 0x99, 0x6f, 0x1e, 0x76, 0xda, 0x63, 0xbb, 0xe3, 0x4d, 0x4c, 0xb6, + 0x43, 0x82, 0x09, 0xec, 0x4c, 0xd6, 0x2b, 0xa2, 0x28, 0x2c, 0x28, 0x89, 0x3d, 0x8e, 0xbc, 0xbb, + 0x18, 0xd3, 0xb6, 0x82, 0x04, 0x12, 0xad, 0x72, 0x77, 0xcd, 0xa4, 0xe5, 0x9e, 0xee, 0xd9, 0xae, + 0x9a, 0xb1, 0x67, 0x39, 0x70, 0x81, 0xc3, 0x4a, 0x48, 0x5c, 0x91, 0xf6, 0xc2, 0x89, 0x3f, 0x61, + 0x0f, 0x08, 0x71, 0x44, 0x1c, 0xb9, 0x72, 0x43, 0xe1, 0xcf, 0xe0, 0x82, 0xea, 0x39, 0x3d, 0x3d, + 0x8f, 0x75, 0xbc, 0x91, 0x10, 0x27, 0x77, 0x7d, 0x8f, 0xfa, 0x7e, 0xf5, 0xbd, 0xea, 0xab, 0x31, + 0xac, 0x0c, 0xa9, 0x47, 0x43, 0x1f, 0x51, 0xd4, 0xec, 0x27, 0x31, 0x8d, 0xcd, 0xb2, 0x26, 0x6c, + 0xd5, 0xc2, 0xb8, 0x3b, 0xa0, 0x41, 0x28, 0x38, 0x5b, 0xf5, 0xde, 0x88, 0x7c, 0x1a, 0x7a, 0x54, + 0xad, 0x37, 0x29, 0x3a, 0x0b, 0x31, 0xed, 0xa1, 0x08, 0x75, 0x71, 0x32, 0xde, 0x62, 0xab, 0x4e, + 0xe3, 0x7e, 0x9c, 0x5a, 0xd7, 0x86, 0xc4, 0x7b, 0x85, 0x7b, 0x6a, 0x59, 0x1d, 0x52, 0x1a, 0xf4, + 0xb0, 0x58, 0xd9, 0x3f, 0x83, 0xad, 0xf6, 0x25, 0xf6, 0x06, 0x14, 0xbf, 0x64, 0x86, 0xf7, 0xe2, + 0x5e, 0x0f, 0x45, 0xbe, 0x83, 0x3f, 0x1d, 0x60, 0x42, 0x4d, 0x13, 0x0a, 0x28, 0xe9, 0x12, 0xcb, + 0xb8, 0x93, 0xdf, 0x29, 0x3b, 0xfc, 0xdb, 0xbc, 0x07, 0x75, 0xe4, 0xd1, 0x20, 0x8e, 0x5c, 0xb6, + 0x4d, 0x3c, 0xa0, 0x56, 0xee, 0x8e, 0xb1, 0x93, 0x77, 0x6a, 0x82, 0x7a, 0x2a, 0x88, 0xf6, 0x1e, + 0xbc, 0x33, 0x73, 0x63, 0xd2, 0x8f, 0x23, 0x82, 0xcd, 0x6f, 0xc1, 0x12, 0x1e, 0xe2, 0x88, 0x5a, + 0xc6, 0x1d, 0x63, 0xa7, 0xb2, 0x5b, 0x6f, 0xaa, 0xc3, 0xb6, 0x19, 0xd5, 0x11, 0x4c, 0xfb, 0x73, + 0x03, 0xac, 0x53, 0x76, 0xcc, 0x1f, 0x23, 0x8a, 0x93, 0x00, 0x85, 0xc1, 0x67, 0xf8, 0x04, 0x53, + 0x1a, 0x44, 0x5d, 0x62, 0xbe, 0x0b, 0x55, 0x8a, 0x92, 0x2e, 0xa6, 0x2e, 0xf7, 0x04, 0xdf, 0xa9, + 0xec, 0x54, 0x04, 0x8d, 0x6b, 0x99, 0xdf, 0x85, 0x1b, 0x24, 0x1e, 0x24, 0x1e, 0x76, 0xf1, 0x65, + 0x3f, 0xc1, 0x84, 0x04, 0x71, 0xc4, 0xe1, 0x96, 0x9d, 0x55, 0xc1, 0x68, 0x6b, 0xba, 0x79, 0x1b, + 0xc0, 0x4b, 0x30, 0xa2, 0xd8, 0xf5, 0xfd, 0xd0, 0xca, 0x73, 0xa9, 0xb2, 0xa0, 0xec, 0xfb, 0xa1, + 0xfd, 0xcf, 0x1c, 0xac, 0xcd, 0x82, 0xb1, 0x05, 0xa5, 0x8b, 0x38, 0x39, 0xef, 0x84, 0xf1, 0x85, + 0x84, 0xa0, 0xd7, 0xe6, 0xb7, 0x61, 0x45, 0xda, 0x3f, 0xc7, 0x23, 0xd2, 0x47, 0x1e, 0x96, 0xd6, + 0xeb, 0x82, 0xfc, 0xb1, 0xa4, 0x32, 0x41, 0x79, 0x16, 0x2d, 0x28, 0x00, 0xd4, 0x05, 0x59, 0x0b, + 0xde, 0x87, 0x15, 0x42, 0xe3, 0xbe, 0x8b, 0x3a, 0x14, 0x27, 0xae, 0x17, 0xf7, 0x47, 0x56, 0xe1, + 0x8e, 0xb1, 0x53, 0x72, 0x6a, 0x8c, 0xfc, 0x8c, 0x51, 0xf7, 0xe2, 0xfe, 0xc8, 0xfc, 0x08, 0xea, + 0xdc, 0x2b, 0x2e, 0x91, 0x38, 0xad, 0xa5, 0x3b, 0xf9, 0x9d, 0xca, 0xee, 0xdd, 0xe6, 0x38, 0xe3, + 0xe6, 0x79, 0xd6, 0xa9, 0x71, 0x55, 0x7d, 0x42, 0x13, 0x0a, 0x1e, 0x0e, 0x43, 0xab, 0xc8, 0x11, + 0xf1, 0x6f, 0xe1, 0x7c, 0x96, 0x7f, 0x2e, 0x1d, 0xf5, 0x31, 0xb1, 0x96, 0x95, 0xf3, 0x19, 0xed, + 0x94, 0x91, 0xcc, 0xef, 0xc0, 0x2a, 0xbe, 0xa4, 0x38, 0x89, 0x50, 0xe8, 0x7a, 0xe1, 0x80, 0x50, + 0x9c, 0x58, 0x25, 0x2e, 0xb6, 0xa2, 0xe8, 0x7b, 0x82, 0x6c, 0x1f, 0x41, 0x49, 0x9f, 0xd0, 0x84, + 0x42, 0x84, 0x7a, 0x2a, 0x9c, 0xfc, 0xdb, 0x6c, 0x42, 0x69, 0xc2, 0x81, 0x95, 0x5d, 0xb3, 0xa9, + 0xb3, 0x5c, 0x69, 0x3a, 0x5a, 0xc6, 0xfe, 0x25, 0x2c, 0x9d, 0xbc, 0x42, 0x89, 0xcf, 0x82, 0xa3, + 0x15, 0x65, 0x70, 0xce, 0xb3, 0x86, 0x72, 0x29, 0x43, 0xf7, 0x60, 0x89, 0x30, 0x45, 0xee, 0xfd, + 0xca, 0xee, 0xca, 0xd8, 0x0a, 0xdf, 0xcf, 0x11, 0x5c, 0xfb, 0x0b, 0x03, 0x36, 0xf7, 0x5e, 0xa1, + 0xa8, 0x8b, 0x4f, 0xf5, 0x81, 0x55, 0xcd, 0x3c, 0xd6, 0x9e, 0x41, 0x61, 0x80, 0x88, 0x4c, 0xf0, + 0xf5, 0xf1, 0x4e, 0x42, 0xe5, 0x19, 0x63, 0x2a, 0x87, 0xf1, 0x85, 0xf9, 0x1e, 0x2c, 0xfb, 0x67, + 0xdc, 0x9f, 0x1c, 0x53, 0x7d, 0xb7, 0x91, 0x55, 0xe2, 0x76, 0x8a, 0xfe, 0x19, 0xfb, 0x6b, 0x6e, + 0xc2, 0xb2, 0x9f, 0x8c, 0xdc, 0x64, 0x10, 0x71, 0xb4, 0x25, 0xa7, 0xe8, 0x27, 0x23, 0x67, 0x10, + 0xd9, 0x7f, 0x32, 0xc0, 0x9a, 0x46, 0x27, 0x0b, 0xef, 0xfb, 0x50, 0x3b, 0xc3, 0x9d, 0x38, 0xc1, + 0xa2, 0x6a, 0x54, 0x01, 0xae, 0x66, 0x4d, 0x39, 0x55, 0x21, 0x26, 0x56, 0xe6, 0x07, 0x50, 0x15, + 0x29, 0x27, 0xb5, 0x72, 0x73, 0xb4, 0x2a, 0x5c, 0x4a, 0x2a, 0x6d, 0x43, 0xe5, 0x02, 0x11, 0x77, + 0x12, 0x65, 0xf9, 0x02, 0x91, 0x7d, 0x01, 0xf4, 0xcb, 0x3c, 0xac, 0xef, 0xf1, 0x02, 0xd3, 0x31, + 0x1c, 0x37, 0x9e, 0xa9, 0x24, 0x68, 0xc0, 0x52, 0x27, 0x4e, 0x64, 0x06, 0x94, 0x1c, 0xb1, 0x30, + 0x5b, 0xd0, 0x40, 0x61, 0x18, 0x5f, 0xb8, 0xb8, 0xd7, 0xa7, 0x23, 0x77, 0xe8, 0x8a, 0x66, 0x27, + 0x8d, 0xdd, 0xe0, 0xbc, 0x36, 0x63, 0xbd, 0x3c, 0xe1, 0x0c, 0xf3, 0x21, 0x34, 0x78, 0x10, 0x83, + 0xa8, 0xeb, 0x7a, 0x71, 0x38, 0xe8, 0x45, 0x2e, 0x37, 0x55, 0xe0, 0xa6, 0x4c, 0xc5, 0xdb, 0xe3, + 0xac, 0x23, 0x66, 0xf8, 0xa3, 0x69, 0x0d, 0x1e, 0xa4, 0x25, 0x1e, 0x24, 0x6b, 0x3a, 0x13, 0x0f, + 0x7d, 0xee, 0xf2, 0xcc, 0x5e, 0x3c, 0x68, 0x4f, 0xa1, 0x4a, 0x70, 0x32, 0xc4, 0xbe, 0xdb, 0x49, + 0xe2, 0x1e, 0xb1, 0x8a, 0xbc, 0x2a, 0x6f, 0x4f, 0xef, 0xd1, 0x3c, 0xe1, 0x62, 0x07, 0x49, 0xdc, + 0x73, 0x2a, 0x44, 0x7f, 0x13, 0xf3, 0x01, 0x14, 0xb8, 0xf5, 0x65, 0x6e, 0x7d, 0x63, 0x5a, 0x93, + 0xdb, 0xe6, 0x32, 0xe6, 0x5d, 0xa8, 0x9d, 0x21, 0x92, 0xea, 0x3e, 0xa2, 0xfe, 0xaa, 0x8c, 0xa8, + 0x0b, 0xee, 0x7d, 0xa8, 0x91, 0x08, 0xf5, 0xc9, 0xab, 0x98, 0xf2, 0x96, 0x6e, 0x95, 0x79, 0x6c, + 0xab, 0x4d, 0x79, 0x51, 0xb0, 0x8e, 0xee, 0x54, 0x95, 0x08, 0x5b, 0xd9, 0x87, 0xb0, 0x91, 0x8d, + 0x9b, 0x4c, 0xaf, 0x56, 0xa6, 0xe0, 0x2a, 0xbb, 0x6b, 0xa9, 0x8e, 0x33, 0xa3, 0x54, 0x7f, 0x67, + 0x80, 0x29, 0xf6, 0x12, 0x15, 0x26, 0x13, 0x60, 0x51, 0xe1, 0xde, 0x06, 0xe0, 0x9e, 0x75, 0x53, + 0xe5, 0x5b, 0xe6, 0x94, 0xa3, 0x89, 0x3c, 0xc9, 0xa7, 0xf3, 0xe4, 0x1e, 0xd4, 0x83, 0xc8, 0x0b, + 0x07, 0x3e, 0x76, 0xfb, 0x28, 0x61, 0x37, 0x8f, 0xec, 0x9b, 0x92, 0x7a, 0xcc, 0x89, 0xf6, 0x1f, + 0x0d, 0x58, 0x9b, 0x80, 0x73, 0xcd, 0x73, 0x99, 0xf7, 0x55, 0x27, 0x51, 0x95, 0x32, 0x96, 0x4e, + 0xb7, 0x12, 0x9d, 0x8e, 0x2e, 0x0a, 0x13, 0x8c, 0xfc, 0x91, 0x8b, 0x2f, 0x03, 0x42, 0x89, 0x04, + 0x2f, 0x52, 0xe8, 0x99, 0x60, 0xb5, 0x39, 0xc7, 0xfe, 0x29, 0xac, 0xef, 0xe3, 0x10, 0x4f, 0x17, + 0xcd, 0x22, 0x9f, 0xdd, 0x82, 0x72, 0x82, 0xbd, 0x41, 0x42, 0x82, 0xa1, 0x2a, 0xa0, 0x31, 0xc1, + 0xb6, 0x60, 0x23, 0xbb, 0xa5, 0x38, 0xb7, 0xfd, 0x5b, 0x03, 0xd6, 0x04, 0x8b, 0xa3, 0x26, 0xca, + 0xd6, 0x0e, 0x14, 0x39, 0x34, 0x31, 0x1b, 0xcc, 0x3a, 0x9f, 0xe4, 0x2f, 0xb6, 0xcc, 0xee, 0x33, + 0x76, 0xd5, 0xbb, 0x41, 0xc7, 0x65, 0x49, 0x1e, 0x44, 0x5d, 0x15, 0x17, 0x46, 0x3e, 0xec, 0x9c, + 0x08, 0xa2, 0xbd, 0x01, 0x8d, 0x49, 0x18, 0x12, 0xdf, 0x48, 0xd1, 0x45, 0xcb, 0xd1, 0xf8, 0x3e, + 0x94, 0xf7, 0x9f, 0xec, 0xc2, 0x58, 0xe1, 0x9c, 0xd3, 0x87, 0x6b, 0xa9, 0x3e, 0x8c, 0x09, 0xab, + 0x1b, 0xd1, 0x54, 0xfa, 0x49, 0xd0, 0x43, 0xc9, 0x48, 0xe2, 0xae, 0x72, 0xe2, 0xb1, 0xa0, 0xd9, + 0x9b, 0x2a, 0x0e, 0xda, 0xb4, 0xc4, 0xf4, 0xfb, 0x1c, 0xdc, 0x6e, 0xf7, 0x70, 0xd2, 0xc5, 0x91, + 0x37, 0x72, 0xb0, 0x48, 0xb7, 0x2b, 0x67, 0x77, 0x23, 0x9d, 0x38, 0x65, 0x95, 0x26, 0x8f, 0xa0, + 0x12, 0xe1, 0x31, 0x9e, 0xfc, 0xa2, 0x4b, 0x05, 0x22, 0xac, 0x40, 0x9a, 0x3f, 0x82, 0x95, 0xa0, + 0x1b, 0xb1, 0x76, 0x9f, 0xe0, 0x7e, 0x18, 0x78, 0x88, 0x58, 0x85, 0x45, 0x8e, 0xa8, 0x0b, 0x69, + 0x47, 0x0a, 0x9b, 0xfb, 0xb0, 0x7e, 0x81, 0x02, 0xaa, 0xb5, 0xf5, 0xd0, 0xb7, 0xa4, 0xd3, 0x9a, + 0x37, 0x89, 0xfd, 0x41, 0x82, 0xd8, 0xf8, 0xe7, 0xac, 0x31, 0x71, 0xa5, 0xae, 0x86, 0xc1, 0xbf, + 0x18, 0xb0, 0x3d, 0xcf, 0x23, 0xb2, 0xc0, 0xde, 0xdc, 0x25, 0x4f, 0x61, 0xb5, 0x9f, 0xc4, 0xbd, + 0x98, 0x62, 0xff, 0x6a, 0x7e, 0x59, 0x51, 0xe2, 0xca, 0x39, 0xf7, 0xa1, 0xc8, 0xe7, 0x4c, 0xe5, + 0x93, 0xec, 0x14, 0x2a, 0xb9, 0xf6, 0x87, 0xb0, 0x7d, 0x10, 0x44, 0xfe, 0xb3, 0x30, 0x14, 0xd9, + 0x77, 0x18, 0xbd, 0x41, 0xe9, 0xd9, 0x7f, 0x35, 0xe0, 0x9b, 0x73, 0xd5, 0xe5, 0xe9, 0x8f, 0x32, + 0xe5, 0xf4, 0x28, 0x55, 0x4e, 0x5f, 0xa1, 0x2b, 0xca, 0x8d, 0xb4, 0x23, 0x9a, 0x8c, 0x54, 0xd1, + 0x6d, 0x7d, 0x0c, 0x95, 0x14, 0xd9, 0x5c, 0x85, 0xfc, 0x39, 0x1e, 0x49, 0x64, 0xec, 0x93, 0xb5, + 0xa7, 0x21, 0x0a, 0x07, 0x78, 0x7e, 0x7b, 0xe2, 0xec, 0x27, 0xb9, 0xc7, 0x86, 0xdd, 0x86, 0x1b, + 0x2f, 0x30, 0x7d, 0x8e, 0xbc, 0xf3, 0x41, 0x9f, 0x5c, 0x3b, 0x85, 0xed, 0x7d, 0x30, 0xd3, 0xdb, + 0xc8, 0x93, 0x37, 0x61, 0xf9, 0x4c, 0x90, 0xe4, 0xd1, 0x1b, 0x4d, 0xfd, 0xd0, 0x11, 0xb2, 0x87, + 0x51, 0x27, 0x76, 0x94, 0x90, 0x7d, 0x13, 0x36, 0x5f, 0x60, 0xba, 0x87, 0xc3, 0x90, 0xd1, 0x59, + 0xc3, 0x57, 0x90, 0xec, 0x87, 0x60, 0x4d, 0xb3, 0xa4, 0x99, 0x06, 0x2c, 0xb1, 0xdb, 0x42, 0x3d, + 0x65, 0xc4, 0xc2, 0xde, 0xe1, 0x90, 0x94, 0x46, 0x6a, 0xf8, 0xe0, 0xf3, 0xae, 0x31, 0x9e, 0x77, + 0xed, 0x03, 0x58, 0x9b, 0x90, 0xd4, 0xd7, 0x42, 0x99, 0xb1, 0xdd, 0x20, 0xea, 0xc4, 0xf2, 0x5e, + 0x48, 0x4d, 0xa6, 0x5a, 0xbc, 0xe4, 0xc9, 0x2f, 0xd6, 0x69, 0xe5, 0x3e, 0x44, 0x36, 0x1b, 0x85, + 0xfe, 0x4b, 0x43, 0x9f, 0x6c, 0xcc, 0x92, 0x66, 0x0e, 0x61, 0x79, 0xb2, 0x8d, 0xb5, 0x52, 0xf1, + 0x9a, 0xa3, 0xd4, 0x94, 0x6b, 0x91, 0x18, 0x4a, 0x7f, 0xeb, 0x18, 0xaa, 0x69, 0xc6, 0x8c, 0xd4, + 0x78, 0x30, 0x99, 0x1a, 0x8d, 0xc9, 0xf3, 0x08, 0x33, 0xe9, 0xf4, 0x58, 0xe7, 0xae, 0x51, 0x69, + 0xa9, 0xcf, 0x73, 0x08, 0x8d, 0x49, 0xb2, 0x3c, 0xcb, 0xfb, 0x50, 0x56, 0x89, 0xa2, 0x4e, 0x33, + 0xf3, 0x2a, 0x1d, 0x4b, 0xd9, 0x0f, 0x79, 0x98, 0xde, 0xa4, 0xe6, 0x0e, 0x26, 0x30, 0x5d, 0x7f, + 0x3a, 0xf9, 0x4d, 0x0e, 0x56, 0x5f, 0x60, 0x2a, 0x46, 0xc7, 0xaf, 0x3f, 0xe1, 0x6f, 0x40, 0x91, + 0x2f, 0x89, 0x95, 0xe3, 0x69, 0x28, 0x57, 0x6c, 0x38, 0xc1, 0x97, 0x62, 0x38, 0x91, 0xfc, 0x3c, + 0xe7, 0xd7, 0x24, 0xf5, 0x54, 0x88, 0xdd, 0x05, 0x35, 0xad, 0xb8, 0xc3, 0x00, 0x5f, 0x10, 0x79, + 0x55, 0x56, 0x25, 0xf1, 0x25, 0xa3, 0x99, 0x3b, 0xb0, 0x2a, 0x5e, 0x7e, 0x3c, 0xc5, 0xdd, 0x38, + 0x0a, 0x47, 0xbc, 0x59, 0x97, 0x1c, 0x71, 0x23, 0xf2, 0xba, 0xf8, 0x49, 0x14, 0x8e, 0xc6, 0x92, + 0x24, 0xf8, 0x4c, 0x49, 0x16, 0x53, 0x92, 0x27, 0x8c, 0xcc, 0x24, 0xed, 0x63, 0xde, 0x01, 0x94, + 0x17, 0xa4, 0x33, 0x7f, 0x00, 0x45, 0x39, 0x6b, 0x0b, 0x07, 0xdc, 0x6d, 0x4e, 0xff, 0x22, 0x21, + 0x54, 0xf6, 0x71, 0x27, 0x88, 0x02, 0x7e, 0x3d, 0x48, 0x15, 0xfb, 0x13, 0x58, 0x61, 0x3b, 0xbe, + 0x9d, 0x91, 0xcf, 0x7e, 0x22, 0xa2, 0x34, 0x71, 0xa1, 0xe8, 0x01, 0xcc, 0x58, 0x38, 0x80, 0xd9, + 0x0f, 0x78, 0x9e, 0x9e, 0x24, 0xc3, 0x97, 0x93, 0x51, 0x9e, 0xd5, 0x05, 0x8e, 0x60, 0x3d, 0x23, + 0xab, 0x5f, 0x55, 0x55, 0x92, 0x0c, 0xc7, 0xaf, 0x0f, 0x9d, 0x5c, 0xf2, 0xa7, 0x97, 0x94, 0x0a, + 0x10, 0xfd, 0x6d, 0x7f, 0xc2, 0x71, 0xcb, 0xa7, 0xd3, 0xd7, 0xcd, 0x2e, 0xfb, 0x87, 0x3c, 0x4a, + 0x6a, 0x37, 0x89, 0x6c, 0x47, 0xa6, 0xdc, 0xfc, 0x87, 0x9e, 0xe4, 0xdb, 0xbf, 0x48, 0xa9, 0x5f, + 0xbf, 0xcd, 0x33, 0x2a, 0xf3, 0x95, 0x4a, 0x61, 0xb1, 0xb0, 0x9f, 0xf2, 0x12, 0xce, 0x4c, 0x4a, + 0xe6, 0x03, 0x58, 0x16, 0xc6, 0xc7, 0x63, 0x64, 0x16, 0x9d, 0x12, 0xb0, 0x5b, 0x1c, 0x5e, 0x26, + 0x48, 0x8b, 0x7a, 0xc0, 0x73, 0x6e, 0x32, 0x1b, 0xa9, 0xef, 0x41, 0x29, 0x13, 0xa5, 0x1b, 0x3a, + 0x4a, 0xba, 0x01, 0x2c, 0x0f, 0x65, 0x80, 0xfe, 0x63, 0xc0, 0xe6, 0x61, 0x14, 0x88, 0xd4, 0x92, + 0x63, 0xc3, 0xf5, 0x5d, 0xe3, 0xc0, 0x96, 0x1c, 0x54, 0x5c, 0x1c, 0x62, 0x4f, 0xfe, 0x70, 0xa5, + 0x02, 0xbd, 0x70, 0x76, 0xd9, 0x94, 0x8a, 0x6d, 0xa6, 0x97, 0x62, 0x8c, 0x5f, 0x3b, 0x85, 0xf4, + 0x6b, 0xe7, 0xed, 0x8c, 0x6d, 0xcf, 0xc1, 0x9a, 0x3e, 0xbc, 0x2e, 0x2f, 0x35, 0x3b, 0x19, 0x0b, + 0x67, 0xa7, 0xcf, 0x73, 0xf0, 0xce, 0x71, 0x88, 0xa2, 0x08, 0xfb, 0xff, 0xe3, 0x51, 0xf8, 0x09, + 0xd4, 0xd0, 0x30, 0x0e, 0xc6, 0xc3, 0x62, 0x61, 0x91, 0x66, 0x95, 0xcb, 0x2a, 0xdd, 0xb7, 0xe3, + 0xcf, 0x3f, 0x1b, 0x70, 0x6b, 0xb6, 0x2f, 0xfe, 0x0f, 0x86, 0xe0, 0x5f, 0xc3, 0x4d, 0x07, 0xf7, + 0xe2, 0xa1, 0x7e, 0x23, 0xb2, 0x69, 0xe0, 0x2a, 0x51, 0x54, 0x8d, 0x34, 0x97, 0xfa, 0xf9, 0x70, + 0xf6, 0x1b, 0x7d, 0xe2, 0xa9, 0x58, 0xc8, 0x3e, 0x52, 0x6f, 0xc1, 0xd6, 0x2c, 0x00, 0xf2, 0xd1, + 0xf5, 0x85, 0x01, 0x1b, 0x82, 0xcd, 0x5d, 0x7a, 0x55, 0x70, 0x5f, 0xf1, 0x5b, 0x82, 0xc2, 0x9e, + 0x9f, 0x85, 0xbd, 0x30, 0x17, 0xfb, 0x52, 0x16, 0xfb, 0x4d, 0xd8, 0x9c, 0x02, 0x27, 0x81, 0x1f, + 0xc0, 0xba, 0x4a, 0x86, 0xc9, 0x8b, 0xe0, 0xbd, 0x4c, 0xe7, 0x9e, 0x13, 0x50, 0xd5, 0xbe, 0x7f, + 0xc5, 0xce, 0x3f, 0xb9, 0xcf, 0xb5, 0xb3, 0xaa, 0x05, 0xcb, 0x57, 0x4a, 0x26, 0x25, 0x65, 0x3b, + 0xf0, 0xae, 0xa0, 0xb7, 0xe5, 0x2f, 0xbb, 0xa1, 0x7e, 0xe6, 0x61, 0xff, 0x9a, 0x07, 0xfa, 0x9b, + 0x01, 0xf6, 0xa2, 0x4d, 0xaf, 0x7d, 0xba, 0xeb, 0x36, 0x90, 0x47, 0x50, 0x89, 0xc3, 0x2b, 0xb6, + 0x0f, 0x88, 0x43, 0x55, 0x61, 0xcf, 0x1f, 0xff, 0xfd, 0xf5, 0xb6, 0xf1, 0x8f, 0xd7, 0xdb, 0xc6, + 0xbf, 0x5e, 0x6f, 0x1b, 0x7f, 0xf8, 0xf7, 0xf6, 0x37, 0x7e, 0x7e, 0x7f, 0x18, 0x50, 0x4c, 0x48, + 0x33, 0x88, 0x5b, 0xe2, 0xab, 0xd5, 0x8d, 0x5b, 0x43, 0xda, 0xe2, 0xff, 0x93, 0x69, 0xe9, 0x41, + 0xe5, 0xac, 0xc8, 0x09, 0x1f, 0xfc, 0x37, 0x00, 0x00, 0xff, 0xff, 0xec, 0x14, 0x9e, 0x42, 0x27, + 0x1a, 0x00, 0x00, } func (m *ExecuteVtctlCommandRequest) Marshal() (dAtA []byte, err error) { @@ -3677,6 +3678,246 @@ func (m *ExecuteVtctlCommandResponse) MarshalToSizedBuffer(dAtA []byte) (int, er return len(dAtA) - i, nil } +func (m *TableMaterializeSettings) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TableMaterializeSettings) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TableMaterializeSettings) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.CreateDdl) > 0 { + i -= len(m.CreateDdl) + copy(dAtA[i:], m.CreateDdl) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.CreateDdl))) + i-- + dAtA[i] = 0x1a + } + if len(m.SourceExpression) > 0 { + i -= len(m.SourceExpression) + copy(dAtA[i:], m.SourceExpression) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.SourceExpression))) + i-- + dAtA[i] = 0x12 + } + if len(m.TargetTable) > 0 { + i -= len(m.TargetTable) + copy(dAtA[i:], m.TargetTable) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.TargetTable))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MaterializeSettings) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MaterializeSettings) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MaterializeSettings) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.ExternalCluster) > 0 { + i -= len(m.ExternalCluster) + copy(dAtA[i:], m.ExternalCluster) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.ExternalCluster))) + i-- + dAtA[i] = 0x42 + } + if len(m.TabletTypes) > 0 { + i -= len(m.TabletTypes) + copy(dAtA[i:], m.TabletTypes) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.TabletTypes))) + i-- + dAtA[i] = 0x3a + } + if len(m.Cell) > 0 { + i -= len(m.Cell) + copy(dAtA[i:], m.Cell) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.Cell))) + i-- + dAtA[i] = 0x32 + } + if len(m.TableSettings) > 0 { + for iNdEx := len(m.TableSettings) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TableSettings[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVtctldata(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + } + if m.StopAfterCopy { + i-- + if m.StopAfterCopy { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + } + if len(m.TargetKeyspace) > 0 { + i -= len(m.TargetKeyspace) + copy(dAtA[i:], m.TargetKeyspace) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.TargetKeyspace))) + i-- + dAtA[i] = 0x1a + } + if len(m.SourceKeyspace) > 0 { + i -= len(m.SourceKeyspace) + copy(dAtA[i:], m.SourceKeyspace) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.SourceKeyspace))) + i-- + dAtA[i] = 0x12 + } + if len(m.Workflow) > 0 { + i -= len(m.Workflow) + copy(dAtA[i:], m.Workflow) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.Workflow))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Keyspace) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Keyspace) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Keyspace) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.Keyspace != nil { + { + size, err := m.Keyspace.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVtctldata(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Shard) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Shard) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Shard) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.Shard != nil { + { + size, err := m.Shard.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVtctldata(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x12 + } + if len(m.Keyspace) > 0 { + i -= len(m.Keyspace) + copy(dAtA[i:], m.Keyspace) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.Keyspace))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *ChangeTabletTypeRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -4440,6 +4681,93 @@ func (m *EmergencyReparentShardResponse) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } +func (m *FindAllShardsInKeyspaceRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *FindAllShardsInKeyspaceRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *FindAllShardsInKeyspaceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.Keyspace) > 0 { + i -= len(m.Keyspace) + copy(dAtA[i:], m.Keyspace) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.Keyspace))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *FindAllShardsInKeyspaceResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *FindAllShardsInKeyspaceResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *FindAllShardsInKeyspaceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.Shards) > 0 { + for k := range m.Shards { + v := m.Shards[k] + baseI := i + if v != nil { + { + size, err := v.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVtctldata(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(k) + copy(dAtA[i:], k) + i = encodeVarintVtctldata(dAtA, i, uint64(len(k))) + i-- + dAtA[i] = 0xa + i = encodeVarintVtctldata(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func (m *GetBackupsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -6039,333 +6367,6 @@ func (m *TabletExternallyReparentedResponse) MarshalToSizedBuffer(dAtA []byte) ( return len(dAtA) - i, nil } -func (m *Keyspace) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Keyspace) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Keyspace) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i -= len(m.XXX_unrecognized) - copy(dAtA[i:], m.XXX_unrecognized) - } - if m.Keyspace != nil { - { - size, err := m.Keyspace.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintVtctldata(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.Name) > 0 { - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintVtctldata(dAtA, i, uint64(len(m.Name))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *FindAllShardsInKeyspaceRequest) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *FindAllShardsInKeyspaceRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *FindAllShardsInKeyspaceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i -= len(m.XXX_unrecognized) - copy(dAtA[i:], m.XXX_unrecognized) - } - if len(m.Keyspace) > 0 { - i -= len(m.Keyspace) - copy(dAtA[i:], m.Keyspace) - i = encodeVarintVtctldata(dAtA, i, uint64(len(m.Keyspace))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *FindAllShardsInKeyspaceResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *FindAllShardsInKeyspaceResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *FindAllShardsInKeyspaceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i -= len(m.XXX_unrecognized) - copy(dAtA[i:], m.XXX_unrecognized) - } - if len(m.Shards) > 0 { - for k := range m.Shards { - v := m.Shards[k] - baseI := i - if v != nil { - { - size, err := v.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintVtctldata(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - i -= len(k) - copy(dAtA[i:], k) - i = encodeVarintVtctldata(dAtA, i, uint64(len(k))) - i-- - dAtA[i] = 0xa - i = encodeVarintVtctldata(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *Shard) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Shard) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Shard) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i -= len(m.XXX_unrecognized) - copy(dAtA[i:], m.XXX_unrecognized) - } - if m.Shard != nil { - { - size, err := m.Shard.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintVtctldata(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if len(m.Name) > 0 { - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintVtctldata(dAtA, i, uint64(len(m.Name))) - i-- - dAtA[i] = 0x12 - } - if len(m.Keyspace) > 0 { - i -= len(m.Keyspace) - copy(dAtA[i:], m.Keyspace) - i = encodeVarintVtctldata(dAtA, i, uint64(len(m.Keyspace))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *TableMaterializeSettings) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *TableMaterializeSettings) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *TableMaterializeSettings) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i -= len(m.XXX_unrecognized) - copy(dAtA[i:], m.XXX_unrecognized) - } - if len(m.CreateDdl) > 0 { - i -= len(m.CreateDdl) - copy(dAtA[i:], m.CreateDdl) - i = encodeVarintVtctldata(dAtA, i, uint64(len(m.CreateDdl))) - i-- - dAtA[i] = 0x1a - } - if len(m.SourceExpression) > 0 { - i -= len(m.SourceExpression) - copy(dAtA[i:], m.SourceExpression) - i = encodeVarintVtctldata(dAtA, i, uint64(len(m.SourceExpression))) - i-- - dAtA[i] = 0x12 - } - if len(m.TargetTable) > 0 { - i -= len(m.TargetTable) - copy(dAtA[i:], m.TargetTable) - i = encodeVarintVtctldata(dAtA, i, uint64(len(m.TargetTable))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MaterializeSettings) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MaterializeSettings) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MaterializeSettings) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i -= len(m.XXX_unrecognized) - copy(dAtA[i:], m.XXX_unrecognized) - } - if len(m.ExternalCluster) > 0 { - i -= len(m.ExternalCluster) - copy(dAtA[i:], m.ExternalCluster) - i = encodeVarintVtctldata(dAtA, i, uint64(len(m.ExternalCluster))) - i-- - dAtA[i] = 0x42 - } - if len(m.TabletTypes) > 0 { - i -= len(m.TabletTypes) - copy(dAtA[i:], m.TabletTypes) - i = encodeVarintVtctldata(dAtA, i, uint64(len(m.TabletTypes))) - i-- - dAtA[i] = 0x3a - } - if len(m.Cell) > 0 { - i -= len(m.Cell) - copy(dAtA[i:], m.Cell) - i = encodeVarintVtctldata(dAtA, i, uint64(len(m.Cell))) - i-- - dAtA[i] = 0x32 - } - if len(m.TableSettings) > 0 { - for iNdEx := len(m.TableSettings) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.TableSettings[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintVtctldata(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x2a - } - } - if m.StopAfterCopy { - i-- - if m.StopAfterCopy { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x20 - } - if len(m.TargetKeyspace) > 0 { - i -= len(m.TargetKeyspace) - copy(dAtA[i:], m.TargetKeyspace) - i = encodeVarintVtctldata(dAtA, i, uint64(len(m.TargetKeyspace))) - i-- - dAtA[i] = 0x1a - } - if len(m.SourceKeyspace) > 0 { - i -= len(m.SourceKeyspace) - copy(dAtA[i:], m.SourceKeyspace) - i = encodeVarintVtctldata(dAtA, i, uint64(len(m.SourceKeyspace))) - i-- - dAtA[i] = 0x12 - } - if len(m.Workflow) > 0 { - i -= len(m.Workflow) - copy(dAtA[i:], m.Workflow) - i = encodeVarintVtctldata(dAtA, i, uint64(len(m.Workflow))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - func encodeVarintVtctldata(dAtA []byte, offset int, v uint64) int { offset -= sovVtctldata(v) base := offset @@ -6414,6 +6415,119 @@ func (m *ExecuteVtctlCommandResponse) Size() (n int) { return n } +func (m *TableMaterializeSettings) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.TargetTable) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + l = len(m.SourceExpression) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + l = len(m.CreateDdl) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *MaterializeSettings) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Workflow) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + l = len(m.SourceKeyspace) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + l = len(m.TargetKeyspace) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + if m.StopAfterCopy { + n += 2 + } + if len(m.TableSettings) > 0 { + for _, e := range m.TableSettings { + l = e.Size() + n += 1 + l + sovVtctldata(uint64(l)) + } + } + l = len(m.Cell) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + l = len(m.TabletTypes) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + l = len(m.ExternalCluster) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *Keyspace) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + if m.Keyspace != nil { + l = m.Keyspace.Size() + n += 1 + l + sovVtctldata(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *Shard) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Keyspace) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + l = len(m.Name) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + if m.Shard != nil { + l = m.Shard.Size() + n += 1 + l + sovVtctldata(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func (m *ChangeTabletTypeRequest) Size() (n int) { if m == nil { return 0 @@ -6734,6 +6848,47 @@ func (m *EmergencyReparentShardResponse) Size() (n int) { return n } +func (m *FindAllShardsInKeyspaceRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Keyspace) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *FindAllShardsInKeyspaceResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Shards) > 0 { + for k, v := range m.Shards { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovVtctldata(uint64(l)) + } + mapEntrySize := 1 + len(k) + sovVtctldata(uint64(len(k))) + l + n += mapEntrySize + 1 + sovVtctldata(uint64(mapEntrySize)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func (m *GetBackupsRequest) Size() (n int) { if m == nil { return 0 @@ -7437,160 +7592,6 @@ func (m *TabletExternallyReparentedResponse) Size() (n int) { return n } -func (m *Keyspace) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovVtctldata(uint64(l)) - } - if m.Keyspace != nil { - l = m.Keyspace.Size() - n += 1 + l + sovVtctldata(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *FindAllShardsInKeyspaceRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Keyspace) - if l > 0 { - n += 1 + l + sovVtctldata(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *FindAllShardsInKeyspaceResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Shards) > 0 { - for k, v := range m.Shards { - _ = k - _ = v - l = 0 - if v != nil { - l = v.Size() - l += 1 + sovVtctldata(uint64(l)) - } - mapEntrySize := 1 + len(k) + sovVtctldata(uint64(len(k))) + l - n += mapEntrySize + 1 + sovVtctldata(uint64(mapEntrySize)) - } - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Shard) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Keyspace) - if l > 0 { - n += 1 + l + sovVtctldata(uint64(l)) - } - l = len(m.Name) - if l > 0 { - n += 1 + l + sovVtctldata(uint64(l)) - } - if m.Shard != nil { - l = m.Shard.Size() - n += 1 + l + sovVtctldata(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *TableMaterializeSettings) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.TargetTable) - if l > 0 { - n += 1 + l + sovVtctldata(uint64(l)) - } - l = len(m.SourceExpression) - if l > 0 { - n += 1 + l + sovVtctldata(uint64(l)) - } - l = len(m.CreateDdl) - if l > 0 { - n += 1 + l + sovVtctldata(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *MaterializeSettings) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Workflow) - if l > 0 { - n += 1 + l + sovVtctldata(uint64(l)) - } - l = len(m.SourceKeyspace) - if l > 0 { - n += 1 + l + sovVtctldata(uint64(l)) - } - l = len(m.TargetKeyspace) - if l > 0 { - n += 1 + l + sovVtctldata(uint64(l)) - } - if m.StopAfterCopy { - n += 2 - } - if len(m.TableSettings) > 0 { - for _, e := range m.TableSettings { - l = e.Size() - n += 1 + l + sovVtctldata(uint64(l)) - } - } - l = len(m.Cell) - if l > 0 { - n += 1 + l + sovVtctldata(uint64(l)) - } - l = len(m.TabletTypes) - if l > 0 { - n += 1 + l + sovVtctldata(uint64(l)) - } - l = len(m.ExternalCluster) - if l > 0 { - n += 1 + l + sovVtctldata(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - func sovVtctldata(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -7792,6 +7793,732 @@ func (m *ExecuteVtctlCommandResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *TableMaterializeSettings) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TableMaterializeSettings: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TableMaterializeSettings: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetTable", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TargetTable = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SourceExpression", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SourceExpression = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CreateDdl", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CreateDdl = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipVtctldata(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MaterializeSettings) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MaterializeSettings: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MaterializeSettings: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Workflow", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Workflow = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SourceKeyspace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SourceKeyspace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetKeyspace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TargetKeyspace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StopAfterCopy", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.StopAfterCopy = bool(v != 0) + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TableSettings", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TableSettings = append(m.TableSettings, &TableMaterializeSettings{}) + if err := m.TableSettings[len(m.TableSettings)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Cell", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Cell = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TabletTypes", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TabletTypes = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExternalCluster", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ExternalCluster = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipVtctldata(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Keyspace) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Keyspace: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Keyspace: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Keyspace == nil { + m.Keyspace = &topodata.Keyspace{} + } + if err := m.Keyspace.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipVtctldata(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Shard) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Shard: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Shard: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Keyspace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Shard == nil { + m.Shard = &topodata.Shard{} + } + if err := m.Shard.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipVtctldata(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *ChangeTabletTypeRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -9675,6 +10402,275 @@ func (m *EmergencyReparentShardResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *FindAllShardsInKeyspaceRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: FindAllShardsInKeyspaceRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: FindAllShardsInKeyspaceRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Keyspace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipVtctldata(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *FindAllShardsInKeyspaceResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: FindAllShardsInKeyspaceResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: FindAllShardsInKeyspaceResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Shards", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Shards == nil { + m.Shards = make(map[string]*Shard) + } + var mapkey string + var mapvalue *Shard + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthVtctldata + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthVtctldata + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthVtctldata + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &Shard{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipVtctldata(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Shards[mapkey] = mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipVtctldata(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *GetBackupsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -13726,1001 +14722,6 @@ func (m *TabletExternallyReparentedResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *Keyspace) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Keyspace: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Keyspace: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthVtctldata - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthVtctldata - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthVtctldata - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthVtctldata - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Keyspace == nil { - m.Keyspace = &topodata.Keyspace{} - } - if err := m.Keyspace.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipVtctldata(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthVtctldata - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthVtctldata - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *FindAllShardsInKeyspaceRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: FindAllShardsInKeyspaceRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: FindAllShardsInKeyspaceRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthVtctldata - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthVtctldata - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Keyspace = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipVtctldata(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthVtctldata - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthVtctldata - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *FindAllShardsInKeyspaceResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: FindAllShardsInKeyspaceResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: FindAllShardsInKeyspaceResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Shards", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthVtctldata - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthVtctldata - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Shards == nil { - m.Shards = make(map[string]*Shard) - } - var mapkey string - var mapvalue *Shard - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthVtctldata - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthVtctldata - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthVtctldata - } - postmsgIndex := iNdEx + mapmsglen - if postmsgIndex < 0 { - return ErrInvalidLengthVtctldata - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &Shard{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipVtctldata(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthVtctldata - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Shards[mapkey] = mapvalue - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipVtctldata(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthVtctldata - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthVtctldata - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Shard) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Shard: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Shard: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthVtctldata - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthVtctldata - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Keyspace = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthVtctldata - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthVtctldata - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthVtctldata - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthVtctldata - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Shard == nil { - m.Shard = &topodata.Shard{} - } - if err := m.Shard.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipVtctldata(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthVtctldata - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthVtctldata - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *TableMaterializeSettings) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: TableMaterializeSettings: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: TableMaterializeSettings: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TargetTable", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthVtctldata - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthVtctldata - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TargetTable = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SourceExpression", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthVtctldata - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthVtctldata - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SourceExpression = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CreateDdl", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthVtctldata - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthVtctldata - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CreateDdl = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipVtctldata(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthVtctldata - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthVtctldata - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MaterializeSettings) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MaterializeSettings: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MaterializeSettings: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Workflow", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthVtctldata - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthVtctldata - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Workflow = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SourceKeyspace", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthVtctldata - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthVtctldata - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SourceKeyspace = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TargetKeyspace", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthVtctldata - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthVtctldata - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TargetKeyspace = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StopAfterCopy", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.StopAfterCopy = bool(v != 0) - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TableSettings", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthVtctldata - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthVtctldata - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TableSettings = append(m.TableSettings, &TableMaterializeSettings{}) - if err := m.TableSettings[len(m.TableSettings)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cell", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthVtctldata - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthVtctldata - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cell = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TabletTypes", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthVtctldata - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthVtctldata - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TabletTypes = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ExternalCluster", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthVtctldata - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthVtctldata - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.ExternalCluster = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipVtctldata(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthVtctldata - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthVtctldata - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func skipVtctldata(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/proto/vtctldata.proto b/proto/vtctldata.proto index e58913a3e9..9db1a1eb97 100644 --- a/proto/vtctldata.proto +++ b/proto/vtctldata.proto @@ -41,6 +41,50 @@ message ExecuteVtctlCommandResponse { logutil.Event event = 1; } +// TableMaterializeSttings contains the settings for one table. +message TableMaterializeSettings { + string target_table = 1; + // source_expression is a select statement. + string source_expression = 2; + // create_ddl contains the DDL to create the target table. + // If empty, the target table must already exist. + // if "copy", the target table DDL is the same as the source table. + string create_ddl = 3; +} + +// MaterializeSettings contains the settings for the Materialize command. +message MaterializeSettings { + // workflow is the name of the workflow. + string workflow = 1; + string source_keyspace = 2; + string target_keyspace = 3; + // stop_after_copy specifies if vreplication should be stopped after copying. + bool stop_after_copy = 4; + repeated TableMaterializeSettings table_settings = 5; + // optional parameters. + string cell = 6; + string tablet_types = 7; + // ExternalCluster is the name of the mounted cluster which has the source keyspace/db for this workflow + // it is of the type + string external_cluster = 8; + +} + +/* Data types for VtctldServer */ + +message Keyspace { + string name = 1; + topodata.Keyspace keyspace = 2; +} + +message Shard { + string keyspace = 1; + string name = 2; + topodata.Shard shard = 3; +} + +/* Request/response types for VtctldServer */ + message ChangeTabletTypeRequest { topodata.TabletAlias tablet_alias = 1; topodata.TabletType db_type = 2; @@ -180,6 +224,14 @@ message EmergencyReparentShardResponse { repeated logutil.Event events = 4; } +message FindAllShardsInKeyspaceRequest { + string keyspace = 1; +} + +message FindAllShardsInKeyspaceResponse { + map shards = 1; +} + message GetBackupsRequest { string keyspace = 1; string shard = 2; @@ -409,51 +461,3 @@ message TabletExternallyReparentedResponse { topodata.TabletAlias new_primary = 3; topodata.TabletAlias old_primary = 4; } - -message Keyspace { - string name = 1; - topodata.Keyspace keyspace = 2; -} - -message FindAllShardsInKeyspaceRequest { - string keyspace = 1; -} - -message FindAllShardsInKeyspaceResponse { - map shards = 1; -} - -message Shard { - string keyspace = 1; - string name = 2; - topodata.Shard shard = 3; -} - -// TableMaterializeSttings contains the settings for one table. -message TableMaterializeSettings { - string target_table = 1; - // source_expression is a select statement. - string source_expression = 2; - // create_ddl contains the DDL to create the target table. - // If empty, the target table must already exist. - // if "copy", the target table DDL is the same as the source table. - string create_ddl = 3; -} - -// MaterializeSettings contains the settings for the Materialize command. -message MaterializeSettings { - // workflow is the name of the workflow. - string workflow = 1; - string source_keyspace = 2; - string target_keyspace = 3; - // stop_after_copy specifies if vreplication should be stopped after copying. - bool stop_after_copy = 4; - repeated TableMaterializeSettings table_settings = 5; - // optional parameters. - string cell = 6; - string tablet_types = 7; - // ExternalCluster is the name of the mounted cluster which has the source keyspace/db for this workflow - // it is of the type - string external_cluster = 8; - -} From d0fdccaa4bb3ddc102bd88e11db1e58d904410c3 Mon Sep 17 00:00:00 2001 From: Andrew Mason Date: Mon, 22 Feb 2021 22:37:44 -0500 Subject: [PATCH 02/20] wip - add `GetWorkflows` rpc, with some TODOs for later, and generate everything Signed-off-by: Andrew Mason --- go/vt/proto/vtctldata/vtctldata.pb.go | 2881 +++++++++++++++++-- go/vt/proto/vtctlservice/vtctlservice.pb.go | 129 +- go/vt/vtctl/grpcvtctldclient/client_gen.go | 9 + go/vt/vtctl/grpcvtctldserver/server.go | 5 + proto/vtctldata.proto | 50 + proto/vtctlservice.proto | 2 + 6 files changed, 2848 insertions(+), 228 deletions(-) diff --git a/go/vt/proto/vtctldata/vtctldata.pb.go b/go/vt/proto/vtctldata/vtctldata.pb.go index e36fc0baf5..68f7a4ba91 100644 --- a/go/vt/proto/vtctldata/vtctldata.pb.go +++ b/go/vt/proto/vtctldata/vtctldata.pb.go @@ -10,6 +10,7 @@ import ( math_bits "math/bits" proto "github.com/golang/protobuf/proto" + binlogdata "vitess.io/vitess/go/vt/proto/binlogdata" logutil "vitess.io/vitess/go/vt/proto/logutil" mysqlctl "vitess.io/vitess/go/vt/proto/mysqlctl" tabletmanagerdata "vitess.io/vitess/go/vt/proto/tabletmanagerdata" @@ -429,6 +430,394 @@ func (m *Shard) GetShard() *topodata.Shard { return nil } +// TODO: comment the hell out of this. +type Workflow struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Source *Workflow_ReplicationLocation `protobuf:"bytes,2,opt,name=source,proto3" json:"source,omitempty"` + Target *Workflow_ReplicationLocation `protobuf:"bytes,3,opt,name=target,proto3" json:"target,omitempty"` + MaxVReplicationLag int64 `protobuf:"varint,4,opt,name=max_v_replication_lag,json=maxVReplicationLag,proto3" json:"max_v_replication_lag,omitempty"` + ShardStatuses map[string]*Workflow_ShardReplicationStatus `protobuf:"bytes,5,rep,name=shard_statuses,json=shardStatuses,proto3" json:"shard_statuses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Workflow) Reset() { *m = Workflow{} } +func (m *Workflow) String() string { return proto.CompactTextString(m) } +func (*Workflow) ProtoMessage() {} +func (*Workflow) Descriptor() ([]byte, []int) { + return fileDescriptor_f41247b323a1ab2e, []int{6} +} +func (m *Workflow) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Workflow) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Workflow.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Workflow) XXX_Merge(src proto.Message) { + xxx_messageInfo_Workflow.Merge(m, src) +} +func (m *Workflow) XXX_Size() int { + return m.Size() +} +func (m *Workflow) XXX_DiscardUnknown() { + xxx_messageInfo_Workflow.DiscardUnknown(m) +} + +var xxx_messageInfo_Workflow proto.InternalMessageInfo + +func (m *Workflow) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Workflow) GetSource() *Workflow_ReplicationLocation { + if m != nil { + return m.Source + } + return nil +} + +func (m *Workflow) GetTarget() *Workflow_ReplicationLocation { + if m != nil { + return m.Target + } + return nil +} + +func (m *Workflow) GetMaxVReplicationLag() int64 { + if m != nil { + return m.MaxVReplicationLag + } + return 0 +} + +func (m *Workflow) GetShardStatuses() map[string]*Workflow_ShardReplicationStatus { + if m != nil { + return m.ShardStatuses + } + return nil +} + +type Workflow_ReplicationLocation struct { + Keyspace string `protobuf:"bytes,1,opt,name=keyspace,proto3" json:"keyspace,omitempty"` + Shards []string `protobuf:"bytes,2,rep,name=shards,proto3" json:"shards,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Workflow_ReplicationLocation) Reset() { *m = Workflow_ReplicationLocation{} } +func (m *Workflow_ReplicationLocation) String() string { return proto.CompactTextString(m) } +func (*Workflow_ReplicationLocation) ProtoMessage() {} +func (*Workflow_ReplicationLocation) Descriptor() ([]byte, []int) { + return fileDescriptor_f41247b323a1ab2e, []int{6, 1} +} +func (m *Workflow_ReplicationLocation) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Workflow_ReplicationLocation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Workflow_ReplicationLocation.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Workflow_ReplicationLocation) XXX_Merge(src proto.Message) { + xxx_messageInfo_Workflow_ReplicationLocation.Merge(m, src) +} +func (m *Workflow_ReplicationLocation) XXX_Size() int { + return m.Size() +} +func (m *Workflow_ReplicationLocation) XXX_DiscardUnknown() { + xxx_messageInfo_Workflow_ReplicationLocation.DiscardUnknown(m) +} + +var xxx_messageInfo_Workflow_ReplicationLocation proto.InternalMessageInfo + +func (m *Workflow_ReplicationLocation) GetKeyspace() string { + if m != nil { + return m.Keyspace + } + return "" +} + +func (m *Workflow_ReplicationLocation) GetShards() []string { + if m != nil { + return m.Shards + } + return nil +} + +type Workflow_ReplicationStatus struct { + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Shard string `protobuf:"bytes,2,opt,name=shard,proto3" json:"shard,omitempty"` + Tablet *topodata.TabletAlias `protobuf:"bytes,3,opt,name=tablet,proto3" json:"tablet,omitempty"` + BinlogSource *binlogdata.BinlogSource `protobuf:"bytes,4,opt,name=binlog_source,json=binlogSource,proto3" json:"binlog_source,omitempty"` + Position string `protobuf:"bytes,5,opt,name=position,proto3" json:"position,omitempty"` + StopPosition string `protobuf:"bytes,6,opt,name=stop_position,json=stopPosition,proto3" json:"stop_position,omitempty"` + State string `protobuf:"bytes,7,opt,name=state,proto3" json:"state,omitempty"` + DbName string `protobuf:"bytes,8,opt,name=db_name,json=dbName,proto3" json:"db_name,omitempty"` + TransactionTimestamp *vttime.Time `protobuf:"bytes,9,opt,name=transaction_timestamp,json=transactionTimestamp,proto3" json:"transaction_timestamp,omitempty"` + TimeUpdated *vttime.Time `protobuf:"bytes,10,opt,name=time_updated,json=timeUpdated,proto3" json:"time_updated,omitempty"` + Message string `protobuf:"bytes,11,opt,name=message,proto3" json:"message,omitempty"` + CopyStates []*Workflow_ReplicationStatus_CopyState `protobuf:"bytes,12,rep,name=copy_states,json=copyStates,proto3" json:"copy_states,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Workflow_ReplicationStatus) Reset() { *m = Workflow_ReplicationStatus{} } +func (m *Workflow_ReplicationStatus) String() string { return proto.CompactTextString(m) } +func (*Workflow_ReplicationStatus) ProtoMessage() {} +func (*Workflow_ReplicationStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_f41247b323a1ab2e, []int{6, 2} +} +func (m *Workflow_ReplicationStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Workflow_ReplicationStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Workflow_ReplicationStatus.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Workflow_ReplicationStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_Workflow_ReplicationStatus.Merge(m, src) +} +func (m *Workflow_ReplicationStatus) XXX_Size() int { + return m.Size() +} +func (m *Workflow_ReplicationStatus) XXX_DiscardUnknown() { + xxx_messageInfo_Workflow_ReplicationStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_Workflow_ReplicationStatus proto.InternalMessageInfo + +func (m *Workflow_ReplicationStatus) GetId() int64 { + if m != nil { + return m.Id + } + return 0 +} + +func (m *Workflow_ReplicationStatus) GetShard() string { + if m != nil { + return m.Shard + } + return "" +} + +func (m *Workflow_ReplicationStatus) GetTablet() *topodata.TabletAlias { + if m != nil { + return m.Tablet + } + return nil +} + +func (m *Workflow_ReplicationStatus) GetBinlogSource() *binlogdata.BinlogSource { + if m != nil { + return m.BinlogSource + } + return nil +} + +func (m *Workflow_ReplicationStatus) GetPosition() string { + if m != nil { + return m.Position + } + return "" +} + +func (m *Workflow_ReplicationStatus) GetStopPosition() string { + if m != nil { + return m.StopPosition + } + return "" +} + +func (m *Workflow_ReplicationStatus) GetState() string { + if m != nil { + return m.State + } + return "" +} + +func (m *Workflow_ReplicationStatus) GetDbName() string { + if m != nil { + return m.DbName + } + return "" +} + +func (m *Workflow_ReplicationStatus) GetTransactionTimestamp() *vttime.Time { + if m != nil { + return m.TransactionTimestamp + } + return nil +} + +func (m *Workflow_ReplicationStatus) GetTimeUpdated() *vttime.Time { + if m != nil { + return m.TimeUpdated + } + return nil +} + +func (m *Workflow_ReplicationStatus) GetMessage() string { + if m != nil { + return m.Message + } + return "" +} + +func (m *Workflow_ReplicationStatus) GetCopyStates() []*Workflow_ReplicationStatus_CopyState { + if m != nil { + return m.CopyStates + } + return nil +} + +type Workflow_ReplicationStatus_CopyState struct { + Table string `protobuf:"bytes,1,opt,name=table,proto3" json:"table,omitempty"` + LastPk string `protobuf:"bytes,2,opt,name=last_pk,json=lastPk,proto3" json:"last_pk,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Workflow_ReplicationStatus_CopyState) Reset() { *m = Workflow_ReplicationStatus_CopyState{} } +func (m *Workflow_ReplicationStatus_CopyState) String() string { return proto.CompactTextString(m) } +func (*Workflow_ReplicationStatus_CopyState) ProtoMessage() {} +func (*Workflow_ReplicationStatus_CopyState) Descriptor() ([]byte, []int) { + return fileDescriptor_f41247b323a1ab2e, []int{6, 2, 0} +} +func (m *Workflow_ReplicationStatus_CopyState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Workflow_ReplicationStatus_CopyState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Workflow_ReplicationStatus_CopyState.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Workflow_ReplicationStatus_CopyState) XXX_Merge(src proto.Message) { + xxx_messageInfo_Workflow_ReplicationStatus_CopyState.Merge(m, src) +} +func (m *Workflow_ReplicationStatus_CopyState) XXX_Size() int { + return m.Size() +} +func (m *Workflow_ReplicationStatus_CopyState) XXX_DiscardUnknown() { + xxx_messageInfo_Workflow_ReplicationStatus_CopyState.DiscardUnknown(m) +} + +var xxx_messageInfo_Workflow_ReplicationStatus_CopyState proto.InternalMessageInfo + +func (m *Workflow_ReplicationStatus_CopyState) GetTable() string { + if m != nil { + return m.Table + } + return "" +} + +func (m *Workflow_ReplicationStatus_CopyState) GetLastPk() string { + if m != nil { + return m.LastPk + } + return "" +} + +type Workflow_ShardReplicationStatus struct { + PrimaryReplicationStatuses []*Workflow_ReplicationStatus `protobuf:"bytes,1,rep,name=primary_replication_statuses,json=primaryReplicationStatuses,proto3" json:"primary_replication_statuses,omitempty"` + TabletControls []*topodata.Shard_TabletControl `protobuf:"bytes,2,rep,name=tablet_controls,json=tabletControls,proto3" json:"tablet_controls,omitempty"` + IsPrimaryServing bool `protobuf:"varint,3,opt,name=is_primary_serving,json=isPrimaryServing,proto3" json:"is_primary_serving,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Workflow_ShardReplicationStatus) Reset() { *m = Workflow_ShardReplicationStatus{} } +func (m *Workflow_ShardReplicationStatus) String() string { return proto.CompactTextString(m) } +func (*Workflow_ShardReplicationStatus) ProtoMessage() {} +func (*Workflow_ShardReplicationStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_f41247b323a1ab2e, []int{6, 3} +} +func (m *Workflow_ShardReplicationStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Workflow_ShardReplicationStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Workflow_ShardReplicationStatus.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Workflow_ShardReplicationStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_Workflow_ShardReplicationStatus.Merge(m, src) +} +func (m *Workflow_ShardReplicationStatus) XXX_Size() int { + return m.Size() +} +func (m *Workflow_ShardReplicationStatus) XXX_DiscardUnknown() { + xxx_messageInfo_Workflow_ShardReplicationStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_Workflow_ShardReplicationStatus proto.InternalMessageInfo + +func (m *Workflow_ShardReplicationStatus) GetPrimaryReplicationStatuses() []*Workflow_ReplicationStatus { + if m != nil { + return m.PrimaryReplicationStatuses + } + return nil +} + +func (m *Workflow_ShardReplicationStatus) GetTabletControls() []*topodata.Shard_TabletControl { + if m != nil { + return m.TabletControls + } + return nil +} + +func (m *Workflow_ShardReplicationStatus) GetIsPrimaryServing() bool { + if m != nil { + return m.IsPrimaryServing + } + return false +} + type ChangeTabletTypeRequest struct { TabletAlias *topodata.TabletAlias `protobuf:"bytes,1,opt,name=tablet_alias,json=tabletAlias,proto3" json:"tablet_alias,omitempty"` DbType topodata.TabletType `protobuf:"varint,2,opt,name=db_type,json=dbType,proto3,enum=topodata.TabletType" json:"db_type,omitempty"` @@ -442,7 +831,7 @@ func (m *ChangeTabletTypeRequest) Reset() { *m = ChangeTabletTypeRequest func (m *ChangeTabletTypeRequest) String() string { return proto.CompactTextString(m) } func (*ChangeTabletTypeRequest) ProtoMessage() {} func (*ChangeTabletTypeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{6} + return fileDescriptor_f41247b323a1ab2e, []int{7} } func (m *ChangeTabletTypeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -505,7 +894,7 @@ func (m *ChangeTabletTypeResponse) Reset() { *m = ChangeTabletTypeRespon func (m *ChangeTabletTypeResponse) String() string { return proto.CompactTextString(m) } func (*ChangeTabletTypeResponse) ProtoMessage() {} func (*ChangeTabletTypeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{7} + return fileDescriptor_f41247b323a1ab2e, []int{8} } func (m *ChangeTabletTypeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -587,7 +976,7 @@ func (m *CreateKeyspaceRequest) Reset() { *m = CreateKeyspaceRequest{} } func (m *CreateKeyspaceRequest) String() string { return proto.CompactTextString(m) } func (*CreateKeyspaceRequest) ProtoMessage() {} func (*CreateKeyspaceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{8} + return fileDescriptor_f41247b323a1ab2e, []int{9} } func (m *CreateKeyspaceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -691,7 +1080,7 @@ func (m *CreateKeyspaceResponse) Reset() { *m = CreateKeyspaceResponse{} func (m *CreateKeyspaceResponse) String() string { return proto.CompactTextString(m) } func (*CreateKeyspaceResponse) ProtoMessage() {} func (*CreateKeyspaceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{9} + return fileDescriptor_f41247b323a1ab2e, []int{10} } func (m *CreateKeyspaceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -747,7 +1136,7 @@ func (m *CreateShardRequest) Reset() { *m = CreateShardRequest{} } func (m *CreateShardRequest) String() string { return proto.CompactTextString(m) } func (*CreateShardRequest) ProtoMessage() {} func (*CreateShardRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{10} + return fileDescriptor_f41247b323a1ab2e, []int{11} } func (m *CreateShardRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -822,7 +1211,7 @@ func (m *CreateShardResponse) Reset() { *m = CreateShardResponse{} } func (m *CreateShardResponse) String() string { return proto.CompactTextString(m) } func (*CreateShardResponse) ProtoMessage() {} func (*CreateShardResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{11} + return fileDescriptor_f41247b323a1ab2e, []int{12} } func (m *CreateShardResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -888,7 +1277,7 @@ func (m *DeleteKeyspaceRequest) Reset() { *m = DeleteKeyspaceRequest{} } func (m *DeleteKeyspaceRequest) String() string { return proto.CompactTextString(m) } func (*DeleteKeyspaceRequest) ProtoMessage() {} func (*DeleteKeyspaceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{12} + return fileDescriptor_f41247b323a1ab2e, []int{13} } func (m *DeleteKeyspaceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -941,7 +1330,7 @@ func (m *DeleteKeyspaceResponse) Reset() { *m = DeleteKeyspaceResponse{} func (m *DeleteKeyspaceResponse) String() string { return proto.CompactTextString(m) } func (*DeleteKeyspaceResponse) ProtoMessage() {} func (*DeleteKeyspaceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{13} + return fileDescriptor_f41247b323a1ab2e, []int{14} } func (m *DeleteKeyspaceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -990,7 +1379,7 @@ func (m *DeleteShardsRequest) Reset() { *m = DeleteShardsRequest{} } func (m *DeleteShardsRequest) String() string { return proto.CompactTextString(m) } func (*DeleteShardsRequest) ProtoMessage() {} func (*DeleteShardsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{14} + return fileDescriptor_f41247b323a1ab2e, []int{15} } func (m *DeleteShardsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1050,7 +1439,7 @@ func (m *DeleteShardsResponse) Reset() { *m = DeleteShardsResponse{} } func (m *DeleteShardsResponse) String() string { return proto.CompactTextString(m) } func (*DeleteShardsResponse) ProtoMessage() {} func (*DeleteShardsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{15} + return fileDescriptor_f41247b323a1ab2e, []int{16} } func (m *DeleteShardsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1094,7 +1483,7 @@ func (m *DeleteTabletsRequest) Reset() { *m = DeleteTabletsRequest{} } func (m *DeleteTabletsRequest) String() string { return proto.CompactTextString(m) } func (*DeleteTabletsRequest) ProtoMessage() {} func (*DeleteTabletsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{16} + return fileDescriptor_f41247b323a1ab2e, []int{17} } func (m *DeleteTabletsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1147,7 +1536,7 @@ func (m *DeleteTabletsResponse) Reset() { *m = DeleteTabletsResponse{} } func (m *DeleteTabletsResponse) String() string { return proto.CompactTextString(m) } func (*DeleteTabletsResponse) ProtoMessage() {} func (*DeleteTabletsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{17} + return fileDescriptor_f41247b323a1ab2e, []int{18} } func (m *DeleteTabletsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1201,7 +1590,7 @@ func (m *EmergencyReparentShardRequest) Reset() { *m = EmergencyReparent func (m *EmergencyReparentShardRequest) String() string { return proto.CompactTextString(m) } func (*EmergencyReparentShardRequest) ProtoMessage() {} func (*EmergencyReparentShardRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{18} + return fileDescriptor_f41247b323a1ab2e, []int{19} } func (m *EmergencyReparentShardRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1285,7 +1674,7 @@ func (m *EmergencyReparentShardResponse) Reset() { *m = EmergencyReparen func (m *EmergencyReparentShardResponse) String() string { return proto.CompactTextString(m) } func (*EmergencyReparentShardResponse) ProtoMessage() {} func (*EmergencyReparentShardResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{19} + return fileDescriptor_f41247b323a1ab2e, []int{20} } func (m *EmergencyReparentShardResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1353,7 +1742,7 @@ func (m *FindAllShardsInKeyspaceRequest) Reset() { *m = FindAllShardsInK func (m *FindAllShardsInKeyspaceRequest) String() string { return proto.CompactTextString(m) } func (*FindAllShardsInKeyspaceRequest) ProtoMessage() {} func (*FindAllShardsInKeyspaceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{20} + return fileDescriptor_f41247b323a1ab2e, []int{21} } func (m *FindAllShardsInKeyspaceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1400,7 +1789,7 @@ func (m *FindAllShardsInKeyspaceResponse) Reset() { *m = FindAllShardsIn func (m *FindAllShardsInKeyspaceResponse) String() string { return proto.CompactTextString(m) } func (*FindAllShardsInKeyspaceResponse) ProtoMessage() {} func (*FindAllShardsInKeyspaceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{21} + return fileDescriptor_f41247b323a1ab2e, []int{22} } func (m *FindAllShardsInKeyspaceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1448,7 +1837,7 @@ func (m *GetBackupsRequest) Reset() { *m = GetBackupsRequest{} } func (m *GetBackupsRequest) String() string { return proto.CompactTextString(m) } func (*GetBackupsRequest) ProtoMessage() {} func (*GetBackupsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{22} + return fileDescriptor_f41247b323a1ab2e, []int{23} } func (m *GetBackupsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1502,7 +1891,7 @@ func (m *GetBackupsResponse) Reset() { *m = GetBackupsResponse{} } func (m *GetBackupsResponse) String() string { return proto.CompactTextString(m) } func (*GetBackupsResponse) ProtoMessage() {} func (*GetBackupsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{23} + return fileDescriptor_f41247b323a1ab2e, []int{24} } func (m *GetBackupsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1548,7 +1937,7 @@ func (m *GetCellInfoNamesRequest) Reset() { *m = GetCellInfoNamesRequest func (m *GetCellInfoNamesRequest) String() string { return proto.CompactTextString(m) } func (*GetCellInfoNamesRequest) ProtoMessage() {} func (*GetCellInfoNamesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{24} + return fileDescriptor_f41247b323a1ab2e, []int{25} } func (m *GetCellInfoNamesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1588,7 +1977,7 @@ func (m *GetCellInfoNamesResponse) Reset() { *m = GetCellInfoNamesRespon func (m *GetCellInfoNamesResponse) String() string { return proto.CompactTextString(m) } func (*GetCellInfoNamesResponse) ProtoMessage() {} func (*GetCellInfoNamesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{25} + return fileDescriptor_f41247b323a1ab2e, []int{26} } func (m *GetCellInfoNamesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1635,7 +2024,7 @@ func (m *GetCellInfoRequest) Reset() { *m = GetCellInfoRequest{} } func (m *GetCellInfoRequest) String() string { return proto.CompactTextString(m) } func (*GetCellInfoRequest) ProtoMessage() {} func (*GetCellInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{26} + return fileDescriptor_f41247b323a1ab2e, []int{27} } func (m *GetCellInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1682,7 +2071,7 @@ func (m *GetCellInfoResponse) Reset() { *m = GetCellInfoResponse{} } func (m *GetCellInfoResponse) String() string { return proto.CompactTextString(m) } func (*GetCellInfoResponse) ProtoMessage() {} func (*GetCellInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{27} + return fileDescriptor_f41247b323a1ab2e, []int{28} } func (m *GetCellInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1728,7 +2117,7 @@ func (m *GetCellsAliasesRequest) Reset() { *m = GetCellsAliasesRequest{} func (m *GetCellsAliasesRequest) String() string { return proto.CompactTextString(m) } func (*GetCellsAliasesRequest) ProtoMessage() {} func (*GetCellsAliasesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{28} + return fileDescriptor_f41247b323a1ab2e, []int{29} } func (m *GetCellsAliasesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1768,7 +2157,7 @@ func (m *GetCellsAliasesResponse) Reset() { *m = GetCellsAliasesResponse func (m *GetCellsAliasesResponse) String() string { return proto.CompactTextString(m) } func (*GetCellsAliasesResponse) ProtoMessage() {} func (*GetCellsAliasesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{29} + return fileDescriptor_f41247b323a1ab2e, []int{30} } func (m *GetCellsAliasesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1814,7 +2203,7 @@ func (m *GetKeyspacesRequest) Reset() { *m = GetKeyspacesRequest{} } func (m *GetKeyspacesRequest) String() string { return proto.CompactTextString(m) } func (*GetKeyspacesRequest) ProtoMessage() {} func (*GetKeyspacesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{30} + return fileDescriptor_f41247b323a1ab2e, []int{31} } func (m *GetKeyspacesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1854,7 +2243,7 @@ func (m *GetKeyspacesResponse) Reset() { *m = GetKeyspacesResponse{} } func (m *GetKeyspacesResponse) String() string { return proto.CompactTextString(m) } func (*GetKeyspacesResponse) ProtoMessage() {} func (*GetKeyspacesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{31} + return fileDescriptor_f41247b323a1ab2e, []int{32} } func (m *GetKeyspacesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1901,7 +2290,7 @@ func (m *GetKeyspaceRequest) Reset() { *m = GetKeyspaceRequest{} } func (m *GetKeyspaceRequest) String() string { return proto.CompactTextString(m) } func (*GetKeyspaceRequest) ProtoMessage() {} func (*GetKeyspaceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{32} + return fileDescriptor_f41247b323a1ab2e, []int{33} } func (m *GetKeyspaceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1948,7 +2337,7 @@ func (m *GetKeyspaceResponse) Reset() { *m = GetKeyspaceResponse{} } func (m *GetKeyspaceResponse) String() string { return proto.CompactTextString(m) } func (*GetKeyspaceResponse) ProtoMessage() {} func (*GetKeyspaceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{33} + return fileDescriptor_f41247b323a1ab2e, []int{34} } func (m *GetKeyspaceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2010,7 +2399,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_f41247b323a1ab2e, []int{34} + return fileDescriptor_f41247b323a1ab2e, []int{35} } func (m *GetSchemaRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2092,7 +2481,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_f41247b323a1ab2e, []int{35} + return fileDescriptor_f41247b323a1ab2e, []int{36} } func (m *GetSchemaResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2140,7 +2529,7 @@ func (m *GetShardRequest) Reset() { *m = GetShardRequest{} } func (m *GetShardRequest) String() string { return proto.CompactTextString(m) } func (*GetShardRequest) ProtoMessage() {} func (*GetShardRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{36} + return fileDescriptor_f41247b323a1ab2e, []int{37} } func (m *GetShardRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2194,7 +2583,7 @@ func (m *GetShardResponse) Reset() { *m = GetShardResponse{} } func (m *GetShardResponse) String() string { return proto.CompactTextString(m) } func (*GetShardResponse) ProtoMessage() {} func (*GetShardResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{37} + return fileDescriptor_f41247b323a1ab2e, []int{38} } func (m *GetShardResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2241,7 +2630,7 @@ func (m *GetSrvVSchemaRequest) Reset() { *m = GetSrvVSchemaRequest{} } func (m *GetSrvVSchemaRequest) String() string { return proto.CompactTextString(m) } func (*GetSrvVSchemaRequest) ProtoMessage() {} func (*GetSrvVSchemaRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{38} + return fileDescriptor_f41247b323a1ab2e, []int{39} } func (m *GetSrvVSchemaRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2288,7 +2677,7 @@ func (m *GetSrvVSchemaResponse) Reset() { *m = GetSrvVSchemaResponse{} } func (m *GetSrvVSchemaResponse) String() string { return proto.CompactTextString(m) } func (*GetSrvVSchemaResponse) ProtoMessage() {} func (*GetSrvVSchemaResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{39} + return fileDescriptor_f41247b323a1ab2e, []int{40} } func (m *GetSrvVSchemaResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2335,7 +2724,7 @@ func (m *GetTabletRequest) Reset() { *m = GetTabletRequest{} } func (m *GetTabletRequest) String() string { return proto.CompactTextString(m) } func (*GetTabletRequest) ProtoMessage() {} func (*GetTabletRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{40} + return fileDescriptor_f41247b323a1ab2e, []int{41} } func (m *GetTabletRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2382,7 +2771,7 @@ func (m *GetTabletResponse) Reset() { *m = GetTabletResponse{} } func (m *GetTabletResponse) String() string { return proto.CompactTextString(m) } func (*GetTabletResponse) ProtoMessage() {} func (*GetTabletResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{41} + return fileDescriptor_f41247b323a1ab2e, []int{42} } func (m *GetTabletResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2436,7 +2825,7 @@ func (m *GetTabletsRequest) Reset() { *m = GetTabletsRequest{} } func (m *GetTabletsRequest) String() string { return proto.CompactTextString(m) } func (*GetTabletsRequest) ProtoMessage() {} func (*GetTabletsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{42} + return fileDescriptor_f41247b323a1ab2e, []int{43} } func (m *GetTabletsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2497,7 +2886,7 @@ func (m *GetTabletsResponse) Reset() { *m = GetTabletsResponse{} } func (m *GetTabletsResponse) String() string { return proto.CompactTextString(m) } func (*GetTabletsResponse) ProtoMessage() {} func (*GetTabletsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{43} + return fileDescriptor_f41247b323a1ab2e, []int{44} } func (m *GetTabletsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2544,7 +2933,7 @@ func (m *GetVSchemaRequest) Reset() { *m = GetVSchemaRequest{} } func (m *GetVSchemaRequest) String() string { return proto.CompactTextString(m) } func (*GetVSchemaRequest) ProtoMessage() {} func (*GetVSchemaRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{44} + return fileDescriptor_f41247b323a1ab2e, []int{45} } func (m *GetVSchemaRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2591,7 +2980,7 @@ func (m *GetVSchemaResponse) Reset() { *m = GetVSchemaResponse{} } func (m *GetVSchemaResponse) String() string { return proto.CompactTextString(m) } func (*GetVSchemaResponse) ProtoMessage() {} func (*GetVSchemaResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{45} + return fileDescriptor_f41247b323a1ab2e, []int{46} } func (m *GetVSchemaResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2627,6 +3016,108 @@ func (m *GetVSchemaResponse) GetVSchema() *vschema.Keyspace { return nil } +type GetWorkflowsRequest struct { + Keyspace string `protobuf:"bytes,1,opt,name=keyspace,proto3" json:"keyspace,omitempty"` + ActiveOnly bool `protobuf:"varint,2,opt,name=active_only,json=activeOnly,proto3" json:"active_only,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetWorkflowsRequest) Reset() { *m = GetWorkflowsRequest{} } +func (m *GetWorkflowsRequest) String() string { return proto.CompactTextString(m) } +func (*GetWorkflowsRequest) ProtoMessage() {} +func (*GetWorkflowsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_f41247b323a1ab2e, []int{47} +} +func (m *GetWorkflowsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GetWorkflowsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GetWorkflowsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GetWorkflowsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetWorkflowsRequest.Merge(m, src) +} +func (m *GetWorkflowsRequest) XXX_Size() int { + return m.Size() +} +func (m *GetWorkflowsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetWorkflowsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetWorkflowsRequest proto.InternalMessageInfo + +func (m *GetWorkflowsRequest) GetKeyspace() string { + if m != nil { + return m.Keyspace + } + return "" +} + +func (m *GetWorkflowsRequest) GetActiveOnly() bool { + if m != nil { + return m.ActiveOnly + } + return false +} + +type GetWorkflowsResponse struct { + Workflows []*Workflow `protobuf:"bytes,1,rep,name=workflows,proto3" json:"workflows,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetWorkflowsResponse) Reset() { *m = GetWorkflowsResponse{} } +func (m *GetWorkflowsResponse) String() string { return proto.CompactTextString(m) } +func (*GetWorkflowsResponse) ProtoMessage() {} +func (*GetWorkflowsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_f41247b323a1ab2e, []int{48} +} +func (m *GetWorkflowsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GetWorkflowsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GetWorkflowsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GetWorkflowsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetWorkflowsResponse.Merge(m, src) +} +func (m *GetWorkflowsResponse) XXX_Size() int { + return m.Size() +} +func (m *GetWorkflowsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_GetWorkflowsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_GetWorkflowsResponse proto.InternalMessageInfo + +func (m *GetWorkflowsResponse) GetWorkflows() []*Workflow { + if m != nil { + return m.Workflows + } + return nil +} + type InitShardPrimaryRequest struct { Keyspace string `protobuf:"bytes,1,opt,name=keyspace,proto3" json:"keyspace,omitempty"` Shard string `protobuf:"bytes,2,opt,name=shard,proto3" json:"shard,omitempty"` @@ -2642,7 +3133,7 @@ func (m *InitShardPrimaryRequest) Reset() { *m = InitShardPrimaryRequest func (m *InitShardPrimaryRequest) String() string { return proto.CompactTextString(m) } func (*InitShardPrimaryRequest) ProtoMessage() {} func (*InitShardPrimaryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{46} + return fileDescriptor_f41247b323a1ab2e, []int{49} } func (m *InitShardPrimaryRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2717,7 +3208,7 @@ func (m *InitShardPrimaryResponse) Reset() { *m = InitShardPrimaryRespon func (m *InitShardPrimaryResponse) String() string { return proto.CompactTextString(m) } func (*InitShardPrimaryResponse) ProtoMessage() {} func (*InitShardPrimaryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{47} + return fileDescriptor_f41247b323a1ab2e, []int{50} } func (m *InitShardPrimaryResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2785,7 +3276,7 @@ func (m *PlannedReparentShardRequest) Reset() { *m = PlannedReparentShar func (m *PlannedReparentShardRequest) String() string { return proto.CompactTextString(m) } func (*PlannedReparentShardRequest) ProtoMessage() {} func (*PlannedReparentShardRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{48} + return fileDescriptor_f41247b323a1ab2e, []int{51} } func (m *PlannedReparentShardRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2869,7 +3360,7 @@ func (m *PlannedReparentShardResponse) Reset() { *m = PlannedReparentSha func (m *PlannedReparentShardResponse) String() string { return proto.CompactTextString(m) } func (*PlannedReparentShardResponse) ProtoMessage() {} func (*PlannedReparentShardResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{49} + return fileDescriptor_f41247b323a1ab2e, []int{52} } func (m *PlannedReparentShardResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2945,7 +3436,7 @@ func (m *RemoveKeyspaceCellRequest) Reset() { *m = RemoveKeyspaceCellReq func (m *RemoveKeyspaceCellRequest) String() string { return proto.CompactTextString(m) } func (*RemoveKeyspaceCellRequest) ProtoMessage() {} func (*RemoveKeyspaceCellRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{50} + return fileDescriptor_f41247b323a1ab2e, []int{53} } func (m *RemoveKeyspaceCellRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3012,7 +3503,7 @@ func (m *RemoveKeyspaceCellResponse) Reset() { *m = RemoveKeyspaceCellRe func (m *RemoveKeyspaceCellResponse) String() string { return proto.CompactTextString(m) } func (*RemoveKeyspaceCellResponse) ProtoMessage() {} func (*RemoveKeyspaceCellResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{51} + return fileDescriptor_f41247b323a1ab2e, []int{54} } func (m *RemoveKeyspaceCellResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3061,7 +3552,7 @@ func (m *RemoveShardCellRequest) Reset() { *m = RemoveShardCellRequest{} func (m *RemoveShardCellRequest) String() string { return proto.CompactTextString(m) } func (*RemoveShardCellRequest) ProtoMessage() {} func (*RemoveShardCellRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{52} + return fileDescriptor_f41247b323a1ab2e, []int{55} } func (m *RemoveShardCellRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3135,7 +3626,7 @@ func (m *RemoveShardCellResponse) Reset() { *m = RemoveShardCellResponse func (m *RemoveShardCellResponse) String() string { return proto.CompactTextString(m) } func (*RemoveShardCellResponse) ProtoMessage() {} func (*RemoveShardCellResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{53} + return fileDescriptor_f41247b323a1ab2e, []int{56} } func (m *RemoveShardCellResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3177,7 +3668,7 @@ func (m *ReparentTabletRequest) Reset() { *m = ReparentTabletRequest{} } func (m *ReparentTabletRequest) String() string { return proto.CompactTextString(m) } func (*ReparentTabletRequest) ProtoMessage() {} func (*ReparentTabletRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{54} + return fileDescriptor_f41247b323a1ab2e, []int{57} } func (m *ReparentTabletRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3229,7 +3720,7 @@ func (m *ReparentTabletResponse) Reset() { *m = ReparentTabletResponse{} func (m *ReparentTabletResponse) String() string { return proto.CompactTextString(m) } func (*ReparentTabletResponse) ProtoMessage() {} func (*ReparentTabletResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{55} + return fileDescriptor_f41247b323a1ab2e, []int{58} } func (m *ReparentTabletResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3292,7 +3783,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_f41247b323a1ab2e, []int{56} + return fileDescriptor_f41247b323a1ab2e, []int{59} } func (m *TabletExternallyReparentedRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3342,7 +3833,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_f41247b323a1ab2e, []int{57} + return fileDescriptor_f41247b323a1ab2e, []int{60} } func (m *TabletExternallyReparentedResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3406,6 +3897,12 @@ func init() { proto.RegisterType((*MaterializeSettings)(nil), "vtctldata.MaterializeSettings") proto.RegisterType((*Keyspace)(nil), "vtctldata.Keyspace") proto.RegisterType((*Shard)(nil), "vtctldata.Shard") + proto.RegisterType((*Workflow)(nil), "vtctldata.Workflow") + proto.RegisterMapType((map[string]*Workflow_ShardReplicationStatus)(nil), "vtctldata.Workflow.ShardStatusesEntry") + proto.RegisterType((*Workflow_ReplicationLocation)(nil), "vtctldata.Workflow.ReplicationLocation") + proto.RegisterType((*Workflow_ReplicationStatus)(nil), "vtctldata.Workflow.ReplicationStatus") + proto.RegisterType((*Workflow_ReplicationStatus_CopyState)(nil), "vtctldata.Workflow.ReplicationStatus.CopyState") + proto.RegisterType((*Workflow_ShardReplicationStatus)(nil), "vtctldata.Workflow.ShardReplicationStatus") proto.RegisterType((*ChangeTabletTypeRequest)(nil), "vtctldata.ChangeTabletTypeRequest") proto.RegisterType((*ChangeTabletTypeResponse)(nil), "vtctldata.ChangeTabletTypeResponse") proto.RegisterType((*CreateKeyspaceRequest)(nil), "vtctldata.CreateKeyspaceRequest") @@ -3448,6 +3945,8 @@ func init() { proto.RegisterType((*GetTabletsResponse)(nil), "vtctldata.GetTabletsResponse") proto.RegisterType((*GetVSchemaRequest)(nil), "vtctldata.GetVSchemaRequest") proto.RegisterType((*GetVSchemaResponse)(nil), "vtctldata.GetVSchemaResponse") + proto.RegisterType((*GetWorkflowsRequest)(nil), "vtctldata.GetWorkflowsRequest") + proto.RegisterType((*GetWorkflowsResponse)(nil), "vtctldata.GetWorkflowsResponse") proto.RegisterType((*InitShardPrimaryRequest)(nil), "vtctldata.InitShardPrimaryRequest") proto.RegisterType((*InitShardPrimaryResponse)(nil), "vtctldata.InitShardPrimaryResponse") proto.RegisterType((*PlannedReparentShardRequest)(nil), "vtctldata.PlannedReparentShardRequest") @@ -3465,137 +3964,166 @@ func init() { func init() { proto.RegisterFile("vtctldata.proto", fileDescriptor_f41247b323a1ab2e) } var fileDescriptor_f41247b323a1ab2e = []byte{ - // 2067 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xcb, 0x6f, 0x1c, 0x49, - 0x19, 0xa7, 0x67, 0xc6, 0xe3, 0x99, 0x6f, 0x1e, 0x76, 0xda, 0x63, 0xbb, 0xe3, 0x4d, 0x4c, 0xb6, - 0x43, 0x82, 0x09, 0xec, 0x4c, 0xd6, 0x2b, 0xa2, 0x28, 0x2c, 0x28, 0x89, 0x3d, 0x8e, 0xbc, 0xbb, - 0x18, 0xd3, 0xb6, 0x82, 0x04, 0x12, 0xad, 0x72, 0x77, 0xcd, 0xa4, 0xe5, 0x9e, 0xee, 0xd9, 0xae, - 0x9a, 0xb1, 0x67, 0x39, 0x70, 0x81, 0xc3, 0x4a, 0x48, 0x5c, 0x91, 0xf6, 0xc2, 0x89, 0x3f, 0x61, - 0x0f, 0x08, 0x71, 0x44, 0x1c, 0xb9, 0x72, 0x43, 0xe1, 0xcf, 0xe0, 0x82, 0xea, 0x39, 0x3d, 0x3d, - 0x8f, 0x75, 0xbc, 0x91, 0x10, 0x27, 0x77, 0x7d, 0x8f, 0xfa, 0x7e, 0xf5, 0xbd, 0xea, 0xab, 0x31, - 0xac, 0x0c, 0xa9, 0x47, 0x43, 0x1f, 0x51, 0xd4, 0xec, 0x27, 0x31, 0x8d, 0xcd, 0xb2, 0x26, 0x6c, - 0xd5, 0xc2, 0xb8, 0x3b, 0xa0, 0x41, 0x28, 0x38, 0x5b, 0xf5, 0xde, 0x88, 0x7c, 0x1a, 0x7a, 0x54, - 0xad, 0x37, 0x29, 0x3a, 0x0b, 0x31, 0xed, 0xa1, 0x08, 0x75, 0x71, 0x32, 0xde, 0x62, 0xab, 0x4e, - 0xe3, 0x7e, 0x9c, 0x5a, 0xd7, 0x86, 0xc4, 0x7b, 0x85, 0x7b, 0x6a, 0x59, 0x1d, 0x52, 0x1a, 0xf4, - 0xb0, 0x58, 0xd9, 0x3f, 0x83, 0xad, 0xf6, 0x25, 0xf6, 0x06, 0x14, 0xbf, 0x64, 0x86, 0xf7, 0xe2, - 0x5e, 0x0f, 0x45, 0xbe, 0x83, 0x3f, 0x1d, 0x60, 0x42, 0x4d, 0x13, 0x0a, 0x28, 0xe9, 0x12, 0xcb, - 0xb8, 0x93, 0xdf, 0x29, 0x3b, 0xfc, 0xdb, 0xbc, 0x07, 0x75, 0xe4, 0xd1, 0x20, 0x8e, 0x5c, 0xb6, - 0x4d, 0x3c, 0xa0, 0x56, 0xee, 0x8e, 0xb1, 0x93, 0x77, 0x6a, 0x82, 0x7a, 0x2a, 0x88, 0xf6, 0x1e, - 0xbc, 0x33, 0x73, 0x63, 0xd2, 0x8f, 0x23, 0x82, 0xcd, 0x6f, 0xc1, 0x12, 0x1e, 0xe2, 0x88, 0x5a, - 0xc6, 0x1d, 0x63, 0xa7, 0xb2, 0x5b, 0x6f, 0xaa, 0xc3, 0xb6, 0x19, 0xd5, 0x11, 0x4c, 0xfb, 0x73, - 0x03, 0xac, 0x53, 0x76, 0xcc, 0x1f, 0x23, 0x8a, 0x93, 0x00, 0x85, 0xc1, 0x67, 0xf8, 0x04, 0x53, - 0x1a, 0x44, 0x5d, 0x62, 0xbe, 0x0b, 0x55, 0x8a, 0x92, 0x2e, 0xa6, 0x2e, 0xf7, 0x04, 0xdf, 0xa9, - 0xec, 0x54, 0x04, 0x8d, 0x6b, 0x99, 0xdf, 0x85, 0x1b, 0x24, 0x1e, 0x24, 0x1e, 0x76, 0xf1, 0x65, - 0x3f, 0xc1, 0x84, 0x04, 0x71, 0xc4, 0xe1, 0x96, 0x9d, 0x55, 0xc1, 0x68, 0x6b, 0xba, 0x79, 0x1b, - 0xc0, 0x4b, 0x30, 0xa2, 0xd8, 0xf5, 0xfd, 0xd0, 0xca, 0x73, 0xa9, 0xb2, 0xa0, 0xec, 0xfb, 0xa1, - 0xfd, 0xcf, 0x1c, 0xac, 0xcd, 0x82, 0xb1, 0x05, 0xa5, 0x8b, 0x38, 0x39, 0xef, 0x84, 0xf1, 0x85, - 0x84, 0xa0, 0xd7, 0xe6, 0xb7, 0x61, 0x45, 0xda, 0x3f, 0xc7, 0x23, 0xd2, 0x47, 0x1e, 0x96, 0xd6, - 0xeb, 0x82, 0xfc, 0xb1, 0xa4, 0x32, 0x41, 0x79, 0x16, 0x2d, 0x28, 0x00, 0xd4, 0x05, 0x59, 0x0b, - 0xde, 0x87, 0x15, 0x42, 0xe3, 0xbe, 0x8b, 0x3a, 0x14, 0x27, 0xae, 0x17, 0xf7, 0x47, 0x56, 0xe1, - 0x8e, 0xb1, 0x53, 0x72, 0x6a, 0x8c, 0xfc, 0x8c, 0x51, 0xf7, 0xe2, 0xfe, 0xc8, 0xfc, 0x08, 0xea, - 0xdc, 0x2b, 0x2e, 0x91, 0x38, 0xad, 0xa5, 0x3b, 0xf9, 0x9d, 0xca, 0xee, 0xdd, 0xe6, 0x38, 0xe3, - 0xe6, 0x79, 0xd6, 0xa9, 0x71, 0x55, 0x7d, 0x42, 0x13, 0x0a, 0x1e, 0x0e, 0x43, 0xab, 0xc8, 0x11, - 0xf1, 0x6f, 0xe1, 0x7c, 0x96, 0x7f, 0x2e, 0x1d, 0xf5, 0x31, 0xb1, 0x96, 0x95, 0xf3, 0x19, 0xed, - 0x94, 0x91, 0xcc, 0xef, 0xc0, 0x2a, 0xbe, 0xa4, 0x38, 0x89, 0x50, 0xe8, 0x7a, 0xe1, 0x80, 0x50, - 0x9c, 0x58, 0x25, 0x2e, 0xb6, 0xa2, 0xe8, 0x7b, 0x82, 0x6c, 0x1f, 0x41, 0x49, 0x9f, 0xd0, 0x84, - 0x42, 0x84, 0x7a, 0x2a, 0x9c, 0xfc, 0xdb, 0x6c, 0x42, 0x69, 0xc2, 0x81, 0x95, 0x5d, 0xb3, 0xa9, - 0xb3, 0x5c, 0x69, 0x3a, 0x5a, 0xc6, 0xfe, 0x25, 0x2c, 0x9d, 0xbc, 0x42, 0x89, 0xcf, 0x82, 0xa3, - 0x15, 0x65, 0x70, 0xce, 0xb3, 0x86, 0x72, 0x29, 0x43, 0xf7, 0x60, 0x89, 0x30, 0x45, 0xee, 0xfd, - 0xca, 0xee, 0xca, 0xd8, 0x0a, 0xdf, 0xcf, 0x11, 0x5c, 0xfb, 0x0b, 0x03, 0x36, 0xf7, 0x5e, 0xa1, - 0xa8, 0x8b, 0x4f, 0xf5, 0x81, 0x55, 0xcd, 0x3c, 0xd6, 0x9e, 0x41, 0x61, 0x80, 0x88, 0x4c, 0xf0, - 0xf5, 0xf1, 0x4e, 0x42, 0xe5, 0x19, 0x63, 0x2a, 0x87, 0xf1, 0x85, 0xf9, 0x1e, 0x2c, 0xfb, 0x67, - 0xdc, 0x9f, 0x1c, 0x53, 0x7d, 0xb7, 0x91, 0x55, 0xe2, 0x76, 0x8a, 0xfe, 0x19, 0xfb, 0x6b, 0x6e, - 0xc2, 0xb2, 0x9f, 0x8c, 0xdc, 0x64, 0x10, 0x71, 0xb4, 0x25, 0xa7, 0xe8, 0x27, 0x23, 0x67, 0x10, - 0xd9, 0x7f, 0x32, 0xc0, 0x9a, 0x46, 0x27, 0x0b, 0xef, 0xfb, 0x50, 0x3b, 0xc3, 0x9d, 0x38, 0xc1, - 0xa2, 0x6a, 0x54, 0x01, 0xae, 0x66, 0x4d, 0x39, 0x55, 0x21, 0x26, 0x56, 0xe6, 0x07, 0x50, 0x15, - 0x29, 0x27, 0xb5, 0x72, 0x73, 0xb4, 0x2a, 0x5c, 0x4a, 0x2a, 0x6d, 0x43, 0xe5, 0x02, 0x11, 0x77, - 0x12, 0x65, 0xf9, 0x02, 0x91, 0x7d, 0x01, 0xf4, 0xcb, 0x3c, 0xac, 0xef, 0xf1, 0x02, 0xd3, 0x31, - 0x1c, 0x37, 0x9e, 0xa9, 0x24, 0x68, 0xc0, 0x52, 0x27, 0x4e, 0x64, 0x06, 0x94, 0x1c, 0xb1, 0x30, - 0x5b, 0xd0, 0x40, 0x61, 0x18, 0x5f, 0xb8, 0xb8, 0xd7, 0xa7, 0x23, 0x77, 0xe8, 0x8a, 0x66, 0x27, - 0x8d, 0xdd, 0xe0, 0xbc, 0x36, 0x63, 0xbd, 0x3c, 0xe1, 0x0c, 0xf3, 0x21, 0x34, 0x78, 0x10, 0x83, - 0xa8, 0xeb, 0x7a, 0x71, 0x38, 0xe8, 0x45, 0x2e, 0x37, 0x55, 0xe0, 0xa6, 0x4c, 0xc5, 0xdb, 0xe3, - 0xac, 0x23, 0x66, 0xf8, 0xa3, 0x69, 0x0d, 0x1e, 0xa4, 0x25, 0x1e, 0x24, 0x6b, 0x3a, 0x13, 0x0f, - 0x7d, 0xee, 0xf2, 0xcc, 0x5e, 0x3c, 0x68, 0x4f, 0xa1, 0x4a, 0x70, 0x32, 0xc4, 0xbe, 0xdb, 0x49, - 0xe2, 0x1e, 0xb1, 0x8a, 0xbc, 0x2a, 0x6f, 0x4f, 0xef, 0xd1, 0x3c, 0xe1, 0x62, 0x07, 0x49, 0xdc, - 0x73, 0x2a, 0x44, 0x7f, 0x13, 0xf3, 0x01, 0x14, 0xb8, 0xf5, 0x65, 0x6e, 0x7d, 0x63, 0x5a, 0x93, - 0xdb, 0xe6, 0x32, 0xe6, 0x5d, 0xa8, 0x9d, 0x21, 0x92, 0xea, 0x3e, 0xa2, 0xfe, 0xaa, 0x8c, 0xa8, - 0x0b, 0xee, 0x7d, 0xa8, 0x91, 0x08, 0xf5, 0xc9, 0xab, 0x98, 0xf2, 0x96, 0x6e, 0x95, 0x79, 0x6c, - 0xab, 0x4d, 0x79, 0x51, 0xb0, 0x8e, 0xee, 0x54, 0x95, 0x08, 0x5b, 0xd9, 0x87, 0xb0, 0x91, 0x8d, - 0x9b, 0x4c, 0xaf, 0x56, 0xa6, 0xe0, 0x2a, 0xbb, 0x6b, 0xa9, 0x8e, 0x33, 0xa3, 0x54, 0x7f, 0x67, - 0x80, 0x29, 0xf6, 0x12, 0x15, 0x26, 0x13, 0x60, 0x51, 0xe1, 0xde, 0x06, 0xe0, 0x9e, 0x75, 0x53, - 0xe5, 0x5b, 0xe6, 0x94, 0xa3, 0x89, 0x3c, 0xc9, 0xa7, 0xf3, 0xe4, 0x1e, 0xd4, 0x83, 0xc8, 0x0b, - 0x07, 0x3e, 0x76, 0xfb, 0x28, 0x61, 0x37, 0x8f, 0xec, 0x9b, 0x92, 0x7a, 0xcc, 0x89, 0xf6, 0x1f, - 0x0d, 0x58, 0x9b, 0x80, 0x73, 0xcd, 0x73, 0x99, 0xf7, 0x55, 0x27, 0x51, 0x95, 0x32, 0x96, 0x4e, - 0xb7, 0x12, 0x9d, 0x8e, 0x2e, 0x0a, 0x13, 0x8c, 0xfc, 0x91, 0x8b, 0x2f, 0x03, 0x42, 0x89, 0x04, - 0x2f, 0x52, 0xe8, 0x99, 0x60, 0xb5, 0x39, 0xc7, 0xfe, 0x29, 0xac, 0xef, 0xe3, 0x10, 0x4f, 0x17, - 0xcd, 0x22, 0x9f, 0xdd, 0x82, 0x72, 0x82, 0xbd, 0x41, 0x42, 0x82, 0xa1, 0x2a, 0xa0, 0x31, 0xc1, - 0xb6, 0x60, 0x23, 0xbb, 0xa5, 0x38, 0xb7, 0xfd, 0x5b, 0x03, 0xd6, 0x04, 0x8b, 0xa3, 0x26, 0xca, - 0xd6, 0x0e, 0x14, 0x39, 0x34, 0x31, 0x1b, 0xcc, 0x3a, 0x9f, 0xe4, 0x2f, 0xb6, 0xcc, 0xee, 0x33, - 0x76, 0xd5, 0xbb, 0x41, 0xc7, 0x65, 0x49, 0x1e, 0x44, 0x5d, 0x15, 0x17, 0x46, 0x3e, 0xec, 0x9c, - 0x08, 0xa2, 0xbd, 0x01, 0x8d, 0x49, 0x18, 0x12, 0xdf, 0x48, 0xd1, 0x45, 0xcb, 0xd1, 0xf8, 0x3e, - 0x94, 0xf7, 0x9f, 0xec, 0xc2, 0x58, 0xe1, 0x9c, 0xd3, 0x87, 0x6b, 0xa9, 0x3e, 0x8c, 0x09, 0xab, - 0x1b, 0xd1, 0x54, 0xfa, 0x49, 0xd0, 0x43, 0xc9, 0x48, 0xe2, 0xae, 0x72, 0xe2, 0xb1, 0xa0, 0xd9, - 0x9b, 0x2a, 0x0e, 0xda, 0xb4, 0xc4, 0xf4, 0xfb, 0x1c, 0xdc, 0x6e, 0xf7, 0x70, 0xd2, 0xc5, 0x91, - 0x37, 0x72, 0xb0, 0x48, 0xb7, 0x2b, 0x67, 0x77, 0x23, 0x9d, 0x38, 0x65, 0x95, 0x26, 0x8f, 0xa0, - 0x12, 0xe1, 0x31, 0x9e, 0xfc, 0xa2, 0x4b, 0x05, 0x22, 0xac, 0x40, 0x9a, 0x3f, 0x82, 0x95, 0xa0, - 0x1b, 0xb1, 0x76, 0x9f, 0xe0, 0x7e, 0x18, 0x78, 0x88, 0x58, 0x85, 0x45, 0x8e, 0xa8, 0x0b, 0x69, - 0x47, 0x0a, 0x9b, 0xfb, 0xb0, 0x7e, 0x81, 0x02, 0xaa, 0xb5, 0xf5, 0xd0, 0xb7, 0xa4, 0xd3, 0x9a, - 0x37, 0x89, 0xfd, 0x41, 0x82, 0xd8, 0xf8, 0xe7, 0xac, 0x31, 0x71, 0xa5, 0xae, 0x86, 0xc1, 0xbf, - 0x18, 0xb0, 0x3d, 0xcf, 0x23, 0xb2, 0xc0, 0xde, 0xdc, 0x25, 0x4f, 0x61, 0xb5, 0x9f, 0xc4, 0xbd, - 0x98, 0x62, 0xff, 0x6a, 0x7e, 0x59, 0x51, 0xe2, 0xca, 0x39, 0xf7, 0xa1, 0xc8, 0xe7, 0x4c, 0xe5, - 0x93, 0xec, 0x14, 0x2a, 0xb9, 0xf6, 0x87, 0xb0, 0x7d, 0x10, 0x44, 0xfe, 0xb3, 0x30, 0x14, 0xd9, - 0x77, 0x18, 0xbd, 0x41, 0xe9, 0xd9, 0x7f, 0x35, 0xe0, 0x9b, 0x73, 0xd5, 0xe5, 0xe9, 0x8f, 0x32, - 0xe5, 0xf4, 0x28, 0x55, 0x4e, 0x5f, 0xa1, 0x2b, 0xca, 0x8d, 0xb4, 0x23, 0x9a, 0x8c, 0x54, 0xd1, - 0x6d, 0x7d, 0x0c, 0x95, 0x14, 0xd9, 0x5c, 0x85, 0xfc, 0x39, 0x1e, 0x49, 0x64, 0xec, 0x93, 0xb5, - 0xa7, 0x21, 0x0a, 0x07, 0x78, 0x7e, 0x7b, 0xe2, 0xec, 0x27, 0xb9, 0xc7, 0x86, 0xdd, 0x86, 0x1b, - 0x2f, 0x30, 0x7d, 0x8e, 0xbc, 0xf3, 0x41, 0x9f, 0x5c, 0x3b, 0x85, 0xed, 0x7d, 0x30, 0xd3, 0xdb, - 0xc8, 0x93, 0x37, 0x61, 0xf9, 0x4c, 0x90, 0xe4, 0xd1, 0x1b, 0x4d, 0xfd, 0xd0, 0x11, 0xb2, 0x87, - 0x51, 0x27, 0x76, 0x94, 0x90, 0x7d, 0x13, 0x36, 0x5f, 0x60, 0xba, 0x87, 0xc3, 0x90, 0xd1, 0x59, - 0xc3, 0x57, 0x90, 0xec, 0x87, 0x60, 0x4d, 0xb3, 0xa4, 0x99, 0x06, 0x2c, 0xb1, 0xdb, 0x42, 0x3d, - 0x65, 0xc4, 0xc2, 0xde, 0xe1, 0x90, 0x94, 0x46, 0x6a, 0xf8, 0xe0, 0xf3, 0xae, 0x31, 0x9e, 0x77, - 0xed, 0x03, 0x58, 0x9b, 0x90, 0xd4, 0xd7, 0x42, 0x99, 0xb1, 0xdd, 0x20, 0xea, 0xc4, 0xf2, 0x5e, - 0x48, 0x4d, 0xa6, 0x5a, 0xbc, 0xe4, 0xc9, 0x2f, 0xd6, 0x69, 0xe5, 0x3e, 0x44, 0x36, 0x1b, 0x85, - 0xfe, 0x4b, 0x43, 0x9f, 0x6c, 0xcc, 0x92, 0x66, 0x0e, 0x61, 0x79, 0xb2, 0x8d, 0xb5, 0x52, 0xf1, - 0x9a, 0xa3, 0xd4, 0x94, 0x6b, 0x91, 0x18, 0x4a, 0x7f, 0xeb, 0x18, 0xaa, 0x69, 0xc6, 0x8c, 0xd4, - 0x78, 0x30, 0x99, 0x1a, 0x8d, 0xc9, 0xf3, 0x08, 0x33, 0xe9, 0xf4, 0x58, 0xe7, 0xae, 0x51, 0x69, - 0xa9, 0xcf, 0x73, 0x08, 0x8d, 0x49, 0xb2, 0x3c, 0xcb, 0xfb, 0x50, 0x56, 0x89, 0xa2, 0x4e, 0x33, - 0xf3, 0x2a, 0x1d, 0x4b, 0xd9, 0x0f, 0x79, 0x98, 0xde, 0xa4, 0xe6, 0x0e, 0x26, 0x30, 0x5d, 0x7f, - 0x3a, 0xf9, 0x4d, 0x0e, 0x56, 0x5f, 0x60, 0x2a, 0x46, 0xc7, 0xaf, 0x3f, 0xe1, 0x6f, 0x40, 0x91, - 0x2f, 0x89, 0x95, 0xe3, 0x69, 0x28, 0x57, 0x6c, 0x38, 0xc1, 0x97, 0x62, 0x38, 0x91, 0xfc, 0x3c, - 0xe7, 0xd7, 0x24, 0xf5, 0x54, 0x88, 0xdd, 0x05, 0x35, 0xad, 0xb8, 0xc3, 0x00, 0x5f, 0x10, 0x79, - 0x55, 0x56, 0x25, 0xf1, 0x25, 0xa3, 0x99, 0x3b, 0xb0, 0x2a, 0x5e, 0x7e, 0x3c, 0xc5, 0xdd, 0x38, - 0x0a, 0x47, 0xbc, 0x59, 0x97, 0x1c, 0x71, 0x23, 0xf2, 0xba, 0xf8, 0x49, 0x14, 0x8e, 0xc6, 0x92, - 0x24, 0xf8, 0x4c, 0x49, 0x16, 0x53, 0x92, 0x27, 0x8c, 0xcc, 0x24, 0xed, 0x63, 0xde, 0x01, 0x94, - 0x17, 0xa4, 0x33, 0x7f, 0x00, 0x45, 0x39, 0x6b, 0x0b, 0x07, 0xdc, 0x6d, 0x4e, 0xff, 0x22, 0x21, - 0x54, 0xf6, 0x71, 0x27, 0x88, 0x02, 0x7e, 0x3d, 0x48, 0x15, 0xfb, 0x13, 0x58, 0x61, 0x3b, 0xbe, - 0x9d, 0x91, 0xcf, 0x7e, 0x22, 0xa2, 0x34, 0x71, 0xa1, 0xe8, 0x01, 0xcc, 0x58, 0x38, 0x80, 0xd9, - 0x0f, 0x78, 0x9e, 0x9e, 0x24, 0xc3, 0x97, 0x93, 0x51, 0x9e, 0xd5, 0x05, 0x8e, 0x60, 0x3d, 0x23, - 0xab, 0x5f, 0x55, 0x55, 0x92, 0x0c, 0xc7, 0xaf, 0x0f, 0x9d, 0x5c, 0xf2, 0xa7, 0x97, 0x94, 0x0a, - 0x10, 0xfd, 0x6d, 0x7f, 0xc2, 0x71, 0xcb, 0xa7, 0xd3, 0xd7, 0xcd, 0x2e, 0xfb, 0x87, 0x3c, 0x4a, - 0x6a, 0x37, 0x89, 0x6c, 0x47, 0xa6, 0xdc, 0xfc, 0x87, 0x9e, 0xe4, 0xdb, 0xbf, 0x48, 0xa9, 0x5f, - 0xbf, 0xcd, 0x33, 0x2a, 0xf3, 0x95, 0x4a, 0x61, 0xb1, 0xb0, 0x9f, 0xf2, 0x12, 0xce, 0x4c, 0x4a, - 0xe6, 0x03, 0x58, 0x16, 0xc6, 0xc7, 0x63, 0x64, 0x16, 0x9d, 0x12, 0xb0, 0x5b, 0x1c, 0x5e, 0x26, - 0x48, 0x8b, 0x7a, 0xc0, 0x73, 0x6e, 0x32, 0x1b, 0xa9, 0xef, 0x41, 0x29, 0x13, 0xa5, 0x1b, 0x3a, - 0x4a, 0xba, 0x01, 0x2c, 0x0f, 0x65, 0x80, 0xfe, 0x63, 0xc0, 0xe6, 0x61, 0x14, 0x88, 0xd4, 0x92, - 0x63, 0xc3, 0xf5, 0x5d, 0xe3, 0xc0, 0x96, 0x1c, 0x54, 0x5c, 0x1c, 0x62, 0x4f, 0xfe, 0x70, 0xa5, - 0x02, 0xbd, 0x70, 0x76, 0xd9, 0x94, 0x8a, 0x6d, 0xa6, 0x97, 0x62, 0x8c, 0x5f, 0x3b, 0x85, 0xf4, - 0x6b, 0xe7, 0xed, 0x8c, 0x6d, 0xcf, 0xc1, 0x9a, 0x3e, 0xbc, 0x2e, 0x2f, 0x35, 0x3b, 0x19, 0x0b, - 0x67, 0xa7, 0xcf, 0x73, 0xf0, 0xce, 0x71, 0x88, 0xa2, 0x08, 0xfb, 0xff, 0xe3, 0x51, 0xf8, 0x09, - 0xd4, 0xd0, 0x30, 0x0e, 0xc6, 0xc3, 0x62, 0x61, 0x91, 0x66, 0x95, 0xcb, 0x2a, 0xdd, 0xb7, 0xe3, - 0xcf, 0x3f, 0x1b, 0x70, 0x6b, 0xb6, 0x2f, 0xfe, 0x0f, 0x86, 0xe0, 0x5f, 0xc3, 0x4d, 0x07, 0xf7, - 0xe2, 0xa1, 0x7e, 0x23, 0xb2, 0x69, 0xe0, 0x2a, 0x51, 0x54, 0x8d, 0x34, 0x97, 0xfa, 0xf9, 0x70, - 0xf6, 0x1b, 0x7d, 0xe2, 0xa9, 0x58, 0xc8, 0x3e, 0x52, 0x6f, 0xc1, 0xd6, 0x2c, 0x00, 0xf2, 0xd1, - 0xf5, 0x85, 0x01, 0x1b, 0x82, 0xcd, 0x5d, 0x7a, 0x55, 0x70, 0x5f, 0xf1, 0x5b, 0x82, 0xc2, 0x9e, - 0x9f, 0x85, 0xbd, 0x30, 0x17, 0xfb, 0x52, 0x16, 0xfb, 0x4d, 0xd8, 0x9c, 0x02, 0x27, 0x81, 0x1f, - 0xc0, 0xba, 0x4a, 0x86, 0xc9, 0x8b, 0xe0, 0xbd, 0x4c, 0xe7, 0x9e, 0x13, 0x50, 0xd5, 0xbe, 0x7f, - 0xc5, 0xce, 0x3f, 0xb9, 0xcf, 0xb5, 0xb3, 0xaa, 0x05, 0xcb, 0x57, 0x4a, 0x26, 0x25, 0x65, 0x3b, - 0xf0, 0xae, 0xa0, 0xb7, 0xe5, 0x2f, 0xbb, 0xa1, 0x7e, 0xe6, 0x61, 0xff, 0x9a, 0x07, 0xfa, 0x9b, - 0x01, 0xf6, 0xa2, 0x4d, 0xaf, 0x7d, 0xba, 0xeb, 0x36, 0x90, 0x47, 0x50, 0x89, 0xc3, 0x2b, 0xb6, - 0x0f, 0x88, 0x43, 0x55, 0x61, 0xcf, 0x1f, 0xff, 0xfd, 0xf5, 0xb6, 0xf1, 0x8f, 0xd7, 0xdb, 0xc6, - 0xbf, 0x5e, 0x6f, 0x1b, 0x7f, 0xf8, 0xf7, 0xf6, 0x37, 0x7e, 0x7e, 0x7f, 0x18, 0x50, 0x4c, 0x48, - 0x33, 0x88, 0x5b, 0xe2, 0xab, 0xd5, 0x8d, 0x5b, 0x43, 0xda, 0xe2, 0xff, 0x93, 0x69, 0xe9, 0x41, - 0xe5, 0xac, 0xc8, 0x09, 0x1f, 0xfc, 0x37, 0x00, 0x00, 0xff, 0xff, 0xec, 0x14, 0x9e, 0x42, 0x27, - 0x1a, 0x00, 0x00, + // 2542 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x39, 0xcb, 0x6f, 0x1b, 0xc7, + 0xf9, 0xbf, 0xa5, 0x28, 0x4a, 0xfc, 0xf8, 0x90, 0x3c, 0xa2, 0xa4, 0x0d, 0x63, 0x2b, 0xce, 0xfa, + 0x67, 0x45, 0x75, 0x63, 0xd2, 0x56, 0x50, 0xc3, 0x70, 0x93, 0xd6, 0xb6, 0x1e, 0x86, 0x12, 0xc7, + 0x55, 0x57, 0xaa, 0x03, 0xb4, 0x40, 0x17, 0xa3, 0xdd, 0x11, 0xbd, 0xd0, 0x72, 0x97, 0xd9, 0x19, + 0x52, 0x62, 0x7a, 0xe8, 0xa5, 0x3d, 0x04, 0x2d, 0xd0, 0x6b, 0x81, 0x5c, 0x7a, 0xea, 0x3f, 0x50, + 0x20, 0x87, 0xa2, 0xe8, 0xb1, 0xe8, 0xb1, 0xd7, 0xde, 0x0a, 0xf7, 0x8f, 0xe8, 0xa1, 0x97, 0x62, + 0x9e, 0x5c, 0x3e, 0x44, 0xcb, 0x8a, 0x81, 0xa2, 0x27, 0xee, 0x7c, 0x8f, 0x99, 0x6f, 0xbe, 0xf7, + 0x37, 0x84, 0x85, 0x1e, 0xf3, 0x59, 0x14, 0x60, 0x86, 0x1b, 0x9d, 0x34, 0x61, 0x09, 0x2a, 0x1a, + 0x40, 0x7d, 0xf1, 0x28, 0x8c, 0xa3, 0xa4, 0x35, 0x40, 0xd6, 0x2b, 0x51, 0xd2, 0xea, 0xb2, 0x30, + 0x52, 0xcb, 0x6a, 0xbb, 0x4f, 0x3f, 0x8f, 0x7c, 0xa6, 0xd7, 0xab, 0x0c, 0x1f, 0x45, 0x84, 0xb5, + 0x71, 0x8c, 0x5b, 0x24, 0xcd, 0xf0, 0x55, 0x59, 0xd2, 0x49, 0xb2, 0xfb, 0xf4, 0xa8, 0xff, 0x82, + 0xb4, 0xf5, 0xb2, 0xdc, 0x63, 0x2c, 0x6c, 0x13, 0xb9, 0x72, 0x3e, 0x83, 0xfa, 0xce, 0x19, 0xf1, + 0xbb, 0x8c, 0x3c, 0xe7, 0xa2, 0x6c, 0x25, 0xed, 0x36, 0x8e, 0x03, 0x97, 0x7c, 0xde, 0x25, 0x94, + 0x21, 0x04, 0x79, 0x9c, 0xb6, 0xa8, 0x6d, 0x5d, 0x9f, 0xd9, 0x28, 0xba, 0xe2, 0x1b, 0xdd, 0x84, + 0x2a, 0xf6, 0x59, 0x98, 0xc4, 0x1e, 0xdf, 0x26, 0xe9, 0x32, 0x3b, 0x77, 0xdd, 0xda, 0x98, 0x71, + 0x2b, 0x12, 0x7a, 0x28, 0x81, 0xce, 0x16, 0xbc, 0x3d, 0x71, 0x63, 0xda, 0x49, 0x62, 0x4a, 0xd0, + 0xff, 0xc3, 0x2c, 0xe9, 0x91, 0x98, 0xd9, 0xd6, 0x75, 0x6b, 0xa3, 0xb4, 0x59, 0x6d, 0xe8, 0xcb, + 0xee, 0x70, 0xa8, 0x2b, 0x91, 0xce, 0x97, 0x16, 0xd8, 0x87, 0xfc, 0x9a, 0x9f, 0x62, 0x46, 0xd2, + 0x10, 0x47, 0xe1, 0x17, 0xe4, 0x80, 0x30, 0x16, 0xc6, 0x2d, 0x8a, 0xde, 0x85, 0x32, 0xc3, 0x69, + 0x8b, 0x30, 0x4f, 0x68, 0x42, 0xec, 0x54, 0x74, 0x4b, 0x12, 0x26, 0xb8, 0xd0, 0xb7, 0xe1, 0x0a, + 0x4d, 0xba, 0xa9, 0x4f, 0x3c, 0x72, 0xd6, 0x49, 0x09, 0xa5, 0x61, 0x12, 0x0b, 0x71, 0x8b, 0xee, + 0xa2, 0x44, 0xec, 0x18, 0x38, 0xba, 0x06, 0xe0, 0xa7, 0x04, 0x33, 0xe2, 0x05, 0x41, 0x64, 0xcf, + 0x08, 0xaa, 0xa2, 0x84, 0x6c, 0x07, 0x91, 0xf3, 0xf7, 0x1c, 0x2c, 0x4d, 0x12, 0xa3, 0x0e, 0xf3, + 0xa7, 0x49, 0x7a, 0x72, 0x1c, 0x25, 0xa7, 0x4a, 0x04, 0xb3, 0x46, 0xef, 0xc1, 0x82, 0x3a, 0xff, + 0x84, 0xf4, 0x69, 0x07, 0xfb, 0x44, 0x9d, 0x5e, 0x95, 0xe0, 0x4f, 0x14, 0x94, 0x13, 0xaa, 0xbb, + 0x18, 0x42, 0x29, 0x40, 0x55, 0x82, 0x0d, 0xe1, 0x3a, 0x2c, 0x50, 0x96, 0x74, 0x3c, 0x7c, 0xcc, + 0x48, 0xea, 0xf9, 0x49, 0xa7, 0x6f, 0xe7, 0xaf, 0x5b, 0x1b, 0xf3, 0x6e, 0x85, 0x83, 0x1f, 0x71, + 0xe8, 0x56, 0xd2, 0xe9, 0xa3, 0x8f, 0xa1, 0x2a, 0xb4, 0xe2, 0x51, 0x25, 0xa7, 0x3d, 0x7b, 0x7d, + 0x66, 0xa3, 0xb4, 0x79, 0xa3, 0x31, 0xf0, 0xc1, 0xf3, 0x34, 0xeb, 0x56, 0x04, 0xab, 0xb9, 0x21, + 0x82, 0xbc, 0x4f, 0xa2, 0xc8, 0x2e, 0x08, 0x89, 0xc4, 0xb7, 0x54, 0x3e, 0xf7, 0x3f, 0x8f, 0xf5, + 0x3b, 0x84, 0xda, 0x73, 0x5a, 0xf9, 0x1c, 0x76, 0xc8, 0x41, 0xe8, 0x5b, 0xb0, 0x48, 0xce, 0x18, + 0x49, 0x63, 0x1c, 0x79, 0x7e, 0xd4, 0xa5, 0x8c, 0xa4, 0xf6, 0xbc, 0x20, 0x5b, 0xd0, 0xf0, 0x2d, + 0x09, 0x76, 0x9e, 0xc1, 0xbc, 0xb9, 0x21, 0x82, 0x7c, 0x8c, 0xdb, 0xda, 0x9c, 0xe2, 0x1b, 0x35, + 0x60, 0x7e, 0x48, 0x81, 0xa5, 0x4d, 0xd4, 0x30, 0x5e, 0xae, 0x39, 0x5d, 0x43, 0xe3, 0xfc, 0x14, + 0x66, 0x0f, 0x5e, 0xe0, 0x34, 0xe0, 0xc6, 0x31, 0x8c, 0xca, 0x38, 0x27, 0xa3, 0x07, 0xe5, 0x32, + 0x07, 0xdd, 0x84, 0x59, 0xca, 0x19, 0x85, 0xf6, 0x4b, 0x9b, 0x0b, 0x83, 0x53, 0xc4, 0x7e, 0xae, + 0xc4, 0x3a, 0xbf, 0x02, 0x98, 0xff, 0x4c, 0x1b, 0x79, 0x92, 0xc0, 0xdf, 0x87, 0x82, 0xb4, 0xb0, + 0x12, 0xf7, 0xbd, 0x8c, 0xda, 0x35, 0x63, 0xc3, 0x25, 0x9d, 0x28, 0xf4, 0x31, 0x8f, 0x9a, 0xa7, + 0x89, 0xfc, 0x75, 0x15, 0x1b, 0xdf, 0x40, 0x5a, 0x5e, 0x49, 0x72, 0xf1, 0x0d, 0x24, 0x1b, 0xba, + 0x0b, 0xcb, 0x6d, 0x7c, 0xe6, 0xf5, 0xbc, 0x74, 0x40, 0xe4, 0x45, 0xb8, 0x25, 0xdc, 0x65, 0xc6, + 0x45, 0x6d, 0x7c, 0xf6, 0x3c, 0xcb, 0x8f, 0x5b, 0xe8, 0x53, 0xa8, 0x8a, 0xeb, 0x79, 0x94, 0x61, + 0xd6, 0xa5, 0x44, 0xfb, 0xcc, 0xfa, 0xa4, 0xb3, 0x85, 0x3e, 0x0e, 0x14, 0xe1, 0x4e, 0xcc, 0xd2, + 0xbe, 0x5b, 0xa1, 0x59, 0x58, 0x3d, 0x02, 0x34, 0x4e, 0x84, 0x16, 0x61, 0xe6, 0x84, 0xf4, 0x95, + 0xb2, 0xf8, 0x27, 0x7a, 0x08, 0xb3, 0x3d, 0x1c, 0x75, 0xb5, 0xaa, 0x6e, 0x9d, 0x7b, 0x5a, 0x46, + 0x5c, 0xb9, 0xa7, 0x2b, 0x19, 0x1f, 0xe4, 0xee, 0x5b, 0xf5, 0x3d, 0x58, 0x9a, 0xa0, 0x8e, 0xa9, + 0x0e, 0xb0, 0x02, 0x05, 0x21, 0x31, 0xb5, 0x73, 0x22, 0xbf, 0xa9, 0x55, 0xfd, 0x0f, 0x79, 0xb8, + 0x32, 0x76, 0x16, 0xaa, 0x42, 0x2e, 0x0c, 0xc4, 0x1e, 0x33, 0x6e, 0x2e, 0x0c, 0x50, 0x4d, 0xbb, + 0x8a, 0xf4, 0x1f, 0xb9, 0x40, 0xb7, 0xb9, 0xdd, 0x78, 0x0c, 0x28, 0xbb, 0x2d, 0x0f, 0x3c, 0x48, + 0x84, 0x1b, 0x7b, 0x14, 0x85, 0x98, 0xba, 0x8a, 0x08, 0x7d, 0x04, 0x15, 0x99, 0xf7, 0x3d, 0xe5, + 0x2e, 0x79, 0xc1, 0x65, 0x37, 0x32, 0xd5, 0xe0, 0xb1, 0xf8, 0x3c, 0x10, 0x78, 0xb7, 0x7c, 0x94, + 0x59, 0xf1, 0xdb, 0x75, 0x12, 0x1a, 0x72, 0x29, 0xed, 0x59, 0x79, 0x3b, 0xbd, 0x46, 0x37, 0x40, + 0xa4, 0x04, 0xcf, 0x10, 0xc8, 0xf0, 0x2d, 0x73, 0xe0, 0xbe, 0x26, 0xe2, 0x97, 0x60, 0x98, 0x11, + 0x15, 0xbf, 0x72, 0x81, 0x56, 0x61, 0x2e, 0x38, 0xf2, 0x84, 0x53, 0xcb, 0x80, 0x2d, 0x04, 0x47, + 0xcf, 0xb8, 0x5b, 0x3f, 0x82, 0x65, 0x96, 0xe2, 0x98, 0x66, 0x0a, 0x00, 0x65, 0xb8, 0xdd, 0xb1, + 0x8b, 0x42, 0xec, 0x72, 0x43, 0xd5, 0x16, 0x5e, 0x04, 0xdc, 0x5a, 0x86, 0xf4, 0x50, 0x53, 0xa2, + 0x26, 0x94, 0x39, 0x89, 0xd7, 0xed, 0x04, 0x98, 0x91, 0xc0, 0x86, 0x09, 0x9c, 0x25, 0xfe, 0xf9, + 0x23, 0x49, 0x80, 0x6c, 0x98, 0x6b, 0x13, 0x4a, 0x71, 0x8b, 0xd8, 0x25, 0x21, 0x8c, 0x5e, 0xa2, + 0x7d, 0x28, 0xf1, 0x04, 0x28, 0xdc, 0x95, 0x50, 0xbb, 0x2c, 0x9c, 0xb5, 0xf9, 0x8a, 0x40, 0x91, + 0xd6, 0x6c, 0xf0, 0x24, 0xc9, 0x3f, 0x89, 0x0b, 0xbe, 0xfe, 0xa4, 0xf5, 0x07, 0x50, 0x34, 0x08, + 0xae, 0x9b, 0x6c, 0x61, 0x91, 0x0b, 0xae, 0x9b, 0x08, 0x53, 0xe6, 0x75, 0x4e, 0x94, 0xe1, 0x0b, + 0x7c, 0xb9, 0x7f, 0x52, 0xff, 0x97, 0x05, 0x2b, 0x93, 0xdd, 0x14, 0xb5, 0xe0, 0x6a, 0x27, 0x0d, + 0xdb, 0x38, 0xed, 0x0f, 0x45, 0xa3, 0x09, 0x33, 0x4b, 0x48, 0x7e, 0xf3, 0x42, 0x92, 0xbb, 0x75, + 0xb5, 0xd5, 0x18, 0x86, 0x50, 0xb4, 0xcb, 0xcb, 0x88, 0xc8, 0xca, 0x7e, 0x12, 0xb3, 0x34, 0x89, + 0xa4, 0x6b, 0x97, 0x36, 0xaf, 0x8d, 0x24, 0x32, 0xe5, 0x8c, 0x5b, 0x92, 0xca, 0x95, 0xb5, 0x42, + 0x2f, 0x29, 0x7a, 0x1f, 0x50, 0x48, 0x3d, 0x2d, 0x33, 0x25, 0x69, 0x2f, 0x8c, 0x5b, 0xc2, 0xa3, + 0xe7, 0xdd, 0xc5, 0x90, 0xee, 0x4b, 0xc4, 0x81, 0x84, 0x3b, 0x5f, 0x59, 0xb0, 0xba, 0xf5, 0x02, + 0xc7, 0x2d, 0x72, 0x68, 0xd2, 0xbf, 0xee, 0x20, 0xee, 0x9b, 0x3a, 0x81, 0xb9, 0xe3, 0xab, 0x72, + 0x7f, 0x4e, 0x54, 0xa8, 0xf2, 0x21, 0x16, 0xe8, 0xb6, 0x70, 0x42, 0x5e, 0x5d, 0x84, 0xa2, 0xab, + 0x9b, 0xb5, 0x51, 0x26, 0x71, 0x4e, 0x21, 0x38, 0xe2, 0xbf, 0xc2, 0x67, 0xb9, 0x7e, 0xbb, 0xb1, + 0x92, 0xb3, 0x10, 0xa4, 0x7d, 0xb7, 0x1b, 0x3b, 0xbf, 0xb7, 0xc0, 0x1e, 0x97, 0x4e, 0xb5, 0x21, + 0xdf, 0x81, 0xca, 0x11, 0x39, 0x4e, 0x52, 0xe2, 0xa9, 0xa8, 0x95, 0xf2, 0x2d, 0x8e, 0x1e, 0xe5, + 0x96, 0x25, 0x99, 0x5c, 0xa1, 0x0f, 0xa0, 0x2c, 0x0b, 0xb0, 0xe2, 0xca, 0x9d, 0xc3, 0x55, 0x12, + 0x54, 0x8a, 0x69, 0x0d, 0x4a, 0xa7, 0x98, 0x7a, 0xc3, 0x52, 0x16, 0x4f, 0x31, 0xdd, 0x96, 0x82, + 0x7e, 0x3d, 0x03, 0xcb, 0x5b, 0xa2, 0xdd, 0x30, 0x15, 0x6d, 0xd0, 0x86, 0x8d, 0x55, 0x98, 0x1a, + 0xcc, 0x1e, 0x27, 0xba, 0xc0, 0xcc, 0xbb, 0x72, 0x81, 0x9a, 0x50, 0xc3, 0x51, 0x94, 0x9c, 0x7a, + 0xa4, 0xdd, 0x61, 0x7d, 0xaf, 0xe7, 0xc9, 0xd6, 0x4f, 0x1d, 0x76, 0x45, 0xe0, 0x76, 0x38, 0xea, + 0xf9, 0x81, 0x40, 0xa0, 0x3b, 0x50, 0x13, 0x89, 0x2b, 0x8c, 0x5b, 0x9e, 0x9f, 0x44, 0xdd, 0x76, + 0x2c, 0xe3, 0x3e, 0x2f, 0x8e, 0x42, 0x1a, 0xb7, 0x25, 0x50, 0x22, 0x07, 0x7c, 0x3c, 0xce, 0x21, + 0x8c, 0x34, 0x2b, 0x8c, 0x64, 0x8f, 0xd7, 0xe5, 0xbd, 0x40, 0xa8, 0x7c, 0x64, 0x2f, 0x61, 0xb4, + 0x87, 0x50, 0xe6, 0xce, 0x45, 0x02, 0xef, 0x38, 0x4d, 0xda, 0xd4, 0x2e, 0x8c, 0x3a, 0xab, 0xde, + 0xa3, 0x71, 0x20, 0xc8, 0x76, 0xd3, 0xa4, 0xed, 0x96, 0xa8, 0xf9, 0xa6, 0xe8, 0x16, 0xe4, 0xc5, + 0xe9, 0x73, 0xe2, 0xf4, 0x95, 0x71, 0x4e, 0x71, 0xb6, 0xa0, 0xe1, 0x19, 0xf1, 0x08, 0xd3, 0x4c, + 0x2f, 0x26, 0x93, 0x5b, 0x99, 0x03, 0x4d, 0xfb, 0x71, 0x17, 0x2a, 0x34, 0xc6, 0x1d, 0xfa, 0x22, + 0x61, 0x22, 0xbf, 0x4d, 0x4c, 0x6d, 0x65, 0x4d, 0xc2, 0x57, 0xce, 0x1e, 0xac, 0x8c, 0xda, 0x4d, + 0xb9, 0x57, 0x73, 0xa4, 0xfa, 0x94, 0x36, 0x97, 0x32, 0x41, 0x3e, 0xa1, 0x71, 0xf9, 0xb5, 0x05, + 0x48, 0xee, 0xa5, 0x52, 0x89, 0x74, 0x80, 0x69, 0x55, 0xec, 0x1a, 0x80, 0xac, 0xda, 0x99, 0x66, + 0xa6, 0x28, 0x20, 0xcf, 0x86, 0xfc, 0x64, 0x26, 0xeb, 0x27, 0x37, 0xa1, 0x1a, 0xc6, 0x7e, 0xd4, + 0x0d, 0x88, 0xd7, 0xc1, 0x29, 0xef, 0xc3, 0x55, 0x17, 0xa9, 0xa0, 0xfb, 0x02, 0xe8, 0xfc, 0xce, + 0x82, 0xa5, 0x21, 0x71, 0x2e, 0x79, 0x2f, 0xb4, 0x9e, 0x2d, 0x96, 0x3c, 0x52, 0x06, 0xd4, 0xd9, + 0xc6, 0xca, 0xb8, 0xa3, 0x87, 0xa3, 0x94, 0xe0, 0xa0, 0xef, 0x91, 0xb3, 0x90, 0x32, 0xaa, 0x84, + 0x97, 0x2e, 0xf4, 0x48, 0xa2, 0x76, 0x04, 0xc6, 0xf9, 0x21, 0x2c, 0x6f, 0x93, 0x88, 0x8c, 0x07, + 0xcd, 0x34, 0x9d, 0x5d, 0x85, 0x62, 0x4a, 0xfc, 0x6e, 0x4a, 0xc3, 0x9e, 0x0e, 0xa0, 0x01, 0xc0, + 0xb1, 0x61, 0x65, 0x74, 0x4b, 0x79, 0x6f, 0xe7, 0x97, 0x16, 0x2c, 0x49, 0x94, 0x90, 0x9a, 0xea, + 0xb3, 0x36, 0x4c, 0x27, 0x21, 0x53, 0xf9, 0xf8, 0xfd, 0x14, 0x7e, 0xfa, 0xc9, 0xbc, 0xbb, 0xe7, + 0x83, 0x8f, 0x17, 0x1e, 0x9b, 0xa4, 0xab, 0xec, 0xc2, 0xc1, 0x7b, 0xc7, 0x3a, 0xe3, 0xae, 0x40, + 0x6d, 0x58, 0x0c, 0x25, 0x5f, 0x5f, 0xc3, 0x65, 0xca, 0x31, 0xf2, 0x7d, 0xa8, 0xa6, 0x01, 0x95, + 0x85, 0x4d, 0xc9, 0x39, 0x27, 0x0f, 0x57, 0x32, 0x79, 0x98, 0x50, 0x1e, 0x37, 0x32, 0xa9, 0xa8, + 0x82, 0xa0, 0xe4, 0x2e, 0x0b, 0xa0, 0xaa, 0x05, 0xce, 0xaa, 0xb6, 0x83, 0x39, 0x5a, 0xc9, 0xf4, + 0x9b, 0x1c, 0x5c, 0xdb, 0x69, 0x93, 0xb4, 0x45, 0x62, 0x9f, 0x17, 0x2d, 0xe1, 0x59, 0x17, 0xf6, + 0xee, 0xc9, 0x5d, 0xd6, 0x3d, 0x28, 0xc5, 0x64, 0x20, 0xcf, 0xd4, 0x56, 0x0b, 0x62, 0xa2, 0x85, + 0x44, 0xdf, 0x83, 0x85, 0xb0, 0x15, 0xf3, 0x74, 0xaf, 0xea, 0x30, 0xb5, 0xf3, 0xd3, 0x14, 0x51, + 0x95, 0xd4, 0xaa, 0xd4, 0x52, 0xb4, 0x0d, 0xcb, 0xa7, 0x38, 0x64, 0x86, 0xdb, 0x8c, 0xc0, 0xb3, + 0xc6, 0xad, 0x45, 0x92, 0xd8, 0xee, 0xa6, 0xb2, 0x1b, 0x5f, 0xe2, 0xe4, 0x9a, 0x5d, 0x8f, 0xc6, + 0x7f, 0xb2, 0x60, 0xed, 0x3c, 0x8d, 0xa8, 0x00, 0x7b, 0x7d, 0x95, 0x3c, 0x84, 0xc5, 0x4e, 0x9a, + 0xb4, 0x13, 0x46, 0x82, 0x8b, 0xe9, 0x65, 0x41, 0x93, 0x6b, 0xe5, 0xac, 0x43, 0x41, 0x4c, 0xdd, + 0x5a, 0x27, 0xa3, 0x33, 0xb9, 0xc2, 0x3a, 0x1f, 0xc2, 0xda, 0x6e, 0x18, 0x07, 0x8f, 0xa2, 0x48, + 0x7a, 0xdf, 0x5e, 0xfc, 0x1a, 0xa1, 0xe7, 0xfc, 0xd9, 0x82, 0x77, 0xce, 0x65, 0x57, 0xb7, 0x7f, + 0x36, 0x12, 0x4e, 0xf7, 0x32, 0xe1, 0xf4, 0x0a, 0x5e, 0x19, 0x6e, 0x6a, 0x20, 0xd1, 0x0d, 0xfd, + 0x27, 0x50, 0xca, 0x80, 0x27, 0x8c, 0x20, 0xeb, 0xc3, 0x23, 0xc8, 0x84, 0xf4, 0x64, 0x06, 0x0d, + 0x67, 0x07, 0xae, 0x3c, 0x21, 0xec, 0x31, 0xf6, 0x4f, 0xba, 0x1d, 0x7a, 0x69, 0x17, 0x76, 0xb6, + 0x01, 0x65, 0xb7, 0x51, 0x37, 0x6f, 0xc0, 0xdc, 0x91, 0x04, 0xa9, 0xab, 0xd7, 0x1a, 0xe6, 0xd9, + 0x47, 0xd2, 0xee, 0xc5, 0xc7, 0x89, 0xab, 0x89, 0x9c, 0xb7, 0x60, 0xf5, 0x09, 0x61, 0x5b, 0x24, + 0x8a, 0x38, 0x9c, 0x27, 0x7c, 0x2d, 0x92, 0x73, 0x07, 0xec, 0x71, 0x94, 0x3a, 0xa6, 0x06, 0xb3, + 0xbc, 0x5a, 0xe8, 0x87, 0x1d, 0xb9, 0x70, 0x36, 0x84, 0x48, 0x9a, 0x23, 0xd3, 0x7c, 0x88, 0xe9, + 0xdf, 0x1a, 0x4c, 0xff, 0xce, 0x2e, 0x2c, 0x0d, 0x51, 0x9a, 0xb2, 0x50, 0xe4, 0x68, 0x2f, 0x8c, + 0x8f, 0x13, 0x55, 0x17, 0x32, 0x73, 0xba, 0x21, 0x9f, 0xf7, 0xd5, 0x17, 0xcf, 0xb4, 0x6a, 0x1f, + 0xaa, 0x92, 0x8d, 0x96, 0xfe, 0x6b, 0xcb, 0xdc, 0x6c, 0x80, 0x52, 0xc7, 0xec, 0xc1, 0xdc, 0x70, + 0x1a, 0xcb, 0xf6, 0xfc, 0xe7, 0x30, 0x35, 0xd4, 0x5a, 0x3a, 0x86, 0xe6, 0xaf, 0xef, 0x43, 0x39, + 0x8b, 0x98, 0xe0, 0x1a, 0xb7, 0x86, 0x5d, 0xa3, 0x36, 0x7c, 0x1f, 0x79, 0x4c, 0xd6, 0x3d, 0x96, + 0x85, 0x6a, 0xb4, 0x5b, 0x9a, 0xfb, 0xec, 0x41, 0x6d, 0x18, 0xac, 0xee, 0x72, 0x17, 0x8a, 0xda, + 0x51, 0xf4, 0x6d, 0x26, 0x96, 0xd2, 0x01, 0x95, 0x73, 0x47, 0x98, 0xe9, 0x75, 0x62, 0x6e, 0x77, + 0x48, 0xa6, 0xcb, 0x77, 0x27, 0xbf, 0xc8, 0xc1, 0xe2, 0x13, 0xc2, 0x64, 0xeb, 0xf8, 0xcd, 0x3b, + 0xfc, 0x15, 0x35, 0x2b, 0x9b, 0xf9, 0x5b, 0xae, 0x78, 0x73, 0x42, 0xce, 0x64, 0x73, 0xa2, 0xf0, + 0x33, 0x02, 0x5f, 0x51, 0xd0, 0x43, 0x49, 0x76, 0x03, 0x74, 0xb7, 0xe2, 0xf5, 0x42, 0x72, 0x4a, + 0x55, 0xa9, 0x2c, 0x2b, 0xe0, 0x73, 0x0e, 0x43, 0x1b, 0xb0, 0x28, 0xdf, 0xc1, 0x84, 0x8b, 0x7b, + 0x49, 0x1c, 0xf5, 0x45, 0xb2, 0x9e, 0x57, 0x33, 0x8f, 0x88, 0x8b, 0x1f, 0xc4, 0x51, 0x7f, 0x40, + 0x49, 0xc3, 0x2f, 0x34, 0x65, 0x21, 0x43, 0x79, 0xc0, 0xc1, 0x9c, 0xd2, 0xd9, 0x17, 0x19, 0x40, + 0x6b, 0x41, 0x29, 0xf3, 0xbb, 0x50, 0x50, 0xbd, 0xb6, 0x54, 0xc0, 0x8d, 0xc6, 0xf8, 0xfb, 0xac, + 0x64, 0xd9, 0x26, 0xc7, 0x61, 0x1c, 0xaa, 0xd7, 0x1e, 0x01, 0x71, 0x9e, 0xc2, 0x02, 0xdf, 0xf1, + 0xcd, 0xb4, 0x7c, 0xce, 0x03, 0x69, 0xa5, 0xa1, 0x82, 0x62, 0x1a, 0x30, 0x6b, 0x6a, 0x03, 0xe6, + 0xdc, 0x12, 0x7e, 0x7a, 0x90, 0xf6, 0x9e, 0x0f, 0x5b, 0x79, 0x52, 0x16, 0x78, 0x06, 0xcb, 0x23, + 0xb4, 0x66, 0xaa, 0x2a, 0xd3, 0xb4, 0x37, 0x98, 0x3e, 0x8c, 0x73, 0xa9, 0x87, 0xe8, 0x0c, 0x0b, + 0x50, 0xf3, 0xed, 0x3c, 0x15, 0x72, 0xab, 0xd1, 0xe9, 0x9b, 0x7a, 0x97, 0xf3, 0x91, 0xb0, 0x92, + 0xde, 0x4d, 0x49, 0xb6, 0x61, 0x9e, 0x67, 0xce, 0x1b, 0xf4, 0x14, 0xde, 0xf9, 0x49, 0x86, 0xfd, + 0xf2, 0x69, 0x9e, 0x43, 0xb9, 0xae, 0xb4, 0x0b, 0xcb, 0x85, 0xf3, 0x50, 0x84, 0xf0, 0x48, 0xa7, + 0x84, 0x6e, 0xc1, 0x9c, 0x3c, 0x7c, 0xd0, 0x46, 0x8e, 0x4a, 0xa7, 0x09, 0x9c, 0xa6, 0x10, 0x6f, + 0xc4, 0x48, 0xd3, 0x72, 0xc0, 0x63, 0x71, 0xe4, 0xa8, 0xa5, 0xde, 0x87, 0xf9, 0x11, 0x2b, 0x5d, + 0x31, 0x56, 0x32, 0x09, 0x60, 0xae, 0xa7, 0x0c, 0xe4, 0x8a, 0x3c, 0xa2, 0xdf, 0x26, 0x2e, 0xa4, + 0x95, 0x77, 0xa0, 0x84, 0x7d, 0x16, 0xf6, 0x88, 0x0c, 0x28, 0xd9, 0x39, 0x82, 0x04, 0x89, 0x60, + 0x92, 0x89, 0x31, 0xb3, 0xe7, 0x20, 0x31, 0xea, 0x67, 0xf4, 0x49, 0x89, 0x51, 0x33, 0xb8, 0x03, + 0x2a, 0xe7, 0xdf, 0x16, 0xac, 0xee, 0xc5, 0xa1, 0xf4, 0xfc, 0x7d, 0xfd, 0x4a, 0x72, 0x59, 0xcb, + 0xb9, 0xa0, 0x5f, 0x5a, 0x3c, 0x12, 0x11, 0x5f, 0xfd, 0xcb, 0xa0, 0xfd, 0x70, 0x6a, 0x6b, 0xb5, + 0xaa, 0x18, 0x77, 0x38, 0x5f, 0x06, 0x31, 0x18, 0xc6, 0xf2, 0xd9, 0x61, 0xec, 0xcd, 0x74, 0x95, + 0x8f, 0xc1, 0x1e, 0xbf, 0xbc, 0x89, 0x7e, 0xdd, 0xda, 0x59, 0x53, 0x5b, 0xbb, 0x2f, 0x73, 0xf0, + 0xf6, 0x7e, 0x84, 0xe3, 0x98, 0x04, 0xff, 0xe5, 0x4e, 0xfd, 0x01, 0x54, 0x70, 0x2f, 0x09, 0x07, + 0xbd, 0x6c, 0x7e, 0x1a, 0x67, 0x59, 0xd0, 0x6a, 0xde, 0x37, 0xa3, 0xcf, 0x3f, 0x5a, 0x70, 0x75, + 0xb2, 0x2e, 0xfe, 0x07, 0x7a, 0xf4, 0x9f, 0xc3, 0x5b, 0x2e, 0x69, 0x27, 0x3d, 0x33, 0xc2, 0xf2, + 0x66, 0xe5, 0x22, 0x56, 0xd4, 0x79, 0x3e, 0x97, 0xf9, 0xaf, 0x67, 0xf2, 0x13, 0xc2, 0xd0, 0x24, + 0x9b, 0x1f, 0x9d, 0xa1, 0xaf, 0x42, 0x7d, 0x92, 0x00, 0x6a, 0x26, 0xfc, 0xca, 0x82, 0x15, 0x89, + 0x16, 0x2a, 0xbd, 0xa8, 0x70, 0xaf, 0x78, 0xea, 0xd0, 0xb2, 0xcf, 0x4c, 0x92, 0x3d, 0x7f, 0xae, + 0xec, 0xb3, 0xa3, 0xb2, 0xbf, 0x05, 0xab, 0x63, 0xc2, 0x29, 0xc1, 0x77, 0x61, 0x59, 0x3b, 0xc3, + 0x70, 0x9d, 0xba, 0x3d, 0x52, 0x58, 0xa6, 0xbf, 0xfb, 0x3b, 0x3f, 0xe3, 0xf7, 0x1f, 0xde, 0xe7, + 0xd2, 0x5e, 0xd5, 0x84, 0xb9, 0x0b, 0x39, 0x93, 0xa6, 0x72, 0x5c, 0x78, 0x57, 0xc2, 0x77, 0xd4, + 0xdf, 0x70, 0x91, 0x99, 0x42, 0x49, 0x70, 0xc9, 0x0b, 0xfd, 0xc5, 0x02, 0x67, 0xda, 0xa6, 0x97, + 0xbe, 0xdd, 0x65, 0x13, 0xc8, 0x3d, 0x28, 0x25, 0xd1, 0x05, 0xd3, 0x07, 0x24, 0x91, 0x8e, 0xb0, + 0xc7, 0xf7, 0xff, 0xfa, 0x72, 0xcd, 0xfa, 0xdb, 0xcb, 0x35, 0xeb, 0x1f, 0x2f, 0xd7, 0xac, 0xdf, + 0xfe, 0x73, 0xed, 0xff, 0x7e, 0xbc, 0xde, 0x0b, 0x19, 0xa1, 0xb4, 0x11, 0x26, 0x4d, 0xf9, 0xd5, + 0x6c, 0x25, 0xcd, 0x1e, 0x6b, 0x8a, 0x3f, 0xd0, 0x9b, 0xa6, 0x24, 0x1d, 0x15, 0x04, 0xe0, 0x83, + 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x01, 0x47, 0x0b, 0xd4, 0xe6, 0x1f, 0x00, 0x00, } func (m *ExecuteVtctlCommandRequest) Marshal() (dAtA []byte, err error) { @@ -3918,6 +4446,380 @@ func (m *Shard) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *Workflow) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Workflow) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Workflow) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.ShardStatuses) > 0 { + for k := range m.ShardStatuses { + v := m.ShardStatuses[k] + baseI := i + if v != nil { + { + size, err := v.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVtctldata(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(k) + copy(dAtA[i:], k) + i = encodeVarintVtctldata(dAtA, i, uint64(len(k))) + i-- + dAtA[i] = 0xa + i = encodeVarintVtctldata(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x2a + } + } + if m.MaxVReplicationLag != 0 { + i = encodeVarintVtctldata(dAtA, i, uint64(m.MaxVReplicationLag)) + i-- + dAtA[i] = 0x20 + } + if m.Target != nil { + { + size, err := m.Target.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVtctldata(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.Source != nil { + { + size, err := m.Source.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVtctldata(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Workflow_ReplicationLocation) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Workflow_ReplicationLocation) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Workflow_ReplicationLocation) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.Shards) > 0 { + for iNdEx := len(m.Shards) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Shards[iNdEx]) + copy(dAtA[i:], m.Shards[iNdEx]) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.Shards[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if len(m.Keyspace) > 0 { + i -= len(m.Keyspace) + copy(dAtA[i:], m.Keyspace) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.Keyspace))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Workflow_ReplicationStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Workflow_ReplicationStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Workflow_ReplicationStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.CopyStates) > 0 { + for iNdEx := len(m.CopyStates) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.CopyStates[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVtctldata(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x62 + } + } + if len(m.Message) > 0 { + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x5a + } + if m.TimeUpdated != nil { + { + size, err := m.TimeUpdated.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVtctldata(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + } + if m.TransactionTimestamp != nil { + { + size, err := m.TransactionTimestamp.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVtctldata(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + } + if len(m.DbName) > 0 { + i -= len(m.DbName) + copy(dAtA[i:], m.DbName) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.DbName))) + i-- + dAtA[i] = 0x42 + } + if len(m.State) > 0 { + i -= len(m.State) + copy(dAtA[i:], m.State) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.State))) + i-- + dAtA[i] = 0x3a + } + if len(m.StopPosition) > 0 { + i -= len(m.StopPosition) + copy(dAtA[i:], m.StopPosition) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.StopPosition))) + i-- + dAtA[i] = 0x32 + } + if len(m.Position) > 0 { + i -= len(m.Position) + copy(dAtA[i:], m.Position) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.Position))) + i-- + dAtA[i] = 0x2a + } + if m.BinlogSource != nil { + { + size, err := m.BinlogSource.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVtctldata(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.Tablet != nil { + { + size, err := m.Tablet.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVtctldata(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if len(m.Shard) > 0 { + i -= len(m.Shard) + copy(dAtA[i:], m.Shard) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.Shard))) + i-- + dAtA[i] = 0x12 + } + if m.Id != 0 { + i = encodeVarintVtctldata(dAtA, i, uint64(m.Id)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *Workflow_ReplicationStatus_CopyState) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Workflow_ReplicationStatus_CopyState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Workflow_ReplicationStatus_CopyState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.LastPk) > 0 { + i -= len(m.LastPk) + copy(dAtA[i:], m.LastPk) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.LastPk))) + i-- + dAtA[i] = 0x12 + } + if len(m.Table) > 0 { + i -= len(m.Table) + copy(dAtA[i:], m.Table) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.Table))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Workflow_ShardReplicationStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Workflow_ShardReplicationStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Workflow_ShardReplicationStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.IsPrimaryServing { + i-- + if m.IsPrimaryServing { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + } + if len(m.TabletControls) > 0 { + for iNdEx := len(m.TabletControls) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TabletControls[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVtctldata(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.PrimaryReplicationStatuses) > 0 { + for iNdEx := len(m.PrimaryReplicationStatuses) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.PrimaryReplicationStatuses[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVtctldata(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func (m *ChangeTabletTypeRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -5728,6 +6630,91 @@ func (m *GetVSchemaResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *GetWorkflowsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetWorkflowsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GetWorkflowsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.ActiveOnly { + i-- + if m.ActiveOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + } + if len(m.Keyspace) > 0 { + i -= len(m.Keyspace) + copy(dAtA[i:], m.Keyspace) + i = encodeVarintVtctldata(dAtA, i, uint64(len(m.Keyspace))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *GetWorkflowsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetWorkflowsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GetWorkflowsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.Workflows) > 0 { + for iNdEx := len(m.Workflows) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Workflows[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVtctldata(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func (m *InitShardPrimaryRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -6528,6 +7515,176 @@ func (m *Shard) Size() (n int) { return n } +func (m *Workflow) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + if m.Source != nil { + l = m.Source.Size() + n += 1 + l + sovVtctldata(uint64(l)) + } + if m.Target != nil { + l = m.Target.Size() + n += 1 + l + sovVtctldata(uint64(l)) + } + if m.MaxVReplicationLag != 0 { + n += 1 + sovVtctldata(uint64(m.MaxVReplicationLag)) + } + if len(m.ShardStatuses) > 0 { + for k, v := range m.ShardStatuses { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovVtctldata(uint64(l)) + } + mapEntrySize := 1 + len(k) + sovVtctldata(uint64(len(k))) + l + n += mapEntrySize + 1 + sovVtctldata(uint64(mapEntrySize)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *Workflow_ReplicationLocation) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Keyspace) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + if len(m.Shards) > 0 { + for _, s := range m.Shards { + l = len(s) + n += 1 + l + sovVtctldata(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *Workflow_ReplicationStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Id != 0 { + n += 1 + sovVtctldata(uint64(m.Id)) + } + l = len(m.Shard) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + if m.Tablet != nil { + l = m.Tablet.Size() + n += 1 + l + sovVtctldata(uint64(l)) + } + if m.BinlogSource != nil { + l = m.BinlogSource.Size() + n += 1 + l + sovVtctldata(uint64(l)) + } + l = len(m.Position) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + l = len(m.StopPosition) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + l = len(m.State) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + l = len(m.DbName) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + if m.TransactionTimestamp != nil { + l = m.TransactionTimestamp.Size() + n += 1 + l + sovVtctldata(uint64(l)) + } + if m.TimeUpdated != nil { + l = m.TimeUpdated.Size() + n += 1 + l + sovVtctldata(uint64(l)) + } + l = len(m.Message) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + if len(m.CopyStates) > 0 { + for _, e := range m.CopyStates { + l = e.Size() + n += 1 + l + sovVtctldata(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *Workflow_ReplicationStatus_CopyState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Table) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + l = len(m.LastPk) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *Workflow_ShardReplicationStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.PrimaryReplicationStatuses) > 0 { + for _, e := range m.PrimaryReplicationStatuses { + l = e.Size() + n += 1 + l + sovVtctldata(uint64(l)) + } + } + if len(m.TabletControls) > 0 { + for _, e := range m.TabletControls { + l = e.Size() + n += 1 + l + sovVtctldata(uint64(l)) + } + } + if m.IsPrimaryServing { + n += 2 + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func (m *ChangeTabletTypeRequest) Size() (n int) { if m == nil { return 0 @@ -7317,6 +8474,43 @@ func (m *GetVSchemaResponse) Size() (n int) { return n } +func (m *GetWorkflowsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Keyspace) + if l > 0 { + n += 1 + l + sovVtctldata(uint64(l)) + } + if m.ActiveOnly { + n += 2 + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *GetWorkflowsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Workflows) > 0 { + for _, e := range m.Workflows { + l = e.Size() + n += 1 + l + sovVtctldata(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func (m *InitShardPrimaryRequest) Size() (n int) { if m == nil { return 0 @@ -8519,6 +9713,1133 @@ func (m *Shard) Unmarshal(dAtA []byte) error { } return nil } +func (m *Workflow) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Workflow: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Workflow: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Source", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Source == nil { + m.Source = &Workflow_ReplicationLocation{} + } + if err := m.Source.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Target == nil { + m.Target = &Workflow_ReplicationLocation{} + } + if err := m.Target.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxVReplicationLag", wireType) + } + m.MaxVReplicationLag = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MaxVReplicationLag |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ShardStatuses", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ShardStatuses == nil { + m.ShardStatuses = make(map[string]*Workflow_ShardReplicationStatus) + } + var mapkey string + var mapvalue *Workflow_ShardReplicationStatus + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthVtctldata + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthVtctldata + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthVtctldata + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &Workflow_ShardReplicationStatus{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipVtctldata(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.ShardStatuses[mapkey] = mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipVtctldata(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Workflow_ReplicationLocation) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ReplicationLocation: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ReplicationLocation: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Keyspace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Shards", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Shards = append(m.Shards, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipVtctldata(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Workflow_ReplicationStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ReplicationStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ReplicationStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + m.Id = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Id |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Shard = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Tablet", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Tablet == nil { + m.Tablet = &topodata.TabletAlias{} + } + if err := m.Tablet.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BinlogSource", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.BinlogSource == nil { + m.BinlogSource = &binlogdata.BinlogSource{} + } + if err := m.BinlogSource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Position", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Position = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StopPosition", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.StopPosition = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.State = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DbName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DbName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TransactionTimestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TransactionTimestamp == nil { + m.TransactionTimestamp = &vttime.Time{} + } + if err := m.TransactionTimestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeUpdated", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TimeUpdated == nil { + m.TimeUpdated = &vttime.Time{} + } + if err := m.TimeUpdated.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CopyStates", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CopyStates = append(m.CopyStates, &Workflow_ReplicationStatus_CopyState{}) + if err := m.CopyStates[len(m.CopyStates)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipVtctldata(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Workflow_ReplicationStatus_CopyState) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CopyState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CopyState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Table", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Table = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastPk", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.LastPk = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipVtctldata(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Workflow_ShardReplicationStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ShardReplicationStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ShardReplicationStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PrimaryReplicationStatuses", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PrimaryReplicationStatuses = append(m.PrimaryReplicationStatuses, &Workflow_ReplicationStatus{}) + if err := m.PrimaryReplicationStatuses[len(m.PrimaryReplicationStatuses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TabletControls", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TabletControls = append(m.TabletControls, &topodata.Shard_TabletControl{}) + if err := m.TabletControls[len(m.TabletControls)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IsPrimaryServing", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IsPrimaryServing = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipVtctldata(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *ChangeTabletTypeRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -13030,6 +15351,200 @@ func (m *GetVSchemaResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *GetWorkflowsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetWorkflowsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetWorkflowsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Keyspace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Keyspace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ActiveOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ActiveOnly = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipVtctldata(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetWorkflowsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetWorkflowsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetWorkflowsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Workflows", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Workflows = append(m.Workflows, &Workflow{}) + if err := m.Workflows[len(m.Workflows)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipVtctldata(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *InitShardPrimaryRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/go/vt/proto/vtctlservice/vtctlservice.pb.go b/go/vt/proto/vtctlservice/vtctlservice.pb.go index 113d0eb4c4..0da134abc4 100644 --- a/go/vt/proto/vtctlservice/vtctlservice.pb.go +++ b/go/vt/proto/vtctlservice/vtctlservice.pb.go @@ -29,51 +29,52 @@ const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package func init() { proto.RegisterFile("vtctlservice.proto", fileDescriptor_27055cdbb1148d2b) } var fileDescriptor_27055cdbb1148d2b = []byte{ - // 692 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x96, 0xd1, 0x6e, 0xd3, 0x3e, - 0x14, 0xc6, 0xd7, 0x8b, 0xff, 0xf4, 0xc7, 0x0c, 0x36, 0x19, 0x04, 0x52, 0xb7, 0x86, 0xad, 0x30, - 0x60, 0x08, 0x5a, 0x34, 0x2e, 0xb9, 0xda, 0x4a, 0x29, 0xd5, 0xa4, 0x69, 0x74, 0xd5, 0x90, 0x26, - 0xed, 0xc2, 0x4b, 0x0e, 0x6d, 0x44, 0xe2, 0x64, 0xb1, 0x1b, 0xad, 0xe2, 0x45, 0xb8, 0xe2, 0x79, - 0xb8, 0xe4, 0x11, 0x50, 0x79, 0x11, 0xd4, 0xb8, 0x76, 0x1d, 0xc7, 0x69, 0x7b, 0xd7, 0x9e, 0xdf, - 0x77, 0xbe, 0x63, 0xa7, 0xfe, 0xe2, 0x22, 0x9c, 0x72, 0x97, 0x07, 0x0c, 0x92, 0xd4, 0x77, 0xa1, - 0x11, 0x27, 0x11, 0x8f, 0xf0, 0x86, 0x5e, 0xab, 0x6e, 0x66, 0xdf, 0x3c, 0xc2, 0x89, 0xc0, 0x87, - 0x37, 0xe8, 0xbf, 0x8b, 0x69, 0x09, 0x0f, 0xd1, 0x83, 0xf6, 0x2d, 0xb8, 0x23, 0x0e, 0xd9, 0xf7, - 0x56, 0x14, 0x86, 0x84, 0x7a, 0x78, 0xbf, 0x31, 0xef, 0xb0, 0xf0, 0x1e, 0xdc, 0x8c, 0x80, 0xf1, - 0xea, 0xf3, 0x65, 0x32, 0x16, 0x47, 0x94, 0x41, 0x7d, 0xed, 0x6d, 0xe5, 0xf0, 0x27, 0x46, 0xeb, - 0x19, 0xf4, 0xf0, 0x15, 0xda, 0x6a, 0x0d, 0x09, 0x1d, 0x40, 0x9f, 0x5c, 0x07, 0xc0, 0xfb, 0xe3, - 0x18, 0x70, 0x5d, 0xb3, 0x32, 0xa1, 0x1c, 0xf7, 0x74, 0xa1, 0x46, 0xce, 0xc2, 0x5f, 0xd0, 0xfd, - 0x56, 0x02, 0x84, 0xc3, 0x09, 0x8c, 0x59, 0x4c, 0x5c, 0xc0, 0xbb, 0x7a, 0x63, 0x0e, 0x49, 0xeb, - 0xbd, 0x05, 0x0a, 0x65, 0x7c, 0x8a, 0xee, 0x0a, 0x76, 0x3e, 0x24, 0x89, 0x87, 0x6b, 0x85, 0x9e, - 0xac, 0x2e, 0x2d, 0x9d, 0x32, 0xac, 0x2f, 0xf4, 0x03, 0x04, 0x50, 0xb2, 0xd0, 0x3c, 0xb2, 0x2d, - 0xd4, 0x54, 0x28, 0xe3, 0xcf, 0x68, 0x43, 0xb0, 0x6c, 0x22, 0xc3, 0x4e, 0xa1, 0x49, 0x00, 0x69, - 0xfa, 0xa4, 0x94, 0x2b, 0xcb, 0x3e, 0xba, 0x27, 0x88, 0x78, 0xe4, 0x0c, 0x17, 0x7b, 0x66, 0x44, - 0x9a, 0xee, 0x96, 0x0b, 0x94, 0x6b, 0x84, 0x1e, 0xb5, 0x43, 0x48, 0x06, 0x40, 0xdd, 0x71, 0x0f, - 0x62, 0x92, 0x00, 0xe5, 0xe2, 0xe1, 0xbe, 0xd4, 0x8f, 0x96, 0x55, 0x22, 0xe7, 0x1c, 0xac, 0xa0, - 0x54, 0x03, 0x13, 0xf4, 0xf8, 0xa3, 0x4f, 0xbd, 0xa3, 0x20, 0x10, 0x3b, 0xec, 0x52, 0xf5, 0xec, - 0x75, 0x9f, 0x12, 0x8d, 0x1c, 0xf9, 0x6a, 0x15, 0xa9, 0x9a, 0x79, 0x82, 0x50, 0x07, 0xf8, 0x31, - 0x71, 0xbf, 0x8d, 0x62, 0x86, 0x77, 0xb4, 0xde, 0x79, 0x59, 0x3a, 0xd7, 0x4a, 0xa8, 0x32, 0xbb, - 0x42, 0x5b, 0x1d, 0xe0, 0x2d, 0x08, 0x82, 0x2e, 0xfd, 0x1a, 0x9d, 0x92, 0x10, 0x58, 0x2e, 0x3b, - 0x26, 0xb4, 0x65, 0xa7, 0xa8, 0xd1, 0x8f, 0xb8, 0x46, 0x71, 0xcd, 0xde, 0x65, 0x3b, 0xe2, 0x39, - 0xac, 0xfc, 0x2e, 0xd1, 0xe6, 0x0c, 0xb0, 0xa3, 0xc0, 0x27, 0x0c, 0x18, 0xde, 0x2b, 0x36, 0x49, - 0x26, 0x7d, 0xeb, 0x8b, 0x24, 0xc6, 0x5a, 0xd5, 0xef, 0x67, 0xac, 0xd5, 0xfc, 0xcd, 0x9c, 0x32, - 0xac, 0xa7, 0x46, 0x03, 0xf9, 0xd4, 0xe8, 0xc0, 0x96, 0x9a, 0x3c, 0x57, 0x96, 0x9f, 0xd0, 0x9d, - 0x0e, 0xf0, 0x73, 0x77, 0x08, 0x21, 0xc1, 0xdb, 0x79, 0xbd, 0xa8, 0x4a, 0xb3, 0x1d, 0x3b, 0x54, - 0x4e, 0x6d, 0xf4, 0xff, 0xb4, 0x9c, 0x65, 0xa3, 0x6a, 0x68, 0xf5, 0x34, 0x6c, 0x5b, 0x99, 0x1e, - 0xe3, 0x69, 0x35, 0x49, 0x2f, 0x66, 0x8b, 0x32, 0x36, 0x31, 0x27, 0xb6, 0x18, 0x1b, 0x02, 0x63, - 0x9b, 0x22, 0xde, 0xe6, 0x36, 0x45, 0xb5, 0x64, 0x9b, 0x12, 0x1a, 0x59, 0x91, 0xef, 0x18, 0xab, - 0xba, 0x2c, 0x2b, 0xc5, 0xb7, 0x8b, 0x30, 0x93, 0x3b, 0x35, 0xcc, 0x8c, 0x6d, 0xd6, 0x4a, 0xa8, - 0x1e, 0xbc, 0x2e, 0xf5, 0xc5, 0x03, 0x3d, 0x4b, 0xfc, 0x90, 0x24, 0xe3, 0x5c, 0xf0, 0x4c, 0x68, - 0x0b, 0x5e, 0x51, 0xa3, 0xec, 0x7d, 0xf4, 0xf0, 0x2c, 0x20, 0x94, 0x82, 0x97, 0x7f, 0x0f, 0xea, - 0x57, 0xac, 0x4d, 0x20, 0xc7, 0xbc, 0x58, 0xaa, 0x53, 0xa3, 0x5c, 0x84, 0x7b, 0x10, 0x46, 0xa9, - 0xba, 0x39, 0xa6, 0xf9, 0xc2, 0xcf, 0x34, 0x83, 0x22, 0x96, 0x63, 0xf6, 0x97, 0xa8, 0xf4, 0xe0, - 0x0b, 0x9e, 0x4d, 0xcf, 0x26, 0xec, 0x15, 0x7a, 0x15, 0xb3, 0x05, 0xbf, 0x20, 0xd1, 0xef, 0x4d, - 0xb9, 0xb7, 0xd9, 0x99, 0xdb, 0xcd, 0xf5, 0xe9, 0xc8, 0x76, 0x6f, 0x9a, 0x0a, 0x65, 0xfc, 0x1d, - 0x55, 0x45, 0xad, 0x7d, 0xcb, 0x21, 0xa1, 0x24, 0x08, 0xd4, 0x45, 0x02, 0x1e, 0x7e, 0xad, 0x59, - 0x94, 0xcb, 0xe4, 0xc0, 0x37, 0x2b, 0xaa, 0xe5, 0xf0, 0xe3, 0xf7, 0xbf, 0x26, 0x4e, 0xe5, 0xf7, - 0xc4, 0xa9, 0xfc, 0x99, 0x38, 0x95, 0x1f, 0x7f, 0x9d, 0xb5, 0xcb, 0x83, 0xd4, 0xe7, 0xc0, 0x58, - 0xc3, 0x8f, 0x9a, 0xe2, 0x53, 0x73, 0x10, 0x35, 0x53, 0xde, 0xcc, 0xfe, 0xc3, 0x35, 0xf5, 0x7f, - 0x78, 0xd7, 0xeb, 0x59, 0xed, 0xdd, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x90, 0xec, 0xfc, 0x38, - 0x0c, 0x0a, 0x00, 0x00, + // 710 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x96, 0xd1, 0x4e, 0x14, 0x3d, + 0x14, 0xc7, 0xd9, 0x8b, 0x8f, 0x7c, 0x56, 0x14, 0x52, 0x8d, 0x26, 0x0b, 0x3b, 0x02, 0x8a, 0x8a, + 0x51, 0xd6, 0xe0, 0xa5, 0x57, 0xb0, 0xae, 0x48, 0x48, 0x08, 0x02, 0x81, 0x84, 0x84, 0x8b, 0x32, + 0x73, 0x60, 0x27, 0x74, 0x3a, 0x4b, 0x5b, 0x46, 0x36, 0xbe, 0x88, 0x8f, 0xe4, 0xa5, 0x8f, 0x60, + 0xf0, 0x09, 0x7c, 0x03, 0xb3, 0xd3, 0x6d, 0xe9, 0x74, 0x5a, 0xd8, 0xbb, 0xdd, 0xf3, 0xfb, 0x9f, + 0xff, 0xe9, 0x99, 0xe9, 0x69, 0x07, 0xe1, 0x42, 0xc6, 0x92, 0x0a, 0xe0, 0x45, 0x1a, 0xc3, 0x4a, + 0x9f, 0xe7, 0x32, 0xc7, 0x53, 0x76, 0xac, 0x39, 0x5d, 0xfe, 0x4b, 0x88, 0x24, 0x0a, 0xaf, 0x5e, + 0xa0, 0xff, 0x0e, 0x86, 0x21, 0xdc, 0x43, 0x8f, 0xba, 0x57, 0x10, 0x5f, 0x4a, 0x28, 0xff, 0x77, + 0xf2, 0x2c, 0x23, 0x2c, 0xc1, 0x4b, 0x2b, 0x37, 0x19, 0x1e, 0xbe, 0x0b, 0x17, 0x97, 0x20, 0x64, + 0xf3, 0xe5, 0x5d, 0x32, 0xd1, 0xcf, 0x99, 0x80, 0xc5, 0x89, 0xf7, 0x8d, 0xd5, 0xbf, 0x18, 0x4d, + 0x96, 0x30, 0xc1, 0xc7, 0x68, 0xa6, 0xd3, 0x23, 0xec, 0x0c, 0xf6, 0xc9, 0x09, 0x05, 0xb9, 0x3f, + 0xe8, 0x03, 0x5e, 0xb4, 0xac, 0x5c, 0xa8, 0xcb, 0x3d, 0xbf, 0x55, 0xa3, 0x6b, 0xe1, 0x43, 0xf4, + 0xb0, 0xc3, 0x81, 0x48, 0xd8, 0x82, 0x81, 0xe8, 0x93, 0x18, 0xf0, 0xbc, 0x9d, 0x58, 0x41, 0xda, + 0x7a, 0xe1, 0x16, 0x85, 0x31, 0xde, 0x46, 0xf7, 0x15, 0xdb, 0xeb, 0x11, 0x9e, 0xe0, 0x56, 0x2d, + 0xa7, 0x8c, 0x6b, 0xcb, 0x28, 0x84, 0xed, 0x85, 0x7e, 0x02, 0x0a, 0x81, 0x85, 0x56, 0x91, 0x6f, + 0xa1, 0xae, 0xc2, 0x18, 0x7f, 0x45, 0x53, 0x8a, 0x95, 0x15, 0x05, 0x8e, 0x6a, 0x49, 0x0a, 0x68, + 0xd3, 0x67, 0x41, 0x6e, 0x2c, 0xf7, 0xd1, 0x03, 0x45, 0xd4, 0x23, 0x17, 0xb8, 0x9e, 0x33, 0x22, + 0xda, 0x74, 0x3e, 0x2c, 0x30, 0xae, 0x39, 0x7a, 0xd2, 0xcd, 0x80, 0x9f, 0x01, 0x8b, 0x07, 0xbb, + 0xd0, 0x27, 0x1c, 0x98, 0x54, 0x0f, 0xf7, 0xb5, 0xbd, 0xb5, 0xbc, 0x12, 0x5d, 0x67, 0x79, 0x0c, + 0xa5, 0x29, 0xc8, 0xd1, 0xd3, 0xcf, 0x29, 0x4b, 0xd6, 0x28, 0x55, 0x1d, 0x6e, 0x32, 0xf3, 0xec, + 0x6d, 0x9f, 0x80, 0x46, 0x97, 0x7c, 0x33, 0x8e, 0xd4, 0xd4, 0xdc, 0x42, 0x68, 0x03, 0xe4, 0x3a, + 0x89, 0xcf, 0x2f, 0xfb, 0x02, 0xcf, 0x59, 0xb9, 0x37, 0x61, 0xed, 0xdc, 0x0a, 0x50, 0x63, 0x76, + 0x8c, 0x66, 0x36, 0x40, 0x76, 0x80, 0xd2, 0x4d, 0x76, 0x9a, 0x6f, 0x93, 0x0c, 0x44, 0x65, 0x76, + 0x5c, 0xe8, 0x9b, 0x9d, 0xba, 0xc6, 0xde, 0xe2, 0x16, 0xc5, 0x2d, 0x7f, 0x96, 0x6f, 0x8b, 0x57, + 0xb0, 0xf1, 0x3b, 0x42, 0xd3, 0x23, 0x20, 0xd6, 0x68, 0x4a, 0x04, 0x08, 0xbc, 0x50, 0x4f, 0xd2, + 0x4c, 0xfb, 0x2e, 0xde, 0x26, 0x71, 0xd6, 0x6a, 0xde, 0x9f, 0xb3, 0x56, 0xf7, 0x9d, 0x45, 0x21, + 0x6c, 0x4f, 0x8d, 0x05, 0xaa, 0x53, 0x63, 0x03, 0xdf, 0xd4, 0x54, 0xb9, 0xb1, 0xfc, 0x82, 0xee, + 0x6d, 0x80, 0xdc, 0x8b, 0x7b, 0x90, 0x11, 0x3c, 0x5b, 0xd5, 0xab, 0xa8, 0x36, 0x9b, 0xf3, 0x43, + 0xe3, 0xd4, 0x45, 0xff, 0x0f, 0xc3, 0xe5, 0x6c, 0x34, 0x1d, 0xad, 0x3d, 0x0d, 0xb3, 0x5e, 0x66, + 0x8f, 0xf1, 0x30, 0xca, 0x8b, 0x83, 0xd1, 0xa2, 0x9c, 0x26, 0x6e, 0x88, 0x6f, 0x8c, 0x1d, 0x81, + 0xd3, 0xa6, 0x1a, 0x6f, 0xb7, 0x4d, 0x15, 0x0d, 0xb4, 0xa9, 0xa1, 0x33, 0x2b, 0xfa, 0x8c, 0xf1, + 0xaa, 0x43, 0xb3, 0x52, 0x3f, 0x5d, 0x94, 0x99, 0xee, 0xd4, 0x31, 0x73, 0xda, 0x6c, 0x05, 0xa8, + 0xb3, 0x3b, 0x0e, 0x73, 0x7e, 0x7e, 0x4a, 0xf3, 0x6f, 0xb5, 0xdd, 0x61, 0x40, 0x60, 0x77, 0x58, + 0xdc, 0x9e, 0xe5, 0x4d, 0x96, 0xaa, 0x77, 0xb4, 0xc3, 0xd3, 0x8c, 0xf0, 0x41, 0x65, 0x96, 0x5d, + 0xe8, 0x9b, 0xe5, 0xba, 0xc6, 0xd8, 0xa7, 0xe8, 0xf1, 0x0e, 0x25, 0x8c, 0x41, 0x52, 0x3d, 0x5a, + 0xed, 0x5b, 0xdb, 0x27, 0xd0, 0x65, 0x5e, 0xdd, 0xa9, 0x33, 0xa5, 0x62, 0x84, 0x77, 0x21, 0xcb, + 0x0b, 0x73, 0x19, 0x0d, 0x47, 0x16, 0xbf, 0xb0, 0x0c, 0xea, 0x58, 0x97, 0x59, 0xba, 0x43, 0x65, + 0x9f, 0x25, 0x8a, 0x97, 0xd5, 0xcb, 0x0a, 0x0b, 0xb5, 0x5c, 0xc3, 0x7c, 0x67, 0x49, 0x4d, 0x62, + 0x5f, 0xc5, 0xba, 0xb7, 0xd1, 0x36, 0x9e, 0xaf, 0xe4, 0xd9, 0xc8, 0x77, 0x15, 0xbb, 0x0a, 0x63, + 0xfc, 0x1d, 0x35, 0x55, 0xac, 0x7b, 0x25, 0x81, 0x33, 0x42, 0xa9, 0xb9, 0x9b, 0x20, 0xc1, 0x6f, + 0x2d, 0x8b, 0xb0, 0x4c, 0x17, 0x7c, 0x37, 0xa6, 0x5a, 0x17, 0x5f, 0xff, 0xf8, 0xf3, 0x3a, 0x6a, + 0xfc, 0xba, 0x8e, 0x1a, 0xbf, 0xaf, 0xa3, 0xc6, 0x8f, 0x3f, 0xd1, 0xc4, 0xd1, 0x72, 0x91, 0x4a, + 0x10, 0x62, 0x25, 0xcd, 0xdb, 0xea, 0x57, 0xfb, 0x2c, 0x6f, 0x17, 0xb2, 0x5d, 0x7e, 0x16, 0xb6, + 0xed, 0x8f, 0xc6, 0x93, 0xc9, 0x32, 0xf6, 0xe1, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3b, 0xa1, + 0xee, 0xe7, 0x5f, 0x0a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -244,6 +245,8 @@ type VtctldClient interface { GetTablets(ctx context.Context, in *vtctldata.GetTabletsRequest, opts ...grpc.CallOption) (*vtctldata.GetTabletsResponse, error) // GetVSchema returns the vschema for a keyspace. GetVSchema(ctx context.Context, in *vtctldata.GetVSchemaRequest, opts ...grpc.CallOption) (*vtctldata.GetVSchemaResponse, error) + // GetWorkflows returns a list of workflows for the given keyspace. + GetWorkflows(ctx context.Context, in *vtctldata.GetWorkflowsRequest, opts ...grpc.CallOption) (*vtctldata.GetWorkflowsResponse, error) // InitShardPrimary sets the initial primary for a shard. Will make all other // tablets in the shard replicas of the provided primary. // @@ -467,6 +470,15 @@ func (c *vtctldClient) GetVSchema(ctx context.Context, in *vtctldata.GetVSchemaR return out, nil } +func (c *vtctldClient) GetWorkflows(ctx context.Context, in *vtctldata.GetWorkflowsRequest, opts ...grpc.CallOption) (*vtctldata.GetWorkflowsResponse, error) { + out := new(vtctldata.GetWorkflowsResponse) + err := c.cc.Invoke(ctx, "/vtctlservice.Vtctld/GetWorkflows", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *vtctldClient) InitShardPrimary(ctx context.Context, in *vtctldata.InitShardPrimaryRequest, opts ...grpc.CallOption) (*vtctldata.InitShardPrimaryResponse, error) { out := new(vtctldata.InitShardPrimaryResponse) err := c.cc.Invoke(ctx, "/vtctlservice.Vtctld/InitShardPrimary", in, out, opts...) @@ -580,6 +592,8 @@ type VtctldServer interface { GetTablets(context.Context, *vtctldata.GetTabletsRequest) (*vtctldata.GetTabletsResponse, error) // GetVSchema returns the vschema for a keyspace. GetVSchema(context.Context, *vtctldata.GetVSchemaRequest) (*vtctldata.GetVSchemaResponse, error) + // GetWorkflows returns a list of workflows for the given keyspace. + GetWorkflows(context.Context, *vtctldata.GetWorkflowsRequest) (*vtctldata.GetWorkflowsResponse, error) // InitShardPrimary sets the initial primary for a shard. Will make all other // tablets in the shard replicas of the provided primary. // @@ -679,6 +693,9 @@ func (*UnimplementedVtctldServer) GetTablets(ctx context.Context, req *vtctldata func (*UnimplementedVtctldServer) GetVSchema(ctx context.Context, req *vtctldata.GetVSchemaRequest) (*vtctldata.GetVSchemaResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetVSchema not implemented") } +func (*UnimplementedVtctldServer) GetWorkflows(ctx context.Context, req *vtctldata.GetWorkflowsRequest) (*vtctldata.GetWorkflowsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetWorkflows not implemented") +} func (*UnimplementedVtctldServer) InitShardPrimary(ctx context.Context, req *vtctldata.InitShardPrimaryRequest) (*vtctldata.InitShardPrimaryResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method InitShardPrimary not implemented") } @@ -1062,6 +1079,24 @@ func _Vtctld_GetVSchema_Handler(srv interface{}, ctx context.Context, dec func(i return interceptor(ctx, in, info, handler) } +func _Vtctld_GetWorkflows_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(vtctldata.GetWorkflowsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VtctldServer).GetWorkflows(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/vtctlservice.Vtctld/GetWorkflows", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VtctldServer).GetWorkflows(ctx, req.(*vtctldata.GetWorkflowsRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Vtctld_InitShardPrimary_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(vtctldata.InitShardPrimaryRequest) if err := dec(in); err != nil { @@ -1254,6 +1289,10 @@ var _Vtctld_serviceDesc = grpc.ServiceDesc{ MethodName: "GetVSchema", Handler: _Vtctld_GetVSchema_Handler, }, + { + MethodName: "GetWorkflows", + Handler: _Vtctld_GetWorkflows_Handler, + }, { MethodName: "InitShardPrimary", Handler: _Vtctld_InitShardPrimary_Handler, diff --git a/go/vt/vtctl/grpcvtctldclient/client_gen.go b/go/vt/vtctl/grpcvtctldclient/client_gen.go index 0305a96700..6bbd45c42e 100644 --- a/go/vt/vtctl/grpcvtctldclient/client_gen.go +++ b/go/vt/vtctl/grpcvtctldclient/client_gen.go @@ -208,6 +208,15 @@ func (client *gRPCVtctldClient) GetVSchema(ctx context.Context, in *vtctldatapb. return client.c.GetVSchema(ctx, in, opts...) } +// GetWorkflows is part of the vtctlservicepb.VtctldClient interface. +func (client *gRPCVtctldClient) GetWorkflows(ctx context.Context, in *vtctldatapb.GetWorkflowsRequest, opts ...grpc.CallOption) (*vtctldatapb.GetWorkflowsResponse, error) { + if client.c == nil { + return nil, status.Error(codes.Unavailable, connClosedMsg) + } + + return client.c.GetWorkflows(ctx, in, opts...) +} + // InitShardPrimary is part of the vtctlservicepb.VtctldClient interface. func (client *gRPCVtctldClient) InitShardPrimary(ctx context.Context, in *vtctldatapb.InitShardPrimaryRequest, opts ...grpc.CallOption) (*vtctldatapb.InitShardPrimaryResponse, error) { if client.c == nil { diff --git a/go/vt/vtctl/grpcvtctldserver/server.go b/go/vt/vtctl/grpcvtctldserver/server.go index e8b7736aec..05eedf4189 100644 --- a/go/vt/vtctl/grpcvtctldserver/server.go +++ b/go/vt/vtctl/grpcvtctldserver/server.go @@ -676,6 +676,11 @@ func (s *VtctldServer) GetVSchema(ctx context.Context, req *vtctldatapb.GetVSche }, nil } +// GetWorkflows is part of the vtctlservicepb.VtctldServer interface. +func (s *VtctldServer) GetWorkflows(ctx context.Context, req *vtctldatapb.GetWorkflowsRequest) (*vtctldatapb.GetWorkflowsResponse, error) { + panic("unimplemented!") +} + // InitShardPrimary is part of the vtctlservicepb.VtctldServer interface. func (s *VtctldServer) InitShardPrimary(ctx context.Context, req *vtctldatapb.InitShardPrimaryRequest) (*vtctldatapb.InitShardPrimaryResponse, error) { if req.Keyspace == "" { diff --git a/proto/vtctldata.proto b/proto/vtctldata.proto index 9db1a1eb97..5d44976655 100644 --- a/proto/vtctldata.proto +++ b/proto/vtctldata.proto @@ -22,6 +22,7 @@ option go_package = "vitess.io/vitess/go/vt/proto/vtctldata"; package vtctldata; +import "binlogdata.proto"; import "logutil.proto"; import "mysqlctl.proto"; import "tabletmanagerdata.proto"; @@ -83,6 +84,46 @@ message Shard { topodata.Shard shard = 3; } +// TODO: comment the hell out of this. +message Workflow { + string name = 1; + ReplicationLocation source = 2; + ReplicationLocation target = 3; + int64 max_v_replication_lag = 4; + map shard_statuses = 5; + + message ReplicationLocation { + string keyspace = 1; + repeated string shards = 2; + } + + message ReplicationStatus { + int64 id = 1; + string shard = 2; + topodata.TabletAlias tablet = 3; + binlogdata.BinlogSource binlog_source = 4; + string position = 5; + string stop_position = 6; + string state = 7; + string db_name = 8; + vttime.Time transaction_timestamp = 9; + vttime.Time time_updated = 10; + string message = 11; + repeated CopyState copy_states = 12; + + message CopyState { + string table = 1; + string last_pk = 2; + } + } + + message ShardReplicationStatus { + repeated ReplicationStatus primary_replication_statuses = 1; + repeated topodata.Shard.TabletControl tablet_controls = 2; + bool is_primary_serving = 3; + } +} + /* Request/response types for VtctldServer */ message ChangeTabletTypeRequest { @@ -349,6 +390,15 @@ message GetVSchemaResponse { vschema.Keyspace v_schema = 1; } +message GetWorkflowsRequest { + string keyspace = 1; + bool active_only = 2; +} + +message GetWorkflowsResponse { + repeated Workflow workflows = 1; +} + message InitShardPrimaryRequest { string keyspace = 1; string shard = 2; diff --git a/proto/vtctlservice.proto b/proto/vtctlservice.proto index 6578b467db..17a06b4b51 100644 --- a/proto/vtctlservice.proto +++ b/proto/vtctlservice.proto @@ -88,6 +88,8 @@ service Vtctld { rpc GetTablets(vtctldata.GetTabletsRequest) returns (vtctldata.GetTabletsResponse) {}; // GetVSchema returns the vschema for a keyspace. rpc GetVSchema(vtctldata.GetVSchemaRequest) returns (vtctldata.GetVSchemaResponse) {}; + // GetWorkflows returns a list of workflows for the given keyspace. + rpc GetWorkflows(vtctldata.GetWorkflowsRequest) returns (vtctldata.GetWorkflowsResponse) {}; // InitShardPrimary sets the initial primary for a shard. Will make all other // tablets in the shard replicas of the provided primary. // From 0680c19b4b7877a7540e8804afad7ac7cee414e0 Mon Sep 17 00:00:00 2001 From: Andrew Mason Date: Fri, 26 Feb 2021 20:35:21 -0500 Subject: [PATCH 03/20] wip - first stab at a workflow/vexec API outside of wrangler This will require a significant amount of polish, testing, and documentation. I'll also need to see if it even works at all with how wrangler currently does vexec queries. Signed-off-by: Andrew Mason --- go/vt/vtctl/workflow/doc.go | 45 +++ go/vt/vtctl/workflow/errors.go | 26 ++ go/vt/vtctl/workflow/manager.go | 303 ++++++++++++++++++++ go/vt/vtctl/workflow/vexec.go | 155 ++++++++++ go/vt/vtctl/workflow/vexec/query_planner.go | 259 +++++++++++++++++ 5 files changed, 788 insertions(+) create mode 100644 go/vt/vtctl/workflow/doc.go create mode 100644 go/vt/vtctl/workflow/errors.go create mode 100644 go/vt/vtctl/workflow/manager.go create mode 100644 go/vt/vtctl/workflow/vexec.go create mode 100644 go/vt/vtctl/workflow/vexec/query_planner.go diff --git a/go/vt/vtctl/workflow/doc.go b/go/vt/vtctl/workflow/doc.go new file mode 100644 index 0000000000..c334470320 --- /dev/null +++ b/go/vt/vtctl/workflow/doc.go @@ -0,0 +1,45 @@ +/* +Copyright 2021 The Vitess Authors. + +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 workflow defines types and functions for working with Vitess workflows. + +This is still a very rough sketch, far from a final API, but I want to document +some things here as I go: + +(1) The lines between package workflow and package workflow/vexec are, uh, + blurry at best, and definitely need serious thinking and refinement. Maybe + there shouldn't even be two separate packages at all. The reason I have the + two packages right now is because I'm operating under the assumption that + there are workflows that are vexec, and then there are other workflows. If + it's true that all workflows are vexec workflows, then probably one single + package could make more sense. For now, two packages seems the way to go, + but like I said, the boundaries are blurry, and things that belong in one + package are in the other, because I haven't gone back and moved things + around. +(2) I'm aiming for this to be a drop-in replacement (more or less) for the + function calls in go/vt/wrangler. However, I'd rather define a better + abstraction if it means having to rewrite even significant portions of the + existing wrangler code to adapt to it, than make a subpar API in the name of + backwards compatibility. I'm not sure if that's a tradeoff I'll even need to + consider in the future, but I'm putting a stake in the ground on which side + of that tradeoff I intend to fall, should it come to it. +(3) Eventually we'll need to consider how the online schema migration workflows + fit into this. I'm trying to at least be somewhat abstract in the + vexec / queryplanner APIs to fit with the QueryParams thing that wrangler + uses, which _should_ work, but who knows?? Time will tell. +*/ +package workflow diff --git a/go/vt/vtctl/workflow/errors.go b/go/vt/vtctl/workflow/errors.go new file mode 100644 index 0000000000..1b898f89cc --- /dev/null +++ b/go/vt/vtctl/workflow/errors.go @@ -0,0 +1,26 @@ +/* +Copyright 2021 The Vitess Authors. + +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 workflow + +import "errors" + +var ( + ErrNoShardPrimary = errors.New("no primary found for shard") + ErrNoShardsForKeyspace = errors.New("no shards found in keyspace") + ErrUnsupportedQuery = errors.New("query not supported by vexec") + ErrUnsupportedTable = errors.New("table not supported by vexec") +) diff --git a/go/vt/vtctl/workflow/manager.go b/go/vt/vtctl/workflow/manager.go new file mode 100644 index 0000000000..b87dcb1ee0 --- /dev/null +++ b/go/vt/vtctl/workflow/manager.go @@ -0,0 +1,303 @@ +/* +Copyright 2021 The Vitess Authors. + +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 workflow + +import ( + "context" + "fmt" + "strings" + "time" + + "github.com/golang/protobuf/proto" + "k8s.io/apimachinery/pkg/util/sets" + + "vitess.io/vitess/go/sqltypes" + "vitess.io/vitess/go/vt/topo" + "vitess.io/vitess/go/vt/vtgate/evalengine" + "vitess.io/vitess/go/vt/vttablet/tmclient" + + binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" + vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata" + "vitess.io/vitess/go/vt/proto/vttime" +) + +type Manager struct { + ts *topo.Server + tmc tmclient.TabletManagerClient +} + +func NewManager(ts *topo.Server, tmc tmclient.TabletManagerClient) *Manager { + return &Manager{ + ts: ts, + tmc: tmc, + } +} + +func (manager *Manager) GetWorkflows(ctx context.Context, req *vtctldatapb.GetWorkflowsRequest) (*vtctldatapb.GetWorkflowsResponse, error) { + where := "" + if req.ActiveOnly { + where = "WHERE state <> 'Stopped'" + } + + query := fmt.Sprintf(` + SELECT + id, + workflow, + source, + pos, + stop_pos, + max_replication_lag, + state, + db_name, + time_updated, + transaction_timestamp, + message + FROM + _vt.vreplication + %s`, + where, + ) + + vx := NewVExec(req.Keyspace, manager.ts, manager.tmc) + results, err := vx.QueryContext(ctx, query) + if err != nil { + return nil, err + } + + workflowsMap := make(map[string]*vtctldatapb.Workflow, len(results)) + sourceKeyspaceByWorkflow := make(map[string]string, len(results)) + sourceShardsByWorkflow := make(map[string]sets.String, len(results)) + targetKeyspaceByWorkflow := make(map[string]string, len(results)) + targetShardsByWorkflow := make(map[string]sets.String, len(results)) + maxVReplicationLagByWorkflow := make(map[string]float64, len(results)) + + // We guarantee the following invariants when this function is called for a + // given workflow: + // - workflow.Name != "" (more precisely, ".Name is set 'properly'") + // - workflowsMap[workflow.Name] == workflow + // - sourceShardsByWorkflow[workflow.Name] != nil + // - targetShardsByWorkflow[workflow.Name] != nil + // - workflow.ShardStatuses != nil + scanWorkflow := func(ctx context.Context, workflow *vtctldatapb.Workflow, row []sqltypes.Value, tablet *topo.TabletInfo) error { + id, err := evalengine.ToInt64(row[0]) + if err != nil { + return err + } + + var bls binlogdatapb.BinlogSource + if err := proto.UnmarshalText(row[2].ToString(), &bls); err != nil { + return err + } + + pos := row[3].ToString() + stopPos := row[4].ToString() + state := row[6].ToString() + dbName := row[7].ToString() + + timeUpdatedSeconds, err := evalengine.ToInt64(row[8]) + if err != nil { + return err + } + + transactionTimeSeconds, err := evalengine.ToInt64(row[9]) + if err != nil { + return err + } + + message := row[10].ToString() + + status := &vtctldatapb.Workflow_ReplicationStatus{ + Id: id, + Shard: tablet.Shard, + Tablet: tablet.Alias, + BinlogSource: &bls, + Position: pos, + StopPosition: stopPos, + State: state, + DbName: dbName, + TransactionTimestamp: &vttime.Time{ + Seconds: transactionTimeSeconds, + }, + TimeUpdated: &vttime.Time{ + Seconds: timeUpdatedSeconds, + }, + Message: message, + } + + status.CopyStates, err = manager.getWorkflowCopyStates(ctx, tablet, id) + if err != nil { + return err + } + + switch { + case strings.Contains(strings.ToLower(status.Message), "error"): + status.State = "Error" + case status.State == "Running" && len(status.CopyStates) > 0: + status.State = "Copying" + case status.State == "Running" && int64(time.Now().Second())-timeUpdatedSeconds > 10: + status.State = "Lagging" + } + + shardStatusKey := fmt.Sprintf("%s/%s", tablet.Shard, tablet.AliasString()) + shardStatus, ok := workflow.ShardStatuses[shardStatusKey] + if !ok { + ctx, cancel := context.WithTimeout(ctx, *topo.RemoteOperationTimeout) + defer cancel() + + si, err := manager.ts.GetShard(ctx, req.Keyspace, tablet.Shard) + if err != nil { + return err + } + + shardStatus = &vtctldatapb.Workflow_ShardReplicationStatus{ + PrimaryReplicationStatuses: nil, + TabletControls: si.TabletControls, + IsPrimaryServing: si.IsMasterServing, + } + + workflow.ShardStatuses[shardStatusKey] = shardStatus + } + + shardStatus.PrimaryReplicationStatuses = append(shardStatus.PrimaryReplicationStatuses, status) + sourceShardsByWorkflow[workflow.Name].Insert(status.BinlogSource.Shard) + targetShardsByWorkflow[workflow.Name].Insert(tablet.Shard) + + if ks, ok := sourceKeyspaceByWorkflow[workflow.Name]; ok && ks != status.BinlogSource.Keyspace { + // error, this is impossible + } + + sourceKeyspaceByWorkflow[workflow.Name] = status.BinlogSource.Keyspace + + if ks, ok := targetKeyspaceByWorkflow[workflow.Name]; ok && ks != tablet.Keyspace { + // error, this is impossible + } + + targetKeyspaceByWorkflow[workflow.Name] = tablet.Keyspace + + timeUpdated := time.Unix(timeUpdatedSeconds, 0) + vreplicationLag := time.Since(timeUpdated) + + if currentMaxLag, ok := maxVReplicationLagByWorkflow[workflow.Name]; ok { + if vreplicationLag.Seconds() > currentMaxLag { + maxVReplicationLagByWorkflow[workflow.Name] = vreplicationLag.Seconds() + } + } else { + maxVReplicationLagByWorkflow[workflow.Name] = vreplicationLag.Seconds() + } + + return nil + } + + for tablet, result := range results { + qr := sqltypes.Proto3ToResult(result) + + // In the old implementation, we knew we had at most one (0 <= N <= 1) + // workflow for each shard primary we queried. There might be multiple + // rows (streams) comprising that workflow, so we would aggregate the + // rows for a given primary into a single value ("the workflow", + // ReplicationStatusResult in the old types). + // + // In this version, we have many (N >= 0) workflows for each shard + // primary we queried, so we need to determine if each row corresponds + // to a workflow we're already aggregating, or if it's a workflow we + // haven't seen yet for that shard primary. We use the workflow name to + // dedupe for this. + for _, row := range qr.Rows { + workflowName := row[1].ToString() + workflow, ok := workflowsMap[workflowName] + if !ok { + workflow = &vtctldatapb.Workflow{ + Name: workflowName, + ShardStatuses: map[string]*vtctldatapb.Workflow_ShardReplicationStatus{}, + } + + workflowsMap[workflowName] = workflow + sourceShardsByWorkflow[workflowName] = sets.NewString() + targetShardsByWorkflow[workflowName] = sets.NewString() + } + + if err := scanWorkflow(ctx, workflow, row, tablet); err != nil { + return nil, err + } + } + } + + workflows := make([]*vtctldatapb.Workflow, 0, len(workflowsMap)) + + for name, workflow := range workflowsMap { + sourceShards, ok := sourceShardsByWorkflow[name] + if !ok { + // error + } + + sourceKeyspace, ok := sourceKeyspaceByWorkflow[name] + + targetShards, ok := targetShardsByWorkflow[name] + if !ok { + // error + } + + targetKeyspace, ok := targetKeyspaceByWorkflow[name] + + maxVReplicationLag, ok := maxVReplicationLagByWorkflow[name] + if !ok { + // error + } + + workflow.Source = &vtctldatapb.Workflow_ReplicationLocation{ + Keyspace: sourceKeyspace, + Shards: sourceShards.List(), + } + + workflow.Target = &vtctldatapb.Workflow_ReplicationLocation{ + Keyspace: targetKeyspace, + Shards: targetShards.List(), + } + + workflow.MaxVReplicationLag = int64(maxVReplicationLag) + + workflows = append(workflows, workflow) + } + + return &vtctldatapb.GetWorkflowsResponse{ + Workflows: workflows, + }, nil +} + +func (manager *Manager) getWorkflowCopyStates(ctx context.Context, tablet *topo.TabletInfo, id int64) ([]*vtctldatapb.Workflow_ReplicationStatus_CopyState, error) { + query := fmt.Sprintf("select table_name, lastpk from _vt.copy_state where vrepl_id = %d", id) + qr, err := manager.tmc.VReplicationExec(ctx, tablet.Tablet, query) + if err != nil { + return nil, err + } + + result := sqltypes.Proto3ToResult(qr) + if result == nil { + return nil, nil + } + + copyStates := make([]*vtctldatapb.Workflow_ReplicationStatus_CopyState, len(result.Rows)) + for i, row := range result.Rows { + // These fields are technically varbinary, but this is close enough. + copyStates[i] = &vtctldatapb.Workflow_ReplicationStatus_CopyState{ + Table: row[0].ToString(), + LastPk: row[1].ToString(), + } + } + + return copyStates, nil +} diff --git a/go/vt/vtctl/workflow/vexec.go b/go/vt/vtctl/workflow/vexec.go new file mode 100644 index 0000000000..90609327ef --- /dev/null +++ b/go/vt/vtctl/workflow/vexec.go @@ -0,0 +1,155 @@ +/* +Copyright 2021 The Vitess Authors. + +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 workflow + +import ( + "context" + "errors" + "fmt" + + "vitess.io/vitess/go/vt/sqlparser" + "vitess.io/vitess/go/vt/topo" + "vitess.io/vitess/go/vt/topo/topoproto" + "vitess.io/vitess/go/vt/vtctl/workflow/vexec" + "vitess.io/vitess/go/vt/vttablet/tmclient" + + querypb "vitess.io/vitess/go/vt/proto/query" +) + +const ( + VExecTableQualifier = "_vt" + + SchemaMigrationsTableName = "schema_migrations" + VReplicationTableName = "vreplication" +) + +type VExec struct { + ts *topo.Server + tmc tmclient.TabletManagerClient + + keyspace string + primaries []*topo.TabletInfo +} + +func NewVExec(keyspace string, ts *topo.Server, tmc tmclient.TabletManagerClient) *VExec { + return &VExec{ + ts: ts, + tmc: tmc, + keyspace: keyspace, + } +} + +func (vx *VExec) QueryContext(ctx context.Context, query string) (map[*topo.TabletInfo]*querypb.QueryResult, error) { + if vx.primaries == nil { + if err := vx.initialize(ctx); err != nil { + return nil, err + } + } + + stmt, err := sqlparser.Parse(query) + if err != nil { + return nil, err + } + + table, err := ExtractTableName(stmt) + if err != nil { + return nil, err + } + + planner, err := vx.GetPlanner(table) + if err != nil { + return nil, err + } + + qp, err := planner.PlanQuery(stmt) + if err != nil { + return nil, err + } + + return qp.ExecuteScatter(ctx, vx.primaries...) +} + +func (vx *VExec) initialize(ctx context.Context) error { + vx.primaries = nil + + shards, err := vx.ts.GetShardNames(ctx, vx.keyspace) + if err != nil { + return err + } + + if len(shards) == 0 { + return fmt.Errorf("%w %s", ErrNoShardsForKeyspace, vx.keyspace) + } + + primaries := make([]*topo.TabletInfo, 0, len(shards)) + + for _, shard := range shards { + si, err := vx.ts.GetShard(ctx, vx.keyspace, shard) + if err != nil { + return err + } + + if si.MasterAlias == nil { + return fmt.Errorf("%w %s/%s", ErrNoShardPrimary, vx.keyspace, shard) + } + + primary, err := vx.ts.GetTablet(ctx, si.MasterAlias) + if err != nil { + return err + } + + if primary == nil { + return fmt.Errorf("%w %s/%s: tablet %v not found", ErrNoShardPrimary, vx.keyspace, shard, topoproto.TabletAliasString(si.MasterAlias)) + } + + primaries = append(primaries, primary) + } + + vx.primaries = primaries + + return nil +} + +func ExtractTableName(stmt sqlparser.Statement) (string, error) { // TODO: private? + switch stmt := stmt.(type) { + case *sqlparser.Update: + return sqlparser.String(stmt.TableExprs), nil + case *sqlparser.Delete: + return sqlparser.String(stmt.TableExprs), nil + case *sqlparser.Insert: + return sqlparser.String(stmt.Table), nil + case *sqlparser.Select: + return sqlparser.String(stmt.From), nil + } + + return "", fmt.Errorf("%w: %+v", ErrUnsupportedQuery, sqlparser.String(stmt)) +} + +func (vx *VExec) GetPlanner(table string) (vexec.QueryPlanner, error) { // TODO: private? + switch table { + case qualifiedTableName(VReplicationTableName): + return vexec.NewVReplicationQueryPlanner(vx.tmc, "", vx.primaries[0].DbName()), nil + case qualifiedTableName(SchemaMigrationsTableName): + return nil, errors.New("Schema Migrations not yet supported in new workflow package") + default: + return nil, fmt.Errorf("%w: %v", ErrUnsupportedTable, table) + } +} + +func qualifiedTableName(name string) string { + return fmt.Sprintf("%s.%s", VExecTableQualifier, name) +} diff --git a/go/vt/vtctl/workflow/vexec/query_planner.go b/go/vt/vtctl/workflow/vexec/query_planner.go new file mode 100644 index 0000000000..f253efb593 --- /dev/null +++ b/go/vt/vtctl/workflow/vexec/query_planner.go @@ -0,0 +1,259 @@ +/* +Copyright 2021 The Vitess Authors. + +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 vexec + +import ( + "context" + "errors" + "fmt" + "sync" + + "vitess.io/vitess/go/vt/concurrency" + "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/sqlparser" + "vitess.io/vitess/go/vt/topo" + "vitess.io/vitess/go/vt/vterrors" + "vitess.io/vitess/go/vt/vttablet/tmclient" + + querypb "vitess.io/vitess/go/vt/proto/query" +) + +var ErrUnsupportedQuery = errors.New("query not supported by vexec") + +type QueryPlanner interface { + PlanQuery(stmt sqlparser.Statement) (*QueryPlan, error) + QueryParams() QueryParams + + DBName() string + WorkflowName() string +} + +type QueryParams struct { + DBNameColumn string + WorkflowColumn string +} + +type VReplicationQueryPlanner struct { + tmc tmclient.TabletManagerClient + + dbname string + workflow string +} + +func NewVReplicationQueryPlanner(tmc tmclient.TabletManagerClient, workflow string, dbname string) *VReplicationQueryPlanner { + return &VReplicationQueryPlanner{ + tmc: tmc, + dbname: dbname, + workflow: workflow, + } +} + +func (planner *VReplicationQueryPlanner) DBName() string { + return planner.dbname +} + +func (planner *VReplicationQueryPlanner) PlanQuery(stmt sqlparser.Statement) (plan *QueryPlan, err error) { + switch stmt := stmt.(type) { + case *sqlparser.Select: + plan, err = planner.planSelect(stmt) + case *sqlparser.Insert, *sqlparser.Update, *sqlparser.Delete: + plan, err = nil, fmt.Errorf("%w: bother @ajm188, this is still WIP", ErrUnsupportedQuery) + default: + err = ErrUnsupportedQuery + } + + if err != nil { + return nil, fmt.Errorf("%w: %s", err, sqlparser.String(stmt)) + } + + return plan, nil +} + +func (planner *VReplicationQueryPlanner) QueryParams() QueryParams { + return QueryParams{ + DBNameColumn: "db_name", + WorkflowColumn: "workflow", + } +} + +func (planner *VReplicationQueryPlanner) WorkflowName() string { + return planner.workflow +} + +func (planner *VReplicationQueryPlanner) planSelect(sel *sqlparser.Select) (*QueryPlan, error) { + sel.Where = addDefaultWheres(planner, sel.Where) + + buf := sqlparser.NewTrackedBuffer(nil) + buf.Myprintf("%v", sel) + + return &QueryPlan{ + ParsedQuery: buf.ParsedQuery(), + tmc: planner.tmc, + }, nil +} + +type QueryPlan struct { + ParsedQuery *sqlparser.ParsedQuery + + tmc tmclient.TabletManagerClient +} + +func (qp *QueryPlan) Execute(ctx context.Context, target *topo.TabletInfo) (qr *querypb.QueryResult, err error) { + if qp.ParsedQuery == nil { + return nil, errors.New("TODO: some error about executing a query before it was planned") + } + + targetAliasStr := target.AliasString() + + log.Infof("Running %v on %v", qp.ParsedQuery.Query, targetAliasStr) + defer func() { + if err != nil { + log.Warningf("Result on %v: %v", targetAliasStr, err) + + return + } + + log.Infof("Result on %v: %v", targetAliasStr, qr) + }() + + qr, err = qp.tmc.VReplicationExec(ctx, target.Tablet, qp.ParsedQuery.Query) + if err != nil { + return nil, err + } + + if qr.RowsAffected == 0 { + log.Infof("no matching streams found for workflows %s, tablet %s, query %s", "TODO: pass through workflow", targetAliasStr, qp.ParsedQuery.Query) + } + + return qr, nil +} + +func (qp *QueryPlan) ExecuteScatter(ctx context.Context, targets ...*topo.TabletInfo) (map[*topo.TabletInfo]*querypb.QueryResult, error) { + var ( + m sync.Mutex + wg sync.WaitGroup + rec concurrency.AllErrorRecorder + results = make(map[*topo.TabletInfo]*querypb.QueryResult, len(targets)) + ) + + for _, target := range targets { + wg.Add(1) + + go func(ctx context.Context, target *topo.TabletInfo) { + defer wg.Done() + + qr, err := qp.Execute(ctx, target) + if err != nil { + rec.RecordError(err) + + return + } + + m.Lock() + defer m.Unlock() + + results[target] = qr + }(ctx, target) + } + + wg.Wait() + + return results, rec.AggrError(vterrors.Aggregate) +} + +func addDefaultWheres(planner QueryPlanner, where *sqlparser.Where) *sqlparser.Where { + cols := extractWhereComparisonColumns(where) + + params := planner.QueryParams() + hasDBNameCol := false + hasWorkflowCol := false + + for _, col := range cols { + switch col { + case params.DBNameColumn: + hasDBNameCol = true + case params.WorkflowColumn: + hasWorkflowCol = true + } + } + + newWhere := where + + if !hasDBNameCol { + expr := &sqlparser.ComparisonExpr{ + Left: &sqlparser.ColName{ + Name: sqlparser.NewColIdent(params.DBNameColumn), + }, + Operator: sqlparser.EqualOp, + Right: sqlparser.NewStrLiteral([]byte(planner.DBName())), + } + + switch newWhere { + case nil: + newWhere = &sqlparser.Where{ + Type: sqlparser.WhereClause, + Expr: expr, + } + default: + newWhere.Expr = &sqlparser.AndExpr{ + Left: newWhere.Expr, + Right: expr, + } + } + } + + if !hasWorkflowCol && planner.WorkflowName() != "" { + expr := &sqlparser.ComparisonExpr{ + Left: &sqlparser.ColName{ + Name: sqlparser.NewColIdent(params.WorkflowColumn), + }, + Operator: sqlparser.EqualOp, + Right: sqlparser.NewStrLiteral([]byte(planner.WorkflowName())), + } + + newWhere.Expr = &sqlparser.AndExpr{ + Left: newWhere.Expr, + Right: expr, + } + } + + return newWhere +} + +// extractWhereComparisonColumns extracts the column names used in AND-ed +// comparison expressions in a where clause, given the following assumptions: +// - (1) The column name is always the left-hand side of the comparison. +// - (2) There are no compound expressions within the where clause involving OR. +func extractWhereComparisonColumns(where *sqlparser.Where) []string { + if where == nil { + return nil + } + + exprs := sqlparser.SplitAndExpression(nil, where.Expr) + cols := make([]string, 0, len(exprs)) + + for _, expr := range exprs { + switch expr := expr.(type) { + case *sqlparser.ComparisonExpr: + if qualifiedName, ok := expr.Left.(*sqlparser.ColName); ok { + cols = append(cols, qualifiedName.Name.String()) + } + } + } + + return cols +} From bf9a306f3b84fb439b49dc85de7079c0d77f3dbe Mon Sep 17 00:00:00 2001 From: Andrew Mason Date: Fri, 26 Feb 2021 20:50:34 -0500 Subject: [PATCH 04/20] wip - move some files around, trying to get closer to good boundaries Signed-off-by: Andrew Mason --- go/vt/vtctl/workflow/manager.go | 3 ++- go/vt/vtctl/workflow/{ => vexec}/errors.go | 2 +- go/vt/vtctl/workflow/vexec/query_planner.go | 2 -- go/vt/vtctl/workflow/{ => vexec}/vexec.go | 7 +++---- 4 files changed, 6 insertions(+), 8 deletions(-) rename go/vt/vtctl/workflow/{ => vexec}/errors.go (98%) rename go/vt/vtctl/workflow/{ => vexec}/vexec.go (93%) diff --git a/go/vt/vtctl/workflow/manager.go b/go/vt/vtctl/workflow/manager.go index b87dcb1ee0..58d6363f8e 100644 --- a/go/vt/vtctl/workflow/manager.go +++ b/go/vt/vtctl/workflow/manager.go @@ -27,6 +27,7 @@ import ( "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/vt/topo" + "vitess.io/vitess/go/vt/vtctl/workflow/vexec" "vitess.io/vitess/go/vt/vtgate/evalengine" "vitess.io/vitess/go/vt/vttablet/tmclient" @@ -72,7 +73,7 @@ func (manager *Manager) GetWorkflows(ctx context.Context, req *vtctldatapb.GetWo where, ) - vx := NewVExec(req.Keyspace, manager.ts, manager.tmc) + vx := vexec.NewVExec(req.Keyspace, manager.ts, manager.tmc) results, err := vx.QueryContext(ctx, query) if err != nil { return nil, err diff --git a/go/vt/vtctl/workflow/errors.go b/go/vt/vtctl/workflow/vexec/errors.go similarity index 98% rename from go/vt/vtctl/workflow/errors.go rename to go/vt/vtctl/workflow/vexec/errors.go index 1b898f89cc..5ab1389167 100644 --- a/go/vt/vtctl/workflow/errors.go +++ b/go/vt/vtctl/workflow/vexec/errors.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package workflow +package vexec import "errors" diff --git a/go/vt/vtctl/workflow/vexec/query_planner.go b/go/vt/vtctl/workflow/vexec/query_planner.go index f253efb593..e7b73c1299 100644 --- a/go/vt/vtctl/workflow/vexec/query_planner.go +++ b/go/vt/vtctl/workflow/vexec/query_planner.go @@ -32,8 +32,6 @@ import ( querypb "vitess.io/vitess/go/vt/proto/query" ) -var ErrUnsupportedQuery = errors.New("query not supported by vexec") - type QueryPlanner interface { PlanQuery(stmt sqlparser.Statement) (*QueryPlan, error) QueryParams() QueryParams diff --git a/go/vt/vtctl/workflow/vexec.go b/go/vt/vtctl/workflow/vexec/vexec.go similarity index 93% rename from go/vt/vtctl/workflow/vexec.go rename to go/vt/vtctl/workflow/vexec/vexec.go index 90609327ef..be32645727 100644 --- a/go/vt/vtctl/workflow/vexec.go +++ b/go/vt/vtctl/workflow/vexec/vexec.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package workflow +package vexec import ( "context" @@ -24,7 +24,6 @@ import ( "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/topo" "vitess.io/vitess/go/vt/topo/topoproto" - "vitess.io/vitess/go/vt/vtctl/workflow/vexec" "vitess.io/vitess/go/vt/vttablet/tmclient" querypb "vitess.io/vitess/go/vt/proto/query" @@ -139,10 +138,10 @@ func ExtractTableName(stmt sqlparser.Statement) (string, error) { // TODO: priva return "", fmt.Errorf("%w: %+v", ErrUnsupportedQuery, sqlparser.String(stmt)) } -func (vx *VExec) GetPlanner(table string) (vexec.QueryPlanner, error) { // TODO: private? +func (vx *VExec) GetPlanner(table string) (QueryPlanner, error) { // TODO: private? switch table { case qualifiedTableName(VReplicationTableName): - return vexec.NewVReplicationQueryPlanner(vx.tmc, "", vx.primaries[0].DbName()), nil + return NewVReplicationQueryPlanner(vx.tmc, "", vx.primaries[0].DbName()), nil case qualifiedTableName(SchemaMigrationsTableName): return nil, errors.New("Schema Migrations not yet supported in new workflow package") default: From 40b8fef838f5c45ffda0464622b62e441af063fc Mon Sep 17 00:00:00 2001 From: Andrew Mason Date: Fri, 26 Feb 2021 22:42:36 -0500 Subject: [PATCH 05/20] wip - add workflow.Manager to VtctldServer, add CLI entrypoint Signed-off-by: Andrew Mason --- .../internal/command/workflows.go | 69 +++++++++++++++++++ go/vt/vtctl/grpcvtctldserver/server.go | 12 +++- 2 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 go/cmd/vtctldclient/internal/command/workflows.go diff --git a/go/cmd/vtctldclient/internal/command/workflows.go b/go/cmd/vtctldclient/internal/command/workflows.go new file mode 100644 index 0000000000..760139a9be --- /dev/null +++ b/go/cmd/vtctldclient/internal/command/workflows.go @@ -0,0 +1,69 @@ +/* +Copyright 2021 The Vitess Authors. + +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 command + +import ( + "fmt" + + "github.com/spf13/cobra" + + "vitess.io/vitess/go/cmd/vtctldclient/cli" + + vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata" +) + +var ( + // GetWorkflows makes a GetWorkflows gRPC call to a vtctld. + GetWorkflows = &cobra.Command{ + Use: "GetWorkflows ", + Args: cobra.ExactArgs(1), + RunE: commandGetWorkflows, + } +) + +var getWorkflowsOptions = struct { + ShowAll bool +}{} + +func commandGetWorkflows(cmd *cobra.Command, args []string) error { + cli.FinishedParsing(cmd) + + ks := cmd.Flags().Arg(0) + + resp, err := client.GetWorkflows(commandCtx, &vtctldatapb.GetWorkflowsRequest{ + Keyspace: ks, + ActiveOnly: !getWorkflowsOptions.ShowAll, + }) + + if err != nil { + return err + } + + data, err := cli.MarshalJSON(resp) + if err != nil { + return err + } + + fmt.Printf("%s\n", data) + + return nil +} + +func init() { + GetWorkflows.Flags().BoolVarP(&getWorkflowsOptions.ShowAll, "show-all", "a", false, "Show all workflows instead of just active workflows") + Root.AddCommand(GetWorkflows) +} diff --git a/go/vt/vtctl/grpcvtctldserver/server.go b/go/vt/vtctl/grpcvtctldserver/server.go index 05eedf4189..d16407cb72 100644 --- a/go/vt/vtctl/grpcvtctldserver/server.go +++ b/go/vt/vtctl/grpcvtctldserver/server.go @@ -40,6 +40,7 @@ import ( "vitess.io/vitess/go/vt/topotools" "vitess.io/vitess/go/vt/topotools/events" "vitess.io/vitess/go/vt/vtctl/reparentutil" + "vitess.io/vitess/go/vt/vtctl/workflow" "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vttablet/tmclient" @@ -61,11 +62,18 @@ const ( type VtctldServer struct { ts *topo.Server tmc tmclient.TabletManagerClient + wm *workflow.Manager } // NewVtctldServer returns a new VtctldServer for the given topo server. func NewVtctldServer(ts *topo.Server) *VtctldServer { - return &VtctldServer{ts: ts, tmc: tmclient.NewTabletManagerClient()} + tmc := tmclient.NewTabletManagerClient() + + return &VtctldServer{ + ts: ts, + tmc: tmc, + wm: workflow.NewManager(ts, tmc), + } } // ChangeTabletType is part of the vtctlservicepb.VtctldServer interface. @@ -678,7 +686,7 @@ func (s *VtctldServer) GetVSchema(ctx context.Context, req *vtctldatapb.GetVSche // GetWorkflows is part of the vtctlservicepb.VtctldServer interface. func (s *VtctldServer) GetWorkflows(ctx context.Context, req *vtctldatapb.GetWorkflowsRequest) (*vtctldatapb.GetWorkflowsResponse, error) { - panic("unimplemented!") + return s.wm.GetWorkflows(ctx, req) } // InitShardPrimary is part of the vtctlservicepb.VtctldServer interface. From 2ccf392bd1c207b32a935f9f95f6048bdca8aa1a Mon Sep 17 00:00:00 2001 From: Andrew Mason Date: Sat, 27 Feb 2021 11:28:17 -0500 Subject: [PATCH 06/20] [vtctl/workflow] wip - touch up error handling, add more designy comments Signed-off-by: Andrew Mason --- go/vt/vtctl/workflow/manager.go | 23 ++++++++++++++++++----- go/vt/vtctl/workflow/vexec/vexec.go | 19 ++++++++++++++++++- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/go/vt/vtctl/workflow/manager.go b/go/vt/vtctl/workflow/manager.go index 58d6363f8e..fa0625e7ba 100644 --- a/go/vt/vtctl/workflow/manager.go +++ b/go/vt/vtctl/workflow/manager.go @@ -18,6 +18,7 @@ package workflow import ( "context" + "errors" "fmt" "strings" "time" @@ -36,6 +37,12 @@ import ( "vitess.io/vitess/go/vt/proto/vttime" ) +var ( + ErrInvalidWorkflow = errors.New("invalid workflow") + ErrMultipleSourceKeyspaces = errors.New("multiple source keyspaces for a single workflow") + ErrMultipleTargetKeyspaces = errors.New("multiple target keyspaces for a single workflow") +) + type Manager struct { ts *topo.Server tmc tmclient.TabletManagerClient @@ -178,13 +185,13 @@ func (manager *Manager) GetWorkflows(ctx context.Context, req *vtctldatapb.GetWo targetShardsByWorkflow[workflow.Name].Insert(tablet.Shard) if ks, ok := sourceKeyspaceByWorkflow[workflow.Name]; ok && ks != status.BinlogSource.Keyspace { - // error, this is impossible + return fmt.Errorf("%w: workflow = %v, ks1 = %v, ks2 = %v", ErrMultipleSourceKeyspaces, workflow.Name, ks, status.BinlogSource.Keyspace) } sourceKeyspaceByWorkflow[workflow.Name] = status.BinlogSource.Keyspace if ks, ok := targetKeyspaceByWorkflow[workflow.Name]; ok && ks != tablet.Keyspace { - // error, this is impossible + return fmt.Errorf("%w: workflow = %v, ks1 = %v, ks2 = %v", ErrMultipleTargetKeyspaces, workflow.Name, ks, tablet.Keyspace) } targetKeyspaceByWorkflow[workflow.Name] = tablet.Keyspace @@ -242,21 +249,27 @@ func (manager *Manager) GetWorkflows(ctx context.Context, req *vtctldatapb.GetWo for name, workflow := range workflowsMap { sourceShards, ok := sourceShardsByWorkflow[name] if !ok { - // error + return nil, fmt.Errorf("%w: %s has no source shards", ErrInvalidWorkflow, name) } sourceKeyspace, ok := sourceKeyspaceByWorkflow[name] + if !ok { + return nil, fmt.Errorf("%w: %s has no source keyspace", ErrInvalidWorkflow, name) + } targetShards, ok := targetShardsByWorkflow[name] if !ok { - // error + return nil, fmt.Errorf("%w: %s has no target shards", ErrInvalidWorkflow, name) } targetKeyspace, ok := targetKeyspaceByWorkflow[name] + if !ok { + return nil, fmt.Errorf("%w: %s has no target keyspace", ErrInvalidWorkflow, name) + } maxVReplicationLag, ok := maxVReplicationLagByWorkflow[name] if !ok { - // error + return nil, fmt.Errorf("%w: %s has no tracked vreplication lag", ErrInvalidWorkflow, name) } workflow.Source = &vtctldatapb.Workflow_ReplicationLocation{ diff --git a/go/vt/vtctl/workflow/vexec/vexec.go b/go/vt/vtctl/workflow/vexec/vexec.go index be32645727..eaf81d5088 100644 --- a/go/vt/vtctl/workflow/vexec/vexec.go +++ b/go/vt/vtctl/workflow/vexec/vexec.go @@ -40,8 +40,25 @@ type VExec struct { ts *topo.Server tmc tmclient.TabletManagerClient - keyspace string + keyspace string + // (TODO:@ajm188) Consider renaming this field to "targets", and then + // support different Strategy functions for loading target tablets from a + // topo.Server. + // + // For this, I'm currently thinking: + // type TargetStrategy func(ts *topo.Server) ([]*topo.TabletInfo, error) + // + // We _may_ want this if we ever want a vexec query to target anything other + // than "all of the shard primaries in a given keyspace", and I'm not sure + // about potential future usages yet. primaries []*topo.TabletInfo + // (TODO:@ajm188) Similar to supporting a TargetStrategy for controlling how + // a VExec picks which tablets to query, we may also want an + // ExecutionStrategy (I'm far less sure about whether we would want this at + // all, or what its type definition might look like, than TargetStrategy), + // to support running in modes like: + // - Execute serially rather than concurrently. + // - Only return error if greater than some percentage of the targets fail. } func NewVExec(keyspace string, ts *topo.Server, tmc tmclient.TabletManagerClient) *VExec { From 62f825bdb7a00cb8f4f69141c2df12064ba3feb9 Mon Sep 17 00:00:00 2001 From: Andrew Mason Date: Sat, 27 Feb 2021 11:34:40 -0500 Subject: [PATCH 07/20] [vtctl/workflow] - wip, allow threading a workflow through VExec This is to support individual workflow queries, instead of just bulk queries on multiple workflows (i.e. `GetWorkflow` vs `GetWorkflows`, or `workflow ks.workflowname show` in the old API) Signed-off-by: Andrew Mason --- go/vt/vtctl/workflow/manager.go | 2 +- go/vt/vtctl/workflow/vexec/vexec.go | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/go/vt/vtctl/workflow/manager.go b/go/vt/vtctl/workflow/manager.go index fa0625e7ba..63fbcdad7f 100644 --- a/go/vt/vtctl/workflow/manager.go +++ b/go/vt/vtctl/workflow/manager.go @@ -80,7 +80,7 @@ func (manager *Manager) GetWorkflows(ctx context.Context, req *vtctldatapb.GetWo where, ) - vx := vexec.NewVExec(req.Keyspace, manager.ts, manager.tmc) + vx := vexec.NewVExec(req.Keyspace, "", manager.ts, manager.tmc) results, err := vx.QueryContext(ctx, query) if err != nil { return nil, err diff --git a/go/vt/vtctl/workflow/vexec/vexec.go b/go/vt/vtctl/workflow/vexec/vexec.go index eaf81d5088..2c3627ac65 100644 --- a/go/vt/vtctl/workflow/vexec/vexec.go +++ b/go/vt/vtctl/workflow/vexec/vexec.go @@ -41,6 +41,8 @@ type VExec struct { tmc tmclient.TabletManagerClient keyspace string + workflow string + // (TODO:@ajm188) Consider renaming this field to "targets", and then // support different Strategy functions for loading target tablets from a // topo.Server. @@ -61,11 +63,12 @@ type VExec struct { // - Only return error if greater than some percentage of the targets fail. } -func NewVExec(keyspace string, ts *topo.Server, tmc tmclient.TabletManagerClient) *VExec { +func NewVExec(keyspace string, workflow string, ts *topo.Server, tmc tmclient.TabletManagerClient) *VExec { return &VExec{ ts: ts, tmc: tmc, keyspace: keyspace, + workflow: workflow, } } @@ -158,7 +161,7 @@ func ExtractTableName(stmt sqlparser.Statement) (string, error) { // TODO: priva func (vx *VExec) GetPlanner(table string) (QueryPlanner, error) { // TODO: private? switch table { case qualifiedTableName(VReplicationTableName): - return NewVReplicationQueryPlanner(vx.tmc, "", vx.primaries[0].DbName()), nil + return NewVReplicationQueryPlanner(vx.tmc, vx.workflow, vx.primaries[0].DbName()), nil case qualifiedTableName(SchemaMigrationsTableName): return nil, errors.New("Schema Migrations not yet supported in new workflow package") default: From 52d4a09209154941660e27c7a42381db589298a6 Mon Sep 17 00:00:00 2001 From: Andrew Mason Date: Sat, 27 Feb 2021 11:54:17 -0500 Subject: [PATCH 08/20] [vtctl/vexec] wip - set timeouts on topo calls Signed-off-by: Andrew Mason --- go/vt/vtctl/workflow/vexec/vexec.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/go/vt/vtctl/workflow/vexec/vexec.go b/go/vt/vtctl/workflow/vexec/vexec.go index 2c3627ac65..ca0b992398 100644 --- a/go/vt/vtctl/workflow/vexec/vexec.go +++ b/go/vt/vtctl/workflow/vexec/vexec.go @@ -105,7 +105,10 @@ func (vx *VExec) QueryContext(ctx context.Context, query string) (map[*topo.Tabl func (vx *VExec) initialize(ctx context.Context) error { vx.primaries = nil - shards, err := vx.ts.GetShardNames(ctx, vx.keyspace) + getShardsCtx, getShardsCancel := context.WithTimeout(ctx, *topo.RemoteOperationTimeout) + defer getShardsCancel() + + shards, err := vx.ts.GetShardNames(getShardsCtx, vx.keyspace) if err != nil { return err } @@ -117,6 +120,9 @@ func (vx *VExec) initialize(ctx context.Context) error { primaries := make([]*topo.TabletInfo, 0, len(shards)) for _, shard := range shards { + ctx, cancel := context.WithTimeout(ctx, *topo.RemoteOperationTimeout) + defer cancel() + si, err := vx.ts.GetShard(ctx, vx.keyspace, shard) if err != nil { return err From 3381dafbb9efc804bf7bf17d6bccc9d8d6a457a9 Mon Sep 17 00:00:00 2001 From: Andrew Mason Date: Sat, 27 Feb 2021 15:58:53 -0500 Subject: [PATCH 09/20] [vexec] wip - thread workflow name through to QueryPlan, update errors/logs Signed-off-by: Andrew Mason --- go/vt/vtctl/workflow/vexec/errors.go | 1 + go/vt/vtctl/workflow/vexec/query_planner.go | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/go/vt/vtctl/workflow/vexec/errors.go b/go/vt/vtctl/workflow/vexec/errors.go index 5ab1389167..b98b2cb7b0 100644 --- a/go/vt/vtctl/workflow/vexec/errors.go +++ b/go/vt/vtctl/workflow/vexec/errors.go @@ -21,6 +21,7 @@ import "errors" var ( ErrNoShardPrimary = errors.New("no primary found for shard") ErrNoShardsForKeyspace = errors.New("no shards found in keyspace") + ErrUnpreparedQuery = errors.New("attempted to execute unprepared query") ErrUnsupportedQuery = errors.New("query not supported by vexec") ErrUnsupportedTable = errors.New("table not supported by vexec") ) diff --git a/go/vt/vtctl/workflow/vexec/query_planner.go b/go/vt/vtctl/workflow/vexec/query_planner.go index e7b73c1299..611a8c4403 100644 --- a/go/vt/vtctl/workflow/vexec/query_planner.go +++ b/go/vt/vtctl/workflow/vexec/query_planner.go @@ -18,7 +18,6 @@ package vexec import ( "context" - "errors" "fmt" "sync" @@ -100,6 +99,7 @@ func (planner *VReplicationQueryPlanner) planSelect(sel *sqlparser.Select) (*Que return &QueryPlan{ ParsedQuery: buf.ParsedQuery(), + workflow: planner.workflow, tmc: planner.tmc, }, nil } @@ -107,12 +107,13 @@ func (planner *VReplicationQueryPlanner) planSelect(sel *sqlparser.Select) (*Que type QueryPlan struct { ParsedQuery *sqlparser.ParsedQuery - tmc tmclient.TabletManagerClient + workflow string + tmc tmclient.TabletManagerClient } func (qp *QueryPlan) Execute(ctx context.Context, target *topo.TabletInfo) (qr *querypb.QueryResult, err error) { if qp.ParsedQuery == nil { - return nil, errors.New("TODO: some error about executing a query before it was planned") + return nil, fmt.Errorf("%w: call PlanQuery on a query planner first", ErrUnpreparedQuery) } targetAliasStr := target.AliasString() @@ -134,7 +135,7 @@ func (qp *QueryPlan) Execute(ctx context.Context, target *topo.TabletInfo) (qr * } if qr.RowsAffected == 0 { - log.Infof("no matching streams found for workflows %s, tablet %s, query %s", "TODO: pass through workflow", targetAliasStr, qp.ParsedQuery.Query) + log.Infof("no matching streams found for workflows %s, tablet %s, query %s", qp.workflow, targetAliasStr, qp.ParsedQuery.Query) } return qr, nil From 5153020e677d5d6ab8e1f75e55ed08e56bcc1986 Mon Sep 17 00:00:00 2001 From: Andrew Mason Date: Sat, 27 Feb 2021 21:14:57 -0500 Subject: [PATCH 10/20] [vexec] wip - add support for planning updates/deletes in vrep This matches the old implementation, based on the constant values that are always set for that version's planner.params() function. Note also that in the old implementation, `planner.params().insertTemplates == nil`, so `buildInsertPlan` would always return error, which is why we don't even bother to define a function for it here. Only schema migration workflows seem to support inserts. Signed-off-by: Andrew Mason --- go/vt/vtctl/workflow/vexec/errors.go | 12 +-- go/vt/vtctl/workflow/vexec/query_planner.go | 85 ++++++++++++++++++++- 2 files changed, 90 insertions(+), 7 deletions(-) diff --git a/go/vt/vtctl/workflow/vexec/errors.go b/go/vt/vtctl/workflow/vexec/errors.go index b98b2cb7b0..bf6a376372 100644 --- a/go/vt/vtctl/workflow/vexec/errors.go +++ b/go/vt/vtctl/workflow/vexec/errors.go @@ -19,9 +19,11 @@ package vexec import "errors" var ( - ErrNoShardPrimary = errors.New("no primary found for shard") - ErrNoShardsForKeyspace = errors.New("no shards found in keyspace") - ErrUnpreparedQuery = errors.New("attempted to execute unprepared query") - ErrUnsupportedQuery = errors.New("query not supported by vexec") - ErrUnsupportedTable = errors.New("table not supported by vexec") + ErrCannotUpdateImmutableColumn = errors.New("cannot update immutable column") + ErrNoShardPrimary = errors.New("no primary found for shard") + ErrNoShardsForKeyspace = errors.New("no shards found in keyspace") + ErrUnpreparedQuery = errors.New("attempted to execute unprepared query") + ErrUnsupportedQuery = errors.New("query not supported by vexec") + ErrUnsupportedQueryConstruct = errors.New("unsupported query construct") + ErrUnsupportedTable = errors.New("table not supported by vexec") ) diff --git a/go/vt/vtctl/workflow/vexec/query_planner.go b/go/vt/vtctl/workflow/vexec/query_planner.go index 611a8c4403..6cb1db8b62 100644 --- a/go/vt/vtctl/workflow/vexec/query_planner.go +++ b/go/vt/vtctl/workflow/vexec/query_planner.go @@ -67,8 +67,12 @@ func (planner *VReplicationQueryPlanner) PlanQuery(stmt sqlparser.Statement) (pl switch stmt := stmt.(type) { case *sqlparser.Select: plan, err = planner.planSelect(stmt) - case *sqlparser.Insert, *sqlparser.Update, *sqlparser.Delete: - plan, err = nil, fmt.Errorf("%w: bother @ajm188, this is still WIP", ErrUnsupportedQuery) + case *sqlparser.Insert: + err = ErrUnsupportedQuery + case *sqlparser.Update: + plan, err = planner.planUpdate(stmt) + case *sqlparser.Delete: + plan, err = planner.planDelete(stmt) default: err = ErrUnsupportedQuery } @@ -91,6 +95,47 @@ func (planner *VReplicationQueryPlanner) WorkflowName() string { return planner.workflow } +func (planner *VReplicationQueryPlanner) planDelete(del *sqlparser.Delete) (*QueryPlan, error) { + if del.Targets != nil { + return nil, fmt.Errorf( + "%w: DELETE must not have explicit targets (have: %v): %v", + ErrUnsupportedQueryConstruct, + del.Targets, + sqlparser.String(del), + ) + } + + if del.Partitions != nil { + return nil, fmt.Errorf( + "%w: DELETE must not have explicit partitions (have: %v): %v", + ErrUnsupportedQueryConstruct, + del.Partitions, + sqlparser.String(del), + ) + } + + if del.OrderBy != nil || del.Limit != nil { + return nil, fmt.Errorf( + "%w: DELETE must not have explicit ordering (have: %v) or limit clauses (have: %v): %v", + ErrUnsupportedQueryConstruct, + del.OrderBy, + del.Limit, + sqlparser.String(del), + ) + } + + del.Where = addDefaultWheres(planner, del.Where) + + buf := sqlparser.NewTrackedBuffer(nil) + buf.Myprintf("%v", del) + + return &QueryPlan{ + ParsedQuery: buf.ParsedQuery(), + workflow: planner.workflow, + tmc: planner.tmc, + }, nil +} + func (planner *VReplicationQueryPlanner) planSelect(sel *sqlparser.Select) (*QueryPlan, error) { sel.Where = addDefaultWheres(planner, sel.Where) @@ -104,6 +149,42 @@ func (planner *VReplicationQueryPlanner) planSelect(sel *sqlparser.Select) (*Que }, nil } +func (planner *VReplicationQueryPlanner) planUpdate(upd *sqlparser.Update) (*QueryPlan, error) { + if upd.OrderBy != nil || upd.Limit != nil { + return nil, fmt.Errorf( + "%w: UPDATE must not have explicit ordering (have: %v) or limit clauses (have: %v): %v", + ErrUnsupportedQueryConstruct, + upd.OrderBy, + upd.Limit, + sqlparser.String(upd), + ) + } + + // For updates on the _vt.vreplication table, we ban updates to the `id` + // column, and allow updates to all other columns. + for _, expr := range upd.Exprs { + if expr.Name.Name.EqualString("id") { + return nil, fmt.Errorf( + "%w %+v: %v", + ErrCannotUpdateImmutableColumn, + expr.Name.Name, + sqlparser.String(expr), + ) + } + } + + upd.Where = addDefaultWheres(planner, upd.Where) + + buf := sqlparser.NewTrackedBuffer(nil) + buf.Myprintf("%v", upd) + + return &QueryPlan{ + ParsedQuery: buf.ParsedQuery(), + workflow: planner.workflow, + tmc: planner.tmc, + }, nil +} + type QueryPlan struct { ParsedQuery *sqlparser.ParsedQuery From 77868fc0c4e2c7c0c56f8f8c9a964819d87e35c2 Mon Sep 17 00:00:00 2001 From: Andrew Mason Date: Sat, 27 Feb 2021 21:27:35 -0500 Subject: [PATCH 11/20] [vexec] wip - move error definitions to files that use them most, group them Signed-off-by: Andrew Mason --- go/vt/vtctl/workflow/vexec/errors.go | 29 --------------------- go/vt/vtctl/workflow/vexec/query_planner.go | 10 +++++++ go/vt/vtctl/workflow/vexec/vexec.go | 10 +++++++ 3 files changed, 20 insertions(+), 29 deletions(-) delete mode 100644 go/vt/vtctl/workflow/vexec/errors.go diff --git a/go/vt/vtctl/workflow/vexec/errors.go b/go/vt/vtctl/workflow/vexec/errors.go deleted file mode 100644 index bf6a376372..0000000000 --- a/go/vt/vtctl/workflow/vexec/errors.go +++ /dev/null @@ -1,29 +0,0 @@ -/* -Copyright 2021 The Vitess Authors. - -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 vexec - -import "errors" - -var ( - ErrCannotUpdateImmutableColumn = errors.New("cannot update immutable column") - ErrNoShardPrimary = errors.New("no primary found for shard") - ErrNoShardsForKeyspace = errors.New("no shards found in keyspace") - ErrUnpreparedQuery = errors.New("attempted to execute unprepared query") - ErrUnsupportedQuery = errors.New("query not supported by vexec") - ErrUnsupportedQueryConstruct = errors.New("unsupported query construct") - ErrUnsupportedTable = errors.New("table not supported by vexec") -) diff --git a/go/vt/vtctl/workflow/vexec/query_planner.go b/go/vt/vtctl/workflow/vexec/query_planner.go index 6cb1db8b62..e8f2ebb712 100644 --- a/go/vt/vtctl/workflow/vexec/query_planner.go +++ b/go/vt/vtctl/workflow/vexec/query_planner.go @@ -18,6 +18,7 @@ package vexec import ( "context" + "errors" "fmt" "sync" @@ -31,6 +32,15 @@ import ( querypb "vitess.io/vitess/go/vt/proto/query" ) +var ( // Query planning errors. + ErrCannotUpdateImmutableColumn = errors.New("cannot update immutable column") + ErrUnsupportedQueryConstruct = errors.New("unsupported query construct") +) + +var ( // Query execution errors. + ErrUnpreparedQuery = errors.New("attempted to execute unprepared query") +) + type QueryPlanner interface { PlanQuery(stmt sqlparser.Statement) (*QueryPlan, error) QueryParams() QueryParams diff --git a/go/vt/vtctl/workflow/vexec/vexec.go b/go/vt/vtctl/workflow/vexec/vexec.go index ca0b992398..a0907d3348 100644 --- a/go/vt/vtctl/workflow/vexec/vexec.go +++ b/go/vt/vtctl/workflow/vexec/vexec.go @@ -36,6 +36,16 @@ const ( VReplicationTableName = "vreplication" ) +var ( // Topo lookup errors. + ErrNoShardPrimary = errors.New("no primary found for shard") + ErrNoShardsForKeyspace = errors.New("no shards found in keyspace") +) + +var ( // Query parsing and planning errors. + ErrUnsupportedQuery = errors.New("query not supported by vexec") + ErrUnsupportedTable = errors.New("table not supported by vexec") +) + type VExec struct { ts *topo.Server tmc tmclient.TabletManagerClient From 6c9dfd0cf2238e8b5cf24ca138e08da26433bad0 Mon Sep 17 00:00:00 2001 From: Andrew Mason Date: Sun, 28 Feb 2021 08:13:10 -0500 Subject: [PATCH 12/20] [wrangler] wip - rewrite ListAllWorkflows in wrangler to use new vexec Signed-off-by: Andrew Mason --- go/vt/wrangler/vexec.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/go/vt/wrangler/vexec.go b/go/vt/wrangler/vexec.go index ee0fc7dc15..35b75ebded 100644 --- a/go/vt/wrangler/vexec.go +++ b/go/vt/wrangler/vexec.go @@ -30,13 +30,15 @@ import ( "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/vt/concurrency" "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/sqlparser" + "vitess.io/vitess/go/vt/topo" + vtctldvexec "vitess.io/vitess/go/vt/vtctl/workflow/vexec" // renamed to avoid a collision with the vexec struct in this package + "vitess.io/vitess/go/vt/vterrors" + "vitess.io/vitess/go/vt/vtgate/evalengine" + binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" querypb "vitess.io/vitess/go/vt/proto/query" topodatapb "vitess.io/vitess/go/vt/proto/topodata" - "vitess.io/vitess/go/vt/sqlparser" - "vitess.io/vitess/go/vt/topo" - "vitess.io/vitess/go/vt/vterrors" - "vitess.io/vitess/go/vt/vtgate/evalengine" ) const ( @@ -508,7 +510,8 @@ func (wr *Wrangler) ListAllWorkflows(ctx context.Context, keyspace string, activ where = " where state <> 'Stopped'" } query := "select distinct workflow from _vt.vreplication" + where - results, err := wr.runVexec(ctx, "", keyspace, query, false) + vx := vtctldvexec.NewVExec(keyspace, "", wr.ts, wr.tmc) + results, err := vx.QueryContext(ctx, query) if err != nil { return nil, err } From 630c03716c099bb9d496474f8d0a838f201bb900 Mon Sep 17 00:00:00 2001 From: Andrew Mason Date: Sun, 28 Feb 2021 16:01:35 -0500 Subject: [PATCH 13/20] [vexec] refactors and all the docs Signed-off-by: Andrew Mason --- go/vt/vtctl/workflow/vexec/query_planner.go | 105 ++++++++++++++++---- go/vt/vtctl/workflow/vexec/vexec.go | 77 +++++++++++--- 2 files changed, 148 insertions(+), 34 deletions(-) diff --git a/go/vt/vtctl/workflow/vexec/query_planner.go b/go/vt/vtctl/workflow/vexec/query_planner.go index e8f2ebb712..c3702e22b8 100644 --- a/go/vt/vtctl/workflow/vexec/query_planner.go +++ b/go/vt/vtctl/workflow/vexec/query_planner.go @@ -33,27 +33,70 @@ import ( ) var ( // Query planning errors. + // ErrCannotUpdateImmutableColumn is returned when attempting to plan a + // query that updates a column that should be treated as immutable. ErrCannotUpdateImmutableColumn = errors.New("cannot update immutable column") - ErrUnsupportedQueryConstruct = errors.New("unsupported query construct") + // ErrUnsupportedQueryConstruct is returned when a particular query + // construct is unsupported by a QueryPlanner, despite the more general kind + // of query being supported. + // + // For example, VReplication supports DELETEs, but does not support DELETEs + // with LIMIT clauses, so planning a "DELETE ... LIMIT" will return + // ErrUnsupportedQueryConstruct rather than a "CREATE TABLE", which would + // return an ErrUnsupportedQuery. + ErrUnsupportedQueryConstruct = errors.New("unsupported query construct") ) var ( // Query execution errors. + // ErrUnpreparedQuery is returned when attempting to execute an unprepared + // QueryPlan. ErrUnpreparedQuery = errors.New("attempted to execute unprepared query") ) +// QueryPlanner defines the interface that VExec uses to build QueryPlans for +// various vexec workflows. A given vexec table, which is to say a table in the +// "_vt" database, will have at most one QueryPlanner implementation, which is +// responsible for defining both what queries are supported for that table, as +// well as how to build plans for those queries. +// +// VReplicationQueryPlanner is a good example implementation to refer to. type QueryPlanner interface { - PlanQuery(stmt sqlparser.Statement) (*QueryPlan, error) - QueryParams() QueryParams + // (NOTE:@ajm188) I don't think this method fits on the query planner. To + // me, especially given that it's only implemented by the vrep query planner + // in the old implementation (the schema migration query planner no-ops this + // method), this fits better on our workflow.Manager struct, probably as a + // method called something like "VReplicationExec(ctx, query, Options{DryRun: true})" + // DryRun(ctx context.Context) error - DBName() string - WorkflowName() string + // PlanQuery contsructs and returns a QueryPlan for a given statement. The + // resulting QueryPlan is suitable for repeated, concurrent use. + PlanQuery(stmt sqlparser.Statement) (*QueryPlan, error) + // QueryParams returns a struct of column parameters the QueryPlanner uses. + // It is used primarily to abstract the adding of default WHERE clauses to + // queries by a private function of this package, and may be removed from + // the interface later. + QueryParams() QueryParams } +// QueryParams is a struct that QueryPlanner implementations can provide to +// control the addition of default WHERE clauses to their queries. type QueryParams struct { - DBNameColumn string + // DBName is the value that the column referred to by DBNameColumn should + // equal in a WHERE clause, if set. + DBName string + // DBNameColumn is the name of the column that DBName should equal in a + // WHERE clause, if set. + DBNameColumn string + // Workflow is the value that the column referred to by WorkflowColumn + // should equal in a WHERE clause, if set. + Workflow string + // WorkflowColumn is the name of the column that Workflow should equal in a + // WHERE clause, if set. WorkflowColumn string } +// VReplicationQueryPlanner implements the QueryPlanner interface for queries on +// the _vt.vreplication table. type VReplicationQueryPlanner struct { tmc tmclient.TabletManagerClient @@ -61,6 +104,8 @@ type VReplicationQueryPlanner struct { workflow string } +// NewVReplicationQueryPlanner returns a new VReplicationQueryPlanner. It is +// valid to pass empty strings for both the dbname and workflow parameters. func NewVReplicationQueryPlanner(tmc tmclient.TabletManagerClient, workflow string, dbname string) *VReplicationQueryPlanner { return &VReplicationQueryPlanner{ tmc: tmc, @@ -69,10 +114,16 @@ func NewVReplicationQueryPlanner(tmc tmclient.TabletManagerClient, workflow stri } } -func (planner *VReplicationQueryPlanner) DBName() string { - return planner.dbname -} - +// PlanQuery is part of the QueryPlanner interface. +// +// For vreplication query planners, only SELECT, UPDATE, and DELETE queries are +// supported. +// +// For UPDATE queries, ORDER BY and LIMIT clauses are not supported. Attempting +// to update vreplication.id is an error. +// +// For DELETE queries, USING, PARTITION, ORDER BY, and LIMIT clauses are not +// supported. func (planner *VReplicationQueryPlanner) PlanQuery(stmt sqlparser.Statement) (plan *QueryPlan, err error) { switch stmt := stmt.(type) { case *sqlparser.Select: @@ -94,21 +145,25 @@ func (planner *VReplicationQueryPlanner) PlanQuery(stmt sqlparser.Statement) (pl return plan, nil } +// QueryParams is part of the QueryPlanner interface. A VReplicationQueryPlanner +// will attach the following WHERE clauses iff (a) DBName, Workflow are set, +// respectively, and (b) db_name and workflow do not appear in the original +// query's WHERE clause: +// +// WHERE (db_name = {{ .DBName }} AND)? (workflow = {{ .Workflow }} AND)? {{ .OriginalWhere }} func (planner *VReplicationQueryPlanner) QueryParams() QueryParams { return QueryParams{ + DBName: planner.dbname, DBNameColumn: "db_name", + Workflow: planner.workflow, WorkflowColumn: "workflow", } } -func (planner *VReplicationQueryPlanner) WorkflowName() string { - return planner.workflow -} - func (planner *VReplicationQueryPlanner) planDelete(del *sqlparser.Delete) (*QueryPlan, error) { if del.Targets != nil { return nil, fmt.Errorf( - "%w: DELETE must not have explicit targets (have: %v): %v", + "%w: DELETE must not have USING clause (have: %v): %v", ErrUnsupportedQueryConstruct, del.Targets, sqlparser.String(del), @@ -195,6 +250,8 @@ func (planner *VReplicationQueryPlanner) planUpdate(upd *sqlparser.Update) (*Que }, nil } +// QueryPlan wraps a planned query produced by a QueryPlanner. It is safe to +// execute a QueryPlan repeatedly and in multiple goroutines. type QueryPlan struct { ParsedQuery *sqlparser.ParsedQuery @@ -202,6 +259,7 @@ type QueryPlan struct { tmc tmclient.TabletManagerClient } +// Execute executes a QueryPlan on a single target. func (qp *QueryPlan) Execute(ctx context.Context, target *topo.TabletInfo) (qr *querypb.QueryResult, err error) { if qp.ParsedQuery == nil { return nil, fmt.Errorf("%w: call PlanQuery on a query planner first", ErrUnpreparedQuery) @@ -232,7 +290,18 @@ func (qp *QueryPlan) Execute(ctx context.Context, target *topo.TabletInfo) (qr * return qr, nil } +// ExecuteScatter executes a QueryPlan on multiple targets concurrently, +// returning a mapping of target tablet to querypb.QueryResult. Errors from +// individual targets are aggregated into a singular error. func (qp *QueryPlan) ExecuteScatter(ctx context.Context, targets ...*topo.TabletInfo) (map[*topo.TabletInfo]*querypb.QueryResult, error) { + if qp.ParsedQuery == nil { + // This check is an "optimization" on error handling. We check here, + // even though we will check this during the individual Execute calls, + // so that we return one error, rather than the same error aggregated + // len(targets) times. + return nil, fmt.Errorf("%w: call PlanQuery on a query planner first", ErrUnpreparedQuery) + } + var ( m sync.Mutex wg sync.WaitGroup @@ -289,7 +358,7 @@ func addDefaultWheres(planner QueryPlanner, where *sqlparser.Where) *sqlparser.W Name: sqlparser.NewColIdent(params.DBNameColumn), }, Operator: sqlparser.EqualOp, - Right: sqlparser.NewStrLiteral([]byte(planner.DBName())), + Right: sqlparser.NewStrLiteral([]byte(params.DBName)), } switch newWhere { @@ -306,13 +375,13 @@ func addDefaultWheres(planner QueryPlanner, where *sqlparser.Where) *sqlparser.W } } - if !hasWorkflowCol && planner.WorkflowName() != "" { + if !hasWorkflowCol && params.Workflow != "" { expr := &sqlparser.ComparisonExpr{ Left: &sqlparser.ColName{ Name: sqlparser.NewColIdent(params.WorkflowColumn), }, Operator: sqlparser.EqualOp, - Right: sqlparser.NewStrLiteral([]byte(planner.WorkflowName())), + Right: sqlparser.NewStrLiteral([]byte(params.Workflow)), } newWhere.Expr = &sqlparser.AndExpr{ diff --git a/go/vt/vtctl/workflow/vexec/vexec.go b/go/vt/vtctl/workflow/vexec/vexec.go index a0907d3348..d61bd16ab3 100644 --- a/go/vt/vtctl/workflow/vexec/vexec.go +++ b/go/vt/vtctl/workflow/vexec/vexec.go @@ -30,22 +30,41 @@ import ( ) const ( + // VExecTableQualifier is the qualifier that all tables supported by vexec + // are prefixed by. VExecTableQualifier = "_vt" + // SchemaMigrationsTableName is the unqualified name of the schema + // migrations table supported by vexec. SchemaMigrationsTableName = "schema_migrations" - VReplicationTableName = "vreplication" + // VReplicationTableName is the unqualified name of the vreplication table + // supported by vexec. + VReplicationTableName = "vreplication" ) var ( // Topo lookup errors. - ErrNoShardPrimary = errors.New("no primary found for shard") + // ErrNoShardPrimary occurs when a shard is found with no serving + // primary. + ErrNoShardPrimary = errors.New("no primary found for shard") + // ErrNoShardsForKeyspace occurs when attempting to run a vexec on an empty + // keyspace. ErrNoShardsForKeyspace = errors.New("no shards found in keyspace") ) var ( // Query parsing and planning errors. + // ErrUnsupportedQuery occurs when attempting to run an unsupported query + // through vexec. ErrUnsupportedQuery = errors.New("query not supported by vexec") + // ErrUnsupportedTable occurs when attempting to run vexec on an unsupported + // table. At the time of writing, this occurs when attempting to query any + // table other than _vt.vreplication. ErrUnsupportedTable = errors.New("table not supported by vexec") ) +// VExec provides the main interface to planning and executing vexec queries +// (normally, queries on tables in the `_vt` database). It currently supports +// some limited vreplication queries; this set of supported behavior will expand +// over time. It may be extended to support schema_migrations queries as well. type VExec struct { ts *topo.Server tmc tmclient.TabletManagerClient @@ -73,6 +92,11 @@ type VExec struct { // - Only return error if greater than some percentage of the targets fail. } +// NewVExec returns a new instance suitable for making vexec queries to a given +// keyspace (required) and workflow (optional, omit by providing the empty +// string). The provided topo server is used to look up target tablets for +// queries. A given instance will discover targets exactly once for its +// lifetime, so to force a refresh, create another instance. func NewVExec(keyspace string, workflow string, ts *topo.Server, tmc tmclient.TabletManagerClient) *VExec { return &VExec{ ts: ts, @@ -82,6 +106,15 @@ func NewVExec(keyspace string, workflow string, ts *topo.Server, tmc tmclient.Ta } } +// QueryContext executes the given vexec query, returning a mapping of tablet +// to querypb.QueryResult. +// +// On first use, QueryContext will also cause the VExec instance to discover +// target tablets from the topo; that target list will be reused for all future +// queries made by this instance. +// +// For details on query parsing and planning, see GetPlanner and the +// QueryPlanner interface. func (vx *VExec) QueryContext(ctx context.Context, query string) (map[*topo.TabletInfo]*querypb.QueryResult, error) { if vx.primaries == nil { if err := vx.initialize(ctx); err != nil { @@ -94,12 +127,12 @@ func (vx *VExec) QueryContext(ctx context.Context, query string) (map[*topo.Tabl return nil, err } - table, err := ExtractTableName(stmt) + table, err := extractTableName(stmt) if err != nil { return nil, err } - planner, err := vx.GetPlanner(table) + planner, err := vx.GetPlanner(ctx, table) if err != nil { return nil, err } @@ -159,7 +192,30 @@ func (vx *VExec) initialize(ctx context.Context) error { return nil } -func ExtractTableName(stmt sqlparser.Statement) (string, error) { // TODO: private? +// GetPlanner returns an appropriate implementation of a QueryPlanner, depending +// on the table being queried. +// +// On first use, GetPlanner will also cause the VExec instance to discover +// target tablets from the topo; that target list will be reused for all future +// queries made by this instance. +func (vx *VExec) GetPlanner(ctx context.Context, table string) (QueryPlanner, error) { // TODO: private? + if vx.primaries == nil { + if err := vx.initialize(ctx); err != nil { + return nil, fmt.Errorf("error while initializing target list: %w", err) + } + } + + switch table { + case qualifiedTableName(VReplicationTableName): + return NewVReplicationQueryPlanner(vx.tmc, vx.workflow, vx.primaries[0].DbName()), nil + case qualifiedTableName(SchemaMigrationsTableName): + return nil, errors.New("Schema Migrations not yet supported in new workflow package") + default: + return nil, fmt.Errorf("%w: %v", ErrUnsupportedTable, table) + } +} + +func extractTableName(stmt sqlparser.Statement) (string, error) { switch stmt := stmt.(type) { case *sqlparser.Update: return sqlparser.String(stmt.TableExprs), nil @@ -174,17 +230,6 @@ func ExtractTableName(stmt sqlparser.Statement) (string, error) { // TODO: priva return "", fmt.Errorf("%w: %+v", ErrUnsupportedQuery, sqlparser.String(stmt)) } -func (vx *VExec) GetPlanner(table string) (QueryPlanner, error) { // TODO: private? - switch table { - case qualifiedTableName(VReplicationTableName): - return NewVReplicationQueryPlanner(vx.tmc, vx.workflow, vx.primaries[0].DbName()), nil - case qualifiedTableName(SchemaMigrationsTableName): - return nil, errors.New("Schema Migrations not yet supported in new workflow package") - default: - return nil, fmt.Errorf("%w: %v", ErrUnsupportedTable, table) - } -} - func qualifiedTableName(name string) string { return fmt.Sprintf("%s.%s", VExecTableQualifier, name) } From ed6136bdde18d538c60bafbc58d95051a7455a1d Mon Sep 17 00:00:00 2001 From: Andrew Mason Date: Sun, 28 Feb 2021 16:04:24 -0500 Subject: [PATCH 14/20] [vexec] Move QueryPlan and methods to its own file Signed-off-by: Andrew Mason --- go/vt/vtctl/workflow/vexec/query_plan.go | 116 ++++++++++++++++++++ go/vt/vtctl/workflow/vexec/query_planner.go | 92 ---------------- 2 files changed, 116 insertions(+), 92 deletions(-) create mode 100644 go/vt/vtctl/workflow/vexec/query_plan.go diff --git a/go/vt/vtctl/workflow/vexec/query_plan.go b/go/vt/vtctl/workflow/vexec/query_plan.go new file mode 100644 index 0000000000..f71e124b78 --- /dev/null +++ b/go/vt/vtctl/workflow/vexec/query_plan.go @@ -0,0 +1,116 @@ +/* +Copyright 2021 The Vitess Authors. + +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 vexec + +import ( + "context" + "fmt" + "sync" + + "vitess.io/vitess/go/vt/concurrency" + "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/sqlparser" + "vitess.io/vitess/go/vt/topo" + "vitess.io/vitess/go/vt/vterrors" + "vitess.io/vitess/go/vt/vttablet/tmclient" + + querypb "vitess.io/vitess/go/vt/proto/query" +) + +// QueryPlan wraps a planned query produced by a QueryPlanner. It is safe to +// execute a QueryPlan repeatedly and in multiple goroutines. +type QueryPlan struct { + ParsedQuery *sqlparser.ParsedQuery + + workflow string + tmc tmclient.TabletManagerClient +} + +// Execute executes a QueryPlan on a single target. +func (qp *QueryPlan) Execute(ctx context.Context, target *topo.TabletInfo) (qr *querypb.QueryResult, err error) { + if qp.ParsedQuery == nil { + return nil, fmt.Errorf("%w: call PlanQuery on a query planner first", ErrUnpreparedQuery) + } + + targetAliasStr := target.AliasString() + + log.Infof("Running %v on %v", qp.ParsedQuery.Query, targetAliasStr) + defer func() { + if err != nil { + log.Warningf("Result on %v: %v", targetAliasStr, err) + + return + } + + log.Infof("Result on %v: %v", targetAliasStr, qr) + }() + + qr, err = qp.tmc.VReplicationExec(ctx, target.Tablet, qp.ParsedQuery.Query) + if err != nil { + return nil, err + } + + if qr.RowsAffected == 0 { + log.Infof("no matching streams found for workflows %s, tablet %s, query %s", qp.workflow, targetAliasStr, qp.ParsedQuery.Query) + } + + return qr, nil +} + +// ExecuteScatter executes a QueryPlan on multiple targets concurrently, +// returning a mapping of target tablet to querypb.QueryResult. Errors from +// individual targets are aggregated into a singular error. +func (qp *QueryPlan) ExecuteScatter(ctx context.Context, targets ...*topo.TabletInfo) (map[*topo.TabletInfo]*querypb.QueryResult, error) { + if qp.ParsedQuery == nil { + // This check is an "optimization" on error handling. We check here, + // even though we will check this during the individual Execute calls, + // so that we return one error, rather than the same error aggregated + // len(targets) times. + return nil, fmt.Errorf("%w: call PlanQuery on a query planner first", ErrUnpreparedQuery) + } + + var ( + m sync.Mutex + wg sync.WaitGroup + rec concurrency.AllErrorRecorder + results = make(map[*topo.TabletInfo]*querypb.QueryResult, len(targets)) + ) + + for _, target := range targets { + wg.Add(1) + + go func(ctx context.Context, target *topo.TabletInfo) { + defer wg.Done() + + qr, err := qp.Execute(ctx, target) + if err != nil { + rec.RecordError(err) + + return + } + + m.Lock() + defer m.Unlock() + + results[target] = qr + }(ctx, target) + } + + wg.Wait() + + return results, rec.AggrError(vterrors.Aggregate) +} diff --git a/go/vt/vtctl/workflow/vexec/query_planner.go b/go/vt/vtctl/workflow/vexec/query_planner.go index c3702e22b8..03a9b8a339 100644 --- a/go/vt/vtctl/workflow/vexec/query_planner.go +++ b/go/vt/vtctl/workflow/vexec/query_planner.go @@ -17,19 +17,11 @@ limitations under the License. package vexec import ( - "context" "errors" "fmt" - "sync" - "vitess.io/vitess/go/vt/concurrency" - "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/sqlparser" - "vitess.io/vitess/go/vt/topo" - "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vttablet/tmclient" - - querypb "vitess.io/vitess/go/vt/proto/query" ) var ( // Query planning errors. @@ -250,90 +242,6 @@ func (planner *VReplicationQueryPlanner) planUpdate(upd *sqlparser.Update) (*Que }, nil } -// QueryPlan wraps a planned query produced by a QueryPlanner. It is safe to -// execute a QueryPlan repeatedly and in multiple goroutines. -type QueryPlan struct { - ParsedQuery *sqlparser.ParsedQuery - - workflow string - tmc tmclient.TabletManagerClient -} - -// Execute executes a QueryPlan on a single target. -func (qp *QueryPlan) Execute(ctx context.Context, target *topo.TabletInfo) (qr *querypb.QueryResult, err error) { - if qp.ParsedQuery == nil { - return nil, fmt.Errorf("%w: call PlanQuery on a query planner first", ErrUnpreparedQuery) - } - - targetAliasStr := target.AliasString() - - log.Infof("Running %v on %v", qp.ParsedQuery.Query, targetAliasStr) - defer func() { - if err != nil { - log.Warningf("Result on %v: %v", targetAliasStr, err) - - return - } - - log.Infof("Result on %v: %v", targetAliasStr, qr) - }() - - qr, err = qp.tmc.VReplicationExec(ctx, target.Tablet, qp.ParsedQuery.Query) - if err != nil { - return nil, err - } - - if qr.RowsAffected == 0 { - log.Infof("no matching streams found for workflows %s, tablet %s, query %s", qp.workflow, targetAliasStr, qp.ParsedQuery.Query) - } - - return qr, nil -} - -// ExecuteScatter executes a QueryPlan on multiple targets concurrently, -// returning a mapping of target tablet to querypb.QueryResult. Errors from -// individual targets are aggregated into a singular error. -func (qp *QueryPlan) ExecuteScatter(ctx context.Context, targets ...*topo.TabletInfo) (map[*topo.TabletInfo]*querypb.QueryResult, error) { - if qp.ParsedQuery == nil { - // This check is an "optimization" on error handling. We check here, - // even though we will check this during the individual Execute calls, - // so that we return one error, rather than the same error aggregated - // len(targets) times. - return nil, fmt.Errorf("%w: call PlanQuery on a query planner first", ErrUnpreparedQuery) - } - - var ( - m sync.Mutex - wg sync.WaitGroup - rec concurrency.AllErrorRecorder - results = make(map[*topo.TabletInfo]*querypb.QueryResult, len(targets)) - ) - - for _, target := range targets { - wg.Add(1) - - go func(ctx context.Context, target *topo.TabletInfo) { - defer wg.Done() - - qr, err := qp.Execute(ctx, target) - if err != nil { - rec.RecordError(err) - - return - } - - m.Lock() - defer m.Unlock() - - results[target] = qr - }(ctx, target) - } - - wg.Wait() - - return results, rec.AggrError(vterrors.Aggregate) -} - func addDefaultWheres(planner QueryPlanner, where *sqlparser.Where) *sqlparser.Where { cols := extractWhereComparisonColumns(where) From e2fda5c75e2a019d18e5c04bc7eebce30140a36e Mon Sep 17 00:00:00 2001 From: Andrew Mason Date: Sun, 28 Feb 2021 21:40:12 -0500 Subject: [PATCH 15/20] [vexec] Add VReplicationQueryPlanner tests Signed-off-by: Andrew Mason --- .../workflow/vexec/query_planner_test.go | 244 ++++++++++++++++++ go/vt/vtctl/workflow/vexec/testutil/query.go | 48 ++++ 2 files changed, 292 insertions(+) create mode 100644 go/vt/vtctl/workflow/vexec/query_planner_test.go create mode 100644 go/vt/vtctl/workflow/vexec/testutil/query.go diff --git a/go/vt/vtctl/workflow/vexec/query_planner_test.go b/go/vt/vtctl/workflow/vexec/query_planner_test.go new file mode 100644 index 0000000000..a63fbb96a6 --- /dev/null +++ b/go/vt/vtctl/workflow/vexec/query_planner_test.go @@ -0,0 +1,244 @@ +/* +Copyright 2021 The Vitess Authors. + +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 vexec + +import ( + "errors" + "testing" + + "github.com/stretchr/testify/assert" + + "vitess.io/vitess/go/vt/vtctl/workflow/vexec/testutil" +) + +func TestVReplicationQueryPlanner_PlanQuery(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + query string + err error + }{ + { + name: "basic select", + query: "SELECT id FROM _vt.vreplication", + err: nil, + }, + { + name: "insert not supported", + query: "INSERT INTO _vt.vreplication (id) VALUES (1)", + err: ErrUnsupportedQuery, + }, + { + name: "basic update", + query: "UPDATE _vt.vreplication SET workflow = 'my workflow'", + err: nil, + }, + { + name: "basic delete", + query: "DELETE FROM _vt.vreplication", + err: nil, + }, + { + name: "other query", + query: "CREATE TABLE foo (id INT(11) PRIMARY KEY NOT NULL) ENGINE=InnoDB", + err: ErrUnsupportedQuery, + }, + } + + planner := NewVReplicationQueryPlanner(nil, "", "") + + for _, tt := range tests { + tt := tt + + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + stmt := testutil.StatementFromString(t, tt.query) + + _, err := planner.PlanQuery(stmt) + if tt.err != nil { + assert.True(t, errors.Is(err, tt.err), "expected err of type %v, got %v", tt.err, err) + + return + } + + assert.NoError(t, err) + }) + } +} + +func TestVReplicationQueryPlanner_planSelect(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + query string + expectedPlannedQuery string + }{ + { + name: "simple select", + query: "SELECT id FROM _vt.vreplication WHERE id > 10", + expectedPlannedQuery: "SELECT id FROM _vt.vreplication WHERE id > 10 AND db_name = 'vt_testkeyspace' AND workflow = 'testworkflow'", + }, + { + name: "select with workflow and dbname columns already in WHERE", + query: "SELECT id FROM _vt.vreplication WHERE id > 10 AND db_name = 'vt_testkeyspace' AND workflow = 'testworkflow'", + expectedPlannedQuery: "SELECT id FROM _vt.vreplication WHERE id > 10 AND db_name = 'vt_testkeyspace' AND workflow = 'testworkflow'", + }, + { + // In this case, the QueryParams for the planner (which have + // workflow = "testworkflow"; db_name = "vt_testkeyspace") are + // ignored because the WHERE clause was explicit. + name: "select with workflow and dbname columns with different values", + query: "SELECT id FROM _vt.vreplication WHERE id > 10 AND db_name = 'different_keyspace' AND workflow = 'otherworkflow'", + expectedPlannedQuery: "SELECT id FROM _vt.vreplication WHERE id > 10 AND db_name = 'different_keyspace' AND workflow = 'otherworkflow'", + }, + } + + planner := NewVReplicationQueryPlanner(nil, "testworkflow", "vt_testkeyspace") + + for _, tt := range tests { + tt := tt + + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + stmt := testutil.StatementFromString(t, tt.query) + qp, err := planner.PlanQuery(stmt) + + assert.NoError(t, err) + assert.Equal(t, testutil.ParsedQueryFromString(t, tt.expectedPlannedQuery), qp.ParsedQuery) + }) + } +} + +func TestVReplicationQueryPlanner_planUpdate(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + planner *VReplicationQueryPlanner + query string + expectedPlannedQuery string + expectedErr error + }{ + { + name: "simple update", + planner: NewVReplicationQueryPlanner(nil, "testworkflow", "vt_testkeyspace"), + query: "UPDATE _vt.vreplication SET state = 'Running'", + expectedPlannedQuery: "UPDATE _vt.vreplication SET state = 'Running' WHERE db_name = 'vt_testkeyspace' AND workflow = 'testworkflow'", + expectedErr: nil, + }, + { + name: "including an ORDER BY is an error", + planner: NewVReplicationQueryPlanner(nil, "", ""), + query: "UPDATE _vt.vreplication SET state = 'Running' ORDER BY id DESC", + expectedErr: ErrUnsupportedQueryConstruct, + }, + { + name: "including a LIMIT is an error", + planner: NewVReplicationQueryPlanner(nil, "", ""), + query: "UPDATE _vt.vreplication SET state = 'Running' LIMIT 5", + expectedErr: ErrUnsupportedQueryConstruct, + }, + { + name: "cannot update id column", + planner: NewVReplicationQueryPlanner(nil, "", "vt_testkeyspace"), + query: "UPDATE _vt.vreplication SET id = 5", + expectedErr: ErrCannotUpdateImmutableColumn, + }, + } + + for _, tt := range tests { + tt := tt + + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + stmt := testutil.StatementFromString(t, tt.query) + + qp, err := tt.planner.PlanQuery(stmt) + if tt.expectedErr != nil { + assert.True(t, errors.Is(err, tt.expectedErr), "expected err of type %q, got %q", tt.expectedErr, err) + + return + } + + assert.Equal(t, testutil.ParsedQueryFromString(t, tt.expectedPlannedQuery), qp.ParsedQuery) + }) + } +} + +func TestVReplicationQueryPlanner_planDelete(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + query string + expectedPlannedQuery string + expectedErr error + }{ + { + name: "simple delete", + query: "DELETE FROM _vt.vreplication WHERE id = 1", + expectedPlannedQuery: "DELETE FROM _vt.vreplication WHERE id = 1 AND db_name = 'vt_testkeyspace'", + expectedErr: nil, + }, + { + name: "DELETE with USING clause is not supported", + query: "DELETE FROM _vt.vreplication, _vt.schema_migrations USING _vt.vreplication INNER JOIN _vt.schema_migrations", + expectedErr: ErrUnsupportedQueryConstruct, + }, + { + name: "DELETE with a PARTITION clause is not supported", + query: "DELETE FROM _vt.vreplication PARTITION (p1)", + expectedErr: ErrUnsupportedQueryConstruct, + }, + { + name: "DELETE with ORDER BY is not supported", + query: "DELETE FROM _vt.vreplication ORDER BY id DESC", + expectedErr: ErrUnsupportedQueryConstruct, + }, + { + name: "DELETE with LIMIT is not supported", + query: "DELETE FROM _vt.vreplication LIMIT 5", + expectedErr: ErrUnsupportedQueryConstruct, + }, + } + + planner := NewVReplicationQueryPlanner(nil, "", "vt_testkeyspace") + + for _, tt := range tests { + tt := tt + + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + stmt := testutil.StatementFromString(t, tt.query) + + qp, err := planner.PlanQuery(stmt) + if tt.expectedErr != nil { + assert.True(t, errors.Is(err, tt.expectedErr), "expected err of type %q, got %q", tt.expectedErr, err) + + return + } + + assert.Equal(t, testutil.ParsedQueryFromString(t, tt.expectedPlannedQuery), qp.ParsedQuery) + }) + } +} diff --git a/go/vt/vtctl/workflow/vexec/testutil/query.go b/go/vt/vtctl/workflow/vexec/testutil/query.go new file mode 100644 index 0000000000..3988f7a112 --- /dev/null +++ b/go/vt/vtctl/workflow/vexec/testutil/query.go @@ -0,0 +1,48 @@ +/* +Copyright 2021 The Vitess Authors. + +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 testutil + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "vitess.io/vitess/go/vt/sqlparser" +) + +// ParsedQueryFromString is a test helper that returns a *sqlparser.ParsedQuery +// from a plain string. It marks the test as a failure if the query cannot be +// parsed. +func ParsedQueryFromString(t *testing.T, query string) *sqlparser.ParsedQuery { + t.Helper() + + buf := sqlparser.NewTrackedBuffer(nil) + buf.Myprintf("%v", StatementFromString(t, query)) + + return buf.ParsedQuery() +} + +// StatementFromString is a test helper that returns a sqlparser.Statement from +// a plain string. It marks the test as a failure if the query cannot be parsed. +func StatementFromString(t *testing.T, query string) sqlparser.Statement { + t.Helper() + + stmt, err := sqlparser.Parse(query) + require.NoError(t, err, "could not parse query %v", query) + + return stmt +} From 105160fb167dfc82726a09b12170b2bbbfe6d2d5 Mon Sep 17 00:00:00 2001 From: Andrew Mason Date: Mon, 1 Mar 2021 11:09:04 -0500 Subject: [PATCH 16/20] [vexec] Add tests for QueryPlans Signed-off-by: Andrew Mason --- .../testutil/test_tmclient.go | 62 +++- go/vt/vtctl/workflow/vexec/query_plan_test.go | 332 ++++++++++++++++++ 2 files changed, 390 insertions(+), 4 deletions(-) create mode 100644 go/vt/vtctl/workflow/vexec/query_plan_test.go diff --git a/go/vt/vtctl/grpcvtctldserver/testutil/test_tmclient.go b/go/vt/vtctl/grpcvtctldserver/testutil/test_tmclient.go index 0fd14bd75a..20aa3959e7 100644 --- a/go/vt/vtctl/grpcvtctldserver/testutil/test_tmclient.go +++ b/go/vt/vtctl/grpcvtctldserver/testutil/test_tmclient.go @@ -25,11 +25,13 @@ import ( "github.com/stretchr/testify/assert" + "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/topo" "vitess.io/vitess/go/vt/topo/topoproto" "vitess.io/vitess/go/vt/topotools" "vitess.io/vitess/go/vt/vttablet/tmclient" + querypb "vitess.io/vitess/go/vt/proto/query" replicationdatapb "vitess.io/vitess/go/vt/proto/replicationdata" tabletmanagerdatapb "vitess.io/vitess/go/vt/proto/tabletmanagerdata" topodatapb "vitess.io/vitess/go/vt/proto/topodata" @@ -181,6 +183,17 @@ type TabletManagerClient struct { Error error } // keyed by tablet alias. + UndoDemoteMasterDelays map[string]time.Duration + // keyed by tablet alias + UndoDemoteMasterResults map[string]error + // tablet alias => duration + VReplicationExecDelays map[string]time.Duration + // tablet alias => query string => result + VReplicationExecResults map[string]map[string]struct { + Result *querypb.QueryResult + Error error + } + // keyed by tablet alias. WaitForPositionDelays map[string]time.Duration // keyed by tablet alias. injects a sleep to the end of the function // regardless of parent context timeout or error result. @@ -188,10 +201,6 @@ type TabletManagerClient struct { // WaitForPosition(tablet *topodatapb.Tablet, position string) error, so we // key by tablet alias and then by position. WaitForPositionResults map[string]map[string]error - // keyed by tablet alias. - UndoDemoteMasterDelays map[string]time.Duration - // keyed by tablet alias - UndoDemoteMasterResults map[string]error } // ChangeType is part of the tmclient.TabletManagerClient interface. @@ -529,3 +538,48 @@ func (fake *TabletManagerClient) UndoDemoteMaster(ctx context.Context, tablet *t return assert.AnError } + +// VReplicationExec is part of the tmclient.TabletManagerCLient interface. +func (fake *TabletManagerClient) VReplicationExec(ctx context.Context, tablet *topodatapb.Tablet, query string) (*querypb.QueryResult, error) { + if fake.VReplicationExecResults == nil { + return nil, assert.AnError + } + + if tablet.Alias == nil { + return nil, assert.AnError + } + + key := topoproto.TabletAliasString(tablet.Alias) + + if fake.VReplicationExecDelays != nil { + if delay, ok := fake.VReplicationExecDelays[key]; ok { + select { + case <-ctx.Done(): + return nil, ctx.Err() + case <-time.After(delay): + // proceed to results + } + } + } + + if resultsForTablet, ok := fake.VReplicationExecResults[key]; ok { + // Round trip the expected query both to ensure it's valid and to + // standardize on capitalization and formatting. + stmt, err := sqlparser.Parse(query) + if err != nil { + return nil, err + } + + buf := sqlparser.NewTrackedBuffer(nil) + buf.Myprintf("%v", stmt) + + parsedQuery := buf.ParsedQuery().Query + + // Now do the map lookup. + if result, ok := resultsForTablet[parsedQuery]; ok { + return result.Result, result.Error + } + } + + return nil, assert.AnError +} diff --git a/go/vt/vtctl/workflow/vexec/query_plan_test.go b/go/vt/vtctl/workflow/vexec/query_plan_test.go new file mode 100644 index 0000000000..ec4f6fab95 --- /dev/null +++ b/go/vt/vtctl/workflow/vexec/query_plan_test.go @@ -0,0 +1,332 @@ +/* +Copyright 2021 The Vitess Authors. + +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 vexec + +import ( + "context" + "errors" + "testing" + + "github.com/stretchr/testify/assert" + + "vitess.io/vitess/go/vt/sqlparser" + "vitess.io/vitess/go/vt/topo" + "vitess.io/vitess/go/vt/vtctl/grpcvtctldserver/testutil" + + querypb "vitess.io/vitess/go/vt/proto/query" + topodatapb "vitess.io/vitess/go/vt/proto/topodata" +) + +func TestQueryPlanExecute(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + plan QueryPlan + target *topo.TabletInfo + expected *querypb.QueryResult + shouldErr bool + errKind error + }{ + { + name: "success", + plan: QueryPlan{ + ParsedQuery: &sqlparser.ParsedQuery{ + Query: "SELECT id FROM _vt.vreplication", + }, + tmc: &testutil.TabletManagerClient{ + VReplicationExecResults: map[string]map[string]struct { + Result *querypb.QueryResult + Error error + }{ + "zone1-0000000100": { + "select id from _vt.vreplication": { + Result: &querypb.QueryResult{ + RowsAffected: 1, + }, + }, + }, + }, + }, + }, + target: &topo.TabletInfo{ + Tablet: &topodatapb.Tablet{ + Alias: &topodatapb.TabletAlias{ + Cell: "zone1", + Uid: 100, + }, + }, + }, + expected: &querypb.QueryResult{ + RowsAffected: 1, + }, + shouldErr: false, + }, + { + name: "no rows affected", + plan: QueryPlan{ + ParsedQuery: &sqlparser.ParsedQuery{ + Query: "SELECT id FROM _vt.vreplication", + }, + tmc: &testutil.TabletManagerClient{ + VReplicationExecResults: map[string]map[string]struct { + Result *querypb.QueryResult + Error error + }{ + "zone1-0000000100": { + "select id from _vt.vreplication": { + Result: &querypb.QueryResult{ + RowsAffected: 0, + }, + }, + }, + }, + }, + }, + target: &topo.TabletInfo{ + Tablet: &topodatapb.Tablet{ + Alias: &topodatapb.TabletAlias{ + Cell: "zone1", + Uid: 100, + }, + }, + }, + expected: &querypb.QueryResult{ + RowsAffected: 0, + }, + shouldErr: false, + }, + { + name: "error", + plan: QueryPlan{ + ParsedQuery: &sqlparser.ParsedQuery{ + Query: "SELECT id FROM _vt.vreplication", + }, + tmc: &testutil.TabletManagerClient{ + VReplicationExecResults: map[string]map[string]struct { + Result *querypb.QueryResult + Error error + }{ + "zone1-0000000100": { + "select id from _vt.vreplication": { + Error: assert.AnError, + }, + }, + }, + }, + }, + target: &topo.TabletInfo{ + Tablet: &topodatapb.Tablet{ + Alias: &topodatapb.TabletAlias{ + Cell: "zone1", + Uid: 100, + }, + }, + }, + expected: nil, + shouldErr: true, + }, + { + name: "unprepared query", + plan: QueryPlan{ + ParsedQuery: nil, + }, + shouldErr: true, + errKind: ErrUnpreparedQuery, + }, + } + + for _, tt := range tests { + tt := tt + + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + ctx := context.Background() + + qr, err := tt.plan.Execute(ctx, tt.target) + if tt.shouldErr { + assert.Error(t, err) + + if tt.errKind != nil { + assert.True(t, errors.Is(err, tt.errKind), "expected error kind (= %v), got = %v", tt.errKind, err) + } + + return + } + + assert.NoError(t, err) + assert.Equal(t, tt.expected, qr) + }) + } +} + +func TestQueryPlanExecuteScatter(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + plan QueryPlan + targets []*topo.TabletInfo + // This is different from our actual return type because guaranteeing + // exact pointers in this table-driven style is a bit tough. + expected map[string]*querypb.QueryResult + shouldErr bool + errKind error + }{ + { + name: "success", + plan: QueryPlan{ + ParsedQuery: &sqlparser.ParsedQuery{ + Query: "SELECT id FROM _vt.vreplication", + }, + tmc: &testutil.TabletManagerClient{ + VReplicationExecResults: map[string]map[string]struct { + Result *querypb.QueryResult + Error error + }{ + "zone1-0000000100": { + "select id from _vt.vreplication": { + Result: &querypb.QueryResult{ + RowsAffected: 10, + }, + }, + }, + "zone1-0000000101": { + "select id from _vt.vreplication": { + Result: &querypb.QueryResult{ + RowsAffected: 5, + }, + }, + }, + }, + }, + }, + targets: []*topo.TabletInfo{ + { + Tablet: &topodatapb.Tablet{ + Alias: &topodatapb.TabletAlias{ + Cell: "zone1", + Uid: 100, + }, + }, + }, + { + Tablet: &topodatapb.Tablet{ + Alias: &topodatapb.TabletAlias{ + Cell: "zone1", + Uid: 101, + }, + }, + }, + }, + expected: map[string]*querypb.QueryResult{ + "zone1-0000000100": { + RowsAffected: 10, + }, + "zone1-0000000101": { + RowsAffected: 5, + }, + }, + shouldErr: false, + }, + { + name: "some targets fail", + plan: QueryPlan{ + ParsedQuery: &sqlparser.ParsedQuery{ + Query: "SELECT id FROM _vt.vreplication", + }, + tmc: &testutil.TabletManagerClient{ + VReplicationExecResults: map[string]map[string]struct { + Result *querypb.QueryResult + Error error + }{ + "zone1-0000000100": { + "select id from _vt.vreplication": { + Error: assert.AnError, + }, + }, + "zone1-0000000101": { + "select id from _vt.vreplication": { + Result: &querypb.QueryResult{ + RowsAffected: 5, + }, + }, + }, + }, + }, + }, + targets: []*topo.TabletInfo{ + { + Tablet: &topodatapb.Tablet{ + Alias: &topodatapb.TabletAlias{ + Cell: "zone1", + Uid: 100, + }, + }, + }, + { + Tablet: &topodatapb.Tablet{ + Alias: &topodatapb.TabletAlias{ + Cell: "zone1", + Uid: 101, + }, + }, + }, + }, + shouldErr: true, + }, + { + name: "unprepared query", + plan: QueryPlan{ + ParsedQuery: nil, + }, + shouldErr: true, + errKind: ErrUnpreparedQuery, + }, + } + + for _, tt := range tests { + tt := tt + + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + ctx := context.Background() + + results, err := tt.plan.ExecuteScatter(ctx, tt.targets...) + if tt.shouldErr { + assert.Error(t, err) + + if tt.errKind != nil { + assert.True(t, errors.Is(err, tt.errKind), "expected error kind (= %v), got = %v", tt.errKind, err) + } + + return + } + + assert.NoError(t, err) + + resultsByAlias := make(map[string]*querypb.QueryResult, len(results)) + for tablet, qr := range results { + resultsByAlias[tablet.AliasString()] = qr + } + + assert.Equal(t, tt.expected, resultsByAlias) + }) + } +} From 8b4919195b6ca901738f4cd765ca20693a4b440a Mon Sep 17 00:00:00 2001 From: Andrew Mason Date: Mon, 1 Mar 2021 11:38:36 -0500 Subject: [PATCH 17/20] [workflow] Document Manager, sort of Signed-off-by: Andrew Mason --- go/vt/vtctl/workflow/manager.go | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/go/vt/vtctl/workflow/manager.go b/go/vt/vtctl/workflow/manager.go index 63fbcdad7f..84baaef0ae 100644 --- a/go/vt/vtctl/workflow/manager.go +++ b/go/vt/vtctl/workflow/manager.go @@ -38,16 +38,33 @@ import ( ) var ( - ErrInvalidWorkflow = errors.New("invalid workflow") + // ErrInvalidWorkflow is a catchall error type for conditions that should be + // impossible when operating on a workflow. + ErrInvalidWorkflow = errors.New("invalid workflow") + // ErrMultipleSourceKeyspaces occurs when a workflow somehow has multiple + // source keyspaces across different shard primaries. This should be + // impossible. ErrMultipleSourceKeyspaces = errors.New("multiple source keyspaces for a single workflow") + // ErrMultipleTargetKeyspaces occurs when a workflow somehow has multiple + // target keyspaces across different shard primaries. This should be + // impossible. ErrMultipleTargetKeyspaces = errors.New("multiple target keyspaces for a single workflow") ) +// Manager manages Vitess workflows, like vreplication workflows (MoveTables, +// Reshard, etc) and schema migration workflows. +// +// NB: This is in alpha, and you probably don't want to depend on it (yet!). +// Currently, it provides only a read-only API to vreplication workflows. Write +// actions on vreplication workflows, and schema migration workflows entirely, +// are not yet supported, but planned. type Manager struct { ts *topo.Server tmc tmclient.TabletManagerClient } +// NewManager returns a new manager instance with the given topo.Server and +// TabletManagerClient. func NewManager(ts *topo.Server, tmc tmclient.TabletManagerClient) *Manager { return &Manager{ ts: ts, @@ -55,6 +72,13 @@ func NewManager(ts *topo.Server, tmc tmclient.TabletManagerClient) *Manager { } } +// GetWorkflows returns a list of all workflows that exist in a given keyspace, +// with some additional filtering depending on the request parameters (for +// example, ActiveOnly=true restricts the search to only workflows that are +// currently running). +// +// It has the same signature as the vtctlservicepb.VtctldServer's GetWorkflows +// rpc, and grpcvtctldserver delegates to this function. func (manager *Manager) GetWorkflows(ctx context.Context, req *vtctldatapb.GetWorkflowsRequest) (*vtctldatapb.GetWorkflowsResponse, error) { where := "" if req.ActiveOnly { From 358cfa39e68015f42df503062863280e6f0375f8 Mon Sep 17 00:00:00 2001 From: Andrew Mason Date: Mon, 1 Mar 2021 11:45:27 -0500 Subject: [PATCH 18/20] [workflow] Rename, I decided I dislike "Server" slightly less as a generic than "Manager" Signed-off-by: Andrew Mason --- go/vt/vtctl/grpcvtctldserver/server.go | 6 ++--- .../vtctl/workflow/{manager.go => server.go} | 24 +++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) rename go/vt/vtctl/workflow/{manager.go => server.go} (91%) diff --git a/go/vt/vtctl/grpcvtctldserver/server.go b/go/vt/vtctl/grpcvtctldserver/server.go index d16407cb72..d97123dcdf 100644 --- a/go/vt/vtctl/grpcvtctldserver/server.go +++ b/go/vt/vtctl/grpcvtctldserver/server.go @@ -62,7 +62,7 @@ const ( type VtctldServer struct { ts *topo.Server tmc tmclient.TabletManagerClient - wm *workflow.Manager + ws *workflow.Server } // NewVtctldServer returns a new VtctldServer for the given topo server. @@ -72,7 +72,7 @@ func NewVtctldServer(ts *topo.Server) *VtctldServer { return &VtctldServer{ ts: ts, tmc: tmc, - wm: workflow.NewManager(ts, tmc), + ws: workflow.NewServer(ts, tmc), } } @@ -686,7 +686,7 @@ func (s *VtctldServer) GetVSchema(ctx context.Context, req *vtctldatapb.GetVSche // GetWorkflows is part of the vtctlservicepb.VtctldServer interface. func (s *VtctldServer) GetWorkflows(ctx context.Context, req *vtctldatapb.GetWorkflowsRequest) (*vtctldatapb.GetWorkflowsResponse, error) { - return s.wm.GetWorkflows(ctx, req) + return s.ws.GetWorkflows(ctx, req) } // InitShardPrimary is part of the vtctlservicepb.VtctldServer interface. diff --git a/go/vt/vtctl/workflow/manager.go b/go/vt/vtctl/workflow/server.go similarity index 91% rename from go/vt/vtctl/workflow/manager.go rename to go/vt/vtctl/workflow/server.go index 84baaef0ae..aaccf4f95c 100644 --- a/go/vt/vtctl/workflow/manager.go +++ b/go/vt/vtctl/workflow/server.go @@ -51,22 +51,22 @@ var ( ErrMultipleTargetKeyspaces = errors.New("multiple target keyspaces for a single workflow") ) -// Manager manages Vitess workflows, like vreplication workflows (MoveTables, -// Reshard, etc) and schema migration workflows. +// Server provides an API to work with Vitess workflows, like vreplication +// workflows (MoveTables, Reshard, etc) and schema migration workflows. // // NB: This is in alpha, and you probably don't want to depend on it (yet!). // Currently, it provides only a read-only API to vreplication workflows. Write // actions on vreplication workflows, and schema migration workflows entirely, // are not yet supported, but planned. -type Manager struct { +type Server struct { ts *topo.Server tmc tmclient.TabletManagerClient } -// NewManager returns a new manager instance with the given topo.Server and +// NewServer returns a new server instance with the given topo.Server and // TabletManagerClient. -func NewManager(ts *topo.Server, tmc tmclient.TabletManagerClient) *Manager { - return &Manager{ +func NewServer(ts *topo.Server, tmc tmclient.TabletManagerClient) *Server { + return &Server{ ts: ts, tmc: tmc, } @@ -79,7 +79,7 @@ func NewManager(ts *topo.Server, tmc tmclient.TabletManagerClient) *Manager { // // It has the same signature as the vtctlservicepb.VtctldServer's GetWorkflows // rpc, and grpcvtctldserver delegates to this function. -func (manager *Manager) GetWorkflows(ctx context.Context, req *vtctldatapb.GetWorkflowsRequest) (*vtctldatapb.GetWorkflowsResponse, error) { +func (s *Server) GetWorkflows(ctx context.Context, req *vtctldatapb.GetWorkflowsRequest) (*vtctldatapb.GetWorkflowsResponse, error) { where := "" if req.ActiveOnly { where = "WHERE state <> 'Stopped'" @@ -104,7 +104,7 @@ func (manager *Manager) GetWorkflows(ctx context.Context, req *vtctldatapb.GetWo where, ) - vx := vexec.NewVExec(req.Keyspace, "", manager.ts, manager.tmc) + vx := vexec.NewVExec(req.Keyspace, "", s.ts, s.tmc) results, err := vx.QueryContext(ctx, query) if err != nil { return nil, err @@ -170,7 +170,7 @@ func (manager *Manager) GetWorkflows(ctx context.Context, req *vtctldatapb.GetWo Message: message, } - status.CopyStates, err = manager.getWorkflowCopyStates(ctx, tablet, id) + status.CopyStates, err = s.getWorkflowCopyStates(ctx, tablet, id) if err != nil { return err } @@ -190,7 +190,7 @@ func (manager *Manager) GetWorkflows(ctx context.Context, req *vtctldatapb.GetWo ctx, cancel := context.WithTimeout(ctx, *topo.RemoteOperationTimeout) defer cancel() - si, err := manager.ts.GetShard(ctx, req.Keyspace, tablet.Shard) + si, err := s.ts.GetShard(ctx, req.Keyspace, tablet.Shard) if err != nil { return err } @@ -316,9 +316,9 @@ func (manager *Manager) GetWorkflows(ctx context.Context, req *vtctldatapb.GetWo }, nil } -func (manager *Manager) getWorkflowCopyStates(ctx context.Context, tablet *topo.TabletInfo, id int64) ([]*vtctldatapb.Workflow_ReplicationStatus_CopyState, error) { +func (s *Server) getWorkflowCopyStates(ctx context.Context, tablet *topo.TabletInfo, id int64) ([]*vtctldatapb.Workflow_ReplicationStatus_CopyState, error) { query := fmt.Sprintf("select table_name, lastpk from _vt.copy_state where vrepl_id = %d", id) - qr, err := manager.tmc.VReplicationExec(ctx, tablet.Tablet, query) + qr, err := s.tmc.VReplicationExec(ctx, tablet.Tablet, query) if err != nil { return nil, err } From 098ac4f2b8b4985450b843454832b276822218e7 Mon Sep 17 00:00:00 2001 From: Andrew Mason Date: Tue, 2 Mar 2021 10:45:16 -0500 Subject: [PATCH 19/20] [workflow] Rename `(Shard)ReplicationStatus` => `(Shard)Stream` Signed-off-by: Andrew Mason --- go/vt/proto/vtctldata/vtctldata.pb.go | 1105 ++++++++++++------------- go/vt/vtctl/workflow/server.go | 50 +- proto/vtctldata.proto | 16 +- 3 files changed, 585 insertions(+), 586 deletions(-) diff --git a/go/vt/proto/vtctldata/vtctldata.pb.go b/go/vt/proto/vtctldata/vtctldata.pb.go index 68f7a4ba91..9ced000c3c 100644 --- a/go/vt/proto/vtctldata/vtctldata.pb.go +++ b/go/vt/proto/vtctldata/vtctldata.pb.go @@ -432,14 +432,14 @@ func (m *Shard) GetShard() *topodata.Shard { // TODO: comment the hell out of this. type Workflow struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Source *Workflow_ReplicationLocation `protobuf:"bytes,2,opt,name=source,proto3" json:"source,omitempty"` - Target *Workflow_ReplicationLocation `protobuf:"bytes,3,opt,name=target,proto3" json:"target,omitempty"` - MaxVReplicationLag int64 `protobuf:"varint,4,opt,name=max_v_replication_lag,json=maxVReplicationLag,proto3" json:"max_v_replication_lag,omitempty"` - ShardStatuses map[string]*Workflow_ShardReplicationStatus `protobuf:"bytes,5,rep,name=shard_statuses,json=shardStatuses,proto3" json:"shard_statuses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Source *Workflow_ReplicationLocation `protobuf:"bytes,2,opt,name=source,proto3" json:"source,omitempty"` + Target *Workflow_ReplicationLocation `protobuf:"bytes,3,opt,name=target,proto3" json:"target,omitempty"` + MaxVReplicationLag int64 `protobuf:"varint,4,opt,name=max_v_replication_lag,json=maxVReplicationLag,proto3" json:"max_v_replication_lag,omitempty"` + ShardStreams map[string]*Workflow_ShardStream `protobuf:"bytes,5,rep,name=shard_streams,json=shardStreams,proto3" json:"shard_streams,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Workflow) Reset() { *m = Workflow{} } @@ -503,9 +503,9 @@ func (m *Workflow) GetMaxVReplicationLag() int64 { return 0 } -func (m *Workflow) GetShardStatuses() map[string]*Workflow_ShardReplicationStatus { +func (m *Workflow) GetShardStreams() map[string]*Workflow_ShardStream { if m != nil { - return m.ShardStatuses + return m.ShardStreams } return nil } @@ -565,36 +565,27 @@ func (m *Workflow_ReplicationLocation) GetShards() []string { return nil } -type Workflow_ReplicationStatus struct { - Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - Shard string `protobuf:"bytes,2,opt,name=shard,proto3" json:"shard,omitempty"` - Tablet *topodata.TabletAlias `protobuf:"bytes,3,opt,name=tablet,proto3" json:"tablet,omitempty"` - BinlogSource *binlogdata.BinlogSource `protobuf:"bytes,4,opt,name=binlog_source,json=binlogSource,proto3" json:"binlog_source,omitempty"` - Position string `protobuf:"bytes,5,opt,name=position,proto3" json:"position,omitempty"` - StopPosition string `protobuf:"bytes,6,opt,name=stop_position,json=stopPosition,proto3" json:"stop_position,omitempty"` - State string `protobuf:"bytes,7,opt,name=state,proto3" json:"state,omitempty"` - DbName string `protobuf:"bytes,8,opt,name=db_name,json=dbName,proto3" json:"db_name,omitempty"` - TransactionTimestamp *vttime.Time `protobuf:"bytes,9,opt,name=transaction_timestamp,json=transactionTimestamp,proto3" json:"transaction_timestamp,omitempty"` - TimeUpdated *vttime.Time `protobuf:"bytes,10,opt,name=time_updated,json=timeUpdated,proto3" json:"time_updated,omitempty"` - Message string `protobuf:"bytes,11,opt,name=message,proto3" json:"message,omitempty"` - CopyStates []*Workflow_ReplicationStatus_CopyState `protobuf:"bytes,12,rep,name=copy_states,json=copyStates,proto3" json:"copy_states,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +type Workflow_ShardStream struct { + Streams []*Workflow_Stream `protobuf:"bytes,1,rep,name=streams,proto3" json:"streams,omitempty"` + TabletControls []*topodata.Shard_TabletControl `protobuf:"bytes,2,rep,name=tablet_controls,json=tabletControls,proto3" json:"tablet_controls,omitempty"` + IsPrimaryServing bool `protobuf:"varint,3,opt,name=is_primary_serving,json=isPrimaryServing,proto3" json:"is_primary_serving,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *Workflow_ReplicationStatus) Reset() { *m = Workflow_ReplicationStatus{} } -func (m *Workflow_ReplicationStatus) String() string { return proto.CompactTextString(m) } -func (*Workflow_ReplicationStatus) ProtoMessage() {} -func (*Workflow_ReplicationStatus) Descriptor() ([]byte, []int) { +func (m *Workflow_ShardStream) Reset() { *m = Workflow_ShardStream{} } +func (m *Workflow_ShardStream) String() string { return proto.CompactTextString(m) } +func (*Workflow_ShardStream) ProtoMessage() {} +func (*Workflow_ShardStream) Descriptor() ([]byte, []int) { return fileDescriptor_f41247b323a1ab2e, []int{6, 2} } -func (m *Workflow_ReplicationStatus) XXX_Unmarshal(b []byte) error { +func (m *Workflow_ShardStream) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *Workflow_ReplicationStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *Workflow_ShardStream) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_Workflow_ReplicationStatus.Marshal(b, m, deterministic) + return xxx_messageInfo_Workflow_ShardStream.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -604,103 +595,175 @@ func (m *Workflow_ReplicationStatus) XXX_Marshal(b []byte, deterministic bool) ( return b[:n], nil } } -func (m *Workflow_ReplicationStatus) XXX_Merge(src proto.Message) { - xxx_messageInfo_Workflow_ReplicationStatus.Merge(m, src) +func (m *Workflow_ShardStream) XXX_Merge(src proto.Message) { + xxx_messageInfo_Workflow_ShardStream.Merge(m, src) } -func (m *Workflow_ReplicationStatus) XXX_Size() int { +func (m *Workflow_ShardStream) XXX_Size() int { return m.Size() } -func (m *Workflow_ReplicationStatus) XXX_DiscardUnknown() { - xxx_messageInfo_Workflow_ReplicationStatus.DiscardUnknown(m) +func (m *Workflow_ShardStream) XXX_DiscardUnknown() { + xxx_messageInfo_Workflow_ShardStream.DiscardUnknown(m) } -var xxx_messageInfo_Workflow_ReplicationStatus proto.InternalMessageInfo +var xxx_messageInfo_Workflow_ShardStream proto.InternalMessageInfo -func (m *Workflow_ReplicationStatus) GetId() int64 { +func (m *Workflow_ShardStream) GetStreams() []*Workflow_Stream { + if m != nil { + return m.Streams + } + return nil +} + +func (m *Workflow_ShardStream) GetTabletControls() []*topodata.Shard_TabletControl { + if m != nil { + return m.TabletControls + } + return nil +} + +func (m *Workflow_ShardStream) GetIsPrimaryServing() bool { + if m != nil { + return m.IsPrimaryServing + } + return false +} + +type Workflow_Stream struct { + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Shard string `protobuf:"bytes,2,opt,name=shard,proto3" json:"shard,omitempty"` + Tablet *topodata.TabletAlias `protobuf:"bytes,3,opt,name=tablet,proto3" json:"tablet,omitempty"` + BinlogSource *binlogdata.BinlogSource `protobuf:"bytes,4,opt,name=binlog_source,json=binlogSource,proto3" json:"binlog_source,omitempty"` + Position string `protobuf:"bytes,5,opt,name=position,proto3" json:"position,omitempty"` + StopPosition string `protobuf:"bytes,6,opt,name=stop_position,json=stopPosition,proto3" json:"stop_position,omitempty"` + State string `protobuf:"bytes,7,opt,name=state,proto3" json:"state,omitempty"` + DbName string `protobuf:"bytes,8,opt,name=db_name,json=dbName,proto3" json:"db_name,omitempty"` + TransactionTimestamp *vttime.Time `protobuf:"bytes,9,opt,name=transaction_timestamp,json=transactionTimestamp,proto3" json:"transaction_timestamp,omitempty"` + TimeUpdated *vttime.Time `protobuf:"bytes,10,opt,name=time_updated,json=timeUpdated,proto3" json:"time_updated,omitempty"` + Message string `protobuf:"bytes,11,opt,name=message,proto3" json:"message,omitempty"` + CopyStates []*Workflow_Stream_CopyState `protobuf:"bytes,12,rep,name=copy_states,json=copyStates,proto3" json:"copy_states,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Workflow_Stream) Reset() { *m = Workflow_Stream{} } +func (m *Workflow_Stream) String() string { return proto.CompactTextString(m) } +func (*Workflow_Stream) ProtoMessage() {} +func (*Workflow_Stream) Descriptor() ([]byte, []int) { + return fileDescriptor_f41247b323a1ab2e, []int{6, 3} +} +func (m *Workflow_Stream) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Workflow_Stream) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Workflow_Stream.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Workflow_Stream) XXX_Merge(src proto.Message) { + xxx_messageInfo_Workflow_Stream.Merge(m, src) +} +func (m *Workflow_Stream) XXX_Size() int { + return m.Size() +} +func (m *Workflow_Stream) XXX_DiscardUnknown() { + xxx_messageInfo_Workflow_Stream.DiscardUnknown(m) +} + +var xxx_messageInfo_Workflow_Stream proto.InternalMessageInfo + +func (m *Workflow_Stream) GetId() int64 { if m != nil { return m.Id } return 0 } -func (m *Workflow_ReplicationStatus) GetShard() string { +func (m *Workflow_Stream) GetShard() string { if m != nil { return m.Shard } return "" } -func (m *Workflow_ReplicationStatus) GetTablet() *topodata.TabletAlias { +func (m *Workflow_Stream) GetTablet() *topodata.TabletAlias { if m != nil { return m.Tablet } return nil } -func (m *Workflow_ReplicationStatus) GetBinlogSource() *binlogdata.BinlogSource { +func (m *Workflow_Stream) GetBinlogSource() *binlogdata.BinlogSource { if m != nil { return m.BinlogSource } return nil } -func (m *Workflow_ReplicationStatus) GetPosition() string { +func (m *Workflow_Stream) GetPosition() string { if m != nil { return m.Position } return "" } -func (m *Workflow_ReplicationStatus) GetStopPosition() string { +func (m *Workflow_Stream) GetStopPosition() string { if m != nil { return m.StopPosition } return "" } -func (m *Workflow_ReplicationStatus) GetState() string { +func (m *Workflow_Stream) GetState() string { if m != nil { return m.State } return "" } -func (m *Workflow_ReplicationStatus) GetDbName() string { +func (m *Workflow_Stream) GetDbName() string { if m != nil { return m.DbName } return "" } -func (m *Workflow_ReplicationStatus) GetTransactionTimestamp() *vttime.Time { +func (m *Workflow_Stream) GetTransactionTimestamp() *vttime.Time { if m != nil { return m.TransactionTimestamp } return nil } -func (m *Workflow_ReplicationStatus) GetTimeUpdated() *vttime.Time { +func (m *Workflow_Stream) GetTimeUpdated() *vttime.Time { if m != nil { return m.TimeUpdated } return nil } -func (m *Workflow_ReplicationStatus) GetMessage() string { +func (m *Workflow_Stream) GetMessage() string { if m != nil { return m.Message } return "" } -func (m *Workflow_ReplicationStatus) GetCopyStates() []*Workflow_ReplicationStatus_CopyState { +func (m *Workflow_Stream) GetCopyStates() []*Workflow_Stream_CopyState { if m != nil { return m.CopyStates } return nil } -type Workflow_ReplicationStatus_CopyState struct { +type Workflow_Stream_CopyState struct { Table string `protobuf:"bytes,1,opt,name=table,proto3" json:"table,omitempty"` LastPk string `protobuf:"bytes,2,opt,name=last_pk,json=lastPk,proto3" json:"last_pk,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -708,18 +771,18 @@ type Workflow_ReplicationStatus_CopyState struct { XXX_sizecache int32 `json:"-"` } -func (m *Workflow_ReplicationStatus_CopyState) Reset() { *m = Workflow_ReplicationStatus_CopyState{} } -func (m *Workflow_ReplicationStatus_CopyState) String() string { return proto.CompactTextString(m) } -func (*Workflow_ReplicationStatus_CopyState) ProtoMessage() {} -func (*Workflow_ReplicationStatus_CopyState) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{6, 2, 0} +func (m *Workflow_Stream_CopyState) Reset() { *m = Workflow_Stream_CopyState{} } +func (m *Workflow_Stream_CopyState) String() string { return proto.CompactTextString(m) } +func (*Workflow_Stream_CopyState) ProtoMessage() {} +func (*Workflow_Stream_CopyState) Descriptor() ([]byte, []int) { + return fileDescriptor_f41247b323a1ab2e, []int{6, 3, 0} } -func (m *Workflow_ReplicationStatus_CopyState) XXX_Unmarshal(b []byte) error { +func (m *Workflow_Stream_CopyState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *Workflow_ReplicationStatus_CopyState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *Workflow_Stream_CopyState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_Workflow_ReplicationStatus_CopyState.Marshal(b, m, deterministic) + return xxx_messageInfo_Workflow_Stream_CopyState.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -729,95 +792,32 @@ func (m *Workflow_ReplicationStatus_CopyState) XXX_Marshal(b []byte, determinist return b[:n], nil } } -func (m *Workflow_ReplicationStatus_CopyState) XXX_Merge(src proto.Message) { - xxx_messageInfo_Workflow_ReplicationStatus_CopyState.Merge(m, src) +func (m *Workflow_Stream_CopyState) XXX_Merge(src proto.Message) { + xxx_messageInfo_Workflow_Stream_CopyState.Merge(m, src) } -func (m *Workflow_ReplicationStatus_CopyState) XXX_Size() int { +func (m *Workflow_Stream_CopyState) XXX_Size() int { return m.Size() } -func (m *Workflow_ReplicationStatus_CopyState) XXX_DiscardUnknown() { - xxx_messageInfo_Workflow_ReplicationStatus_CopyState.DiscardUnknown(m) +func (m *Workflow_Stream_CopyState) XXX_DiscardUnknown() { + xxx_messageInfo_Workflow_Stream_CopyState.DiscardUnknown(m) } -var xxx_messageInfo_Workflow_ReplicationStatus_CopyState proto.InternalMessageInfo +var xxx_messageInfo_Workflow_Stream_CopyState proto.InternalMessageInfo -func (m *Workflow_ReplicationStatus_CopyState) GetTable() string { +func (m *Workflow_Stream_CopyState) GetTable() string { if m != nil { return m.Table } return "" } -func (m *Workflow_ReplicationStatus_CopyState) GetLastPk() string { +func (m *Workflow_Stream_CopyState) GetLastPk() string { if m != nil { return m.LastPk } return "" } -type Workflow_ShardReplicationStatus struct { - PrimaryReplicationStatuses []*Workflow_ReplicationStatus `protobuf:"bytes,1,rep,name=primary_replication_statuses,json=primaryReplicationStatuses,proto3" json:"primary_replication_statuses,omitempty"` - TabletControls []*topodata.Shard_TabletControl `protobuf:"bytes,2,rep,name=tablet_controls,json=tabletControls,proto3" json:"tablet_controls,omitempty"` - IsPrimaryServing bool `protobuf:"varint,3,opt,name=is_primary_serving,json=isPrimaryServing,proto3" json:"is_primary_serving,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Workflow_ShardReplicationStatus) Reset() { *m = Workflow_ShardReplicationStatus{} } -func (m *Workflow_ShardReplicationStatus) String() string { return proto.CompactTextString(m) } -func (*Workflow_ShardReplicationStatus) ProtoMessage() {} -func (*Workflow_ShardReplicationStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_f41247b323a1ab2e, []int{6, 3} -} -func (m *Workflow_ShardReplicationStatus) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Workflow_ShardReplicationStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Workflow_ShardReplicationStatus.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *Workflow_ShardReplicationStatus) XXX_Merge(src proto.Message) { - xxx_messageInfo_Workflow_ShardReplicationStatus.Merge(m, src) -} -func (m *Workflow_ShardReplicationStatus) XXX_Size() int { - return m.Size() -} -func (m *Workflow_ShardReplicationStatus) XXX_DiscardUnknown() { - xxx_messageInfo_Workflow_ShardReplicationStatus.DiscardUnknown(m) -} - -var xxx_messageInfo_Workflow_ShardReplicationStatus proto.InternalMessageInfo - -func (m *Workflow_ShardReplicationStatus) GetPrimaryReplicationStatuses() []*Workflow_ReplicationStatus { - if m != nil { - return m.PrimaryReplicationStatuses - } - return nil -} - -func (m *Workflow_ShardReplicationStatus) GetTabletControls() []*topodata.Shard_TabletControl { - if m != nil { - return m.TabletControls - } - return nil -} - -func (m *Workflow_ShardReplicationStatus) GetIsPrimaryServing() bool { - if m != nil { - return m.IsPrimaryServing - } - return false -} - type ChangeTabletTypeRequest struct { TabletAlias *topodata.TabletAlias `protobuf:"bytes,1,opt,name=tablet_alias,json=tabletAlias,proto3" json:"tablet_alias,omitempty"` DbType topodata.TabletType `protobuf:"varint,2,opt,name=db_type,json=dbType,proto3,enum=topodata.TabletType" json:"db_type,omitempty"` @@ -3898,11 +3898,11 @@ func init() { proto.RegisterType((*Keyspace)(nil), "vtctldata.Keyspace") proto.RegisterType((*Shard)(nil), "vtctldata.Shard") proto.RegisterType((*Workflow)(nil), "vtctldata.Workflow") - proto.RegisterMapType((map[string]*Workflow_ShardReplicationStatus)(nil), "vtctldata.Workflow.ShardStatusesEntry") + proto.RegisterMapType((map[string]*Workflow_ShardStream)(nil), "vtctldata.Workflow.ShardStreamsEntry") proto.RegisterType((*Workflow_ReplicationLocation)(nil), "vtctldata.Workflow.ReplicationLocation") - proto.RegisterType((*Workflow_ReplicationStatus)(nil), "vtctldata.Workflow.ReplicationStatus") - proto.RegisterType((*Workflow_ReplicationStatus_CopyState)(nil), "vtctldata.Workflow.ReplicationStatus.CopyState") - proto.RegisterType((*Workflow_ShardReplicationStatus)(nil), "vtctldata.Workflow.ShardReplicationStatus") + proto.RegisterType((*Workflow_ShardStream)(nil), "vtctldata.Workflow.ShardStream") + proto.RegisterType((*Workflow_Stream)(nil), "vtctldata.Workflow.Stream") + proto.RegisterType((*Workflow_Stream_CopyState)(nil), "vtctldata.Workflow.Stream.CopyState") proto.RegisterType((*ChangeTabletTypeRequest)(nil), "vtctldata.ChangeTabletTypeRequest") proto.RegisterType((*ChangeTabletTypeResponse)(nil), "vtctldata.ChangeTabletTypeResponse") proto.RegisterType((*CreateKeyspaceRequest)(nil), "vtctldata.CreateKeyspaceRequest") @@ -3964,166 +3964,165 @@ func init() { func init() { proto.RegisterFile("vtctldata.proto", fileDescriptor_f41247b323a1ab2e) } var fileDescriptor_f41247b323a1ab2e = []byte{ - // 2542 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x39, 0xcb, 0x6f, 0x1b, 0xc7, - 0xf9, 0xbf, 0xa5, 0x28, 0x4a, 0xfc, 0xf8, 0x90, 0x3c, 0xa2, 0xa4, 0x0d, 0x63, 0x2b, 0xce, 0xfa, - 0x67, 0x45, 0x75, 0x63, 0xd2, 0x56, 0x50, 0xc3, 0x70, 0x93, 0xd6, 0xb6, 0x1e, 0x86, 0x12, 0xc7, - 0x55, 0x57, 0xaa, 0x03, 0xb4, 0x40, 0x17, 0xa3, 0xdd, 0x11, 0xbd, 0xd0, 0x72, 0x97, 0xd9, 0x19, - 0x52, 0x62, 0x7a, 0xe8, 0xa5, 0x3d, 0x04, 0x2d, 0xd0, 0x6b, 0x81, 0x5c, 0x7a, 0xea, 0x3f, 0x50, - 0x20, 0x87, 0xa2, 0xe8, 0xb1, 0xe8, 0xb1, 0xd7, 0xde, 0x0a, 0xf7, 0x8f, 0xe8, 0xa1, 0x97, 0x62, - 0x9e, 0x5c, 0x3e, 0x44, 0xcb, 0x8a, 0x81, 0xa2, 0x27, 0xee, 0x7c, 0x8f, 0x99, 0x6f, 0xbe, 0xf7, - 0x37, 0x84, 0x85, 0x1e, 0xf3, 0x59, 0x14, 0x60, 0x86, 0x1b, 0x9d, 0x34, 0x61, 0x09, 0x2a, 0x1a, - 0x40, 0x7d, 0xf1, 0x28, 0x8c, 0xa3, 0xa4, 0x35, 0x40, 0xd6, 0x2b, 0x51, 0xd2, 0xea, 0xb2, 0x30, - 0x52, 0xcb, 0x6a, 0xbb, 0x4f, 0x3f, 0x8f, 0x7c, 0xa6, 0xd7, 0xab, 0x0c, 0x1f, 0x45, 0x84, 0xb5, - 0x71, 0x8c, 0x5b, 0x24, 0xcd, 0xf0, 0x55, 0x59, 0xd2, 0x49, 0xb2, 0xfb, 0xf4, 0xa8, 0xff, 0x82, - 0xb4, 0xf5, 0xb2, 0xdc, 0x63, 0x2c, 0x6c, 0x13, 0xb9, 0x72, 0x3e, 0x83, 0xfa, 0xce, 0x19, 0xf1, - 0xbb, 0x8c, 0x3c, 0xe7, 0xa2, 0x6c, 0x25, 0xed, 0x36, 0x8e, 0x03, 0x97, 0x7c, 0xde, 0x25, 0x94, - 0x21, 0x04, 0x79, 0x9c, 0xb6, 0xa8, 0x6d, 0x5d, 0x9f, 0xd9, 0x28, 0xba, 0xe2, 0x1b, 0xdd, 0x84, - 0x2a, 0xf6, 0x59, 0x98, 0xc4, 0x1e, 0xdf, 0x26, 0xe9, 0x32, 0x3b, 0x77, 0xdd, 0xda, 0x98, 0x71, - 0x2b, 0x12, 0x7a, 0x28, 0x81, 0xce, 0x16, 0xbc, 0x3d, 0x71, 0x63, 0xda, 0x49, 0x62, 0x4a, 0xd0, - 0xff, 0xc3, 0x2c, 0xe9, 0x91, 0x98, 0xd9, 0xd6, 0x75, 0x6b, 0xa3, 0xb4, 0x59, 0x6d, 0xe8, 0xcb, - 0xee, 0x70, 0xa8, 0x2b, 0x91, 0xce, 0x97, 0x16, 0xd8, 0x87, 0xfc, 0x9a, 0x9f, 0x62, 0x46, 0xd2, - 0x10, 0x47, 0xe1, 0x17, 0xe4, 0x80, 0x30, 0x16, 0xc6, 0x2d, 0x8a, 0xde, 0x85, 0x32, 0xc3, 0x69, - 0x8b, 0x30, 0x4f, 0x68, 0x42, 0xec, 0x54, 0x74, 0x4b, 0x12, 0x26, 0xb8, 0xd0, 0xb7, 0xe1, 0x0a, - 0x4d, 0xba, 0xa9, 0x4f, 0x3c, 0x72, 0xd6, 0x49, 0x09, 0xa5, 0x61, 0x12, 0x0b, 0x71, 0x8b, 0xee, - 0xa2, 0x44, 0xec, 0x18, 0x38, 0xba, 0x06, 0xe0, 0xa7, 0x04, 0x33, 0xe2, 0x05, 0x41, 0x64, 0xcf, - 0x08, 0xaa, 0xa2, 0x84, 0x6c, 0x07, 0x91, 0xf3, 0xf7, 0x1c, 0x2c, 0x4d, 0x12, 0xa3, 0x0e, 0xf3, - 0xa7, 0x49, 0x7a, 0x72, 0x1c, 0x25, 0xa7, 0x4a, 0x04, 0xb3, 0x46, 0xef, 0xc1, 0x82, 0x3a, 0xff, - 0x84, 0xf4, 0x69, 0x07, 0xfb, 0x44, 0x9d, 0x5e, 0x95, 0xe0, 0x4f, 0x14, 0x94, 0x13, 0xaa, 0xbb, - 0x18, 0x42, 0x29, 0x40, 0x55, 0x82, 0x0d, 0xe1, 0x3a, 0x2c, 0x50, 0x96, 0x74, 0x3c, 0x7c, 0xcc, - 0x48, 0xea, 0xf9, 0x49, 0xa7, 0x6f, 0xe7, 0xaf, 0x5b, 0x1b, 0xf3, 0x6e, 0x85, 0x83, 0x1f, 0x71, - 0xe8, 0x56, 0xd2, 0xe9, 0xa3, 0x8f, 0xa1, 0x2a, 0xb4, 0xe2, 0x51, 0x25, 0xa7, 0x3d, 0x7b, 0x7d, - 0x66, 0xa3, 0xb4, 0x79, 0xa3, 0x31, 0xf0, 0xc1, 0xf3, 0x34, 0xeb, 0x56, 0x04, 0xab, 0xb9, 0x21, - 0x82, 0xbc, 0x4f, 0xa2, 0xc8, 0x2e, 0x08, 0x89, 0xc4, 0xb7, 0x54, 0x3e, 0xf7, 0x3f, 0x8f, 0xf5, - 0x3b, 0x84, 0xda, 0x73, 0x5a, 0xf9, 0x1c, 0x76, 0xc8, 0x41, 0xe8, 0x5b, 0xb0, 0x48, 0xce, 0x18, - 0x49, 0x63, 0x1c, 0x79, 0x7e, 0xd4, 0xa5, 0x8c, 0xa4, 0xf6, 0xbc, 0x20, 0x5b, 0xd0, 0xf0, 0x2d, - 0x09, 0x76, 0x9e, 0xc1, 0xbc, 0xb9, 0x21, 0x82, 0x7c, 0x8c, 0xdb, 0xda, 0x9c, 0xe2, 0x1b, 0x35, - 0x60, 0x7e, 0x48, 0x81, 0xa5, 0x4d, 0xd4, 0x30, 0x5e, 0xae, 0x39, 0x5d, 0x43, 0xe3, 0xfc, 0x14, - 0x66, 0x0f, 0x5e, 0xe0, 0x34, 0xe0, 0xc6, 0x31, 0x8c, 0xca, 0x38, 0x27, 0xa3, 0x07, 0xe5, 0x32, - 0x07, 0xdd, 0x84, 0x59, 0xca, 0x19, 0x85, 0xf6, 0x4b, 0x9b, 0x0b, 0x83, 0x53, 0xc4, 0x7e, 0xae, - 0xc4, 0x3a, 0xbf, 0x02, 0x98, 0xff, 0x4c, 0x1b, 0x79, 0x92, 0xc0, 0xdf, 0x87, 0x82, 0xb4, 0xb0, - 0x12, 0xf7, 0xbd, 0x8c, 0xda, 0x35, 0x63, 0xc3, 0x25, 0x9d, 0x28, 0xf4, 0x31, 0x8f, 0x9a, 0xa7, - 0x89, 0xfc, 0x75, 0x15, 0x1b, 0xdf, 0x40, 0x5a, 0x5e, 0x49, 0x72, 0xf1, 0x0d, 0x24, 0x1b, 0xba, - 0x0b, 0xcb, 0x6d, 0x7c, 0xe6, 0xf5, 0xbc, 0x74, 0x40, 0xe4, 0x45, 0xb8, 0x25, 0xdc, 0x65, 0xc6, - 0x45, 0x6d, 0x7c, 0xf6, 0x3c, 0xcb, 0x8f, 0x5b, 0xe8, 0x53, 0xa8, 0x8a, 0xeb, 0x79, 0x94, 0x61, - 0xd6, 0xa5, 0x44, 0xfb, 0xcc, 0xfa, 0xa4, 0xb3, 0x85, 0x3e, 0x0e, 0x14, 0xe1, 0x4e, 0xcc, 0xd2, - 0xbe, 0x5b, 0xa1, 0x59, 0x58, 0x3d, 0x02, 0x34, 0x4e, 0x84, 0x16, 0x61, 0xe6, 0x84, 0xf4, 0x95, - 0xb2, 0xf8, 0x27, 0x7a, 0x08, 0xb3, 0x3d, 0x1c, 0x75, 0xb5, 0xaa, 0x6e, 0x9d, 0x7b, 0x5a, 0x46, - 0x5c, 0xb9, 0xa7, 0x2b, 0x19, 0x1f, 0xe4, 0xee, 0x5b, 0xf5, 0x3d, 0x58, 0x9a, 0xa0, 0x8e, 0xa9, - 0x0e, 0xb0, 0x02, 0x05, 0x21, 0x31, 0xb5, 0x73, 0x22, 0xbf, 0xa9, 0x55, 0xfd, 0x0f, 0x79, 0xb8, - 0x32, 0x76, 0x16, 0xaa, 0x42, 0x2e, 0x0c, 0xc4, 0x1e, 0x33, 0x6e, 0x2e, 0x0c, 0x50, 0x4d, 0xbb, - 0x8a, 0xf4, 0x1f, 0xb9, 0x40, 0xb7, 0xb9, 0xdd, 0x78, 0x0c, 0x28, 0xbb, 0x2d, 0x0f, 0x3c, 0x48, - 0x84, 0x1b, 0x7b, 0x14, 0x85, 0x98, 0xba, 0x8a, 0x08, 0x7d, 0x04, 0x15, 0x99, 0xf7, 0x3d, 0xe5, - 0x2e, 0x79, 0xc1, 0x65, 0x37, 0x32, 0xd5, 0xe0, 0xb1, 0xf8, 0x3c, 0x10, 0x78, 0xb7, 0x7c, 0x94, - 0x59, 0xf1, 0xdb, 0x75, 0x12, 0x1a, 0x72, 0x29, 0xed, 0x59, 0x79, 0x3b, 0xbd, 0x46, 0x37, 0x40, - 0xa4, 0x04, 0xcf, 0x10, 0xc8, 0xf0, 0x2d, 0x73, 0xe0, 0xbe, 0x26, 0xe2, 0x97, 0x60, 0x98, 0x11, - 0x15, 0xbf, 0x72, 0x81, 0x56, 0x61, 0x2e, 0x38, 0xf2, 0x84, 0x53, 0xcb, 0x80, 0x2d, 0x04, 0x47, - 0xcf, 0xb8, 0x5b, 0x3f, 0x82, 0x65, 0x96, 0xe2, 0x98, 0x66, 0x0a, 0x00, 0x65, 0xb8, 0xdd, 0xb1, - 0x8b, 0x42, 0xec, 0x72, 0x43, 0xd5, 0x16, 0x5e, 0x04, 0xdc, 0x5a, 0x86, 0xf4, 0x50, 0x53, 0xa2, - 0x26, 0x94, 0x39, 0x89, 0xd7, 0xed, 0x04, 0x98, 0x91, 0xc0, 0x86, 0x09, 0x9c, 0x25, 0xfe, 0xf9, - 0x23, 0x49, 0x80, 0x6c, 0x98, 0x6b, 0x13, 0x4a, 0x71, 0x8b, 0xd8, 0x25, 0x21, 0x8c, 0x5e, 0xa2, - 0x7d, 0x28, 0xf1, 0x04, 0x28, 0xdc, 0x95, 0x50, 0xbb, 0x2c, 0x9c, 0xb5, 0xf9, 0x8a, 0x40, 0x91, - 0xd6, 0x6c, 0xf0, 0x24, 0xc9, 0x3f, 0x89, 0x0b, 0xbe, 0xfe, 0xa4, 0xf5, 0x07, 0x50, 0x34, 0x08, - 0xae, 0x9b, 0x6c, 0x61, 0x91, 0x0b, 0xae, 0x9b, 0x08, 0x53, 0xe6, 0x75, 0x4e, 0x94, 0xe1, 0x0b, - 0x7c, 0xb9, 0x7f, 0x52, 0xff, 0x97, 0x05, 0x2b, 0x93, 0xdd, 0x14, 0xb5, 0xe0, 0x6a, 0x27, 0x0d, - 0xdb, 0x38, 0xed, 0x0f, 0x45, 0xa3, 0x09, 0x33, 0x4b, 0x48, 0x7e, 0xf3, 0x42, 0x92, 0xbb, 0x75, - 0xb5, 0xd5, 0x18, 0x86, 0x50, 0xb4, 0xcb, 0xcb, 0x88, 0xc8, 0xca, 0x7e, 0x12, 0xb3, 0x34, 0x89, - 0xa4, 0x6b, 0x97, 0x36, 0xaf, 0x8d, 0x24, 0x32, 0xe5, 0x8c, 0x5b, 0x92, 0xca, 0x95, 0xb5, 0x42, - 0x2f, 0x29, 0x7a, 0x1f, 0x50, 0x48, 0x3d, 0x2d, 0x33, 0x25, 0x69, 0x2f, 0x8c, 0x5b, 0xc2, 0xa3, - 0xe7, 0xdd, 0xc5, 0x90, 0xee, 0x4b, 0xc4, 0x81, 0x84, 0x3b, 0x5f, 0x59, 0xb0, 0xba, 0xf5, 0x02, - 0xc7, 0x2d, 0x72, 0x68, 0xd2, 0xbf, 0xee, 0x20, 0xee, 0x9b, 0x3a, 0x81, 0xb9, 0xe3, 0xab, 0x72, - 0x7f, 0x4e, 0x54, 0xa8, 0xf2, 0x21, 0x16, 0xe8, 0xb6, 0x70, 0x42, 0x5e, 0x5d, 0x84, 0xa2, 0xab, - 0x9b, 0xb5, 0x51, 0x26, 0x71, 0x4e, 0x21, 0x38, 0xe2, 0xbf, 0xc2, 0x67, 0xb9, 0x7e, 0xbb, 0xb1, - 0x92, 0xb3, 0x10, 0xa4, 0x7d, 0xb7, 0x1b, 0x3b, 0xbf, 0xb7, 0xc0, 0x1e, 0x97, 0x4e, 0xb5, 0x21, - 0xdf, 0x81, 0xca, 0x11, 0x39, 0x4e, 0x52, 0xe2, 0xa9, 0xa8, 0x95, 0xf2, 0x2d, 0x8e, 0x1e, 0xe5, - 0x96, 0x25, 0x99, 0x5c, 0xa1, 0x0f, 0xa0, 0x2c, 0x0b, 0xb0, 0xe2, 0xca, 0x9d, 0xc3, 0x55, 0x12, - 0x54, 0x8a, 0x69, 0x0d, 0x4a, 0xa7, 0x98, 0x7a, 0xc3, 0x52, 0x16, 0x4f, 0x31, 0xdd, 0x96, 0x82, - 0x7e, 0x3d, 0x03, 0xcb, 0x5b, 0xa2, 0xdd, 0x30, 0x15, 0x6d, 0xd0, 0x86, 0x8d, 0x55, 0x98, 0x1a, - 0xcc, 0x1e, 0x27, 0xba, 0xc0, 0xcc, 0xbb, 0x72, 0x81, 0x9a, 0x50, 0xc3, 0x51, 0x94, 0x9c, 0x7a, - 0xa4, 0xdd, 0x61, 0x7d, 0xaf, 0xe7, 0xc9, 0xd6, 0x4f, 0x1d, 0x76, 0x45, 0xe0, 0x76, 0x38, 0xea, - 0xf9, 0x81, 0x40, 0xa0, 0x3b, 0x50, 0x13, 0x89, 0x2b, 0x8c, 0x5b, 0x9e, 0x9f, 0x44, 0xdd, 0x76, - 0x2c, 0xe3, 0x3e, 0x2f, 0x8e, 0x42, 0x1a, 0xb7, 0x25, 0x50, 0x22, 0x07, 0x7c, 0x3c, 0xce, 0x21, - 0x8c, 0x34, 0x2b, 0x8c, 0x64, 0x8f, 0xd7, 0xe5, 0xbd, 0x40, 0xa8, 0x7c, 0x64, 0x2f, 0x61, 0xb4, - 0x87, 0x50, 0xe6, 0xce, 0x45, 0x02, 0xef, 0x38, 0x4d, 0xda, 0xd4, 0x2e, 0x8c, 0x3a, 0xab, 0xde, - 0xa3, 0x71, 0x20, 0xc8, 0x76, 0xd3, 0xa4, 0xed, 0x96, 0xa8, 0xf9, 0xa6, 0xe8, 0x16, 0xe4, 0xc5, - 0xe9, 0x73, 0xe2, 0xf4, 0x95, 0x71, 0x4e, 0x71, 0xb6, 0xa0, 0xe1, 0x19, 0xf1, 0x08, 0xd3, 0x4c, - 0x2f, 0x26, 0x93, 0x5b, 0x99, 0x03, 0x4d, 0xfb, 0x71, 0x17, 0x2a, 0x34, 0xc6, 0x1d, 0xfa, 0x22, - 0x61, 0x22, 0xbf, 0x4d, 0x4c, 0x6d, 0x65, 0x4d, 0xc2, 0x57, 0xce, 0x1e, 0xac, 0x8c, 0xda, 0x4d, - 0xb9, 0x57, 0x73, 0xa4, 0xfa, 0x94, 0x36, 0x97, 0x32, 0x41, 0x3e, 0xa1, 0x71, 0xf9, 0xb5, 0x05, - 0x48, 0xee, 0xa5, 0x52, 0x89, 0x74, 0x80, 0x69, 0x55, 0xec, 0x1a, 0x80, 0xac, 0xda, 0x99, 0x66, - 0xa6, 0x28, 0x20, 0xcf, 0x86, 0xfc, 0x64, 0x26, 0xeb, 0x27, 0x37, 0xa1, 0x1a, 0xc6, 0x7e, 0xd4, - 0x0d, 0x88, 0xd7, 0xc1, 0x29, 0xef, 0xc3, 0x55, 0x17, 0xa9, 0xa0, 0xfb, 0x02, 0xe8, 0xfc, 0xce, - 0x82, 0xa5, 0x21, 0x71, 0x2e, 0x79, 0x2f, 0xb4, 0x9e, 0x2d, 0x96, 0x3c, 0x52, 0x06, 0xd4, 0xd9, - 0xc6, 0xca, 0xb8, 0xa3, 0x87, 0xa3, 0x94, 0xe0, 0xa0, 0xef, 0x91, 0xb3, 0x90, 0x32, 0xaa, 0x84, - 0x97, 0x2e, 0xf4, 0x48, 0xa2, 0x76, 0x04, 0xc6, 0xf9, 0x21, 0x2c, 0x6f, 0x93, 0x88, 0x8c, 0x07, - 0xcd, 0x34, 0x9d, 0x5d, 0x85, 0x62, 0x4a, 0xfc, 0x6e, 0x4a, 0xc3, 0x9e, 0x0e, 0xa0, 0x01, 0xc0, - 0xb1, 0x61, 0x65, 0x74, 0x4b, 0x79, 0x6f, 0xe7, 0x97, 0x16, 0x2c, 0x49, 0x94, 0x90, 0x9a, 0xea, - 0xb3, 0x36, 0x4c, 0x27, 0x21, 0x53, 0xf9, 0xf8, 0xfd, 0x14, 0x7e, 0xfa, 0xc9, 0xbc, 0xbb, 0xe7, - 0x83, 0x8f, 0x17, 0x1e, 0x9b, 0xa4, 0xab, 0xec, 0xc2, 0xc1, 0x7b, 0xc7, 0x3a, 0xe3, 0xae, 0x40, - 0x6d, 0x58, 0x0c, 0x25, 0x5f, 0x5f, 0xc3, 0x65, 0xca, 0x31, 0xf2, 0x7d, 0xa8, 0xa6, 0x01, 0x95, - 0x85, 0x4d, 0xc9, 0x39, 0x27, 0x0f, 0x57, 0x32, 0x79, 0x98, 0x50, 0x1e, 0x37, 0x32, 0xa9, 0xa8, - 0x82, 0xa0, 0xe4, 0x2e, 0x0b, 0xa0, 0xaa, 0x05, 0xce, 0xaa, 0xb6, 0x83, 0x39, 0x5a, 0xc9, 0xf4, - 0x9b, 0x1c, 0x5c, 0xdb, 0x69, 0x93, 0xb4, 0x45, 0x62, 0x9f, 0x17, 0x2d, 0xe1, 0x59, 0x17, 0xf6, - 0xee, 0xc9, 0x5d, 0xd6, 0x3d, 0x28, 0xc5, 0x64, 0x20, 0xcf, 0xd4, 0x56, 0x0b, 0x62, 0xa2, 0x85, - 0x44, 0xdf, 0x83, 0x85, 0xb0, 0x15, 0xf3, 0x74, 0xaf, 0xea, 0x30, 0xb5, 0xf3, 0xd3, 0x14, 0x51, - 0x95, 0xd4, 0xaa, 0xd4, 0x52, 0xb4, 0x0d, 0xcb, 0xa7, 0x38, 0x64, 0x86, 0xdb, 0x8c, 0xc0, 0xb3, - 0xc6, 0xad, 0x45, 0x92, 0xd8, 0xee, 0xa6, 0xb2, 0x1b, 0x5f, 0xe2, 0xe4, 0x9a, 0x5d, 0x8f, 0xc6, - 0x7f, 0xb2, 0x60, 0xed, 0x3c, 0x8d, 0xa8, 0x00, 0x7b, 0x7d, 0x95, 0x3c, 0x84, 0xc5, 0x4e, 0x9a, - 0xb4, 0x13, 0x46, 0x82, 0x8b, 0xe9, 0x65, 0x41, 0x93, 0x6b, 0xe5, 0xac, 0x43, 0x41, 0x4c, 0xdd, - 0x5a, 0x27, 0xa3, 0x33, 0xb9, 0xc2, 0x3a, 0x1f, 0xc2, 0xda, 0x6e, 0x18, 0x07, 0x8f, 0xa2, 0x48, - 0x7a, 0xdf, 0x5e, 0xfc, 0x1a, 0xa1, 0xe7, 0xfc, 0xd9, 0x82, 0x77, 0xce, 0x65, 0x57, 0xb7, 0x7f, - 0x36, 0x12, 0x4e, 0xf7, 0x32, 0xe1, 0xf4, 0x0a, 0x5e, 0x19, 0x6e, 0x6a, 0x20, 0xd1, 0x0d, 0xfd, - 0x27, 0x50, 0xca, 0x80, 0x27, 0x8c, 0x20, 0xeb, 0xc3, 0x23, 0xc8, 0x84, 0xf4, 0x64, 0x06, 0x0d, - 0x67, 0x07, 0xae, 0x3c, 0x21, 0xec, 0x31, 0xf6, 0x4f, 0xba, 0x1d, 0x7a, 0x69, 0x17, 0x76, 0xb6, - 0x01, 0x65, 0xb7, 0x51, 0x37, 0x6f, 0xc0, 0xdc, 0x91, 0x04, 0xa9, 0xab, 0xd7, 0x1a, 0xe6, 0xd9, - 0x47, 0xd2, 0xee, 0xc5, 0xc7, 0x89, 0xab, 0x89, 0x9c, 0xb7, 0x60, 0xf5, 0x09, 0x61, 0x5b, 0x24, - 0x8a, 0x38, 0x9c, 0x27, 0x7c, 0x2d, 0x92, 0x73, 0x07, 0xec, 0x71, 0x94, 0x3a, 0xa6, 0x06, 0xb3, - 0xbc, 0x5a, 0xe8, 0x87, 0x1d, 0xb9, 0x70, 0x36, 0x84, 0x48, 0x9a, 0x23, 0xd3, 0x7c, 0x88, 0xe9, - 0xdf, 0x1a, 0x4c, 0xff, 0xce, 0x2e, 0x2c, 0x0d, 0x51, 0x9a, 0xb2, 0x50, 0xe4, 0x68, 0x2f, 0x8c, - 0x8f, 0x13, 0x55, 0x17, 0x32, 0x73, 0xba, 0x21, 0x9f, 0xf7, 0xd5, 0x17, 0xcf, 0xb4, 0x6a, 0x1f, - 0xaa, 0x92, 0x8d, 0x96, 0xfe, 0x6b, 0xcb, 0xdc, 0x6c, 0x80, 0x52, 0xc7, 0xec, 0xc1, 0xdc, 0x70, - 0x1a, 0xcb, 0xf6, 0xfc, 0xe7, 0x30, 0x35, 0xd4, 0x5a, 0x3a, 0x86, 0xe6, 0xaf, 0xef, 0x43, 0x39, - 0x8b, 0x98, 0xe0, 0x1a, 0xb7, 0x86, 0x5d, 0xa3, 0x36, 0x7c, 0x1f, 0x79, 0x4c, 0xd6, 0x3d, 0x96, - 0x85, 0x6a, 0xb4, 0x5b, 0x9a, 0xfb, 0xec, 0x41, 0x6d, 0x18, 0xac, 0xee, 0x72, 0x17, 0x8a, 0xda, - 0x51, 0xf4, 0x6d, 0x26, 0x96, 0xd2, 0x01, 0x95, 0x73, 0x47, 0x98, 0xe9, 0x75, 0x62, 0x6e, 0x77, - 0x48, 0xa6, 0xcb, 0x77, 0x27, 0xbf, 0xc8, 0xc1, 0xe2, 0x13, 0xc2, 0x64, 0xeb, 0xf8, 0xcd, 0x3b, - 0xfc, 0x15, 0x35, 0x2b, 0x9b, 0xf9, 0x5b, 0xae, 0x78, 0x73, 0x42, 0xce, 0x64, 0x73, 0xa2, 0xf0, - 0x33, 0x02, 0x5f, 0x51, 0xd0, 0x43, 0x49, 0x76, 0x03, 0x74, 0xb7, 0xe2, 0xf5, 0x42, 0x72, 0x4a, - 0x55, 0xa9, 0x2c, 0x2b, 0xe0, 0x73, 0x0e, 0x43, 0x1b, 0xb0, 0x28, 0xdf, 0xc1, 0x84, 0x8b, 0x7b, - 0x49, 0x1c, 0xf5, 0x45, 0xb2, 0x9e, 0x57, 0x33, 0x8f, 0x88, 0x8b, 0x1f, 0xc4, 0x51, 0x7f, 0x40, - 0x49, 0xc3, 0x2f, 0x34, 0x65, 0x21, 0x43, 0x79, 0xc0, 0xc1, 0x9c, 0xd2, 0xd9, 0x17, 0x19, 0x40, - 0x6b, 0x41, 0x29, 0xf3, 0xbb, 0x50, 0x50, 0xbd, 0xb6, 0x54, 0xc0, 0x8d, 0xc6, 0xf8, 0xfb, 0xac, - 0x64, 0xd9, 0x26, 0xc7, 0x61, 0x1c, 0xaa, 0xd7, 0x1e, 0x01, 0x71, 0x9e, 0xc2, 0x02, 0xdf, 0xf1, - 0xcd, 0xb4, 0x7c, 0xce, 0x03, 0x69, 0xa5, 0xa1, 0x82, 0x62, 0x1a, 0x30, 0x6b, 0x6a, 0x03, 0xe6, - 0xdc, 0x12, 0x7e, 0x7a, 0x90, 0xf6, 0x9e, 0x0f, 0x5b, 0x79, 0x52, 0x16, 0x78, 0x06, 0xcb, 0x23, - 0xb4, 0x66, 0xaa, 0x2a, 0xd3, 0xb4, 0x37, 0x98, 0x3e, 0x8c, 0x73, 0xa9, 0x87, 0xe8, 0x0c, 0x0b, - 0x50, 0xf3, 0xed, 0x3c, 0x15, 0x72, 0xab, 0xd1, 0xe9, 0x9b, 0x7a, 0x97, 0xf3, 0x91, 0xb0, 0x92, - 0xde, 0x4d, 0x49, 0xb6, 0x61, 0x9e, 0x67, 0xce, 0x1b, 0xf4, 0x14, 0xde, 0xf9, 0x49, 0x86, 0xfd, - 0xf2, 0x69, 0x9e, 0x43, 0xb9, 0xae, 0xb4, 0x0b, 0xcb, 0x85, 0xf3, 0x50, 0x84, 0xf0, 0x48, 0xa7, - 0x84, 0x6e, 0xc1, 0x9c, 0x3c, 0x7c, 0xd0, 0x46, 0x8e, 0x4a, 0xa7, 0x09, 0x9c, 0xa6, 0x10, 0x6f, - 0xc4, 0x48, 0xd3, 0x72, 0xc0, 0x63, 0x71, 0xe4, 0xa8, 0xa5, 0xde, 0x87, 0xf9, 0x11, 0x2b, 0x5d, - 0x31, 0x56, 0x32, 0x09, 0x60, 0xae, 0xa7, 0x0c, 0xe4, 0x8a, 0x3c, 0xa2, 0xdf, 0x26, 0x2e, 0xa4, - 0x95, 0x77, 0xa0, 0x84, 0x7d, 0x16, 0xf6, 0x88, 0x0c, 0x28, 0xd9, 0x39, 0x82, 0x04, 0x89, 0x60, - 0x92, 0x89, 0x31, 0xb3, 0xe7, 0x20, 0x31, 0xea, 0x67, 0xf4, 0x49, 0x89, 0x51, 0x33, 0xb8, 0x03, - 0x2a, 0xe7, 0xdf, 0x16, 0xac, 0xee, 0xc5, 0xa1, 0xf4, 0xfc, 0x7d, 0xfd, 0x4a, 0x72, 0x59, 0xcb, - 0xb9, 0xa0, 0x5f, 0x5a, 0x3c, 0x12, 0x11, 0x5f, 0xfd, 0xcb, 0xa0, 0xfd, 0x70, 0x6a, 0x6b, 0xb5, - 0xaa, 0x18, 0x77, 0x38, 0x5f, 0x06, 0x31, 0x18, 0xc6, 0xf2, 0xd9, 0x61, 0xec, 0xcd, 0x74, 0x95, - 0x8f, 0xc1, 0x1e, 0xbf, 0xbc, 0x89, 0x7e, 0xdd, 0xda, 0x59, 0x53, 0x5b, 0xbb, 0x2f, 0x73, 0xf0, - 0xf6, 0x7e, 0x84, 0xe3, 0x98, 0x04, 0xff, 0xe5, 0x4e, 0xfd, 0x01, 0x54, 0x70, 0x2f, 0x09, 0x07, - 0xbd, 0x6c, 0x7e, 0x1a, 0x67, 0x59, 0xd0, 0x6a, 0xde, 0x37, 0xa3, 0xcf, 0x3f, 0x5a, 0x70, 0x75, - 0xb2, 0x2e, 0xfe, 0x07, 0x7a, 0xf4, 0x9f, 0xc3, 0x5b, 0x2e, 0x69, 0x27, 0x3d, 0x33, 0xc2, 0xf2, - 0x66, 0xe5, 0x22, 0x56, 0xd4, 0x79, 0x3e, 0x97, 0xf9, 0xaf, 0x67, 0xf2, 0x13, 0xc2, 0xd0, 0x24, - 0x9b, 0x1f, 0x9d, 0xa1, 0xaf, 0x42, 0x7d, 0x92, 0x00, 0x6a, 0x26, 0xfc, 0xca, 0x82, 0x15, 0x89, - 0x16, 0x2a, 0xbd, 0xa8, 0x70, 0xaf, 0x78, 0xea, 0xd0, 0xb2, 0xcf, 0x4c, 0x92, 0x3d, 0x7f, 0xae, - 0xec, 0xb3, 0xa3, 0xb2, 0xbf, 0x05, 0xab, 0x63, 0xc2, 0x29, 0xc1, 0x77, 0x61, 0x59, 0x3b, 0xc3, - 0x70, 0x9d, 0xba, 0x3d, 0x52, 0x58, 0xa6, 0xbf, 0xfb, 0x3b, 0x3f, 0xe3, 0xf7, 0x1f, 0xde, 0xe7, - 0xd2, 0x5e, 0xd5, 0x84, 0xb9, 0x0b, 0x39, 0x93, 0xa6, 0x72, 0x5c, 0x78, 0x57, 0xc2, 0x77, 0xd4, - 0xdf, 0x70, 0x91, 0x99, 0x42, 0x49, 0x70, 0xc9, 0x0b, 0xfd, 0xc5, 0x02, 0x67, 0xda, 0xa6, 0x97, - 0xbe, 0xdd, 0x65, 0x13, 0xc8, 0x3d, 0x28, 0x25, 0xd1, 0x05, 0xd3, 0x07, 0x24, 0x91, 0x8e, 0xb0, - 0xc7, 0xf7, 0xff, 0xfa, 0x72, 0xcd, 0xfa, 0xdb, 0xcb, 0x35, 0xeb, 0x1f, 0x2f, 0xd7, 0xac, 0xdf, - 0xfe, 0x73, 0xed, 0xff, 0x7e, 0xbc, 0xde, 0x0b, 0x19, 0xa1, 0xb4, 0x11, 0x26, 0x4d, 0xf9, 0xd5, - 0x6c, 0x25, 0xcd, 0x1e, 0x6b, 0x8a, 0x3f, 0xd0, 0x9b, 0xa6, 0x24, 0x1d, 0x15, 0x04, 0xe0, 0x83, - 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x01, 0x47, 0x0b, 0xd4, 0xe6, 0x1f, 0x00, 0x00, + // 2528 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x19, 0x4d, 0x6f, 0x1b, 0xc7, + 0xb5, 0x4b, 0x91, 0x14, 0xf9, 0xf8, 0x21, 0x79, 0x44, 0x49, 0x1b, 0x26, 0x56, 0x9c, 0x75, 0xec, + 0xa8, 0x6e, 0x4c, 0xda, 0x4a, 0x63, 0x18, 0x6e, 0xd2, 0xda, 0x96, 0x28, 0x43, 0x8e, 0xeb, 0xaa, + 0x2b, 0xd5, 0x01, 0x5a, 0xa0, 0xdb, 0xd1, 0xee, 0x88, 0x5e, 0x68, 0xb9, 0xcb, 0xec, 0x0c, 0x29, + 0x31, 0x3d, 0xf4, 0xd2, 0x1e, 0x02, 0x14, 0xe8, 0xb5, 0x40, 0x50, 0xa0, 0xa7, 0xa2, 0xbf, 0x20, + 0x40, 0x8b, 0xa2, 0xc7, 0xa2, 0xc7, 0x5e, 0x7b, 0x2b, 0xdc, 0x9f, 0xd1, 0x4b, 0x31, 0x5f, 0xcb, + 0xe5, 0xa7, 0x65, 0xc5, 0x40, 0xd1, 0x13, 0x77, 0xde, 0xbc, 0x37, 0xef, 0xcd, 0xfb, 0x7e, 0x43, + 0x58, 0xea, 0x33, 0x97, 0x05, 0x1e, 0x66, 0xb8, 0xd1, 0x8d, 0x23, 0x16, 0xa1, 0x62, 0x02, 0xa8, + 0x2f, 0x1f, 0xf9, 0x61, 0x10, 0xb5, 0x87, 0x9b, 0xf5, 0x4a, 0x10, 0xb5, 0x7b, 0xcc, 0x0f, 0xd4, + 0xb2, 0xda, 0x19, 0xd0, 0xcf, 0x02, 0x97, 0xe9, 0xf5, 0x3a, 0xc3, 0x47, 0x01, 0x61, 0x1d, 0x1c, + 0xe2, 0x36, 0x89, 0x53, 0x74, 0x55, 0x16, 0x75, 0xa3, 0xf4, 0x39, 0x7d, 0xea, 0x3e, 0x27, 0x1d, + 0xbd, 0x2c, 0xf7, 0x19, 0xf3, 0x3b, 0x44, 0xae, 0xac, 0x4f, 0xa1, 0xde, 0x3a, 0x23, 0x6e, 0x8f, + 0x91, 0x67, 0x5c, 0x94, 0xed, 0xa8, 0xd3, 0xc1, 0xa1, 0x67, 0x93, 0xcf, 0x7a, 0x84, 0x32, 0x84, + 0x20, 0x8b, 0xe3, 0x36, 0x35, 0x8d, 0x2b, 0x0b, 0x9b, 0x45, 0x5b, 0x7c, 0xa3, 0x6b, 0x50, 0xc5, + 0x2e, 0xf3, 0xa3, 0xd0, 0xe1, 0xc7, 0x44, 0x3d, 0x66, 0x66, 0xae, 0x18, 0x9b, 0x0b, 0x76, 0x45, + 0x42, 0x0f, 0x25, 0xd0, 0xda, 0x86, 0x37, 0xa7, 0x1e, 0x4c, 0xbb, 0x51, 0x48, 0x09, 0x7a, 0x17, + 0x72, 0xa4, 0x4f, 0x42, 0x66, 0x1a, 0x57, 0x8c, 0xcd, 0xd2, 0x56, 0xb5, 0xa1, 0x2f, 0xdb, 0xe2, + 0x50, 0x5b, 0x6e, 0x5a, 0x5f, 0x18, 0x60, 0x1e, 0xf2, 0x6b, 0x7e, 0x1f, 0x33, 0x12, 0xfb, 0x38, + 0xf0, 0x3f, 0x27, 0x07, 0x84, 0x31, 0x3f, 0x6c, 0x53, 0xf4, 0x0e, 0x94, 0x19, 0x8e, 0xdb, 0x84, + 0x39, 0x42, 0x13, 0xe2, 0xa4, 0xa2, 0x5d, 0x92, 0x30, 0x41, 0x85, 0xbe, 0x05, 0x97, 0x68, 0xd4, + 0x8b, 0x5d, 0xe2, 0x90, 0xb3, 0x6e, 0x4c, 0x28, 0xf5, 0xa3, 0x50, 0x88, 0x5b, 0xb4, 0x97, 0xe5, + 0x46, 0x2b, 0x81, 0xa3, 0xcb, 0x00, 0x6e, 0x4c, 0x30, 0x23, 0x8e, 0xe7, 0x05, 0xe6, 0x82, 0xc0, + 0x2a, 0x4a, 0xc8, 0x8e, 0x17, 0x58, 0xff, 0xcc, 0xc0, 0xca, 0x34, 0x31, 0xea, 0x50, 0x38, 0x8d, + 0xe2, 0x93, 0xe3, 0x20, 0x3a, 0x55, 0x22, 0x24, 0x6b, 0xf4, 0x1e, 0x2c, 0x29, 0xfe, 0x27, 0x64, + 0x40, 0xbb, 0xd8, 0x25, 0x8a, 0x7b, 0x55, 0x82, 0x3f, 0x51, 0x50, 0x8e, 0xa8, 0xee, 0x92, 0x20, + 0x4a, 0x01, 0xaa, 0x12, 0x9c, 0x20, 0x5e, 0x87, 0x25, 0xca, 0xa2, 0xae, 0x83, 0x8f, 0x19, 0x89, + 0x1d, 0x37, 0xea, 0x0e, 0xcc, 0xec, 0x15, 0x63, 0xb3, 0x60, 0x57, 0x38, 0xf8, 0x01, 0x87, 0x6e, + 0x47, 0xdd, 0x01, 0x7a, 0x0c, 0x55, 0xa1, 0x15, 0x87, 0x2a, 0x39, 0xcd, 0xdc, 0x95, 0x85, 0xcd, + 0xd2, 0xd6, 0xd5, 0xc6, 0xd0, 0x07, 0x67, 0x69, 0xd6, 0xae, 0x08, 0xd2, 0xe4, 0x86, 0x08, 0xb2, + 0x2e, 0x09, 0x02, 0x33, 0x2f, 0x24, 0x12, 0xdf, 0x52, 0xf9, 0xdc, 0xff, 0x1c, 0x36, 0xe8, 0x12, + 0x6a, 0x2e, 0x6a, 0xe5, 0x73, 0xd8, 0x21, 0x07, 0xa1, 0x6f, 0xc2, 0x32, 0x39, 0x63, 0x24, 0x0e, + 0x71, 0xe0, 0xb8, 0x41, 0x8f, 0x32, 0x12, 0x9b, 0x05, 0x81, 0xb6, 0xa4, 0xe1, 0xdb, 0x12, 0x6c, + 0x3d, 0x85, 0x42, 0x72, 0x43, 0x04, 0xd9, 0x10, 0x77, 0xb4, 0x39, 0xc5, 0x37, 0x6a, 0x40, 0x61, + 0x44, 0x81, 0xa5, 0x2d, 0xd4, 0x48, 0xbc, 0x5c, 0x53, 0xda, 0x09, 0x8e, 0xf5, 0x53, 0xc8, 0x1d, + 0x3c, 0xc7, 0xb1, 0xc7, 0x8d, 0x93, 0x10, 0x2a, 0xe3, 0x9c, 0x8c, 0x33, 0xca, 0xa4, 0x18, 0x5d, + 0x83, 0x1c, 0xe5, 0x84, 0x42, 0xfb, 0xa5, 0xad, 0xa5, 0x21, 0x17, 0x71, 0x9e, 0x2d, 0x77, 0xad, + 0x3f, 0x16, 0xa1, 0xf0, 0xa9, 0x36, 0xf2, 0x34, 0x81, 0xbf, 0x07, 0x79, 0x69, 0x61, 0x25, 0xee, + 0x7b, 0x29, 0xb5, 0x6b, 0xc2, 0x86, 0x4d, 0xba, 0x81, 0xef, 0x62, 0x1e, 0x35, 0x4f, 0x22, 0xf9, + 0x6b, 0x2b, 0x32, 0x7e, 0x80, 0xb4, 0xbc, 0x92, 0xe4, 0xfc, 0x07, 0x48, 0x32, 0x74, 0x1b, 0x56, + 0x3b, 0xf8, 0xcc, 0xe9, 0x3b, 0xf1, 0x10, 0xc9, 0x09, 0x70, 0x5b, 0xb8, 0xcb, 0x82, 0x8d, 0x3a, + 0xf8, 0xec, 0x59, 0x9a, 0x1e, 0xb7, 0xd1, 0x63, 0xa8, 0x88, 0xeb, 0x39, 0x94, 0xc5, 0x04, 0x77, + 0xb4, 0xcb, 0x5c, 0x9b, 0xc6, 0x5a, 0xa8, 0xe3, 0x40, 0xe2, 0xb5, 0x42, 0x16, 0x0f, 0xec, 0x32, + 0x4d, 0x81, 0xea, 0x3f, 0x83, 0x4b, 0x13, 0x28, 0x68, 0x19, 0x16, 0x4e, 0xc8, 0x40, 0x29, 0x8a, + 0x7f, 0xa2, 0x0f, 0x21, 0xd7, 0xc7, 0x41, 0x4f, 0xab, 0xe9, 0xed, 0x97, 0xb0, 0xb2, 0x25, 0xf6, + 0xbd, 0xcc, 0x5d, 0xa3, 0xbe, 0x07, 0x2b, 0x53, 0xee, 0x3f, 0xd7, 0xe2, 0x6b, 0x90, 0x17, 0x42, + 0x52, 0x33, 0x23, 0x12, 0x9a, 0x5a, 0xd5, 0xff, 0x64, 0x40, 0x29, 0xc5, 0x05, 0x7d, 0x1b, 0x16, + 0xb5, 0x0a, 0x0c, 0xa1, 0x82, 0xfa, 0x54, 0xb9, 0xa4, 0x48, 0x1a, 0x15, 0xed, 0xf2, 0x18, 0x16, + 0x21, 0xe1, 0x46, 0x21, 0x8b, 0xa3, 0x40, 0xb2, 0x29, 0x6d, 0x5d, 0x1e, 0xf3, 0x22, 0x19, 0x78, + 0x6c, 0x5b, 0x62, 0xd9, 0x32, 0x50, 0xf5, 0x92, 0xa2, 0xf7, 0x01, 0xf9, 0xd4, 0xe9, 0xc6, 0x7e, + 0x07, 0xc7, 0x03, 0x87, 0x92, 0xb8, 0xef, 0x87, 0x6d, 0xe1, 0x06, 0x05, 0x7b, 0xd9, 0xa7, 0xfb, + 0x72, 0xe3, 0x40, 0xc2, 0xeb, 0xbf, 0xcb, 0x42, 0x5e, 0x89, 0x5d, 0x85, 0x8c, 0xef, 0x89, 0x4b, + 0x2f, 0xd8, 0x19, 0xdf, 0x43, 0x35, 0xed, 0xcc, 0xd2, 0xc3, 0xe5, 0x02, 0xdd, 0xe4, 0x9e, 0xc5, + 0x19, 0x2a, 0xcf, 0x5a, 0x1d, 0x4a, 0x27, 0xe5, 0x7a, 0x10, 0xf8, 0x98, 0xda, 0x0a, 0x09, 0x7d, + 0x0c, 0x15, 0x59, 0x99, 0x1c, 0xe5, 0xd0, 0x59, 0x41, 0x65, 0x36, 0x52, 0xf5, 0xea, 0xa1, 0xf8, + 0x3c, 0x10, 0xfb, 0x76, 0xf9, 0x28, 0xb5, 0xe2, 0xe6, 0xe8, 0x46, 0xd4, 0xe7, 0xa6, 0x31, 0x73, + 0xd2, 0x1c, 0x7a, 0x8d, 0xae, 0x82, 0x48, 0x5a, 0x4e, 0x82, 0x20, 0x13, 0x4c, 0x99, 0x03, 0xf7, + 0x35, 0x12, 0xbf, 0x04, 0xc3, 0x8c, 0xa8, 0x0c, 0x23, 0x17, 0x68, 0x1d, 0x16, 0xbd, 0x23, 0x47, + 0x84, 0x9d, 0x4c, 0x29, 0x79, 0xef, 0xe8, 0x29, 0x0f, 0xbc, 0x07, 0xb0, 0xca, 0x62, 0x1c, 0xd2, + 0x54, 0x89, 0xa2, 0x0c, 0x77, 0xba, 0x66, 0x51, 0x88, 0x5d, 0x6e, 0xa8, 0xea, 0xc7, 0xcb, 0x94, + 0x5d, 0x4b, 0xa1, 0x1e, 0x6a, 0x4c, 0xd4, 0x84, 0x32, 0x47, 0x71, 0x7a, 0x5d, 0x0f, 0x33, 0xe2, + 0x99, 0x30, 0x85, 0xb2, 0xc4, 0x3f, 0x7f, 0x24, 0x11, 0x90, 0x09, 0x8b, 0x1d, 0x42, 0x29, 0x6e, + 0x13, 0xb3, 0x24, 0x84, 0xd1, 0x4b, 0xd4, 0x82, 0x12, 0x4f, 0xd1, 0x8e, 0x10, 0x9a, 0x9a, 0x65, + 0xe1, 0x0e, 0xef, 0xce, 0x76, 0xa6, 0x06, 0xcf, 0xdd, 0x07, 0x1c, 0xd9, 0x06, 0x57, 0x7f, 0xd2, + 0xfa, 0x3d, 0x28, 0x26, 0x1b, 0x5c, 0x21, 0xe9, 0x7a, 0x27, 0x17, 0x5c, 0x21, 0x01, 0xa6, 0xcc, + 0xe9, 0x9e, 0x28, 0x6b, 0xe7, 0xf9, 0x72, 0xff, 0xc4, 0xfa, 0xd2, 0x80, 0xf5, 0xed, 0xe7, 0x38, + 0x6c, 0x93, 0xc3, 0x24, 0x37, 0xeb, 0xf2, 0x7e, 0x37, 0x49, 0xe2, 0x98, 0xdb, 0x5c, 0xd5, 0xe2, + 0x19, 0x0e, 0xa1, 0x72, 0xbb, 0x58, 0xa0, 0x9b, 0x42, 0xff, 0x3c, 0xf5, 0x0b, 0x76, 0xd5, 0xad, + 0xda, 0x38, 0x91, 0xe0, 0x93, 0xf7, 0x8e, 0xf8, 0xaf, 0x30, 0x57, 0x3c, 0x70, 0xe2, 0x5e, 0xa8, + 0xfc, 0x38, 0xef, 0xc5, 0x03, 0xbb, 0x17, 0x5a, 0x7f, 0x30, 0xc0, 0x9c, 0x94, 0x4e, 0xf5, 0x08, + 0x1f, 0x42, 0xe5, 0x88, 0x1c, 0x47, 0x31, 0x71, 0x94, 0xc3, 0x4a, 0xf9, 0x96, 0xc7, 0x59, 0xd9, + 0x65, 0x89, 0x26, 0x57, 0xe8, 0x03, 0x28, 0xcb, 0xea, 0xa8, 0xa8, 0x32, 0x33, 0xa8, 0x4a, 0x02, + 0x4b, 0x11, 0x6d, 0x40, 0xe9, 0x14, 0x53, 0x67, 0x54, 0xca, 0xe2, 0x29, 0xa6, 0x3b, 0x52, 0xd0, + 0xaf, 0x16, 0x60, 0x75, 0x5b, 0xf4, 0x02, 0x49, 0xb9, 0x19, 0xf6, 0x48, 0x13, 0xe9, 0xbf, 0x06, + 0xb9, 0xe3, 0x48, 0x67, 0xff, 0x82, 0x2d, 0x17, 0xa8, 0x09, 0x35, 0x1c, 0x04, 0xd1, 0xa9, 0x43, + 0x3a, 0x5d, 0x36, 0x70, 0xfa, 0x8e, 0xec, 0xcb, 0x14, 0xb3, 0x4b, 0x62, 0xaf, 0xc5, 0xb7, 0x9e, + 0x1d, 0x88, 0x0d, 0x74, 0x0b, 0x6a, 0x22, 0x66, 0xfd, 0xb0, 0xed, 0xb8, 0x51, 0xd0, 0xeb, 0x84, + 0xd2, 0xe5, 0xb3, 0x82, 0x15, 0xd2, 0x7b, 0xdb, 0x62, 0x4b, 0xb8, 0xff, 0xe3, 0x49, 0x0a, 0x61, + 0xa4, 0x9c, 0x30, 0x92, 0x39, 0x59, 0x34, 0xf7, 0x3c, 0xa1, 0xf2, 0xb1, 0xb3, 0x84, 0xd1, 0xee, + 0x43, 0x99, 0x27, 0x1f, 0xe2, 0x39, 0xc7, 0x71, 0xd4, 0xa1, 0x66, 0x7e, 0x3c, 0x99, 0xe9, 0x33, + 0x1a, 0x07, 0x02, 0x6d, 0x37, 0x8e, 0x3a, 0x76, 0x89, 0x26, 0xdf, 0x14, 0xdd, 0x80, 0xac, 0xe0, + 0xbe, 0x28, 0xb8, 0xaf, 0x4d, 0x52, 0x0a, 0xde, 0x02, 0x87, 0x27, 0x83, 0x23, 0x4c, 0x53, 0x8d, + 0x92, 0x8c, 0xeb, 0x32, 0x07, 0x26, 0xbd, 0xc1, 0x6d, 0xa8, 0xd0, 0x10, 0x77, 0xe9, 0xf3, 0x88, + 0x89, 0xd0, 0x9e, 0x1a, 0xd5, 0x65, 0x8d, 0xc2, 0x57, 0xd6, 0x1e, 0xac, 0x8d, 0xdb, 0x4d, 0xb9, + 0x57, 0x73, 0xac, 0x52, 0x94, 0xb6, 0x56, 0x52, 0x91, 0x39, 0xa5, 0xab, 0xf8, 0xb5, 0x01, 0x48, + 0x9e, 0x25, 0x9b, 0x01, 0xe5, 0x00, 0xf3, 0x2a, 0xce, 0x65, 0x00, 0x59, 0x52, 0x53, 0x9d, 0x46, + 0x51, 0x40, 0x9e, 0x8e, 0xf8, 0xc9, 0x42, 0xda, 0x4f, 0xae, 0x41, 0xd5, 0x0f, 0xdd, 0xa0, 0xe7, + 0x11, 0xa7, 0x8b, 0x63, 0xde, 0x24, 0xab, 0x16, 0x4f, 0x41, 0xf7, 0x05, 0xd0, 0xfa, 0xbd, 0x01, + 0x2b, 0x23, 0xe2, 0x5c, 0xf0, 0x5e, 0xe8, 0x7a, 0xba, 0x4e, 0xf0, 0x48, 0x19, 0x62, 0xa7, 0xbb, + 0x9e, 0xc4, 0x1d, 0x1d, 0x1c, 0xc4, 0x04, 0x7b, 0x03, 0x87, 0x9c, 0xf9, 0x94, 0x51, 0x25, 0xbc, + 0x74, 0xa1, 0x07, 0x72, 0xab, 0x25, 0x76, 0xac, 0x1f, 0xc2, 0xea, 0x0e, 0x09, 0xc8, 0x64, 0xd0, + 0xcc, 0xd3, 0xd9, 0x5b, 0x50, 0x8c, 0x89, 0xdb, 0x8b, 0xa9, 0xdf, 0xd7, 0x01, 0x34, 0x04, 0x58, + 0x26, 0xac, 0x8d, 0x1f, 0x29, 0xef, 0x6d, 0xfd, 0xca, 0x80, 0x15, 0xb9, 0x25, 0xa4, 0xa6, 0x9a, + 0xd7, 0x66, 0x52, 0xf5, 0x65, 0x31, 0x9f, 0xbc, 0x9f, 0xda, 0x9f, 0xcf, 0x99, 0xb7, 0xde, 0x7c, + 0x2a, 0x71, 0xfc, 0xe3, 0xa4, 0x28, 0x2b, 0xbb, 0x70, 0xf0, 0xde, 0xb1, 0xaa, 0xc8, 0xd6, 0x1a, + 0xd4, 0x46, 0xc5, 0x50, 0xf2, 0x0d, 0x34, 0x5c, 0xa6, 0x9c, 0x44, 0xbe, 0x8f, 0x54, 0xab, 0xae, + 0xb2, 0x30, 0xd1, 0x72, 0xce, 0xc8, 0xc3, 0x95, 0x54, 0x1e, 0x26, 0x94, 0xc7, 0x8d, 0x4c, 0x2a, + 0xaa, 0x61, 0x50, 0x72, 0x97, 0x05, 0x50, 0xf5, 0x0a, 0xd6, 0xba, 0xb6, 0x43, 0xc2, 0x5a, 0xc9, + 0xf4, 0x9b, 0x0c, 0x5c, 0x6e, 0x75, 0x48, 0xdc, 0x26, 0xa1, 0x3b, 0xb0, 0x89, 0x74, 0xb7, 0x73, + 0x7b, 0xf7, 0xf4, 0x06, 0xe3, 0x0e, 0x94, 0x42, 0x32, 0x94, 0x67, 0x6e, 0x97, 0x01, 0x21, 0xd1, + 0x42, 0xa2, 0xef, 0xc2, 0x92, 0xdf, 0x0e, 0x79, 0xba, 0x57, 0x2d, 0x2b, 0x35, 0xb3, 0xf3, 0x14, + 0x51, 0x95, 0xd8, 0xaa, 0x09, 0xa4, 0x68, 0x07, 0x56, 0x4f, 0xb1, 0xcf, 0x12, 0xea, 0x64, 0x3e, + 0xcd, 0x25, 0x6e, 0x2d, 0x92, 0xc4, 0x4e, 0x2f, 0x96, 0xad, 0xf2, 0x0a, 0x47, 0xd7, 0xe4, 0x7a, + 0x6e, 0xfd, 0x8b, 0x01, 0x1b, 0xb3, 0x34, 0xa2, 0x02, 0xec, 0xd5, 0x55, 0x72, 0x1f, 0x96, 0xbb, + 0x71, 0xd4, 0x89, 0x18, 0xf1, 0xce, 0xa7, 0x97, 0x25, 0x8d, 0xae, 0x95, 0x73, 0x1d, 0xf2, 0x62, + 0x24, 0xd6, 0x3a, 0x19, 0x1f, 0x98, 0xd5, 0xae, 0xf5, 0x11, 0x6c, 0xec, 0xfa, 0xa1, 0xf7, 0x20, + 0x08, 0xa4, 0xf7, 0xed, 0x85, 0xaf, 0x10, 0x7a, 0xd6, 0x5f, 0x0d, 0x78, 0x7b, 0x26, 0xb9, 0xba, + 0xfd, 0xd3, 0xb1, 0x70, 0xba, 0x93, 0x0a, 0xa7, 0x97, 0xd0, 0xca, 0x70, 0x53, 0xf3, 0x82, 0x6e, + 0xbe, 0x3f, 0x51, 0xbd, 0xf7, 0xcc, 0x19, 0xe1, 0xfa, 0xe8, 0x8c, 0x30, 0x25, 0x3d, 0x25, 0x43, + 0x81, 0xd5, 0x82, 0x4b, 0x8f, 0x08, 0x7b, 0x88, 0xdd, 0x93, 0x5e, 0x97, 0x5e, 0xd8, 0x85, 0xad, + 0x1d, 0x40, 0xe9, 0x63, 0xd4, 0xcd, 0x1b, 0xb0, 0x78, 0x24, 0x41, 0xea, 0xea, 0xb5, 0x46, 0xf2, + 0x26, 0x23, 0x71, 0xf7, 0xc2, 0xe3, 0xc8, 0xd6, 0x48, 0xd6, 0x1b, 0xb0, 0xfe, 0x88, 0xb0, 0x6d, + 0x12, 0x04, 0x1c, 0xce, 0x13, 0xbe, 0x16, 0xc9, 0xba, 0x05, 0xe6, 0xe4, 0x96, 0x62, 0x53, 0x83, + 0x1c, 0xaf, 0x16, 0xfa, 0xd5, 0x45, 0x2e, 0xac, 0x4d, 0x21, 0x92, 0xa6, 0x48, 0x35, 0x1f, 0x62, + 0x34, 0x37, 0x86, 0xa3, 0xb9, 0xb5, 0x0b, 0x2b, 0x23, 0x98, 0x49, 0x59, 0x28, 0xf2, 0x6d, 0xc7, + 0x0f, 0x8f, 0x23, 0x55, 0x17, 0x52, 0x43, 0x74, 0x82, 0x5e, 0x70, 0xd5, 0x17, 0xcf, 0xb4, 0xea, + 0x1c, 0xaa, 0x92, 0x8d, 0x96, 0xfe, 0x2b, 0x23, 0xb9, 0xd9, 0x70, 0x4b, 0xb1, 0xd9, 0x83, 0xc5, + 0xd1, 0x34, 0xd6, 0x4c, 0xd9, 0x6b, 0x06, 0x51, 0x43, 0xad, 0xa5, 0x63, 0x68, 0xfa, 0xfa, 0x3e, + 0x94, 0xd3, 0x1b, 0x53, 0x5c, 0xe3, 0xc6, 0xa8, 0x6b, 0xd4, 0x46, 0xef, 0x23, 0xd9, 0xa4, 0xdd, + 0x63, 0x55, 0xa8, 0x46, 0xbb, 0x65, 0x72, 0x9f, 0x3d, 0xa8, 0x8d, 0x82, 0xd5, 0x5d, 0x6e, 0x43, + 0x51, 0x3b, 0x8a, 0xbe, 0xcd, 0xd4, 0x52, 0x3a, 0xc4, 0xb2, 0x6e, 0x09, 0x33, 0xbd, 0x4a, 0xcc, + 0xed, 0x8e, 0xc8, 0x74, 0xf1, 0xee, 0xe4, 0x97, 0x19, 0x58, 0x7e, 0x44, 0x98, 0x6c, 0x1d, 0xbf, + 0x7e, 0x87, 0xbf, 0xa6, 0xc6, 0xc4, 0x64, 0x56, 0x96, 0x2b, 0xde, 0x9c, 0x90, 0x33, 0xd9, 0x9c, + 0xa8, 0xfd, 0x05, 0xb1, 0x5f, 0x51, 0xd0, 0x43, 0x89, 0x76, 0x15, 0x74, 0xb7, 0xe2, 0xf4, 0x7d, + 0x72, 0x4a, 0x55, 0xa9, 0x2c, 0x2b, 0xe0, 0x33, 0x0e, 0x43, 0x9b, 0xb0, 0x2c, 0x1f, 0xa9, 0x84, + 0x8b, 0x3b, 0x51, 0x18, 0x0c, 0x44, 0xb2, 0x2e, 0xa8, 0x99, 0x58, 0xc4, 0xc5, 0x0f, 0xc2, 0x60, + 0x30, 0xc4, 0xa4, 0xfe, 0xe7, 0x1a, 0x33, 0x9f, 0xc2, 0x3c, 0xe0, 0x60, 0x8e, 0x69, 0xed, 0x8b, + 0x0c, 0xa0, 0xb5, 0xa0, 0x94, 0xf9, 0x1d, 0xc8, 0xab, 0x5e, 0x5b, 0x2a, 0xe0, 0x6a, 0x63, 0xf2, + 0xf1, 0x54, 0x92, 0xec, 0x90, 0x63, 0x3f, 0xf4, 0xd5, 0x53, 0x8c, 0x80, 0x58, 0x4f, 0x60, 0x89, + 0x9f, 0xf8, 0x7a, 0x5a, 0x3e, 0xeb, 0x9e, 0xb4, 0xd2, 0x48, 0x41, 0x49, 0x1a, 0x30, 0x63, 0x6e, + 0x03, 0x66, 0xdd, 0x10, 0x7e, 0x7a, 0x10, 0xf7, 0x9f, 0x8d, 0x5a, 0x79, 0x5a, 0x16, 0x78, 0x0a, + 0xab, 0x63, 0xb8, 0xc9, 0x54, 0x55, 0xa6, 0x71, 0x7f, 0x38, 0x7d, 0x24, 0xce, 0xa5, 0x5e, 0x89, + 0x53, 0x24, 0x40, 0x93, 0x6f, 0xeb, 0x89, 0x90, 0x5b, 0x8d, 0x4e, 0x5f, 0xd7, 0xbb, 0xac, 0x8f, + 0x85, 0x95, 0xf4, 0x69, 0x4a, 0xb2, 0xcd, 0xe4, 0x65, 0x62, 0xd6, 0xa0, 0xa7, 0xf6, 0xad, 0x9f, + 0xa4, 0xc8, 0x2f, 0x9e, 0xe6, 0x39, 0x94, 0xeb, 0x4a, 0xbb, 0xb0, 0x5c, 0x58, 0xf7, 0x45, 0x08, + 0x8f, 0x75, 0x4a, 0xe8, 0x06, 0x2c, 0x4a, 0xe6, 0xc3, 0x36, 0x72, 0x5c, 0x3a, 0x8d, 0x60, 0x35, + 0x85, 0x78, 0x63, 0x46, 0x9a, 0x97, 0x03, 0x1e, 0x0a, 0x96, 0xe3, 0x96, 0x7a, 0x1f, 0x0a, 0x63, + 0x56, 0xba, 0x94, 0x58, 0x29, 0x49, 0x00, 0x8b, 0x7d, 0x65, 0x20, 0x5b, 0xe4, 0x11, 0xfd, 0xa0, + 0x70, 0x2e, 0xad, 0xbc, 0x0d, 0x25, 0xec, 0x32, 0xbf, 0x4f, 0x64, 0x40, 0xc9, 0xce, 0x11, 0x24, + 0x48, 0x04, 0x93, 0x4c, 0x8c, 0xa9, 0x33, 0x87, 0x89, 0x51, 0xbf, 0x71, 0x4f, 0x4b, 0x8c, 0x9a, + 0xc0, 0x1e, 0x62, 0x59, 0xff, 0x31, 0x60, 0x7d, 0x2f, 0xf4, 0xa5, 0xe7, 0xab, 0xae, 0xe6, 0xe2, + 0x96, 0xb3, 0xa1, 0xae, 0x1f, 0xc8, 0x48, 0x40, 0x5c, 0xf5, 0x17, 0x80, 0xf6, 0xc3, 0xb9, 0xad, + 0xd5, 0xba, 0x22, 0x6c, 0x71, 0xba, 0xd4, 0xc6, 0x70, 0x18, 0xcb, 0xa6, 0x87, 0xb1, 0xd7, 0xd3, + 0x55, 0x3e, 0x04, 0x73, 0xf2, 0xf2, 0x49, 0xf4, 0xeb, 0xd6, 0xce, 0x98, 0xdb, 0xda, 0x7d, 0x91, + 0x81, 0x37, 0xf7, 0x03, 0x1c, 0x86, 0xc4, 0xfb, 0x1f, 0x77, 0xea, 0xf7, 0xa0, 0x82, 0xfb, 0x91, + 0x3f, 0xec, 0x65, 0xb3, 0xf3, 0x28, 0xcb, 0x02, 0x57, 0xd3, 0xbe, 0x1e, 0x7d, 0xfe, 0xd9, 0x80, + 0xb7, 0xa6, 0xeb, 0xe2, 0xff, 0xa0, 0x47, 0xff, 0x05, 0xbc, 0x61, 0x93, 0x4e, 0xd4, 0x4f, 0x46, + 0x58, 0xde, 0xac, 0x9c, 0xc7, 0x8a, 0x3a, 0xcf, 0x67, 0x52, 0x7f, 0xc4, 0x4c, 0x7f, 0x42, 0x18, + 0x99, 0x64, 0xb3, 0xe3, 0x33, 0xf4, 0x5b, 0x50, 0x9f, 0x26, 0x80, 0x9a, 0x09, 0xbf, 0x34, 0x60, + 0x4d, 0x6e, 0x0b, 0x95, 0x9e, 0x57, 0xb8, 0x97, 0x3c, 0x75, 0x68, 0xd9, 0x17, 0xa6, 0xc9, 0x9e, + 0x9d, 0x29, 0x7b, 0x6e, 0x5c, 0xf6, 0x37, 0x60, 0x7d, 0x42, 0x38, 0x25, 0xf8, 0x2e, 0xac, 0x6a, + 0x67, 0x18, 0xad, 0x53, 0x37, 0xc7, 0x0a, 0xcb, 0xfc, 0x27, 0x6f, 0xeb, 0xe7, 0xfc, 0xfe, 0xa3, + 0xe7, 0x5c, 0xd8, 0xab, 0x9a, 0xb0, 0x78, 0x2e, 0x67, 0xd2, 0x58, 0x96, 0x0d, 0xef, 0x48, 0x78, + 0x4b, 0xfd, 0x47, 0x16, 0x24, 0x53, 0x28, 0xf1, 0x2e, 0x78, 0xa1, 0xbf, 0x19, 0x60, 0xcd, 0x3b, + 0xf4, 0xc2, 0xb7, 0xbb, 0x68, 0x02, 0xb9, 0x03, 0xa5, 0x28, 0x38, 0x67, 0xfa, 0x80, 0x28, 0xd0, + 0x11, 0xf6, 0xf0, 0xee, 0xdf, 0x5f, 0x6c, 0x18, 0xff, 0x78, 0xb1, 0x61, 0xfc, 0xeb, 0xc5, 0x86, + 0xf1, 0xdb, 0x7f, 0x6f, 0x7c, 0xe3, 0xc7, 0xd7, 0xfb, 0x3e, 0x23, 0x94, 0x36, 0xfc, 0xa8, 0x29, + 0xbf, 0x9a, 0xed, 0xa8, 0xd9, 0x67, 0x4d, 0xf1, 0xef, 0x76, 0x33, 0x29, 0x49, 0x47, 0x79, 0x01, + 0xf8, 0xe0, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x9d, 0xf4, 0x55, 0x44, 0x83, 0x1f, 0x00, 0x00, } func (m *ExecuteVtctlCommandRequest) Marshal() (dAtA []byte, err error) { @@ -4470,9 +4469,9 @@ func (m *Workflow) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - if len(m.ShardStatuses) > 0 { - for k := range m.ShardStatuses { - v := m.ShardStatuses[k] + if len(m.ShardStreams) > 0 { + for k := range m.ShardStreams { + v := m.ShardStreams[k] baseI := i if v != nil { { @@ -4578,7 +4577,7 @@ func (m *Workflow_ReplicationLocation) MarshalToSizedBuffer(dAtA []byte) (int, e return len(dAtA) - i, nil } -func (m *Workflow_ReplicationStatus) Marshal() (dAtA []byte, err error) { +func (m *Workflow_ShardStream) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4588,12 +4587,77 @@ func (m *Workflow_ReplicationStatus) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *Workflow_ReplicationStatus) MarshalTo(dAtA []byte) (int, error) { +func (m *Workflow_ShardStream) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *Workflow_ReplicationStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *Workflow_ShardStream) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.IsPrimaryServing { + i-- + if m.IsPrimaryServing { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + } + if len(m.TabletControls) > 0 { + for iNdEx := len(m.TabletControls) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TabletControls[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVtctldata(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.Streams) > 0 { + for iNdEx := len(m.Streams) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Streams[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVtctldata(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *Workflow_Stream) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Workflow_Stream) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Workflow_Stream) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -4714,7 +4778,7 @@ func (m *Workflow_ReplicationStatus) MarshalToSizedBuffer(dAtA []byte) (int, err return len(dAtA) - i, nil } -func (m *Workflow_ReplicationStatus_CopyState) Marshal() (dAtA []byte, err error) { +func (m *Workflow_Stream_CopyState) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -4724,12 +4788,12 @@ func (m *Workflow_ReplicationStatus_CopyState) Marshal() (dAtA []byte, err error return dAtA[:n], nil } -func (m *Workflow_ReplicationStatus_CopyState) MarshalTo(dAtA []byte) (int, error) { +func (m *Workflow_Stream_CopyState) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *Workflow_ReplicationStatus_CopyState) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *Workflow_Stream_CopyState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -4755,71 +4819,6 @@ func (m *Workflow_ReplicationStatus_CopyState) MarshalToSizedBuffer(dAtA []byte) return len(dAtA) - i, nil } -func (m *Workflow_ShardReplicationStatus) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Workflow_ShardReplicationStatus) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Workflow_ShardReplicationStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i -= len(m.XXX_unrecognized) - copy(dAtA[i:], m.XXX_unrecognized) - } - if m.IsPrimaryServing { - i-- - if m.IsPrimaryServing { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x18 - } - if len(m.TabletControls) > 0 { - for iNdEx := len(m.TabletControls) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.TabletControls[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintVtctldata(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - } - if len(m.PrimaryReplicationStatuses) > 0 { - for iNdEx := len(m.PrimaryReplicationStatuses) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.PrimaryReplicationStatuses[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintVtctldata(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - func (m *ChangeTabletTypeRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -7536,8 +7535,8 @@ func (m *Workflow) Size() (n int) { if m.MaxVReplicationLag != 0 { n += 1 + sovVtctldata(uint64(m.MaxVReplicationLag)) } - if len(m.ShardStatuses) > 0 { - for k, v := range m.ShardStatuses { + if len(m.ShardStreams) > 0 { + for k, v := range m.ShardStreams { _ = k _ = v l = 0 @@ -7577,7 +7576,34 @@ func (m *Workflow_ReplicationLocation) Size() (n int) { return n } -func (m *Workflow_ReplicationStatus) Size() (n int) { +func (m *Workflow_ShardStream) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Streams) > 0 { + for _, e := range m.Streams { + l = e.Size() + n += 1 + l + sovVtctldata(uint64(l)) + } + } + if len(m.TabletControls) > 0 { + for _, e := range m.TabletControls { + l = e.Size() + n += 1 + l + sovVtctldata(uint64(l)) + } + } + if m.IsPrimaryServing { + n += 2 + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *Workflow_Stream) Size() (n int) { if m == nil { return 0 } @@ -7638,7 +7664,7 @@ func (m *Workflow_ReplicationStatus) Size() (n int) { return n } -func (m *Workflow_ReplicationStatus_CopyState) Size() (n int) { +func (m *Workflow_Stream_CopyState) Size() (n int) { if m == nil { return 0 } @@ -7658,33 +7684,6 @@ func (m *Workflow_ReplicationStatus_CopyState) Size() (n int) { return n } -func (m *Workflow_ShardReplicationStatus) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.PrimaryReplicationStatuses) > 0 { - for _, e := range m.PrimaryReplicationStatuses { - l = e.Size() - n += 1 + l + sovVtctldata(uint64(l)) - } - } - if len(m.TabletControls) > 0 { - for _, e := range m.TabletControls { - l = e.Size() - n += 1 + l + sovVtctldata(uint64(l)) - } - } - if m.IsPrimaryServing { - n += 2 - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - func (m *ChangeTabletTypeRequest) Size() (n int) { if m == nil { return 0 @@ -9867,7 +9866,7 @@ func (m *Workflow) Unmarshal(dAtA []byte) error { } case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ShardStatuses", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ShardStreams", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -9894,11 +9893,11 @@ func (m *Workflow) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.ShardStatuses == nil { - m.ShardStatuses = make(map[string]*Workflow_ShardReplicationStatus) + if m.ShardStreams == nil { + m.ShardStreams = make(map[string]*Workflow_ShardStream) } var mapkey string - var mapvalue *Workflow_ShardReplicationStatus + var mapvalue *Workflow_ShardStream for iNdEx < postIndex { entryPreIndex := iNdEx var wire uint64 @@ -9972,7 +9971,7 @@ func (m *Workflow) Unmarshal(dAtA []byte) error { if postmsgIndex > l { return io.ErrUnexpectedEOF } - mapvalue = &Workflow_ShardReplicationStatus{} + mapvalue = &Workflow_ShardStream{} if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { return err } @@ -9992,7 +9991,7 @@ func (m *Workflow) Unmarshal(dAtA []byte) error { iNdEx += skippy } } - m.ShardStatuses[mapkey] = mapvalue + m.ShardStreams[mapkey] = mapvalue iNdEx = postIndex default: iNdEx = preIndex @@ -10137,7 +10136,7 @@ func (m *Workflow_ReplicationLocation) Unmarshal(dAtA []byte) error { } return nil } -func (m *Workflow_ReplicationStatus) Unmarshal(dAtA []byte) error { +func (m *Workflow_ShardStream) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -10160,10 +10159,152 @@ func (m *Workflow_ReplicationStatus) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ReplicationStatus: wiretype end group for non-group") + return fmt.Errorf("proto: ShardStream: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ReplicationStatus: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ShardStream: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Streams", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Streams = append(m.Streams, &Workflow_Stream{}) + if err := m.Streams[len(m.Streams)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TabletControls", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVtctldata + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVtctldata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TabletControls = append(m.TabletControls, &topodata.Shard_TabletControl{}) + if err := m.TabletControls[len(m.TabletControls)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IsPrimaryServing", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IsPrimaryServing = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipVtctldata(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthVtctldata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Workflow_Stream) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVtctldata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Stream: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Stream: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -10550,7 +10691,7 @@ func (m *Workflow_ReplicationStatus) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.CopyStates = append(m.CopyStates, &Workflow_ReplicationStatus_CopyState{}) + m.CopyStates = append(m.CopyStates, &Workflow_Stream_CopyState{}) if err := m.CopyStates[len(m.CopyStates)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -10580,7 +10721,7 @@ func (m *Workflow_ReplicationStatus) Unmarshal(dAtA []byte) error { } return nil } -func (m *Workflow_ReplicationStatus_CopyState) Unmarshal(dAtA []byte) error { +func (m *Workflow_Stream_CopyState) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -10698,148 +10839,6 @@ func (m *Workflow_ReplicationStatus_CopyState) Unmarshal(dAtA []byte) error { } return nil } -func (m *Workflow_ShardReplicationStatus) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ShardReplicationStatus: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ShardReplicationStatus: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PrimaryReplicationStatuses", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthVtctldata - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthVtctldata - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.PrimaryReplicationStatuses = append(m.PrimaryReplicationStatuses, &Workflow_ReplicationStatus{}) - if err := m.PrimaryReplicationStatuses[len(m.PrimaryReplicationStatuses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TabletControls", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthVtctldata - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthVtctldata - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TabletControls = append(m.TabletControls, &topodata.Shard_TabletControl{}) - if err := m.TabletControls[len(m.TabletControls)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field IsPrimaryServing", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowVtctldata - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.IsPrimaryServing = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipVtctldata(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthVtctldata - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthVtctldata - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *ChangeTabletTypeRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/go/vt/vtctl/workflow/server.go b/go/vt/vtctl/workflow/server.go index aaccf4f95c..86c02718d4 100644 --- a/go/vt/vtctl/workflow/server.go +++ b/go/vt/vtctl/workflow/server.go @@ -152,7 +152,7 @@ func (s *Server) GetWorkflows(ctx context.Context, req *vtctldatapb.GetWorkflows message := row[10].ToString() - status := &vtctldatapb.Workflow_ReplicationStatus{ + stream := &vtctldatapb.Workflow_Stream{ Id: id, Shard: tablet.Shard, Tablet: tablet.Alias, @@ -170,22 +170,22 @@ func (s *Server) GetWorkflows(ctx context.Context, req *vtctldatapb.GetWorkflows Message: message, } - status.CopyStates, err = s.getWorkflowCopyStates(ctx, tablet, id) + stream.CopyStates, err = s.getWorkflowCopyStates(ctx, tablet, id) if err != nil { return err } switch { - case strings.Contains(strings.ToLower(status.Message), "error"): - status.State = "Error" - case status.State == "Running" && len(status.CopyStates) > 0: - status.State = "Copying" - case status.State == "Running" && int64(time.Now().Second())-timeUpdatedSeconds > 10: - status.State = "Lagging" + case strings.Contains(strings.ToLower(stream.Message), "error"): + stream.State = "Error" + case stream.State == "Running" && len(stream.CopyStates) > 0: + stream.State = "Copying" + case stream.State == "Running" && int64(time.Now().Second())-timeUpdatedSeconds > 10: + stream.State = "Lagging" } - shardStatusKey := fmt.Sprintf("%s/%s", tablet.Shard, tablet.AliasString()) - shardStatus, ok := workflow.ShardStatuses[shardStatusKey] + shardStreamKey := fmt.Sprintf("%s/%s", tablet.Shard, tablet.AliasString()) + shardStream, ok := workflow.ShardStreams[shardStreamKey] if !ok { ctx, cancel := context.WithTimeout(ctx, *topo.RemoteOperationTimeout) defer cancel() @@ -195,24 +195,24 @@ func (s *Server) GetWorkflows(ctx context.Context, req *vtctldatapb.GetWorkflows return err } - shardStatus = &vtctldatapb.Workflow_ShardReplicationStatus{ - PrimaryReplicationStatuses: nil, - TabletControls: si.TabletControls, - IsPrimaryServing: si.IsMasterServing, + shardStream = &vtctldatapb.Workflow_ShardStream{ + Streams: nil, + TabletControls: si.TabletControls, + IsPrimaryServing: si.IsMasterServing, } - workflow.ShardStatuses[shardStatusKey] = shardStatus + workflow.ShardStreams[shardStreamKey] = shardStream } - shardStatus.PrimaryReplicationStatuses = append(shardStatus.PrimaryReplicationStatuses, status) - sourceShardsByWorkflow[workflow.Name].Insert(status.BinlogSource.Shard) + shardStream.Streams = append(shardStream.Streams, stream) + sourceShardsByWorkflow[workflow.Name].Insert(stream.BinlogSource.Shard) targetShardsByWorkflow[workflow.Name].Insert(tablet.Shard) - if ks, ok := sourceKeyspaceByWorkflow[workflow.Name]; ok && ks != status.BinlogSource.Keyspace { - return fmt.Errorf("%w: workflow = %v, ks1 = %v, ks2 = %v", ErrMultipleSourceKeyspaces, workflow.Name, ks, status.BinlogSource.Keyspace) + if ks, ok := sourceKeyspaceByWorkflow[workflow.Name]; ok && ks != stream.BinlogSource.Keyspace { + return fmt.Errorf("%w: workflow = %v, ks1 = %v, ks2 = %v", ErrMultipleSourceKeyspaces, workflow.Name, ks, stream.BinlogSource.Keyspace) } - sourceKeyspaceByWorkflow[workflow.Name] = status.BinlogSource.Keyspace + sourceKeyspaceByWorkflow[workflow.Name] = stream.BinlogSource.Keyspace if ks, ok := targetKeyspaceByWorkflow[workflow.Name]; ok && ks != tablet.Keyspace { return fmt.Errorf("%w: workflow = %v, ks1 = %v, ks2 = %v", ErrMultipleTargetKeyspaces, workflow.Name, ks, tablet.Keyspace) @@ -253,8 +253,8 @@ func (s *Server) GetWorkflows(ctx context.Context, req *vtctldatapb.GetWorkflows workflow, ok := workflowsMap[workflowName] if !ok { workflow = &vtctldatapb.Workflow{ - Name: workflowName, - ShardStatuses: map[string]*vtctldatapb.Workflow_ShardReplicationStatus{}, + Name: workflowName, + ShardStreams: map[string]*vtctldatapb.Workflow_ShardStream{}, } workflowsMap[workflowName] = workflow @@ -316,7 +316,7 @@ func (s *Server) GetWorkflows(ctx context.Context, req *vtctldatapb.GetWorkflows }, nil } -func (s *Server) getWorkflowCopyStates(ctx context.Context, tablet *topo.TabletInfo, id int64) ([]*vtctldatapb.Workflow_ReplicationStatus_CopyState, error) { +func (s *Server) getWorkflowCopyStates(ctx context.Context, tablet *topo.TabletInfo, id int64) ([]*vtctldatapb.Workflow_Stream_CopyState, error) { query := fmt.Sprintf("select table_name, lastpk from _vt.copy_state where vrepl_id = %d", id) qr, err := s.tmc.VReplicationExec(ctx, tablet.Tablet, query) if err != nil { @@ -328,10 +328,10 @@ func (s *Server) getWorkflowCopyStates(ctx context.Context, tablet *topo.TabletI return nil, nil } - copyStates := make([]*vtctldatapb.Workflow_ReplicationStatus_CopyState, len(result.Rows)) + copyStates := make([]*vtctldatapb.Workflow_Stream_CopyState, len(result.Rows)) for i, row := range result.Rows { // These fields are technically varbinary, but this is close enough. - copyStates[i] = &vtctldatapb.Workflow_ReplicationStatus_CopyState{ + copyStates[i] = &vtctldatapb.Workflow_Stream_CopyState{ Table: row[0].ToString(), LastPk: row[1].ToString(), } diff --git a/proto/vtctldata.proto b/proto/vtctldata.proto index 5d44976655..7a192c12fb 100644 --- a/proto/vtctldata.proto +++ b/proto/vtctldata.proto @@ -90,14 +90,20 @@ message Workflow { ReplicationLocation source = 2; ReplicationLocation target = 3; int64 max_v_replication_lag = 4; - map shard_statuses = 5; + map shard_streams = 5; message ReplicationLocation { string keyspace = 1; repeated string shards = 2; } - message ReplicationStatus { + message ShardStream { + repeated Stream streams = 1; + repeated topodata.Shard.TabletControl tablet_controls = 2; + bool is_primary_serving = 3; + } + + message Stream { int64 id = 1; string shard = 2; topodata.TabletAlias tablet = 3; @@ -116,12 +122,6 @@ message Workflow { string last_pk = 2; } } - - message ShardReplicationStatus { - repeated ReplicationStatus primary_replication_statuses = 1; - repeated topodata.Shard.TabletControl tablet_controls = 2; - bool is_primary_serving = 3; - } } /* Request/response types for VtctldServer */ From 30f475091d5a337fbaaa533d5deef900c2b2710e Mon Sep 17 00:00:00 2001 From: Andrew Mason Date: Thu, 4 Mar 2021 10:37:19 -0500 Subject: [PATCH 20/20] fix typo Signed-off-by: Andrew Mason --- go/vt/vtctl/workflow/vexec/query_planner.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/vt/vtctl/workflow/vexec/query_planner.go b/go/vt/vtctl/workflow/vexec/query_planner.go index 03a9b8a339..a850cc9816 100644 --- a/go/vt/vtctl/workflow/vexec/query_planner.go +++ b/go/vt/vtctl/workflow/vexec/query_planner.go @@ -60,7 +60,7 @@ type QueryPlanner interface { // method called something like "VReplicationExec(ctx, query, Options{DryRun: true})" // DryRun(ctx context.Context) error - // PlanQuery contsructs and returns a QueryPlan for a given statement. The + // PlanQuery constructs and returns a QueryPlan for a given statement. The // resulting QueryPlan is suitable for repeated, concurrent use. PlanQuery(stmt sqlparser.Statement) (*QueryPlan, error) // QueryParams returns a struct of column parameters the QueryPlanner uses.