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)