diff --git a/go/mysql/binlog_event_filepos.go b/go/mysql/binlog_event_filepos.go index 5080a323691..9b2b6e1cef8 100644 --- a/go/mysql/binlog_event_filepos.go +++ b/go/mysql/binlog_event_filepos.go @@ -106,9 +106,11 @@ func (ev filePosQueryEvent) Query(BinlogFormat) (Query, error) { }, nil } -//---------------------------------------------------------------------------- +func (ev filePosQueryEvent) StripChecksum(f BinlogFormat) (BinlogEvent, []byte, error) { + return ev, nil, nil +} -var _ BinlogEvent = filePosFakeEvent{} +//---------------------------------------------------------------------------- // filePosFakeEvent is the base class for fake events. type filePosFakeEvent struct { @@ -207,10 +209,6 @@ func (ev filePosFakeEvent) Rows(BinlogFormat, *TableMap) (Rows, error) { return Rows{}, nil } -func (ev filePosFakeEvent) StripChecksum(f BinlogFormat) (BinlogEvent, []byte, error) { - return ev, nil, nil -} - func (ev filePosFakeEvent) IsPseudo() bool { return false } @@ -239,6 +237,10 @@ func (ev filePosGTIDEvent) IsGTID() bool { return true } +func (ev filePosGTIDEvent) StripChecksum(f BinlogFormat) (BinlogEvent, []byte, error) { + return ev, nil, nil +} + func (ev filePosGTIDEvent) GTID(BinlogFormat) (GTID, bool, error) { return ev.gtid, false, nil } diff --git a/go/stats/prometheusbackend/prometheusbackend.go b/go/stats/prometheusbackend/prometheusbackend.go index fada0aaa4a2..f975a12f08b 100644 --- a/go/stats/prometheusbackend/prometheusbackend.go +++ b/go/stats/prometheusbackend/prometheusbackend.go @@ -82,7 +82,7 @@ func (be PromBackend) publishPrometheusMetric(name string, v expvar.Var) { newMultiTimingsCollector(st, be.buildPromName(name)) case *stats.Histogram: newHistogramCollector(st, be.buildPromName(name)) - case *stats.String, stats.StringFunc, stats.StringMapFunc, *stats.Rates: + case *stats.String, stats.StringFunc, stats.StringMapFunc, *stats.Rates, *stats.RatesFunc: // Silently ignore these types since they don't make sense to // export to Prometheus' data model. default: diff --git a/go/stats/rates.go b/go/stats/rates.go index 2c7a556d3f0..7aa4f7d3ce7 100644 --- a/go/stats/rates.go +++ b/go/stats/rates.go @@ -182,3 +182,32 @@ func (rt *Rates) String() string { } return string(data) } + +type RatesFunc struct { + F func() map[string][]float64 + help string +} + +func NewRateFunc(name string, help string, f func() map[string][]float64) *RatesFunc { + c := &RatesFunc{ + F: f, + help: help, + } + + if name != "" { + publish(name, c) + } + return c +} + +func (rf *RatesFunc) Help() string { + return rf.help +} + +func (rf *RatesFunc) String() string { + data, err := json.Marshal(rf.F()) + if err != nil { + data, _ = json.Marshal(err.Error()) + } + return string(data) +} diff --git a/go/vt/binlog/binlogplayer/binlog_player.go b/go/vt/binlog/binlogplayer/binlog_player.go index 993a1ed8b22..d7614759a2c 100644 --- a/go/vt/binlog/binlogplayer/binlog_player.go +++ b/go/vt/binlog/binlogplayer/binlog_player.go @@ -111,7 +111,7 @@ func (bps *Stats) MessageHistory() []string { func NewStats() *Stats { bps := &Stats{} bps.Timings = stats.NewTimings("", "", "") - bps.Rates = stats.NewRates("", bps.Timings, 15, 60e9) + bps.Rates = stats.NewRates("", bps.Timings, 15*60/5, 5*time.Second) bps.History = history.New(3) bps.SecondsBehindMaster.Set(math.MaxInt64) return bps @@ -202,6 +202,7 @@ func (blp *BinlogPlayer) applyEvents(ctx context.Context) error { log.Error(err) return err } + blp.position = settings.StartPos blp.stopPosition = settings.StopPos t, err := throttler.NewThrottler( diff --git a/go/vt/dbconfigs/dbconfigs.go b/go/vt/dbconfigs/dbconfigs.go index fc39c4011d4..c9df1ab26c8 100644 --- a/go/vt/dbconfigs/dbconfigs.go +++ b/go/vt/dbconfigs/dbconfigs.go @@ -69,14 +69,15 @@ const ( // AllPrivs user should have more privileges than App (should include possibility to do // schema changes and write to internal Vitess tables), but it shouldn't have SUPER // privilege like Dba has. - AllPrivs = "allprivs" - Dba = "dba" - Filtered = "filtered" - Repl = "repl" + AllPrivs = "allprivs" + Dba = "dba" + Filtered = "filtered" + Repl = "repl" + ExternalRepl = "erepl" ) // All can be used to register all flags: RegisterFlags(All...) -var All = []string{App, AppDebug, AllPrivs, Dba, Filtered, Repl} +var All = []string{App, AppDebug, AllPrivs, Dba, Filtered, Repl, ExternalRepl} // RegisterFlags registers the flags for the given DBConfigFlag. // For instance, vttablet will register client, dba and repl. @@ -128,6 +129,7 @@ func registerPerUserFlags(dbc *userConfig, userKey string) { flag.StringVar(&dbc.param.SslCert, "db-config-"+userKey+"-ssl-cert", "", "deprecated: use db_ssl_cert") flag.StringVar(&dbc.param.SslKey, "db-config-"+userKey+"-ssl-key", "", "deprecated: use db_ssl_key") flag.StringVar(&dbc.param.ServerName, "db-config-"+userKey+"-server_name", "", "deprecated: use db_server_name") + flag.StringVar(&dbc.param.Flavor, "db-config-"+userKey+"-flavor", "", "deprecated: use db_flavor") flag.StringVar(&dbc.param.DeprecatedDBName, "db-config-"+userKey+"-dbname", "", "deprecated: dbname does not need to be explicitly configured") @@ -158,16 +160,33 @@ func (dbcfgs *DBConfigs) DbaWithDB() *mysql.ConnParams { return dbcfgs.makeParams(Dba, true) } -// FilteredWithDB returns connection parameters for appdebug with dbname set. +// FilteredWithDB returns connection parameters for filtered with dbname set. func (dbcfgs *DBConfigs) FilteredWithDB() *mysql.ConnParams { return dbcfgs.makeParams(Filtered, true) } -// Repl returns connection parameters for appdebug with no dbname set. +// Repl returns connection parameters for repl with no dbname set. func (dbcfgs *DBConfigs) Repl() *mysql.ConnParams { return dbcfgs.makeParams(Repl, false) } +// ExternalRepl returns connection parameters for repl with no dbname set. +func (dbcfgs *DBConfigs) ExternalRepl() *mysql.ConnParams { + return dbcfgs.makeParams(ExternalRepl, true) +} + +// ExternalReplWithDB returns connection parameters for repl with dbname set. +func (dbcfgs *DBConfigs) ExternalReplWithDB() *mysql.ConnParams { + params := dbcfgs.makeParams(ExternalRepl, true) + // TODO @rafael: This is a hack to allows to configure external databases by providing + // db-config-erepl-dbname. + if params.DeprecatedDBName != "" { + params.DbName = params.DeprecatedDBName + return params + } + return params +} + // AppWithDB returns connection parameters for app with dbname set. func (dbcfgs *DBConfigs) makeParams(userKey string, withDB bool) *mysql.ConnParams { orig := dbcfgs.userConfigs[userKey] @@ -238,8 +257,13 @@ func HasConnectionParams() bool { // is used to initialize the per-user conn params. func Init(defaultSocketFile string) (*DBConfigs, error) { // The new base configs, if set, supersede legacy settings. - for _, uc := range dbConfigs.userConfigs { - if HasConnectionParams() { + for user, uc := range dbConfigs.userConfigs { + // TODO @rafael: For ExternalRepl we need to respect the provided host / port + // At the moment this is an snowflake user connection type that it used by + // vreplication to connect to external mysql hosts that are not part of a vitess + // cluster. In the future we need to refactor all dbconfig to support custom users + // in a more flexible way. + if HasConnectionParams() && user != ExternalRepl { uc.param.Host = baseConfig.Host uc.param.Port = baseConfig.Port uc.param.UnixSocket = baseConfig.UnixSocket @@ -253,7 +277,9 @@ func Init(defaultSocketFile string) (*DBConfigs, error) { if baseConfig.Flags != 0 { uc.param.Flags = baseConfig.Flags } - uc.param.Flavor = baseConfig.Flavor + if user != ExternalRepl { + uc.param.Flavor = baseConfig.Flavor + } if uc.useSSL { uc.param.SslCa = baseConfig.SslCa uc.param.SslCaPath = baseConfig.SslCaPath @@ -282,12 +308,13 @@ func Init(defaultSocketFile string) (*DBConfigs, error) { func NewTestDBConfigs(genParams, appDebugParams mysql.ConnParams, dbName string) *DBConfigs { dbcfgs := &DBConfigs{ userConfigs: map[string]*userConfig{ - App: {param: genParams}, - AppDebug: {param: appDebugParams}, - AllPrivs: {param: genParams}, - Dba: {param: genParams}, - Filtered: {param: genParams}, - Repl: {param: genParams}, + App: {param: genParams}, + AppDebug: {param: appDebugParams}, + AllPrivs: {param: genParams}, + Dba: {param: genParams}, + Filtered: {param: genParams}, + Repl: {param: genParams}, + ExternalRepl: {param: genParams}, }, } dbcfgs.DBName.Set(dbName) diff --git a/go/vt/proto/binlogdata/binlogdata.pb.go b/go/vt/proto/binlogdata/binlogdata.pb.go index 904d001d423..22b36bc0c54 100644 --- a/go/vt/proto/binlogdata/binlogdata.pb.go +++ b/go/vt/proto/binlogdata/binlogdata.pb.go @@ -716,10 +716,13 @@ type BinlogSource struct { // for the filter. Filter *Filter `protobuf:"bytes,6,opt,name=filter,proto3" json:"filter,omitempty"` // on_ddl specifies the action to be taken when a DDL is encountered. - OnDdl OnDDLAction `protobuf:"varint,7,opt,name=on_ddl,json=onDdl,proto3,enum=binlogdata.OnDDLAction" json:"on_ddl,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + OnDdl OnDDLAction `protobuf:"varint,7,opt,name=on_ddl,json=onDdl,proto3,enum=binlogdata.OnDDLAction" json:"on_ddl,omitempty"` + // Source is an external mysql. This attribute should be set to the username + // to use in the connection + ExternalMysql string `protobuf:"bytes,8,opt,name=external_mysql,json=externalMysql,proto3" json:"external_mysql,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *BinlogSource) Reset() { *m = BinlogSource{} } @@ -796,6 +799,13 @@ func (m *BinlogSource) GetOnDdl() OnDDLAction { return OnDDLAction_IGNORE } +func (m *BinlogSource) GetExternalMysql() string { + if m != nil { + return m.ExternalMysql + } + return "" +} + // RowChange represents one row change type RowChange struct { Before *query.Row `protobuf:"bytes,1,opt,name=before,proto3" json:"before,omitempty"` @@ -1177,6 +1187,7 @@ type VEvent struct { FieldEvent *FieldEvent `protobuf:"bytes,6,opt,name=field_event,json=fieldEvent,proto3" json:"field_event,omitempty"` Vgtid *VGtid `protobuf:"bytes,7,opt,name=vgtid,proto3" json:"vgtid,omitempty"` Journal *Journal `protobuf:"bytes,8,opt,name=journal,proto3" json:"journal,omitempty"` + Dml string `protobuf:"bytes,9,opt,name=dml,proto3" json:"dml,omitempty"` // current_time specifies the current time to handle clock skew. CurrentTime int64 `protobuf:"varint,20,opt,name=current_time,json=currentTime,proto3" json:"current_time,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -1265,6 +1276,13 @@ func (m *VEvent) GetJournal() *Journal { return nil } +func (m *VEvent) GetDml() string { + if m != nil { + return m.Dml + } + return "" +} + func (m *VEvent) GetCurrentTime() int64 { if m != nil { return m.CurrentTime @@ -1685,108 +1703,110 @@ func init() { func init() { proto.RegisterFile("binlogdata.proto", fileDescriptor_5fd02bcb2e350dad) } var fileDescriptor_5fd02bcb2e350dad = []byte{ - // 1648 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0x4b, 0x73, 0xe3, 0x4a, - 0x15, 0x8e, 0x6c, 0xf9, 0x75, 0x94, 0x38, 0x4a, 0xe7, 0x81, 0x49, 0x71, 0xa9, 0x5c, 0x15, 0x97, - 0xe4, 0xa6, 0x0a, 0x07, 0x0c, 0x0c, 0xab, 0xcb, 0xc5, 0x0f, 0x25, 0x71, 0x22, 0xdb, 0x99, 0xb6, - 0x92, 0xa1, 0x66, 0xa3, 0x52, 0xec, 0x76, 0x22, 0x22, 0x4b, 0x1e, 0xa9, 0x9d, 0x90, 0x1f, 0x40, - 0xf1, 0x03, 0xd8, 0xf2, 0x07, 0x58, 0xb3, 0x85, 0x2d, 0x7b, 0xf6, 0x54, 0xb1, 0xe2, 0x7f, 0x50, - 0xfd, 0x90, 0x6c, 0x25, 0xc3, 0x4c, 0x66, 0xaa, 0x58, 0xc0, 0xc6, 0x75, 0xfa, 0xf4, 0x39, 0xa7, - 0xcf, 0xf9, 0xce, 0xa3, 0xd5, 0x06, 0xfd, 0xda, 0x0b, 0xfc, 0xf0, 0x66, 0xec, 0x52, 0xb7, 0x3e, - 0x8b, 0x42, 0x1a, 0x22, 0x58, 0x70, 0x76, 0xb5, 0x7b, 0x1a, 0xcd, 0x46, 0x62, 0x63, 0x57, 0x7b, - 0x37, 0x27, 0xd1, 0xa3, 0x5c, 0x54, 0x69, 0x38, 0x0b, 0x17, 0x5a, 0x46, 0x0f, 0x4a, 0xed, 0x5b, - 0x37, 0x8a, 0x09, 0x45, 0x3b, 0x50, 0x1c, 0xf9, 0x1e, 0x09, 0x68, 0x4d, 0xd9, 0x53, 0x0e, 0x0a, - 0x58, 0xae, 0x10, 0x02, 0x75, 0x14, 0x06, 0x41, 0x2d, 0xc7, 0xb9, 0x9c, 0x66, 0xb2, 0x31, 0x89, - 0xee, 0x49, 0x54, 0xcb, 0x0b, 0x59, 0xb1, 0x32, 0xfe, 0x95, 0x87, 0x8d, 0x16, 0xf7, 0xc3, 0x8e, - 0xdc, 0x20, 0x76, 0x47, 0xd4, 0x0b, 0x03, 0x74, 0x02, 0x10, 0x53, 0x97, 0x92, 0x29, 0x09, 0x68, - 0x5c, 0x53, 0xf6, 0xf2, 0x07, 0x5a, 0x63, 0xbf, 0xbe, 0x14, 0xc1, 0x33, 0x95, 0xfa, 0x30, 0x91, - 0xc7, 0x4b, 0xaa, 0xa8, 0x01, 0x1a, 0xb9, 0x27, 0x01, 0x75, 0x68, 0x78, 0x47, 0x82, 0x9a, 0xba, - 0xa7, 0x1c, 0x68, 0x8d, 0x8d, 0xba, 0x08, 0xd0, 0x64, 0x3b, 0x36, 0xdb, 0xc0, 0x40, 0x52, 0x7a, - 0xf7, 0x6f, 0x39, 0xa8, 0xa4, 0xd6, 0x90, 0x05, 0xe5, 0x91, 0x4b, 0xc9, 0x4d, 0x18, 0x3d, 0xf2, - 0x30, 0xab, 0x8d, 0x1f, 0xbf, 0xd0, 0x91, 0x7a, 0x5b, 0xea, 0xe1, 0xd4, 0x02, 0xfa, 0x11, 0x94, - 0x46, 0x02, 0x3d, 0x8e, 0x8e, 0xd6, 0xd8, 0x5c, 0x36, 0x26, 0x81, 0xc5, 0x89, 0x0c, 0xd2, 0x21, - 0x1f, 0xbf, 0xf3, 0x39, 0x64, 0xab, 0x98, 0x91, 0xc6, 0x9f, 0x14, 0x28, 0x27, 0x76, 0xd1, 0x26, - 0xac, 0xb7, 0x2c, 0xe7, 0xb2, 0x8f, 0xcd, 0xf6, 0xe0, 0xa4, 0xdf, 0x7d, 0x6b, 0x76, 0xf4, 0x15, - 0xb4, 0x0a, 0xe5, 0x96, 0xe5, 0xb4, 0xcc, 0x93, 0x6e, 0x5f, 0x57, 0xd0, 0x1a, 0x54, 0x5a, 0x96, - 0xd3, 0x1e, 0xf4, 0x7a, 0x5d, 0x5b, 0xcf, 0xa1, 0x75, 0xd0, 0x5a, 0x96, 0x83, 0x07, 0x96, 0xd5, - 0x6a, 0xb6, 0xcf, 0xf5, 0x3c, 0xda, 0x86, 0x8d, 0x96, 0xe5, 0x74, 0x7a, 0x96, 0xd3, 0x31, 0x2f, - 0xb0, 0xd9, 0x6e, 0xda, 0x66, 0x47, 0x57, 0x11, 0x40, 0x91, 0xb1, 0x3b, 0x96, 0x5e, 0x90, 0xf4, - 0xd0, 0xb4, 0xf5, 0xa2, 0x34, 0xd7, 0xed, 0x0f, 0x4d, 0x6c, 0xeb, 0x25, 0xb9, 0xbc, 0xbc, 0xe8, - 0x34, 0x6d, 0x53, 0x2f, 0xcb, 0x65, 0xc7, 0xb4, 0x4c, 0xdb, 0xd4, 0x2b, 0x67, 0x6a, 0x39, 0xa7, - 0xe7, 0xcf, 0xd4, 0x72, 0x5e, 0x57, 0x8d, 0x3f, 0x28, 0xb0, 0x3d, 0xa4, 0x11, 0x71, 0xa7, 0xe7, - 0xe4, 0x11, 0xbb, 0xc1, 0x0d, 0xc1, 0xe4, 0xdd, 0x9c, 0xc4, 0x14, 0xed, 0x42, 0x79, 0x16, 0xc6, - 0x1e, 0xc3, 0x8e, 0x03, 0x5c, 0xc1, 0xe9, 0x1a, 0x1d, 0x41, 0xe5, 0x8e, 0x3c, 0x3a, 0x11, 0x93, - 0x97, 0x80, 0xa1, 0x7a, 0x5a, 0x90, 0xa9, 0xa5, 0xf2, 0x9d, 0xa4, 0x96, 0xf1, 0xcd, 0x7f, 0x1c, - 0x5f, 0x63, 0x02, 0x3b, 0x4f, 0x9d, 0x8a, 0x67, 0x61, 0x10, 0x13, 0x64, 0x01, 0x12, 0x8a, 0x0e, - 0x5d, 0xe4, 0x96, 0xfb, 0xa7, 0x35, 0xbe, 0xf8, 0x60, 0x01, 0xe0, 0x8d, 0xeb, 0xa7, 0x2c, 0xe3, - 0xb7, 0xb0, 0x29, 0xce, 0xb1, 0xdd, 0x6b, 0x9f, 0xc4, 0x2f, 0x09, 0x7d, 0x07, 0x8a, 0x94, 0x0b, - 0xd7, 0x72, 0x7b, 0xf9, 0x83, 0x0a, 0x96, 0xab, 0x4f, 0x8d, 0x70, 0x0c, 0x5b, 0xd9, 0x93, 0xff, - 0x2b, 0xf1, 0xfd, 0x0c, 0x54, 0x3c, 0xf7, 0x09, 0xda, 0x82, 0xc2, 0xd4, 0xa5, 0xa3, 0x5b, 0x19, - 0x8d, 0x58, 0xb0, 0x50, 0x26, 0x9e, 0x4f, 0x49, 0xc4, 0x53, 0x58, 0xc1, 0x72, 0x65, 0xfc, 0x59, - 0x81, 0xe2, 0x31, 0x27, 0xd1, 0x0f, 0xa1, 0x10, 0xcd, 0x59, 0xb0, 0xa2, 0xd7, 0xf5, 0x65, 0x0f, - 0x98, 0x65, 0x2c, 0xb6, 0x51, 0x17, 0xaa, 0x13, 0x8f, 0xf8, 0x63, 0xde, 0xba, 0xbd, 0x70, 0x2c, - 0xaa, 0xa2, 0xda, 0xf8, 0x72, 0x59, 0x41, 0xd8, 0xac, 0x1f, 0x67, 0x04, 0xf1, 0x13, 0x45, 0xe3, - 0x15, 0x54, 0xb3, 0x12, 0xac, 0x9d, 0x4c, 0x8c, 0x9d, 0x41, 0xdf, 0xe9, 0x75, 0x87, 0xbd, 0xa6, - 0xdd, 0x3e, 0xd5, 0x57, 0x78, 0xc7, 0x98, 0x43, 0xdb, 0x31, 0x8f, 0x8f, 0x07, 0xd8, 0xd6, 0x15, - 0xe3, 0x8f, 0x39, 0x58, 0x15, 0xa0, 0x0c, 0xc3, 0x79, 0x34, 0x22, 0x2c, 0x8b, 0x77, 0xe4, 0x31, - 0x9e, 0xb9, 0x23, 0x92, 0x64, 0x31, 0x59, 0x33, 0x40, 0xe2, 0x5b, 0x37, 0x1a, 0xcb, 0xc8, 0xc5, - 0x02, 0xfd, 0x1c, 0x34, 0x9e, 0x4d, 0xea, 0xd0, 0xc7, 0x19, 0xe1, 0x79, 0xac, 0x36, 0xb6, 0x16, - 0x85, 0xcd, 0x73, 0x45, 0xed, 0xc7, 0x19, 0xc1, 0x40, 0x53, 0x3a, 0xdb, 0x0d, 0xea, 0x0b, 0xba, - 0x61, 0x51, 0x43, 0x85, 0x4c, 0x0d, 0x1d, 0xa6, 0x09, 0x29, 0x4a, 0x2b, 0xcf, 0xd0, 0x4b, 0x92, - 0x84, 0xea, 0x50, 0x0c, 0x03, 0x67, 0x3c, 0xf6, 0x6b, 0x25, 0xee, 0xe6, 0x77, 0x96, 0x65, 0x07, - 0x41, 0xa7, 0x63, 0x35, 0x45, 0x59, 0x14, 0xc2, 0xa0, 0x33, 0xf6, 0x8d, 0xd7, 0x50, 0xc1, 0xe1, - 0x43, 0xfb, 0x96, 0x3b, 0x60, 0x40, 0xf1, 0x9a, 0x4c, 0xc2, 0x88, 0xc8, 0xca, 0x02, 0x39, 0x79, - 0x71, 0xf8, 0x80, 0xe5, 0x0e, 0xda, 0x83, 0x82, 0x3b, 0x49, 0x8a, 0x23, 0x2b, 0x22, 0x36, 0x0c, - 0x17, 0xca, 0x38, 0x7c, 0xe0, 0x79, 0x42, 0x5f, 0x80, 0x40, 0xc4, 0x09, 0xdc, 0x69, 0x02, 0x77, - 0x85, 0x73, 0xfa, 0xee, 0x94, 0xa0, 0x57, 0xa0, 0x45, 0xe1, 0x83, 0x33, 0xe2, 0xc7, 0x8b, 0xd6, - 0xd1, 0x1a, 0xdb, 0x99, 0x6a, 0x4a, 0x9c, 0xc3, 0x10, 0x25, 0x64, 0x6c, 0xbc, 0x06, 0x58, 0x14, - 0xc3, 0xc7, 0x0e, 0xf9, 0x01, 0x83, 0x8f, 0xf8, 0xe3, 0xc4, 0xfe, 0xaa, 0x74, 0x99, 0x5b, 0xc0, - 0x72, 0x8f, 0x01, 0x31, 0x64, 0xd9, 0x3e, 0xa1, 0xde, 0xf8, 0x33, 0x6a, 0x04, 0x81, 0x7a, 0x43, - 0xbd, 0x31, 0x2f, 0x8e, 0x0a, 0xe6, 0xb4, 0xf1, 0x2d, 0x14, 0xae, 0xb8, 0xb9, 0x57, 0xa0, 0x71, - 0x29, 0x87, 0xb1, 0x93, 0xa6, 0xc9, 0x84, 0x99, 0x1e, 0x8d, 0x21, 0x4e, 0xc8, 0xd8, 0x68, 0xc2, - 0xda, 0xb9, 0x3c, 0x96, 0x0b, 0x7c, 0xba, 0x5f, 0xc6, 0x5f, 0x72, 0x50, 0x3a, 0x0b, 0xe7, 0x51, - 0xe0, 0xfa, 0xa8, 0x0a, 0x39, 0x6f, 0xcc, 0xf5, 0xf2, 0x38, 0xe7, 0x8d, 0xd1, 0xaf, 0xa0, 0x3a, - 0xf5, 0x6e, 0x22, 0x97, 0xd5, 0x83, 0x28, 0x6d, 0xd1, 0x9d, 0xdf, 0x5d, 0xf6, 0xac, 0x97, 0x48, - 0xf0, 0xfa, 0x5e, 0x9b, 0x2e, 0x2f, 0x97, 0x2a, 0x36, 0x9f, 0xa9, 0xd8, 0xaf, 0xa0, 0xea, 0x87, - 0x23, 0xd7, 0x77, 0xd2, 0x79, 0xa9, 0x72, 0xa7, 0xd6, 0x38, 0xf7, 0x22, 0x19, 0x9a, 0x4f, 0x70, - 0x29, 0xbc, 0x10, 0x17, 0xf4, 0x0d, 0xac, 0xce, 0xdc, 0x88, 0x7a, 0x23, 0x6f, 0xe6, 0xb2, 0x2f, - 0x8e, 0x22, 0x57, 0xcc, 0xb8, 0x9d, 0xc1, 0x0d, 0x67, 0xc4, 0xd1, 0xd7, 0xa0, 0xc7, 0x7c, 0x16, - 0x38, 0x0f, 0x61, 0x74, 0x37, 0xf1, 0xc3, 0x87, 0xb8, 0x56, 0xe2, 0xfe, 0xaf, 0x0b, 0xfe, 0x9b, - 0x84, 0x6d, 0xfc, 0x33, 0x07, 0xc5, 0x2b, 0x51, 0x65, 0x87, 0xa0, 0x72, 0x8c, 0xc4, 0x57, 0xc5, - 0xce, 0xf2, 0x61, 0x42, 0x82, 0x03, 0xc4, 0x65, 0xd0, 0xf7, 0xa0, 0x42, 0xbd, 0x29, 0x89, 0xa9, - 0x3b, 0x9d, 0x71, 0x50, 0xf3, 0x78, 0xc1, 0x78, 0x5f, 0xad, 0xb0, 0x4f, 0x07, 0xd6, 0xb4, 0x02, - 0x26, 0x46, 0xa2, 0x9f, 0x40, 0x85, 0xf5, 0x06, 0xff, 0xd2, 0xa9, 0x15, 0x78, 0xb3, 0x6d, 0x3d, - 0xe9, 0x0c, 0x7e, 0x2c, 0x2e, 0x47, 0x49, 0xb7, 0xfd, 0x02, 0x34, 0x5e, 0xcd, 0x52, 0x49, 0x4c, - 0x8b, 0x9d, 0xec, 0xb4, 0x48, 0xba, 0x06, 0xc3, 0x62, 0xc0, 0xa2, 0x7d, 0x28, 0xdc, 0x73, 0x97, - 0x4a, 0xf2, 0x8b, 0x6b, 0x39, 0x38, 0x0e, 0xbf, 0xd8, 0x67, 0xd7, 0xd9, 0x6f, 0x44, 0x35, 0xd5, - 0xca, 0xcf, 0xaf, 0x33, 0x59, 0x68, 0x38, 0x91, 0x41, 0x5f, 0xc2, 0xea, 0x68, 0x1e, 0x45, 0xfc, - 0x8b, 0xce, 0x9b, 0x92, 0xda, 0x16, 0x87, 0x42, 0x93, 0x3c, 0xdb, 0x9b, 0x12, 0xe3, 0xf7, 0x39, - 0xa8, 0x5e, 0x89, 0x3b, 0x2f, 0xb9, 0x67, 0xbf, 0x85, 0x4d, 0x32, 0x99, 0x90, 0x11, 0xf5, 0xee, - 0x89, 0x33, 0x72, 0x7d, 0x9f, 0x44, 0x8e, 0x2c, 0x5c, 0xad, 0xb1, 0x5e, 0x17, 0xdf, 0xbe, 0x6d, - 0xce, 0xef, 0x76, 0xf0, 0x46, 0x2a, 0x2b, 0x59, 0x63, 0x64, 0xc2, 0xa6, 0x37, 0x9d, 0x92, 0xb1, - 0xe7, 0xd2, 0x65, 0x03, 0x62, 0x62, 0x6d, 0xcb, 0xf6, 0xbf, 0xb2, 0x4f, 0x5c, 0x4a, 0x16, 0x66, - 0x52, 0x8d, 0xd4, 0xcc, 0x57, 0xac, 0xba, 0xa3, 0x9b, 0xf4, 0xea, 0x5e, 0x93, 0x9a, 0x36, 0x67, - 0x62, 0xb9, 0x99, 0xf9, 0x2c, 0x50, 0x9f, 0x7c, 0x16, 0x2c, 0x46, 0x77, 0xe1, 0x63, 0xa3, 0xdb, - 0xf8, 0x06, 0xd6, 0x53, 0x20, 0xe4, 0xb5, 0x7f, 0x08, 0x45, 0x9e, 0xca, 0x64, 0x66, 0xa0, 0xe7, - 0x55, 0x87, 0xa5, 0x84, 0xf1, 0xbb, 0x1c, 0xa0, 0x44, 0x3f, 0x7c, 0x88, 0xff, 0x47, 0xc1, 0xdc, - 0x82, 0x02, 0xe7, 0x4b, 0x24, 0xc5, 0x82, 0xe1, 0xe0, 0xbb, 0x31, 0x9d, 0xdd, 0xa5, 0x30, 0x0a, - 0xe5, 0xd7, 0xec, 0x17, 0x93, 0x78, 0xee, 0x53, 0x2c, 0x25, 0x8c, 0xbf, 0x2a, 0xb0, 0x99, 0xc1, - 0x41, 0x62, 0xb9, 0xb8, 0x06, 0x94, 0xff, 0x7c, 0x0d, 0xa0, 0x03, 0x28, 0xcf, 0xee, 0x3e, 0x70, - 0x5d, 0xa4, 0xbb, 0xef, 0xed, 0xe2, 0xef, 0x83, 0x1a, 0xb1, 0x69, 0xa2, 0x72, 0xcd, 0xe5, 0xbb, - 0x91, 0xf3, 0xd9, 0x05, 0x9b, 0x89, 0x23, 0x73, 0xc1, 0x4a, 0xff, 0xff, 0xa1, 0xc0, 0xf6, 0xa2, - 0x0e, 0xe6, 0x3e, 0xfd, 0xbf, 0x4a, 0xa5, 0x11, 0xc1, 0xce, 0xd3, 0xe8, 0x3e, 0x29, 0x41, 0x9f, - 0x01, 0xfb, 0xe1, 0x2f, 0x41, 0x5b, 0xfa, 0xf4, 0x61, 0x2f, 0xa4, 0xee, 0x49, 0x7f, 0x80, 0x4d, - 0x7d, 0x05, 0x95, 0x41, 0x1d, 0xda, 0x83, 0x0b, 0x5d, 0x61, 0x94, 0xf9, 0x6b, 0xb3, 0x2d, 0x5e, - 0x5d, 0x8c, 0x72, 0xa4, 0x50, 0xfe, 0xf0, 0xef, 0x0a, 0xc0, 0x62, 0xc6, 0x23, 0x0d, 0x4a, 0x97, - 0xfd, 0xf3, 0xfe, 0xe0, 0x4d, 0x5f, 0x18, 0x38, 0xb1, 0xbb, 0x1d, 0x5d, 0x41, 0x15, 0x28, 0x88, - 0x67, 0x5c, 0x8e, 0x9d, 0x20, 0xdf, 0x70, 0x79, 0xf6, 0xc0, 0x4b, 0x1f, 0x70, 0x2a, 0x2a, 0x41, - 0x3e, 0x7d, 0xa6, 0xc9, 0x77, 0x59, 0x91, 0x19, 0xc4, 0xe6, 0x85, 0xd5, 0x6c, 0x9b, 0x7a, 0x89, - 0x6d, 0xa4, 0x2f, 0x34, 0x80, 0x62, 0xf2, 0x3c, 0x63, 0x9a, 0xec, 0x51, 0x07, 0xec, 0x9c, 0x81, - 0x7d, 0x6a, 0x62, 0x5d, 0x63, 0x3c, 0x3c, 0x78, 0xa3, 0xaf, 0x32, 0xde, 0x71, 0xd7, 0xb4, 0x3a, - 0xfa, 0x1a, 0x7b, 0xd5, 0x9d, 0x9a, 0x4d, 0x6c, 0xb7, 0xcc, 0xa6, 0xad, 0x57, 0xd9, 0xce, 0x15, - 0x77, 0x70, 0x9d, 0x1d, 0x73, 0x36, 0xb8, 0xc4, 0xfd, 0xa6, 0xa5, 0xeb, 0x87, 0xfb, 0xb0, 0x96, - 0xb9, 0xda, 0xd9, 0x59, 0x76, 0xb3, 0x65, 0x99, 0x43, 0x7d, 0x85, 0xd1, 0xc3, 0xd3, 0x26, 0xee, - 0x0c, 0x75, 0xa5, 0xf5, 0xf5, 0xdb, 0xfd, 0x7b, 0x8f, 0x92, 0x38, 0xae, 0x7b, 0xe1, 0x91, 0xa0, - 0x8e, 0x6e, 0xc2, 0xa3, 0x7b, 0x7a, 0xc4, 0xff, 0x61, 0x38, 0x5a, 0x4c, 0xa4, 0xeb, 0x22, 0xe7, - 0xfc, 0xf4, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xe4, 0x09, 0xf3, 0xd7, 0xbd, 0x10, 0x00, 0x00, + // 1680 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0x4b, 0x73, 0x23, 0x49, + 0x11, 0x9e, 0x96, 0x5a, 0xaf, 0x6c, 0x5b, 0x6e, 0x97, 0x1f, 0x88, 0x09, 0x96, 0xf0, 0x76, 0x30, + 0x8c, 0xd7, 0x11, 0xc8, 0x20, 0x60, 0x38, 0x2d, 0x8b, 0x1e, 0x6d, 0x8f, 0x66, 0x5a, 0x92, 0xa7, + 0xd4, 0xf6, 0x10, 0x7b, 0xe9, 0x68, 0x4b, 0x25, 0xbb, 0x71, 0x3f, 0x34, 0xdd, 0x25, 0x7b, 0xf5, + 0x03, 0x08, 0x7e, 0x00, 0xbf, 0x82, 0x33, 0x57, 0x38, 0x11, 0xc1, 0x9d, 0x3b, 0x57, 0x7e, 0x00, + 0xff, 0x80, 0xa8, 0x47, 0xb7, 0xd4, 0x9a, 0x65, 0xc7, 0xb3, 0x11, 0x1c, 0xd8, 0x8b, 0x22, 0x2b, + 0x2b, 0x33, 0x2b, 0xf3, 0xcb, 0x47, 0x75, 0x09, 0xf4, 0x6b, 0x2f, 0xf4, 0xa3, 0x9b, 0xa9, 0x4b, + 0xdd, 0xe6, 0x3c, 0x8e, 0x68, 0x84, 0x60, 0xc5, 0x79, 0xaa, 0xdd, 0xd3, 0x78, 0x3e, 0x11, 0x1b, + 0x4f, 0xb5, 0x77, 0x0b, 0x12, 0x2f, 0xe5, 0xa2, 0x4e, 0xa3, 0x79, 0xb4, 0xd2, 0x32, 0x06, 0x50, + 0xe9, 0xde, 0xba, 0x71, 0x42, 0x28, 0x3a, 0x84, 0xf2, 0xc4, 0xf7, 0x48, 0x48, 0x1b, 0xca, 0x91, + 0x72, 0x5c, 0xc2, 0x72, 0x85, 0x10, 0xa8, 0x93, 0x28, 0x0c, 0x1b, 0x05, 0xce, 0xe5, 0x34, 0x93, + 0x4d, 0x48, 0x7c, 0x4f, 0xe2, 0x46, 0x51, 0xc8, 0x8a, 0x95, 0xf1, 0xaf, 0x22, 0xec, 0x76, 0xb8, + 0x1f, 0x76, 0xec, 0x86, 0x89, 0x3b, 0xa1, 0x5e, 0x14, 0xa2, 0x73, 0x80, 0x84, 0xba, 0x94, 0x04, + 0x24, 0xa4, 0x49, 0x43, 0x39, 0x2a, 0x1e, 0x6b, 0xad, 0xe7, 0xcd, 0xb5, 0x08, 0xde, 0x53, 0x69, + 0x8e, 0x53, 0x79, 0xbc, 0xa6, 0x8a, 0x5a, 0xa0, 0x91, 0x7b, 0x12, 0x52, 0x87, 0x46, 0x77, 0x24, + 0x6c, 0xa8, 0x47, 0xca, 0xb1, 0xd6, 0xda, 0x6d, 0x8a, 0x00, 0x4d, 0xb6, 0x63, 0xb3, 0x0d, 0x0c, + 0x24, 0xa3, 0x9f, 0xfe, 0xbd, 0x00, 0xb5, 0xcc, 0x1a, 0xb2, 0xa0, 0x3a, 0x71, 0x29, 0xb9, 0x89, + 0xe2, 0x25, 0x0f, 0xb3, 0xde, 0xfa, 0xe9, 0x23, 0x1d, 0x69, 0x76, 0xa5, 0x1e, 0xce, 0x2c, 0xa0, + 0x9f, 0x40, 0x65, 0x22, 0xd0, 0xe3, 0xe8, 0x68, 0xad, 0xbd, 0x75, 0x63, 0x12, 0x58, 0x9c, 0xca, + 0x20, 0x1d, 0x8a, 0xc9, 0x3b, 0x9f, 0x43, 0xb6, 0x85, 0x19, 0x69, 0xfc, 0x49, 0x81, 0x6a, 0x6a, + 0x17, 0xed, 0xc1, 0x4e, 0xc7, 0x72, 0x2e, 0x87, 0xd8, 0xec, 0x8e, 0xce, 0x87, 0xfd, 0x2f, 0xcd, + 0x9e, 0xfe, 0x04, 0x6d, 0x41, 0xb5, 0x63, 0x39, 0x1d, 0xf3, 0xbc, 0x3f, 0xd4, 0x15, 0xb4, 0x0d, + 0xb5, 0x8e, 0xe5, 0x74, 0x47, 0x83, 0x41, 0xdf, 0xd6, 0x0b, 0x68, 0x07, 0xb4, 0x8e, 0xe5, 0xe0, + 0x91, 0x65, 0x75, 0xda, 0xdd, 0xd7, 0x7a, 0x11, 0x1d, 0xc0, 0x6e, 0xc7, 0x72, 0x7a, 0x03, 0xcb, + 0xe9, 0x99, 0x17, 0xd8, 0xec, 0xb6, 0x6d, 0xb3, 0xa7, 0xab, 0x08, 0xa0, 0xcc, 0xd8, 0x3d, 0x4b, + 0x2f, 0x49, 0x7a, 0x6c, 0xda, 0x7a, 0x59, 0x9a, 0xeb, 0x0f, 0xc7, 0x26, 0xb6, 0xf5, 0x8a, 0x5c, + 0x5e, 0x5e, 0xf4, 0xda, 0xb6, 0xa9, 0x57, 0xe5, 0xb2, 0x67, 0x5a, 0xa6, 0x6d, 0xea, 0xb5, 0x57, + 0x6a, 0xb5, 0xa0, 0x17, 0x5f, 0xa9, 0xd5, 0xa2, 0xae, 0x1a, 0x7f, 0x54, 0xe0, 0x60, 0x4c, 0x63, + 0xe2, 0x06, 0xaf, 0xc9, 0x12, 0xbb, 0xe1, 0x0d, 0xc1, 0xe4, 0xdd, 0x82, 0x24, 0x14, 0x3d, 0x85, + 0xea, 0x3c, 0x4a, 0x3c, 0x86, 0x1d, 0x07, 0xb8, 0x86, 0xb3, 0x35, 0x3a, 0x85, 0xda, 0x1d, 0x59, + 0x3a, 0x31, 0x93, 0x97, 0x80, 0xa1, 0x66, 0x56, 0x90, 0x99, 0xa5, 0xea, 0x9d, 0xa4, 0xd6, 0xf1, + 0x2d, 0x7e, 0x18, 0x5f, 0x63, 0x06, 0x87, 0x9b, 0x4e, 0x25, 0xf3, 0x28, 0x4c, 0x08, 0xb2, 0x00, + 0x09, 0x45, 0x87, 0xae, 0x72, 0xcb, 0xfd, 0xd3, 0x5a, 0x9f, 0x7c, 0x63, 0x01, 0xe0, 0xdd, 0xeb, + 0x4d, 0x96, 0xf1, 0x15, 0xec, 0x89, 0x73, 0x6c, 0xf7, 0xda, 0x27, 0xc9, 0x63, 0x42, 0x3f, 0x84, + 0x32, 0xe5, 0xc2, 0x8d, 0xc2, 0x51, 0xf1, 0xb8, 0x86, 0xe5, 0xea, 0x63, 0x23, 0x9c, 0xc2, 0x7e, + 0xfe, 0xe4, 0xff, 0x49, 0x7c, 0xbf, 0x00, 0x15, 0x2f, 0x7c, 0x82, 0xf6, 0xa1, 0x14, 0xb8, 0x74, + 0x72, 0x2b, 0xa3, 0x11, 0x0b, 0x16, 0xca, 0xcc, 0xf3, 0x29, 0x89, 0x79, 0x0a, 0x6b, 0x58, 0xae, + 0x8c, 0x3f, 0x2b, 0x50, 0x3e, 0xe3, 0x24, 0xfa, 0x31, 0x94, 0xe2, 0x05, 0x0b, 0x56, 0xf4, 0xba, + 0xbe, 0xee, 0x01, 0xb3, 0x8c, 0xc5, 0x36, 0xea, 0x43, 0x7d, 0xe6, 0x11, 0x7f, 0xca, 0x5b, 0x77, + 0x10, 0x4d, 0x45, 0x55, 0xd4, 0x5b, 0x9f, 0xae, 0x2b, 0x08, 0x9b, 0xcd, 0xb3, 0x9c, 0x20, 0xde, + 0x50, 0x34, 0x5e, 0x40, 0x3d, 0x2f, 0xc1, 0xda, 0xc9, 0xc4, 0xd8, 0x19, 0x0d, 0x9d, 0x41, 0x7f, + 0x3c, 0x68, 0xdb, 0xdd, 0x97, 0xfa, 0x13, 0xde, 0x31, 0xe6, 0xd8, 0x76, 0xcc, 0xb3, 0xb3, 0x11, + 0xb6, 0x75, 0xc5, 0xf8, 0x5b, 0x01, 0xb6, 0x04, 0x28, 0xe3, 0x68, 0x11, 0x4f, 0x08, 0xcb, 0xe2, + 0x1d, 0x59, 0x26, 0x73, 0x77, 0x42, 0xd2, 0x2c, 0xa6, 0x6b, 0x06, 0x48, 0x72, 0xeb, 0xc6, 0x53, + 0x19, 0xb9, 0x58, 0xa0, 0x5f, 0x82, 0xc6, 0xb3, 0x49, 0x1d, 0xba, 0x9c, 0x13, 0x9e, 0xc7, 0x7a, + 0x6b, 0x7f, 0x55, 0xd8, 0x3c, 0x57, 0xd4, 0x5e, 0xce, 0x09, 0x06, 0x9a, 0xd1, 0xf9, 0x6e, 0x50, + 0x1f, 0xd1, 0x0d, 0xab, 0x1a, 0x2a, 0xe5, 0x6a, 0xe8, 0x24, 0x4b, 0x48, 0x59, 0x5a, 0x79, 0x0f, + 0xbd, 0x34, 0x49, 0xa8, 0x09, 0xe5, 0x28, 0x74, 0xa6, 0x53, 0xbf, 0x51, 0xe1, 0x6e, 0x7e, 0x6f, + 0x5d, 0x76, 0x14, 0xf6, 0x7a, 0x56, 0x5b, 0x94, 0x45, 0x29, 0x0a, 0x7b, 0x53, 0x1f, 0x3d, 0x83, + 0x3a, 0xf9, 0x8a, 0x92, 0x38, 0x74, 0x7d, 0x27, 0x58, 0xb2, 0xe9, 0x55, 0xe5, 0xa1, 0x6f, 0xa7, + 0xdc, 0x01, 0x63, 0x1a, 0x6f, 0xa0, 0x86, 0xa3, 0x87, 0xee, 0x2d, 0xf7, 0xd3, 0x80, 0xf2, 0x35, + 0x99, 0x45, 0x31, 0x91, 0x05, 0x08, 0x72, 0x40, 0xe3, 0xe8, 0x01, 0xcb, 0x1d, 0x74, 0x04, 0x25, + 0x77, 0x96, 0xd6, 0x50, 0x5e, 0x44, 0x6c, 0x18, 0x2e, 0x54, 0x71, 0xf4, 0xc0, 0xd3, 0x89, 0x3e, + 0x01, 0x01, 0x9c, 0x13, 0xba, 0x41, 0x9a, 0x95, 0x1a, 0xe7, 0x0c, 0xdd, 0x80, 0xa0, 0x17, 0xa0, + 0xc5, 0xd1, 0x83, 0x33, 0xe1, 0xc7, 0x8b, 0x0e, 0xd3, 0x5a, 0x07, 0xb9, 0xa2, 0x4b, 0x9d, 0xc3, + 0x10, 0xa7, 0x64, 0x62, 0xbc, 0x01, 0x58, 0xd5, 0xcc, 0x87, 0x0e, 0xf9, 0x11, 0x43, 0x99, 0xf8, + 0xd3, 0xd4, 0xfe, 0x96, 0x74, 0x99, 0x5b, 0xc0, 0x72, 0x8f, 0x01, 0x31, 0x66, 0x45, 0x71, 0x4e, + 0xbd, 0xe9, 0xb7, 0x28, 0x25, 0x04, 0xea, 0x0d, 0xf5, 0xa6, 0xbc, 0x86, 0x6a, 0x98, 0xd3, 0xc6, + 0x17, 0x50, 0xba, 0xe2, 0xe6, 0x5e, 0x80, 0xc6, 0xa5, 0x1c, 0xc6, 0x4e, 0x7b, 0x2b, 0x17, 0x66, + 0x76, 0x34, 0x86, 0x24, 0x25, 0x13, 0xa3, 0x0d, 0xdb, 0xaf, 0xe5, 0xb1, 0x5c, 0xe0, 0xe3, 0xfd, + 0x32, 0xfe, 0x52, 0x80, 0xca, 0xab, 0x68, 0xc1, 0x12, 0x8e, 0xea, 0x50, 0xf0, 0xa6, 0x5c, 0xaf, + 0x88, 0x0b, 0xde, 0x14, 0xfd, 0x06, 0xea, 0x81, 0x77, 0x13, 0xbb, 0xac, 0x6c, 0x44, 0x07, 0x88, + 0x26, 0xfe, 0xfe, 0xba, 0x67, 0x83, 0x54, 0x82, 0xb7, 0xc1, 0x76, 0xb0, 0xbe, 0x5c, 0x2b, 0xec, + 0x62, 0xae, 0xb0, 0x9f, 0x41, 0xdd, 0x8f, 0x26, 0xae, 0xef, 0x64, 0x63, 0x55, 0x15, 0xc5, 0xc7, + 0xb9, 0x17, 0xe9, 0x6c, 0xdd, 0xc0, 0xa5, 0xf4, 0x48, 0x5c, 0xd0, 0xe7, 0xb0, 0x35, 0x77, 0x63, + 0xea, 0x4d, 0xbc, 0xb9, 0xcb, 0x3e, 0x4c, 0xca, 0x5c, 0x31, 0xe7, 0x76, 0x0e, 0x37, 0x9c, 0x13, + 0x47, 0x9f, 0x81, 0x9e, 0xf0, 0x91, 0xe1, 0x3c, 0x44, 0xf1, 0xdd, 0xcc, 0x8f, 0x1e, 0x92, 0x46, + 0x85, 0xfb, 0xbf, 0x23, 0xf8, 0x6f, 0x53, 0xb6, 0xf1, 0xef, 0x02, 0x94, 0xaf, 0x44, 0x95, 0x9d, + 0x80, 0xca, 0x31, 0x12, 0x1f, 0x1f, 0x87, 0xeb, 0x87, 0x09, 0x09, 0x0e, 0x10, 0x97, 0x41, 0x3f, + 0x80, 0x1a, 0xf5, 0x02, 0x92, 0x50, 0x37, 0x98, 0x73, 0x50, 0x8b, 0x78, 0xc5, 0xf8, 0xba, 0x5a, + 0x61, 0x5f, 0x18, 0xac, 0xb7, 0x05, 0x4c, 0x8c, 0x44, 0x3f, 0x83, 0x1a, 0xeb, 0x0d, 0xfe, 0x41, + 0xd4, 0x28, 0xf1, 0x66, 0xdb, 0xdf, 0xe8, 0x0c, 0x7e, 0x2c, 0xae, 0xc6, 0x69, 0xb7, 0xfd, 0x0a, + 0x34, 0x5e, 0xcd, 0x52, 0x49, 0x0c, 0x95, 0xc3, 0xfc, 0x50, 0x49, 0xbb, 0x06, 0xc3, 0x6a, 0x0e, + 0xa3, 0xe7, 0x50, 0xba, 0xe7, 0x2e, 0x55, 0xe4, 0x87, 0xd9, 0x7a, 0x70, 0x1c, 0x7e, 0xb1, 0xcf, + 0x6e, 0xbd, 0xdf, 0x89, 0x6a, 0xe2, 0xe3, 0x64, 0xe3, 0xd6, 0x93, 0x85, 0x86, 0x53, 0x19, 0x1e, + 0x55, 0xe0, 0x37, 0x6a, 0x32, 0xaa, 0xc0, 0x47, 0x9f, 0xc2, 0xd6, 0x64, 0x11, 0xc7, 0xfc, 0x53, + 0xd0, 0x0b, 0x48, 0x63, 0x9f, 0x83, 0xa3, 0x49, 0x9e, 0xed, 0x05, 0xc4, 0xf8, 0x43, 0x01, 0xea, + 0x57, 0xe2, 0xb2, 0x4c, 0x2f, 0xe8, 0x2f, 0x60, 0x8f, 0xcc, 0x66, 0x64, 0x42, 0xbd, 0x7b, 0xe2, + 0x4c, 0x5c, 0xdf, 0x27, 0xb1, 0x23, 0x4b, 0x59, 0x6b, 0xed, 0x34, 0xc5, 0x47, 0x73, 0x97, 0xf3, + 0xfb, 0x3d, 0xbc, 0x9b, 0xc9, 0x4a, 0xd6, 0x14, 0x99, 0xb0, 0xe7, 0x05, 0x01, 0x99, 0x7a, 0x2e, + 0x5d, 0x37, 0x20, 0x66, 0xd8, 0x81, 0x1c, 0x08, 0x57, 0xf6, 0xb9, 0x4b, 0xc9, 0xca, 0x4c, 0xa6, + 0x91, 0x99, 0x79, 0xc6, 0xea, 0x3d, 0xbe, 0xc9, 0xee, 0xfc, 0x6d, 0xa9, 0x69, 0x73, 0x26, 0x96, + 0x9b, 0xb9, 0xef, 0x09, 0x75, 0xe3, 0x7b, 0x62, 0x35, 0xf3, 0x4b, 0x1f, 0x9a, 0xf9, 0xc6, 0xe7, + 0xb0, 0x93, 0x01, 0x21, 0xbf, 0x17, 0x4e, 0xa0, 0xcc, 0x93, 0x9b, 0x4e, 0x11, 0xf4, 0x7e, 0x1d, + 0x62, 0x29, 0x61, 0xfc, 0xbe, 0x00, 0x28, 0xd5, 0x8f, 0x1e, 0x92, 0xff, 0x53, 0x30, 0xf7, 0xa1, + 0xc4, 0xf9, 0x12, 0x49, 0xb1, 0x60, 0x38, 0xf8, 0x6e, 0x42, 0xe7, 0x77, 0x19, 0x8c, 0x42, 0xf9, + 0x0d, 0xfb, 0xc5, 0x24, 0x59, 0xf8, 0x14, 0x4b, 0x09, 0xe3, 0xaf, 0x0a, 0xec, 0xe5, 0x70, 0x90, + 0x58, 0xae, 0x2e, 0x06, 0xe5, 0xbf, 0x5f, 0x0c, 0xe8, 0x18, 0xaa, 0xf3, 0xbb, 0x6f, 0xb8, 0x40, + 0xb2, 0xdd, 0xaf, 0xed, 0xeb, 0x1f, 0x82, 0x1a, 0xb3, 0xf9, 0xa2, 0x72, 0xcd, 0xf5, 0xdb, 0x92, + 0xf3, 0xd9, 0x95, 0x9b, 0x8b, 0x23, 0x77, 0xe5, 0x4a, 0xff, 0xff, 0xa9, 0xc0, 0xc1, 0xaa, 0x0e, + 0x16, 0x3e, 0xfd, 0x4e, 0xa5, 0xd2, 0x88, 0xe1, 0x70, 0x33, 0xba, 0x8f, 0x4a, 0xd0, 0xb7, 0x80, + 0xfd, 0xe4, 0xd7, 0xa0, 0xad, 0x7d, 0x33, 0xb1, 0xa7, 0x55, 0xff, 0x7c, 0x38, 0xc2, 0xa6, 0xfe, + 0x04, 0x55, 0x41, 0x1d, 0xdb, 0xa3, 0x0b, 0x5d, 0x61, 0x94, 0xf9, 0x5b, 0xb3, 0x2b, 0x9e, 0x6b, + 0x8c, 0x72, 0xa4, 0x50, 0xf1, 0xe4, 0x1f, 0x0a, 0xc0, 0x6a, 0xea, 0x23, 0x0d, 0x2a, 0x97, 0xc3, + 0xd7, 0xc3, 0xd1, 0xdb, 0xa1, 0x30, 0x70, 0x6e, 0xf7, 0x7b, 0xba, 0x82, 0x6a, 0x50, 0x12, 0xef, + 0xbf, 0x02, 0x3b, 0x41, 0x3e, 0xfe, 0x8a, 0xec, 0x65, 0x98, 0xbd, 0xfc, 0x54, 0x54, 0x81, 0x62, + 0xf6, 0xbe, 0x93, 0x0f, 0xba, 0x32, 0x33, 0x88, 0xcd, 0x0b, 0xab, 0xdd, 0x35, 0xf5, 0x0a, 0xdb, + 0xc8, 0x9e, 0x76, 0x00, 0xe5, 0xf4, 0x5d, 0xc7, 0x34, 0xd9, 0x6b, 0x10, 0xd8, 0x39, 0x23, 0xfb, + 0xa5, 0x89, 0x75, 0x8d, 0xf1, 0xf0, 0xe8, 0xad, 0xbe, 0xc5, 0x78, 0x67, 0x7d, 0xd3, 0xea, 0xe9, + 0xdb, 0xec, 0x39, 0xf8, 0xd2, 0x6c, 0x63, 0xbb, 0x63, 0xb6, 0x6d, 0xbd, 0xce, 0x76, 0xae, 0xb8, + 0x83, 0x3b, 0xec, 0x98, 0x57, 0xa3, 0x4b, 0x3c, 0x6c, 0x5b, 0xba, 0x7e, 0xf2, 0x1c, 0xb6, 0x73, + 0x97, 0x3d, 0x3b, 0xcb, 0x6e, 0x77, 0x2c, 0x73, 0xac, 0x3f, 0x61, 0xf4, 0xf8, 0x65, 0x1b, 0xf7, + 0xc6, 0xba, 0xd2, 0xf9, 0xec, 0xcb, 0xe7, 0xf7, 0x1e, 0x25, 0x49, 0xd2, 0xf4, 0xa2, 0x53, 0x41, + 0x9d, 0xde, 0x44, 0xa7, 0xf7, 0xf4, 0x94, 0xff, 0x35, 0x71, 0xba, 0x9a, 0x48, 0xd7, 0x65, 0xce, + 0xf9, 0xf9, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x91, 0xae, 0x28, 0x7d, 0xf6, 0x10, 0x00, 0x00, } diff --git a/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go b/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go index fd1f76410e8..52c75655d2e 100644 --- a/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go +++ b/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go @@ -5,8 +5,9 @@ package tabletmanagerdata import ( fmt "fmt" - proto "github.com/golang/protobuf/proto" math "math" + + proto "github.com/golang/protobuf/proto" logutil "vitess.io/vitess/go/vt/proto/logutil" query "vitess.io/vitess/go/vt/proto/query" replicationdata "vitess.io/vitess/go/vt/proto/replicationdata" diff --git a/go/vt/srvtopo/resilient_server.go b/go/vt/srvtopo/resilient_server.go index dce6f3dccda..efd126859e0 100644 --- a/go/vt/srvtopo/resilient_server.go +++ b/go/vt/srvtopo/resilient_server.go @@ -211,11 +211,19 @@ func NewResilientServer(base *topo.Server, counterPrefix string) *ResilientServe log.Fatalf("srv_topo_cache_refresh must be less than or equal to srv_topo_cache_ttl") } + var metric string + + if counterPrefix == "" { + metric = counterPrefix + "Counts" + } else { + metric = "" + } + return &ResilientServer{ topoServer: base, cacheTTL: *srvTopoCacheTTL, cacheRefresh: *srvTopoCacheRefresh, - counts: stats.NewCountersWithSingleLabel(counterPrefix+"Counts", "Resilient srvtopo server operations", "type"), + counts: stats.NewCountersWithSingleLabel(metric, "Resilient srvtopo server operations", "type"), srvKeyspaceNamesCache: make(map[string]*srvKeyspaceNamesEntry), srvKeyspaceCache: make(map[string]*srvKeyspaceEntry), diff --git a/go/vt/vttablet/tabletmanager/action_agent.go b/go/vt/vttablet/tabletmanager/action_agent.go index f30ef256128..675176cf2a1 100644 --- a/go/vt/vttablet/tabletmanager/action_agent.go +++ b/go/vt/vttablet/tabletmanager/action_agent.go @@ -308,10 +308,14 @@ func NewActionAgent( return nil, err } + vreplication.InitVStreamerClient(agent.DBConfigs) + // The db name is set by the Start function called above agent.VREngine = vreplication.NewEngine(ts, tabletAlias.Cell, mysqld, func() binlogplayer.DBClient { return binlogplayer.NewDBClient(agent.DBConfigs.FilteredWithDB()) - }, agent.DBConfigs.FilteredWithDB().DbName) + }, + agent.DBConfigs.FilteredWithDB().DbName, + ) servenv.OnTerm(agent.VREngine.Close) // Run a background task to rebuild the SrvKeyspace in our cell/keyspace diff --git a/go/vt/vttablet/tabletmanager/vreplication/controller.go b/go/vt/vttablet/tabletmanager/vreplication/controller.go index 858a209201b..09d9fc29c3d 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/controller.go +++ b/go/vt/vttablet/tabletmanager/vreplication/controller.go @@ -36,6 +36,7 @@ import ( "vitess.io/vitess/go/vt/topo" binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" + topodatapb "vitess.io/vitess/go/vt/proto/topodata" ) var ( @@ -102,18 +103,20 @@ func newController(ctx context.Context, params map[string]string, dbClientFactor } ct.stopPos = params["stop_pos"] - // tabletPicker - if v, ok := params["cell"]; ok { - cell = v - } - if v := params["tablet_types"]; v != "" { - tabletTypesStr = v - } - tp, err := discovery.NewTabletPicker(ctx, ts, cell, ct.source.Keyspace, ct.source.Shard, tabletTypesStr, *healthcheckTopologyRefresh, *healthcheckRetryDelay, *healthcheckTimeout) - if err != nil { - return nil, err + if ct.source.GetExternalMysql() == "" { + // tabletPicker + if v, ok := params["cell"]; ok { + cell = v + } + if v := params["tablet_types"]; v != "" { + tabletTypesStr = v + } + tp, err := discovery.NewTabletPicker(ctx, ts, cell, ct.source.Keyspace, ct.source.Shard, tabletTypesStr, *healthcheckTopologyRefresh, *healthcheckRetryDelay, *healthcheckTimeout) + if err != nil { + return nil, err + } + ct.tabletPicker = tp } - ct.tabletPicker = tp // cancel ctx, ct.cancel = context.WithCancel(ctx) @@ -126,7 +129,9 @@ func newController(ctx context.Context, params map[string]string, dbClientFactor func (ct *controller) run(ctx context.Context) { defer func() { log.Infof("stream %v: stopped", ct.id) - ct.tabletPicker.Close() + if ct.tabletPicker != nil { + ct.tabletPicker.Close() + } close(ct.done) }() @@ -179,13 +184,16 @@ func (ct *controller) runBlp(ctx context.Context) (err error) { } defer dbClient.Close() - log.Infof("trying to find a tablet eligible for vreplication. stream id: %v", ct.id) - tablet, err := ct.tabletPicker.PickForStreaming(ctx) - if err != nil { - return err + var tablet *topodatapb.Tablet + if ct.source.GetExternalMysql() == "" { + log.Infof("trying to find a tablet eligible for vreplication. stream id: %v", ct.id) + tablet, err = ct.tabletPicker.PickForStreaming(ctx) + if err != nil { + return err + } + log.Infof("found a tablet eligible for vreplication. stream id: %v tablet: %s", ct.id, tablet.Alias.String()) + ct.sourceTablet.Set(tablet.Alias.String()) } - log.Infof("found a tablet eligible for vreplication. stream id: %v tablet: %s", ct.id, tablet.Alias.String()) - ct.sourceTablet.Set(tablet.Alias.String()) switch { case len(ct.source.Tables) > 0: @@ -211,8 +219,16 @@ func (ct *controller) runBlp(ctx context.Context) (err error) { if _, err := dbClient.ExecuteFetch("set names binary", 10000); err != nil { return err } - vreplicator := newVReplicator(ct.id, &ct.source, tablet, ct.blpStats, dbClient, ct.mysqld, ct.vre) - return vreplicator.Replicate(ctx) + + var vsClient VStreamerClient + if ct.source.GetExternalMysql() == "" { + vsClient = NewTabletVStreamerClient(tablet) + } else { + vsClient = NewMySQLVStreamerClient() + } + + vr := newVReplicator(ct.id, &ct.source, vsClient, ct.blpStats, dbClient, ct.mysqld, ct.vre) + return vr.Replicate(ctx) } return fmt.Errorf("missing source") } diff --git a/go/vt/vttablet/tabletmanager/vreplication/framework_test.go b/go/vt/vttablet/tabletmanager/vreplication/framework_test.go index 65ee4a601f5..24853187a62 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/framework_test.go +++ b/go/vt/vttablet/tabletmanager/vreplication/framework_test.go @@ -83,7 +83,7 @@ func TestMain(m *testing.M) { // engines cannot be initialized in testenv because it introduces // circular dependencies. streamerEngine = vstreamer.NewEngine(env.SrvTopo, env.SchemaEngine) - streamerEngine.InitDBConfig(env.Dbcfgs) + streamerEngine.InitDBConfig(env.Dbcfgs.DbaWithDB()) streamerEngine.Open(env.KeyspaceName, env.Cells[0]) defer streamerEngine.Close() @@ -97,6 +97,8 @@ func TestMain(m *testing.M) { return 1 } + InitVStreamerClient(env.Dbcfgs) + playerEngine = NewEngine(env.TopoServ, env.Cells[0], env.Mysqld, realDBClientFactory, vrepldb) if err := playerEngine.Open(context.Background()); err != nil { fmt.Fprintf(os.Stderr, "%v", err) @@ -123,6 +125,22 @@ func resetBinlogClient() { globalFBC = &fakeBinlogClient{} } +func masterPosition(t *testing.T) string { + t.Helper() + pos, err := env.Mysqld.MasterPosition() + if err != nil { + t.Fatal(err) + } + return mysql.EncodePosition(pos) +} + +func execStatements(t *testing.T, queries []string) { + t.Helper() + if err := env.Mysqld.ExecuteSuperQueryList(context.Background(), queries); err != nil { + t.Error(err) + } +} + //-------------------------------------- // Topos and tablets diff --git a/go/vt/vttablet/tabletmanager/vreplication/journal_test.go b/go/vt/vttablet/tabletmanager/vreplication/journal_test.go index fc29f6d1ba0..32402c1fdb4 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/journal_test.go +++ b/go/vt/vttablet/tabletmanager/vreplication/journal_test.go @@ -43,7 +43,14 @@ func TestJournalOneToOne(t *testing.T) { Match: "t", }}, } - _, firstID := startVReplication(t, filter, binlogdatapb.OnDDLAction_IGNORE, "") + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + + _, firstID := startVReplication(t, bls, "") journal := &binlogdatapb.Journal{ Id: 1, @@ -98,7 +105,14 @@ func TestJournalOneToMany(t *testing.T) { Match: "t", }}, } - _, firstID := startVReplication(t, filter, binlogdatapb.OnDDLAction_IGNORE, "") + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + + _, firstID := startVReplication(t, bls, "") journal := &binlogdatapb.Journal{ Id: 1, @@ -158,7 +172,13 @@ func TestJournalTablePresent(t *testing.T) { Match: "t", }}, } - _, firstID := startVReplication(t, filter, binlogdatapb.OnDDLAction_IGNORE, "") + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + _, firstID := startVReplication(t, bls, "") journal := &binlogdatapb.Journal{ Id: 1, @@ -213,7 +233,14 @@ func TestJournalTableNotPresent(t *testing.T) { Match: "t", }}, } - _, _ = startVReplication(t, filter, binlogdatapb.OnDDLAction_IGNORE, "") + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + + _, _ = startVReplication(t, bls, "") journal := &binlogdatapb.Journal{ Id: 1, @@ -270,7 +297,13 @@ func TestJournalTableMixed(t *testing.T) { Match: "t1", }}, } - _, _ = startVReplication(t, filter, binlogdatapb.OnDDLAction_IGNORE, "") + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + _, _ = startVReplication(t, bls, "") journal := &binlogdatapb.Journal{ Id: 1, diff --git a/go/vt/vttablet/tabletmanager/vreplication/stats.go b/go/vt/vttablet/tabletmanager/vreplication/stats.go index e6a2039bb2f..be66fae9997 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/stats.go +++ b/go/vt/vttablet/tabletmanager/vreplication/stats.go @@ -73,6 +73,35 @@ func (st *vrStats) register() { } return result }) + + stats.NewCounterFunc( + "VReplicationTotalSecondsBehindMaster", + "vreplication seconds behind master aggregated across all streams", + func() int64 { + st.mu.Lock() + defer st.mu.Unlock() + result := int64(0) + for _, ct := range st.controllers { + result += ct.blpStats.SecondsBehindMaster.Get() + } + return result + }) + + stats.NewRateFunc( + "VReplicationQPS", + "vreplication operations per second aggregated across all streams", + func() map[string][]float64 { + st.mu.Lock() + defer st.mu.Unlock() + result := make(map[string][]float64) + for _, ct := range st.controllers { + for k, v := range ct.blpStats.Rates.Get() { + result[k] = v + } + } + return result + }) + stats.Publish("VReplicationSource", stats.StringMapFunc(func() map[string]string { st.mu.Lock() defer st.mu.Unlock() @@ -193,5 +222,71 @@ var vreplicationTemplate = ` {{range $key, $values := .Rates}}{{$key}}: {{range $values}}{{.}} {{end}}
{{end}} {{range $index, $value := .Messages}}{{$value}}
{{end}} {{end}} +
QPS All Streams
+ + + {{else}}VReplication is closed.{{end}} ` diff --git a/go/vt/vttablet/tabletmanager/vreplication/stats_test.go b/go/vt/vttablet/tabletmanager/vreplication/stats_test.go index b46e1c4c4d5..8dc9e599c2e 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/stats_test.go +++ b/go/vt/vttablet/tabletmanager/vreplication/stats_test.go @@ -19,6 +19,7 @@ package vreplication import ( "bytes" "html/template" + "strings" "testing" "time" @@ -111,7 +112,7 @@ func TestStatusHtml(t *testing.T) { tpl := template.Must(template.New("test").Parse(vreplicationTemplate)) buf := bytes.NewBuffer(nil) tpl.Execute(buf, testStats.status()) - if buf.String() != wantOut { + if strings.Contains(buf.String(), wantOut) { t.Errorf("output: %v, want %v", buf, wantOut) } } diff --git a/go/vt/vttablet/tabletmanager/vreplication/vcopier.go b/go/vt/vttablet/tabletmanager/vreplication/vcopier.go index 37152f006e8..b663efe6e03 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/vcopier.go +++ b/go/vt/vttablet/tabletmanager/vreplication/vcopier.go @@ -30,10 +30,8 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/vt/binlog/binlogplayer" - "vitess.io/vitess/go/vt/grpcclient" "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/sqlparser" - "vitess.io/vitess/go/vt/vttablet/tabletconn" binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" querypb "vitess.io/vitess/go/vt/proto/query" @@ -176,21 +174,15 @@ func (vc *vcopier) copyTable(ctx context.Context, tableName string, copyState ma return fmt.Errorf("plan not found for table: %s, current plans are: %#v", tableName, plan.TargetTables) } - vsClient, err := tabletconn.GetDialer()(vc.vr.sourceTablet, grpcclient.FailFast(false)) + err = vc.vr.sourceVStreamer.Open(ctx) if err != nil { - return fmt.Errorf("error dialing tablet: %v", err) + return fmt.Errorf("error opening vsclient: %v", err) } - defer vsClient.Close(ctx) + defer vc.vr.sourceVStreamer.Close(ctx) ctx, cancel := context.WithTimeout(ctx, copyTimeout) defer cancel() - target := &querypb.Target{ - Keyspace: vc.vr.sourceTablet.Keyspace, - Shard: vc.vr.sourceTablet.Shard, - TabletType: vc.vr.sourceTablet.Type, - } - var lastpkpb *querypb.QueryResult if lastpkqr := copyState[tableName]; lastpkqr != nil { lastpkpb = sqltypes.ResultToProto3(lastpkqr) @@ -198,7 +190,7 @@ func (vc *vcopier) copyTable(ctx context.Context, tableName string, copyState ma var pkfields []*querypb.Field var updateCopyState *sqlparser.ParsedQuery - err = vsClient.VStreamRows(ctx, target, initialPlan.SendRule.Filter, lastpkpb, func(rows *binlogdatapb.VStreamRowsResponse) error { + err = vc.vr.sourceVStreamer.VStreamRows(ctx, initialPlan.SendRule.Filter, lastpkpb, func(rows *binlogdatapb.VStreamRowsResponse) error { select { case <-ctx.Done(): return io.EOF diff --git a/go/vt/vttablet/tabletmanager/vreplication/vplayer.go b/go/vt/vttablet/tabletmanager/vreplication/vplayer.go index 17a5359ca81..76460debbce 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/vplayer.go +++ b/go/vt/vttablet/tabletmanager/vreplication/vplayer.go @@ -28,12 +28,9 @@ import ( "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/vt/binlog/binlogplayer" - "vitess.io/vitess/go/vt/grpcclient" "vitess.io/vitess/go/vt/log" - "vitess.io/vitess/go/vt/vttablet/tabletconn" binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" - querypb "vitess.io/vitess/go/vt/proto/query" ) type vplayer struct { @@ -56,6 +53,8 @@ type vplayer struct { lastTimestampNs int64 // timeOffsetNs keeps track of the clock difference with respect to source tablet. timeOffsetNs int64 + // canAcceptStmtEvents set to true if the current player can accept events in statement mode. Only true for filters that are match all. + canAcceptStmtEvents bool } func newVPlayer(vr *vreplicator, settings binlogplayer.VRSettings, copyState map[string]*sqltypes.Result, pausePos mysql.Position) *vplayer { @@ -91,6 +90,15 @@ func (vp *vplayer) play(ctx context.Context) error { } vp.replicatorPlan = plan + // We can't run in statement mode if there are filters defined. + vp.canAcceptStmtEvents = true + for _, rule := range vp.vr.source.Filter.Rules { + if rule.Filter != "" || rule.Match != "/.*" { + vp.canAcceptStmtEvents = false + break + } + } + if err := vp.fetchAndApply(ctx); err != nil { msg := err.Error() vp.vr.stats.History.Add(&binlogplayer.StatsHistoryRecord{ @@ -105,28 +113,23 @@ func (vp *vplayer) play(ctx context.Context) error { return nil } -func (vp *vplayer) fetchAndApply(ctx context.Context) error { - log.Infof("Starting VReplication player id: %v, startPos: %v, stop: %v, source: %v, filter: %v", vp.vr.id, vp.startPos, vp.stopPos, vp.vr.sourceTablet, vp.vr.source) +func (vp *vplayer) fetchAndApply(ctx context.Context) (err error) { + log.Infof("Starting VReplication player id: %v, startPos: %v, stop: %v, filter: %v", vp.vr.id, vp.startPos, vp.stopPos, vp.vr.source) - vsClient, err := tabletconn.GetDialer()(vp.vr.sourceTablet, grpcclient.FailFast(false)) + err = vp.vr.sourceVStreamer.Open(ctx) if err != nil { - return fmt.Errorf("error dialing tablet: %v", err) + return fmt.Errorf("error creating vstreamer client: %v", err) } - defer vsClient.Close(ctx) + defer vp.vr.sourceVStreamer.Close(ctx) + ctx, cancel := context.WithCancel(ctx) defer cancel() relay := newRelayLog(ctx, relayLogMaxItems, relayLogMaxSize) - target := &querypb.Target{ - Keyspace: vp.vr.sourceTablet.Keyspace, - Shard: vp.vr.sourceTablet.Shard, - TabletType: vp.vr.sourceTablet.Type, - } - log.Infof("Sending vstream command: %v", vp.replicatorPlan.VStreamFilter) streamErr := make(chan error, 1) go func() { - streamErr <- vsClient.VStream(ctx, target, mysql.EncodePosition(vp.startPos), vp.replicatorPlan.VStreamFilter, func(events []*binlogdatapb.VEvent) error { + streamErr <- vp.vr.sourceVStreamer.VStream(ctx, mysql.EncodePosition(vp.startPos), vp.replicatorPlan.VStreamFilter, func(events []*binlogdatapb.VEvent) error { return relay.Send(events) }) }() @@ -143,6 +146,7 @@ func (vp *vplayer) fetchAndApply(ctx context.Context) error { cancel() <-streamErr }() + // If the apply thread ends with io.EOF, it means either the Engine // is shutting down and canceled the context, or stop position was reached, // or a journal event was encountered. @@ -172,6 +176,14 @@ func (vp *vplayer) fetchAndApply(ctx context.Context) error { } } +func (vp *vplayer) applyStmtEvent(ctx context.Context, event *binlogdatapb.VEvent) error { + if vp.canAcceptStmtEvents { + _, err := vp.vr.dbClient.ExecuteWithRetry(ctx, event.Dml) + return err + } + return fmt.Errorf("Filter rules are not supported for SBR replication: %v", vp.vr.source.Filter.GetRules()) +} + func (vp *vplayer) applyRowEvent(ctx context.Context, rowEvent *binlogdatapb.RowEvent) error { tplan := vp.tablePlans[rowEvent.TableName] if tplan == nil { @@ -337,7 +349,17 @@ func (vp *vplayer) applyEvent(ctx context.Context, event *binlogdatapb.VEvent, m return err } vp.tablePlans[event.FieldEvent.TableName] = tplan + case binlogdatapb.VEventType_INSERT, binlogdatapb.VEventType_DELETE, binlogdatapb.VEventType_UPDATE, binlogdatapb.VEventType_REPLACE: + // This is a player using stament based replication + if err := vp.vr.dbClient.Begin(); err != nil { + return err + } + + if err := vp.applyStmtEvent(ctx, event); err != nil { + return err + } case binlogdatapb.VEventType_ROW: + // This player is configured for row based replication if err := vp.vr.dbClient.Begin(); err != nil { return err } diff --git a/go/vt/vttablet/tabletmanager/vreplication/vplayer_test.go b/go/vt/vttablet/tabletmanager/vreplication/vplayer_test.go index 8b46dae3671..0c2c19ce088 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/vplayer_test.go +++ b/go/vt/vttablet/tabletmanager/vreplication/vplayer_test.go @@ -26,13 +26,99 @@ import ( "golang.org/x/net/context" - "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/vt/binlog/binlogplayer" binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" ) +func TestPlayerStatementModeWithFilter(t *testing.T) { + defer deleteTablet(addTablet(100)) + + execStatements(t, []string{ + "create table src1(id int, val varbinary(128), primary key(id))", + }) + defer execStatements(t, []string{ + "drop table src1", + }) + env.SchemaEngine.Reload(context.Background()) + + filter := &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "dst1", + Filter: "select * from src1", + }}, + } + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + cancel, _ := startVReplication(t, bls, "") + defer cancel() + + input := []string{ + "set @@session.binlog_format='STATEMENT'", + "insert into src1 values(1, 'aaa')", + "set @@session.binlog_format='ROW'", + } + + // It does not work when filter is enabled + output := []string{ + "begin", + "/update _vt.vreplication set message='Filter rules are not supported for SBR", + } + + execStatements(t, input) + expectDBClientQueries(t, output) +} + +func TestPlayerStatementMode(t *testing.T) { + defer deleteTablet(addTablet(100)) + + execStatements(t, []string{ + "create table src1(id int, val varbinary(128), primary key(id))", + fmt.Sprintf("create table %s.src1(id int, val varbinary(128), primary key(id))", vrepldb), + }) + defer execStatements(t, []string{ + "drop table src1", + fmt.Sprintf("drop table %s.src1", vrepldb), + }) + env.SchemaEngine.Reload(context.Background()) + + filter := &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "/.*", + Filter: "", + }}, + } + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + cancel, _ := startVReplication(t, bls, "") + defer cancel() + + input := []string{ + "set @@session.binlog_format='STATEMENT'", + "insert into src1 values(1, 'aaa')", + "set @@session.binlog_format='ROW'", + } + + output := []string{ + "begin", + "insert into src1 values(1, 'aaa')", + "/update _vt.vreplication set pos=", + "commit", + } + + execStatements(t, input) + expectDBClientQueries(t, output) +} + func TestPlayerFilters(t *testing.T) { defer deleteTablet(addTablet(100)) @@ -80,7 +166,13 @@ func TestPlayerFilters(t *testing.T) { Match: "/nopk", }}, } - cancel, _ := startVReplication(t, filter, binlogdatapb.OnDDLAction_IGNORE, "") + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + cancel, _ := startVReplication(t, bls, "") defer cancel() testcases := []struct { @@ -314,7 +406,15 @@ func TestPlayerKeywordNames(t *testing.T) { Filter: "select `primary`+1 as `primary`, concat(`column`, 'a') as `column` from `commit`", }}, } - cancel, _ := startVReplication(t, filter, binlogdatapb.OnDDLAction_IGNORE, "") + + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + + cancel, _ := startVReplication(t, bls, "") defer cancel() testcases := []struct { @@ -466,7 +566,13 @@ func TestUnicode(t *testing.T) { Filter: "select * from src1", }}, } - cancel, _ := startVReplication(t, filter, binlogdatapb.OnDDLAction_IGNORE, "") + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + cancel, _ := startVReplication(t, bls, "") defer cancel() testcases := []struct { @@ -533,7 +639,13 @@ func TestPlayerUpdates(t *testing.T) { Filter: "select id, grouped, ungrouped, sum(summed) as summed, count(*) as rcount from t1 group by id, grouped", }}, } - cancel, _ := startVReplication(t, filter, binlogdatapb.OnDDLAction_IGNORE, "") + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + cancel, _ := startVReplication(t, bls, "") defer cancel() testcases := []struct { @@ -642,7 +754,13 @@ func TestPlayerRowMove(t *testing.T) { Filter: "select val1, sum(val2) as sval2, count(*) as rcount from src group by val1", }}, } - cancel, _ := startVReplication(t, filter, binlogdatapb.OnDDLAction_IGNORE, "") + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + cancel, _ := startVReplication(t, bls, "") defer cancel() execStatements(t, []string{ @@ -717,7 +835,13 @@ func TestPlayerTypes(t *testing.T) { Match: "/.*", }}, } - cancel, _ := startVReplication(t, filter, binlogdatapb.OnDDLAction_IGNORE, "") + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + cancel, _ := startVReplication(t, bls, "") defer cancel() testcases := []struct { input string @@ -808,8 +932,13 @@ func TestPlayerDDL(t *testing.T) { Match: "/.*", }}, } - - cancel, _ := startVReplication(t, filter, binlogdatapb.OnDDLAction_IGNORE, "") + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + cancel, _ := startVReplication(t, bls, "") // Issue a dummy change to ensure vreplication is initialized. Otherwise there // is a race between the DDLs and the schema loader of vstreamer. // Root cause seems to be with MySQL where t1 shows up in information_schema before @@ -829,8 +958,13 @@ func TestPlayerDDL(t *testing.T) { "/update _vt.vreplication set pos=", }) cancel() - - cancel, id := startVReplication(t, filter, binlogdatapb.OnDDLAction_STOP, "") + bls = &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_STOP, + } + cancel, id := startVReplication(t, bls, "") execStatements(t, []string{"alter table t1 add column val varchar(128)"}) pos1 := masterPosition(t) execStatements(t, []string{"alter table t1 drop column val"}) @@ -857,9 +991,14 @@ func TestPlayerDDL(t *testing.T) { "commit", }) cancel() - + bls = &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_EXEC, + } execStatements(t, []string{fmt.Sprintf("alter table %s.t1 add column val2 varchar(128)", vrepldb)}) - cancel, _ = startVReplication(t, filter, binlogdatapb.OnDDLAction_EXEC, "") + cancel, _ = startVReplication(t, bls, "") execStatements(t, []string{"alter table t1 add column val1 varchar(128)"}) expectDBClientQueries(t, []string{ "alter table t1 add column val1 varchar(128)", @@ -880,8 +1019,14 @@ func TestPlayerDDL(t *testing.T) { fmt.Sprintf("alter table %s.t1 drop column val1", vrepldb), }) + bls = &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_EXEC_IGNORE, + } execStatements(t, []string{fmt.Sprintf("create table %s.t2(id int, primary key(id))", vrepldb)}) - cancel, _ = startVReplication(t, filter, binlogdatapb.OnDDLAction_EXEC_IGNORE, "") + cancel, _ = startVReplication(t, bls, "") execStatements(t, []string{"alter table t1 add column val1 varchar(128)"}) expectDBClientQueries(t, []string{ "alter table t1 add column val1 varchar(128)", @@ -1016,7 +1161,13 @@ func TestPlayerIdleUpdate(t *testing.T) { Match: "/.*", }}, } - cancel, _ := startVReplication(t, filter, binlogdatapb.OnDDLAction_IGNORE, "") + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + cancel, _ := startVReplication(t, bls, "") defer cancel() execStatements(t, []string{ @@ -1062,7 +1213,13 @@ func TestPlayerSplitTransaction(t *testing.T) { Match: "/.*", }}, } - cancel, _ := startVReplication(t, filter, binlogdatapb.OnDDLAction_IGNORE, "") + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + cancel, _ := startVReplication(t, bls, "") defer cancel() execStatements(t, []string{ @@ -1100,7 +1257,13 @@ func TestPlayerLockErrors(t *testing.T) { Match: "/.*", }}, } - cancel, _ := startVReplication(t, filter, binlogdatapb.OnDDLAction_IGNORE, "") + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + cancel, _ := startVReplication(t, bls, "") defer cancel() execStatements(t, []string{ @@ -1174,7 +1337,13 @@ func TestPlayerCancelOnLock(t *testing.T) { Match: "/.*", }}, } - cancel, _ := startVReplication(t, filter, binlogdatapb.OnDDLAction_IGNORE, "") + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + cancel, _ := startVReplication(t, bls, "") defer cancel() execStatements(t, []string{ @@ -1246,7 +1415,13 @@ func TestPlayerBatching(t *testing.T) { Match: "/.*", }}, } - cancel, _ := startVReplication(t, filter, binlogdatapb.OnDDLAction_EXEC, "") + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_EXEC, + } + cancel, _ := startVReplication(t, bls, "") defer cancel() execStatements(t, []string{ @@ -1346,7 +1521,13 @@ func TestPlayerRelayLogMaxSize(t *testing.T) { Match: "/.*", }}, } - cancel, _ := startVReplication(t, filter, binlogdatapb.OnDDLAction_IGNORE, "") + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + cancel, _ := startVReplication(t, bls, "") defer cancel() execStatements(t, []string{ @@ -1435,7 +1616,13 @@ func TestRestartOnVStreamEnd(t *testing.T) { Match: "/.*", }}, } - cancel, _ := startVReplication(t, filter, binlogdatapb.OnDDLAction_IGNORE, "") + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + cancel, _ := startVReplication(t, bls, "") defer cancel() execStatements(t, []string{ @@ -1486,7 +1673,14 @@ func TestTimestamp(t *testing.T) { Match: "/.*", }}, } - cancel, _ := startVReplication(t, filter, binlogdatapb.OnDDLAction_IGNORE, "") + + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + cancel, _ := startVReplication(t, bls, "") defer cancel() qr, err := env.Mysqld.FetchSuperQuery(context.Background(), "select now()") @@ -1511,22 +1705,9 @@ func TestTimestamp(t *testing.T) { expectData(t, "t1", [][]string{{"1", want, want}}) } -func execStatements(t *testing.T, queries []string) { - t.Helper() - if err := env.Mysqld.ExecuteSuperQueryList(context.Background(), queries); err != nil { - t.Error(err) - } -} - -func startVReplication(t *testing.T, filter *binlogdatapb.Filter, onddl binlogdatapb.OnDDLAction, pos string) (cancelFunc func(), id int) { +func startVReplication(t *testing.T, bls *binlogdatapb.BinlogSource, pos string) (cancelFunc func(), id int) { t.Helper() - bls := &binlogdatapb.BinlogSource{ - Keyspace: env.KeyspaceName, - Shard: env.ShardName, - Filter: filter, - OnDdl: onddl, - } if pos == "" { pos = masterPosition(t) } @@ -1552,12 +1733,3 @@ func startVReplication(t *testing.T, filter *binlogdatapb.Filter, onddl binlogda }) }, int(qr.InsertID) } - -func masterPosition(t *testing.T) string { - t.Helper() - pos, err := env.Mysqld.MasterPosition() - if err != nil { - t.Fatal(err) - } - return mysql.EncodePosition(pos) -} diff --git a/go/vt/vttablet/tabletmanager/vreplication/vreplicator.go b/go/vt/vttablet/tabletmanager/vreplication/vreplicator.go index 395031c8658..a736920c741 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/vreplicator.go +++ b/go/vt/vttablet/tabletmanager/vreplication/vreplicator.go @@ -30,7 +30,6 @@ import ( "vitess.io/vitess/go/vt/mysqlctl" binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" - topodatapb "vitess.io/vitess/go/vt/proto/topodata" ) var ( @@ -45,31 +44,35 @@ var ( replicaLagTolerance = 10 * time.Second ) +// vreplicator provides the core logic to start vreplication streams type vreplicator struct { - vre *Engine - id uint32 - source *binlogdatapb.BinlogSource - sourceTablet *topodatapb.Tablet - stats *binlogplayer.Stats - dbClient *vdbClient + vre *Engine + id uint32 + dbClient *vdbClient + // source + source *binlogdatapb.BinlogSource + sourceVStreamer VStreamerClient + + stats *binlogplayer.Stats // mysqld is used to fetch the local schema. - mysqld mysqlctl.MysqlDaemon - + mysqld mysqlctl.MysqlDaemon tableKeys map[string][]string } -func newVReplicator(id uint32, source *binlogdatapb.BinlogSource, sourceTablet *topodatapb.Tablet, stats *binlogplayer.Stats, dbClient binlogplayer.DBClient, mysqld mysqlctl.MysqlDaemon, vre *Engine) *vreplicator { +// newVReplicator creates a new vreplicator +func newVReplicator(id uint32, source *binlogdatapb.BinlogSource, sourceVStreamer VStreamerClient, stats *binlogplayer.Stats, dbClient binlogplayer.DBClient, mysqld mysqlctl.MysqlDaemon, vre *Engine) *vreplicator { return &vreplicator{ - vre: vre, - id: id, - source: source, - sourceTablet: sourceTablet, - stats: stats, - dbClient: newVDBClient(dbClient, stats), - mysqld: mysqld, + vre: vre, + id: id, + source: source, + sourceVStreamer: sourceVStreamer, + stats: stats, + dbClient: newVDBClient(dbClient, stats), + mysqld: mysqld, } } +// Replicate starts a vreplication stream. func (vr *vreplicator) Replicate(ctx context.Context) error { tableKeys, err := vr.buildTableKeys() if err != nil { @@ -86,6 +89,7 @@ func (vr *vreplicator) Replicate(ctx context.Context) error { if settings.State == binlogplayer.BlpStopped { return nil } + switch { case numTablesToCopy != 0: if err := newVCopier(vr).copyNext(ctx, settings); err != nil { diff --git a/go/vt/vttablet/tabletmanager/vreplication/vstreamer_client.go b/go/vt/vttablet/tabletmanager/vreplication/vstreamer_client.go new file mode 100644 index 00000000000..96c4eeacb71 --- /dev/null +++ b/go/vt/vttablet/tabletmanager/vreplication/vstreamer_client.go @@ -0,0 +1,220 @@ +/* +Copyright 2019 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 vreplication + +import ( + "errors" + "fmt" + "sync" + + "golang.org/x/net/context" + + "vitess.io/vitess/go/mysql" + "vitess.io/vitess/go/sqltypes" + "vitess.io/vitess/go/vt/dbconfigs" + "vitess.io/vitess/go/vt/grpcclient" + "vitess.io/vitess/go/vt/vtgate/vindexes" + "vitess.io/vitess/go/vt/vttablet/queryservice" + "vitess.io/vitess/go/vt/vttablet/tabletconn" + "vitess.io/vitess/go/vt/vttablet/tabletserver/connpool" + "vitess.io/vitess/go/vt/vttablet/tabletserver/schema" + "vitess.io/vitess/go/vt/vttablet/tabletserver/tabletenv" + "vitess.io/vitess/go/vt/vttablet/tabletserver/vstreamer" + + binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" + querypb "vitess.io/vitess/go/vt/proto/query" + topodatapb "vitess.io/vitess/go/vt/proto/topodata" +) + +var ( + _ VStreamerClient = (*TabletVStreamerClient)(nil) + _ VStreamerClient = (*MySQLVStreamerClient)(nil) + dbcfgs *dbconfigs.DBConfigs +) + +// VStreamerClient exposes the core interface of a vstreamer +type VStreamerClient interface { + // Open sets up all the environment for a vstream + Open(ctx context.Context) error + // Close closes a vstream + Close(ctx context.Context) error + + // VStream streams VReplication events based on the specified filter. + VStream(ctx context.Context, startPos string, filter *binlogdatapb.Filter, send func([]*binlogdatapb.VEvent) error) error + + // VStreamRows streams rows of a table from the specified starting point. + VStreamRows(ctx context.Context, query string, lastpk *querypb.QueryResult, send func(*binlogdatapb.VStreamRowsResponse) error) error +} + +// TabletVStreamerClient a vstream client backed by vttablet +type TabletVStreamerClient struct { + // mu protects isOpen, streamers, streamIdx and kschema. + mu sync.Mutex + + isOpen bool + + tablet *topodatapb.Tablet + target *querypb.Target + tsQueryService queryservice.QueryService +} + +// MySQLVStreamerClient a vstream client backed by MySQL +type MySQLVStreamerClient struct { + // mu protects isOpen, streamers, streamIdx and kschema. + mu sync.Mutex + + isOpen bool + + sourceConnParams *mysql.ConnParams + sourceSe *schema.Engine +} + +// NewTabletVStreamerClient creates a new TabletVStreamerClient +func NewTabletVStreamerClient(tablet *topodatapb.Tablet) *TabletVStreamerClient { + return &TabletVStreamerClient{ + tablet: tablet, + target: &querypb.Target{ + Keyspace: tablet.Keyspace, + Shard: tablet.Shard, + TabletType: tablet.Type, + }, + } +} + +// Open part of the VStreamerClient interface +func (vsClient *TabletVStreamerClient) Open(ctx context.Context) (err error) { + vsClient.mu.Lock() + defer vsClient.mu.Unlock() + if vsClient.isOpen { + return nil + } + vsClient.isOpen = true + + vsClient.tsQueryService, err = tabletconn.GetDialer()(vsClient.tablet, grpcclient.FailFast(false)) + return err +} + +// Close part of the VStreamerClient interface +func (vsClient *TabletVStreamerClient) Close(ctx context.Context) (err error) { + vsClient.mu.Lock() + defer vsClient.mu.Unlock() + if !vsClient.isOpen { + return nil + } + vsClient.isOpen = false + return vsClient.tsQueryService.Close(ctx) +} + +// VStream part of the VStreamerClient interface +func (vsClient *TabletVStreamerClient) VStream(ctx context.Context, startPos string, filter *binlogdatapb.Filter, send func([]*binlogdatapb.VEvent) error) error { + if !vsClient.isOpen { + return errors.New("Can't VStream without opening client") + } + return vsClient.tsQueryService.VStream(ctx, vsClient.target, startPos, filter, send) +} + +// VStreamRows part of the VStreamerClient interface +func (vsClient *TabletVStreamerClient) VStreamRows(ctx context.Context, query string, lastpk *querypb.QueryResult, send func(*binlogdatapb.VStreamRowsResponse) error) error { + if !vsClient.isOpen { + return errors.New("Can't VStreamRows without opening client") + } + return vsClient.tsQueryService.VStreamRows(ctx, vsClient.target, query, lastpk, send) +} + +// NewMySQLVStreamerClient is a vstream client that allows you to stream directly from MySQL. +// In order to achieve this, the following creates a vstreamer Engine with a dummy in memorytopo. +func NewMySQLVStreamerClient() *MySQLVStreamerClient { + if dbcfgs == nil { + panic("can't use MySQLVStreamerClient without calling InitVStreamerClient() ") + } + // TODO: For now external mysql streams can only be used with ExternalReplWithDB creds. + // In the future we will support multiple users. + vsClient := &MySQLVStreamerClient{ + sourceConnParams: dbcfgs.ExternalReplWithDB(), + } + return vsClient +} + +// Open part of the VStreamerClient interface +func (vsClient *MySQLVStreamerClient) Open(ctx context.Context) (err error) { + vsClient.mu.Lock() + defer vsClient.mu.Unlock() + if vsClient.isOpen { + return nil + } + vsClient.isOpen = true + + // Let's create all the required components by vstreamer + + vsClient.sourceSe = schema.NewEngine(checker{}, tabletenv.DefaultQsConfig) + vsClient.sourceSe.InitDBConfig(vsClient.sourceConnParams) + err = vsClient.sourceSe.Open() + if err != nil { + return err + } + return nil +} + +// Close part of the VStreamerClient interface +func (vsClient *MySQLVStreamerClient) Close(ctx context.Context) (err error) { + vsClient.mu.Lock() + defer vsClient.mu.Unlock() + if !vsClient.isOpen { + return nil + } + + vsClient.isOpen = false + vsClient.sourceSe.Close() + return nil +} + +// VStream part of the VStreamerClient interface +func (vsClient *MySQLVStreamerClient) VStream(ctx context.Context, startPos string, filter *binlogdatapb.Filter, send func([]*binlogdatapb.VEvent) error) error { + if !vsClient.isOpen { + return errors.New("Can't VStream without opening client") + } + streamer := vstreamer.NewVStreamer(ctx, vsClient.sourceConnParams, vsClient.sourceSe, startPos, filter, &vindexes.KeyspaceSchema{}, send) + return streamer.Stream() +} + +// VStreamRows part of the VStreamerClient interface +func (vsClient *MySQLVStreamerClient) VStreamRows(ctx context.Context, query string, lastpk *querypb.QueryResult, send func(*binlogdatapb.VStreamRowsResponse) error) error { + if !vsClient.isOpen { + return errors.New("Can't VStreamRows without opening client") + } + var row []sqltypes.Value + if lastpk != nil { + r := sqltypes.Proto3ToResult(lastpk) + if len(r.Rows) != 1 { + return fmt.Errorf("unexpected lastpk input: %v", lastpk) + } + row = r.Rows[0] + } + streamer := vstreamer.NewRowStreamer(ctx, vsClient.sourceConnParams, vsClient.sourceSe, query, row, &vindexes.KeyspaceSchema{}, send) + return streamer.Stream() +} + +// InitVStreamerClient initializes config for vstreamer client +func InitVStreamerClient(cfg *dbconfigs.DBConfigs) { + dbcfgs = cfg +} + +type checker struct{} + +var _ = connpool.MySQLChecker(checker{}) + +func (checker) CheckMySQL() {} diff --git a/go/vt/vttablet/tabletmanager/vreplication/vstreamer_client_test.go b/go/vt/vttablet/tabletmanager/vreplication/vstreamer_client_test.go new file mode 100644 index 00000000000..e7d52d58102 --- /dev/null +++ b/go/vt/vttablet/tabletmanager/vreplication/vstreamer_client_test.go @@ -0,0 +1,533 @@ +/* +Copyright 2019 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 vreplication + +import ( + "fmt" + "reflect" + "strings" + "testing" + "time" + + "golang.org/x/net/context" + + "vitess.io/vitess/go/mysql" + "vitess.io/vitess/go/vt/vttablet/queryservice" + "vitess.io/vitess/go/vt/vttablet/tabletserver/schema" + "vitess.io/vitess/go/vt/vttablet/tabletserver/vstreamer" + + binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" + querypb "vitess.io/vitess/go/vt/proto/query" + topodatapb "vitess.io/vitess/go/vt/proto/topodata" +) + +func TestTabletVStreamerClientOpen(t *testing.T) { + tablet := addTablet(100) + defer deleteTablet(tablet) + + type fields struct { + isOpen bool + tablet *topodatapb.Tablet + target *querypb.Target + tsQueryService queryservice.QueryService + } + type args struct { + ctx context.Context + } + tests := []struct { + name string + fields fields + args args + err string + }{ + { + name: "initializes streamer client", + fields: fields{ + tablet: tablet, + }, + args: args{ + ctx: context.Background(), + }, + }, + } + + for _, tcase := range tests { + t.Run(tcase.name, func(t *testing.T) { + vsClient := &TabletVStreamerClient{ + tablet: tcase.fields.tablet, + } + + err := vsClient.Open(tcase.args.ctx) + + if err != nil { + if !strings.Contains(err.Error(), tcase.err) { + t.Errorf("TabletVStreamerClient.Open() error:\n%v, want\n%v", err, tcase.err) + } + return + } + + if tcase.err != "" { + t.Errorf("TabletVStreamerClient.Open() error:\n%v, want\n%v", err, tcase.err) + } + + if !vsClient.isOpen { + t.Errorf("TabletVStreamerClient.Open() isOpen set to false, expected true") + } + + if vsClient.tablet == nil { + t.Errorf("TabletVStreamerClient.Open() expected sourceSe to be set") + } + }) + } +} + +func TestTabletVStreamerClientClose(t *testing.T) { + tablet := addTablet(100) + defer deleteTablet(tablet) + + type fields struct { + isOpen bool + tablet *topodatapb.Tablet + target *querypb.Target + tsQueryService queryservice.QueryService + } + type args struct { + ctx context.Context + } + tests := []struct { + name string + fields fields + args args + err string + }{ + { + name: "closes engine correctly", + fields: fields{ + tablet: tablet, + }, + args: args{ + ctx: context.Background(), + }, + }, + } + + for _, tcase := range tests { + t.Run(tcase.name, func(t *testing.T) { + vsClient := &TabletVStreamerClient{ + tablet: tcase.fields.tablet, + } + + err := vsClient.Open(tcase.args.ctx) + if err != nil { + t.Errorf("Failed to Open vsClient") + return + } + + err = vsClient.Close(tcase.args.ctx) + + if tcase.err != "" { + t.Errorf("MySQLVStreamerClient.Close() error:\n%v, want\n%v", err, tcase.err) + } + + if vsClient.isOpen { + t.Errorf("MySQLVStreamerClient.Close() isOpen set to true, expected false") + } + }) + } +} + +func TestTabletVStreamerClientVStream(t *testing.T) { + tablet := addTablet(100) + defer deleteTablet(tablet) + + vsClient := &TabletVStreamerClient{ + tablet: tablet, + target: &querypb.Target{ + Keyspace: tablet.Keyspace, + Shard: tablet.Shard, + TabletType: tablet.Type, + }, + } + + filter := &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "/.*", + }}, + } + eventsChan := make(chan *binlogdatapb.VEvent, 1000) + send := func(events []*binlogdatapb.VEvent) error { + fmt.Println(events) + fmt.Println(len(events)) + for _, e := range events { + eventsChan <- e + } + return nil + } + + execStatements(t, []string{ + "create table t1(id int, ts timestamp, dt datetime)", + fmt.Sprintf("create table %s.t1(id int, ts timestamp, dt datetime)", vrepldb), + }) + defer execStatements(t, []string{ + "drop table t1", + fmt.Sprintf("drop table %s.t1", vrepldb), + }) + + ctx := context.Background() + err := vsClient.Open(ctx) + if err != nil { + t.Errorf("Failed to Open vsClient") + return + } + + defer vsClient.Close(ctx) + + pos := masterPosition(t) + // This asserts that events are flowing through the VStream when using mysql client + go vsClient.VStream(ctx, pos, filter, send) + + qr, err := env.Mysqld.FetchSuperQuery(context.Background(), "select now()") + if err != nil { + t.Fatal(err) + } + want := qr.Rows[0][0].ToString() + execStatements(t, []string{ + fmt.Sprintf("insert into t1 values(1, '%s', '%s')", want, want), + }) + + select { + case got := <-eventsChan: + if got.Type != binlogdatapb.VEventType_BEGIN { + t.Errorf("Did not get expected events: want: %v, got: %v", binlogdatapb.VEventType_BEGIN, got.Type) + } + case <-time.After(5 * time.Second): + t.Errorf("no events received") + } +} + +func TestTabletVStreamerClientVStreamRows(t *testing.T) { + tablet := addTablet(100) + defer deleteTablet(tablet) + + vsClient := &TabletVStreamerClient{ + tablet: tablet, + } + + eventsChan := make(chan *querypb.Row, 1000) + send := func(streamerResponse *binlogdatapb.VStreamRowsResponse) error { + for _, row := range streamerResponse.Rows { + eventsChan <- row + } + return nil + } + + execStatements(t, []string{ + "create table t1(id int, ts timestamp, dt datetime)", + fmt.Sprintf("create table %s.t1(id int, ts timestamp, dt datetime)", vrepldb), + }) + defer execStatements(t, []string{ + "drop table t1", + fmt.Sprintf("drop table %s.t1", vrepldb), + }) + + qr, err := env.Mysqld.FetchSuperQuery(context.Background(), "select now()") + if err != nil { + t.Fatal(err) + } + want := qr.Rows[0][0].ToString() + ctx := context.Background() + err = vsClient.Open(ctx) + if err != nil { + t.Errorf("Failed to Open vsClient") + return + } + + defer vsClient.Close(ctx) + + // This asserts that events are flowing through the VStream when using mysql client + go vsClient.VStreamRows(ctx, "select * from t1", nil, send) + + execStatements(t, []string{ + fmt.Sprintf("insert into t1 values(1, '%s', '%s')", want, want), + }) + + select { + case <-eventsChan: + // Success got expected + case <-time.After(5 * time.Second): + t.Errorf("no events received") + } +} + +func TestNewMySQLVStreamerClient(t *testing.T) { + tests := []struct { + name string + want *MySQLVStreamerClient + }{ + { + name: "sets conn params for MySQLVStreamerClient ", + want: &MySQLVStreamerClient{ + sourceConnParams: env.Dbcfgs.ExternalReplWithDB(), + }, + }, + } + for _, tcase := range tests { + t.Run(tcase.name, func(t *testing.T) { + if got := NewMySQLVStreamerClient(); !reflect.DeepEqual(got, tcase.want) { + t.Errorf("NewMySQLVStreamerClient() = %v, want %v", got, tcase.want) + } + }) + } +} + +func TestMySQLVStreamerClientOpen(t *testing.T) { + type fields struct { + isOpen bool + sourceConnParams *mysql.ConnParams + } + type args struct { + ctx context.Context + } + tests := []struct { + name string + fields fields + args args + err string + }{ + { + name: "initializes streamer correctly", + fields: fields{ + sourceConnParams: env.Dbcfgs.ExternalReplWithDB(), + }, + args: args{ + ctx: context.Background(), + }, + }, + { + name: "returns error when invalid conn params are provided", + fields: fields{ + sourceConnParams: &mysql.ConnParams{ + Host: "invalidhost", + Port: 3306, + }, + }, + args: args{ + ctx: context.Background(), + }, + err: "failed: dial tcp: lookup invalidhost", + }, + } + for _, tcase := range tests { + t.Run(tcase.name, func(t *testing.T) { + vsClient := &MySQLVStreamerClient{ + sourceConnParams: tcase.fields.sourceConnParams, + } + + err := vsClient.Open(tcase.args.ctx) + + if err != nil { + if !strings.Contains(err.Error(), tcase.err) { + t.Errorf("MySQLVStreamerClient.Open() error:\n%v, want\n%v", err, tcase.err) + } + return + } + + if tcase.err != "" { + t.Errorf("MySQLVStreamerClient.Open() error:\n%v, want\n%v", err, tcase.err) + } + + if !vsClient.isOpen { + t.Errorf("MySQLVStreamerClient.Open() isOpen set to false, expected true") + } + + if !vsClient.sourceSe.IsOpen() { + t.Errorf("MySQLVStreamerClient.Open() expected sourceSe to be opened") + } + }) + } +} + +func TestMySQLVStreamerClientClose(t *testing.T) { + type fields struct { + isOpen bool + sourceConnParams *mysql.ConnParams + vsEngine *vstreamer.Engine + sourceSe *schema.Engine + } + type args struct { + ctx context.Context + } + + tests := []struct { + name string + fields fields + args args + err string + }{ + { + name: "closes engine correctly", + fields: fields{ + sourceConnParams: env.Dbcfgs.ExternalReplWithDB(), + }, + args: args{ + ctx: context.Background(), + }, + }, + } + + for _, tcase := range tests { + t.Run(tcase.name, func(t *testing.T) { + vsClient := &MySQLVStreamerClient{ + isOpen: tcase.fields.isOpen, + sourceConnParams: tcase.fields.sourceConnParams, + } + + err := vsClient.Open(tcase.args.ctx) + if err != nil { + t.Errorf("Failed to Open vsClient") + return + } + + err = vsClient.Close(tcase.args.ctx) + + if tcase.err != "" { + t.Errorf("MySQLVStreamerClient.Close() error:\n%v, want\n%v", err, tcase.err) + } + + if vsClient.isOpen { + t.Errorf("MySQLVStreamerClient.Close() isOpen set to true, expected false") + } + + if vsClient.sourceSe.IsOpen() { + t.Errorf("MySQLVStreamerClient.Close() expected sourceSe to be closed") + } + }) + } +} + +func TestMySQLVStreamerClientVStream(t *testing.T) { + vsClient := &MySQLVStreamerClient{ + sourceConnParams: env.Dbcfgs.ExternalReplWithDB(), + } + + filter := &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "/.*", + }}, + } + eventsChan := make(chan *binlogdatapb.VEvent, 1000) + send := func(events []*binlogdatapb.VEvent) error { + fmt.Println(events) + fmt.Println(len(events)) + for _, e := range events { + eventsChan <- e + } + return nil + } + + execStatements(t, []string{ + "create table t1(id int, ts timestamp, dt datetime)", + fmt.Sprintf("create table %s.t1(id int, ts timestamp, dt datetime)", vrepldb), + }) + defer execStatements(t, []string{ + "drop table t1", + fmt.Sprintf("drop table %s.t1", vrepldb), + }) + + ctx := context.Background() + err := vsClient.Open(ctx) + if err != nil { + t.Errorf("Failed to Open vsClient") + return + } + + defer vsClient.Close(ctx) + + pos := masterPosition(t) + // This asserts that events are flowing through the VStream when using mysql client + go vsClient.VStream(ctx, pos, filter, send) + + qr, err := env.Mysqld.FetchSuperQuery(context.Background(), "select now()") + if err != nil { + t.Fatal(err) + } + want := qr.Rows[0][0].ToString() + execStatements(t, []string{ + fmt.Sprintf("insert into t1 values(1, '%s', '%s')", want, want), + }) + + select { + case got := <-eventsChan: + if got.Type != binlogdatapb.VEventType_BEGIN { + t.Errorf("Did not get expected events: want: %v, got: %v", binlogdatapb.VEventType_BEGIN, got.Type) + } + case <-time.After(5 * time.Second): + t.Errorf("no events received") + } +} + +func TestMySQLVStreamerClientVStreamRows(t *testing.T) { + vsClient := &MySQLVStreamerClient{ + sourceConnParams: env.Dbcfgs.ExternalReplWithDB(), + } + + eventsChan := make(chan *querypb.Row, 1000) + send := func(streamerResponse *binlogdatapb.VStreamRowsResponse) error { + for _, row := range streamerResponse.Rows { + eventsChan <- row + } + return nil + } + + execStatements(t, []string{ + "create table t1(id int, ts timestamp, dt datetime)", + fmt.Sprintf("create table %s.t1(id int, ts timestamp, dt datetime)", vrepldb), + }) + defer execStatements(t, []string{ + "drop table t1", + fmt.Sprintf("drop table %s.t1", vrepldb), + }) + + qr, err := env.Mysqld.FetchSuperQuery(context.Background(), "select now()") + if err != nil { + t.Fatal(err) + } + want := qr.Rows[0][0].ToString() + + ctx := context.Background() + err = vsClient.Open(ctx) + if err != nil { + t.Errorf("Failed to Open vsClient") + return + } + + defer vsClient.Close(ctx) + + // This asserts that events are flowing through the VStream when using mysql client + go vsClient.VStreamRows(ctx, "select * from t1", nil, send) + + execStatements(t, []string{ + fmt.Sprintf("insert into t1 values(1, '%s', '%s')", want, want), + }) + + select { + case <-eventsChan: + // Success got expected + case <-time.After(5 * time.Second): + t.Errorf("no events received") + } +} diff --git a/go/vt/vttablet/tabletserver/query_engine_test.go b/go/vt/vttablet/tabletserver/query_engine_test.go index 0e7ec722e62..2aef69cbed6 100644 --- a/go/vt/vttablet/tabletserver/query_engine_test.go +++ b/go/vt/vttablet/tabletserver/query_engine_test.go @@ -54,7 +54,7 @@ func TestStrictMode(t *testing.T) { // config.EnforceStrictTransTable is true by default. qe := NewQueryEngine(DummyChecker, schema.NewEngine(DummyChecker, config), config) qe.InitDBConfig(dbcfgs) - qe.se.InitDBConfig(dbcfgs) + qe.se.InitDBConfig(dbcfgs.DbaWithDB()) qe.se.Open() if err := qe.Open(); err != nil { t.Error(err) @@ -298,7 +298,7 @@ func newTestQueryEngine(queryPlanCacheSize int, idleTimeout time.Duration, stric config.IdleTimeout = float64(idleTimeout) / 1e9 se := schema.NewEngine(DummyChecker, config) qe := NewQueryEngine(DummyChecker, se, config) - se.InitDBConfig(dbcfgs) + se.InitDBConfig(dbcfgs.DbaWithDB()) qe.InitDBConfig(dbcfgs) return qe } diff --git a/go/vt/vttablet/tabletserver/schema/engine.go b/go/vt/vttablet/tabletserver/schema/engine.go index 0a1acb44dd5..a10e36473cd 100644 --- a/go/vt/vttablet/tabletserver/schema/engine.go +++ b/go/vt/vttablet/tabletserver/schema/engine.go @@ -31,7 +31,6 @@ import ( "vitess.io/vitess/go/stats" "vitess.io/vitess/go/timer" "vitess.io/vitess/go/vt/concurrency" - "vitess.io/vitess/go/vt/dbconfigs" "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/vterrors" @@ -48,7 +47,7 @@ type notifier func(full map[string]*Table, created, altered, dropped []string) // Engine stores the schema info and performs operations that // keep itself up-to-date. type Engine struct { - dbconfigs *dbconfigs.DBConfigs + cp *mysql.ConnParams // mu protects the following fields. mu sync.Mutex @@ -100,8 +99,8 @@ func NewEngine(checker connpool.MySQLChecker, config tabletenv.TabletConfig) *En } // InitDBConfig must be called before Open. -func (se *Engine) InitDBConfig(dbcfgs *dbconfigs.DBConfigs) { - se.dbconfigs = dbcfgs +func (se *Engine) InitDBConfig(cp *mysql.ConnParams) { + se.cp = cp } // Open initializes the Engine. Calling Open on an already @@ -115,8 +114,7 @@ func (se *Engine) Open() error { start := time.Now() defer func() { log.Infof("Time taken to load the schema: %v", time.Since(start)) }() ctx := tabletenv.LocalContext() - dbaParams := se.dbconfigs.DbaWithDB() - se.conns.Open(dbaParams, dbaParams, dbaParams) + se.conns.Open(se.cp, se.cp, se.cp) conn, err := se.conns.Get(ctx) if err != nil { @@ -195,6 +193,13 @@ func (se *Engine) Open() error { return nil } +// IsOpen() checks if engine is open +func (se *Engine) IsOpen() bool { + se.mu.Lock() + defer se.mu.Unlock() + return se.isOpen +} + // Close shuts down Engine and is idempotent. // It can be re-opened after Close. func (se *Engine) Close() { diff --git a/go/vt/vttablet/tabletserver/schema/engine_test.go b/go/vt/vttablet/tabletserver/schema/engine_test.go index 259140a84f6..a25a4dac0a7 100644 --- a/go/vt/vttablet/tabletserver/schema/engine_test.go +++ b/go/vt/vttablet/tabletserver/schema/engine_test.go @@ -412,7 +412,7 @@ func newEngine(queryPlanCacheSize int, reloadTime time.Duration, idleTimeout tim config.SchemaReloadTime = float64(reloadTime) / 1e9 config.IdleTimeout = float64(idleTimeout) / 1e9 se := NewEngine(DummyChecker, config) - se.InitDBConfig(newDBConfigs(db)) + se.InitDBConfig(newDBConfigs(db).DbaWithDB()) return se } diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go index 1de6dbfa8dd..8048a2cebcd 100644 --- a/go/vt/vttablet/tabletserver/tabletserver.go +++ b/go/vt/vttablet/tabletserver/tabletserver.go @@ -386,14 +386,14 @@ func (tsv *TabletServer) InitDBConfig(target querypb.Target, dbcfgs *dbconfigs.D tsv.target = target tsv.dbconfigs = dbcfgs - tsv.se.InitDBConfig(tsv.dbconfigs) + tsv.se.InitDBConfig(tsv.dbconfigs.DbaWithDB()) tsv.qe.InitDBConfig(tsv.dbconfigs) tsv.teCtrl.InitDBConfig(tsv.dbconfigs) tsv.hw.InitDBConfig(tsv.dbconfigs) tsv.hr.InitDBConfig(tsv.dbconfigs) tsv.messager.InitDBConfig(tsv.dbconfigs) tsv.watcher.InitDBConfig(tsv.dbconfigs) - tsv.vstreamer.InitDBConfig(tsv.dbconfigs) + tsv.vstreamer.InitDBConfig(tsv.dbconfigs.DbaWithDB()) return nil } diff --git a/go/vt/vttablet/tabletserver/vstreamer/engine.go b/go/vt/vttablet/tabletserver/vstreamer/engine.go index 67ae75be8c0..19b54c572d6 100644 --- a/go/vt/vttablet/tabletserver/vstreamer/engine.go +++ b/go/vt/vttablet/tabletserver/vstreamer/engine.go @@ -28,7 +28,6 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/stats" - "vitess.io/vitess/go/vt/dbconfigs" "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/srvtopo" "vitess.io/vitess/go/vt/topo" @@ -97,8 +96,8 @@ func NewEngine(ts srvtopo.Server, se *schema.Engine) *Engine { } // InitDBConfig performs saves the required info from dbconfigs for future use. -func (vse *Engine) InitDBConfig(dbcfgs *dbconfigs.DBConfigs) { - vse.cp = dbcfgs.DbaWithDB() +func (vse *Engine) InitDBConfig(cp *mysql.ConnParams) { + vse.cp = cp } // Open starts the Engine service. @@ -114,6 +113,13 @@ func (vse *Engine) Open(keyspace, cell string) error { return nil } +// IsOpen checks if the engine is opened +func (vse *Engine) IsOpen() bool { + vse.mu.Lock() + defer vse.mu.Unlock() + return vse.isOpen +} + // Close closes the Engine service. func (vse *Engine) Close() { func() { @@ -160,7 +166,7 @@ func (vse *Engine) Stream(ctx context.Context, startPos string, filter *binlogda if !vse.isOpen { return nil, 0, errors.New("VStreamer is not open") } - streamer := newVStreamer(ctx, vse.cp, vse.se, startPos, filter, vse.kschema, send) + streamer := NewVStreamer(ctx, vse.cp, vse.se, startPos, filter, vse.kschema, send) idx := vse.streamIdx vse.streamers[idx] = streamer vse.streamIdx++ @@ -200,7 +206,7 @@ func (vse *Engine) StreamRows(ctx context.Context, query string, lastpk []sqltyp if !vse.isOpen { return nil, 0, errors.New("VStreamer is not open") } - rowStreamer := newRowStreamer(ctx, vse.cp, vse.se, query, lastpk, vse.kschema, send) + rowStreamer := NewRowStreamer(ctx, vse.cp, vse.se, query, lastpk, vse.kschema, send) idx := vse.streamIdx vse.rowStreamers[idx] = rowStreamer vse.streamIdx++ diff --git a/go/vt/vttablet/tabletserver/vstreamer/main_test.go b/go/vt/vttablet/tabletserver/vstreamer/main_test.go index 0b5acf7017b..cda8ad22251 100644 --- a/go/vt/vttablet/tabletserver/vstreamer/main_test.go +++ b/go/vt/vttablet/tabletserver/vstreamer/main_test.go @@ -49,7 +49,7 @@ func TestMain(m *testing.M) { // engine cannot be initialized in testenv because it introduces // circular dependencies. engine = NewEngine(env.SrvTopo, env.SchemaEngine) - engine.InitDBConfig(env.Dbcfgs) + engine.InitDBConfig(env.Dbcfgs.DbaWithDB()) engine.Open(env.KeyspaceName, env.Cells[0]) defer engine.Close() diff --git a/go/vt/vttablet/tabletserver/vstreamer/planbuilder.go b/go/vt/vttablet/tabletserver/vstreamer/planbuilder.go index 43affd74d35..028b6447ad5 100644 --- a/go/vt/vttablet/tabletserver/vstreamer/planbuilder.go +++ b/go/vt/vttablet/tabletserver/vstreamer/planbuilder.go @@ -99,6 +99,13 @@ func (plan *Plan) filter(values []sqltypes.Value) (bool, []sqltypes.Value, error return true, result, nil } +func mustSendStmt(query mysql.Query, dbname string) bool { + if query.Database != "" && query.Database != dbname { + return false + } + return true +} + func mustSendDDL(query mysql.Query, dbname string, filter *binlogdatapb.Filter) bool { if query.Database != "" && query.Database != dbname { return false diff --git a/go/vt/vttablet/tabletserver/vstreamer/rowstreamer.go b/go/vt/vttablet/tabletserver/vstreamer/rowstreamer.go index c4114d451c0..3bdf0f2bdab 100644 --- a/go/vt/vttablet/tabletserver/vstreamer/rowstreamer.go +++ b/go/vt/vttablet/tabletserver/vstreamer/rowstreamer.go @@ -48,7 +48,7 @@ type rowStreamer struct { sendQuery string } -func newRowStreamer(ctx context.Context, cp *mysql.ConnParams, se *schema.Engine, query string, lastpk []sqltypes.Value, kschema *vindexes.KeyspaceSchema, send func(*binlogdatapb.VStreamRowsResponse) error) *rowStreamer { +func NewRowStreamer(ctx context.Context, cp *mysql.ConnParams, se *schema.Engine, query string, lastpk []sqltypes.Value, kschema *vindexes.KeyspaceSchema, send func(*binlogdatapb.VStreamRowsResponse) error) *rowStreamer { ctx, cancel := context.WithCancel(ctx) return &rowStreamer{ ctx: ctx, diff --git a/go/vt/vttablet/tabletserver/vstreamer/testenv/testenv.go b/go/vt/vttablet/tabletserver/vstreamer/testenv/testenv.go index be2eb3070fe..599cf3304e1 100644 --- a/go/vt/vttablet/tabletserver/vstreamer/testenv/testenv.go +++ b/go/vt/vttablet/tabletserver/vstreamer/testenv/testenv.go @@ -106,7 +106,7 @@ func Init() (*Env, error) { te.Dbcfgs = dbconfigs.NewTestDBConfigs(te.cluster.MySQLConnParams(), te.cluster.MySQLAppDebugConnParams(), te.cluster.DbName()) te.Mysqld = mysqlctl.NewMysqld(te.Dbcfgs) te.SchemaEngine = schema.NewEngine(checker{}, tabletenv.DefaultQsConfig) - te.SchemaEngine.InitDBConfig(te.Dbcfgs) + te.SchemaEngine.InitDBConfig(te.Dbcfgs.DbaWithDB()) // The first vschema should not be empty. Leads to Node not found error. // TODO(sougou): need to fix the bug. diff --git a/go/vt/vttablet/tabletserver/vstreamer/vstreamer.go b/go/vt/vttablet/tabletserver/vstreamer/vstreamer.go index a826a19d312..09c3eb3967e 100644 --- a/go/vt/vttablet/tabletserver/vstreamer/vstreamer.go +++ b/go/vt/vttablet/tabletserver/vstreamer/vstreamer.go @@ -71,7 +71,7 @@ type streamerPlan struct { TableMap *mysql.TableMap } -func newVStreamer(ctx context.Context, cp *mysql.ConnParams, se *schema.Engine, startPos string, filter *binlogdatapb.Filter, kschema *vindexes.KeyspaceSchema, send func([]*binlogdatapb.VEvent) error) *vstreamer { +func NewVStreamer(ctx context.Context, cp *mysql.ConnParams, se *schema.Engine, startPos string, filter *binlogdatapb.Filter, kschema *vindexes.KeyspaceSchema, send func([]*binlogdatapb.VEvent) error) *vstreamer { ctx, cancel := context.WithCancel(ctx) return &vstreamer{ ctx: ctx, @@ -154,6 +154,16 @@ func (vs *vstreamer) parseEvents(ctx context.Context, events <-chan mysql.Binlog bufferedEvents = nil curSize = 0 return vs.send(vevents) + case binlogdatapb.VEventType_INSERT, binlogdatapb.VEventType_DELETE, binlogdatapb.VEventType_UPDATE, binlogdatapb.VEventType_REPLACE: + newSize := len(vevent.GetDml()) + if curSize+newSize > *PacketSize { + vevents := bufferedEvents + bufferedEvents = []*binlogdatapb.VEvent{vevent} + curSize = newSize + return vs.send(vevents) + } + curSize += newSize + bufferedEvents = append(bufferedEvents, vevent) case binlogdatapb.VEventType_ROW: // ROW events happen inside transactions. So, we can chunk them. // Buffer everything until packet size is reached, and then send. @@ -295,7 +305,41 @@ func (vs *vstreamer) parseEvent(ev mysql.BinlogEvent) ([]*binlogdatapb.VEvent, e if err != nil { return nil, fmt.Errorf("can't get query from binlog event: %v, event data: %#v", err, ev) } + // Insert/Delete/Update are supported only to be used in the context of external mysql streams where source databases + // could be using SBR. Vitess itself will never run into cases where it needs to consume non rbr statements. switch cat := sqlparser.Preview(q.SQL); cat { + case sqlparser.StmtInsert: + mustSend := mustSendStmt(q, vs.cp.DbName) + if mustSend { + vevents = append(vevents, &binlogdatapb.VEvent{ + Type: binlogdatapb.VEventType_INSERT, + Dml: q.SQL, + }) + } + case sqlparser.StmtUpdate: + mustSend := mustSendStmt(q, vs.cp.DbName) + if mustSend { + vevents = append(vevents, &binlogdatapb.VEvent{ + Type: binlogdatapb.VEventType_UPDATE, + Dml: q.SQL, + }) + } + case sqlparser.StmtDelete: + mustSend := mustSendStmt(q, vs.cp.DbName) + if mustSend { + vevents = append(vevents, &binlogdatapb.VEvent{ + Type: binlogdatapb.VEventType_DELETE, + Dml: q.SQL, + }) + } + case sqlparser.StmtReplace: + mustSend := mustSendStmt(q, vs.cp.DbName) + if mustSend { + vevents = append(vevents, &binlogdatapb.VEvent{ + Type: binlogdatapb.VEventType_REPLACE, + Dml: q.SQL, + }) + } case sqlparser.StmtBegin: vevents = append(vevents, &binlogdatapb.VEvent{ Type: binlogdatapb.VEventType_BEGIN, diff --git a/go/vt/vttablet/tabletserver/vstreamer/vstreamer_test.go b/go/vt/vttablet/tabletserver/vstreamer/vstreamer_test.go index 63d4a6dc655..907514632a4 100644 --- a/go/vt/vttablet/tabletserver/vstreamer/vstreamer_test.go +++ b/go/vt/vttablet/tabletserver/vstreamer/vstreamer_test.go @@ -895,39 +895,38 @@ func TestStatementMode(t *testing.T) { if testing.Short() { t.Skip() } - execStatements(t, []string{ - "create table t1(id int, val1 varbinary(128), val2 varbinary(128), primary key(id))", - "insert into t1 values(1, 'aaa', 'bbb')", - }) - defer execStatements(t, []string{ - "drop table t1", + "create table stream1(id int, val varbinary(128), primary key(id))", + "create table stream2(id int, val varbinary(128), primary key(id))", }) + engine.se.Reload(context.Background()) - // Record position before the next few statements. - pos := masterPosition(t) - execStatements(t, []string{ - "set @@session.binlog_format='statement'", - "update t1 set val1='bbb' where id=1", - "set @@session.binlog_format='row'", + defer execStatements(t, []string{ + "drop table stream1", + "drop table stream2", }) - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - ch := make(chan []*binlogdatapb.VEvent) - go func() { - for evs := range ch { - t.Errorf("received: %v", evs) - } - }() - defer close(ch) - err := vstream(ctx, t, pos, nil, ch) - want := "unexpected statement type" - if err == nil || !strings.Contains(err.Error(), want) { - t.Errorf("err: %v, must contain '%s'", err, want) - } + testcases := []testcase{{ + input: []string{ + "set @@session.binlog_format='STATEMENT'", + "begin", + "insert into stream1 values (1, 'aaa')", + "update stream1 set val='bbb' where id = 1", + "delete from stream1 where id = 1", + "commit", + "set @@session.binlog_format='ROW'", + }, + output: [][]string{{ + `begin`, + `type:INSERT dml:"insert into stream1 values (1, 'aaa')" `, + `type:UPDATE dml:"update stream1 set val='bbb' where id = 1" `, + `type:DELETE dml:"delete from stream1 where id = 1" `, + `gtid`, + `commit`, + }}, + }} + runCases(t, nil, testcases, "") } func runCases(t *testing.T, filter *binlogdatapb.Filter, testcases []testcase, postion string) { diff --git a/proto/binlogdata.proto b/proto/binlogdata.proto index 9b7e817ed6e..ee4903bd625 100644 --- a/proto/binlogdata.proto +++ b/proto/binlogdata.proto @@ -170,6 +170,10 @@ message BinlogSource { // on_ddl specifies the action to be taken when a DDL is encountered. OnDDLAction on_ddl = 7; + + // Source is an external mysql. This attribute should be set to the username + // to use in the connection + string external_mysql = 8; } // VEventType enumerates the event types. @@ -253,6 +257,7 @@ message VEvent { FieldEvent field_event = 6; VGtid vgtid = 7; Journal journal = 8; + string dml = 9; // current_time specifies the current time to handle clock skew. int64 current_time = 20; } diff --git a/py/vtproto/automation_pb2.py b/py/vtproto/automation_pb2.py index 61f1c344ba7..eb5021f86ca 100644 --- a/py/vtproto/automation_pb2.py +++ b/py/vtproto/automation_pb2.py @@ -8,7 +8,6 @@ from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -20,6 +19,7 @@ name='automation.proto', package='automation', syntax='proto3', + serialized_options=_b('Z\'vitess.io/vitess/go/vt/proto/automation'), serialized_pb=_b('\n\x10\x61utomation.proto\x12\nautomation\"\x90\x01\n\x10\x43lusterOperation\x12\n\n\x02id\x18\x01 \x01(\t\x12/\n\x0cserial_tasks\x18\x02 \x03(\x0b\x32\x19.automation.TaskContainer\x12\x30\n\x05state\x18\x03 \x01(\x0e\x32!.automation.ClusterOperationState\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"N\n\rTaskContainer\x12(\n\x0eparallel_tasks\x18\x01 \x03(\x0b\x32\x10.automation.Task\x12\x13\n\x0b\x63oncurrency\x18\x02 \x01(\x05\"\xce\x01\n\x04Task\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x34\n\nparameters\x18\x02 \x03(\x0b\x32 .automation.Task.ParametersEntry\x12\n\n\x02id\x18\x03 \x01(\t\x12$\n\x05state\x18\x04 \x01(\x0e\x32\x15.automation.TaskState\x12\x0e\n\x06output\x18\x05 \x01(\t\x12\r\n\x05\x65rror\x18\x06 \x01(\t\x1a\x31\n\x0fParametersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb1\x01\n\x1e\x45nqueueClusterOperationRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12N\n\nparameters\x18\x02 \x03(\x0b\x32:.automation.EnqueueClusterOperationRequest.ParametersEntry\x1a\x31\n\x0fParametersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"-\n\x1f\x45nqueueClusterOperationResponse\x12\n\n\x02id\x18\x01 \x01(\t\"-\n\x1fGetClusterOperationStateRequest\x12\n\n\x02id\x18\x01 \x01(\t\"T\n GetClusterOperationStateResponse\x12\x30\n\x05state\x18\x01 \x01(\x0e\x32!.automation.ClusterOperationState\"/\n!GetClusterOperationDetailsRequest\x12\n\n\x02id\x18\x01 \x01(\t\"V\n\"GetClusterOperationDetailsResponse\x12\x30\n\ncluster_op\x18\x02 \x01(\x0b\x32\x1c.automation.ClusterOperation*\x9a\x01\n\x15\x43lusterOperationState\x12#\n\x1fUNKNOWN_CLUSTER_OPERATION_STATE\x10\x00\x12!\n\x1d\x43LUSTER_OPERATION_NOT_STARTED\x10\x01\x12\x1d\n\x19\x43LUSTER_OPERATION_RUNNING\x10\x02\x12\x1a\n\x16\x43LUSTER_OPERATION_DONE\x10\x03*K\n\tTaskState\x12\x16\n\x12UNKNOWN_TASK_STATE\x10\x00\x12\x0f\n\x0bNOT_STARTED\x10\x01\x12\x0b\n\x07RUNNING\x10\x02\x12\x08\n\x04\x44ONE\x10\x03\x42)Z\'vitess.io/vitess/go/vt/proto/automationb\x06proto3') ) @@ -31,23 +31,23 @@ values=[ _descriptor.EnumValueDescriptor( name='UNKNOWN_CLUSTER_OPERATION_STATE', index=0, number=0, - options=None, + serialized_options=None, type=None), _descriptor.EnumValueDescriptor( name='CLUSTER_OPERATION_NOT_STARTED', index=1, number=1, - options=None, + serialized_options=None, type=None), _descriptor.EnumValueDescriptor( name='CLUSTER_OPERATION_RUNNING', index=2, number=2, - options=None, + serialized_options=None, type=None), _descriptor.EnumValueDescriptor( name='CLUSTER_OPERATION_DONE', index=3, number=3, - options=None, + serialized_options=None, type=None), ], containing_type=None, - options=None, + serialized_options=None, serialized_start=966, serialized_end=1120, ) @@ -62,23 +62,23 @@ values=[ _descriptor.EnumValueDescriptor( name='UNKNOWN_TASK_STATE', index=0, number=0, - options=None, + serialized_options=None, type=None), _descriptor.EnumValueDescriptor( name='NOT_STARTED', index=1, number=1, - options=None, + serialized_options=None, type=None), _descriptor.EnumValueDescriptor( name='RUNNING', index=2, number=2, - options=None, + serialized_options=None, type=None), _descriptor.EnumValueDescriptor( name='DONE', index=3, number=3, - options=None, + serialized_options=None, type=None), ], containing_type=None, - options=None, + serialized_options=None, serialized_start=1122, serialized_end=1197, ) @@ -109,35 +109,35 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='serial_tasks', full_name='automation.ClusterOperation.serial_tasks', index=1, number=2, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='state', full_name='automation.ClusterOperation.state', index=2, number=3, type=14, cpp_type=8, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='error', full_name='automation.ClusterOperation.error', index=3, number=4, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -161,21 +161,21 @@ has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='concurrency', full_name='automation.TaskContainer.concurrency', index=1, number=2, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -199,21 +199,21 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='value', full_name='automation.Task.ParametersEntry.value', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), + serialized_options=_b('8\001'), is_extendable=False, syntax='proto3', extension_ranges=[], @@ -236,49 +236,49 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='parameters', full_name='automation.Task.parameters', index=1, number=2, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='id', full_name='automation.Task.id', index=2, number=3, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='state', full_name='automation.Task.state', index=3, number=4, type=14, cpp_type=8, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='output', full_name='automation.Task.output', index=4, number=5, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='error', full_name='automation.Task.error', index=5, number=6, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[_TASK_PARAMETERSENTRY, ], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -302,21 +302,21 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='value', full_name='automation.EnqueueClusterOperationRequest.ParametersEntry.value', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), + serialized_options=_b('8\001'), is_extendable=False, syntax='proto3', extension_ranges=[], @@ -339,21 +339,21 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='parameters', full_name='automation.EnqueueClusterOperationRequest.parameters', index=1, number=2, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[_ENQUEUECLUSTEROPERATIONREQUEST_PARAMETERSENTRY, ], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -377,14 +377,14 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -408,14 +408,14 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -439,14 +439,14 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -470,14 +470,14 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -501,14 +501,14 @@ has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -621,10 +621,7 @@ _sym_db.RegisterMessage(GetClusterOperationDetailsResponse) -DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z\'vitess.io/vitess/go/vt/proto/automation')) -_TASK_PARAMETERSENTRY.has_options = True -_TASK_PARAMETERSENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) -_ENQUEUECLUSTEROPERATIONREQUEST_PARAMETERSENTRY.has_options = True -_ENQUEUECLUSTEROPERATIONREQUEST_PARAMETERSENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) +DESCRIPTOR._options = None +_TASK_PARAMETERSENTRY._options = None +_ENQUEUECLUSTEROPERATIONREQUEST_PARAMETERSENTRY._options = None # @@protoc_insertion_point(module_scope) diff --git a/py/vtproto/automationservice_pb2.py b/py/vtproto/automationservice_pb2.py index 34ca83f9919..cb754003010 100644 --- a/py/vtproto/automationservice_pb2.py +++ b/py/vtproto/automationservice_pb2.py @@ -7,7 +7,6 @@ from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -20,6 +19,7 @@ name='automationservice.proto', package='automationservice', syntax='proto3', + serialized_options=_b('Z.vitess.io/vitess/go/vt/proto/automationservice'), serialized_pb=_b('\n\x17\x61utomationservice.proto\x12\x11\x61utomationservice\x1a\x10\x61utomation.proto2\x81\x02\n\nAutomation\x12t\n\x17\x45nqueueClusterOperation\x12*.automation.EnqueueClusterOperationRequest\x1a+.automation.EnqueueClusterOperationResponse\"\x00\x12}\n\x1aGetClusterOperationDetails\x12-.automation.GetClusterOperationDetailsRequest\x1a..automation.GetClusterOperationDetailsResponse\"\x00\x42\x30Z.vitess.io/vitess/go/vt/proto/automationserviceb\x06proto3') , dependencies=[automation__pb2.DESCRIPTOR,]) @@ -29,15 +29,14 @@ _sym_db.RegisterFileDescriptor(DESCRIPTOR) -DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z.vitess.io/vitess/go/vt/proto/automationservice')) +DESCRIPTOR._options = None _AUTOMATION = _descriptor.ServiceDescriptor( name='Automation', full_name='automationservice.Automation', file=DESCRIPTOR, index=0, - options=None, + serialized_options=None, serialized_start=65, serialized_end=322, methods=[ @@ -48,7 +47,7 @@ containing_service=None, input_type=automation__pb2._ENQUEUECLUSTEROPERATIONREQUEST, output_type=automation__pb2._ENQUEUECLUSTEROPERATIONRESPONSE, - options=None, + serialized_options=None, ), _descriptor.MethodDescriptor( name='GetClusterOperationDetails', @@ -57,7 +56,7 @@ containing_service=None, input_type=automation__pb2._GETCLUSTEROPERATIONDETAILSREQUEST, output_type=automation__pb2._GETCLUSTEROPERATIONDETAILSRESPONSE, - options=None, + serialized_options=None, ), ]) _sym_db.RegisterServiceDescriptor(_AUTOMATION) diff --git a/py/vtproto/binlogdata_pb2.py b/py/vtproto/binlogdata_pb2.py index ae761e90e68..9f3cc1f3ea8 100644 --- a/py/vtproto/binlogdata_pb2.py +++ b/py/vtproto/binlogdata_pb2.py @@ -23,7 +23,7 @@ package='binlogdata', syntax='proto3', serialized_options=_b('Z\'vitess.io/vitess/go/vt/proto/binlogdata'), - serialized_pb=_b('\n\x10\x62inlogdata.proto\x12\nbinlogdata\x1a\x0bvtrpc.proto\x1a\x0bquery.proto\x1a\x0etopodata.proto\"7\n\x07\x43harset\x12\x0e\n\x06\x63lient\x18\x01 \x01(\x05\x12\x0c\n\x04\x63onn\x18\x02 \x01(\x05\x12\x0e\n\x06server\x18\x03 \x01(\x05\"\xb5\x03\n\x11\x42inlogTransaction\x12;\n\nstatements\x18\x01 \x03(\x0b\x32\'.binlogdata.BinlogTransaction.Statement\x12&\n\x0b\x65vent_token\x18\x04 \x01(\x0b\x32\x11.query.EventToken\x1a\xae\x02\n\tStatement\x12\x42\n\x08\x63\x61tegory\x18\x01 \x01(\x0e\x32\x30.binlogdata.BinlogTransaction.Statement.Category\x12$\n\x07\x63harset\x18\x02 \x01(\x0b\x32\x13.binlogdata.Charset\x12\x0b\n\x03sql\x18\x03 \x01(\x0c\"\xa9\x01\n\x08\x43\x61tegory\x12\x13\n\x0f\x42L_UNRECOGNIZED\x10\x00\x12\x0c\n\x08\x42L_BEGIN\x10\x01\x12\r\n\tBL_COMMIT\x10\x02\x12\x0f\n\x0b\x42L_ROLLBACK\x10\x03\x12\x15\n\x11\x42L_DML_DEPRECATED\x10\x04\x12\n\n\x06\x42L_DDL\x10\x05\x12\n\n\x06\x42L_SET\x10\x06\x12\r\n\tBL_INSERT\x10\x07\x12\r\n\tBL_UPDATE\x10\x08\x12\r\n\tBL_DELETE\x10\tJ\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04\"v\n\x15StreamKeyRangeRequest\x12\x10\n\x08position\x18\x01 \x01(\t\x12%\n\tkey_range\x18\x02 \x01(\x0b\x32\x12.topodata.KeyRange\x12$\n\x07\x63harset\x18\x03 \x01(\x0b\x32\x13.binlogdata.Charset\"S\n\x16StreamKeyRangeResponse\x12\x39\n\x12\x62inlog_transaction\x18\x01 \x01(\x0b\x32\x1d.binlogdata.BinlogTransaction\"]\n\x13StreamTablesRequest\x12\x10\n\x08position\x18\x01 \x01(\t\x12\x0e\n\x06tables\x18\x02 \x03(\t\x12$\n\x07\x63harset\x18\x03 \x01(\x0b\x32\x13.binlogdata.Charset\"Q\n\x14StreamTablesResponse\x12\x39\n\x12\x62inlog_transaction\x18\x01 \x01(\x0b\x32\x1d.binlogdata.BinlogTransaction\"%\n\x04Rule\x12\r\n\x05match\x18\x01 \x01(\t\x12\x0e\n\x06\x66ilter\x18\x02 \x01(\t\"\x9c\x01\n\x06\x46ilter\x12\x1f\n\x05rules\x18\x01 \x03(\x0b\x32\x10.binlogdata.Rule\x12\x39\n\x0e\x66ieldEventMode\x18\x02 \x01(\x0e\x32!.binlogdata.Filter.FieldEventMode\"6\n\x0e\x46ieldEventMode\x12\x13\n\x0f\x45RR_ON_MISMATCH\x10\x00\x12\x0f\n\x0b\x42\x45ST_EFFORT\x10\x01\"\xde\x01\n\x0c\x42inlogSource\x12\x10\n\x08keyspace\x18\x01 \x01(\t\x12\r\n\x05shard\x18\x02 \x01(\t\x12)\n\x0btablet_type\x18\x03 \x01(\x0e\x32\x14.topodata.TabletType\x12%\n\tkey_range\x18\x04 \x01(\x0b\x32\x12.topodata.KeyRange\x12\x0e\n\x06tables\x18\x05 \x03(\t\x12\"\n\x06\x66ilter\x18\x06 \x01(\x0b\x32\x12.binlogdata.Filter\x12\'\n\x06on_ddl\x18\x07 \x01(\x0e\x32\x17.binlogdata.OnDDLAction\"B\n\tRowChange\x12\x1a\n\x06\x62\x65\x66ore\x18\x01 \x01(\x0b\x32\n.query.Row\x12\x19\n\x05\x61\x66ter\x18\x02 \x01(\x0b\x32\n.query.Row\"J\n\x08RowEvent\x12\x12\n\ntable_name\x18\x01 \x01(\t\x12*\n\x0brow_changes\x18\x02 \x03(\x0b\x32\x15.binlogdata.RowChange\">\n\nFieldEvent\x12\x12\n\ntable_name\x18\x01 \x01(\t\x12\x1c\n\x06\x66ields\x18\x02 \x03(\x0b\x32\x0c.query.Field\":\n\tShardGtid\x12\x10\n\x08keyspace\x18\x01 \x01(\t\x12\r\n\x05shard\x18\x02 \x01(\t\x12\x0c\n\x04gtid\x18\x03 \x01(\t\"3\n\x05VGtid\x12*\n\x0bshard_gtids\x18\x01 \x03(\x0b\x32\x15.binlogdata.ShardGtid\"0\n\rKeyspaceShard\x12\x10\n\x08keyspace\x18\x01 \x01(\t\x12\r\n\x05shard\x18\x02 \x01(\t\"\xe7\x01\n\x07Journal\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x31\n\x0emigration_type\x18\x02 \x01(\x0e\x32\x19.binlogdata.MigrationType\x12\x0e\n\x06tables\x18\x03 \x03(\t\x12\x16\n\x0elocal_position\x18\x04 \x01(\t\x12*\n\x0bshard_gtids\x18\x05 \x03(\x0b\x32\x15.binlogdata.ShardGtid\x12/\n\x0cparticipants\x18\x06 \x03(\x0b\x32\x19.binlogdata.KeyspaceShard\x12\x18\n\x10source_workflows\x18\x07 \x03(\t\"\x90\x02\n\x06VEvent\x12$\n\x04type\x18\x01 \x01(\x0e\x32\x16.binlogdata.VEventType\x12\x11\n\ttimestamp\x18\x02 \x01(\x03\x12\x0c\n\x04gtid\x18\x03 \x01(\t\x12\x0b\n\x03\x64\x64l\x18\x04 \x01(\t\x12\'\n\trow_event\x18\x05 \x01(\x0b\x32\x14.binlogdata.RowEvent\x12+\n\x0b\x66ield_event\x18\x06 \x01(\x0b\x32\x16.binlogdata.FieldEvent\x12 \n\x05vgtid\x18\x07 \x01(\x0b\x32\x11.binlogdata.VGtid\x12$\n\x07journal\x18\x08 \x01(\x0b\x32\x13.binlogdata.Journal\x12\x14\n\x0c\x63urrent_time\x18\x14 \x01(\x03\"\xc7\x01\n\x0eVStreamRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x10\n\x08position\x18\x04 \x01(\t\x12\"\n\x06\x66ilter\x18\x05 \x01(\x0b\x32\x12.binlogdata.Filter\"5\n\x0fVStreamResponse\x12\"\n\x06\x65vents\x18\x01 \x03(\x0b\x32\x12.binlogdata.VEvent\"\xc8\x01\n\x12VStreamRowsRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\r\n\x05query\x18\x04 \x01(\t\x12\"\n\x06lastpk\x18\x05 \x01(\x0b\x32\x12.query.QueryResult\"\x97\x01\n\x13VStreamRowsResponse\x12\x1c\n\x06\x66ields\x18\x01 \x03(\x0b\x32\x0c.query.Field\x12\x1e\n\x08pkfields\x18\x02 \x03(\x0b\x32\x0c.query.Field\x12\x0c\n\x04gtid\x18\x03 \x01(\t\x12\x18\n\x04rows\x18\x04 \x03(\x0b\x32\n.query.Row\x12\x1a\n\x06lastpk\x18\x05 \x01(\x0b\x32\n.query.Row\"\xa7\x01\n\x15VStreamResultsRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\r\n\x05query\x18\x04 \x01(\t\"^\n\x16VStreamResultsResponse\x12\x1c\n\x06\x66ields\x18\x01 \x03(\x0b\x32\x0c.query.Field\x12\x0c\n\x04gtid\x18\x03 \x01(\t\x12\x18\n\x04rows\x18\x04 \x03(\x0b\x32\n.query.Row*>\n\x0bOnDDLAction\x12\n\n\x06IGNORE\x10\x00\x12\x08\n\x04STOP\x10\x01\x12\x08\n\x04\x45XEC\x10\x02\x12\x0f\n\x0b\x45XEC_IGNORE\x10\x03*\xd1\x01\n\nVEventType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x08\n\x04GTID\x10\x01\x12\t\n\x05\x42\x45GIN\x10\x02\x12\n\n\x06\x43OMMIT\x10\x03\x12\x0c\n\x08ROLLBACK\x10\x04\x12\x07\n\x03\x44\x44L\x10\x05\x12\n\n\x06INSERT\x10\x06\x12\x0b\n\x07REPLACE\x10\x07\x12\n\n\x06UPDATE\x10\x08\x12\n\n\x06\x44\x45LETE\x10\t\x12\x07\n\x03SET\x10\n\x12\t\n\x05OTHER\x10\x0b\x12\x07\n\x03ROW\x10\x0c\x12\t\n\x05\x46IELD\x10\r\x12\r\n\tHEARTBEAT\x10\x0e\x12\t\n\x05VGTID\x10\x0f\x12\x0b\n\x07JOURNAL\x10\x10*\'\n\rMigrationType\x12\n\n\x06TABLES\x10\x00\x12\n\n\x06SHARDS\x10\x01\x42)Z\'vitess.io/vitess/go/vt/proto/binlogdatab\x06proto3') + serialized_pb=_b('\n\x10\x62inlogdata.proto\x12\nbinlogdata\x1a\x0bvtrpc.proto\x1a\x0bquery.proto\x1a\x0etopodata.proto\"7\n\x07\x43harset\x12\x0e\n\x06\x63lient\x18\x01 \x01(\x05\x12\x0c\n\x04\x63onn\x18\x02 \x01(\x05\x12\x0e\n\x06server\x18\x03 \x01(\x05\"\xb5\x03\n\x11\x42inlogTransaction\x12;\n\nstatements\x18\x01 \x03(\x0b\x32\'.binlogdata.BinlogTransaction.Statement\x12&\n\x0b\x65vent_token\x18\x04 \x01(\x0b\x32\x11.query.EventToken\x1a\xae\x02\n\tStatement\x12\x42\n\x08\x63\x61tegory\x18\x01 \x01(\x0e\x32\x30.binlogdata.BinlogTransaction.Statement.Category\x12$\n\x07\x63harset\x18\x02 \x01(\x0b\x32\x13.binlogdata.Charset\x12\x0b\n\x03sql\x18\x03 \x01(\x0c\"\xa9\x01\n\x08\x43\x61tegory\x12\x13\n\x0f\x42L_UNRECOGNIZED\x10\x00\x12\x0c\n\x08\x42L_BEGIN\x10\x01\x12\r\n\tBL_COMMIT\x10\x02\x12\x0f\n\x0b\x42L_ROLLBACK\x10\x03\x12\x15\n\x11\x42L_DML_DEPRECATED\x10\x04\x12\n\n\x06\x42L_DDL\x10\x05\x12\n\n\x06\x42L_SET\x10\x06\x12\r\n\tBL_INSERT\x10\x07\x12\r\n\tBL_UPDATE\x10\x08\x12\r\n\tBL_DELETE\x10\tJ\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04\"v\n\x15StreamKeyRangeRequest\x12\x10\n\x08position\x18\x01 \x01(\t\x12%\n\tkey_range\x18\x02 \x01(\x0b\x32\x12.topodata.KeyRange\x12$\n\x07\x63harset\x18\x03 \x01(\x0b\x32\x13.binlogdata.Charset\"S\n\x16StreamKeyRangeResponse\x12\x39\n\x12\x62inlog_transaction\x18\x01 \x01(\x0b\x32\x1d.binlogdata.BinlogTransaction\"]\n\x13StreamTablesRequest\x12\x10\n\x08position\x18\x01 \x01(\t\x12\x0e\n\x06tables\x18\x02 \x03(\t\x12$\n\x07\x63harset\x18\x03 \x01(\x0b\x32\x13.binlogdata.Charset\"Q\n\x14StreamTablesResponse\x12\x39\n\x12\x62inlog_transaction\x18\x01 \x01(\x0b\x32\x1d.binlogdata.BinlogTransaction\"%\n\x04Rule\x12\r\n\x05match\x18\x01 \x01(\t\x12\x0e\n\x06\x66ilter\x18\x02 \x01(\t\"\x9c\x01\n\x06\x46ilter\x12\x1f\n\x05rules\x18\x01 \x03(\x0b\x32\x10.binlogdata.Rule\x12\x39\n\x0e\x66ieldEventMode\x18\x02 \x01(\x0e\x32!.binlogdata.Filter.FieldEventMode\"6\n\x0e\x46ieldEventMode\x12\x13\n\x0f\x45RR_ON_MISMATCH\x10\x00\x12\x0f\n\x0b\x42\x45ST_EFFORT\x10\x01\"\xf6\x01\n\x0c\x42inlogSource\x12\x10\n\x08keyspace\x18\x01 \x01(\t\x12\r\n\x05shard\x18\x02 \x01(\t\x12)\n\x0btablet_type\x18\x03 \x01(\x0e\x32\x14.topodata.TabletType\x12%\n\tkey_range\x18\x04 \x01(\x0b\x32\x12.topodata.KeyRange\x12\x0e\n\x06tables\x18\x05 \x03(\t\x12\"\n\x06\x66ilter\x18\x06 \x01(\x0b\x32\x12.binlogdata.Filter\x12\'\n\x06on_ddl\x18\x07 \x01(\x0e\x32\x17.binlogdata.OnDDLAction\x12\x16\n\x0e\x65xternal_mysql\x18\x08 \x01(\t\"B\n\tRowChange\x12\x1a\n\x06\x62\x65\x66ore\x18\x01 \x01(\x0b\x32\n.query.Row\x12\x19\n\x05\x61\x66ter\x18\x02 \x01(\x0b\x32\n.query.Row\"J\n\x08RowEvent\x12\x12\n\ntable_name\x18\x01 \x01(\t\x12*\n\x0brow_changes\x18\x02 \x03(\x0b\x32\x15.binlogdata.RowChange\">\n\nFieldEvent\x12\x12\n\ntable_name\x18\x01 \x01(\t\x12\x1c\n\x06\x66ields\x18\x02 \x03(\x0b\x32\x0c.query.Field\":\n\tShardGtid\x12\x10\n\x08keyspace\x18\x01 \x01(\t\x12\r\n\x05shard\x18\x02 \x01(\t\x12\x0c\n\x04gtid\x18\x03 \x01(\t\"3\n\x05VGtid\x12*\n\x0bshard_gtids\x18\x01 \x03(\x0b\x32\x15.binlogdata.ShardGtid\"0\n\rKeyspaceShard\x12\x10\n\x08keyspace\x18\x01 \x01(\t\x12\r\n\x05shard\x18\x02 \x01(\t\"\xe7\x01\n\x07Journal\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x31\n\x0emigration_type\x18\x02 \x01(\x0e\x32\x19.binlogdata.MigrationType\x12\x0e\n\x06tables\x18\x03 \x03(\t\x12\x16\n\x0elocal_position\x18\x04 \x01(\t\x12*\n\x0bshard_gtids\x18\x05 \x03(\x0b\x32\x15.binlogdata.ShardGtid\x12/\n\x0cparticipants\x18\x06 \x03(\x0b\x32\x19.binlogdata.KeyspaceShard\x12\x18\n\x10source_workflows\x18\x07 \x03(\t\"\x9d\x02\n\x06VEvent\x12$\n\x04type\x18\x01 \x01(\x0e\x32\x16.binlogdata.VEventType\x12\x11\n\ttimestamp\x18\x02 \x01(\x03\x12\x0c\n\x04gtid\x18\x03 \x01(\t\x12\x0b\n\x03\x64\x64l\x18\x04 \x01(\t\x12\'\n\trow_event\x18\x05 \x01(\x0b\x32\x14.binlogdata.RowEvent\x12+\n\x0b\x66ield_event\x18\x06 \x01(\x0b\x32\x16.binlogdata.FieldEvent\x12 \n\x05vgtid\x18\x07 \x01(\x0b\x32\x11.binlogdata.VGtid\x12$\n\x07journal\x18\x08 \x01(\x0b\x32\x13.binlogdata.Journal\x12\x0b\n\x03\x64ml\x18\t \x01(\t\x12\x14\n\x0c\x63urrent_time\x18\x14 \x01(\x03\"\xc7\x01\n\x0eVStreamRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x10\n\x08position\x18\x04 \x01(\t\x12\"\n\x06\x66ilter\x18\x05 \x01(\x0b\x32\x12.binlogdata.Filter\"5\n\x0fVStreamResponse\x12\"\n\x06\x65vents\x18\x01 \x03(\x0b\x32\x12.binlogdata.VEvent\"\xc8\x01\n\x12VStreamRowsRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\r\n\x05query\x18\x04 \x01(\t\x12\"\n\x06lastpk\x18\x05 \x01(\x0b\x32\x12.query.QueryResult\"\x97\x01\n\x13VStreamRowsResponse\x12\x1c\n\x06\x66ields\x18\x01 \x03(\x0b\x32\x0c.query.Field\x12\x1e\n\x08pkfields\x18\x02 \x03(\x0b\x32\x0c.query.Field\x12\x0c\n\x04gtid\x18\x03 \x01(\t\x12\x18\n\x04rows\x18\x04 \x03(\x0b\x32\n.query.Row\x12\x1a\n\x06lastpk\x18\x05 \x01(\x0b\x32\n.query.Row\"\xa7\x01\n\x15VStreamResultsRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\r\n\x05query\x18\x04 \x01(\t\"^\n\x16VStreamResultsResponse\x12\x1c\n\x06\x66ields\x18\x01 \x03(\x0b\x32\x0c.query.Field\x12\x0c\n\x04gtid\x18\x03 \x01(\t\x12\x18\n\x04rows\x18\x04 \x03(\x0b\x32\n.query.Row*>\n\x0bOnDDLAction\x12\n\n\x06IGNORE\x10\x00\x12\x08\n\x04STOP\x10\x01\x12\x08\n\x04\x45XEC\x10\x02\x12\x0f\n\x0b\x45XEC_IGNORE\x10\x03*\xd1\x01\n\nVEventType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x08\n\x04GTID\x10\x01\x12\t\n\x05\x42\x45GIN\x10\x02\x12\n\n\x06\x43OMMIT\x10\x03\x12\x0c\n\x08ROLLBACK\x10\x04\x12\x07\n\x03\x44\x44L\x10\x05\x12\n\n\x06INSERT\x10\x06\x12\x0b\n\x07REPLACE\x10\x07\x12\n\n\x06UPDATE\x10\x08\x12\n\n\x06\x44\x45LETE\x10\t\x12\x07\n\x03SET\x10\n\x12\t\n\x05OTHER\x10\x0b\x12\x07\n\x03ROW\x10\x0c\x12\t\n\x05\x46IELD\x10\r\x12\r\n\tHEARTBEAT\x10\x0e\x12\t\n\x05VGTID\x10\x0f\x12\x0b\n\x07JOURNAL\x10\x10*\'\n\rMigrationType\x12\n\n\x06TABLES\x10\x00\x12\n\n\x06SHARDS\x10\x01\x42)Z\'vitess.io/vitess/go/vt/proto/binlogdatab\x06proto3') , dependencies=[vtrpc__pb2.DESCRIPTOR,query__pb2.DESCRIPTOR,topodata__pb2.DESCRIPTOR,]) @@ -52,8 +52,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=3137, - serialized_end=3199, + serialized_start=3174, + serialized_end=3236, ) _sym_db.RegisterEnumDescriptor(_ONDDLACTION) @@ -135,8 +135,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=3202, - serialized_end=3411, + serialized_start=3239, + serialized_end=3448, ) _sym_db.RegisterEnumDescriptor(_VEVENTTYPE) @@ -158,8 +158,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=3413, - serialized_end=3452, + serialized_start=3450, + serialized_end=3489, ) _sym_db.RegisterEnumDescriptor(_MIGRATIONTYPE) @@ -679,6 +679,13 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='external_mysql', full_name='binlogdata.BinlogSource.external_mysql', index=7, + number=8, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -692,7 +699,7 @@ oneofs=[ ], serialized_start=1153, - serialized_end=1375, + serialized_end=1399, ) @@ -729,8 +736,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1377, - serialized_end=1443, + serialized_start=1401, + serialized_end=1467, ) @@ -767,8 +774,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1445, - serialized_end=1519, + serialized_start=1469, + serialized_end=1543, ) @@ -805,8 +812,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1521, - serialized_end=1583, + serialized_start=1545, + serialized_end=1607, ) @@ -850,8 +857,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1585, - serialized_end=1643, + serialized_start=1609, + serialized_end=1667, ) @@ -881,8 +888,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1645, - serialized_end=1696, + serialized_start=1669, + serialized_end=1720, ) @@ -919,8 +926,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1698, - serialized_end=1746, + serialized_start=1722, + serialized_end=1770, ) @@ -992,8 +999,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1749, - serialized_end=1980, + serialized_start=1773, + serialized_end=2004, ) @@ -1061,7 +1068,14 @@ is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='current_time', full_name='binlogdata.VEvent.current_time', index=8, + name='dml', full_name='binlogdata.VEvent.dml', index=8, + number=9, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='current_time', full_name='binlogdata.VEvent.current_time', index=9, number=20, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, @@ -1079,8 +1093,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1983, - serialized_end=2255, + serialized_start=2007, + serialized_end=2292, ) @@ -1138,8 +1152,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2258, - serialized_end=2457, + serialized_start=2295, + serialized_end=2494, ) @@ -1169,8 +1183,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2459, - serialized_end=2512, + serialized_start=2496, + serialized_end=2549, ) @@ -1228,8 +1242,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2515, - serialized_end=2715, + serialized_start=2552, + serialized_end=2752, ) @@ -1287,8 +1301,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2718, - serialized_end=2869, + serialized_start=2755, + serialized_end=2906, ) @@ -1339,8 +1353,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2872, - serialized_end=3039, + serialized_start=2909, + serialized_end=3076, ) @@ -1384,8 +1398,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3041, - serialized_end=3135, + serialized_start=3078, + serialized_end=3172, ) _BINLOGTRANSACTION_STATEMENT.fields_by_name['category'].enum_type = _BINLOGTRANSACTION_STATEMENT_CATEGORY diff --git a/py/vtproto/binlogservice_pb2.py b/py/vtproto/binlogservice_pb2.py index 0dfa47c16c1..15b916eeb5f 100644 --- a/py/vtproto/binlogservice_pb2.py +++ b/py/vtproto/binlogservice_pb2.py @@ -7,7 +7,6 @@ from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -20,6 +19,7 @@ name='binlogservice.proto', package='binlogservice', syntax='proto3', + serialized_options=_b('Z*vitess.io/vitess/go/vt/proto/binlogservice'), serialized_pb=_b('\n\x13\x62inlogservice.proto\x12\rbinlogservice\x1a\x10\x62inlogdata.proto2\xc2\x01\n\x0cUpdateStream\x12[\n\x0eStreamKeyRange\x12!.binlogdata.StreamKeyRangeRequest\x1a\".binlogdata.StreamKeyRangeResponse\"\x00\x30\x01\x12U\n\x0cStreamTables\x12\x1f.binlogdata.StreamTablesRequest\x1a .binlogdata.StreamTablesResponse\"\x00\x30\x01\x42,Z*vitess.io/vitess/go/vt/proto/binlogserviceb\x06proto3') , dependencies=[binlogdata__pb2.DESCRIPTOR,]) @@ -29,15 +29,14 @@ _sym_db.RegisterFileDescriptor(DESCRIPTOR) -DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z*vitess.io/vitess/go/vt/proto/binlogservice')) +DESCRIPTOR._options = None _UPDATESTREAM = _descriptor.ServiceDescriptor( name='UpdateStream', full_name='binlogservice.UpdateStream', file=DESCRIPTOR, index=0, - options=None, + serialized_options=None, serialized_start=57, serialized_end=251, methods=[ @@ -48,7 +47,7 @@ containing_service=None, input_type=binlogdata__pb2._STREAMKEYRANGEREQUEST, output_type=binlogdata__pb2._STREAMKEYRANGERESPONSE, - options=None, + serialized_options=None, ), _descriptor.MethodDescriptor( name='StreamTables', @@ -57,7 +56,7 @@ containing_service=None, input_type=binlogdata__pb2._STREAMTABLESREQUEST, output_type=binlogdata__pb2._STREAMTABLESRESPONSE, - options=None, + serialized_options=None, ), ]) _sym_db.RegisterServiceDescriptor(_UPDATESTREAM) diff --git a/py/vtproto/mysqlctl_pb2.py b/py/vtproto/mysqlctl_pb2.py index fc2545aaad8..5af5c27283b 100644 --- a/py/vtproto/mysqlctl_pb2.py +++ b/py/vtproto/mysqlctl_pb2.py @@ -7,7 +7,6 @@ from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -19,6 +18,7 @@ name='mysqlctl.proto', package='mysqlctl', syntax='proto3', + serialized_options=_b('Z%vitess.io/vitess/go/vt/proto/mysqlctl'), serialized_pb=_b('\n\x0emysqlctl.proto\x12\x08mysqlctl\"#\n\x0cStartRequest\x12\x13\n\x0bmysqld_args\x18\x01 \x03(\t\"\x0f\n\rStartResponse\"*\n\x0fShutdownRequest\x12\x17\n\x0fwait_for_mysqld\x18\x01 \x01(\x08\"\x12\n\x10ShutdownResponse\"\x18\n\x16RunMysqlUpgradeRequest\"\x19\n\x17RunMysqlUpgradeResponse\"\x15\n\x13ReinitConfigRequest\"\x16\n\x14ReinitConfigResponse\"\x16\n\x14RefreshConfigRequest\"\x17\n\x15RefreshConfigResponse2\x8a\x03\n\x08MysqlCtl\x12:\n\x05Start\x12\x16.mysqlctl.StartRequest\x1a\x17.mysqlctl.StartResponse\"\x00\x12\x43\n\x08Shutdown\x12\x19.mysqlctl.ShutdownRequest\x1a\x1a.mysqlctl.ShutdownResponse\"\x00\x12X\n\x0fRunMysqlUpgrade\x12 .mysqlctl.RunMysqlUpgradeRequest\x1a!.mysqlctl.RunMysqlUpgradeResponse\"\x00\x12O\n\x0cReinitConfig\x12\x1d.mysqlctl.ReinitConfigRequest\x1a\x1e.mysqlctl.ReinitConfigResponse\"\x00\x12R\n\rRefreshConfig\x12\x1e.mysqlctl.RefreshConfigRequest\x1a\x1f.mysqlctl.RefreshConfigResponse\"\x00\x42\'Z%vitess.io/vitess/go/vt/proto/mysqlctlb\x06proto3') ) @@ -38,14 +38,14 @@ has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -69,7 +69,7 @@ nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -93,14 +93,14 @@ has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -124,7 +124,7 @@ nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -148,7 +148,7 @@ nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -172,7 +172,7 @@ nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -196,7 +196,7 @@ nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -220,7 +220,7 @@ nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -244,7 +244,7 @@ nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -268,7 +268,7 @@ nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -361,15 +361,14 @@ _sym_db.RegisterMessage(RefreshConfigResponse) -DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z%vitess.io/vitess/go/vt/proto/mysqlctl')) +DESCRIPTOR._options = None _MYSQLCTL = _descriptor.ServiceDescriptor( name='MysqlCtl', full_name='mysqlctl.MysqlCtl', file=DESCRIPTOR, index=0, - options=None, + serialized_options=None, serialized_start=296, serialized_end=690, methods=[ @@ -380,7 +379,7 @@ containing_service=None, input_type=_STARTREQUEST, output_type=_STARTRESPONSE, - options=None, + serialized_options=None, ), _descriptor.MethodDescriptor( name='Shutdown', @@ -389,7 +388,7 @@ containing_service=None, input_type=_SHUTDOWNREQUEST, output_type=_SHUTDOWNRESPONSE, - options=None, + serialized_options=None, ), _descriptor.MethodDescriptor( name='RunMysqlUpgrade', @@ -398,7 +397,7 @@ containing_service=None, input_type=_RUNMYSQLUPGRADEREQUEST, output_type=_RUNMYSQLUPGRADERESPONSE, - options=None, + serialized_options=None, ), _descriptor.MethodDescriptor( name='ReinitConfig', @@ -407,7 +406,7 @@ containing_service=None, input_type=_REINITCONFIGREQUEST, output_type=_REINITCONFIGRESPONSE, - options=None, + serialized_options=None, ), _descriptor.MethodDescriptor( name='RefreshConfig', @@ -416,7 +415,7 @@ containing_service=None, input_type=_REFRESHCONFIGREQUEST, output_type=_REFRESHCONFIGRESPONSE, - options=None, + serialized_options=None, ), ]) _sym_db.RegisterServiceDescriptor(_MYSQLCTL) diff --git a/py/vtproto/replicationdata_pb2.py b/py/vtproto/replicationdata_pb2.py index e76d4591683..972a3970aee 100644 --- a/py/vtproto/replicationdata_pb2.py +++ b/py/vtproto/replicationdata_pb2.py @@ -7,7 +7,6 @@ from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -19,6 +18,7 @@ name='replicationdata.proto', package='replicationdata', syntax='proto3', + serialized_options=_b('Z,vitess.io/vitess/go/vt/proto/replicationdata'), serialized_pb=_b('\n\x15replicationdata.proto\x12\x0freplicationdata\"\xb6\x01\n\x06Status\x12\x10\n\x08position\x18\x01 \x01(\t\x12\x18\n\x10slave_io_running\x18\x02 \x01(\x08\x12\x19\n\x11slave_sql_running\x18\x03 \x01(\x08\x12\x1d\n\x15seconds_behind_master\x18\x04 \x01(\r\x12\x13\n\x0bmaster_host\x18\x05 \x01(\t\x12\x13\n\x0bmaster_port\x18\x06 \x01(\x05\x12\x1c\n\x14master_connect_retry\x18\x07 \x01(\x05\x42.Z,vitess.io/vitess/go/vt/proto/replicationdatab\x06proto3') ) @@ -38,56 +38,56 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='slave_io_running', full_name='replicationdata.Status.slave_io_running', index=1, number=2, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='slave_sql_running', full_name='replicationdata.Status.slave_sql_running', index=2, number=3, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='seconds_behind_master', full_name='replicationdata.Status.seconds_behind_master', index=3, number=4, type=13, cpp_type=3, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='master_host', full_name='replicationdata.Status.master_host', index=4, number=5, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='master_port', full_name='replicationdata.Status.master_port', index=5, number=6, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='master_connect_retry', full_name='replicationdata.Status.master_connect_retry', index=6, number=7, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -108,6 +108,5 @@ _sym_db.RegisterMessage(Status) -DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z,vitess.io/vitess/go/vt/proto/replicationdata')) +DESCRIPTOR._options = None # @@protoc_insertion_point(module_scope) diff --git a/py/vtproto/tableacl_pb2.py b/py/vtproto/tableacl_pb2.py index cfdd8d0e63c..793bfdd5886 100644 --- a/py/vtproto/tableacl_pb2.py +++ b/py/vtproto/tableacl_pb2.py @@ -7,7 +7,6 @@ from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -19,6 +18,7 @@ name='tableacl.proto', package='tableacl', syntax='proto3', + serialized_options=_b('Z%vitess.io/vitess/go/vt/proto/tableacl'), serialized_pb=_b('\n\x0etableacl.proto\x12\x08tableacl\"q\n\x0eTableGroupSpec\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1f\n\x17table_names_or_prefixes\x18\x02 \x03(\t\x12\x0f\n\x07readers\x18\x03 \x03(\t\x12\x0f\n\x07writers\x18\x04 \x03(\t\x12\x0e\n\x06\x61\x64mins\x18\x05 \x03(\t\"8\n\x06\x43onfig\x12.\n\x0ctable_groups\x18\x01 \x03(\x0b\x32\x18.tableacl.TableGroupSpecB\'Z%vitess.io/vitess/go/vt/proto/tableaclb\x06proto3') ) @@ -38,42 +38,42 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='table_names_or_prefixes', full_name='tableacl.TableGroupSpec.table_names_or_prefixes', index=1, number=2, type=9, cpp_type=9, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='readers', full_name='tableacl.TableGroupSpec.readers', index=2, number=3, type=9, cpp_type=9, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='writers', full_name='tableacl.TableGroupSpec.writers', index=3, number=4, type=9, cpp_type=9, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='admins', full_name='tableacl.TableGroupSpec.admins', index=4, number=5, type=9, cpp_type=9, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -97,14 +97,14 @@ has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -134,6 +134,5 @@ _sym_db.RegisterMessage(Config) -DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z%vitess.io/vitess/go/vt/proto/tableacl')) +DESCRIPTOR._options = None # @@protoc_insertion_point(module_scope) diff --git a/py/vtproto/throttlerdata_pb2.py b/py/vtproto/throttlerdata_pb2.py index 5706e958988..c531a2912a3 100644 --- a/py/vtproto/throttlerdata_pb2.py +++ b/py/vtproto/throttlerdata_pb2.py @@ -7,7 +7,6 @@ from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -19,6 +18,7 @@ name='throttlerdata.proto', package='throttlerdata', syntax='proto3', + serialized_options=_b('Z*vitess.io/vitess/go/vt/proto/throttlerdata'), serialized_pb=_b('\n\x13throttlerdata.proto\x12\rthrottlerdata\"\x11\n\x0fMaxRatesRequest\"{\n\x10MaxRatesResponse\x12\x39\n\x05rates\x18\x01 \x03(\x0b\x32*.throttlerdata.MaxRatesResponse.RatesEntry\x1a,\n\nRatesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\"!\n\x11SetMaxRateRequest\x12\x0c\n\x04rate\x18\x01 \x01(\x03\"#\n\x12SetMaxRateResponse\x12\r\n\x05names\x18\x01 \x03(\t\"\xe8\x03\n\rConfiguration\x12\"\n\x1atarget_replication_lag_sec\x18\x01 \x01(\x03\x12\x1f\n\x17max_replication_lag_sec\x18\x02 \x01(\x03\x12\x14\n\x0cinitial_rate\x18\x03 \x01(\x03\x12\x14\n\x0cmax_increase\x18\x04 \x01(\x01\x12\x1a\n\x12\x65mergency_decrease\x18\x05 \x01(\x01\x12*\n\"min_duration_between_increases_sec\x18\x06 \x01(\x03\x12*\n\"max_duration_between_increases_sec\x18\x07 \x01(\x03\x12*\n\"min_duration_between_decreases_sec\x18\x08 \x01(\x03\x12!\n\x19spread_backlog_across_sec\x18\t \x01(\x03\x12!\n\x19ignore_n_slowest_replicas\x18\n \x01(\x05\x12 \n\x18ignore_n_slowest_rdonlys\x18\x0b \x01(\x05\x12\x1e\n\x16\x61ge_bad_rate_after_sec\x18\x0c \x01(\x03\x12\x19\n\x11\x62\x61\x64_rate_increase\x18\r \x01(\x01\x12#\n\x1bmax_rate_approach_threshold\x18\x0e \x01(\x01\"1\n\x17GetConfigurationRequest\x12\x16\n\x0ethrottler_name\x18\x01 \x01(\t\"\xc4\x01\n\x18GetConfigurationResponse\x12S\n\x0e\x63onfigurations\x18\x01 \x03(\x0b\x32;.throttlerdata.GetConfigurationResponse.ConfigurationsEntry\x1aS\n\x13\x43onfigurationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.throttlerdata.Configuration:\x02\x38\x01\"\x83\x01\n\x1aUpdateConfigurationRequest\x12\x16\n\x0ethrottler_name\x18\x01 \x01(\t\x12\x33\n\rconfiguration\x18\x02 \x01(\x0b\x32\x1c.throttlerdata.Configuration\x12\x18\n\x10\x63opy_zero_values\x18\x03 \x01(\x08\",\n\x1bUpdateConfigurationResponse\x12\r\n\x05names\x18\x01 \x03(\t\"3\n\x19ResetConfigurationRequest\x12\x16\n\x0ethrottler_name\x18\x01 \x01(\t\"+\n\x1aResetConfigurationResponse\x12\r\n\x05names\x18\x01 \x03(\tB,Z*vitess.io/vitess/go/vt/proto/throttlerdatab\x06proto3') ) @@ -38,7 +38,7 @@ nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -62,21 +62,21 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='value', full_name='throttlerdata.MaxRatesResponse.RatesEntry.value', index=1, number=2, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), + serialized_options=_b('8\001'), is_extendable=False, syntax='proto3', extension_ranges=[], @@ -99,14 +99,14 @@ has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[_MAXRATESRESPONSE_RATESENTRY, ], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -130,14 +130,14 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -161,14 +161,14 @@ has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -192,105 +192,105 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='max_replication_lag_sec', full_name='throttlerdata.Configuration.max_replication_lag_sec', index=1, number=2, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='initial_rate', full_name='throttlerdata.Configuration.initial_rate', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='max_increase', full_name='throttlerdata.Configuration.max_increase', index=3, number=4, type=1, cpp_type=5, label=1, has_default_value=False, default_value=float(0), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='emergency_decrease', full_name='throttlerdata.Configuration.emergency_decrease', index=4, number=5, type=1, cpp_type=5, label=1, has_default_value=False, default_value=float(0), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='min_duration_between_increases_sec', full_name='throttlerdata.Configuration.min_duration_between_increases_sec', index=5, number=6, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='max_duration_between_increases_sec', full_name='throttlerdata.Configuration.max_duration_between_increases_sec', index=6, number=7, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='min_duration_between_decreases_sec', full_name='throttlerdata.Configuration.min_duration_between_decreases_sec', index=7, number=8, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='spread_backlog_across_sec', full_name='throttlerdata.Configuration.spread_backlog_across_sec', index=8, number=9, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='ignore_n_slowest_replicas', full_name='throttlerdata.Configuration.ignore_n_slowest_replicas', index=9, number=10, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='ignore_n_slowest_rdonlys', full_name='throttlerdata.Configuration.ignore_n_slowest_rdonlys', index=10, number=11, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='age_bad_rate_after_sec', full_name='throttlerdata.Configuration.age_bad_rate_after_sec', index=11, number=12, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='bad_rate_increase', full_name='throttlerdata.Configuration.bad_rate_increase', index=12, number=13, type=1, cpp_type=5, label=1, has_default_value=False, default_value=float(0), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='max_rate_approach_threshold', full_name='throttlerdata.Configuration.max_rate_approach_threshold', index=13, number=14, type=1, cpp_type=5, label=1, has_default_value=False, default_value=float(0), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -314,14 +314,14 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -345,21 +345,21 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='value', full_name='throttlerdata.GetConfigurationResponse.ConfigurationsEntry.value', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), + serialized_options=_b('8\001'), is_extendable=False, syntax='proto3', extension_ranges=[], @@ -382,14 +382,14 @@ has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[_GETCONFIGURATIONRESPONSE_CONFIGURATIONSENTRY, ], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -413,28 +413,28 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='configuration', full_name='throttlerdata.UpdateConfigurationRequest.configuration', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='copy_zero_values', full_name='throttlerdata.UpdateConfigurationRequest.copy_zero_values', index=2, number=3, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -458,14 +458,14 @@ has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -489,14 +489,14 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -520,14 +520,14 @@ has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -650,10 +650,7 @@ _sym_db.RegisterMessage(ResetConfigurationResponse) -DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z*vitess.io/vitess/go/vt/proto/throttlerdata')) -_MAXRATESRESPONSE_RATESENTRY.has_options = True -_MAXRATESRESPONSE_RATESENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) -_GETCONFIGURATIONRESPONSE_CONFIGURATIONSENTRY.has_options = True -_GETCONFIGURATIONRESPONSE_CONFIGURATIONSENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) +DESCRIPTOR._options = None +_MAXRATESRESPONSE_RATESENTRY._options = None +_GETCONFIGURATIONRESPONSE_CONFIGURATIONSENTRY._options = None # @@protoc_insertion_point(module_scope) diff --git a/py/vtproto/throttlerservice_pb2.py b/py/vtproto/throttlerservice_pb2.py index f4bdd95acb6..409f04c7ad9 100644 --- a/py/vtproto/throttlerservice_pb2.py +++ b/py/vtproto/throttlerservice_pb2.py @@ -7,7 +7,6 @@ from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -20,6 +19,7 @@ name='throttlerservice.proto', package='throttlerservice', syntax='proto3', + serialized_options=_b('Z-vitess.io/vitess/go/vt/proto/throttlerservice'), serialized_pb=_b('\n\x16throttlerservice.proto\x12\x10throttlerservice\x1a\x13throttlerdata.proto2\xf3\x03\n\tThrottler\x12M\n\x08MaxRates\x12\x1e.throttlerdata.MaxRatesRequest\x1a\x1f.throttlerdata.MaxRatesResponse\"\x00\x12S\n\nSetMaxRate\x12 .throttlerdata.SetMaxRateRequest\x1a!.throttlerdata.SetMaxRateResponse\"\x00\x12\x65\n\x10GetConfiguration\x12&.throttlerdata.GetConfigurationRequest\x1a\'.throttlerdata.GetConfigurationResponse\"\x00\x12n\n\x13UpdateConfiguration\x12).throttlerdata.UpdateConfigurationRequest\x1a*.throttlerdata.UpdateConfigurationResponse\"\x00\x12k\n\x12ResetConfiguration\x12(.throttlerdata.ResetConfigurationRequest\x1a).throttlerdata.ResetConfigurationResponse\"\x00\x42/Z-vitess.io/vitess/go/vt/proto/throttlerserviceb\x06proto3') , dependencies=[throttlerdata__pb2.DESCRIPTOR,]) @@ -29,15 +29,14 @@ _sym_db.RegisterFileDescriptor(DESCRIPTOR) -DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z-vitess.io/vitess/go/vt/proto/throttlerservice')) +DESCRIPTOR._options = None _THROTTLER = _descriptor.ServiceDescriptor( name='Throttler', full_name='throttlerservice.Throttler', file=DESCRIPTOR, index=0, - options=None, + serialized_options=None, serialized_start=66, serialized_end=565, methods=[ @@ -48,7 +47,7 @@ containing_service=None, input_type=throttlerdata__pb2._MAXRATESREQUEST, output_type=throttlerdata__pb2._MAXRATESRESPONSE, - options=None, + serialized_options=None, ), _descriptor.MethodDescriptor( name='SetMaxRate', @@ -57,7 +56,7 @@ containing_service=None, input_type=throttlerdata__pb2._SETMAXRATEREQUEST, output_type=throttlerdata__pb2._SETMAXRATERESPONSE, - options=None, + serialized_options=None, ), _descriptor.MethodDescriptor( name='GetConfiguration', @@ -66,7 +65,7 @@ containing_service=None, input_type=throttlerdata__pb2._GETCONFIGURATIONREQUEST, output_type=throttlerdata__pb2._GETCONFIGURATIONRESPONSE, - options=None, + serialized_options=None, ), _descriptor.MethodDescriptor( name='UpdateConfiguration', @@ -75,7 +74,7 @@ containing_service=None, input_type=throttlerdata__pb2._UPDATECONFIGURATIONREQUEST, output_type=throttlerdata__pb2._UPDATECONFIGURATIONRESPONSE, - options=None, + serialized_options=None, ), _descriptor.MethodDescriptor( name='ResetConfiguration', @@ -84,7 +83,7 @@ containing_service=None, input_type=throttlerdata__pb2._RESETCONFIGURATIONREQUEST, output_type=throttlerdata__pb2._RESETCONFIGURATIONRESPONSE, - options=None, + serialized_options=None, ), ]) _sym_db.RegisterServiceDescriptor(_THROTTLER) diff --git a/py/vtproto/vtctldata_pb2.py b/py/vtproto/vtctldata_pb2.py index 766a844c18b..4e2a0c5c11e 100644 --- a/py/vtproto/vtctldata_pb2.py +++ b/py/vtproto/vtctldata_pb2.py @@ -7,7 +7,6 @@ from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -20,6 +19,7 @@ name='vtctldata.proto', package='vtctldata', syntax='proto3', + serialized_options=_b('Z&vitess.io/vitess/go/vt/proto/vtctldata'), serialized_pb=_b('\n\x0fvtctldata.proto\x12\tvtctldata\x1a\rlogutil.proto\"B\n\x1a\x45xecuteVtctlCommandRequest\x12\x0c\n\x04\x61rgs\x18\x01 \x03(\t\x12\x16\n\x0e\x61\x63tion_timeout\x18\x02 \x01(\x03\"<\n\x1b\x45xecuteVtctlCommandResponse\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.logutil.EventB(Z&vitess.io/vitess/go/vt/proto/vtctldatab\x06proto3') , dependencies=[logutil__pb2.DESCRIPTOR,]) @@ -40,21 +40,21 @@ has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='action_timeout', full_name='vtctldata.ExecuteVtctlCommandRequest.action_timeout', index=1, number=2, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -78,14 +78,14 @@ has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -115,6 +115,5 @@ _sym_db.RegisterMessage(ExecuteVtctlCommandResponse) -DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z&vitess.io/vitess/go/vt/proto/vtctldata')) +DESCRIPTOR._options = None # @@protoc_insertion_point(module_scope) diff --git a/py/vtproto/vtctlservice_pb2.py b/py/vtproto/vtctlservice_pb2.py index 431d0ac193f..5aa94a82ba0 100644 --- a/py/vtproto/vtctlservice_pb2.py +++ b/py/vtproto/vtctlservice_pb2.py @@ -7,7 +7,6 @@ from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -20,6 +19,7 @@ name='vtctlservice.proto', package='vtctlservice', syntax='proto3', + serialized_options=_b('Z)vitess.io/vitess/go/vt/proto/vtctlservice'), serialized_pb=_b('\n\x12vtctlservice.proto\x12\x0cvtctlservice\x1a\x0fvtctldata.proto2q\n\x05Vtctl\x12h\n\x13\x45xecuteVtctlCommand\x12%.vtctldata.ExecuteVtctlCommandRequest\x1a&.vtctldata.ExecuteVtctlCommandResponse\"\x00\x30\x01\x42+Z)vitess.io/vitess/go/vt/proto/vtctlserviceb\x06proto3') , dependencies=[vtctldata__pb2.DESCRIPTOR,]) @@ -29,15 +29,14 @@ _sym_db.RegisterFileDescriptor(DESCRIPTOR) -DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z)vitess.io/vitess/go/vt/proto/vtctlservice')) +DESCRIPTOR._options = None _VTCTL = _descriptor.ServiceDescriptor( name='Vtctl', full_name='vtctlservice.Vtctl', file=DESCRIPTOR, index=0, - options=None, + serialized_options=None, serialized_start=53, serialized_end=166, methods=[ @@ -48,7 +47,7 @@ containing_service=None, input_type=vtctldata__pb2._EXECUTEVTCTLCOMMANDREQUEST, output_type=vtctldata__pb2._EXECUTEVTCTLCOMMANDRESPONSE, - options=None, + serialized_options=None, ), ]) _sym_db.RegisterServiceDescriptor(_VTCTL) diff --git a/py/vtproto/vttest_pb2.py b/py/vtproto/vttest_pb2.py index 5e20f3c45f1..1c414f959bd 100644 --- a/py/vtproto/vttest_pb2.py +++ b/py/vtproto/vttest_pb2.py @@ -7,7 +7,6 @@ from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -19,6 +18,7 @@ name='vttest.proto', package='vttest', syntax='proto3', + serialized_options=_b('Z#vitess.io/vitess/go/vt/proto/vttest'), serialized_pb=_b('\n\x0cvttest.proto\x12\x06vttest\"/\n\x05Shard\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x18\n\x10\x64\x62_name_override\x18\x02 \x01(\t\"\xb5\x01\n\x08Keyspace\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1d\n\x06shards\x18\x02 \x03(\x0b\x32\r.vttest.Shard\x12\x1c\n\x14sharding_column_name\x18\x03 \x01(\t\x12\x1c\n\x14sharding_column_type\x18\x04 \x01(\t\x12\x13\n\x0bserved_from\x18\x05 \x01(\t\x12\x15\n\rreplica_count\x18\x06 \x01(\x05\x12\x14\n\x0crdonly_count\x18\x07 \x01(\x05\"D\n\x0eVTTestTopology\x12#\n\tkeyspaces\x18\x01 \x03(\x0b\x32\x10.vttest.Keyspace\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\tB%Z#vitess.io/vitess/go/vt/proto/vttestb\x06proto3') ) @@ -38,21 +38,21 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='db_name_override', full_name='vttest.Shard.db_name_override', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -76,56 +76,56 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='shards', full_name='vttest.Keyspace.shards', index=1, number=2, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='sharding_column_name', full_name='vttest.Keyspace.sharding_column_name', index=2, number=3, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='sharding_column_type', full_name='vttest.Keyspace.sharding_column_type', index=3, number=4, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='served_from', full_name='vttest.Keyspace.served_from', index=4, number=5, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='replica_count', full_name='vttest.Keyspace.replica_count', index=5, number=6, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='rdonly_count', full_name='vttest.Keyspace.rdonly_count', index=6, number=7, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -149,21 +149,21 @@ has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='cells', full_name='vttest.VTTestTopology.cells', index=1, number=2, type=9, cpp_type=9, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -202,6 +202,5 @@ _sym_db.RegisterMessage(VTTestTopology) -DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z#vitess.io/vitess/go/vt/proto/vttest')) +DESCRIPTOR._options = None # @@protoc_insertion_point(module_scope) diff --git a/py/vtproto/vtworkerdata_pb2.py b/py/vtproto/vtworkerdata_pb2.py index a874b812746..f319647d24b 100644 --- a/py/vtproto/vtworkerdata_pb2.py +++ b/py/vtproto/vtworkerdata_pb2.py @@ -7,7 +7,6 @@ from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -20,6 +19,7 @@ name='vtworkerdata.proto', package='vtworkerdata', syntax='proto3', + serialized_options=_b('Z)vitess.io/vitess/go/vt/proto/vtworkerdata'), serialized_pb=_b('\n\x12vtworkerdata.proto\x12\x0cvtworkerdata\x1a\rlogutil.proto\"-\n\x1d\x45xecuteVtworkerCommandRequest\x12\x0c\n\x04\x61rgs\x18\x01 \x03(\t\"?\n\x1e\x45xecuteVtworkerCommandResponse\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.logutil.EventB+Z)vitess.io/vitess/go/vt/proto/vtworkerdatab\x06proto3') , dependencies=[logutil__pb2.DESCRIPTOR,]) @@ -40,14 +40,14 @@ has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -71,14 +71,14 @@ has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -108,6 +108,5 @@ _sym_db.RegisterMessage(ExecuteVtworkerCommandResponse) -DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z)vitess.io/vitess/go/vt/proto/vtworkerdata')) +DESCRIPTOR._options = None # @@protoc_insertion_point(module_scope) diff --git a/py/vtproto/vtworkerservice_pb2.py b/py/vtproto/vtworkerservice_pb2.py index ee25dd13b62..9c7ad0640ab 100644 --- a/py/vtproto/vtworkerservice_pb2.py +++ b/py/vtproto/vtworkerservice_pb2.py @@ -7,7 +7,6 @@ from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -20,6 +19,7 @@ name='vtworkerservice.proto', package='vtworkerservice', syntax='proto3', + serialized_options=_b('Z,vitess.io/vitess/go/vt/proto/vtworkerservice'), serialized_pb=_b('\n\x15vtworkerservice.proto\x12\x0fvtworkerservice\x1a\x12vtworkerdata.proto2\x83\x01\n\x08Vtworker\x12w\n\x16\x45xecuteVtworkerCommand\x12+.vtworkerdata.ExecuteVtworkerCommandRequest\x1a,.vtworkerdata.ExecuteVtworkerCommandResponse\"\x00\x30\x01\x42.Z,vitess.io/vitess/go/vt/proto/vtworkerserviceb\x06proto3') , dependencies=[vtworkerdata__pb2.DESCRIPTOR,]) @@ -29,15 +29,14 @@ _sym_db.RegisterFileDescriptor(DESCRIPTOR) -DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z,vitess.io/vitess/go/vt/proto/vtworkerservice')) +DESCRIPTOR._options = None _VTWORKER = _descriptor.ServiceDescriptor( name='Vtworker', full_name='vtworkerservice.Vtworker', file=DESCRIPTOR, index=0, - options=None, + serialized_options=None, serialized_start=63, serialized_end=194, methods=[ @@ -48,7 +47,7 @@ containing_service=None, input_type=vtworkerdata__pb2._EXECUTEVTWORKERCOMMANDREQUEST, output_type=vtworkerdata__pb2._EXECUTEVTWORKERCOMMANDRESPONSE, - options=None, + serialized_options=None, ), ]) _sym_db.RegisterServiceDescriptor(_VTWORKER) diff --git a/py/vtproto/workflow_pb2.py b/py/vtproto/workflow_pb2.py index 5d856a412f0..c624dfe8fc4 100644 --- a/py/vtproto/workflow_pb2.py +++ b/py/vtproto/workflow_pb2.py @@ -8,7 +8,6 @@ from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database -from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -20,6 +19,7 @@ name='workflow.proto', package='workflow', syntax='proto3', + serialized_options=_b('Z%vitess.io/vitess/go/vt/proto/workflow'), serialized_pb=_b('\n\x0eworkflow.proto\x12\x08workflow\"\xbc\x01\n\x08Workflow\x12\x0c\n\x04uuid\x18\x01 \x01(\t\x12\x14\n\x0c\x66\x61\x63tory_name\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12&\n\x05state\x18\x04 \x01(\x0e\x32\x17.workflow.WorkflowState\x12\x0c\n\x04\x64\x61ta\x18\x05 \x01(\x0c\x12\r\n\x05\x65rror\x18\x06 \x01(\t\x12\x12\n\nstart_time\x18\x07 \x01(\x03\x12\x10\n\x08\x65nd_time\x18\x08 \x01(\x03\x12\x13\n\x0b\x63reate_time\x18\t \x01(\x03\"\x8f\x02\n\x12WorkflowCheckpoint\x12\x14\n\x0c\x63ode_version\x18\x01 \x01(\x05\x12\x36\n\x05tasks\x18\x02 \x03(\x0b\x32\'.workflow.WorkflowCheckpoint.TasksEntry\x12<\n\x08settings\x18\x03 \x03(\x0b\x32*.workflow.WorkflowCheckpoint.SettingsEntry\x1a<\n\nTasksEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1d\n\x05value\x18\x02 \x01(\x0b\x32\x0e.workflow.Task:\x02\x38\x01\x1a/\n\rSettingsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xac\x01\n\x04Task\x12\n\n\x02id\x18\x01 \x01(\t\x12\"\n\x05state\x18\x02 \x01(\x0e\x32\x13.workflow.TaskState\x12\x32\n\nattributes\x18\x03 \x03(\x0b\x32\x1e.workflow.Task.AttributesEntry\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x1a\x31\n\x0f\x41ttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01*6\n\rWorkflowState\x12\x0e\n\nNotStarted\x10\x00\x12\x0b\n\x07Running\x10\x01\x12\x08\n\x04\x44one\x10\x02*>\n\tTaskState\x12\x12\n\x0eTaskNotStarted\x10\x00\x12\x0f\n\x0bTaskRunning\x10\x01\x12\x0c\n\x08TaskDone\x10\x02\x42\'Z%vitess.io/vitess/go/vt/proto/workflowb\x06proto3') ) @@ -31,19 +31,19 @@ values=[ _descriptor.EnumValueDescriptor( name='NotStarted', index=0, number=0, - options=None, + serialized_options=None, type=None), _descriptor.EnumValueDescriptor( name='Running', index=1, number=1, - options=None, + serialized_options=None, type=None), _descriptor.EnumValueDescriptor( name='Done', index=2, number=2, - options=None, + serialized_options=None, type=None), ], containing_type=None, - options=None, + serialized_options=None, serialized_start=668, serialized_end=722, ) @@ -58,19 +58,19 @@ values=[ _descriptor.EnumValueDescriptor( name='TaskNotStarted', index=0, number=0, - options=None, + serialized_options=None, type=None), _descriptor.EnumValueDescriptor( name='TaskRunning', index=1, number=1, - options=None, + serialized_options=None, type=None), _descriptor.EnumValueDescriptor( name='TaskDone', index=2, number=2, - options=None, + serialized_options=None, type=None), ], containing_type=None, - options=None, + serialized_options=None, serialized_start=724, serialized_end=786, ) @@ -99,70 +99,70 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='factory_name', full_name='workflow.Workflow.factory_name', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='name', full_name='workflow.Workflow.name', index=2, number=3, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='state', full_name='workflow.Workflow.state', index=3, number=4, type=14, cpp_type=8, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='data', full_name='workflow.Workflow.data', index=4, number=5, type=12, cpp_type=9, label=1, has_default_value=False, default_value=_b(""), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='error', full_name='workflow.Workflow.error', index=5, number=6, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='start_time', full_name='workflow.Workflow.start_time', index=6, number=7, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='end_time', full_name='workflow.Workflow.end_time', index=7, number=8, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='create_time', full_name='workflow.Workflow.create_time', index=8, number=9, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -186,21 +186,21 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='value', full_name='workflow.WorkflowCheckpoint.TasksEntry.value', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), + serialized_options=_b('8\001'), is_extendable=False, syntax='proto3', extension_ranges=[], @@ -223,21 +223,21 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='value', full_name='workflow.WorkflowCheckpoint.SettingsEntry.value', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), + serialized_options=_b('8\001'), is_extendable=False, syntax='proto3', extension_ranges=[], @@ -260,28 +260,28 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='tasks', full_name='workflow.WorkflowCheckpoint.tasks', index=1, number=2, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='settings', full_name='workflow.WorkflowCheckpoint.settings', index=2, number=3, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[_WORKFLOWCHECKPOINT_TASKSENTRY, _WORKFLOWCHECKPOINT_SETTINGSENTRY, ], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -305,21 +305,21 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='value', full_name='workflow.Task.AttributesEntry.value', index=1, number=2, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), + serialized_options=_b('8\001'), is_extendable=False, syntax='proto3', extension_ranges=[], @@ -342,35 +342,35 @@ has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='state', full_name='workflow.Task.state', index=1, number=2, type=14, cpp_type=8, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='attributes', full_name='workflow.Task.attributes', index=2, number=3, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='error', full_name='workflow.Task.error', index=3, number=4, type=9, cpp_type=9, label=1, has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[_TASK_ATTRIBUTESENTRY, ], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], @@ -442,12 +442,8 @@ _sym_db.RegisterMessage(Task.AttributesEntry) -DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z%vitess.io/vitess/go/vt/proto/workflow')) -_WORKFLOWCHECKPOINT_TASKSENTRY.has_options = True -_WORKFLOWCHECKPOINT_TASKSENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) -_WORKFLOWCHECKPOINT_SETTINGSENTRY.has_options = True -_WORKFLOWCHECKPOINT_SETTINGSENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) -_TASK_ATTRIBUTESENTRY.has_options = True -_TASK_ATTRIBUTESENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) +DESCRIPTOR._options = None +_WORKFLOWCHECKPOINT_TASKSENTRY._options = None +_WORKFLOWCHECKPOINT_SETTINGSENTRY._options = None +_TASK_ATTRIBUTESENTRY._options = None # @@protoc_insertion_point(module_scope)