Merge pull request #5216 from nitins64/nitin-vstream-optional-field-event

vstream: best effort option for field events
This commit is contained in:
Deepthi Sigireddi 2019-10-03 08:10:52 -07:00 коммит произвёл GitHub
Родитель 2a560dab18 a6c53fd030
Коммит c0c1166f1a
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
34 изменённых файлов: 398 добавлений и 215 удалений

4
go.mod
Просмотреть файл

@ -44,6 +44,8 @@ require (
github.com/minio/minio-go v0.0.0-20190131015406-c8a261de75c1
github.com/mitchellh/go-testing-interface v1.0.0 // indirect
github.com/mitchellh/mapstructure v1.1.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.1 // indirect
github.com/olekukonko/tablewriter v0.0.0-20160115111002-cca8bbc07984
github.com/opentracing-contrib/go-grpc v0.0.0-20180928155321-4b5a12d3ff02
github.com/opentracing/opentracing-go v1.1.0
@ -58,7 +60,7 @@ require (
github.com/uber-go/atomic v1.4.0 // indirect
github.com/uber/jaeger-client-go v2.16.0+incompatible
github.com/uber/jaeger-lib v2.0.0+incompatible // indirect
github.com/ugorji/go/codec v1.1.7 // indirect
github.com/ugorji/go v1.1.7 // indirect
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 // indirect
github.com/z-division/go-zookeeper v0.0.0-20190128072838-6d7457066b9b
golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472

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

@ -154,6 +154,7 @@ const (
// If you add to this map, make sure you add a test case
// in tabletserver/endtoend.
var mysqlToType = map[int64]querypb.Type{
0: Decimal,
1: Int8,
2: Int16,
3: Int32,
@ -169,8 +170,13 @@ var mysqlToType = map[int64]querypb.Type{
13: Year,
15: VarChar,
16: Bit,
17: Timestamp,
18: Datetime,
19: Time,
245: TypeJSON,
246: Decimal,
247: Enum,
248: Set,
249: Text,
250: Text,
251: Text,
@ -245,6 +251,24 @@ func MySQLToType(mysqlType, flags int64) (typ querypb.Type, err error) {
return modifyType(result, flags), nil
}
//TypeEquivalenceCheck returns whether two types are equivalent.
func AreTypesEquivalent(mysqlTypeFromBinlog, mysqlTypeFromSchema querypb.Type) bool {
return (mysqlTypeFromBinlog == mysqlTypeFromSchema) ||
(mysqlTypeFromBinlog == VarChar && mysqlTypeFromSchema == VarBinary) ||
// Binlog only has base type. But doesn't have per-column-flags to differentiate
// various logical types. For Binary, Enum, Set types, binlog only returns Char
// as data type.
(mysqlTypeFromBinlog == Char && mysqlTypeFromSchema == Binary) ||
(mysqlTypeFromBinlog == Char && mysqlTypeFromSchema == Enum) ||
(mysqlTypeFromBinlog == Char && mysqlTypeFromSchema == Set) ||
(mysqlTypeFromBinlog == Text && mysqlTypeFromSchema == Blob) ||
(mysqlTypeFromBinlog == Int8 && mysqlTypeFromSchema == Uint8) ||
(mysqlTypeFromBinlog == Int16 && mysqlTypeFromSchema == Uint16) ||
(mysqlTypeFromBinlog == Int24 && mysqlTypeFromSchema == Uint24) ||
(mysqlTypeFromBinlog == Int32 && mysqlTypeFromSchema == Uint32) ||
(mysqlTypeFromBinlog == Int64 && mysqlTypeFromSchema == Uint64)
}
// typeToMySQL is the reverse of mysqlToType.
var typeToMySQL = map[querypb.Type]struct {
typ int64

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

@ -406,9 +406,30 @@ func TestMySQLToType(t *testing.T) {
}
func TestTypeError(t *testing.T) {
_, err := MySQLToType(17, 0)
want := "unsupported type: 17"
_, err := MySQLToType(50, 0)
want := "unsupported type: 50"
if err == nil || err.Error() != want {
t.Errorf("MySQLToType: %v, want %s", err, want)
}
}
func TestTypeEquivalenceCheck(t *testing.T) {
if !AreTypesEquivalent(Int16, Int16) {
t.Errorf("Int16 and Int16 are same types.")
}
if AreTypesEquivalent(Int16, Int24) {
t.Errorf("Int16 and Int24 are not same types.")
}
if !AreTypesEquivalent(VarChar, VarBinary) {
t.Errorf("VarChar in binlog and VarBinary in schema are equivalent types.")
}
if AreTypesEquivalent(VarBinary, VarChar) {
t.Errorf("VarBinary in binlog and VarChar in schema are not equivalent types.")
}
if !AreTypesEquivalent(Int16, Uint16) {
t.Errorf("Int16 in binlog and Uint16 in schema are equivalent types.")
}
if AreTypesEquivalent(Uint16, Int16) {
t.Errorf("Uint16 in binlog and Int16 in schema are not equivalent types.")
}
}

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

@ -5,9 +5,8 @@ package automation
import (
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
math "math"
)
// Reference imports to suppress errors if they are not otherwise used.

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

@ -6,12 +6,11 @@ package automationservice
import (
context "context"
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
automation "vitess.io/vitess/go/vt/proto/automation"
)

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

@ -5,9 +5,8 @@ package binlogdata
import (
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
math "math"
query "vitess.io/vitess/go/vt/proto/query"
topodata "vitess.io/vitess/go/vt/proto/topodata"
vtrpc "vitess.io/vitess/go/vt/proto/vtrpc"
@ -205,6 +204,31 @@ func (BinlogTransaction_Statement_Category) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_5fd02bcb2e350dad, []int{1, 0, 0}
}
type Filter_FieldEventMode int32
const (
Filter_ERR_ON_MISMATCH Filter_FieldEventMode = 0
Filter_BEST_EFFORT Filter_FieldEventMode = 1
)
var Filter_FieldEventMode_name = map[int32]string{
0: "ERR_ON_MISMATCH",
1: "BEST_EFFORT",
}
var Filter_FieldEventMode_value = map[string]int32{
"ERR_ON_MISMATCH": 0,
"BEST_EFFORT": 1,
}
func (x Filter_FieldEventMode) String() string {
return proto.EnumName(Filter_FieldEventMode_name, int32(x))
}
func (Filter_FieldEventMode) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_5fd02bcb2e350dad, []int{7, 0}
}
// Charset is the per-statement charset info from a QUERY_EVENT binlog entry.
type Charset struct {
// @@session.character_set_client
@ -627,10 +651,11 @@ func (m *Rule) GetFilter() string {
// Filter represents a list of ordered rules. First match
// wins.
type Filter struct {
Rules []*Rule `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Rules []*Rule `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"`
FieldEventMode Filter_FieldEventMode `protobuf:"varint,2,opt,name=fieldEventMode,proto3,enum=binlogdata.Filter_FieldEventMode" json:"fieldEventMode,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Filter) Reset() { *m = Filter{} }
@ -665,6 +690,13 @@ func (m *Filter) GetRules() []*Rule {
return nil
}
func (m *Filter) GetFieldEventMode() Filter_FieldEventMode {
if m != nil {
return m.FieldEventMode
}
return Filter_ERR_ON_MISMATCH
}
// BinlogSource specifies the source and filter parameters for
// Filtered Replication. It currently supports a keyrange
// or a list of tables.
@ -1500,6 +1532,7 @@ func init() {
proto.RegisterEnum("binlogdata.VEventType", VEventType_name, VEventType_value)
proto.RegisterEnum("binlogdata.MigrationType", MigrationType_name, MigrationType_value)
proto.RegisterEnum("binlogdata.BinlogTransaction_Statement_Category", BinlogTransaction_Statement_Category_name, BinlogTransaction_Statement_Category_value)
proto.RegisterEnum("binlogdata.Filter_FieldEventMode", Filter_FieldEventMode_name, Filter_FieldEventMode_value)
proto.RegisterType((*Charset)(nil), "binlogdata.Charset")
proto.RegisterType((*BinlogTransaction)(nil), "binlogdata.BinlogTransaction")
proto.RegisterType((*BinlogTransaction_Statement)(nil), "binlogdata.BinlogTransaction.Statement")
@ -1527,103 +1560,107 @@ func init() {
func init() { proto.RegisterFile("binlogdata.proto", fileDescriptor_5fd02bcb2e350dad) }
var fileDescriptor_5fd02bcb2e350dad = []byte{
// 1558 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x57, 0xcb, 0x72, 0xdb, 0xca,
0x11, 0x35, 0x09, 0xf0, 0xd5, 0x90, 0x28, 0x68, 0xf4, 0x08, 0xa3, 0x8a, 0x53, 0x0a, 0x2a, 0x8e,
0x14, 0x55, 0x85, 0x72, 0x98, 0xc4, 0x59, 0x39, 0x0e, 0x1f, 0xb0, 0x4c, 0x09, 0x22, 0xe5, 0x21,
0x24, 0xa7, 0xbc, 0x41, 0x41, 0xc4, 0x48, 0x42, 0x04, 0x02, 0x34, 0x30, 0xa4, 0xa2, 0x0f, 0x48,
0xe5, 0x03, 0xb2, 0xcd, 0x0f, 0x64, 0x9f, 0x6d, 0xb6, 0xd9, 0xe7, 0x0b, 0xb2, 0xca, 0x7f, 0xdc,
0x9a, 0x07, 0x40, 0x42, 0xf6, 0xb5, 0xe5, 0x5b, 0x75, 0x17, 0x77, 0xc3, 0xea, 0xe9, 0xe9, 0xe7,
0x41, 0x4f, 0x77, 0x13, 0xf4, 0x4b, 0x3f, 0x0c, 0xa2, 0x6b, 0xcf, 0xa5, 0x6e, 0x73, 0x1a, 0x47,
0x34, 0x42, 0xb0, 0xe0, 0xec, 0x68, 0x73, 0x1a, 0x4f, 0xc7, 0xe2, 0x62, 0x47, 0xfb, 0x30, 0x23,
0xf1, 0xbd, 0x3c, 0xd4, 0x69, 0x34, 0x8d, 0x16, 0x5a, 0xc6, 0x29, 0x54, 0xba, 0x37, 0x6e, 0x9c,
0x10, 0x8a, 0xb6, 0xa1, 0x3c, 0x0e, 0x7c, 0x12, 0xd2, 0x46, 0x61, 0xb7, 0xb0, 0x5f, 0xc2, 0xf2,
0x84, 0x10, 0xa8, 0xe3, 0x28, 0x0c, 0x1b, 0x45, 0xce, 0xe5, 0x34, 0x93, 0x4d, 0x48, 0x3c, 0x27,
0x71, 0x43, 0x11, 0xb2, 0xe2, 0x64, 0xfc, 0x5f, 0x81, 0xf5, 0x0e, 0x8f, 0xc3, 0x8e, 0xdd, 0x30,
0x71, 0xc7, 0xd4, 0x8f, 0x42, 0x74, 0x04, 0x90, 0x50, 0x97, 0x92, 0x09, 0x09, 0x69, 0xd2, 0x28,
0xec, 0x2a, 0xfb, 0x5a, 0x6b, 0xaf, 0xb9, 0x94, 0xc1, 0x47, 0x2a, 0xcd, 0x51, 0x2a, 0x8f, 0x97,
0x54, 0x51, 0x0b, 0x34, 0x32, 0x27, 0x21, 0x75, 0x68, 0x74, 0x4b, 0xc2, 0x86, 0xba, 0x5b, 0xd8,
0xd7, 0x5a, 0xeb, 0x4d, 0x91, 0xa0, 0xc9, 0x6e, 0x6c, 0x76, 0x81, 0x81, 0x64, 0xf4, 0xce, 0x7f,
0x8a, 0x50, 0xcb, 0xac, 0x21, 0x0b, 0xaa, 0x63, 0x97, 0x92, 0xeb, 0x28, 0xbe, 0xe7, 0x69, 0xd6,
0x5b, 0xcf, 0x1f, 0x19, 0x48, 0xb3, 0x2b, 0xf5, 0x70, 0x66, 0x01, 0xfd, 0x0a, 0x2a, 0x63, 0x81,
0x1e, 0x47, 0x47, 0x6b, 0x6d, 0x2c, 0x1b, 0x93, 0xc0, 0xe2, 0x54, 0x06, 0xe9, 0xa0, 0x24, 0x1f,
0x02, 0x0e, 0xd9, 0x0a, 0x66, 0xa4, 0xf1, 0xcf, 0x02, 0x54, 0x53, 0xbb, 0x68, 0x03, 0xd6, 0x3a,
0x96, 0x73, 0x3e, 0xc0, 0x66, 0x77, 0x78, 0x34, 0xe8, 0xbf, 0x37, 0x7b, 0xfa, 0x13, 0xb4, 0x02,
0xd5, 0x8e, 0xe5, 0x74, 0xcc, 0xa3, 0xfe, 0x40, 0x2f, 0xa0, 0x55, 0xa8, 0x75, 0x2c, 0xa7, 0x3b,
0x3c, 0x3d, 0xed, 0xdb, 0x7a, 0x11, 0xad, 0x81, 0xd6, 0xb1, 0x1c, 0x3c, 0xb4, 0xac, 0x4e, 0xbb,
0x7b, 0xa2, 0x2b, 0x68, 0x0b, 0xd6, 0x3b, 0x96, 0xd3, 0x3b, 0xb5, 0x9c, 0x9e, 0x79, 0x86, 0xcd,
0x6e, 0xdb, 0x36, 0x7b, 0xba, 0x8a, 0x00, 0xca, 0x8c, 0xdd, 0xb3, 0xf4, 0x92, 0xa4, 0x47, 0xa6,
0xad, 0x97, 0xa5, 0xb9, 0xfe, 0x60, 0x64, 0x62, 0x5b, 0xaf, 0xc8, 0xe3, 0xf9, 0x59, 0xaf, 0x6d,
0x9b, 0x7a, 0x55, 0x1e, 0x7b, 0xa6, 0x65, 0xda, 0xa6, 0x5e, 0x3b, 0x56, 0xab, 0x45, 0x5d, 0x39,
0x56, 0xab, 0x8a, 0xae, 0x1a, 0x7f, 0x2f, 0xc0, 0xd6, 0x88, 0xc6, 0xc4, 0x9d, 0x9c, 0x90, 0x7b,
0xec, 0x86, 0xd7, 0x04, 0x93, 0x0f, 0x33, 0x92, 0x50, 0xb4, 0x03, 0xd5, 0x69, 0x94, 0xf8, 0x0c,
0x3b, 0x0e, 0x70, 0x0d, 0x67, 0x67, 0x74, 0x08, 0xb5, 0x5b, 0x72, 0xef, 0xc4, 0x4c, 0x5e, 0x02,
0x86, 0x9a, 0x59, 0x41, 0x66, 0x96, 0xaa, 0xb7, 0x92, 0x5a, 0xc6, 0x57, 0xf9, 0x32, 0xbe, 0xc6,
0x15, 0x6c, 0x3f, 0x0c, 0x2a, 0x99, 0x46, 0x61, 0x42, 0x90, 0x05, 0x48, 0x28, 0x3a, 0x74, 0xf1,
0x6d, 0x79, 0x7c, 0x5a, 0xeb, 0xe9, 0x67, 0x0b, 0x00, 0xaf, 0x5f, 0x3e, 0x64, 0x19, 0x7f, 0x81,
0x0d, 0xe1, 0xc7, 0x76, 0x2f, 0x03, 0x92, 0x3c, 0x26, 0xf5, 0x6d, 0x28, 0x53, 0x2e, 0xdc, 0x28,
0xee, 0x2a, 0xfb, 0x35, 0x2c, 0x4f, 0x5f, 0x9b, 0xa1, 0x07, 0x9b, 0x79, 0xcf, 0xdf, 0x4b, 0x7e,
0xbf, 0x05, 0x15, 0xcf, 0x02, 0x82, 0x36, 0xa1, 0x34, 0x71, 0xe9, 0xf8, 0x46, 0x66, 0x23, 0x0e,
0x2c, 0x95, 0x2b, 0x3f, 0xa0, 0x24, 0xe6, 0x9f, 0xb0, 0x86, 0xe5, 0xc9, 0x78, 0x0e, 0xe5, 0xd7,
0x9c, 0x42, 0xbf, 0x80, 0x52, 0x3c, 0x63, 0xb9, 0x8a, 0xa7, 0xae, 0x2f, 0x07, 0xc0, 0x0c, 0x63,
0x71, 0x6d, 0xfc, 0xa3, 0x08, 0x2b, 0x22, 0xa0, 0x51, 0x34, 0x8b, 0xc7, 0x84, 0x21, 0x78, 0x4b,
0xee, 0x93, 0xa9, 0x3b, 0x26, 0x29, 0x82, 0xe9, 0x99, 0x05, 0x93, 0xdc, 0xb8, 0xb1, 0x27, 0xbd,
0x8a, 0x03, 0xfa, 0x1d, 0x68, 0x1c, 0x49, 0xea, 0xd0, 0xfb, 0x29, 0xe1, 0x18, 0xd6, 0x5b, 0x9b,
0x8b, 0xa2, 0xe2, 0x38, 0x51, 0xfb, 0x7e, 0x4a, 0x30, 0xd0, 0x8c, 0xce, 0x57, 0xa2, 0xfa, 0x88,
0x4a, 0x5c, 0x7c, 0xbf, 0x52, 0xee, 0xfb, 0x1d, 0x64, 0x60, 0x94, 0xa5, 0x95, 0xa5, 0x5c, 0x05,
0x1c, 0x29, 0x40, 0xa8, 0x09, 0xe5, 0x28, 0x74, 0x3c, 0x2f, 0x68, 0x54, 0x78, 0x98, 0x3f, 0x5a,
0x96, 0x1d, 0x86, 0xbd, 0x9e, 0xd5, 0x16, 0x9f, 0xa4, 0x14, 0x85, 0x3d, 0x2f, 0x30, 0xde, 0x42,
0x0d, 0x47, 0x77, 0xdd, 0x1b, 0x1e, 0x80, 0x01, 0xe5, 0x4b, 0x72, 0x15, 0xc5, 0x44, 0x7e, 0x55,
0x90, 0x5d, 0x0f, 0x47, 0x77, 0x58, 0xde, 0xa0, 0x5d, 0x28, 0xb9, 0x57, 0xe9, 0x87, 0xc9, 0x8b,
0x88, 0x0b, 0xc3, 0x85, 0x2a, 0x8e, 0xee, 0x78, 0xa7, 0x44, 0x4f, 0x41, 0x20, 0xe2, 0x84, 0xee,
0x24, 0x85, 0xbb, 0xc6, 0x39, 0x03, 0x77, 0x42, 0xd0, 0x0b, 0xd0, 0xe2, 0xe8, 0xce, 0x19, 0x73,
0xf7, 0xa2, 0x6c, 0xb5, 0xd6, 0x56, 0xee, 0x53, 0xa6, 0xc1, 0x61, 0x88, 0x53, 0x32, 0x31, 0xde,
0x02, 0xbc, 0xf6, 0x49, 0xe0, 0x3d, 0xca, 0xc9, 0xcf, 0x19, 0x7c, 0x24, 0xf0, 0x52, 0xfb, 0x2b,
0x32, 0x64, 0x6e, 0x01, 0xcb, 0x3b, 0x06, 0xc4, 0x88, 0x7d, 0xed, 0x23, 0xea, 0x7b, 0xdf, 0xa1,
0x46, 0x10, 0xa8, 0xd7, 0xd4, 0xf7, 0x78, 0x71, 0xd4, 0x30, 0xa7, 0x8d, 0x57, 0x50, 0xba, 0xe0,
0xe6, 0x5e, 0x80, 0xc6, 0xa5, 0x1c, 0xc6, 0x4e, 0x2b, 0x36, 0x97, 0x66, 0xe6, 0x1a, 0x43, 0x92,
0x92, 0x89, 0xd1, 0x86, 0xd5, 0x13, 0xe9, 0x96, 0x0b, 0x7c, 0x7d, 0x5c, 0xc6, 0xbf, 0x8a, 0x50,
0x39, 0x8e, 0x66, 0x71, 0xe8, 0x06, 0xa8, 0x0e, 0x45, 0xdf, 0xe3, 0x7a, 0x0a, 0x2e, 0xfa, 0x1e,
0xfa, 0x23, 0xd4, 0x27, 0xfe, 0x75, 0xec, 0xb2, 0x7a, 0x10, 0xa5, 0x5d, 0xe4, 0x35, 0xf3, 0xe3,
0xe5, 0xc8, 0x4e, 0x53, 0x09, 0x5e, 0xdf, 0xab, 0x93, 0xe5, 0xe3, 0x52, 0xc5, 0x2a, 0xb9, 0x8a,
0x7d, 0x06, 0xf5, 0x20, 0x1a, 0xbb, 0x81, 0x93, 0xf5, 0x2a, 0x95, 0x07, 0xb5, 0xca, 0xb9, 0x67,
0x69, 0xc3, 0x7a, 0x80, 0x4b, 0xe9, 0x91, 0xb8, 0xa0, 0x97, 0xb0, 0x32, 0x75, 0x63, 0xea, 0x8f,
0xfd, 0xa9, 0xcb, 0xa6, 0x7d, 0x99, 0x2b, 0xe6, 0xc2, 0xce, 0xe1, 0x86, 0x73, 0xe2, 0xe8, 0x67,
0xb0, 0x12, 0x93, 0x39, 0x89, 0x13, 0xe2, 0x39, 0xcc, 0x6f, 0x65, 0x57, 0xd9, 0x57, 0xb0, 0x96,
0xf2, 0xfa, 0x5e, 0x62, 0xfc, 0xaf, 0x08, 0xe5, 0x0b, 0x51, 0x5d, 0x07, 0xa0, 0x72, 0x6c, 0xc4,
0x24, 0xdf, 0x5e, 0x76, 0x22, 0x24, 0x38, 0x30, 0x5c, 0x06, 0xfd, 0x04, 0x6a, 0xd4, 0x9f, 0x90,
0x84, 0xba, 0x93, 0x29, 0x07, 0x53, 0xc1, 0x0b, 0xc6, 0xa7, 0x6a, 0x84, 0x8d, 0x6b, 0xf6, 0x58,
0x05, 0x3c, 0x8c, 0x44, 0xbf, 0x86, 0x1a, 0x7b, 0x13, 0x7c, 0xbb, 0x68, 0x94, 0xf8, 0x23, 0xdb,
0x7c, 0xf0, 0x22, 0xb8, 0x5b, 0x5c, 0x8d, 0xd3, 0x57, 0xf6, 0x7b, 0xd0, 0x78, 0x15, 0x4b, 0x25,
0xd1, 0x25, 0xb6, 0xf3, 0x5d, 0x22, 0x7d, 0x2d, 0x18, 0xae, 0x16, 0x2f, 0x67, 0x0f, 0x4a, 0x73,
0x1e, 0x52, 0x45, 0x6e, 0x39, 0xcb, 0xc9, 0x71, 0xd8, 0xc5, 0x3d, 0x1b, 0x21, 0x7f, 0x16, 0x55,
0xd4, 0xa8, 0x7e, 0x3c, 0x42, 0x64, 0x81, 0xe1, 0x54, 0x86, 0x21, 0x3c, 0x9e, 0xc5, 0x31, 0xdf,
0xa2, 0xfc, 0x09, 0x69, 0x6c, 0x72, 0x28, 0x34, 0xc9, 0xb3, 0xfd, 0x09, 0x31, 0xfe, 0x56, 0x84,
0xfa, 0x85, 0x98, 0x33, 0xe9, 0x6c, 0x7b, 0x05, 0x1b, 0xe4, 0xea, 0x8a, 0x8c, 0xa9, 0x3f, 0x27,
0xce, 0xd8, 0x0d, 0x02, 0x12, 0x3b, 0xb2, 0x60, 0xb5, 0xd6, 0x5a, 0x53, 0xec, 0x9b, 0x5d, 0xce,
0xef, 0xf7, 0xf0, 0x7a, 0x26, 0x2b, 0x59, 0x1e, 0x32, 0x61, 0xc3, 0x9f, 0x4c, 0x88, 0xe7, 0xbb,
0x74, 0xd9, 0x80, 0xe8, 0x54, 0x5b, 0xf2, 0xd9, 0x5f, 0xd8, 0x47, 0x2e, 0x25, 0x0b, 0x33, 0x99,
0x46, 0x66, 0xe6, 0x19, 0xab, 0xea, 0xf8, 0x3a, 0x1b, 0x97, 0xab, 0x52, 0xd3, 0xe6, 0x4c, 0x2c,
0x2f, 0x73, 0xa3, 0x58, 0x7d, 0x30, 0x8a, 0x17, 0x2d, 0xbb, 0xf4, 0xa5, 0x96, 0x6d, 0xbc, 0x84,
0xb5, 0x0c, 0x08, 0x39, 0x6a, 0x0f, 0xa0, 0xcc, 0x3f, 0x65, 0xda, 0x2b, 0xd0, 0xc7, 0x55, 0x87,
0xa5, 0x84, 0xf1, 0xd7, 0x22, 0xa0, 0x54, 0x3f, 0xba, 0x4b, 0x7e, 0xa0, 0x60, 0x6e, 0x42, 0x89,
0xf3, 0x25, 0x92, 0xe2, 0xc0, 0x70, 0x08, 0xdc, 0x84, 0x4e, 0x6f, 0x33, 0x18, 0x85, 0xf2, 0x5b,
0xf6, 0x8b, 0x49, 0x32, 0x0b, 0x28, 0x96, 0x12, 0xc6, 0xbf, 0x0b, 0xb0, 0x91, 0xc3, 0x41, 0x62,
0xb9, 0x68, 0xff, 0x85, 0x6f, 0x6f, 0xff, 0x68, 0x1f, 0xaa, 0xd3, 0xdb, 0xcf, 0x8c, 0x89, 0xec,
0xf6, 0x93, 0xaf, 0xf8, 0xa7, 0xa0, 0xc6, 0xd1, 0x5d, 0xd2, 0x50, 0xb9, 0xe6, 0xf2, 0x4c, 0xe4,
0x7c, 0x36, 0x58, 0x73, 0x79, 0xe4, 0x06, 0xab, 0xb8, 0x39, 0xf8, 0x03, 0x68, 0x4b, 0xf3, 0x99,
0xad, 0xd0, 0xfd, 0xa3, 0xc1, 0x10, 0x9b, 0xfa, 0x13, 0x54, 0x05, 0x75, 0x64, 0x0f, 0xcf, 0xf4,
0x02, 0xa3, 0xcc, 0x3f, 0x99, 0x5d, 0xb1, 0x96, 0x33, 0xca, 0x91, 0x42, 0xca, 0xc1, 0x7f, 0x0b,
0x00, 0x8b, 0x86, 0x84, 0x34, 0xa8, 0x9c, 0x0f, 0x4e, 0x06, 0xc3, 0x77, 0x03, 0x61, 0xe0, 0xc8,
0xee, 0xf7, 0xf4, 0x02, 0xaa, 0x41, 0x49, 0xec, 0xf9, 0x45, 0xe6, 0x41, 0x2e, 0xf9, 0x0a, 0xfb,
0x07, 0x90, 0x6d, 0xf8, 0x2a, 0xaa, 0x80, 0x92, 0xed, 0xf1, 0x72, 0x71, 0x2f, 0x33, 0x83, 0xd8,
0x3c, 0xb3, 0xda, 0x5d, 0x53, 0xaf, 0xb0, 0x8b, 0x6c, 0x85, 0x07, 0x28, 0xa7, 0xfb, 0x3b, 0xd3,
0x64, 0x5b, 0x3f, 0x30, 0x3f, 0x43, 0xfb, 0x8d, 0x89, 0x75, 0x8d, 0xf1, 0xf0, 0xf0, 0x9d, 0xbe,
0xc2, 0x78, 0xaf, 0xfb, 0xa6, 0xd5, 0xd3, 0x57, 0xd9, 0xda, 0xff, 0xc6, 0x6c, 0x63, 0xbb, 0x63,
0xb6, 0x6d, 0xbd, 0xce, 0x6e, 0x2e, 0x78, 0x80, 0x6b, 0xcc, 0xcd, 0xf1, 0xf0, 0x1c, 0x0f, 0xda,
0x96, 0xae, 0x1f, 0xec, 0xc1, 0x6a, 0x6e, 0xfe, 0x30, 0x5f, 0x76, 0xbb, 0x63, 0x99, 0x23, 0xfd,
0x09, 0xa3, 0x47, 0x6f, 0xda, 0xb8, 0x37, 0xd2, 0x0b, 0x9d, 0x5f, 0xbe, 0xdf, 0x9b, 0xfb, 0x94,
0x24, 0x49, 0xd3, 0x8f, 0x0e, 0x05, 0x75, 0x78, 0x1d, 0x1d, 0xce, 0xe9, 0x21, 0xff, 0x0b, 0x7a,
0xb8, 0x78, 0x3e, 0x97, 0x65, 0xce, 0xf9, 0xcd, 0x37, 0x01, 0x00, 0x00, 0xff, 0xff, 0x2e, 0xb4,
0x72, 0xde, 0xde, 0x0e, 0x00, 0x00,
// 1620 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x57, 0x4d, 0x73, 0xf3, 0x48,
0x11, 0x8e, 0x2d, 0xf9, 0xab, 0x95, 0x38, 0xca, 0xe4, 0x03, 0x93, 0x62, 0xa9, 0xac, 0x8a, 0x25,
0x21, 0x55, 0x38, 0x60, 0xe0, 0xe5, 0xb4, 0x2c, 0xfe, 0x50, 0x12, 0x27, 0xb2, 0x9d, 0x77, 0xac,
0x64, 0xa9, 0xbd, 0xa8, 0x14, 0x6b, 0x92, 0x88, 0xc8, 0x92, 0x5f, 0x69, 0xec, 0x90, 0x1f, 0x40,
0xf1, 0x03, 0xb8, 0xf2, 0x07, 0x38, 0xc3, 0x95, 0x2b, 0x77, 0x7e, 0x01, 0x27, 0xfe, 0x07, 0x35,
0x1f, 0x92, 0xad, 0x64, 0xd9, 0x37, 0x4b, 0x15, 0x07, 0x2e, 0xaa, 0x9e, 0x9e, 0xee, 0x9e, 0x9e,
0x67, 0x9e, 0xee, 0xd1, 0x80, 0x7e, 0xeb, 0x87, 0x41, 0x74, 0xef, 0xb9, 0xd4, 0x6d, 0xce, 0xe2,
0x88, 0x46, 0x08, 0x96, 0x9a, 0x7d, 0x6d, 0x41, 0xe3, 0xd9, 0x44, 0x4c, 0xec, 0x6b, 0x1f, 0xe6,
0x24, 0x7e, 0x96, 0x83, 0x3a, 0x8d, 0x66, 0xd1, 0xd2, 0xcb, 0x18, 0x40, 0xa5, 0xfb, 0xe0, 0xc6,
0x09, 0xa1, 0x68, 0x0f, 0xca, 0x93, 0xc0, 0x27, 0x21, 0x6d, 0x14, 0x0e, 0x0a, 0x47, 0x25, 0x2c,
0x47, 0x08, 0x81, 0x3a, 0x89, 0xc2, 0xb0, 0x51, 0xe4, 0x5a, 0x2e, 0x33, 0xdb, 0x84, 0xc4, 0x0b,
0x12, 0x37, 0x14, 0x61, 0x2b, 0x46, 0xc6, 0xbf, 0x14, 0xd8, 0xea, 0xf0, 0x3c, 0xec, 0xd8, 0x0d,
0x13, 0x77, 0x42, 0xfd, 0x28, 0x44, 0x67, 0x00, 0x09, 0x75, 0x29, 0x99, 0x92, 0x90, 0x26, 0x8d,
0xc2, 0x81, 0x72, 0xa4, 0xb5, 0x0e, 0x9b, 0x2b, 0x3b, 0x78, 0xe5, 0xd2, 0x1c, 0xa7, 0xf6, 0x78,
0xc5, 0x15, 0xb5, 0x40, 0x23, 0x0b, 0x12, 0x52, 0x87, 0x46, 0x8f, 0x24, 0x6c, 0xa8, 0x07, 0x85,
0x23, 0xad, 0xb5, 0xd5, 0x14, 0x1b, 0x34, 0xd9, 0x8c, 0xcd, 0x26, 0x30, 0x90, 0x4c, 0xde, 0xff,
0x7b, 0x11, 0x6a, 0x59, 0x34, 0x64, 0x41, 0x75, 0xe2, 0x52, 0x72, 0x1f, 0xc5, 0xcf, 0x7c, 0x9b,
0xf5, 0xd6, 0x4f, 0xde, 0x98, 0x48, 0xb3, 0x2b, 0xfd, 0x70, 0x16, 0x01, 0xfd, 0x18, 0x2a, 0x13,
0x81, 0x1e, 0x47, 0x47, 0x6b, 0x6d, 0xaf, 0x06, 0x93, 0xc0, 0xe2, 0xd4, 0x06, 0xe9, 0xa0, 0x24,
0x1f, 0x02, 0x0e, 0xd9, 0x3a, 0x66, 0xa2, 0xf1, 0xe7, 0x02, 0x54, 0xd3, 0xb8, 0x68, 0x1b, 0x36,
0x3b, 0x96, 0x73, 0x3d, 0xc4, 0x66, 0x77, 0x74, 0x36, 0xec, 0x7f, 0x65, 0xf6, 0xf4, 0x35, 0xb4,
0x0e, 0xd5, 0x8e, 0xe5, 0x74, 0xcc, 0xb3, 0xfe, 0x50, 0x2f, 0xa0, 0x0d, 0xa8, 0x75, 0x2c, 0xa7,
0x3b, 0x1a, 0x0c, 0xfa, 0xb6, 0x5e, 0x44, 0x9b, 0xa0, 0x75, 0x2c, 0x07, 0x8f, 0x2c, 0xab, 0xd3,
0xee, 0x5e, 0xea, 0x0a, 0xda, 0x85, 0xad, 0x8e, 0xe5, 0xf4, 0x06, 0x96, 0xd3, 0x33, 0xaf, 0xb0,
0xd9, 0x6d, 0xdb, 0x66, 0x4f, 0x57, 0x11, 0x40, 0x99, 0xa9, 0x7b, 0x96, 0x5e, 0x92, 0xf2, 0xd8,
0xb4, 0xf5, 0xb2, 0x0c, 0xd7, 0x1f, 0x8e, 0x4d, 0x6c, 0xeb, 0x15, 0x39, 0xbc, 0xbe, 0xea, 0xb5,
0x6d, 0x53, 0xaf, 0xca, 0x61, 0xcf, 0xb4, 0x4c, 0xdb, 0xd4, 0x6b, 0x17, 0x6a, 0xb5, 0xa8, 0x2b,
0x17, 0x6a, 0x55, 0xd1, 0x55, 0xe3, 0x8f, 0x05, 0xd8, 0x1d, 0xd3, 0x98, 0xb8, 0xd3, 0x4b, 0xf2,
0x8c, 0xdd, 0xf0, 0x9e, 0x60, 0xf2, 0x61, 0x4e, 0x12, 0x8a, 0xf6, 0xa1, 0x3a, 0x8b, 0x12, 0x9f,
0x61, 0xc7, 0x01, 0xae, 0xe1, 0x6c, 0x8c, 0x4e, 0xa0, 0xf6, 0x48, 0x9e, 0x9d, 0x98, 0xd9, 0x4b,
0xc0, 0x50, 0x33, 0x23, 0x64, 0x16, 0xa9, 0xfa, 0x28, 0xa5, 0x55, 0x7c, 0x95, 0x8f, 0xe3, 0x6b,
0xdc, 0xc1, 0xde, 0xcb, 0xa4, 0x92, 0x59, 0x14, 0x26, 0x04, 0x59, 0x80, 0x84, 0xa3, 0x43, 0x97,
0x67, 0xcb, 0xf3, 0xd3, 0x5a, 0x9f, 0x7c, 0x23, 0x01, 0xf0, 0xd6, 0xed, 0x4b, 0x95, 0xf1, 0x3b,
0xd8, 0x16, 0xeb, 0xd8, 0xee, 0x6d, 0x40, 0x92, 0xb7, 0x6c, 0x7d, 0x0f, 0xca, 0x94, 0x1b, 0x37,
0x8a, 0x07, 0xca, 0x51, 0x0d, 0xcb, 0xd1, 0xb7, 0xdd, 0xa1, 0x07, 0x3b, 0xf9, 0x95, 0xff, 0x27,
0xfb, 0xfb, 0x39, 0xa8, 0x78, 0x1e, 0x10, 0xb4, 0x03, 0xa5, 0xa9, 0x4b, 0x27, 0x0f, 0x72, 0x37,
0x62, 0xc0, 0xb6, 0x72, 0xe7, 0x07, 0x94, 0xc4, 0xfc, 0x08, 0x6b, 0x58, 0x8e, 0x8c, 0xbf, 0x14,
0xa0, 0x7c, 0xca, 0x45, 0xf4, 0x43, 0x28, 0xc5, 0x73, 0xb6, 0x59, 0x51, 0xeb, 0xfa, 0x6a, 0x06,
0x2c, 0x32, 0x16, 0xd3, 0xa8, 0x0f, 0xf5, 0x3b, 0x9f, 0x04, 0x1e, 0x2f, 0xdd, 0x41, 0xe4, 0x09,
0x56, 0xd4, 0x5b, 0x9f, 0xae, 0x3a, 0x88, 0x98, 0xcd, 0xd3, 0x9c, 0x21, 0x7e, 0xe1, 0x68, 0xbc,
0x83, 0x7a, 0xde, 0x82, 0x95, 0x93, 0x89, 0xb1, 0x33, 0x1a, 0x3a, 0x83, 0xfe, 0x78, 0xd0, 0xb6,
0xbb, 0xe7, 0xfa, 0x1a, 0xaf, 0x18, 0x73, 0x6c, 0x3b, 0xe6, 0xe9, 0xe9, 0x08, 0xdb, 0x7a, 0xc1,
0xf8, 0x53, 0x11, 0xd6, 0x05, 0x28, 0xe3, 0x68, 0x1e, 0x4f, 0x08, 0x3b, 0xc5, 0x47, 0xf2, 0x9c,
0xcc, 0xdc, 0x09, 0x49, 0x4f, 0x31, 0x1d, 0x33, 0x40, 0x92, 0x07, 0x37, 0xf6, 0xe4, 0xce, 0xc5,
0x00, 0xfd, 0x02, 0x34, 0x7e, 0x9a, 0xd4, 0xa1, 0xcf, 0x33, 0xc2, 0xcf, 0xb1, 0xde, 0xda, 0x59,
0x12, 0x9b, 0x9f, 0x15, 0xb5, 0x9f, 0x67, 0x04, 0x03, 0xcd, 0xe4, 0x7c, 0x35, 0xa8, 0x6f, 0xa8,
0x86, 0x25, 0x87, 0x4a, 0x39, 0x0e, 0x1d, 0x67, 0x07, 0x52, 0x96, 0x51, 0x5e, 0xa1, 0x97, 0x1e,
0x12, 0x6a, 0x42, 0x39, 0x0a, 0x1d, 0xcf, 0x0b, 0x1a, 0x15, 0x9e, 0xe6, 0x77, 0x56, 0x6d, 0x47,
0x61, 0xaf, 0x67, 0xb5, 0x05, 0x2d, 0x4a, 0x51, 0xd8, 0xf3, 0x02, 0xe3, 0x3d, 0xd4, 0x70, 0xf4,
0xd4, 0x7d, 0xe0, 0x09, 0x18, 0x50, 0xbe, 0x25, 0x77, 0x51, 0x4c, 0x24, 0xb3, 0x40, 0x76, 0x5e,
0x1c, 0x3d, 0x61, 0x39, 0x83, 0x0e, 0xa0, 0xe4, 0xde, 0xa5, 0xe4, 0xc8, 0x9b, 0x88, 0x09, 0xc3,
0x85, 0x2a, 0x8e, 0x9e, 0xf8, 0x39, 0xa1, 0x4f, 0x40, 0x20, 0xe2, 0x84, 0xee, 0x34, 0x85, 0xbb,
0xc6, 0x35, 0x43, 0x77, 0x4a, 0xd0, 0x3b, 0xd0, 0xe2, 0xe8, 0xc9, 0x99, 0xf0, 0xe5, 0x45, 0xe9,
0x68, 0xad, 0xdd, 0x1c, 0x9b, 0xd2, 0xe4, 0x30, 0xc4, 0xa9, 0x98, 0x18, 0xef, 0x01, 0x96, 0x64,
0xf8, 0xd8, 0x22, 0x3f, 0x60, 0xf0, 0x91, 0xc0, 0x4b, 0xe3, 0xaf, 0xcb, 0x94, 0x79, 0x04, 0x2c,
0xe7, 0x18, 0x10, 0x63, 0x76, 0xda, 0x67, 0xd4, 0xf7, 0xfe, 0x0b, 0x8e, 0x20, 0x50, 0xef, 0xa9,
0xef, 0x71, 0x72, 0xd4, 0x30, 0x97, 0x8d, 0x2f, 0xa0, 0x74, 0xc3, 0xc3, 0xbd, 0x03, 0x8d, 0x5b,
0x39, 0x4c, 0x9d, 0x16, 0x4d, 0x6e, 0x9b, 0xd9, 0xd2, 0x18, 0x92, 0x54, 0x4c, 0x8c, 0x36, 0x6c,
0x5c, 0xca, 0x65, 0xb9, 0xc1, 0xb7, 0xcf, 0xcb, 0xf8, 0x6b, 0x11, 0x2a, 0x17, 0xd1, 0x3c, 0x0e,
0xdd, 0x00, 0xd5, 0xa1, 0xe8, 0x7b, 0xdc, 0x4f, 0xc1, 0x45, 0xdf, 0x43, 0xbf, 0x86, 0xfa, 0xd4,
0xbf, 0x8f, 0x5d, 0xc6, 0x07, 0x41, 0x6d, 0x51, 0x9d, 0xdf, 0x5d, 0xcd, 0x6c, 0x90, 0x5a, 0x70,
0x7e, 0x6f, 0x4c, 0x57, 0x87, 0x2b, 0x8c, 0x55, 0x72, 0x8c, 0xfd, 0x0c, 0xea, 0x41, 0x34, 0x71,
0x03, 0x27, 0xeb, 0x97, 0x2a, 0x4f, 0x6a, 0x83, 0x6b, 0xaf, 0xd2, 0xa6, 0xf9, 0x02, 0x97, 0xd2,
0x1b, 0x71, 0x41, 0x9f, 0xc3, 0xfa, 0xcc, 0x8d, 0xa9, 0x3f, 0xf1, 0x67, 0x2e, 0xfb, 0xe3, 0x28,
0x73, 0xc7, 0x5c, 0xda, 0x39, 0xdc, 0x70, 0xce, 0x1c, 0x7d, 0x0a, 0xeb, 0x31, 0x59, 0x90, 0x38,
0x21, 0x9e, 0xc3, 0xd6, 0xad, 0x1c, 0x28, 0x47, 0x0a, 0xd6, 0x52, 0x5d, 0xdf, 0x4b, 0x8c, 0x7f,
0x16, 0xa1, 0x7c, 0x23, 0xd8, 0x75, 0x0c, 0x2a, 0xc7, 0x46, 0xfc, 0x4d, 0xec, 0xad, 0x2e, 0x22,
0x2c, 0x38, 0x30, 0xdc, 0x06, 0x7d, 0x0f, 0x6a, 0xd4, 0x9f, 0x92, 0x84, 0xba, 0xd3, 0x19, 0x07,
0x53, 0xc1, 0x4b, 0xc5, 0xd7, 0x71, 0x84, 0xfd, 0x32, 0xb0, 0x62, 0x15, 0xf0, 0x30, 0x11, 0xfd,
0x14, 0x6a, 0xac, 0x26, 0xf8, 0x1f, 0x4e, 0xa3, 0xc4, 0x8b, 0x6c, 0xe7, 0x45, 0x45, 0xf0, 0x65,
0x71, 0x35, 0x4e, 0xab, 0xec, 0x97, 0xa0, 0x71, 0x16, 0x4b, 0x27, 0xd1, 0x25, 0xf6, 0xf2, 0x5d,
0x22, 0xad, 0x16, 0x0c, 0xcb, 0xc6, 0x8a, 0x0e, 0xa1, 0xb4, 0xe0, 0x29, 0x55, 0xe4, 0x9f, 0xd6,
0xea, 0xe6, 0x38, 0xec, 0x62, 0x9e, 0x5d, 0x63, 0xbf, 0x15, 0x2c, 0x6a, 0x54, 0x5f, 0x5f, 0x63,
0x92, 0x60, 0x38, 0xb5, 0x61, 0x08, 0x4f, 0xe6, 0x71, 0xcc, 0xff, 0xe4, 0xfc, 0x29, 0x69, 0xec,
0x70, 0x28, 0x34, 0xa9, 0xb3, 0xfd, 0x29, 0x31, 0xfe, 0x50, 0x84, 0xfa, 0x8d, 0xb8, 0xeb, 0xd2,
0xfb, 0xf5, 0x0b, 0xd8, 0x26, 0x77, 0x77, 0x64, 0x42, 0xfd, 0x05, 0x71, 0x26, 0x6e, 0x10, 0x90,
0xd8, 0x91, 0x84, 0xd5, 0x5a, 0x9b, 0x4d, 0xf1, 0xcf, 0xdb, 0xe5, 0xfa, 0x7e, 0x0f, 0x6f, 0x65,
0xb6, 0x52, 0xe5, 0x21, 0x13, 0xb6, 0xfd, 0xe9, 0x94, 0x78, 0xbe, 0x4b, 0x57, 0x03, 0x88, 0x4e,
0xb5, 0x2b, 0xcb, 0xfe, 0xc6, 0x3e, 0x73, 0x29, 0x59, 0x86, 0xc9, 0x3c, 0xb2, 0x30, 0x9f, 0x31,
0x56, 0xc7, 0xf7, 0xd9, 0x95, 0xbd, 0x21, 0x3d, 0x6d, 0xae, 0xc4, 0x72, 0x32, 0xf7, 0x3b, 0xa0,
0xbe, 0xf8, 0x1d, 0x58, 0xb6, 0xec, 0xd2, 0xc7, 0x5a, 0xb6, 0xf1, 0x39, 0x6c, 0x66, 0x40, 0xc8,
0xeb, 0xfe, 0x18, 0xca, 0xfc, 0x28, 0xd3, 0x5e, 0x81, 0x5e, 0xb3, 0x0e, 0x4b, 0x0b, 0xe3, 0xf7,
0x45, 0x40, 0xa9, 0x7f, 0xf4, 0x94, 0xfc, 0x9f, 0x82, 0xb9, 0x03, 0x25, 0xae, 0x97, 0x48, 0x8a,
0x01, 0xc3, 0x21, 0x70, 0x13, 0x3a, 0x7b, 0xcc, 0x60, 0x14, 0xce, 0xef, 0xd9, 0x17, 0x93, 0x64,
0x1e, 0x50, 0x2c, 0x2d, 0x8c, 0xbf, 0x15, 0x60, 0x3b, 0x87, 0x83, 0xc4, 0x72, 0xd9, 0xfe, 0x0b,
0xff, 0xb9, 0xfd, 0xa3, 0x23, 0xa8, 0xce, 0x1e, 0xbf, 0xe1, 0x9a, 0xc8, 0x66, 0xbf, 0xb6, 0x8a,
0xbf, 0x0f, 0x6a, 0x1c, 0x3d, 0x25, 0x0d, 0x95, 0x7b, 0xae, 0xde, 0x89, 0x5c, 0xcf, 0x2e, 0xd6,
0xdc, 0x3e, 0x72, 0x17, 0xab, 0x98, 0x39, 0xfe, 0x15, 0x68, 0x2b, 0xf7, 0x33, 0xfb, 0x8d, 0xef,
0x9f, 0x0d, 0x47, 0xd8, 0xd4, 0xd7, 0x50, 0x15, 0xd4, 0xb1, 0x3d, 0xba, 0xd2, 0x0b, 0x4c, 0x32,
0x7f, 0x63, 0x76, 0xc5, 0xd3, 0x80, 0x49, 0x8e, 0x34, 0x52, 0x8e, 0xff, 0x51, 0x00, 0x58, 0x36,
0x24, 0xa4, 0x41, 0xe5, 0x7a, 0x78, 0x39, 0x1c, 0x7d, 0x39, 0x14, 0x01, 0xce, 0xec, 0x7e, 0x4f,
0x2f, 0xa0, 0x1a, 0x94, 0xc4, 0x5b, 0xa3, 0xc8, 0x56, 0x90, 0x0f, 0x0d, 0x85, 0xbd, 0x42, 0xb2,
0x57, 0x86, 0x8a, 0x2a, 0xa0, 0x64, 0x6f, 0x09, 0xf9, 0x78, 0x28, 0xb3, 0x80, 0xd8, 0xbc, 0xb2,
0xda, 0x5d, 0x53, 0xaf, 0xb0, 0x89, 0xec, 0x19, 0x01, 0x50, 0x4e, 0xdf, 0x10, 0xcc, 0x93, 0xbd,
0x3c, 0x80, 0xad, 0x33, 0xb2, 0xcf, 0x4d, 0xac, 0x6b, 0x4c, 0x87, 0x47, 0x5f, 0xea, 0xeb, 0x4c,
0x77, 0xda, 0x37, 0xad, 0x9e, 0xbe, 0xc1, 0x9e, 0x1e, 0xe7, 0x66, 0x1b, 0xdb, 0x1d, 0xb3, 0x6d,
0xeb, 0x75, 0x36, 0x73, 0xc3, 0x13, 0xdc, 0x64, 0xcb, 0x5c, 0x8c, 0xae, 0xf1, 0xb0, 0x6d, 0xe9,
0xfa, 0xf1, 0x21, 0x6c, 0xe4, 0xee, 0x1f, 0xb6, 0x96, 0xdd, 0xee, 0x58, 0xe6, 0x58, 0x5f, 0x63,
0xf2, 0xf8, 0xbc, 0x8d, 0x7b, 0x63, 0xbd, 0xd0, 0xf9, 0xd1, 0x57, 0x87, 0x0b, 0x9f, 0x92, 0x24,
0x69, 0xfa, 0xd1, 0x89, 0x90, 0x4e, 0xee, 0xa3, 0x93, 0x05, 0x3d, 0xe1, 0xcf, 0xe0, 0x93, 0x65,
0xf9, 0xdc, 0x96, 0xb9, 0xe6, 0x67, 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x13, 0xef, 0x5d, 0xd6,
0x62, 0x0f, 0x00, 0x00,
}

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

@ -6,12 +6,11 @@ package binlogservice
import (
context "context"
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
binlogdata "vitess.io/vitess/go/vt/proto/binlogdata"
)

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

@ -5,9 +5,8 @@ package logutil
import (
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
math "math"
)
// Reference imports to suppress errors if they are not otherwise used.

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

@ -6,12 +6,11 @@ package mysqlctl
import (
context "context"
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
)
// Reference imports to suppress errors if they are not otherwise used.

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

@ -5,9 +5,8 @@ package query
import (
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
math "math"
topodata "vitess.io/vitess/go/vt/proto/topodata"
vtrpc "vitess.io/vitess/go/vt/proto/vtrpc"
)

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

@ -6,12 +6,11 @@ package queryservice
import (
context "context"
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
binlogdata "vitess.io/vitess/go/vt/proto/binlogdata"
query "vitess.io/vitess/go/vt/proto/query"
)

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

@ -5,9 +5,8 @@ package replicationdata
import (
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
math "math"
)
// Reference imports to suppress errors if they are not otherwise used.

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

@ -5,9 +5,8 @@ package tableacl
import (
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
math "math"
)
// Reference imports to suppress errors if they are not otherwise used.

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

@ -5,9 +5,8 @@ package tabletmanagerdata
import (
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
math "math"
logutil "vitess.io/vitess/go/vt/proto/logutil"
query "vitess.io/vitess/go/vt/proto/query"
replicationdata "vitess.io/vitess/go/vt/proto/replicationdata"

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

@ -6,12 +6,11 @@ package tabletmanagerservice
import (
context "context"
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
tabletmanagerdata "vitess.io/vitess/go/vt/proto/tabletmanagerdata"
)

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

@ -5,9 +5,8 @@ package throttlerdata
import (
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
math "math"
)
// Reference imports to suppress errors if they are not otherwise used.

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

@ -6,12 +6,11 @@ package throttlerservice
import (
context "context"
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
throttlerdata "vitess.io/vitess/go/vt/proto/throttlerdata"
)

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

@ -5,9 +5,8 @@ package topodata
import (
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
math "math"
)
// Reference imports to suppress errors if they are not otherwise used.

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

@ -5,9 +5,8 @@ package vschema
import (
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
math "math"
query "vitess.io/vitess/go/vt/proto/query"
)

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

@ -5,9 +5,8 @@ package vtctldata
import (
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
math "math"
logutil "vitess.io/vitess/go/vt/proto/logutil"
)

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

@ -6,12 +6,11 @@ package vtctlservice
import (
context "context"
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
vtctldata "vitess.io/vitess/go/vt/proto/vtctldata"
)

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

@ -5,9 +5,8 @@ package vtgate
import (
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
math "math"
binlogdata "vitess.io/vitess/go/vt/proto/binlogdata"
query "vitess.io/vitess/go/vt/proto/query"
topodata "vitess.io/vitess/go/vt/proto/topodata"

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

@ -6,12 +6,11 @@ package vtgateservice
import (
context "context"
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
query "vitess.io/vitess/go/vt/proto/query"
vtgate "vitess.io/vitess/go/vt/proto/vtgate"
)

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

@ -5,9 +5,8 @@ package vtrpc
import (
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
math "math"
)
// Reference imports to suppress errors if they are not otherwise used.

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

@ -5,9 +5,8 @@ package vttest
import (
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
math "math"
)
// Reference imports to suppress errors if they are not otherwise used.

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

@ -5,9 +5,8 @@ package vtworkerdata
import (
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
math "math"
logutil "vitess.io/vitess/go/vt/proto/logutil"
)

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

@ -6,12 +6,11 @@ package vtworkerservice
import (
context "context"
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
vtworkerdata "vitess.io/vitess/go/vt/proto/vtworkerdata"
)

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

@ -5,9 +5,8 @@ package workflow
import (
fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto"
math "math"
)
// Reference imports to suppress errors if they are not otherwise used.

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

@ -62,7 +62,7 @@ func TestUpdateVSchema(t *testing.T) {
}},
}
_ = startStream(ctx, t, filter)
_ = startStream(ctx, t, filter, "")
cancel()
startCount := expectUpdateCount(t, 1)

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

@ -72,6 +72,9 @@ func (plan *Plan) fields() []*querypb.Field {
func (plan *Plan) filter(values []sqltypes.Value) (bool, []sqltypes.Value, error) {
result := make([]sqltypes.Value, len(plan.ColExprs))
for i, colExpr := range plan.ColExprs {
if colExpr.ColNum >= len(values) {
return false, nil, fmt.Errorf("index out of range. colExpr.ColNum: %d len(values):%d!!", colExpr.ColNum, len(values))
}
result[i] = values[colExpr.ColNum]
}
if plan.Vindex == nil {

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

@ -342,17 +342,50 @@ func (vs *vstreamer) parseEvent(ev mysql.BinlogEvent) ([]*binlogdatapb.VEvent, e
vs.plans[id] = nil
return nil, nil
}
tableName := tm.Name
var cols []schema.TableColumn
for i, typ := range tm.Types {
t, err := sqltypes.MySQLToType(int64(typ), 0)
if err != nil {
return nil, fmt.Errorf("unsupported type: %d, position: %d", typ, i)
}
cols = append(cols, schema.TableColumn{
Name: sqlparser.NewColIdent(fmt.Sprintf("@%d", i+1)),
Type: t,
})
}
st := vs.se.GetTable(sqlparser.NewTableIdent(tm.Name))
if st == nil {
return nil, fmt.Errorf("unknown table %v in schema", tm.Name)
}
if len(st.Columns) < len(tm.Types) {
return nil, fmt.Errorf("cannot determine table columns for %s: event has %d columns, current schema has %d: %#v", tm.Name, len(tm.Types), len(st.Columns), ev)
if vs.filter.FieldEventMode == binlogdatapb.Filter_ERR_ON_MISMATCH {
return nil, fmt.Errorf("unknown table %v in schema", tm.Name)
}
} else {
if len(st.Columns) < len(tm.Types) && vs.filter.FieldEventMode == binlogdatapb.Filter_ERR_ON_MISMATCH {
return nil, fmt.Errorf("cannot determine table columns for %s: event has %d columns, current schema has %d: %#v", tm.Name, len(tm.Types), len(st.Columns), ev)
}
tableName = st.Name.String()
// check if the schema returned by schema.Engine matches with row.
schemaMatch := true
if len(tm.Types) <= len(st.Columns) {
for i := range tm.Types {
t := cols[i].Type
if !sqltypes.AreTypesEquivalent(t, st.Columns[i].Type) {
schemaMatch = false
break
}
}
} else {
schemaMatch = false
}
if schemaMatch {
// Columns should be truncated to match those in tm.
cols = st.Columns[:len(tm.Types)]
}
}
table := &Table{
Name: st.Name.String(),
// Columns should be truncated to match those in tm.
Columns: st.Columns[:len(tm.Types)],
Name: tableName,
Columns: cols,
}
plan, err := buildPlan(table, vs.kschema, vs.filter)
if err != nil {

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

@ -130,7 +130,7 @@ func TestStatements(t *testing.T) {
}, {
input: "describe stream1",
}}
runCases(t, nil, testcases)
runCases(t, nil, testcases, "")
}
func TestRegexp(t *testing.T) {
@ -172,7 +172,7 @@ func TestRegexp(t *testing.T) {
`commit`,
}},
}}
runCases(t, filter, testcases)
runCases(t, filter, testcases, "")
}
func TestREKeyRange(t *testing.T) {
@ -202,7 +202,7 @@ func TestREKeyRange(t *testing.T) {
Filter: "-80",
}},
}
ch := startStream(ctx, t, filter)
ch := startStream(ctx, t, filter, "")
// 1, 2, 3 and 5 are in shard -80.
// 4 and 6 are in shard 80-.
@ -306,7 +306,7 @@ func TestSelectFilter(t *testing.T) {
`commit`,
}},
}}
runCases(t, filter, testcases)
runCases(t, filter, testcases, "")
}
func TestDDLAddColumn(t *testing.T) {
@ -446,7 +446,7 @@ func TestUnsentDDL(t *testing.T) {
Match: "/none/",
}},
}
runCases(t, filter, testcases)
runCases(t, filter, testcases, "")
}
func TestBuffering(t *testing.T) {
@ -546,7 +546,57 @@ func TestBuffering(t *testing.T) {
`type:DDL ddl:"alter table packet_test change val val varchar(128)" `,
}},
}}
runCases(t, nil, testcases)
runCases(t, nil, testcases, "")
}
func TestBestEffortNameInFieldEvent(t *testing.T) {
if testing.Short() {
t.Skip()
}
filter := &binlogdatapb.Filter{
FieldEventMode: binlogdatapb.Filter_BEST_EFFORT,
Rules: []*binlogdatapb.Rule{{
Match: "/.*/",
}},
}
// Modeled after vttablet endtoend compatibility tests.
execStatements(t, []string{
"create table vitess_test(id int, val varbinary(128), primary key(id))",
})
position := masterPosition(t)
execStatements(t, []string{
"insert into vitess_test values(1, 'abc')",
"rename table vitess_test to vitess_test_new",
})
defer execStatements(t, []string{
"drop table vitess_test_new",
})
engine.se.Reload(context.Background())
testcases := []testcase{{
input: []string{
"insert into vitess_test_new values(2, 'abc')",
},
// In this case, we don't have information about vitess_test since it was renamed to vitess_test_test.
// information returned by binlog for val column == varchar (rather than varbinary).
output: [][]string{{
`gtid|begin`,
`gtid|begin`,
`type:FIELD field_event:<table_name:"vitess_test" fields:<name:"@1" type:INT32 > fields:<name:"@2" type:VARCHAR > > `,
`type:ROW row_event:<table_name:"vitess_test" row_changes:<after:<lengths:1 lengths:3 values:"1abc" > > > `,
`commit`,
}, {
`gtid|begin`,
`type:DDL ddl:"rename table vitess_test to vitess_test_new" `,
}, {
`gtid|begin`,
`gtid|begin`,
`type:FIELD field_event:<table_name:"vitess_test_new" fields:<name:"id" type:INT32 > fields:<name:"val" type:VARBINARY > > `,
`type:ROW row_event:<table_name:"vitess_test_new" row_changes:<after:<lengths:1 lengths:3 values:"2abc" > > > `,
`commit`,
}},
}}
runCases(t, filter, testcases, position)
}
func TestTypes(t *testing.T) {
@ -687,7 +737,7 @@ func TestTypes(t *testing.T) {
`commit`,
}},
}}
runCases(t, nil, testcases)
runCases(t, nil, testcases, "")
}
func TestJSON(t *testing.T) {
@ -716,7 +766,7 @@ func TestJSON(t *testing.T) {
`commit`,
}},
}}
runCases(t, nil, testcases)
runCases(t, nil, testcases, "")
}
func TestExternalTable(t *testing.T) {
@ -746,7 +796,7 @@ func TestExternalTable(t *testing.T) {
`commit`,
}},
}}
runCases(t, nil, testcases)
runCases(t, nil, testcases, "")
}
func TestMinimalMode(t *testing.T) {
@ -827,12 +877,11 @@ func TestStatementMode(t *testing.T) {
}
}
func runCases(t *testing.T, filter *binlogdatapb.Filter, testcases []testcase) {
func runCases(t *testing.T, filter *binlogdatapb.Filter, testcases []testcase, postion string) {
t.Helper()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
ch := startStream(ctx, t, filter)
ch := startStream(ctx, t, filter, postion)
for _, tcase := range testcases {
switch input := tcase.input.(type) {
@ -853,7 +902,6 @@ func runCases(t *testing.T, filter *binlogdatapb.Filter, testcases []testcase) {
func expectLog(ctx context.Context, t *testing.T, input interface{}, ch <-chan []*binlogdatapb.VEvent, output [][]string) {
t.Helper()
for _, wantset := range output {
var evs []*binlogdatapb.VEvent
var ok bool
@ -897,13 +945,15 @@ func expectLog(ctx context.Context, t *testing.T, input interface{}, ch <-chan [
}
}
func startStream(ctx context.Context, t *testing.T, filter *binlogdatapb.Filter) <-chan []*binlogdatapb.VEvent {
pos := masterPosition(t)
func startStream(ctx context.Context, t *testing.T, filter *binlogdatapb.Filter, position string) <-chan []*binlogdatapb.VEvent {
if position == "" {
position = masterPosition(t)
}
ch := make(chan []*binlogdatapb.VEvent)
go func() {
defer close(ch)
if err := vstream(ctx, t, pos, filter, ch); err != nil {
if err := vstream(ctx, t, position, filter, ch); err != nil {
t.Error(err)
}
}()

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

@ -130,6 +130,11 @@ message Rule {
// wins.
message Filter {
repeated Rule rules = 1;
enum FieldEventMode {
ERR_ON_MISMATCH = 0;
BEST_EFFORT = 1;
}
FieldEventMode fieldEventMode = 2;
}
// OnDDLAction lists the possible actions for DDLs.

Различия файлов скрыты, потому что одна или несколько строк слишком длинны