From 69dfff7c5ffe4b823145afff797cffe4fc496149 Mon Sep 17 00:00:00 2001 From: deepthi Date: Tue, 7 May 2019 12:29:19 -0700 Subject: [PATCH 01/17] * CreateKeyspace now takes two additional parameters - keyspace_type: NORMAL/SNAPSHOT - snapshot_time: for SNAPSHOT keyspaces, the time for which it is being recovered - also when creating a keyspace, create an empty vschema * Vttablet recovery mode - recovery_keyspace: which keyspace to recover - init_keyspace: this should be a SNAPSHOT keyspace - snapshot_time will be used as a starting point to find a backup to restore (most recent backup from snapshot_time) * Vtgate changes - tables and vindexes of SNAPSHOT keyspaces are not added to the uniqueTables and uniqueVindexes maps when building vschema * integration test to test recovery of vttablet Signed-off-by: deepthi --- go/vt/logutil/proto3.go | 11 +- go/vt/logutil/proto3_test.go | 22 +- go/vt/mysqlctl/backup.go | 10 +- go/vt/mysqlctl/backupengine.go | 5 +- go/vt/mysqlctl/builtinbackupengine.go | 29 +- go/vt/mysqlctl/xtrabackupengine.go | 21 +- go/vt/proto/logutil/logutil.pb.go | 112 ++------ go/vt/proto/topodata/topodata.pb.go | 266 ++++++++++------- go/vt/proto/vschema/vschema.pb.go | 131 +++++---- go/vt/proto/vttime/time.pb.go | 85 ++++++ go/vt/topo/topoproto/keyspace.go | 34 +++ go/vt/topo/topoproto/tablet.go | 6 +- go/vt/topo/vschema.go | 9 +- go/vt/vtctl/vtctl.go | 55 +++- go/vt/vtctld/api_test.go | 6 +- go/vt/vtgate/vindexes/vschema.go | 20 +- go/vt/vttablet/tabletmanager/init_tablet.go | 4 + go/vt/vttablet/tabletmanager/restore.go | 24 +- go/vt/vttablet/tabletmanager/rpc_backup.go | 5 +- proto/logutil.proto | 9 +- proto/time.proto | 30 ++ proto/topodata.proto | 22 ++ proto/vschema.proto | 2 + py/vtproto/logutil_pb2.py | 89 ++---- py/vtproto/time_pb2.py | 77 +++++ py/vtproto/time_pb2_grpc.py | 3 + py/vtproto/topodata_pb2.py | 134 ++++++--- py/vtproto/vschema_pb2.py | 65 +++-- test/config.json | 167 +++++------ test/recovery.py | 299 ++++++++++++++++++++ test/tablet.py | 2 +- 31 files changed, 1221 insertions(+), 533 deletions(-) create mode 100644 go/vt/proto/vttime/time.pb.go create mode 100644 go/vt/topo/topoproto/keyspace.go create mode 100644 proto/time.proto create mode 100644 py/vtproto/time_pb2.py create mode 100644 py/vtproto/time_pb2_grpc.py create mode 100755 test/recovery.py diff --git a/go/vt/logutil/proto3.go b/go/vt/logutil/proto3.go index 950a74ec664..5e8ab03b7cc 100644 --- a/go/vt/logutil/proto3.go +++ b/go/vt/logutil/proto3.go @@ -20,16 +20,17 @@ import ( "time" logutilpb "vitess.io/vitess/go/vt/proto/logutil" + vttimepb "vitess.io/vitess/go/vt/proto/vttime" ) // This file contains a few functions to help with proto3. -// ProtoToTime converts a logutilpb.Time to a time.Time. +// ProtoToTime converts a vttimepb.Time to a time.Time. // proto3 will eventually support timestamps, at which point we'll retire // this. // // A nil pointer is like the empty timestamp. -func ProtoToTime(ts *logutilpb.Time) time.Time { +func ProtoToTime(ts *vttimepb.Time) time.Time { if ts == nil { // treat nil like the empty Timestamp return time.Unix(0, 0).UTC() @@ -37,11 +38,11 @@ func ProtoToTime(ts *logutilpb.Time) time.Time { return time.Unix(ts.Seconds, int64(ts.Nanoseconds)).UTC() } -// TimeToProto converts the time.Time to a logutilpb.Time. -func TimeToProto(t time.Time) *logutilpb.Time { +// TimeToProto converts the time.Time to a vttimepb.Time. +func TimeToProto(t time.Time) *vttimepb.Time { seconds := t.Unix() nanos := int64(t.Sub(time.Unix(seconds, 0))) - return &logutilpb.Time{ + return &vttimepb.Time{ Seconds: seconds, Nanoseconds: int32(nanos), } diff --git a/go/vt/logutil/proto3_test.go b/go/vt/logutil/proto3_test.go index 185450f3b20..47b858c1dea 100644 --- a/go/vt/logutil/proto3_test.go +++ b/go/vt/logutil/proto3_test.go @@ -22,7 +22,7 @@ import ( "time" "github.com/golang/protobuf/proto" - logutilpb "vitess.io/vitess/go/vt/proto/logutil" + "vitess.io/vitess/go/vt/proto/vttime" ) const ( @@ -39,43 +39,43 @@ func utcDate(year, month, day int) time.Time { } var tests = []struct { - pt *logutilpb.Time + pt *vttime.Time t time.Time }{ // The timestamp representing the Unix epoch date. - {pt: &logutilpb.Time{Seconds: 0, Nanoseconds: 0}, + {pt: &vttime.Time{Seconds: 0, Nanoseconds: 0}, t: utcDate(1970, 1, 1)}, // The smallest representable timestamp with non-negative nanos. - {pt: &logutilpb.Time{Seconds: math.MinInt64, Nanoseconds: 0}, + {pt: &vttime.Time{Seconds: math.MinInt64, Nanoseconds: 0}, t: time.Unix(math.MinInt64, 0).UTC()}, // The earliest valid timestamp. - {pt: &logutilpb.Time{Seconds: minValidSeconds, Nanoseconds: 0}, + {pt: &vttime.Time{Seconds: minValidSeconds, Nanoseconds: 0}, t: utcDate(1, 1, 1)}, // The largest representable timestamp with nanos in range. - {pt: &logutilpb.Time{Seconds: math.MaxInt64, Nanoseconds: 1e9 - 1}, + {pt: &vttime.Time{Seconds: math.MaxInt64, Nanoseconds: 1e9 - 1}, t: time.Unix(math.MaxInt64, 1e9-1).UTC()}, // The largest valid timestamp. - {pt: &logutilpb.Time{Seconds: maxValidSeconds - 1, Nanoseconds: 1e9 - 1}, + {pt: &vttime.Time{Seconds: maxValidSeconds - 1, Nanoseconds: 1e9 - 1}, t: time.Date(9999, 12, 31, 23, 59, 59, 1e9-1, time.UTC)}, // The smallest invalid timestamp that is larger than the valid range. - {pt: &logutilpb.Time{Seconds: maxValidSeconds, Nanoseconds: 0}, + {pt: &vttime.Time{Seconds: maxValidSeconds, Nanoseconds: 0}, t: time.Unix(maxValidSeconds, 0).UTC()}, // A date before the epoch. - {pt: &logutilpb.Time{Seconds: -281836800, Nanoseconds: 0}, + {pt: &vttime.Time{Seconds: -281836800, Nanoseconds: 0}, t: utcDate(1961, 1, 26)}, // A date after the epoch. - {pt: &logutilpb.Time{Seconds: 1296000000, Nanoseconds: 0}, + {pt: &vttime.Time{Seconds: 1296000000, Nanoseconds: 0}, t: utcDate(2011, 1, 26)}, // A date after the epoch, in the middle of the day. - {pt: &logutilpb.Time{Seconds: 1296012345, Nanoseconds: 940483}, + {pt: &vttime.Time{Seconds: 1296012345, Nanoseconds: 940483}, t: time.Date(2011, 1, 26, 3, 25, 45, 940483, time.UTC)}, } diff --git a/go/vt/mysqlctl/backup.go b/go/vt/mysqlctl/backup.go index 1b8f498e6f5..d51aa5e2073 100644 --- a/go/vt/mysqlctl/backup.go +++ b/go/vt/mysqlctl/backup.go @@ -22,6 +22,7 @@ import ( "os" "path/filepath" "strings" + "time" "golang.org/x/net/context" @@ -83,7 +84,7 @@ var ( // - uses the BackupStorage service to store a new backup // - shuts down Mysqld during the backup // - remember if we were replicating, restore the exact same state -func Backup(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, dir, name string, backupConcurrency int, hookExtraEnv map[string]string) error { +func Backup(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, dir, name string, backupConcurrency int, hookExtraEnv map[string]string, backupTime time.Time) error { // Start the backup with the BackupStorage. bs, err := backupstorage.GetBackupStorage() if err != nil { @@ -101,7 +102,7 @@ func Backup(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil. } // Take the backup, and either AbortBackup or EndBackup. - usable, err := be.ExecuteBackup(ctx, cnf, mysqld, logger, bh, backupConcurrency, hookExtraEnv) + usable, err := be.ExecuteBackup(ctx, cnf, mysqld, logger, bh, backupConcurrency, hookExtraEnv, backupTime) var finishErr error if usable { finishErr = bh.EndBackup(ctx) @@ -218,7 +219,8 @@ func Restore( localMetadata map[string]string, logger logutil.Logger, deleteBeforeRestore bool, - dbName string) (mysql.Position, error) { + dbName string, + snapshotTime time.Time) (mysql.Position, error) { rval := mysql.Position{} @@ -274,7 +276,7 @@ func Restore( if err != nil { return mysql.Position{}, vterrors.Wrap(err, "Failed to find backup engine") } - if rval, err = be.ExecuteRestore(ctx, cnf, mysqld, logger, dir, bhs, restoreConcurrency, hookExtraEnv); err != nil { + if rval, err = be.ExecuteRestore(ctx, cnf, mysqld, logger, dir, bhs, restoreConcurrency, hookExtraEnv, snapshotTime); err != nil { return rval, err } diff --git a/go/vt/mysqlctl/backupengine.go b/go/vt/mysqlctl/backupengine.go index 725ea894ae3..8cb80a6d692 100644 --- a/go/vt/mysqlctl/backupengine.go +++ b/go/vt/mysqlctl/backupengine.go @@ -19,6 +19,7 @@ package mysqlctl import ( "context" "flag" + "time" "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/vt/logutil" @@ -34,8 +35,8 @@ var ( // BackupEngine is the interface to the backup engine type BackupEngine interface { - ExecuteBackup(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, bh backupstorage.BackupHandle, backupConcurrency int, hookExtraEnv map[string]string) (bool, error) - ExecuteRestore(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, dir string, bhs []backupstorage.BackupHandle, restoreConcurrency int, hookExtraEnv map[string]string) (mysql.Position, error) + ExecuteBackup(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, bh backupstorage.BackupHandle, backupConcurrency int, hookExtraEnv map[string]string, backupTime time.Time) (bool, error) + ExecuteRestore(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, dir string, bhs []backupstorage.BackupHandle, restoreConcurrency int, hookExtraEnv map[string]string, snapshotTime time.Time) (mysql.Position, error) } // BackupEngineMap contains the registered implementations for BackupEngine diff --git a/go/vt/mysqlctl/builtinbackupengine.go b/go/vt/mysqlctl/builtinbackupengine.go index 1ed80a8f12b..3372e0248f9 100644 --- a/go/vt/mysqlctl/builtinbackupengine.go +++ b/go/vt/mysqlctl/builtinbackupengine.go @@ -20,7 +20,6 @@ import ( "bufio" "context" "encoding/json" - "errors" "fmt" "io" "io/ioutil" @@ -28,6 +27,7 @@ import ( "path" "strings" "sync" + "time" "github.com/klauspost/pgzip" "vitess.io/vitess/go/mysql" @@ -72,6 +72,10 @@ type builtinBackupManifest struct { // backups that don't have this flag are assumed to be // compressed. SkipCompress bool + + // BackupTime is when the backup was taken in UTC time + // format: "2006-01-02.150405" + BackupTime time.Time } // FileEntry is one file to backup @@ -236,7 +240,7 @@ func findFilesToBackup(cnf *Mycnf) ([]FileEntry, error) { // ExecuteBackup returns a boolean that indicates if the backup is usable, // and an overall error. -func (be *BuiltinBackupEngine) ExecuteBackup(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, bh backupstorage.BackupHandle, backupConcurrency int, hookExtraEnv map[string]string) (bool, error) { +func (be *BuiltinBackupEngine) ExecuteBackup(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, bh backupstorage.BackupHandle, backupConcurrency int, hookExtraEnv map[string]string, backupTime time.Time) (bool, error) { logger.Infof("Hook: %v, Compress: %v", *backupStorageHook, *backupStorageCompress) @@ -298,7 +302,7 @@ func (be *BuiltinBackupEngine) ExecuteBackup(ctx context.Context, cnf *Mycnf, my } // Backup everything, capture the error. - backupErr := be.backupFiles(ctx, cnf, mysqld, logger, bh, replicationPosition, backupConcurrency, hookExtraEnv) + backupErr := be.backupFiles(ctx, cnf, mysqld, logger, bh, replicationPosition, backupConcurrency, hookExtraEnv, backupTime) usable := backupErr == nil // Try to restart mysqld, use background context in case we timed out the original context @@ -340,7 +344,7 @@ func (be *BuiltinBackupEngine) ExecuteBackup(ctx context.Context, cnf *Mycnf, my } // backupFiles finds the list of files to backup, and creates the backup. -func (be *BuiltinBackupEngine) backupFiles(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, bh backupstorage.BackupHandle, replicationPosition mysql.Position, backupConcurrency int, hookExtraEnv map[string]string) (err error) { +func (be *BuiltinBackupEngine) backupFiles(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, bh backupstorage.BackupHandle, replicationPosition mysql.Position, backupConcurrency int, hookExtraEnv map[string]string, backupTime time.Time) (err error) { // Get the files to backup. fes, err := findFilesToBackup(cnf) if err != nil { @@ -393,6 +397,7 @@ func (be *BuiltinBackupEngine) backupFiles(ctx context.Context, cnf *Mycnf, mysq Position: replicationPosition, TransformHook: *backupStorageHook, SkipCompress: !*backupStorageCompress, + BackupTime: backupTime, } data, err := json.MarshalIndent(bm, "", " ") if err != nil { @@ -515,12 +520,14 @@ func (be *BuiltinBackupEngine) ExecuteRestore( dir string, bhs []backupstorage.BackupHandle, restoreConcurrency int, - hookExtraEnv map[string]string) (mysql.Position, error) { + hookExtraEnv map[string]string, + snapshotTime time.Time) (mysql.Position, error) { var bh backupstorage.BackupHandle var bm builtinBackupManifest var toRestore int + unixZeroTime := time.Unix(0, 0).UTC() for toRestore = len(bhs) - 1; toRestore >= 0; toRestore-- { bh = bhs[toRestore] rc, err := bh.ReadFile(ctx, backupManifest) @@ -535,15 +542,19 @@ func (be *BuiltinBackupEngine) ExecuteRestore( log.Warningf("Possibly incomplete backup %v in directory %v on BackupStorage (cannot JSON decode MANIFEST: %v)", bh.Name(), dir, err) continue } - - logger.Infof("Restore: found backup %v %v to restore with %v files", bh.Directory(), bh.Name(), len(bm.FileEntries)) - break + if snapshotTime.Equal(unixZeroTime) /* uninitialized or not snapshot */ || bm.BackupTime.Before(snapshotTime) { + logger.Infof("Restore: found backup %v %v to restore with %v files", bh.Directory(), bh.Name(), len(bm.FileEntries)) + break + } } if toRestore < 0 { + if snapshotTime.After(unixZeroTime) { + return mysql.Position{}, vterrors.Errorf(vtrpc.Code_NOT_FOUND, "No valid backup found before time %v", snapshotTime.Format("2006-01-02.150405")) + } // There is at least one attempted backup, but none could be read. // This implies there is data we ought to have, so it's not safe to start // up empty. - return mysql.Position{}, errors.New("backup(s) found but none could be read, unsafe to start up empty, restart to retry restore") + return mysql.Position{}, vterrors.New(vtrpc.Code_NOT_FOUND, "backup(s) found but none could be read, unsafe to start up empty, restart to retry restore") } // Starting from here we won't be able to recover if we get stopped by a cancelled diff --git a/go/vt/mysqlctl/xtrabackupengine.go b/go/vt/mysqlctl/xtrabackupengine.go index 2399c1ffd40..15d0830945e 100644 --- a/go/vt/mysqlctl/xtrabackupengine.go +++ b/go/vt/mysqlctl/xtrabackupengine.go @@ -27,6 +27,7 @@ import ( "os/exec" "path" "strings" + "time" "github.com/klauspost/pgzip" "vitess.io/vitess/go/mysql" @@ -70,15 +71,23 @@ const ( type xtraBackupManifest struct { // Name of the backup file FileName string + // BackupMethod, set to xtrabackup BackupMethod string + // Position at which the backup was taken Position mysql.Position + // SkipCompress can be set if the backup files were not run // through gzip. SkipCompress bool + // Params are the parameters that backup was run with Params string `json:"ExtraCommandLineParams"` + + // BackupTime is when the backup was taken in UTC time + // format: "2006-01-02.150405" + BackupTime time.Time } func (be *XtrabackupEngine) backupFileName() string { @@ -95,7 +104,7 @@ func (be *XtrabackupEngine) backupFileName() string { // ExecuteBackup returns a boolean that indicates if the backup is usable, // and an overall error. -func (be *XtrabackupEngine) ExecuteBackup(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, bh backupstorage.BackupHandle, backupConcurrency int, hookExtraEnv map[string]string) (bool, error) { +func (be *XtrabackupEngine) ExecuteBackup(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, bh backupstorage.BackupHandle, backupConcurrency int, hookExtraEnv map[string]string, backupTime time.Time) (bool, error) { if *xtrabackupUser == "" { return false, vterrors.New(vtrpc.Code_INVALID_ARGUMENT, "xtrabackupUser must be specified.") @@ -217,6 +226,7 @@ func (be *XtrabackupEngine) ExecuteBackup(ctx context.Context, cnf *Mycnf, mysql Position: replicationPosition, SkipCompress: !*backupStorageCompress, Params: *xtrabackupBackupFlags, + BackupTime: backupTime, } data, err := json.MarshalIndent(bm, "", " ") @@ -239,7 +249,8 @@ func (be *XtrabackupEngine) ExecuteRestore( dir string, bhs []backupstorage.BackupHandle, restoreConcurrency int, - hookExtraEnv map[string]string) (mysql.Position, error) { + hookExtraEnv map[string]string, + snapshotTime time.Time) (mysql.Position, error) { var bh backupstorage.BackupHandle var bm xtraBackupManifest @@ -261,8 +272,10 @@ func (be *XtrabackupEngine) ExecuteRestore( continue } - logger.Infof("Restore: found backup %v %v to restore with %v file", bh.Directory(), bh.Name(), bm.FileName) - break + if bm.BackupTime.Before(snapshotTime) { + logger.Infof("Restore: found backup %v %v to restore with %v file", bh.Directory(), bh.Name(), bm.FileName) + break + } } if index < 0 { // There is at least one attempted backup, but none could be read. diff --git a/go/vt/proto/logutil/logutil.pb.go b/go/vt/proto/logutil/logutil.pb.go index f1202173262..83c3a336277 100644 --- a/go/vt/proto/logutil/logutil.pb.go +++ b/go/vt/proto/logutil/logutil.pb.go @@ -6,6 +6,7 @@ package logutil // import "vitess.io/vitess/go/vt/proto/logutil" import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" +import vttime "vitess.io/vitess/go/vt/proto/vttime" // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -49,74 +50,26 @@ func (x Level) String() string { return proto.EnumName(Level_name, int32(x)) } func (Level) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_logutil_1922c06158165cc5, []int{0} -} - -// Time represents a time stamp in nanoseconds. In go, use logutil library -// to convert times. -type Time struct { - Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"` - Nanoseconds int32 `protobuf:"varint,2,opt,name=nanoseconds,proto3" json:"nanoseconds,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Time) Reset() { *m = Time{} } -func (m *Time) String() string { return proto.CompactTextString(m) } -func (*Time) ProtoMessage() {} -func (*Time) Descriptor() ([]byte, []int) { - return fileDescriptor_logutil_1922c06158165cc5, []int{0} -} -func (m *Time) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Time.Unmarshal(m, b) -} -func (m *Time) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Time.Marshal(b, m, deterministic) -} -func (dst *Time) XXX_Merge(src proto.Message) { - xxx_messageInfo_Time.Merge(dst, src) -} -func (m *Time) XXX_Size() int { - return xxx_messageInfo_Time.Size(m) -} -func (m *Time) XXX_DiscardUnknown() { - xxx_messageInfo_Time.DiscardUnknown(m) -} - -var xxx_messageInfo_Time proto.InternalMessageInfo - -func (m *Time) GetSeconds() int64 { - if m != nil { - return m.Seconds - } - return 0 -} - -func (m *Time) GetNanoseconds() int32 { - if m != nil { - return m.Nanoseconds - } - return 0 + return fileDescriptor_logutil_5767df7f441a0422, []int{0} } // Event is a single logging event type Event struct { - Time *Time `protobuf:"bytes,1,opt,name=time,proto3" json:"time,omitempty"` - Level Level `protobuf:"varint,2,opt,name=level,proto3,enum=logutil.Level" json:"level,omitempty"` - File string `protobuf:"bytes,3,opt,name=file,proto3" json:"file,omitempty"` - Line int64 `protobuf:"varint,4,opt,name=line,proto3" json:"line,omitempty"` - Value string `protobuf:"bytes,5,opt,name=value,proto3" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Time *vttime.Time `protobuf:"bytes,1,opt,name=time,proto3" json:"time,omitempty"` + Level Level `protobuf:"varint,2,opt,name=level,proto3,enum=logutil.Level" json:"level,omitempty"` + File string `protobuf:"bytes,3,opt,name=file,proto3" json:"file,omitempty"` + Line int64 `protobuf:"varint,4,opt,name=line,proto3" json:"line,omitempty"` + Value string `protobuf:"bytes,5,opt,name=value,proto3" json:"value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Event) Reset() { *m = Event{} } func (m *Event) String() string { return proto.CompactTextString(m) } func (*Event) ProtoMessage() {} func (*Event) Descriptor() ([]byte, []int) { - return fileDescriptor_logutil_1922c06158165cc5, []int{1} + return fileDescriptor_logutil_5767df7f441a0422, []int{0} } func (m *Event) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Event.Unmarshal(m, b) @@ -136,7 +89,7 @@ func (m *Event) XXX_DiscardUnknown() { var xxx_messageInfo_Event proto.InternalMessageInfo -func (m *Event) GetTime() *Time { +func (m *Event) GetTime() *vttime.Time { if m != nil { return m.Time } @@ -172,30 +125,27 @@ func (m *Event) GetValue() string { } func init() { - proto.RegisterType((*Time)(nil), "logutil.Time") proto.RegisterType((*Event)(nil), "logutil.Event") proto.RegisterEnum("logutil.Level", Level_name, Level_value) } -func init() { proto.RegisterFile("logutil.proto", fileDescriptor_logutil_1922c06158165cc5) } - -var fileDescriptor_logutil_1922c06158165cc5 = []byte{ - // 260 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0x90, 0x41, 0x4b, 0xfb, 0x40, - 0x10, 0xc5, 0xff, 0xdb, 0x64, 0xff, 0xb1, 0x13, 0x5a, 0xc2, 0xe0, 0x21, 0xc7, 0x58, 0x8a, 0x04, - 0x0f, 0x09, 0x54, 0xf0, 0x6e, 0x25, 0x4a, 0xa1, 0x24, 0xb0, 0x0a, 0x82, 0xb7, 0xaa, 0x63, 0x59, - 0xd8, 0x66, 0xc5, 0x6c, 0xf7, 0x63, 0xf8, 0x99, 0x25, 0x93, 0x46, 0xbc, 0xbd, 0xf7, 0x7b, 0xc3, - 0x9b, 0x61, 0x60, 0x66, 0xec, 0xfe, 0xe8, 0xb4, 0x29, 0x3e, 0xbf, 0xac, 0xb3, 0x18, 0x9d, 0xec, - 0x62, 0x0d, 0xe1, 0x93, 0x3e, 0x10, 0xa6, 0x10, 0x75, 0xf4, 0x66, 0xdb, 0xf7, 0x2e, 0x15, 0x99, - 0xc8, 0x03, 0x35, 0x5a, 0xcc, 0x20, 0x6e, 0x77, 0xad, 0x1d, 0xd3, 0x49, 0x26, 0x72, 0xa9, 0xfe, - 0xa2, 0xc5, 0xb7, 0x00, 0x59, 0x79, 0x6a, 0x1d, 0x5e, 0x40, 0xe8, 0xf4, 0x81, 0xb8, 0x22, 0x5e, - 0xcd, 0x8a, 0x71, 0x69, 0xbf, 0x42, 0x71, 0x84, 0x4b, 0x90, 0x86, 0x3c, 0x19, 0x2e, 0x9a, 0xaf, - 0xe6, 0xbf, 0x33, 0xdb, 0x9e, 0xaa, 0x21, 0x44, 0x84, 0xf0, 0x43, 0x1b, 0x4a, 0x83, 0x4c, 0xe4, - 0x53, 0xc5, 0xba, 0x67, 0x46, 0xb7, 0x94, 0x86, 0x7c, 0x1f, 0x6b, 0x3c, 0x07, 0xe9, 0x77, 0xe6, - 0x48, 0xa9, 0xe4, 0xc1, 0xc1, 0x5c, 0xdd, 0x80, 0xe4, 0x36, 0x3c, 0x83, 0x70, 0x53, 0xdf, 0x37, - 0xc9, 0x3f, 0x8c, 0x21, 0x7a, 0xbe, 0x55, 0xf5, 0xa6, 0x7e, 0x48, 0x04, 0x4e, 0x41, 0x56, 0x4a, - 0x35, 0x2a, 0x99, 0xf4, 0xfc, 0xae, 0xa9, 0x1f, 0x9b, 0x6d, 0x95, 0x04, 0xeb, 0xcb, 0x97, 0xa5, - 0xd7, 0x8e, 0xba, 0xae, 0xd0, 0xb6, 0x1c, 0x54, 0xb9, 0xb7, 0xa5, 0x77, 0x25, 0x7f, 0xad, 0x3c, - 0x9d, 0xfa, 0xfa, 0x9f, 0xed, 0xf5, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x27, 0x02, 0xa1, 0x99, - 0x55, 0x01, 0x00, 0x00, +func init() { proto.RegisterFile("logutil.proto", fileDescriptor_logutil_5767df7f441a0422) } + +var fileDescriptor_logutil_5767df7f441a0422 = []byte{ + // 235 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x34, 0x8f, 0x41, 0x4b, 0x03, 0x31, + 0x10, 0x85, 0x4d, 0x77, 0x63, 0xed, 0x54, 0xcb, 0x32, 0x78, 0x08, 0x9e, 0x82, 0x14, 0x59, 0x3c, + 0x6c, 0xa0, 0x82, 0x77, 0x95, 0x55, 0x0a, 0x65, 0x17, 0xa2, 0x20, 0x78, 0x53, 0x18, 0x4b, 0x20, + 0x6d, 0xc4, 0xa6, 0xf9, 0x17, 0xfe, 0x67, 0xd9, 0x49, 0x7b, 0x7b, 0xef, 0x7b, 0x8f, 0xc7, 0x0c, + 0x5c, 0xf8, 0xb0, 0xde, 0x47, 0xe7, 0x9b, 0x9f, 0xdf, 0x10, 0x03, 0x8e, 0x0f, 0xf6, 0x0a, 0xa2, + 0xdb, 0x50, 0x86, 0xd7, 0x7f, 0x02, 0x64, 0x9b, 0x68, 0x1b, 0x51, 0x43, 0x39, 0x70, 0x25, 0xb4, + 0xa8, 0xa7, 0x8b, 0xf3, 0x26, 0x45, 0xae, 0xbd, 0xb9, 0x0d, 0x59, 0x4e, 0x70, 0x0e, 0xd2, 0x53, + 0x22, 0xaf, 0x46, 0x5a, 0xd4, 0xb3, 0xc5, 0xac, 0x39, 0xee, 0xaf, 0x06, 0x6a, 0x73, 0x88, 0x08, + 0xe5, 0xb7, 0xf3, 0xa4, 0x0a, 0x2d, 0xea, 0x89, 0x65, 0x3d, 0x30, 0xef, 0xb6, 0xa4, 0x4a, 0x2d, + 0xea, 0xc2, 0xb2, 0xc6, 0x4b, 0x90, 0xe9, 0xd3, 0xef, 0x49, 0x49, 0x2e, 0x66, 0x73, 0x7b, 0x0f, + 0x92, 0xd7, 0xf0, 0x0c, 0xca, 0x65, 0xf7, 0xdc, 0x57, 0x27, 0x38, 0x85, 0xf1, 0xfb, 0x83, 0xed, + 0x96, 0xdd, 0x4b, 0x25, 0x70, 0x02, 0xb2, 0xb5, 0xb6, 0xb7, 0xd5, 0x68, 0xe0, 0x4f, 0x7d, 0xf7, + 0xda, 0xaf, 0xda, 0xaa, 0x78, 0xbc, 0xf9, 0x98, 0x27, 0x17, 0x69, 0xb7, 0x6b, 0x5c, 0x30, 0x59, + 0x99, 0x75, 0x30, 0x29, 0x1a, 0xfe, 0xd3, 0x1c, 0x4e, 0xfd, 0x3a, 0x65, 0x7b, 0xf7, 0x1f, 0x00, + 0x00, 0xff, 0xff, 0xdd, 0xfa, 0x9b, 0x9a, 0x1c, 0x01, 0x00, 0x00, } diff --git a/go/vt/proto/topodata/topodata.pb.go b/go/vt/proto/topodata/topodata.pb.go index 9e22bf51309..82fc225f6a6 100644 --- a/go/vt/proto/topodata/topodata.pb.go +++ b/go/vt/proto/topodata/topodata.pb.go @@ -6,6 +6,7 @@ package topodata // import "vitess.io/vitess/go/vt/proto/topodata" import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" +import vttime "vitess.io/vitess/go/vt/proto/vttime" // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -18,6 +19,32 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +// KeyspaceType describes the type of the keyspace +type KeyspaceType int32 + +const ( + // NORMAL is the default value + KeyspaceType_NORMAL KeyspaceType = 0 + // SNAPSHOT is when we are creating a snapshot keyspace + KeyspaceType_SNAPSHOT KeyspaceType = 1 +) + +var KeyspaceType_name = map[int32]string{ + 0: "NORMAL", + 1: "SNAPSHOT", +} +var KeyspaceType_value = map[string]int32{ + "NORMAL": 0, + "SNAPSHOT": 1, +} + +func (x KeyspaceType) String() string { + return proto.EnumName(KeyspaceType_name, int32(x)) +} +func (KeyspaceType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{0} +} + // KeyspaceIdType describes the type of the sharding key for a // range-based sharded keyspace. type KeyspaceIdType int32 @@ -48,7 +75,7 @@ func (x KeyspaceIdType) String() string { return proto.EnumName(KeyspaceIdType_name, int32(x)) } func (KeyspaceIdType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_topodata_5ff7209b363fe950, []int{0} + return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{1} } // TabletType represents the type of a given tablet. @@ -117,7 +144,7 @@ func (x TabletType) String() string { return proto.EnumName(TabletType_name, int32(x)) } func (TabletType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_topodata_5ff7209b363fe950, []int{1} + return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{2} } // KeyRange describes a range of sharding keys, when range-based @@ -134,7 +161,7 @@ func (m *KeyRange) Reset() { *m = KeyRange{} } func (m *KeyRange) String() string { return proto.CompactTextString(m) } func (*KeyRange) ProtoMessage() {} func (*KeyRange) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5ff7209b363fe950, []int{0} + return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{0} } func (m *KeyRange) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KeyRange.Unmarshal(m, b) @@ -184,7 +211,7 @@ func (m *TabletAlias) Reset() { *m = TabletAlias{} } func (m *TabletAlias) String() string { return proto.CompactTextString(m) } func (*TabletAlias) ProtoMessage() {} func (*TabletAlias) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5ff7209b363fe950, []int{1} + return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{1} } func (m *TabletAlias) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TabletAlias.Unmarshal(m, b) @@ -260,7 +287,7 @@ func (m *Tablet) Reset() { *m = Tablet{} } func (m *Tablet) String() string { return proto.CompactTextString(m) } func (*Tablet) ProtoMessage() {} func (*Tablet) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5ff7209b363fe950, []int{2} + return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{2} } func (m *Tablet) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Tablet.Unmarshal(m, b) @@ -395,7 +422,7 @@ func (m *Shard) Reset() { *m = Shard{} } func (m *Shard) String() string { return proto.CompactTextString(m) } func (*Shard) ProtoMessage() {} func (*Shard) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5ff7209b363fe950, []int{3} + return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{3} } func (m *Shard) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Shard.Unmarshal(m, b) @@ -470,7 +497,7 @@ func (m *Shard_ServedType) Reset() { *m = Shard_ServedType{} } func (m *Shard_ServedType) String() string { return proto.CompactTextString(m) } func (*Shard_ServedType) ProtoMessage() {} func (*Shard_ServedType) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5ff7209b363fe950, []int{3, 0} + return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{3, 0} } func (m *Shard_ServedType) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Shard_ServedType.Unmarshal(m, b) @@ -527,7 +554,7 @@ func (m *Shard_SourceShard) Reset() { *m = Shard_SourceShard{} } func (m *Shard_SourceShard) String() string { return proto.CompactTextString(m) } func (*Shard_SourceShard) ProtoMessage() {} func (*Shard_SourceShard) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5ff7209b363fe950, []int{3, 1} + return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{3, 1} } func (m *Shard_SourceShard) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Shard_SourceShard.Unmarshal(m, b) @@ -600,7 +627,7 @@ func (m *Shard_TabletControl) Reset() { *m = Shard_TabletControl{} } func (m *Shard_TabletControl) String() string { return proto.CompactTextString(m) } func (*Shard_TabletControl) ProtoMessage() {} func (*Shard_TabletControl) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5ff7209b363fe950, []int{3, 2} + return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{3, 2} } func (m *Shard_TabletControl) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Shard_TabletControl.Unmarshal(m, b) @@ -658,17 +685,26 @@ type Keyspace struct { ShardingColumnType KeyspaceIdType `protobuf:"varint,2,opt,name=sharding_column_type,json=shardingColumnType,proto3,enum=topodata.KeyspaceIdType" json:"sharding_column_type,omitempty"` // ServedFrom will redirect the appropriate traffic to // another keyspace. - ServedFroms []*Keyspace_ServedFrom `protobuf:"bytes,4,rep,name=served_froms,json=servedFroms,proto3" json:"served_froms,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + ServedFroms []*Keyspace_ServedFrom `protobuf:"bytes,4,rep,name=served_froms,json=servedFroms,proto3" json:"served_froms,omitempty"` + // keyspace_type will determine how this keyspace is treated by + // vtgate / vschema. Normal keyspaces are routable by + // any query. Snapshot keyspaces are only accessible + // by explicit addresssing or by calling "use keyspace" first + KeyspaceType KeyspaceType `protobuf:"varint,5,opt,name=keyspace_type,json=keyspaceType,proto3,enum=topodata.KeyspaceType" json:"keyspace_type,omitempty"` + // snapshot_time (in UTC) is a property of snapshot + // keyspaces which tells us what point in time + // the snapshot is of + SnapshotTime *vttime.Time `protobuf:"bytes,6,opt,name=snapshot_time,json=snapshotTime,proto3" json:"snapshot_time,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Keyspace) Reset() { *m = Keyspace{} } func (m *Keyspace) String() string { return proto.CompactTextString(m) } func (*Keyspace) ProtoMessage() {} func (*Keyspace) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5ff7209b363fe950, []int{4} + return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{4} } func (m *Keyspace) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Keyspace.Unmarshal(m, b) @@ -709,6 +745,20 @@ func (m *Keyspace) GetServedFroms() []*Keyspace_ServedFrom { return nil } +func (m *Keyspace) GetKeyspaceType() KeyspaceType { + if m != nil { + return m.KeyspaceType + } + return KeyspaceType_NORMAL +} + +func (m *Keyspace) GetSnapshotTime() *vttime.Time { + if m != nil { + return m.SnapshotTime + } + return nil +} + // ServedFrom indicates a relationship between a TabletType and the // keyspace name that's serving it. type Keyspace_ServedFrom struct { @@ -727,7 +777,7 @@ func (m *Keyspace_ServedFrom) Reset() { *m = Keyspace_ServedFrom{} } func (m *Keyspace_ServedFrom) String() string { return proto.CompactTextString(m) } func (*Keyspace_ServedFrom) ProtoMessage() {} func (*Keyspace_ServedFrom) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5ff7209b363fe950, []int{4, 0} + return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{4, 0} } func (m *Keyspace_ServedFrom) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Keyspace_ServedFrom.Unmarshal(m, b) @@ -783,7 +833,7 @@ func (m *ShardReplication) Reset() { *m = ShardReplication{} } func (m *ShardReplication) String() string { return proto.CompactTextString(m) } func (*ShardReplication) ProtoMessage() {} func (*ShardReplication) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5ff7209b363fe950, []int{5} + return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{5} } func (m *ShardReplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardReplication.Unmarshal(m, b) @@ -822,7 +872,7 @@ func (m *ShardReplication_Node) Reset() { *m = ShardReplication_Node{} } func (m *ShardReplication_Node) String() string { return proto.CompactTextString(m) } func (*ShardReplication_Node) ProtoMessage() {} func (*ShardReplication_Node) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5ff7209b363fe950, []int{5, 0} + return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{5, 0} } func (m *ShardReplication_Node) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardReplication_Node.Unmarshal(m, b) @@ -863,7 +913,7 @@ func (m *ShardReference) Reset() { *m = ShardReference{} } func (m *ShardReference) String() string { return proto.CompactTextString(m) } func (*ShardReference) ProtoMessage() {} func (*ShardReference) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5ff7209b363fe950, []int{6} + return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{6} } func (m *ShardReference) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardReference.Unmarshal(m, b) @@ -913,7 +963,7 @@ func (m *ShardTabletControl) Reset() { *m = ShardTabletControl{} } func (m *ShardTabletControl) String() string { return proto.CompactTextString(m) } func (*ShardTabletControl) ProtoMessage() {} func (*ShardTabletControl) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5ff7209b363fe950, []int{7} + return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{7} } func (m *ShardTabletControl) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardTabletControl.Unmarshal(m, b) @@ -971,7 +1021,7 @@ func (m *SrvKeyspace) Reset() { *m = SrvKeyspace{} } func (m *SrvKeyspace) String() string { return proto.CompactTextString(m) } func (*SrvKeyspace) ProtoMessage() {} func (*SrvKeyspace) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5ff7209b363fe950, []int{8} + return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{8} } func (m *SrvKeyspace) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SrvKeyspace.Unmarshal(m, b) @@ -1035,7 +1085,7 @@ func (m *SrvKeyspace_KeyspacePartition) Reset() { *m = SrvKeyspace_Keysp func (m *SrvKeyspace_KeyspacePartition) String() string { return proto.CompactTextString(m) } func (*SrvKeyspace_KeyspacePartition) ProtoMessage() {} func (*SrvKeyspace_KeyspacePartition) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5ff7209b363fe950, []int{8, 0} + return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{8, 0} } func (m *SrvKeyspace_KeyspacePartition) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SrvKeyspace_KeyspacePartition.Unmarshal(m, b) @@ -1092,7 +1142,7 @@ func (m *SrvKeyspace_ServedFrom) Reset() { *m = SrvKeyspace_ServedFrom{} func (m *SrvKeyspace_ServedFrom) String() string { return proto.CompactTextString(m) } func (*SrvKeyspace_ServedFrom) ProtoMessage() {} func (*SrvKeyspace_ServedFrom) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5ff7209b363fe950, []int{8, 1} + return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{8, 1} } func (m *SrvKeyspace_ServedFrom) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SrvKeyspace_ServedFrom.Unmarshal(m, b) @@ -1147,7 +1197,7 @@ func (m *CellInfo) Reset() { *m = CellInfo{} } func (m *CellInfo) String() string { return proto.CompactTextString(m) } func (*CellInfo) ProtoMessage() {} func (*CellInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5ff7209b363fe950, []int{9} + return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{9} } func (m *CellInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CellInfo.Unmarshal(m, b) @@ -1194,7 +1244,7 @@ func (m *CellsAlias) Reset() { *m = CellsAlias{} } func (m *CellsAlias) String() string { return proto.CompactTextString(m) } func (*CellsAlias) ProtoMessage() {} func (*CellsAlias) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5ff7209b363fe950, []int{10} + return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{10} } func (m *CellsAlias) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CellsAlias.Unmarshal(m, b) @@ -1242,89 +1292,95 @@ func init() { proto.RegisterType((*SrvKeyspace_ServedFrom)(nil), "topodata.SrvKeyspace.ServedFrom") proto.RegisterType((*CellInfo)(nil), "topodata.CellInfo") proto.RegisterType((*CellsAlias)(nil), "topodata.CellsAlias") + proto.RegisterEnum("topodata.KeyspaceType", KeyspaceType_name, KeyspaceType_value) proto.RegisterEnum("topodata.KeyspaceIdType", KeyspaceIdType_name, KeyspaceIdType_value) proto.RegisterEnum("topodata.TabletType", TabletType_name, TabletType_value) } -func init() { proto.RegisterFile("topodata.proto", fileDescriptor_topodata_5ff7209b363fe950) } - -var fileDescriptor_topodata_5ff7209b363fe950 = []byte{ - // 1218 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xe1, 0x6e, 0x1b, 0x45, - 0x10, 0xe6, 0xec, 0xb3, 0x63, 0x8f, 0x1d, 0xe7, 0xba, 0xa4, 0xd5, 0xe9, 0xa0, 0x22, 0xb2, 0x54, - 0x11, 0x15, 0xe1, 0xa0, 0xb4, 0x85, 0xa8, 0x12, 0x52, 0x5d, 0xc7, 0xa5, 0x69, 0x1a, 0xc7, 0x5a, - 0x3b, 0x82, 0xf2, 0xe7, 0x74, 0xf1, 0x6d, 0xd2, 0x53, 0xce, 0xb7, 0xee, 0xee, 0x26, 0x92, 0x79, - 0x05, 0x7e, 0x00, 0x7f, 0x79, 0x03, 0x1e, 0x81, 0x27, 0xe0, 0x39, 0xe0, 0x49, 0xd0, 0xce, 0xde, - 0xd9, 0x67, 0xbb, 0x2d, 0x29, 0xca, 0xbf, 0x99, 0xdd, 0x99, 0xb9, 0x99, 0x6f, 0xe6, 0x9b, 0xb5, - 0xa1, 0xa1, 0xf8, 0x84, 0x87, 0x81, 0x0a, 0x5a, 0x13, 0xc1, 0x15, 0x27, 0x95, 0x4c, 0x6f, 0xee, - 0x42, 0xe5, 0x90, 0x4d, 0x69, 0x90, 0x9c, 0x33, 0xb2, 0x09, 0x25, 0xa9, 0x02, 0xa1, 0x5c, 0x6b, - 0xcb, 0xda, 0xae, 0x53, 0xa3, 0x10, 0x07, 0x8a, 0x2c, 0x09, 0xdd, 0x02, 0x9e, 0x69, 0xb1, 0xf9, - 0x00, 0x6a, 0xc3, 0xe0, 0x34, 0x66, 0xaa, 0x1d, 0x47, 0x81, 0x24, 0x04, 0xec, 0x11, 0x8b, 0x63, - 0xf4, 0xaa, 0x52, 0x94, 0xb5, 0xd3, 0x65, 0x64, 0x9c, 0xd6, 0xa9, 0x16, 0x9b, 0x7f, 0xda, 0x50, - 0x36, 0x5e, 0xe4, 0x0b, 0x28, 0x05, 0xda, 0x13, 0x3d, 0x6a, 0xbb, 0xb7, 0x5b, 0xb3, 0xec, 0x72, - 0x61, 0xa9, 0xb1, 0x21, 0x1e, 0x54, 0x5e, 0x73, 0xa9, 0x92, 0x60, 0xcc, 0x30, 0x5c, 0x95, 0xce, - 0x74, 0xb2, 0x07, 0x95, 0x09, 0x17, 0xca, 0x1f, 0x07, 0x13, 0xd7, 0xde, 0x2a, 0x6e, 0xd7, 0x76, - 0xef, 0x2e, 0xc7, 0x6a, 0xf5, 0xb9, 0x50, 0x47, 0xc1, 0xa4, 0x9b, 0x28, 0x31, 0xa5, 0x6b, 0x13, - 0xa3, 0xe9, 0xa8, 0x17, 0x6c, 0x2a, 0x27, 0xc1, 0x88, 0xb9, 0x25, 0x13, 0x35, 0xd3, 0x11, 0x86, - 0xd7, 0x81, 0x08, 0xdd, 0x32, 0x5e, 0x18, 0x85, 0xec, 0x40, 0xf5, 0x82, 0x4d, 0x7d, 0xa1, 0x91, - 0x72, 0xd7, 0x30, 0x71, 0x32, 0xff, 0x58, 0x86, 0x21, 0x86, 0x31, 0x68, 0x6e, 0x83, 0xad, 0xa6, - 0x13, 0xe6, 0x56, 0xb6, 0xac, 0xed, 0xc6, 0xee, 0xe6, 0x72, 0x62, 0xc3, 0xe9, 0x84, 0x51, 0xb4, - 0x20, 0xdb, 0xe0, 0x84, 0xa7, 0xbe, 0xae, 0xc8, 0xe7, 0x57, 0x4c, 0x88, 0x28, 0x64, 0x6e, 0x15, - 0xbf, 0xdd, 0x08, 0x4f, 0x7b, 0xc1, 0x98, 0x1d, 0xa7, 0xa7, 0xa4, 0x05, 0xb6, 0x0a, 0xce, 0xa5, - 0x0b, 0x58, 0xac, 0xb7, 0x52, 0xec, 0x30, 0x38, 0x97, 0xa6, 0x52, 0xb4, 0x23, 0xf7, 0xa0, 0x31, - 0x9e, 0xca, 0x37, 0xb1, 0x3f, 0x83, 0xb0, 0x8e, 0x71, 0xd7, 0xf1, 0xf4, 0x79, 0x86, 0xe3, 0x5d, - 0x00, 0x63, 0xa6, 0xe1, 0x71, 0xd7, 0xb7, 0xac, 0xed, 0x12, 0xad, 0xe2, 0x89, 0x46, 0xcf, 0x7b, - 0x0c, 0xf5, 0x3c, 0x8a, 0xba, 0xb9, 0x17, 0x6c, 0x9a, 0xf6, 0x5b, 0x8b, 0x1a, 0xb2, 0xab, 0x20, - 0xbe, 0x34, 0x1d, 0x2a, 0x51, 0xa3, 0x3c, 0x2e, 0xec, 0x59, 0xde, 0x37, 0x50, 0x9d, 0x25, 0xf5, - 0x5f, 0x8e, 0xd5, 0x9c, 0xe3, 0x0b, 0xbb, 0x52, 0x74, 0xec, 0x17, 0x76, 0xa5, 0xe6, 0xd4, 0x9b, - 0xbf, 0x95, 0xa1, 0x34, 0xc0, 0x2e, 0xec, 0x41, 0x7d, 0x1c, 0x48, 0xc5, 0x84, 0x7f, 0x8d, 0x09, - 0xaa, 0x19, 0x53, 0x33, 0xa5, 0x0b, 0xfd, 0x2b, 0x5c, 0xa3, 0x7f, 0xdf, 0x42, 0x5d, 0x32, 0x71, - 0xc5, 0x42, 0x5f, 0x37, 0x49, 0xba, 0xc5, 0x65, 0xcc, 0x31, 0xa3, 0xd6, 0x00, 0x6d, 0xb0, 0x9b, - 0x35, 0x39, 0x93, 0x25, 0x79, 0x02, 0xeb, 0x92, 0x5f, 0x8a, 0x11, 0xf3, 0x71, 0x7e, 0x64, 0x3a, - 0xa0, 0x9f, 0xac, 0xf8, 0xa3, 0x11, 0xca, 0xb4, 0x2e, 0xe7, 0x8a, 0x24, 0xcf, 0x60, 0x43, 0x61, - 0x35, 0xfe, 0x88, 0x27, 0x4a, 0xf0, 0x58, 0xba, 0xe5, 0xe5, 0x21, 0x37, 0x31, 0x4c, 0xd1, 0x1d, - 0x63, 0x45, 0x1b, 0x2a, 0xaf, 0x4a, 0x72, 0x1f, 0x6e, 0x45, 0xd2, 0x4f, 0x61, 0xd3, 0x29, 0x46, - 0xc9, 0x39, 0x4e, 0x70, 0x85, 0x6e, 0x44, 0xf2, 0x08, 0xcf, 0x07, 0xe6, 0xd8, 0x7b, 0x05, 0x30, - 0x2f, 0x88, 0x3c, 0x82, 0x5a, 0x9a, 0x01, 0x4e, 0xb2, 0xf5, 0x9e, 0x49, 0x06, 0x35, 0x93, 0x75, - 0x53, 0xf5, 0x12, 0x90, 0x6e, 0x61, 0xab, 0xa8, 0x9b, 0x8a, 0x8a, 0xf7, 0xbb, 0x05, 0xb5, 0x5c, - 0xb1, 0xd9, 0x8a, 0xb0, 0x66, 0x2b, 0x62, 0x81, 0x94, 0x85, 0x77, 0x91, 0xb2, 0xf8, 0x4e, 0x52, - 0xda, 0xd7, 0x68, 0xea, 0x1d, 0x28, 0x63, 0xa2, 0xd2, 0x2d, 0x61, 0x6e, 0xa9, 0xe6, 0xfd, 0x61, - 0xc1, 0xfa, 0x02, 0x8a, 0x37, 0x5a, 0x3b, 0xf9, 0x12, 0xc8, 0x69, 0x1c, 0x8c, 0x2e, 0xe2, 0x48, - 0x2a, 0x3d, 0x50, 0x26, 0x05, 0x1b, 0x4d, 0x6e, 0xe5, 0x6e, 0x30, 0xa8, 0xd4, 0x59, 0x9e, 0x09, - 0xfe, 0x13, 0x4b, 0x70, 0x37, 0x55, 0x68, 0xaa, 0xcd, 0x38, 0x51, 0x72, 0xca, 0xcd, 0xbf, 0x0a, - 0xb8, 0xb9, 0x0d, 0x3a, 0x5f, 0xc1, 0x26, 0x02, 0x12, 0x25, 0xe7, 0xfe, 0x88, 0xc7, 0x97, 0xe3, - 0x04, 0xd7, 0x49, 0xca, 0x34, 0x92, 0xdd, 0x75, 0xf0, 0x4a, 0x6f, 0x14, 0xf2, 0x62, 0xd5, 0x03, - 0xeb, 0x2c, 0x60, 0x9d, 0xee, 0x02, 0x88, 0xf8, 0x8d, 0x03, 0x33, 0xe3, 0x4b, 0xb1, 0xb0, 0xe6, - 0x27, 0x33, 0xa6, 0x9c, 0x09, 0x3e, 0x96, 0xab, 0xab, 0x38, 0x8b, 0x91, 0x92, 0xe5, 0x99, 0xe0, - 0xe3, 0x8c, 0x2c, 0x5a, 0x96, 0xde, 0x65, 0x36, 0x76, 0x5a, 0xbd, 0x59, 0xe8, 0xf3, 0x43, 0x55, - 0x5c, 0x1c, 0x2a, 0x83, 0x67, 0xf3, 0x67, 0x0b, 0x1c, 0xc3, 0x3f, 0x36, 0x89, 0xa3, 0x51, 0xa0, - 0x22, 0x9e, 0x90, 0x47, 0x50, 0x4a, 0x78, 0xc8, 0xf4, 0x86, 0xd1, 0xc5, 0x7c, 0xb6, 0x44, 0xb9, - 0x9c, 0x69, 0xab, 0xc7, 0x43, 0x46, 0x8d, 0xb5, 0xf7, 0x04, 0x6c, 0xad, 0xea, 0x3d, 0x95, 0x96, - 0x70, 0x9d, 0x3d, 0xa5, 0xe6, 0x4a, 0xf3, 0x04, 0x1a, 0xe9, 0x17, 0xce, 0x98, 0x60, 0xc9, 0x88, - 0xe9, 0xf7, 0x35, 0xd7, 0x4c, 0x94, 0x3f, 0x78, 0x9b, 0x35, 0x7f, 0xb1, 0x80, 0x60, 0xdc, 0xc5, - 0x29, 0xbf, 0x89, 0xd8, 0xe4, 0x21, 0xdc, 0x79, 0x73, 0xc9, 0xc4, 0xd4, 0x2c, 0x97, 0x11, 0xf3, - 0xc3, 0x48, 0xea, 0xaf, 0x18, 0xb2, 0x56, 0xe8, 0x26, 0xde, 0x0e, 0xcc, 0xe5, 0x7e, 0x7a, 0xd7, - 0xfc, 0xc7, 0x86, 0xda, 0x40, 0x5c, 0xcd, 0x66, 0xf8, 0x3b, 0x80, 0x49, 0x20, 0x54, 0xa4, 0x31, - 0xcd, 0x60, 0xff, 0x3c, 0x07, 0xfb, 0xdc, 0x74, 0x36, 0x4f, 0xfd, 0xcc, 0x9e, 0xe6, 0x5c, 0xdf, - 0x49, 0x86, 0xc2, 0x07, 0x93, 0xa1, 0xf8, 0x3f, 0xc8, 0xd0, 0x86, 0x5a, 0x8e, 0x0c, 0x29, 0x17, - 0xb6, 0xde, 0x5e, 0x47, 0x8e, 0x0e, 0x30, 0xa7, 0x83, 0xf7, 0xb7, 0x05, 0xb7, 0x56, 0x4a, 0xd4, - 0xac, 0xc8, 0xbd, 0x47, 0xef, 0x67, 0xc5, 0xfc, 0x21, 0x22, 0x1d, 0x70, 0x30, 0x4b, 0x5f, 0x64, - 0x03, 0x65, 0x08, 0x52, 0xcb, 0xd7, 0xb5, 0x38, 0x71, 0x74, 0x43, 0x2e, 0xe8, 0x92, 0xf4, 0xe1, - 0xb6, 0x09, 0xb2, 0xfc, 0x20, 0x99, 0x47, 0xf1, 0xd3, 0xa5, 0x48, 0x8b, 0xef, 0xd1, 0xc7, 0x72, - 0xe5, 0x4c, 0x7a, 0xfe, 0x4d, 0x30, 0xfe, 0x3d, 0x0f, 0x46, 0xba, 0x25, 0x0f, 0xa1, 0xd2, 0x61, - 0x71, 0x7c, 0x90, 0x9c, 0x71, 0xfd, 0x63, 0x08, 0x71, 0x11, 0x7e, 0x10, 0x86, 0x82, 0x49, 0x99, - 0x4e, 0xfd, 0xba, 0x39, 0x6d, 0x9b, 0x43, 0x4d, 0x09, 0xc1, 0xb9, 0x4a, 0x03, 0xa2, 0x9c, 0x2e, - 0x8a, 0x26, 0x80, 0x0e, 0x26, 0xcd, 0x0f, 0x8a, 0xb7, 0xae, 0x9b, 0xfb, 0xbb, 0xd0, 0x58, 0x1c, - 0x12, 0x52, 0x85, 0xd2, 0x49, 0x6f, 0xd0, 0x1d, 0x3a, 0x1f, 0x11, 0x80, 0xf2, 0xc9, 0x41, 0x6f, - 0xf8, 0xf5, 0x43, 0xc7, 0xd2, 0xc7, 0x4f, 0x5f, 0x0d, 0xbb, 0x03, 0xa7, 0x70, 0xff, 0x57, 0x0b, - 0x60, 0x5e, 0x21, 0xa9, 0xc1, 0xda, 0x49, 0xef, 0xb0, 0x77, 0xfc, 0x7d, 0xcf, 0xb8, 0x1c, 0xb5, - 0x07, 0xc3, 0x2e, 0x75, 0x2c, 0x7d, 0x41, 0xbb, 0xfd, 0x97, 0x07, 0x9d, 0xb6, 0x53, 0xd0, 0x17, - 0x74, 0xff, 0xb8, 0xf7, 0xf2, 0x95, 0x53, 0xc4, 0x58, 0xed, 0x61, 0xe7, 0xb9, 0x11, 0x07, 0xfd, - 0x36, 0xed, 0x3a, 0x36, 0x71, 0xa0, 0xde, 0xfd, 0xa1, 0xdf, 0xa5, 0x07, 0x47, 0xdd, 0xde, 0xb0, - 0xfd, 0xd2, 0x29, 0x69, 0x9f, 0xa7, 0xed, 0xce, 0xe1, 0x49, 0xdf, 0x29, 0x9b, 0x60, 0x83, 0xe1, - 0x31, 0xed, 0x3a, 0x6b, 0x5a, 0xd9, 0xa7, 0xed, 0x83, 0x5e, 0x77, 0xdf, 0xa9, 0x78, 0x05, 0xc7, - 0x7a, 0xba, 0x07, 0x1b, 0x11, 0x6f, 0x5d, 0x45, 0x8a, 0x49, 0x69, 0xfe, 0x33, 0xfc, 0x78, 0x2f, - 0xd5, 0x22, 0xbe, 0x63, 0xa4, 0x9d, 0x73, 0xbe, 0x73, 0xa5, 0x76, 0xf0, 0x76, 0x27, 0x6b, 0xd5, - 0x69, 0x19, 0xf5, 0x07, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x89, 0xf4, 0xf5, 0x28, 0x73, 0x0c, - 0x00, 0x00, +func init() { proto.RegisterFile("topodata.proto", fileDescriptor_topodata_bade7f4e9afd1b8c) } + +var fileDescriptor_topodata_bade7f4e9afd1b8c = []byte{ + // 1301 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xe1, 0x6e, 0xdb, 0x46, + 0x12, 0x0e, 0x25, 0x4a, 0xa6, 0x86, 0x94, 0xcc, 0xec, 0x39, 0x01, 0xc1, 0xbb, 0xe0, 0x0c, 0x01, + 0xc1, 0x09, 0x3e, 0x54, 0x6e, 0x9d, 0xa4, 0x35, 0x52, 0x14, 0x88, 0x22, 0x2b, 0x8d, 0x63, 0x5b, + 0x16, 0x56, 0x32, 0xda, 0xf4, 0x0f, 0x41, 0x4b, 0x6b, 0x87, 0x30, 0x45, 0x2a, 0xdc, 0xb5, 0x00, + 0xf5, 0x15, 0xfa, 0xa3, 0xed, 0xdf, 0xbe, 0x41, 0x9f, 0xa0, 0xe8, 0xe3, 0xb4, 0x4f, 0x52, 0xec, + 0x2c, 0x29, 0x51, 0x52, 0x92, 0x3a, 0x85, 0xff, 0xcd, 0xec, 0xce, 0x0c, 0x67, 0xbe, 0x99, 0x6f, + 0x56, 0x82, 0x9a, 0x88, 0x27, 0xf1, 0xc8, 0x17, 0x7e, 0x73, 0x92, 0xc4, 0x22, 0x26, 0x46, 0xa6, + 0xbb, 0x20, 0x82, 0x31, 0x53, 0xa7, 0xf5, 0x3d, 0x30, 0x8e, 0xd8, 0x8c, 0xfa, 0xd1, 0x25, 0x23, + 0x5b, 0x50, 0xe2, 0xc2, 0x4f, 0x84, 0xa3, 0x6d, 0x6b, 0x0d, 0x8b, 0x2a, 0x85, 0xd8, 0x50, 0x64, + 0xd1, 0xc8, 0x29, 0xe0, 0x99, 0x14, 0xeb, 0x8f, 0xc0, 0x1c, 0xf8, 0xe7, 0x21, 0x13, 0xad, 0x30, + 0xf0, 0x39, 0x21, 0xa0, 0x0f, 0x59, 0x18, 0xa2, 0x57, 0x85, 0xa2, 0x2c, 0x9d, 0xae, 0x03, 0xe5, + 0x54, 0xa5, 0x52, 0xac, 0xff, 0xae, 0x43, 0x59, 0x79, 0x91, 0xff, 0x43, 0xc9, 0x97, 0x9e, 0xe8, + 0x61, 0xee, 0xdd, 0x6b, 0xce, 0x33, 0xcd, 0x85, 0xa5, 0xca, 0x86, 0xb8, 0x60, 0xbc, 0x89, 0xb9, + 0x88, 0xfc, 0x31, 0xc3, 0x70, 0x15, 0x3a, 0xd7, 0xc9, 0x3e, 0x18, 0x93, 0x38, 0x11, 0xde, 0xd8, + 0x9f, 0x38, 0xfa, 0x76, 0xb1, 0x61, 0xee, 0x3d, 0x58, 0x8d, 0xd5, 0xec, 0xc5, 0x89, 0x38, 0xf1, + 0x27, 0x9d, 0x48, 0x24, 0x33, 0xba, 0x31, 0x51, 0x9a, 0x8c, 0x7a, 0xc5, 0x66, 0x7c, 0xe2, 0x0f, + 0x99, 0x53, 0x52, 0x51, 0x33, 0x1d, 0x61, 0x78, 0xe3, 0x27, 0x23, 0xa7, 0x8c, 0x17, 0x4a, 0x21, + 0xbb, 0x50, 0xb9, 0x62, 0x33, 0x2f, 0x91, 0x48, 0x39, 0x1b, 0x98, 0x38, 0x59, 0x7c, 0x2c, 0xc3, + 0x10, 0xc3, 0x28, 0x34, 0x1b, 0xa0, 0x8b, 0xd9, 0x84, 0x39, 0xc6, 0xb6, 0xd6, 0xa8, 0xed, 0x6d, + 0xad, 0x26, 0x36, 0x98, 0x4d, 0x18, 0x45, 0x0b, 0xd2, 0x00, 0x7b, 0x74, 0xee, 0xc9, 0x8a, 0xbc, + 0x78, 0xca, 0x92, 0x24, 0x18, 0x31, 0xa7, 0x82, 0xdf, 0xae, 0x8d, 0xce, 0xbb, 0xfe, 0x98, 0x9d, + 0xa6, 0xa7, 0xa4, 0x09, 0xba, 0xf0, 0x2f, 0xb9, 0x03, 0x58, 0xac, 0xbb, 0x56, 0xec, 0xc0, 0xbf, + 0xe4, 0xaa, 0x52, 0xb4, 0x23, 0x0f, 0xa1, 0x36, 0x9e, 0xf1, 0xb7, 0xa1, 0x37, 0x87, 0xd0, 0xc2, + 0xb8, 0x55, 0x3c, 0x7d, 0x99, 0xe1, 0xf8, 0x00, 0x40, 0x99, 0x49, 0x78, 0x9c, 0xea, 0xb6, 0xd6, + 0x28, 0xd1, 0x0a, 0x9e, 0x48, 0xf4, 0xdc, 0xa7, 0x60, 0xe5, 0x51, 0x94, 0xcd, 0xbd, 0x62, 0xb3, + 0xb4, 0xdf, 0x52, 0x94, 0x90, 0x4d, 0xfd, 0xf0, 0x5a, 0x75, 0xa8, 0x44, 0x95, 0xf2, 0xb4, 0xb0, + 0xaf, 0xb9, 0x5f, 0x40, 0x65, 0x9e, 0xd4, 0xdf, 0x39, 0x56, 0x72, 0x8e, 0xaf, 0x74, 0xa3, 0x68, + 0xeb, 0xaf, 0x74, 0xc3, 0xb4, 0xad, 0xfa, 0xcf, 0x65, 0x28, 0xf5, 0xb1, 0x0b, 0xfb, 0x60, 0x8d, + 0x7d, 0x2e, 0x58, 0xe2, 0xdd, 0x60, 0x82, 0x4c, 0x65, 0xaa, 0xa6, 0x74, 0xa9, 0x7f, 0x85, 0x1b, + 0xf4, 0xef, 0x2b, 0xb0, 0x38, 0x4b, 0xa6, 0x6c, 0xe4, 0xc9, 0x26, 0x71, 0xa7, 0xb8, 0x8a, 0x39, + 0x66, 0xd4, 0xec, 0xa3, 0x0d, 0x76, 0xd3, 0xe4, 0x73, 0x99, 0x93, 0x67, 0x50, 0xe5, 0xf1, 0x75, + 0x32, 0x64, 0x1e, 0xce, 0x0f, 0x4f, 0x07, 0xf4, 0xdf, 0x6b, 0xfe, 0x68, 0x84, 0x32, 0xb5, 0xf8, + 0x42, 0xe1, 0xe4, 0x05, 0x6c, 0x0a, 0xac, 0xc6, 0x1b, 0xc6, 0x91, 0x48, 0xe2, 0x90, 0x3b, 0xe5, + 0xd5, 0x21, 0x57, 0x31, 0x54, 0xd1, 0x6d, 0x65, 0x45, 0x6b, 0x22, 0xaf, 0x72, 0xb2, 0x03, 0x77, + 0x03, 0xee, 0xa5, 0xb0, 0xc9, 0x14, 0x83, 0xe8, 0x12, 0x27, 0xd8, 0xa0, 0x9b, 0x01, 0x3f, 0xc1, + 0xf3, 0xbe, 0x3a, 0x76, 0x5f, 0x03, 0x2c, 0x0a, 0x22, 0x4f, 0xc0, 0x4c, 0x33, 0xc0, 0x49, 0xd6, + 0x3e, 0x30, 0xc9, 0x20, 0xe6, 0xb2, 0x6c, 0xaa, 0x5c, 0x02, 0xdc, 0x29, 0x6c, 0x17, 0x65, 0x53, + 0x51, 0x71, 0x7f, 0xd1, 0xc0, 0xcc, 0x15, 0x9b, 0xad, 0x08, 0x6d, 0xbe, 0x22, 0x96, 0x48, 0x59, + 0x78, 0x1f, 0x29, 0x8b, 0xef, 0x25, 0xa5, 0x7e, 0x83, 0xa6, 0xde, 0x87, 0x32, 0x26, 0xca, 0x9d, + 0x12, 0xe6, 0x96, 0x6a, 0xee, 0xaf, 0x1a, 0x54, 0x97, 0x50, 0xbc, 0xd5, 0xda, 0xc9, 0x27, 0x40, + 0xce, 0x43, 0x7f, 0x78, 0x15, 0x06, 0x5c, 0xc8, 0x81, 0x52, 0x29, 0xe8, 0x68, 0x72, 0x37, 0x77, + 0x83, 0x41, 0xb9, 0xcc, 0xf2, 0x22, 0x89, 0xbf, 0x67, 0x11, 0xee, 0x26, 0x83, 0xa6, 0xda, 0x9c, + 0x13, 0x25, 0xbb, 0x5c, 0xff, 0xad, 0x88, 0x9b, 0x5b, 0xa1, 0xf3, 0x29, 0x6c, 0x21, 0x20, 0x41, + 0x74, 0xe9, 0x0d, 0xe3, 0xf0, 0x7a, 0x1c, 0xe1, 0x3a, 0x49, 0x99, 0x46, 0xb2, 0xbb, 0x36, 0x5e, + 0xc9, 0x8d, 0x42, 0x5e, 0xad, 0x7b, 0x60, 0x9d, 0x05, 0xac, 0xd3, 0x59, 0x02, 0x11, 0xbf, 0x71, + 0xa8, 0x66, 0x7c, 0x25, 0x16, 0xd6, 0xfc, 0x6c, 0xce, 0x94, 0x8b, 0x24, 0x1e, 0xf3, 0xf5, 0x55, + 0x9c, 0xc5, 0x48, 0xc9, 0xf2, 0x22, 0x89, 0xc7, 0x19, 0x59, 0xa4, 0xcc, 0xc9, 0x97, 0x50, 0xcd, + 0x3a, 0xad, 0xd2, 0x28, 0x61, 0x1a, 0xf7, 0xd7, 0x43, 0x60, 0x12, 0xd6, 0x55, 0x4e, 0x23, 0x9f, + 0x41, 0x95, 0x47, 0xfe, 0x84, 0xbf, 0x89, 0x85, 0x27, 0x5f, 0x36, 0xdc, 0xdb, 0xe6, 0x9e, 0xd5, + 0x9c, 0x0a, 0x7c, 0xe8, 0x06, 0xc1, 0x98, 0x51, 0x2b, 0x33, 0x91, 0x9a, 0x7b, 0x9d, 0x8d, 0xb9, + 0xfc, 0xfc, 0xed, 0xb6, 0x3a, 0x3f, 0xc4, 0xc5, 0xe5, 0x21, 0x56, 0xfd, 0xab, 0xff, 0xa0, 0x81, + 0xad, 0xf8, 0xce, 0x26, 0x61, 0x30, 0xf4, 0x45, 0x10, 0x47, 0xe4, 0x09, 0x94, 0xa2, 0x78, 0xc4, + 0xe4, 0x46, 0x93, 0xe0, 0xfd, 0x77, 0x85, 0xe2, 0x39, 0xd3, 0x66, 0x37, 0x1e, 0x31, 0xaa, 0xac, + 0xdd, 0x67, 0xa0, 0x4b, 0x55, 0xee, 0xc5, 0xb4, 0x84, 0x9b, 0xec, 0x45, 0xb1, 0x50, 0xea, 0x67, + 0x50, 0x4b, 0xbf, 0x70, 0xc1, 0x12, 0x16, 0x0d, 0x99, 0x7c, 0xcf, 0x73, 0xc3, 0x83, 0xf2, 0x47, + 0x6f, 0xcf, 0xfa, 0x8f, 0x1a, 0x10, 0x8c, 0xbb, 0xcc, 0xaa, 0xdb, 0x88, 0x4d, 0x1e, 0xc3, 0xfd, + 0xb7, 0xd7, 0x2c, 0x99, 0xa9, 0x65, 0x36, 0x64, 0xde, 0x28, 0xe0, 0xf2, 0x2b, 0x6a, 0x39, 0x18, + 0x74, 0x0b, 0x6f, 0xfb, 0xea, 0xf2, 0x20, 0xbd, 0xab, 0xff, 0xa9, 0x83, 0xd9, 0x4f, 0xa6, 0x73, + 0xce, 0x7c, 0x0d, 0x30, 0xf1, 0x13, 0x11, 0x48, 0x4c, 0x33, 0xd8, 0xff, 0x97, 0x83, 0x7d, 0x61, + 0x3a, 0x1f, 0xbe, 0x5e, 0x66, 0x4f, 0x73, 0xae, 0xef, 0x25, 0x5f, 0xe1, 0xa3, 0xc9, 0x57, 0xfc, + 0x07, 0xe4, 0x6b, 0x81, 0x99, 0x23, 0x5f, 0xca, 0xbd, 0xed, 0x77, 0xd7, 0x91, 0xa3, 0x1f, 0x2c, + 0xe8, 0xe7, 0xfe, 0xa1, 0xc1, 0xdd, 0xb5, 0x12, 0x25, 0x2b, 0x72, 0xef, 0xdf, 0x87, 0x59, 0xb1, + 0x78, 0xf8, 0x48, 0x1b, 0x6c, 0xcc, 0xd2, 0x4b, 0xb2, 0x81, 0x52, 0x04, 0x31, 0xf3, 0x75, 0x2d, + 0x4f, 0x1c, 0xdd, 0xe4, 0x4b, 0x3a, 0x27, 0x3d, 0xb8, 0xa7, 0x82, 0xac, 0x3e, 0x80, 0xea, 0x11, + 0xfe, 0xcf, 0x4a, 0xa4, 0xe5, 0xf7, 0xef, 0x5f, 0x7c, 0xed, 0x8c, 0xbb, 0xde, 0x6d, 0x30, 0xfe, + 0x03, 0x0f, 0x54, 0xba, 0x95, 0x8f, 0xc0, 0x68, 0xb3, 0x30, 0x3c, 0x8c, 0x2e, 0x62, 0xf9, 0xe3, + 0x0b, 0x71, 0x49, 0x3c, 0x7f, 0x34, 0x4a, 0x18, 0xe7, 0xe9, 0xd4, 0x57, 0xd5, 0x69, 0x4b, 0x1d, + 0x4a, 0x4a, 0x24, 0x71, 0x2c, 0xd2, 0x80, 0x28, 0xa7, 0x8b, 0xa2, 0x0e, 0x20, 0x83, 0x71, 0xf5, + 0x03, 0xe6, 0x9d, 0xeb, 0x66, 0xa7, 0x01, 0x56, 0x7e, 0x35, 0x12, 0x80, 0x72, 0xf7, 0x94, 0x9e, + 0xb4, 0x8e, 0xed, 0x3b, 0xc4, 0x02, 0xa3, 0xdf, 0x6d, 0xf5, 0xfa, 0x2f, 0x4f, 0x07, 0xb6, 0xb6, + 0xb3, 0x07, 0xb5, 0xe5, 0x71, 0x22, 0x15, 0x28, 0x9d, 0x75, 0xfb, 0x9d, 0x81, 0x7d, 0x47, 0xba, + 0x9d, 0x1d, 0x76, 0x07, 0x9f, 0x3f, 0xb6, 0x35, 0x79, 0xfc, 0xfc, 0xf5, 0xa0, 0xd3, 0xb7, 0x0b, + 0x3b, 0x3f, 0x69, 0x00, 0x0b, 0x2c, 0x88, 0x09, 0x1b, 0x67, 0xdd, 0xa3, 0xee, 0xe9, 0x37, 0x5d, + 0xe5, 0x72, 0xd2, 0xea, 0x0f, 0x3a, 0xd4, 0xd6, 0xe4, 0x05, 0xed, 0xf4, 0x8e, 0x0f, 0xdb, 0x2d, + 0xbb, 0x20, 0x2f, 0xe8, 0xc1, 0x69, 0xf7, 0xf8, 0xb5, 0x5d, 0xc4, 0x58, 0xad, 0x41, 0xfb, 0xa5, + 0x12, 0xfb, 0xbd, 0x16, 0xed, 0xd8, 0x3a, 0xb1, 0xc1, 0xea, 0x7c, 0xdb, 0xeb, 0xd0, 0xc3, 0x93, + 0x4e, 0x77, 0xd0, 0x3a, 0xb6, 0x4b, 0xd2, 0xe7, 0x79, 0xab, 0x7d, 0x74, 0xd6, 0xb3, 0xcb, 0x2a, + 0x58, 0x7f, 0x70, 0x4a, 0x3b, 0xf6, 0x86, 0x54, 0x0e, 0x68, 0xeb, 0xb0, 0xdb, 0x39, 0xb0, 0x0d, + 0xb7, 0x60, 0x6b, 0xcf, 0xf7, 0x61, 0x33, 0x88, 0x9b, 0xd3, 0x40, 0x30, 0xce, 0xd5, 0x7f, 0x98, + 0xef, 0x1e, 0xa6, 0x5a, 0x10, 0xef, 0x2a, 0x69, 0xf7, 0x32, 0xde, 0x9d, 0x8a, 0x5d, 0xbc, 0xdd, + 0xcd, 0x9a, 0x7a, 0x5e, 0x46, 0xfd, 0xd1, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xb7, 0xe6, 0x45, + 0xd0, 0x19, 0x0d, 0x00, 0x00, } diff --git a/go/vt/proto/vschema/vschema.pb.go b/go/vt/proto/vschema/vschema.pb.go index d052ef272b4..c233b708004 100644 --- a/go/vt/proto/vschema/vschema.pb.go +++ b/go/vt/proto/vschema/vschema.pb.go @@ -7,6 +7,7 @@ import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" import query "vitess.io/vitess/go/vt/proto/query" +import topodata "vitess.io/vitess/go/vt/proto/topodata" // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -34,7 +35,7 @@ func (m *RoutingRules) Reset() { *m = RoutingRules{} } func (m *RoutingRules) String() string { return proto.CompactTextString(m) } func (*RoutingRules) ProtoMessage() {} func (*RoutingRules) Descriptor() ([]byte, []int) { - return fileDescriptor_vschema_13414422c846e850, []int{0} + return fileDescriptor_vschema_347648a96c4152b6, []int{0} } func (m *RoutingRules) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RoutingRules.Unmarshal(m, b) @@ -74,7 +75,7 @@ func (m *RoutingRule) Reset() { *m = RoutingRule{} } func (m *RoutingRule) String() string { return proto.CompactTextString(m) } func (*RoutingRule) ProtoMessage() {} func (*RoutingRule) Descriptor() ([]byte, []int) { - return fileDescriptor_vschema_13414422c846e850, []int{1} + return fileDescriptor_vschema_347648a96c4152b6, []int{1} } func (m *RoutingRule) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RoutingRule.Unmarshal(m, b) @@ -111,19 +112,20 @@ func (m *RoutingRule) GetToTables() []string { // Keyspace is the vschema for a keyspace. type Keyspace struct { // If sharded is false, vindexes and tables are ignored. - Sharded bool `protobuf:"varint,1,opt,name=sharded,proto3" json:"sharded,omitempty"` - Vindexes map[string]*Vindex `protobuf:"bytes,2,rep,name=vindexes,proto3" json:"vindexes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Tables map[string]*Table `protobuf:"bytes,3,rep,name=tables,proto3" json:"tables,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Sharded bool `protobuf:"varint,1,opt,name=sharded,proto3" json:"sharded,omitempty"` + Vindexes map[string]*Vindex `protobuf:"bytes,2,rep,name=vindexes,proto3" json:"vindexes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Tables map[string]*Table `protobuf:"bytes,3,rep,name=tables,proto3" json:"tables,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + KeyspaceType topodata.KeyspaceType `protobuf:"varint,4,opt,name=keyspace_type,json=keyspaceType,proto3,enum=topodata.KeyspaceType" json:"keyspace_type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Keyspace) Reset() { *m = Keyspace{} } func (m *Keyspace) String() string { return proto.CompactTextString(m) } func (*Keyspace) ProtoMessage() {} func (*Keyspace) Descriptor() ([]byte, []int) { - return fileDescriptor_vschema_13414422c846e850, []int{2} + return fileDescriptor_vschema_347648a96c4152b6, []int{2} } func (m *Keyspace) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Keyspace.Unmarshal(m, b) @@ -164,6 +166,13 @@ func (m *Keyspace) GetTables() map[string]*Table { return nil } +func (m *Keyspace) GetKeyspaceType() topodata.KeyspaceType { + if m != nil { + return m.KeyspaceType + } + return topodata.KeyspaceType_NORMAL +} + // Vindex is the vindex info for a Keyspace. type Vindex struct { // The type must match one of the predefined @@ -188,7 +197,7 @@ func (m *Vindex) Reset() { *m = Vindex{} } func (m *Vindex) String() string { return proto.CompactTextString(m) } func (*Vindex) ProtoMessage() {} func (*Vindex) Descriptor() ([]byte, []int) { - return fileDescriptor_vschema_13414422c846e850, []int{3} + return fileDescriptor_vschema_347648a96c4152b6, []int{3} } func (m *Vindex) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Vindex.Unmarshal(m, b) @@ -259,7 +268,7 @@ func (m *Table) Reset() { *m = Table{} } func (m *Table) String() string { return proto.CompactTextString(m) } func (*Table) ProtoMessage() {} func (*Table) Descriptor() ([]byte, []int) { - return fileDescriptor_vschema_13414422c846e850, []int{4} + return fileDescriptor_vschema_347648a96c4152b6, []int{4} } func (m *Table) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Table.Unmarshal(m, b) @@ -338,7 +347,7 @@ func (m *ColumnVindex) Reset() { *m = ColumnVindex{} } func (m *ColumnVindex) String() string { return proto.CompactTextString(m) } func (*ColumnVindex) ProtoMessage() {} func (*ColumnVindex) Descriptor() ([]byte, []int) { - return fileDescriptor_vschema_13414422c846e850, []int{5} + return fileDescriptor_vschema_347648a96c4152b6, []int{5} } func (m *ColumnVindex) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ColumnVindex.Unmarshal(m, b) @@ -393,7 +402,7 @@ func (m *AutoIncrement) Reset() { *m = AutoIncrement{} } func (m *AutoIncrement) String() string { return proto.CompactTextString(m) } func (*AutoIncrement) ProtoMessage() {} func (*AutoIncrement) Descriptor() ([]byte, []int) { - return fileDescriptor_vschema_13414422c846e850, []int{6} + return fileDescriptor_vschema_347648a96c4152b6, []int{6} } func (m *AutoIncrement) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_AutoIncrement.Unmarshal(m, b) @@ -440,7 +449,7 @@ func (m *Column) Reset() { *m = Column{} } func (m *Column) String() string { return proto.CompactTextString(m) } func (*Column) ProtoMessage() {} func (*Column) Descriptor() ([]byte, []int) { - return fileDescriptor_vschema_13414422c846e850, []int{7} + return fileDescriptor_vschema_347648a96c4152b6, []int{7} } func (m *Column) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Column.Unmarshal(m, b) @@ -488,7 +497,7 @@ func (m *SrvVSchema) Reset() { *m = SrvVSchema{} } func (m *SrvVSchema) String() string { return proto.CompactTextString(m) } func (*SrvVSchema) ProtoMessage() {} func (*SrvVSchema) Descriptor() ([]byte, []int) { - return fileDescriptor_vschema_13414422c846e850, []int{8} + return fileDescriptor_vschema_347648a96c4152b6, []int{8} } func (m *SrvVSchema) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SrvVSchema.Unmarshal(m, b) @@ -538,49 +547,51 @@ func init() { proto.RegisterMapType((map[string]*Keyspace)(nil), "vschema.SrvVSchema.KeyspacesEntry") } -func init() { proto.RegisterFile("vschema.proto", fileDescriptor_vschema_13414422c846e850) } - -var fileDescriptor_vschema_13414422c846e850 = []byte{ - // 643 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x54, 0xdd, 0x6e, 0xd3, 0x30, - 0x14, 0x56, 0xda, 0x35, 0x6b, 0x4f, 0xd6, 0x0e, 0xac, 0x6d, 0x84, 0x4e, 0xd3, 0xaa, 0x68, 0x40, - 0xe1, 0xa2, 0x95, 0x3a, 0x21, 0x41, 0xd1, 0x10, 0x63, 0xe2, 0x62, 0x62, 0x12, 0x28, 0x9b, 0x76, - 0xc1, 0x4d, 0xe5, 0xb5, 0x66, 0x8b, 0xd6, 0xc6, 0x99, 0xed, 0x04, 0xf2, 0x28, 0xdc, 0xf2, 0x06, - 0x3c, 0x0f, 0x2f, 0x83, 0xe2, 0x9f, 0xcc, 0xe9, 0xca, 0x9d, 0x3f, 0x9f, 0xf3, 0x7d, 0xe7, 0xf3, - 0xb1, 0x7d, 0xa0, 0x9d, 0xf1, 0xe9, 0x0d, 0x59, 0xe0, 0x41, 0xc2, 0xa8, 0xa0, 0x68, 0x5d, 0xc3, - 0xae, 0x77, 0x97, 0x12, 0x96, 0xab, 0xdd, 0x60, 0x0c, 0x1b, 0x21, 0x4d, 0x45, 0x14, 0x5f, 0x87, - 0xe9, 0x9c, 0x70, 0xf4, 0x0a, 0x1a, 0xac, 0x58, 0xf8, 0x4e, 0xaf, 0xde, 0xf7, 0x46, 0x5b, 0x03, - 0x23, 0x62, 0x65, 0x85, 0x2a, 0x25, 0x38, 0x05, 0xcf, 0xda, 0x45, 0x7b, 0x00, 0xdf, 0x19, 0x5d, - 0x4c, 0x04, 0xbe, 0x9a, 0x13, 0xdf, 0xe9, 0x39, 0xfd, 0x56, 0xd8, 0x2a, 0x76, 0x2e, 0x8a, 0x0d, - 0xb4, 0x0b, 0x2d, 0x41, 0x55, 0x90, 0xfb, 0xb5, 0x5e, 0xbd, 0xdf, 0x0a, 0x9b, 0x82, 0xca, 0x18, - 0x0f, 0xfe, 0xd4, 0xa0, 0xf9, 0x99, 0xe4, 0x3c, 0xc1, 0x53, 0x82, 0x7c, 0x58, 0xe7, 0x37, 0x98, - 0xcd, 0xc8, 0x4c, 0xaa, 0x34, 0x43, 0x03, 0xd1, 0x3b, 0x68, 0x66, 0x51, 0x3c, 0x23, 0x3f, 0xb5, - 0x84, 0x37, 0xda, 0x2f, 0x0d, 0x1a, 0xfa, 0xe0, 0x52, 0x67, 0x7c, 0x8a, 0x05, 0xcb, 0xc3, 0x92, - 0x80, 0x5e, 0x83, 0xab, 0xab, 0xd7, 0x25, 0x75, 0xef, 0x21, 0x55, 0xb9, 0x51, 0x44, 0x9d, 0xdc, - 0x3d, 0x83, 0x76, 0x45, 0x11, 0x3d, 0x82, 0xfa, 0x2d, 0xc9, 0xf5, 0x01, 0x8b, 0x25, 0x7a, 0x06, - 0x8d, 0x0c, 0xcf, 0x53, 0xe2, 0xd7, 0x7a, 0x4e, 0xdf, 0x1b, 0x6d, 0x96, 0xc2, 0x8a, 0x18, 0xaa, - 0xe8, 0xb8, 0xf6, 0xc6, 0xe9, 0x9e, 0x82, 0x67, 0x15, 0x59, 0xa1, 0x75, 0x50, 0xd5, 0xea, 0x94, - 0x5a, 0x92, 0x66, 0x49, 0x05, 0xbf, 0x1d, 0x70, 0x55, 0x01, 0x84, 0x60, 0x4d, 0xe4, 0x89, 0x69, - 0xba, 0x5c, 0xa3, 0x43, 0x70, 0x13, 0xcc, 0xf0, 0xc2, 0x74, 0x6a, 0x77, 0xc9, 0xd5, 0xe0, 0xab, - 0x8c, 0xea, 0xc3, 0xaa, 0x54, 0xb4, 0x05, 0x0d, 0xfa, 0x23, 0x26, 0xcc, 0xaf, 0x4b, 0x25, 0x05, - 0xba, 0x6f, 0xc1, 0xb3, 0x92, 0x57, 0x98, 0xde, 0xb2, 0x4d, 0xb7, 0x6c, 0x93, 0xbf, 0x6a, 0xd0, - 0x50, 0xf7, 0xbf, 0xca, 0xe3, 0x7b, 0xd8, 0x9c, 0xd2, 0x79, 0xba, 0x88, 0x27, 0x4b, 0xd7, 0xba, - 0x5d, 0x9a, 0x3d, 0x91, 0x71, 0xdd, 0xc8, 0xce, 0xd4, 0x42, 0x84, 0xa3, 0x23, 0xe8, 0xe0, 0x54, - 0xd0, 0x49, 0x14, 0x4f, 0x19, 0x59, 0x90, 0x58, 0x48, 0xdf, 0xde, 0x68, 0xa7, 0xa4, 0x1f, 0xa7, - 0x82, 0x9e, 0x9a, 0x68, 0xd8, 0xc6, 0x36, 0x44, 0x2f, 0x61, 0x5d, 0x09, 0x72, 0x7f, 0x4d, 0x96, - 0xdd, 0x5c, 0x2a, 0x1b, 0x9a, 0x38, 0xda, 0x01, 0x37, 0x89, 0xe2, 0x98, 0xcc, 0xfc, 0x86, 0xf4, - 0xaf, 0x11, 0x1a, 0xc3, 0x53, 0x7d, 0x82, 0x79, 0xc4, 0xc5, 0x04, 0xa7, 0xe2, 0x86, 0xb2, 0x48, - 0x60, 0x11, 0x65, 0xc4, 0x77, 0xe5, 0xeb, 0x7d, 0xa2, 0x12, 0xce, 0x22, 0x2e, 0x8e, 0xed, 0x70, - 0x70, 0x01, 0x1b, 0xf6, 0xe9, 0x8a, 0x1a, 0x2a, 0x55, 0xf7, 0x48, 0xa3, 0xa2, 0x73, 0x31, 0x5e, - 0x98, 0xe6, 0xca, 0x75, 0xf1, 0x47, 0x8c, 0xf5, 0xba, 0xfc, 0x4b, 0x06, 0x06, 0x27, 0xd0, 0xae, - 0x1c, 0xfa, 0xbf, 0xb2, 0x5d, 0x68, 0x72, 0x72, 0x97, 0x92, 0x78, 0x6a, 0xa4, 0x4b, 0x1c, 0x1c, - 0x81, 0x7b, 0x52, 0x2d, 0xee, 0x58, 0xc5, 0xf7, 0xf5, 0x55, 0x16, 0xac, 0xce, 0xc8, 0x1b, 0xa8, - 0x81, 0x72, 0x91, 0x27, 0x44, 0xdd, 0x6b, 0xf0, 0xd7, 0x01, 0x38, 0x67, 0xd9, 0xe5, 0xb9, 0x6c, - 0x26, 0xfa, 0x00, 0xad, 0x5b, 0xfd, 0xc5, 0xcc, 0x60, 0x09, 0xca, 0x4e, 0xdf, 0xe7, 0x95, 0xff, - 0x50, 0x3f, 0xca, 0x7b, 0x12, 0x1a, 0x43, 0x9b, 0xa9, 0x51, 0x33, 0x51, 0xe3, 0x49, 0xfd, 0x8e, - 0xed, 0x55, 0xe3, 0x89, 0x87, 0x1b, 0xcc, 0x42, 0xdd, 0x2f, 0xd0, 0xa9, 0x0a, 0xaf, 0x78, 0xc0, - 0x2f, 0xaa, 0xbf, 0xee, 0xf1, 0x83, 0xd1, 0x60, 0xbd, 0xe9, 0x8f, 0xcf, 0xbf, 0x1d, 0x64, 0x91, - 0x20, 0x9c, 0x0f, 0x22, 0x3a, 0x54, 0xab, 0xe1, 0x35, 0x1d, 0x66, 0x62, 0x28, 0x67, 0xea, 0x50, - 0x73, 0xaf, 0x5c, 0x09, 0x0f, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xc8, 0x0d, 0x93, 0x48, 0x89, - 0x05, 0x00, 0x00, +func init() { proto.RegisterFile("vschema.proto", fileDescriptor_vschema_347648a96c4152b6) } + +var fileDescriptor_vschema_347648a96c4152b6 = []byte{ + // 676 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x54, 0xdd, 0x4e, 0xdb, 0x4c, + 0x10, 0x95, 0x13, 0x62, 0x92, 0x71, 0x12, 0xbe, 0x6f, 0x05, 0xd4, 0x35, 0x42, 0x44, 0x16, 0x6d, + 0xd3, 0x5e, 0x38, 0x52, 0x50, 0xa5, 0x36, 0x88, 0xaa, 0x14, 0xf5, 0x02, 0x15, 0xa9, 0x95, 0x41, + 0x5c, 0xf4, 0x26, 0x5a, 0x92, 0x2d, 0x58, 0x24, 0x5e, 0xb3, 0xbb, 0x76, 0x9b, 0x47, 0xe9, 0x6d, + 0x5f, 0xab, 0xef, 0xd0, 0x67, 0xa8, 0xbc, 0x3f, 0x66, 0x03, 0xe9, 0xdd, 0x1e, 0xcf, 0x9c, 0x33, + 0x67, 0xc7, 0x3b, 0x03, 0x9d, 0x82, 0x4f, 0x6e, 0xc8, 0x1c, 0x47, 0x19, 0xa3, 0x82, 0xa2, 0x75, + 0x0d, 0x83, 0xae, 0xa0, 0x19, 0x9d, 0x62, 0xa1, 0x03, 0x81, 0x77, 0x97, 0x13, 0xb6, 0x50, 0x20, + 0x1c, 0x41, 0x3b, 0xa6, 0xb9, 0x48, 0xd2, 0xeb, 0x38, 0x9f, 0x11, 0x8e, 0x5e, 0x41, 0x83, 0x95, + 0x07, 0xdf, 0xe9, 0xd5, 0xfb, 0xde, 0x70, 0x33, 0x32, 0xa2, 0x56, 0x56, 0xac, 0x52, 0xc2, 0x53, + 0xf0, 0xac, 0xaf, 0x68, 0x17, 0xe0, 0x1b, 0xa3, 0xf3, 0xb1, 0xc0, 0x57, 0x33, 0xe2, 0x3b, 0x3d, + 0xa7, 0xdf, 0x8a, 0x5b, 0xe5, 0x97, 0x8b, 0xf2, 0x03, 0xda, 0x81, 0x96, 0xa0, 0x2a, 0xc8, 0xfd, + 0x5a, 0xaf, 0xde, 0x6f, 0xc5, 0x4d, 0x41, 0x65, 0x8c, 0x87, 0x7f, 0x6a, 0xd0, 0xfc, 0x44, 0x16, + 0x3c, 0xc3, 0x13, 0x82, 0x7c, 0x58, 0xe7, 0x37, 0x98, 0x4d, 0xc9, 0x54, 0xaa, 0x34, 0x63, 0x03, + 0xd1, 0x21, 0x34, 0x8b, 0x24, 0x9d, 0x92, 0x1f, 0x5a, 0xc2, 0x1b, 0xee, 0x55, 0x06, 0x0d, 0x3d, + 0xba, 0xd4, 0x19, 0x1f, 0x53, 0xc1, 0x16, 0x71, 0x45, 0x40, 0xaf, 0xc1, 0xd5, 0xd5, 0xeb, 0x92, + 0xba, 0xfb, 0x98, 0xaa, 0xdc, 0x28, 0xa2, 0x4e, 0x46, 0x87, 0xd0, 0xb9, 0xd5, 0xf1, 0xb1, 0x58, + 0x64, 0xc4, 0x5f, 0xeb, 0x39, 0xfd, 0xee, 0x70, 0x3b, 0xaa, 0xda, 0x6a, 0xe8, 0x17, 0x8b, 0x8c, + 0xc4, 0xed, 0x5b, 0x0b, 0x05, 0x67, 0xd0, 0x59, 0xb2, 0x83, 0xfe, 0x83, 0xfa, 0x2d, 0x59, 0xe8, + 0xee, 0x94, 0x47, 0xf4, 0x0c, 0x1a, 0x05, 0x9e, 0xe5, 0xc4, 0xaf, 0xf5, 0x9c, 0xbe, 0x37, 0xdc, + 0xa8, 0x5c, 0x29, 0x62, 0xac, 0xa2, 0xa3, 0xda, 0x1b, 0x27, 0x38, 0x05, 0xcf, 0x72, 0xb8, 0x42, + 0x6b, 0x7f, 0x59, 0xab, 0x5b, 0x69, 0x49, 0x9a, 0x25, 0x15, 0xfe, 0x72, 0xc0, 0x55, 0x05, 0x10, + 0x82, 0x35, 0x79, 0x2f, 0xa5, 0x23, 0xcf, 0xe8, 0x00, 0xdc, 0x0c, 0x33, 0x3c, 0x37, 0x6d, 0xde, + 0x79, 0xe0, 0x2a, 0xfa, 0x22, 0xa3, 0xba, 0x53, 0x2a, 0x15, 0x6d, 0x42, 0x83, 0x7e, 0x4f, 0x09, + 0xf3, 0xeb, 0x52, 0x49, 0x81, 0xe0, 0x2d, 0x78, 0x56, 0xf2, 0x0a, 0xd3, 0x9b, 0xb6, 0xe9, 0x96, + 0x6d, 0xf2, 0x67, 0x0d, 0x1a, 0xea, 0xf1, 0xac, 0xf2, 0xf8, 0x0e, 0x36, 0x26, 0x74, 0x96, 0xcf, + 0xd3, 0xf1, 0x83, 0x37, 0xb1, 0x55, 0x99, 0x3d, 0x91, 0x71, 0xdd, 0xc8, 0xee, 0xc4, 0x42, 0x84, + 0xa3, 0x23, 0xe8, 0xe2, 0x5c, 0xd0, 0x71, 0x92, 0x4e, 0x18, 0x99, 0x93, 0x54, 0x48, 0xdf, 0xde, + 0x70, 0xbb, 0xa2, 0x1f, 0xe7, 0x82, 0x9e, 0x9a, 0x68, 0xdc, 0xc1, 0x36, 0x44, 0x2f, 0x61, 0x5d, + 0x09, 0x72, 0x7f, 0x4d, 0x96, 0xdd, 0x78, 0x50, 0x36, 0x36, 0x71, 0xb4, 0x0d, 0x6e, 0x96, 0xa4, + 0x29, 0x99, 0xfa, 0x0d, 0xe9, 0x5f, 0x23, 0x34, 0x82, 0xa7, 0xfa, 0x06, 0xb3, 0x84, 0x8b, 0x31, + 0xce, 0xc5, 0x0d, 0x65, 0x89, 0xc0, 0x22, 0x29, 0x88, 0xef, 0xca, 0xa7, 0xff, 0x44, 0x25, 0x9c, + 0x25, 0x5c, 0x1c, 0xdb, 0xe1, 0xf0, 0x02, 0xda, 0xf6, 0xed, 0xca, 0x1a, 0x2a, 0x55, 0xf7, 0x48, + 0xa3, 0xb2, 0x73, 0x29, 0x9e, 0x9b, 0xe6, 0xca, 0x73, 0x39, 0x60, 0xc6, 0x7a, 0x5d, 0x0e, 0xa2, + 0x81, 0xe1, 0x09, 0x74, 0x96, 0x2e, 0xfd, 0x4f, 0xd9, 0x00, 0x9a, 0x9c, 0xdc, 0xe5, 0x24, 0x9d, + 0x18, 0xe9, 0x0a, 0x87, 0x47, 0xe0, 0x9e, 0x2c, 0x17, 0x77, 0xac, 0xe2, 0x7b, 0xfa, 0x57, 0xd6, + 0xe4, 0x18, 0x79, 0x91, 0xda, 0x46, 0x72, 0x76, 0x64, 0x20, 0xfc, 0xed, 0x00, 0x9c, 0xb3, 0xe2, + 0xf2, 0x5c, 0x36, 0x13, 0xbd, 0x87, 0x96, 0x19, 0x29, 0xb3, 0x95, 0xc2, 0xaa, 0xd3, 0xf7, 0x79, + 0xd5, 0x14, 0xea, 0x47, 0x79, 0x4f, 0x42, 0x23, 0xe8, 0x30, 0xb5, 0xa7, 0xc6, 0x6a, 0xb7, 0xa9, + 0xe9, 0xd8, 0x5a, 0xb5, 0xdb, 0x78, 0xdc, 0x66, 0x16, 0x0a, 0x3e, 0x43, 0x77, 0x59, 0x78, 0xc5, + 0x03, 0x7e, 0xb1, 0x3c, 0x75, 0xff, 0x3f, 0xda, 0x2b, 0xd6, 0x9b, 0xfe, 0xf0, 0xfc, 0xeb, 0x7e, + 0x91, 0x08, 0xc2, 0x79, 0x94, 0xd0, 0x81, 0x3a, 0x0d, 0xae, 0xe9, 0xa0, 0x10, 0x03, 0xb9, 0x90, + 0x07, 0x9a, 0x7b, 0xe5, 0x4a, 0x78, 0xf0, 0x37, 0x00, 0x00, 0xff, 0xff, 0x6b, 0x24, 0x60, 0x9d, + 0xd6, 0x05, 0x00, 0x00, } diff --git a/go/vt/proto/vttime/time.pb.go b/go/vt/proto/vttime/time.pb.go new file mode 100644 index 00000000000..b1fae945549 --- /dev/null +++ b/go/vt/proto/vttime/time.pb.go @@ -0,0 +1,85 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: time.proto + +package vttime // import "vitess.io/vitess/go/vt/proto/vttime" + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Time represents a time stamp in nanoseconds. In go, use logutil library +// to convert times. +type Time struct { + Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"` + Nanoseconds int32 `protobuf:"varint,2,opt,name=nanoseconds,proto3" json:"nanoseconds,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Time) Reset() { *m = Time{} } +func (m *Time) String() string { return proto.CompactTextString(m) } +func (*Time) ProtoMessage() {} +func (*Time) Descriptor() ([]byte, []int) { + return fileDescriptor_time_2dd326fa9f4fcfc8, []int{0} +} +func (m *Time) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Time.Unmarshal(m, b) +} +func (m *Time) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Time.Marshal(b, m, deterministic) +} +func (dst *Time) XXX_Merge(src proto.Message) { + xxx_messageInfo_Time.Merge(dst, src) +} +func (m *Time) XXX_Size() int { + return xxx_messageInfo_Time.Size(m) +} +func (m *Time) XXX_DiscardUnknown() { + xxx_messageInfo_Time.DiscardUnknown(m) +} + +var xxx_messageInfo_Time proto.InternalMessageInfo + +func (m *Time) GetSeconds() int64 { + if m != nil { + return m.Seconds + } + return 0 +} + +func (m *Time) GetNanoseconds() int32 { + if m != nil { + return m.Nanoseconds + } + return 0 +} + +func init() { + proto.RegisterType((*Time)(nil), "vttime.Time") +} + +func init() { proto.RegisterFile("time.proto", fileDescriptor_time_2dd326fa9f4fcfc8) } + +var fileDescriptor_time_2dd326fa9f4fcfc8 = []byte{ + // 120 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x2a, 0xc9, 0xcc, 0x4d, + 0xd5, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x2b, 0x2b, 0x01, 0xf1, 0x94, 0x9c, 0xb8, 0x58, + 0x42, 0x32, 0x73, 0x53, 0x85, 0x24, 0xb8, 0xd8, 0x8b, 0x53, 0x93, 0xf3, 0xf3, 0x52, 0x8a, 0x25, + 0x18, 0x15, 0x18, 0x35, 0x98, 0x83, 0x60, 0x5c, 0x21, 0x05, 0x2e, 0xee, 0xbc, 0xc4, 0xbc, 0x7c, + 0x98, 0x2c, 0x93, 0x02, 0xa3, 0x06, 0x6b, 0x10, 0xb2, 0x90, 0x93, 0x6a, 0x94, 0x72, 0x59, 0x66, + 0x49, 0x6a, 0x71, 0xb1, 0x5e, 0x66, 0xbe, 0x3e, 0x84, 0xa5, 0x9f, 0x9e, 0xaf, 0x5f, 0x56, 0xa2, + 0x0f, 0xb6, 0x4b, 0x1f, 0x62, 0x55, 0x12, 0x1b, 0x98, 0x67, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, + 0xb4, 0x42, 0xf5, 0xf7, 0x87, 0x00, 0x00, 0x00, +} diff --git a/go/vt/topo/topoproto/keyspace.go b/go/vt/topo/topoproto/keyspace.go new file mode 100644 index 00000000000..e409f763fd7 --- /dev/null +++ b/go/vt/topo/topoproto/keyspace.go @@ -0,0 +1,34 @@ +/* +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 topoproto + +import ( + "fmt" + "strings" + + topodatapb "vitess.io/vitess/go/vt/proto/topodata" +) + +// ParseKeyspaceType parses a string into a KeyspaceType +func ParseKeyspaceType(param string) (topodatapb.KeyspaceType, error) { + value, ok := topodatapb.KeyspaceType_value[strings.ToUpper(param)] + if !ok { + // default + return topodatapb.KeyspaceType_NORMAL, fmt.Errorf("unknown keyspace type: %v", value) + } + return topodatapb.KeyspaceType(value), nil +} diff --git a/go/vt/topo/topoproto/tablet.go b/go/vt/topo/topoproto/tablet.go index 97dd1263c04..c5bd52811d4 100644 --- a/go/vt/topo/topoproto/tablet.go +++ b/go/vt/topo/topoproto/tablet.go @@ -34,8 +34,8 @@ import ( // This file contains the topodata.Tablet utility functions. const ( - // Default name for databases is the prefix plus keyspace - vtDbPrefix = "vt_" + // VtDbPrefix + keyspace is the default name for databases. + VtDbPrefix = "vt_" ) // cache the conversion from tablet type enum to lower case string. @@ -258,7 +258,7 @@ func TabletDbName(tablet *topodatapb.Tablet) string { if tablet.Keyspace == "" { return "" } - return vtDbPrefix + tablet.Keyspace + return VtDbPrefix + tablet.Keyspace } // TabletIsAssigned returns if this tablet is assigned to a keyspace and shard. diff --git a/go/vt/topo/vschema.go b/go/vt/topo/vschema.go index a2103ff10ea..ea42467fb84 100644 --- a/go/vt/topo/vschema.go +++ b/go/vt/topo/vschema.go @@ -43,10 +43,17 @@ func (ts *Server) SaveVSchema(ctx context.Context, keyspace string, vschema *vsc if len(data) == 0 { // No vschema, remove it. So we can remove the keyspace. - return ts.globalCell.Delete(ctx, nodePath, nil) + err = ts.globalCell.Delete(ctx, nodePath, nil) + if err != nil { + return vterrors.Wrap(err, "error from Delete VSchema") + } + return err } _, err = ts.globalCell.Update(ctx, nodePath, data, nil) + if err != nil { + return vterrors.Wrap(err, "error from Update VSchema") + } return err } diff --git a/go/vt/vtctl/vtctl.go b/go/vt/vtctl/vtctl.go index 4110854a0ce..45765f4e985 100644 --- a/go/vt/vtctl/vtctl.go +++ b/go/vt/vtctl/vtctl.go @@ -125,6 +125,7 @@ import ( replicationdatapb "vitess.io/vitess/go/vt/proto/replicationdata" topodatapb "vitess.io/vitess/go/vt/proto/topodata" vschemapb "vitess.io/vitess/go/vt/proto/vschema" + "vitess.io/vitess/go/vt/proto/vttime" ) var ( @@ -222,7 +223,7 @@ var commands = []commandGroup{ { "Shards", []command{ {"CreateShard", commandCreateShard, - "[-force] [-parent] ", + "[-force] [-parent] [-keyspace_type=keyspace_type] ", "Creates the specified shard."}, {"GetShard", commandGetShard, "", @@ -281,7 +282,7 @@ var commands = []commandGroup{ { "Keyspaces", []command{ {"CreateKeyspace", commandCreateKeyspace, - "[-sharding_column_name=name] [-sharding_column_type=type] [-served_from=tablettype1:ks1,tablettype2,ks2,...] [-force] ", + "[-sharding_column_name=name] [-sharding_column_type=type] [-served_from=tablettype1:ks1,tablettype2,ks2,...] [-force] [-keyspace_type=type] [-snapshot_time=time] ", "Creates the specified keyspace."}, {"DeleteKeyspace", commandDeleteKeyspace, "[-recursive] ", @@ -1151,6 +1152,7 @@ func commandExecuteHook(ctx context.Context, wr *wrangler.Wrangler, subFlags *fl func commandCreateShard(ctx context.Context, wr *wrangler.Wrangler, subFlags *flag.FlagSet, args []string) error { force := subFlags.Bool("force", false, "Proceeds with the command even if the keyspace already exists") parent := subFlags.Bool("parent", false, "Creates the parent keyspace if it doesn't already exist") + keyspaceType := subFlags.String("keyspace_type", "", "Specifies the type of the keyspace") if err := subFlags.Parse(args); err != nil { return err } @@ -1163,7 +1165,12 @@ func commandCreateShard(ctx context.Context, wr *wrangler.Wrangler, subFlags *fl return err } if *parent { - if err := wr.TopoServer().CreateKeyspace(ctx, keyspace, &topodatapb.Keyspace{}); err != nil && !topo.IsErrType(err, topo.NodeExists) { + ktype, err := topoproto.ParseKeyspaceType(*keyspaceType) + if err != nil { + wr.Logger().Infof("error parsing keyspace type %v, defaulting to NORMAL", *keyspaceType) + err = nil + } + if err := wr.TopoServer().CreateKeyspace(ctx, keyspace, &topodatapb.Keyspace{KeyspaceType: ktype}); err != nil && !topo.IsErrType(err, topo.NodeExists) { return err } } @@ -1543,6 +1550,8 @@ func commandCreateKeyspace(ctx context.Context, wr *wrangler.Wrangler, subFlags force := subFlags.Bool("force", false, "Proceeds even if the keyspace already exists") var servedFrom flagutil.StringMapValue subFlags.Var(&servedFrom, "served_from", "Specifies a comma-separated list of dbtype:keyspace pairs used to serve traffic") + keyspaceType := subFlags.String("keyspace_type", "", "Specifies the type of the keyspace") + timestampStr := subFlags.String("snapshot_time", "", "Specifies the snapshot time for this keyspace") if err := subFlags.Parse(args); err != nil { return err } @@ -1555,9 +1564,26 @@ func commandCreateKeyspace(ctx context.Context, wr *wrangler.Wrangler, subFlags if err != nil { return err } + ktype, err := topoproto.ParseKeyspaceType(*keyspaceType) + if *keyspaceType != "" && err != nil { + wr.Logger().Infof("error parsing keyspace type %v, defaulting to NORMAL", *keyspaceType) + err = nil + } + + var snapshotTime *vttime.Time + // if snapshot keyspace, process snapshot_time + if ktype == topodatapb.KeyspaceType_SNAPSHOT && *timestampStr != "" { + timeTime, err := time.Parse(time.RFC3339, *timestampStr) + if err != nil { + return err + } + snapshotTime = logutil.TimeToProto(timeTime) + } ki := &topodatapb.Keyspace{ ShardingColumnName: *shardingColumnName, ShardingColumnType: kit, + KeyspaceType: ktype, + SnapshotTime: snapshotTime, } if len(servedFrom) > 0 { for name, value := range servedFrom { @@ -1576,6 +1602,29 @@ func commandCreateKeyspace(ctx context.Context, wr *wrangler.Wrangler, subFlags wr.Logger().Infof("keyspace %v already exists (ignoring error with -force)", keyspace) err = nil } + if err != nil { + return err + } + // create empty vschema.Keyspace if it doesn't exist yet + _, err = wr.TopoServer().GetVSchema(ctx, keyspace) + if err != nil { + wr.Logger().Infof("error from GetVSchema %v", err) + if topo.IsErrType(err, topo.NoNode) { + vs := &vschemapb.Keyspace{ + Tables: map[string]*vschemapb.Table{ + "unsharded": {}, + }, + KeyspaceType: ktype, + } + if err := wr.TopoServer().SaveVSchema(ctx, keyspace, vs); err != nil { + wr.Logger().Infof("error from SaveVSchema %v:%v", vs, err) + return err + } + err = nil + } else { + return err + } + } return err } diff --git a/go/vt/vtctld/api_test.go b/go/vt/vtctld/api_test.go index 57d4e77a0e3..fd4bab30570 100644 --- a/go/vt/vtctld/api_test.go +++ b/go/vt/vtctld/api_test.go @@ -117,7 +117,9 @@ func TestAPI(t *testing.T) { {"GET", "keyspaces/ks1", "", `{ "sharding_column_name": "shardcol", "sharding_column_type": 0, - "served_froms": [] + "served_froms": [], + "keyspace_type":0, + "snapshot_time":null }`}, {"GET", "keyspaces/nonexistent", "", "404 page not found"}, {"POST", "keyspaces/ks1?action=TestKeyspaceAction", "", `{ @@ -254,7 +256,7 @@ func TestAPI(t *testing.T) { // vtctl RunCommand {"POST", "vtctl/", `["GetKeyspace","ks1"]`, `{ "Error": "", - "Output": "{\n \"sharding_column_name\": \"shardcol\",\n \"sharding_column_type\": 0,\n \"served_froms\": [\n ]\n}\n\n" + "Output": "{\n \"sharding_column_name\": \"shardcol\",\n \"sharding_column_type\": 0,\n \"served_froms\": [\n ],\n \"keyspace_type\": 0,\n \"snapshot_time\": null\n}\n\n" }`}, {"POST", "vtctl/", `["GetKeyspace","does_not_exist"]`, `{ "Error": "node doesn't exist: keyspaces/does_not_exist/Keyspace", diff --git a/go/vt/vtgate/vindexes/vschema.go b/go/vt/vtgate/vindexes/vschema.go index 3cf5c9a2bb4..18680371279 100644 --- a/go/vt/vtgate/vindexes/vschema.go +++ b/go/vt/vtgate/vindexes/vschema.go @@ -224,10 +224,12 @@ func buildTables(ks *vschemapb.Keyspace, vschema *VSchema, ksvschema *KeyspaceSc if err != nil { return err } - if _, ok := vschema.uniqueVindexes[vname]; ok { - vschema.uniqueVindexes[vname] = nil - } else { - vschema.uniqueVindexes[vname] = vindex + if ks.KeyspaceType == topodatapb.KeyspaceType_NORMAL { + if _, ok := vschema.uniqueVindexes[vname]; ok { + vschema.uniqueVindexes[vname] = nil + } else { + vschema.uniqueVindexes[vname] = vindex + } } ksvschema.Vindexes[vname] = vindex } @@ -326,10 +328,12 @@ func buildTables(ks *vschemapb.Keyspace, vschema *VSchema, ksvschema *KeyspaceSc t.Ordered = colVindexSorted(t.ColumnVindexes) // Add the table to the map entries. - if _, ok := vschema.uniqueTables[tname]; ok { - vschema.uniqueTables[tname] = nil - } else { - vschema.uniqueTables[tname] = t + if ks.KeyspaceType == topodatapb.KeyspaceType_NORMAL { + if _, ok := vschema.uniqueTables[tname]; ok { + vschema.uniqueTables[tname] = nil + } else { + vschema.uniqueTables[tname] = t + } } ksvschema.Tables[tname] = t } diff --git a/go/vt/vttablet/tabletmanager/init_tablet.go b/go/vt/vttablet/tabletmanager/init_tablet.go index 47e5c00917f..5beedb0ffbe 100644 --- a/go/vt/vttablet/tabletmanager/init_tablet.go +++ b/go/vt/vttablet/tabletmanager/init_tablet.go @@ -64,6 +64,10 @@ func (agent *ActionAgent) InitTablet(port, gRPCPort int32) error { if *initKeyspace == "" || *initShard == "" || *initTabletType == "" { return fmt.Errorf("either need all of init_keyspace, init_shard and init_tablet_type, or none") } + // if we are recovering from a snapshot we need to set initDbNameOverride + if *recoveryKeyspace != "" && *initDbNameOverride == "" { + *initDbNameOverride = topoproto.VtDbPrefix + *recoveryKeyspace + } // parse init_tablet_type tabletType, err := topoproto.ParseTabletType(*initTabletType) diff --git a/go/vt/vttablet/tabletmanager/restore.go b/go/vt/vttablet/tabletmanager/restore.go index 55a3a57285d..a03174f38b3 100644 --- a/go/vt/vttablet/tabletmanager/restore.go +++ b/go/vt/vttablet/tabletmanager/restore.go @@ -39,6 +39,7 @@ import ( var ( restoreFromBackup = flag.Bool("restore_from_backup", false, "(init restore parameter) will check BackupStorage for a recent backup at startup and start there") restoreConcurrency = flag.Int("restore_concurrency", 4, "(init restore parameter) how many concurrent files to restore at once") + recoveryKeyspace = flag.String("recovery_keyspace", "", "(init restore parameter) which keyspace to recover this tablet from") ) // RestoreData is the main entry point for backup restore. @@ -79,16 +80,27 @@ func (agent *ActionAgent) restoreDataLocked(ctx context.Context, logger logutil. // Record local metadata values based on the original type. localMetadata := agent.getLocalMetadataValues(originalType) tablet := agent.Tablet() - dir := fmt.Sprintf("%v/%v", tablet.Keyspace, tablet.Shard) - pos, err := mysqlctl.Restore(ctx, agent.Cnf, agent.MysqlDaemon, dir, *restoreConcurrency, agent.hookExtraEnv(), localMetadata, logger, deleteBeforeRestore, topoproto.TabletDbName(tablet)) + keyspaceDir := tablet.Keyspace + if *recoveryKeyspace != "" { + keyspaceDir = *recoveryKeyspace + } + dir := fmt.Sprintf("%v/%v", keyspaceDir, tablet.Shard) + keyspaceName := tablet.Keyspace + keyspaceInfo, err := agent.TopoServer.GetKeyspace(ctx, keyspaceName) + if err != nil { + return err + } + keyspace := keyspaceInfo.Keyspace + pos, err := mysqlctl.Restore(ctx, agent.Cnf, agent.MysqlDaemon, dir, *restoreConcurrency, agent.hookExtraEnv(), localMetadata, logger, deleteBeforeRestore, topoproto.TabletDbName(tablet), logutil.ProtoToTime(keyspace.SnapshotTime)) switch err { case nil: // Starting from here we won't be able to recover if we get stopped by a cancelled // context. Thus we use the background context to get through to the finish. - - // Reconnect to master. - if err := agent.startReplication(context.Background(), pos, originalType); err != nil { - return err + if keyspace.KeyspaceType == topodatapb.KeyspaceType_NORMAL { + // Reconnect to master only for "NORMAL" keyspaces + if err := agent.startReplication(context.Background(), pos, originalType); err != nil { + return err + } } case mysqlctl.ErrNoBackup: // No-op, starting with empty database. diff --git a/go/vt/vttablet/tabletmanager/rpc_backup.go b/go/vt/vttablet/tabletmanager/rpc_backup.go index f9a3d78fe3c..88d7024f5b5 100644 --- a/go/vt/vttablet/tabletmanager/rpc_backup.go +++ b/go/vt/vttablet/tabletmanager/rpc_backup.go @@ -80,8 +80,9 @@ func (agent *ActionAgent) Backup(ctx context.Context, concurrency int, logger lo // now we can run the backup dir := fmt.Sprintf("%v/%v", tablet.Keyspace, tablet.Shard) - name := fmt.Sprintf("%v.%v", time.Now().UTC().Format("2006-01-02.150405"), topoproto.TabletAliasString(tablet.Alias)) - returnErr := mysqlctl.Backup(ctx, agent.Cnf, agent.MysqlDaemon, l, dir, name, concurrency, agent.hookExtraEnv()) + backupTime := time.Now().UTC() + name := fmt.Sprintf("%v.%v", backupTime.Format("2006-01-02.150405"), topoproto.TabletAliasString(tablet.Alias)) + returnErr := mysqlctl.Backup(ctx, agent.Cnf, agent.MysqlDaemon, l, dir, name, concurrency, agent.hookExtraEnv(), backupTime) if builtin != nil { diff --git a/proto/logutil.proto b/proto/logutil.proto index d720752314e..1e244f3aec7 100644 --- a/proto/logutil.proto +++ b/proto/logutil.proto @@ -21,12 +21,7 @@ option go_package = "vitess.io/vitess/go/vt/proto/logutil"; package logutil; -// Time represents a time stamp in nanoseconds. In go, use logutil library -// to convert times. -message Time { - int64 seconds = 1; - int32 nanoseconds = 2; -} +import "time.proto"; // Level is the level of the log messages. enum Level { @@ -43,7 +38,7 @@ enum Level { // Event is a single logging event message Event { - Time time = 1; + vttime.Time time = 1; Level level = 2; string file = 3; int64 line = 4; diff --git a/proto/time.proto b/proto/time.proto new file mode 100644 index 00000000000..ff1a5151a93 --- /dev/null +++ b/proto/time.proto @@ -0,0 +1,30 @@ +/* +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 agreedto 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. +*/ + +// This package contains a shared time data structure + +syntax = "proto3"; +option go_package = "vitess.io/vitess/go/vt/proto/vttime"; + +package vttime; + +// Time represents a time stamp in nanoseconds. In go, use logutil library +// to convert times. +message Time { + int64 seconds = 1; + int32 nanoseconds = 2; +} + diff --git a/proto/topodata.proto b/proto/topodata.proto index 2677f721911..400dcbf6c07 100644 --- a/proto/topodata.proto +++ b/proto/topodata.proto @@ -26,6 +26,8 @@ option java_package="io.vitess.proto"; package topodata; +import "time.proto"; + // KeyRange describes a range of sharding keys, when range-based // sharding is used. message KeyRange { @@ -33,6 +35,15 @@ message KeyRange { bytes end = 2; } +// KeyspaceType describes the type of the keyspace +enum KeyspaceType { + // NORMAL is the default value + NORMAL = 0; + + // SNAPSHOT is when we are creating a snapshot keyspace + SNAPSHOT = 1; +} + // KeyspaceIdType describes the type of the sharding key for a // range-based sharded keyspace. enum KeyspaceIdType { @@ -266,6 +277,17 @@ message Keyspace { // ServedFrom will redirect the appropriate traffic to // another keyspace. repeated ServedFrom served_froms = 4; + + // keyspace_type will determine how this keyspace is treated by + // vtgate / vschema. Normal keyspaces are routable by + // any query. Snapshot keyspaces are only accessible + // by explicit addresssing or by calling "use keyspace" first + KeyspaceType keyspace_type = 5; + + // snapshot_time (in UTC) is a property of snapshot + // keyspaces which tells us what point in time + // the snapshot is of + vttime.Time snapshot_time = 6; } // ShardReplication describes the MySQL replication relationships diff --git a/proto/vschema.proto b/proto/vschema.proto index 12e6154f047..2c00d3d345d 100644 --- a/proto/vschema.proto +++ b/proto/vschema.proto @@ -21,6 +21,7 @@ option go_package = "vitess.io/vitess/go/vt/proto/vschema"; package vschema; +import "topodata.proto"; import "query.proto"; // RoutingRules specify the high level routing rules for the VSchema. @@ -43,6 +44,7 @@ message Keyspace { bool sharded = 1; map vindexes = 2; map tables = 3; + topodata.KeyspaceType keyspace_type = 4; } // Vindex is the vindex info for a Keyspace. diff --git a/py/vtproto/logutil_pb2.py b/py/vtproto/logutil_pb2.py index 7f8d6d237e5..afa2bac4050 100644 --- a/py/vtproto/logutil_pb2.py +++ b/py/vtproto/logutil_pb2.py @@ -8,20 +8,22 @@ 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() +import time_pb2 as time__pb2 DESCRIPTOR = _descriptor.FileDescriptor( name='logutil.proto', package='logutil', syntax='proto3', - serialized_pb=_b('\n\rlogutil.proto\x12\x07logutil\",\n\x04Time\x12\x0f\n\x07seconds\x18\x01 \x01(\x03\x12\x13\n\x0bnanoseconds\x18\x02 \x01(\x05\"n\n\x05\x45vent\x12\x1b\n\x04time\x18\x01 \x01(\x0b\x32\r.logutil.Time\x12\x1d\n\x05level\x18\x02 \x01(\x0e\x32\x0e.logutil.Level\x12\x0c\n\x04\x66ile\x18\x03 \x01(\t\x12\x0c\n\x04line\x18\x04 \x01(\x03\x12\r\n\x05value\x18\x05 \x01(\t*6\n\x05Level\x12\x08\n\x04INFO\x10\x00\x12\x0b\n\x07WARNING\x10\x01\x12\t\n\x05\x45RROR\x10\x02\x12\x0b\n\x07\x43ONSOLE\x10\x03\x42&Z$vitess.io/vitess/go/vt/proto/logutilb\x06proto3') -) + serialized_options=_b('Z$vitess.io/vitess/go/vt/proto/logutil'), + serialized_pb=_b('\n\rlogutil.proto\x12\x07logutil\x1a\ntime.proto\"m\n\x05\x45vent\x12\x1a\n\x04time\x18\x01 \x01(\x0b\x32\x0c.vttime.Time\x12\x1d\n\x05level\x18\x02 \x01(\x0e\x32\x0e.logutil.Level\x12\x0c\n\x04\x66ile\x18\x03 \x01(\t\x12\x0c\n\x04line\x18\x04 \x01(\x03\x12\r\n\x05value\x18\x05 \x01(\t*6\n\x05Level\x12\x08\n\x04INFO\x10\x00\x12\x0b\n\x07WARNING\x10\x01\x12\t\n\x05\x45RROR\x10\x02\x12\x0b\n\x07\x43ONSOLE\x10\x03\x42&Z$vitess.io/vitess/go/vt/proto/logutilb\x06proto3') + , + dependencies=[time__pb2.DESCRIPTOR,]) _LEVEL = _descriptor.EnumDescriptor( name='Level', @@ -31,25 +33,25 @@ values=[ _descriptor.EnumValueDescriptor( name='INFO', index=0, number=0, - options=None, + serialized_options=None, type=None), _descriptor.EnumValueDescriptor( name='WARNING', index=1, number=1, - options=None, + serialized_options=None, type=None), _descriptor.EnumValueDescriptor( name='ERROR', index=2, number=2, - options=None, + serialized_options=None, type=None), _descriptor.EnumValueDescriptor( name='CONSOLE', index=3, number=3, - options=None, + serialized_options=None, type=None), ], containing_type=None, - options=None, - serialized_start=184, - serialized_end=238, + serialized_options=None, + serialized_start=149, + serialized_end=203, ) _sym_db.RegisterEnumDescriptor(_LEVEL) @@ -61,44 +63,6 @@ -_TIME = _descriptor.Descriptor( - name='Time', - full_name='logutil.Time', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='seconds', full_name='logutil.Time.seconds', index=0, - number=1, 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), - _descriptor.FieldDescriptor( - name='nanoseconds', full_name='logutil.Time.nanoseconds', 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), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=26, - serialized_end=70, -) - - _EVENT = _descriptor.Descriptor( name='Event', full_name='logutil.Event', @@ -112,65 +76,57 @@ 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='level', full_name='logutil.Event.level', 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='file', full_name='logutil.Event.file', 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='line', full_name='logutil.Event.line', index=3, number=4, 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='value', full_name='logutil.Event.value', 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), ], extensions=[ ], nested_types=[], enum_types=[ ], - options=None, + serialized_options=None, is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], - serialized_start=72, - serialized_end=182, + serialized_start=38, + serialized_end=147, ) -_EVENT.fields_by_name['time'].message_type = _TIME +_EVENT.fields_by_name['time'].message_type = time__pb2._TIME _EVENT.fields_by_name['level'].enum_type = _LEVEL -DESCRIPTOR.message_types_by_name['Time'] = _TIME DESCRIPTOR.message_types_by_name['Event'] = _EVENT DESCRIPTOR.enum_types_by_name['Level'] = _LEVEL _sym_db.RegisterFileDescriptor(DESCRIPTOR) -Time = _reflection.GeneratedProtocolMessageType('Time', (_message.Message,), dict( - DESCRIPTOR = _TIME, - __module__ = 'logutil_pb2' - # @@protoc_insertion_point(class_scope:logutil.Time) - )) -_sym_db.RegisterMessage(Time) - Event = _reflection.GeneratedProtocolMessageType('Event', (_message.Message,), dict( DESCRIPTOR = _EVENT, __module__ = 'logutil_pb2' @@ -179,6 +135,5 @@ _sym_db.RegisterMessage(Event) -DESCRIPTOR.has_options = True -DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('Z$vitess.io/vitess/go/vt/proto/logutil')) +DESCRIPTOR._options = None # @@protoc_insertion_point(module_scope) diff --git a/py/vtproto/time_pb2.py b/py/vtproto/time_pb2.py new file mode 100644 index 00000000000..af172b3c5d8 --- /dev/null +++ b/py/vtproto/time_pb2.py @@ -0,0 +1,77 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: time.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='time.proto', + package='vttime', + syntax='proto3', + serialized_options=_b('Z#vitess.io/vitess/go/vt/proto/vttime'), + serialized_pb=_b('\n\ntime.proto\x12\x06vttime\",\n\x04Time\x12\x0f\n\x07seconds\x18\x01 \x01(\x03\x12\x13\n\x0bnanoseconds\x18\x02 \x01(\x05\x42%Z#vitess.io/vitess/go/vt/proto/vttimeb\x06proto3') +) + + + + +_TIME = _descriptor.Descriptor( + name='Time', + full_name='vttime.Time', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='seconds', full_name='vttime.Time.seconds', index=0, + number=1, 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, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='nanoseconds', full_name='vttime.Time.nanoseconds', 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, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=22, + serialized_end=66, +) + +DESCRIPTOR.message_types_by_name['Time'] = _TIME +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +Time = _reflection.GeneratedProtocolMessageType('Time', (_message.Message,), dict( + DESCRIPTOR = _TIME, + __module__ = 'time_pb2' + # @@protoc_insertion_point(class_scope:vttime.Time) + )) +_sym_db.RegisterMessage(Time) + + +DESCRIPTOR._options = None +# @@protoc_insertion_point(module_scope) diff --git a/py/vtproto/time_pb2_grpc.py b/py/vtproto/time_pb2_grpc.py new file mode 100644 index 00000000000..a89435267cb --- /dev/null +++ b/py/vtproto/time_pb2_grpc.py @@ -0,0 +1,3 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc + diff --git a/py/vtproto/topodata_pb2.py b/py/vtproto/topodata_pb2.py index 66ac9fea9b0..6caec7e4f6b 100644 --- a/py/vtproto/topodata_pb2.py +++ b/py/vtproto/topodata_pb2.py @@ -13,6 +13,7 @@ _sym_db = _symbol_database.Default() +import time_pb2 as time__pb2 DESCRIPTOR = _descriptor.FileDescriptor( @@ -20,9 +21,33 @@ package='topodata', syntax='proto3', serialized_options=_b('\n\017io.vitess.protoZ%vitess.io/vitess/go/vt/proto/topodata'), - serialized_pb=_b('\n\x0etopodata.proto\x12\x08topodata\"&\n\x08KeyRange\x12\r\n\x05start\x18\x01 \x01(\x0c\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x0c\"(\n\x0bTabletAlias\x12\x0c\n\x04\x63\x65ll\x18\x01 \x01(\t\x12\x0b\n\x03uid\x18\x02 \x01(\r\"\xb6\x03\n\x06Tablet\x12$\n\x05\x61lias\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\x12\x10\n\x08hostname\x18\x02 \x01(\t\x12/\n\x08port_map\x18\x04 \x03(\x0b\x32\x1d.topodata.Tablet.PortMapEntry\x12\x10\n\x08keyspace\x18\x05 \x01(\t\x12\r\n\x05shard\x18\x06 \x01(\t\x12%\n\tkey_range\x18\x07 \x01(\x0b\x32\x12.topodata.KeyRange\x12\"\n\x04type\x18\x08 \x01(\x0e\x32\x14.topodata.TabletType\x12\x18\n\x10\x64\x62_name_override\x18\t \x01(\t\x12(\n\x04tags\x18\n \x03(\x0b\x32\x1a.topodata.Tablet.TagsEntry\x12\x16\n\x0emysql_hostname\x18\x0c \x01(\t\x12\x12\n\nmysql_port\x18\r \x01(\x05\x1a.\n\x0cPortMapEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a+\n\tTagsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01J\x04\x08\x03\x10\x04J\x04\x08\x0b\x10\x0c\"\xd3\x04\n\x05Shard\x12+\n\x0cmaster_alias\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\x12%\n\tkey_range\x18\x02 \x01(\x0b\x32\x12.topodata.KeyRange\x12\x30\n\x0cserved_types\x18\x03 \x03(\x0b\x32\x1a.topodata.Shard.ServedType\x12\x32\n\rsource_shards\x18\x04 \x03(\x0b\x32\x1b.topodata.Shard.SourceShard\x12\x36\n\x0ftablet_controls\x18\x06 \x03(\x0b\x32\x1d.topodata.Shard.TabletControl\x12\x19\n\x11is_master_serving\x18\x07 \x01(\x08\x1a\x46\n\nServedType\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t\x1ar\n\x0bSourceShard\x12\x0b\n\x03uid\x18\x01 \x01(\r\x12\x10\n\x08keyspace\x18\x02 \x01(\t\x12\r\n\x05shard\x18\x03 \x01(\t\x12%\n\tkey_range\x18\x04 \x01(\x0b\x32\x12.topodata.KeyRange\x12\x0e\n\x06tables\x18\x05 \x03(\t\x1a{\n\rTabletControl\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t\x12\x1a\n\x12\x62lacklisted_tables\x18\x04 \x03(\t\x12\x0e\n\x06\x66rozen\x18\x05 \x01(\x08J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06\"\xf5\x01\n\x08Keyspace\x12\x1c\n\x14sharding_column_name\x18\x01 \x01(\t\x12\x36\n\x14sharding_column_type\x18\x02 \x01(\x0e\x32\x18.topodata.KeyspaceIdType\x12\x33\n\x0cserved_froms\x18\x04 \x03(\x0b\x32\x1d.topodata.Keyspace.ServedFrom\x1aX\n\nServedFrom\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t\x12\x10\n\x08keyspace\x18\x03 \x01(\tJ\x04\x08\x03\x10\x04\"w\n\x10ShardReplication\x12.\n\x05nodes\x18\x01 \x03(\x0b\x32\x1f.topodata.ShardReplication.Node\x1a\x33\n\x04Node\x12+\n\x0ctablet_alias\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\"E\n\x0eShardReference\x12\x0c\n\x04name\x18\x01 \x01(\t\x12%\n\tkey_range\x18\x02 \x01(\x0b\x32\x12.topodata.KeyRange\"i\n\x12ShardTabletControl\x12\x0c\n\x04name\x18\x01 \x01(\t\x12%\n\tkey_range\x18\x02 \x01(\x0b\x32\x12.topodata.KeyRange\x12\x1e\n\x16query_service_disabled\x18\x03 \x01(\x08\"\xda\x03\n\x0bSrvKeyspace\x12;\n\npartitions\x18\x01 \x03(\x0b\x32\'.topodata.SrvKeyspace.KeyspacePartition\x12\x1c\n\x14sharding_column_name\x18\x02 \x01(\t\x12\x36\n\x14sharding_column_type\x18\x03 \x01(\x0e\x32\x18.topodata.KeyspaceIdType\x12\x35\n\x0bserved_from\x18\x04 \x03(\x0b\x32 .topodata.SrvKeyspace.ServedFrom\x1a\xaf\x01\n\x11KeyspacePartition\x12)\n\x0bserved_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\x32\n\x10shard_references\x18\x02 \x03(\x0b\x32\x18.topodata.ShardReference\x12;\n\x15shard_tablet_controls\x18\x03 \x03(\x0b\x32\x1c.topodata.ShardTabletControl\x1aI\n\nServedFrom\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\x10\n\x08keyspace\x18\x02 \x01(\tJ\x04\x08\x05\x10\x06\"6\n\x08\x43\x65llInfo\x12\x16\n\x0eserver_address\x18\x01 \x01(\t\x12\x0c\n\x04root\x18\x02 \x01(\tJ\x04\x08\x03\x10\x04\"\x1b\n\nCellsAlias\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t*2\n\x0eKeyspaceIdType\x12\t\n\x05UNSET\x10\x00\x12\n\n\x06UINT64\x10\x01\x12\t\n\x05\x42YTES\x10\x02*\x90\x01\n\nTabletType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06MASTER\x10\x01\x12\x0b\n\x07REPLICA\x10\x02\x12\n\n\x06RDONLY\x10\x03\x12\t\n\x05\x42\x41TCH\x10\x03\x12\t\n\x05SPARE\x10\x04\x12\x10\n\x0c\x45XPERIMENTAL\x10\x05\x12\n\n\x06\x42\x41\x43KUP\x10\x06\x12\x0b\n\x07RESTORE\x10\x07\x12\x0b\n\x07\x44RAINED\x10\x08\x1a\x02\x10\x01\x42\x38\n\x0fio.vitess.protoZ%vitess.io/vitess/go/vt/proto/topodatab\x06proto3') + serialized_pb=_b('\n\x0etopodata.proto\x12\x08topodata\x1a\ntime.proto\"&\n\x08KeyRange\x12\r\n\x05start\x18\x01 \x01(\x0c\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x0c\"(\n\x0bTabletAlias\x12\x0c\n\x04\x63\x65ll\x18\x01 \x01(\t\x12\x0b\n\x03uid\x18\x02 \x01(\r\"\xb6\x03\n\x06Tablet\x12$\n\x05\x61lias\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\x12\x10\n\x08hostname\x18\x02 \x01(\t\x12/\n\x08port_map\x18\x04 \x03(\x0b\x32\x1d.topodata.Tablet.PortMapEntry\x12\x10\n\x08keyspace\x18\x05 \x01(\t\x12\r\n\x05shard\x18\x06 \x01(\t\x12%\n\tkey_range\x18\x07 \x01(\x0b\x32\x12.topodata.KeyRange\x12\"\n\x04type\x18\x08 \x01(\x0e\x32\x14.topodata.TabletType\x12\x18\n\x10\x64\x62_name_override\x18\t \x01(\t\x12(\n\x04tags\x18\n \x03(\x0b\x32\x1a.topodata.Tablet.TagsEntry\x12\x16\n\x0emysql_hostname\x18\x0c \x01(\t\x12\x12\n\nmysql_port\x18\r \x01(\x05\x1a.\n\x0cPortMapEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a+\n\tTagsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01J\x04\x08\x03\x10\x04J\x04\x08\x0b\x10\x0c\"\xd3\x04\n\x05Shard\x12+\n\x0cmaster_alias\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\x12%\n\tkey_range\x18\x02 \x01(\x0b\x32\x12.topodata.KeyRange\x12\x30\n\x0cserved_types\x18\x03 \x03(\x0b\x32\x1a.topodata.Shard.ServedType\x12\x32\n\rsource_shards\x18\x04 \x03(\x0b\x32\x1b.topodata.Shard.SourceShard\x12\x36\n\x0ftablet_controls\x18\x06 \x03(\x0b\x32\x1d.topodata.Shard.TabletControl\x12\x19\n\x11is_master_serving\x18\x07 \x01(\x08\x1a\x46\n\nServedType\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t\x1ar\n\x0bSourceShard\x12\x0b\n\x03uid\x18\x01 \x01(\r\x12\x10\n\x08keyspace\x18\x02 \x01(\t\x12\r\n\x05shard\x18\x03 \x01(\t\x12%\n\tkey_range\x18\x04 \x01(\x0b\x32\x12.topodata.KeyRange\x12\x0e\n\x06tables\x18\x05 \x03(\t\x1a{\n\rTabletControl\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t\x12\x1a\n\x12\x62lacklisted_tables\x18\x04 \x03(\t\x12\x0e\n\x06\x66rozen\x18\x05 \x01(\x08J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06\"\xc9\x02\n\x08Keyspace\x12\x1c\n\x14sharding_column_name\x18\x01 \x01(\t\x12\x36\n\x14sharding_column_type\x18\x02 \x01(\x0e\x32\x18.topodata.KeyspaceIdType\x12\x33\n\x0cserved_froms\x18\x04 \x03(\x0b\x32\x1d.topodata.Keyspace.ServedFrom\x12-\n\rkeyspace_type\x18\x05 \x01(\x0e\x32\x16.topodata.KeyspaceType\x12#\n\rsnapshot_time\x18\x06 \x01(\x0b\x32\x0c.vttime.Time\x1aX\n\nServedFrom\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t\x12\x10\n\x08keyspace\x18\x03 \x01(\tJ\x04\x08\x03\x10\x04\"w\n\x10ShardReplication\x12.\n\x05nodes\x18\x01 \x03(\x0b\x32\x1f.topodata.ShardReplication.Node\x1a\x33\n\x04Node\x12+\n\x0ctablet_alias\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\"E\n\x0eShardReference\x12\x0c\n\x04name\x18\x01 \x01(\t\x12%\n\tkey_range\x18\x02 \x01(\x0b\x32\x12.topodata.KeyRange\"i\n\x12ShardTabletControl\x12\x0c\n\x04name\x18\x01 \x01(\t\x12%\n\tkey_range\x18\x02 \x01(\x0b\x32\x12.topodata.KeyRange\x12\x1e\n\x16query_service_disabled\x18\x03 \x01(\x08\"\xda\x03\n\x0bSrvKeyspace\x12;\n\npartitions\x18\x01 \x03(\x0b\x32\'.topodata.SrvKeyspace.KeyspacePartition\x12\x1c\n\x14sharding_column_name\x18\x02 \x01(\t\x12\x36\n\x14sharding_column_type\x18\x03 \x01(\x0e\x32\x18.topodata.KeyspaceIdType\x12\x35\n\x0bserved_from\x18\x04 \x03(\x0b\x32 .topodata.SrvKeyspace.ServedFrom\x1a\xaf\x01\n\x11KeyspacePartition\x12)\n\x0bserved_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\x32\n\x10shard_references\x18\x02 \x03(\x0b\x32\x18.topodata.ShardReference\x12;\n\x15shard_tablet_controls\x18\x03 \x03(\x0b\x32\x1c.topodata.ShardTabletControl\x1aI\n\nServedFrom\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\x10\n\x08keyspace\x18\x02 \x01(\tJ\x04\x08\x05\x10\x06\"6\n\x08\x43\x65llInfo\x12\x16\n\x0eserver_address\x18\x01 \x01(\t\x12\x0c\n\x04root\x18\x02 \x01(\tJ\x04\x08\x03\x10\x04\"\x1b\n\nCellsAlias\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t*(\n\x0cKeyspaceType\x12\n\n\x06NORMAL\x10\x00\x12\x0c\n\x08SNAPSHOT\x10\x01*2\n\x0eKeyspaceIdType\x12\t\n\x05UNSET\x10\x00\x12\n\n\x06UINT64\x10\x01\x12\t\n\x05\x42YTES\x10\x02*\x90\x01\n\nTabletType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06MASTER\x10\x01\x12\x0b\n\x07REPLICA\x10\x02\x12\n\n\x06RDONLY\x10\x03\x12\t\n\x05\x42\x41TCH\x10\x03\x12\t\n\x05SPARE\x10\x04\x12\x10\n\x0c\x45XPERIMENTAL\x10\x05\x12\n\n\x06\x42\x41\x43KUP\x10\x06\x12\x0b\n\x07RESTORE\x10\x07\x12\x0b\n\x07\x44RAINED\x10\x08\x1a\x02\x10\x01\x42\x38\n\x0fio.vitess.protoZ%vitess.io/vitess/go/vt/proto/topodatab\x06proto3') + , + dependencies=[time__pb2.DESCRIPTOR,]) + +_KEYSPACETYPE = _descriptor.EnumDescriptor( + name='KeyspaceType', + full_name='topodata.KeyspaceType', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='NORMAL', index=0, number=0, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SNAPSHOT', index=1, number=1, + serialized_options=None, + type=None), + ], + containing_type=None, + serialized_options=None, + serialized_start=2354, + serialized_end=2394, ) +_sym_db.RegisterEnumDescriptor(_KEYSPACETYPE) +KeyspaceType = enum_type_wrapper.EnumTypeWrapper(_KEYSPACETYPE) _KEYSPACEIDTYPE = _descriptor.EnumDescriptor( name='KeyspaceIdType', full_name='topodata.KeyspaceIdType', @@ -44,8 +69,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=2258, - serialized_end=2308, + serialized_start=2396, + serialized_end=2446, ) _sym_db.RegisterEnumDescriptor(_KEYSPACEIDTYPE) @@ -99,12 +124,14 @@ ], containing_type=None, serialized_options=_b('\020\001'), - serialized_start=2311, - serialized_end=2455, + serialized_start=2449, + serialized_end=2593, ) _sym_db.RegisterEnumDescriptor(_TABLETTYPE) TabletType = enum_type_wrapper.EnumTypeWrapper(_TABLETTYPE) +NORMAL = 0 +SNAPSHOT = 1 UNSET = 0 UINT64 = 1 BYTES = 2 @@ -154,8 +181,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=28, - serialized_end=66, + serialized_start=40, + serialized_end=78, ) @@ -192,8 +219,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=68, - serialized_end=108, + serialized_start=80, + serialized_end=120, ) @@ -230,8 +257,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=446, - serialized_end=492, + serialized_start=458, + serialized_end=504, ) _TABLET_TAGSENTRY = _descriptor.Descriptor( @@ -267,8 +294,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=494, - serialized_end=537, + serialized_start=506, + serialized_end=549, ) _TABLET = _descriptor.Descriptor( @@ -367,8 +394,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=111, - serialized_end=549, + serialized_start=123, + serialized_end=561, ) @@ -405,8 +432,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=830, - serialized_end=900, + serialized_start=842, + serialized_end=912, ) _SHARD_SOURCESHARD = _descriptor.Descriptor( @@ -463,8 +490,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=902, - serialized_end=1016, + serialized_start=914, + serialized_end=1028, ) _SHARD_TABLETCONTROL = _descriptor.Descriptor( @@ -514,8 +541,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1018, - serialized_end=1141, + serialized_start=1030, + serialized_end=1153, ) _SHARD = _descriptor.Descriptor( @@ -579,8 +606,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=552, - serialized_end=1147, + serialized_start=564, + serialized_end=1159, ) @@ -624,8 +651,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1301, - serialized_end=1389, + serialized_start=1397, + serialized_end=1485, ) _KEYSPACE = _descriptor.Descriptor( @@ -656,6 +683,20 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='keyspace_type', full_name='topodata.Keyspace.keyspace_type', index=3, + number=5, 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, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='snapshot_time', full_name='topodata.Keyspace.snapshot_time', index=4, + number=6, 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, + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -668,8 +709,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1150, - serialized_end=1395, + serialized_start=1162, + serialized_end=1491, ) @@ -699,8 +740,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1465, - serialized_end=1516, + serialized_start=1561, + serialized_end=1612, ) _SHARDREPLICATION = _descriptor.Descriptor( @@ -729,8 +770,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1397, - serialized_end=1516, + serialized_start=1493, + serialized_end=1612, ) @@ -767,8 +808,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1518, - serialized_end=1587, + serialized_start=1614, + serialized_end=1683, ) @@ -812,8 +853,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1589, - serialized_end=1694, + serialized_start=1685, + serialized_end=1790, ) @@ -857,8 +898,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1915, - serialized_end=2090, + serialized_start=2011, + serialized_end=2186, ) _SRVKEYSPACE_SERVEDFROM = _descriptor.Descriptor( @@ -894,8 +935,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2092, - serialized_end=2165, + serialized_start=2188, + serialized_end=2261, ) _SRVKEYSPACE = _descriptor.Descriptor( @@ -945,8 +986,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1697, - serialized_end=2171, + serialized_start=1793, + serialized_end=2267, ) @@ -983,8 +1024,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2173, - serialized_end=2227, + serialized_start=2269, + serialized_end=2323, ) @@ -1014,8 +1055,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2229, - serialized_end=2256, + serialized_start=2325, + serialized_end=2352, ) _TABLET_PORTMAPENTRY.containing_type = _TABLET @@ -1040,6 +1081,8 @@ _KEYSPACE_SERVEDFROM.containing_type = _KEYSPACE _KEYSPACE.fields_by_name['sharding_column_type'].enum_type = _KEYSPACEIDTYPE _KEYSPACE.fields_by_name['served_froms'].message_type = _KEYSPACE_SERVEDFROM +_KEYSPACE.fields_by_name['keyspace_type'].enum_type = _KEYSPACETYPE +_KEYSPACE.fields_by_name['snapshot_time'].message_type = time__pb2._TIME _SHARDREPLICATION_NODE.fields_by_name['tablet_alias'].message_type = _TABLETALIAS _SHARDREPLICATION_NODE.containing_type = _SHARDREPLICATION _SHARDREPLICATION.fields_by_name['nodes'].message_type = _SHARDREPLICATION_NODE @@ -1065,6 +1108,7 @@ DESCRIPTOR.message_types_by_name['SrvKeyspace'] = _SRVKEYSPACE DESCRIPTOR.message_types_by_name['CellInfo'] = _CELLINFO DESCRIPTOR.message_types_by_name['CellsAlias'] = _CELLSALIAS +DESCRIPTOR.enum_types_by_name['KeyspaceType'] = _KEYSPACETYPE DESCRIPTOR.enum_types_by_name['KeyspaceIdType'] = _KEYSPACEIDTYPE DESCRIPTOR.enum_types_by_name['TabletType'] = _TABLETTYPE _sym_db.RegisterFileDescriptor(DESCRIPTOR) diff --git a/py/vtproto/vschema_pb2.py b/py/vtproto/vschema_pb2.py index 94f613b8df1..56e8f632a0c 100644 --- a/py/vtproto/vschema_pb2.py +++ b/py/vtproto/vschema_pb2.py @@ -12,6 +12,7 @@ _sym_db = _symbol_database.Default() +import topodata_pb2 as topodata__pb2 import query_pb2 as query__pb2 @@ -20,9 +21,9 @@ package='vschema', syntax='proto3', serialized_options=_b('Z$vitess.io/vitess/go/vt/proto/vschema'), - serialized_pb=_b('\n\rvschema.proto\x12\x07vschema\x1a\x0bquery.proto\"3\n\x0cRoutingRules\x12#\n\x05rules\x18\x01 \x03(\x0b\x32\x14.vschema.RoutingRule\"4\n\x0bRoutingRule\x12\x12\n\nfrom_table\x18\x01 \x01(\t\x12\x11\n\tto_tables\x18\x02 \x03(\t\"\xfe\x01\n\x08Keyspace\x12\x0f\n\x07sharded\x18\x01 \x01(\x08\x12\x31\n\x08vindexes\x18\x02 \x03(\x0b\x32\x1f.vschema.Keyspace.VindexesEntry\x12-\n\x06tables\x18\x03 \x03(\x0b\x32\x1d.vschema.Keyspace.TablesEntry\x1a@\n\rVindexesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1e\n\x05value\x18\x02 \x01(\x0b\x32\x0f.vschema.Vindex:\x02\x38\x01\x1a=\n\x0bTablesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1d\n\x05value\x18\x02 \x01(\x0b\x32\x0e.vschema.Table:\x02\x38\x01\"\x81\x01\n\x06Vindex\x12\x0c\n\x04type\x18\x01 \x01(\t\x12+\n\x06params\x18\x02 \x03(\x0b\x32\x1b.vschema.Vindex.ParamsEntry\x12\r\n\x05owner\x18\x03 \x01(\t\x1a-\n\x0bParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xca\x01\n\x05Table\x12\x0c\n\x04type\x18\x01 \x01(\t\x12.\n\x0f\x63olumn_vindexes\x18\x02 \x03(\x0b\x32\x15.vschema.ColumnVindex\x12.\n\x0e\x61uto_increment\x18\x03 \x01(\x0b\x32\x16.vschema.AutoIncrement\x12 \n\x07\x63olumns\x18\x04 \x03(\x0b\x32\x0f.vschema.Column\x12\x0e\n\x06pinned\x18\x05 \x01(\t\x12!\n\x19\x63olumn_list_authoritative\x18\x06 \x01(\x08\"=\n\x0c\x43olumnVindex\x12\x0e\n\x06\x63olumn\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07\x63olumns\x18\x03 \x03(\t\"1\n\rAutoIncrement\x12\x0e\n\x06\x63olumn\x18\x01 \x01(\t\x12\x10\n\x08sequence\x18\x02 \x01(\t\"1\n\x06\x43olumn\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x19\n\x04type\x18\x02 \x01(\x0e\x32\x0b.query.Type\"\xb6\x01\n\nSrvVSchema\x12\x35\n\tkeyspaces\x18\x01 \x03(\x0b\x32\".vschema.SrvVSchema.KeyspacesEntry\x12,\n\rrouting_rules\x18\x02 \x01(\x0b\x32\x15.vschema.RoutingRules\x1a\x43\n\x0eKeyspacesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12 \n\x05value\x18\x02 \x01(\x0b\x32\x11.vschema.Keyspace:\x02\x38\x01\x42&Z$vitess.io/vitess/go/vt/proto/vschemab\x06proto3') + serialized_pb=_b('\n\rvschema.proto\x12\x07vschema\x1a\x0etopodata.proto\x1a\x0bquery.proto\"3\n\x0cRoutingRules\x12#\n\x05rules\x18\x01 \x03(\x0b\x32\x14.vschema.RoutingRule\"4\n\x0bRoutingRule\x12\x12\n\nfrom_table\x18\x01 \x01(\t\x12\x11\n\tto_tables\x18\x02 \x03(\t\"\xad\x02\n\x08Keyspace\x12\x0f\n\x07sharded\x18\x01 \x01(\x08\x12\x31\n\x08vindexes\x18\x02 \x03(\x0b\x32\x1f.vschema.Keyspace.VindexesEntry\x12-\n\x06tables\x18\x03 \x03(\x0b\x32\x1d.vschema.Keyspace.TablesEntry\x12-\n\rkeyspace_type\x18\x04 \x01(\x0e\x32\x16.topodata.KeyspaceType\x1a@\n\rVindexesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1e\n\x05value\x18\x02 \x01(\x0b\x32\x0f.vschema.Vindex:\x02\x38\x01\x1a=\n\x0bTablesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1d\n\x05value\x18\x02 \x01(\x0b\x32\x0e.vschema.Table:\x02\x38\x01\"\x81\x01\n\x06Vindex\x12\x0c\n\x04type\x18\x01 \x01(\t\x12+\n\x06params\x18\x02 \x03(\x0b\x32\x1b.vschema.Vindex.ParamsEntry\x12\r\n\x05owner\x18\x03 \x01(\t\x1a-\n\x0bParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xca\x01\n\x05Table\x12\x0c\n\x04type\x18\x01 \x01(\t\x12.\n\x0f\x63olumn_vindexes\x18\x02 \x03(\x0b\x32\x15.vschema.ColumnVindex\x12.\n\x0e\x61uto_increment\x18\x03 \x01(\x0b\x32\x16.vschema.AutoIncrement\x12 \n\x07\x63olumns\x18\x04 \x03(\x0b\x32\x0f.vschema.Column\x12\x0e\n\x06pinned\x18\x05 \x01(\t\x12!\n\x19\x63olumn_list_authoritative\x18\x06 \x01(\x08\"=\n\x0c\x43olumnVindex\x12\x0e\n\x06\x63olumn\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07\x63olumns\x18\x03 \x03(\t\"1\n\rAutoIncrement\x12\x0e\n\x06\x63olumn\x18\x01 \x01(\t\x12\x10\n\x08sequence\x18\x02 \x01(\t\"1\n\x06\x43olumn\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x19\n\x04type\x18\x02 \x01(\x0e\x32\x0b.query.Type\"\xb6\x01\n\nSrvVSchema\x12\x35\n\tkeyspaces\x18\x01 \x03(\x0b\x32\".vschema.SrvVSchema.KeyspacesEntry\x12,\n\rrouting_rules\x18\x02 \x01(\x0b\x32\x15.vschema.RoutingRules\x1a\x43\n\x0eKeyspacesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12 \n\x05value\x18\x02 \x01(\x0b\x32\x11.vschema.Keyspace:\x02\x38\x01\x42&Z$vitess.io/vitess/go/vt/proto/vschemab\x06proto3') , - dependencies=[query__pb2.DESCRIPTOR,]) + dependencies=[topodata__pb2.DESCRIPTOR,query__pb2.DESCRIPTOR,]) @@ -53,8 +54,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=39, - serialized_end=90, + serialized_start=55, + serialized_end=106, ) @@ -91,8 +92,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=92, - serialized_end=144, + serialized_start=108, + serialized_end=160, ) @@ -129,8 +130,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=274, - serialized_end=338, + serialized_start=337, + serialized_end=401, ) _KEYSPACE_TABLESENTRY = _descriptor.Descriptor( @@ -166,8 +167,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=340, - serialized_end=401, + serialized_start=403, + serialized_end=464, ) _KEYSPACE = _descriptor.Descriptor( @@ -198,6 +199,13 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='keyspace_type', full_name='vschema.Keyspace.keyspace_type', 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, + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -210,8 +218,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=147, - serialized_end=401, + serialized_start=163, + serialized_end=464, ) @@ -248,8 +256,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=488, - serialized_end=533, + serialized_start=551, + serialized_end=596, ) _VINDEX = _descriptor.Descriptor( @@ -292,8 +300,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=404, - serialized_end=533, + serialized_start=467, + serialized_end=596, ) @@ -358,8 +366,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=536, - serialized_end=738, + serialized_start=599, + serialized_end=801, ) @@ -403,8 +411,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=740, - serialized_end=801, + serialized_start=803, + serialized_end=864, ) @@ -441,8 +449,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=803, - serialized_end=852, + serialized_start=866, + serialized_end=915, ) @@ -479,8 +487,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=854, - serialized_end=903, + serialized_start=917, + serialized_end=966, ) @@ -517,8 +525,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1021, - serialized_end=1088, + serialized_start=1084, + serialized_end=1151, ) _SRVVSCHEMA = _descriptor.Descriptor( @@ -554,8 +562,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=906, - serialized_end=1088, + serialized_start=969, + serialized_end=1151, ) _ROUTINGRULES.fields_by_name['rules'].message_type = _ROUTINGRULE @@ -565,6 +573,7 @@ _KEYSPACE_TABLESENTRY.containing_type = _KEYSPACE _KEYSPACE.fields_by_name['vindexes'].message_type = _KEYSPACE_VINDEXESENTRY _KEYSPACE.fields_by_name['tables'].message_type = _KEYSPACE_TABLESENTRY +_KEYSPACE.fields_by_name['keyspace_type'].enum_type = topodata__pb2._KEYSPACETYPE _VINDEX_PARAMSENTRY.containing_type = _VINDEX _VINDEX.fields_by_name['params'].message_type = _VINDEX_PARAMSENTRY _TABLE.fields_by_name['column_vindexes'].message_type = _COLUMNVINDEX diff --git a/test/config.json b/test/config.json index 86c8ba830f3..335d203e489 100644 --- a/test/config.json +++ b/test/config.json @@ -19,51 +19,57 @@ "RetryMax": 0, "Tags": [] }, - "xtrabackup": { - "File": "xtrabackup.py", + "binlog": { + "File": "binlog.py", "Args": [], "Command": [], "Manual": false, - "Shard": 3, + "Shard": 4, "RetryMax": 0, - "Tags": [] + "Tags": [ + "worker_test" + ] }, - "xtrabackup_xbstream": { - "File": "xtrabackup_xbstream.py", + "cache_invalidation": { + "File": "cache_invalidation.py", "Args": [], "Command": [], "Manual": false, - "Shard": 3, + "Shard": 1, "RetryMax": 0, "Tags": [] }, - "xtrabackup_xtra": { - "File": "xtrabackup_xtra.py", + "cell_aliases": { + "File": "cell_aliases.py", "Args": [], "Command": [], "Manual": false, - "Shard": 3, + "Shard": 1, "RetryMax": 0, - "Tags": [] + "Tags": [ + "site_test" + ] }, - "binlog": { - "File": "binlog.py", + "cell_no_aliases": { + "File": "cell_no_aliases.py", "Args": [], "Command": [], "Manual": false, - "Shard": 4, + "Shard": 1, "RetryMax": 0, "Tags": [ - "worker_test" + "site_test" ] }, - "cache_invalidation": { - "File": "cache_invalidation.py", + "check_make_parser": { + "File": "", "Args": [], - "Command": [], + "Command": [ + "tools/check_make_parser.sh" + ], "Manual": false, - "Shard": 1, - "RetryMax": 0, + "Shard": 0, + "RetryMax": 1, "Tags": [] }, "custom_sharding": { @@ -126,39 +132,6 @@ "worker_test" ] }, - "legacy_resharding": { - "File": "legacy_resharding.py", - "Args": [], - "Command": [], - "Manual": false, - "Shard": 1, - "RetryMax": 0, - "Tags": [ - "worker_test" - ] - }, - "merge_sharding": { - "File": "merge_sharding.py", - "Args": [], - "Command": [], - "Manual": false, - "Shard": 3, - "RetryMax": 0, - "Tags": [ - "worker_test" - ] - }, - "merge_sharding_bytes": { - "File": "merge_sharding_bytes.py", - "Args": [], - "Command": [], - "Manual": false, - "Shard": 4, - "RetryMax": 0, - "Tags": [ - "worker_test" - ] - }, "java": { "File": "", "Args": [], @@ -195,6 +168,17 @@ "site_test" ] }, + "legacy_resharding": { + "File": "legacy_resharding.py", + "Args": [], + "Command": [], + "Manual": false, + "Shard": 1, + "RetryMax": 0, + "Tags": [ + "worker_test" + ] + }, "local_example": { "File": "", "Args": [], @@ -206,28 +190,37 @@ "RetryMax": 0, "Tags": [] }, - "cell_no_aliases": { - "File": "cell_no_aliases.py", + "merge_sharding": { + "File": "merge_sharding.py", "Args": [], "Command": [], "Manual": false, - "Shard": 1, + "Shard": 3, "RetryMax": 0, "Tags": [ - "site_test" + "worker_test" ] }, - "cell_aliases": { - "File": "cell_aliases.py", + "merge_sharding_bytes": { + "File": "merge_sharding_bytes.py", "Args": [], "Command": [], "Manual": false, - "Shard": 1, + "Shard": 4, "RetryMax": 0, "Tags": [ - "site_test" + "worker_test" ] }, + "messaging": { + "File": "messaging.py", + "Args": [], + "Command": [], + "Manual": false, + "Shard": 4, + "RetryMax": 0, + "Tags": [] + }, "mysql_server": { "File": "mysql_server_test.py", "Args": [], @@ -248,23 +241,21 @@ "site_test" ] }, - "check_make_parser": { - "File": "", + "python_client": { + "File": "python_client_test.py", "Args": [], - "Command": [ - "tools/check_make_parser.sh" - ], + "Command": [], "Manual": false, "Shard": 0, - "RetryMax": 1, + "RetryMax": 0, "Tags": [] }, - "python_client": { - "File": "python_client_test.py", + "recovery": { + "File": "recovery.py", "Args": [], "Command": [], "Manual": false, - "Shard": 0, + "Shard": 4, "RetryMax": 0, "Tags": [] }, @@ -482,15 +473,6 @@ "RetryMax": 0, "Tags": [] }, - "messaging": { - "File": "messaging.py", - "Args": [], - "Command": [], - "Manual": false, - "Shard": 4, - "RetryMax": 0, - "Tags": [] - }, "vttest_sample": { "File": "vttest_sample_test.py", "Args": [], @@ -510,6 +492,33 @@ "Tags": [ "worker_test" ] + }, + "xtrabackup": { + "File": "xtrabackup.py", + "Args": [], + "Command": [], + "Manual": false, + "Shard": 3, + "RetryMax": 0, + "Tags": [] + }, + "xtrabackup_xbstream": { + "File": "xtrabackup_xbstream.py", + "Args": [], + "Command": [], + "Manual": false, + "Shard": 3, + "RetryMax": 0, + "Tags": [] + }, + "xtrabackup_xtra": { + "File": "xtrabackup_xtra.py", + "Args": [], + "Command": [], + "Manual": false, + "Shard": 3, + "RetryMax": 0, + "Tags": [] } } } diff --git a/test/recovery.py b/test/recovery.py new file mode 100755 index 00000000000..c21a95f3a8e --- /dev/null +++ b/test/recovery.py @@ -0,0 +1,299 @@ +#!/usr/bin/env python + +# Copyright 2017 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import datetime +import json +import logging +import os +import unittest + +import MySQLdb + +import environment +import tablet +import utils + +use_mysqlctld = False +use_xtrabackup = False +stream_mode = 'tar' +tablet_master = None +tablet_replica1 = None +tablet_replica2 = None +xtrabackup_args = [] +new_init_db = '' +db_credentials_file = '' + + +def setUpModule(): + global new_init_db, db_credentials_file + global tablet_master, tablet_replica1, tablet_replica2 + + tablet_master = tablet.Tablet(use_mysqlctld=use_mysqlctld, + vt_dba_passwd='VtDbaPass') + tablet_replica1 = tablet.Tablet(use_mysqlctld=use_mysqlctld, + vt_dba_passwd='VtDbaPass') + tablet_replica2 = tablet.Tablet(use_mysqlctld=use_mysqlctld, + vt_dba_passwd='VtDbaPass') + + try: + environment.topo_server().setup() + + # Create a new init_db.sql file that sets up passwords for all users. + # Then we use a db-credentials-file with the passwords. + new_init_db = environment.tmproot + '/init_db_with_passwords.sql' + with open(environment.vttop + '/config/init_db.sql') as fd: + init_db = fd.read() + with open(new_init_db, 'w') as fd: + fd.write(init_db) + fd.write(''' +# Set real passwords for all users. +ALTER USER 'root'@'localhost' IDENTIFIED BY 'RootPass'; +ALTER USER 'vt_dba'@'localhost' IDENTIFIED BY 'VtDbaPass'; +ALTER USER 'vt_app'@'localhost' IDENTIFIED BY 'VtAppPass'; +ALTER USER 'vt_allprivs'@'localhost' IDENTIFIED BY 'VtAllPrivsPass'; +ALTER USER 'vt_repl'@'%' IDENTIFIED BY 'VtReplPass'; +ALTER USER 'vt_filtered'@'localhost' IDENTIFIED BY 'VtFilteredPass'; +FLUSH PRIVILEGES; +''') + credentials = { + 'vt_dba': ['VtDbaPass'], + 'vt_app': ['VtAppPass'], + 'vt_allprivs': ['VtAllprivsPass'], + 'vt_repl': ['VtReplPass'], + 'vt_filtered': ['VtFilteredPass'], + } + db_credentials_file = environment.tmproot+'/db_credentials.json' + with open(db_credentials_file, 'w') as fd: + fd.write(json.dumps(credentials)) + + # start mysql instance external to the test + setup_procs = [ + tablet_master.init_mysql(init_db=new_init_db, + extra_args=['-db-credentials-file', + db_credentials_file]), + tablet_replica1.init_mysql(init_db=new_init_db, + extra_args=['-db-credentials-file', + db_credentials_file]), + tablet_replica2.init_mysql(init_db=new_init_db, + extra_args=['-db-credentials-file', + db_credentials_file]), + ] + if use_mysqlctld: + tablet_master.wait_for_mysqlctl_socket() + tablet_replica1.wait_for_mysqlctl_socket() + tablet_replica2.wait_for_mysqlctl_socket() + else: + utils.wait_procs(setup_procs) + except: + tearDownModule() + raise + + +def tearDownModule(): + utils.required_teardown() + if utils.options.skip_teardown: + return + + teardown_procs = [ + tablet_master.teardown_mysql(extra_args=['-db-credentials-file', + db_credentials_file]), + tablet_replica1.teardown_mysql(extra_args=['-db-credentials-file', + db_credentials_file]), + tablet_replica2.teardown_mysql(extra_args=['-db-credentials-file', + db_credentials_file]), + ] + utils.wait_procs(teardown_procs, raise_on_error=False) + + environment.topo_server().teardown() + utils.kill_sub_processes() + utils.remove_tmp_files() + + tablet_master.remove_tree() + tablet_replica1.remove_tree() + tablet_replica2.remove_tree() + + +class TestVttabletRecovery(unittest.TestCase): + + def setUp(self): + for t in tablet_master, tablet_replica1: + t.create_db('vt_test_keyspace') + + xtra_args = ['-db-credentials-file', db_credentials_file, '-enable_replication_reporter'] + tablet_master.init_tablet('replica', 'test_keyspace', '0', start=True, + supports_backups=True, + extra_args=xtra_args) + tablet_replica1.init_tablet('replica', 'test_keyspace', '0', start=True, + supports_backups=True, + extra_args=xtra_args) + utils.run_vtctl(['InitShardMaster', '-force', 'test_keyspace/0', + tablet_master.tablet_alias]) + + def tearDown(self): + for t in tablet_master, tablet_replica1, tablet_replica2: + t.kill_vttablet() + + tablet.Tablet.check_vttablet_count() + environment.topo_server().wipe() + for t in [tablet_master, tablet_replica1, tablet_replica2]: + t.reset_replication() + t.set_semi_sync_enabled(master=False, slave=False) + t.clean_dbs() + + #for backup in self._list_backups(): + #self._remove_backup(backup) + + _create_vt_insert_test = '''create table vt_insert_test ( + id bigint auto_increment, + msg varchar(64), + primary key (id) + ) Engine=InnoDB''' + + def _insert_data(self, t, index): + """Add a single row with value 'index' to the given tablet.""" + t.mquery( + 'vt_test_keyspace', + "insert into vt_insert_test (msg) values ('test %s')" % + index, write=True) + + def _check_data(self, t, count, msg): + """Check that the specified tablet has the expected number of rows.""" + timeout = 10 + while True: + try: + result = t.mquery( + 'vt_test_keyspace', 'select count(*) from vt_insert_test') + if result[0][0] == count: + break + except MySQLdb.DatabaseError: + # ignore exceptions, we'll just timeout (the tablet creation + # can take some time to replicate, and we get a 'table vt_insert_test + # does not exist exception in some rare cases) + logging.exception('exception waiting for data to replicate') + timeout = utils.wait_step(msg, timeout) + + def _restore(self, t): + """Erase mysql/tablet dir, then start tablet with restore enabled.""" + self._reset_tablet_dir(t) + + # create a recovery keyspace + utils.run_vtctl(['CreateKeyspace', + '-keyspace_type=SNAPSHOT', + '-snapshot_time', + datetime.datetime.utcnow().isoformat("T")+"Z", + 'recovery_keyspace']) + + xtra_args = ['-db-credentials-file', + db_credentials_file, + '-disable_active_reparents', + '-enable_replication_reporter=false', + '-recovery_keyspace', + 'test_keyspace'] + xtra_args.extend(tablet.get_backup_storage_flags()) + + # set disable_active_reparents to true, otherwise replication_reporter will + # try to restart replication + t.start_vttablet(wait_for_state='SERVING', + init_tablet_type='replica', + init_keyspace='recovery_keyspace', + init_shard='0', + supports_backups=True, + extra_args=xtra_args) + + def _reset_tablet_dir(self, t): + """Stop mysql, delete everything including tablet dir, restart mysql.""" + extra_args = ['-db-credentials-file', db_credentials_file] + utils.wait_procs([t.teardown_mysql(extra_args=extra_args)]) + # Specify ignore_options because we want to delete the tree even + # if the test's -k / --keep-logs was specified on the command line. + t.remove_tree(ignore_options=True) + proc = t.init_mysql(init_db=new_init_db, extra_args=extra_args) + if use_mysqlctld: + t.wait_for_mysqlctl_socket() + else: + utils.wait_procs([proc]) + + def _list_backups(self): + """Get a list of backup names for the test shard.""" + backups, _ = utils.run_vtctl(tablet.get_backup_storage_flags() + + ['ListBackups', 'test_keyspace/0'], + mode=utils.VTCTL_VTCTL, trap_output=True) + return backups.splitlines() + + def _remove_backup(self, backup): + """Remove a named backup from the test shard.""" + utils.run_vtctl( + tablet.get_backup_storage_flags() + + ['RemoveBackup', 'test_keyspace/0', backup], + auto_log=True, mode=utils.VTCTL_VTCTL) + + def test_recovery(self): + """Test recovery from backup flow. + + test_recovery will: + - create a shard with master and replica1 only + - run InitShardMaster + - insert some data + - take a backup + - insert more data on the master + - bring up tablet_replica2 after the fact, let it restore the backup + - check all data is right (before+after backup data) + - list the backup, remove it + + """ + + # insert data on master, wait for slave to get it + tablet_master.mquery('vt_test_keyspace', self._create_vt_insert_test) + self._insert_data(tablet_master, 1) + self._check_data(tablet_replica1, 1, 'replica1 tablet getting data') + + # backup the slave + utils.run_vtctl(['Backup', tablet_replica1.tablet_alias], auto_log=True) + + # check that the backup shows up in the listing + backups = self._list_backups() + logging.debug('list of backups: %s', backups) + self.assertEqual(len(backups), 1) + self.assertTrue(backups[0].endswith(tablet_replica1.tablet_alias)) + + # insert more data on the master + self._insert_data(tablet_master, 2) + + # now bring up the other slave, letting it restore from backup. + self._restore(tablet_replica2) + + # check the new slave does not have the data + self._check_data(tablet_replica2, 1, 'replica2 tablet should not have new data') + + # check that the restored slave has the right local_metadata + result = tablet_replica2.mquery('_vt', 'select * from local_metadata') + metadata = {} + for row in result: + metadata[row[0]] = row[1] + self.assertEqual(metadata['Alias'], 'test_nj-0000062346') + self.assertEqual(metadata['ClusterAlias'], 'recovery_keyspace.0') + self.assertEqual(metadata['DataCenter'], 'test_nj') + + # TODO start vtgate + + # TODO check that vtgate doesn't route queries to new tablet + + # TODO check that new tablet is accessible by using ks:0.table + + tablet_replica2.kill_vttablet() + +if __name__ == '__main__': + utils.main() diff --git a/test/tablet.py b/test/tablet.py index 06e80492469..56718b3cd63 100644 --- a/test/tablet.py +++ b/test/tablet.py @@ -482,7 +482,7 @@ def start_vttablet( args.extend(['-pid_file', os.path.join(self.tablet_dir, 'vttablet.pid')]) # always enable_replication_reporter with somewhat short values for tests args.extend(['-health_check_interval', '2s']) - args.extend(['-enable_replication_reporter']) + #args.extend(['-enable_replication_reporter']) args.extend(['-degraded_threshold', '5s']) args.extend(['-lock_tables_timeout', '5s']) args.extend(['-watch_replication_stream']) From 359b2f2263a9a135764803aa8f5224c6e0745036 Mon Sep 17 00:00:00 2001 From: deepthi Date: Wed, 8 May 2019 21:19:17 -0700 Subject: [PATCH 02/17] unit test for CreateKeyspace, fix CI test failures Signed-off-by: deepthi --- go/vt/vtctld/api_test.go | 16 +++++++++++++++- test/tablet.py | 2 +- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/go/vt/vtctld/api_test.go b/go/vt/vtctld/api_test.go index fd4bab30570..cbe91676fb7 100644 --- a/go/vt/vtctld/api_test.go +++ b/go/vt/vtctld/api_test.go @@ -24,9 +24,11 @@ import ( "net/http/httptest" "strings" "testing" + "time" "golang.org/x/net/context" + "vitess.io/vitess/go/vt/logutil" "vitess.io/vitess/go/vt/topo/memorytopo" "vitess.io/vitess/go/vt/wrangler" @@ -105,6 +107,14 @@ func TestAPI(t *testing.T) { realtimeStats.StatsUpdate(ts5) realtimeStats.StatsUpdate(ts6) + sTime := logutil.TimeToProto(time.Unix(0, 0).UTC()) + + ts.CreateKeyspace(ctx, "ks3", &topodatapb.Keyspace{ + ShardingColumnName: "shardcol", + KeyspaceType: topodatapb.KeyspaceType_SNAPSHOT, + SnapshotTime: sTime, + }) + // Test cases. table := []struct { method, path, body, want string @@ -113,7 +123,7 @@ func TestAPI(t *testing.T) { {"GET", "cells", "", `["cell1","cell2"]`}, // Keyspaces - {"GET", "keyspaces", "", `["ks1"]`}, + {"GET", "keyspaces", "", `["ks1", "ks3"]`}, {"GET", "keyspaces/ks1", "", `{ "sharding_column_name": "shardcol", "sharding_column_type": 0, @@ -258,6 +268,10 @@ func TestAPI(t *testing.T) { "Error": "", "Output": "{\n \"sharding_column_name\": \"shardcol\",\n \"sharding_column_type\": 0,\n \"served_froms\": [\n ],\n \"keyspace_type\": 0,\n \"snapshot_time\": null\n}\n\n" }`}, + {"POST", "vtctl/", `["GetKeyspace","ks3"]`, `{ + "Error": "", + "Output": "{\n \"sharding_column_name\": \"shardcol\",\n \"sharding_column_type\": 0,\n \"served_froms\": [\n ],\n \"keyspace_type\": 1,\n \"snapshot_time\": {\n \"seconds\": \"0\",\n \"nanoseconds\": 0\n }\n}\n\n" + }`}, {"POST", "vtctl/", `["GetKeyspace","does_not_exist"]`, `{ "Error": "node doesn't exist: keyspaces/does_not_exist/Keyspace", "Output": "" diff --git a/test/tablet.py b/test/tablet.py index 56718b3cd63..06e80492469 100644 --- a/test/tablet.py +++ b/test/tablet.py @@ -482,7 +482,7 @@ def start_vttablet( args.extend(['-pid_file', os.path.join(self.tablet_dir, 'vttablet.pid')]) # always enable_replication_reporter with somewhat short values for tests args.extend(['-health_check_interval', '2s']) - #args.extend(['-enable_replication_reporter']) + args.extend(['-enable_replication_reporter']) args.extend(['-degraded_threshold', '5s']) args.extend(['-lock_tables_timeout', '5s']) args.extend(['-watch_replication_stream']) From 4bbd80ceb4f8febe845fdc62a4e9cb0593d7c077 Mon Sep 17 00:00:00 2001 From: deepthi Date: Thu, 9 May 2019 11:40:52 -0700 Subject: [PATCH 03/17] fix xtrabackup backup file checking to work correctly when snapshot_time is not set Signed-off-by: deepthi --- go/vt/mysqlctl/builtinbackupengine.go | 2 +- go/vt/mysqlctl/xtrabackupengine.go | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/go/vt/mysqlctl/builtinbackupengine.go b/go/vt/mysqlctl/builtinbackupengine.go index 3372e0248f9..df4c2297f79 100644 --- a/go/vt/mysqlctl/builtinbackupengine.go +++ b/go/vt/mysqlctl/builtinbackupengine.go @@ -549,7 +549,7 @@ func (be *BuiltinBackupEngine) ExecuteRestore( } if toRestore < 0 { if snapshotTime.After(unixZeroTime) { - return mysql.Position{}, vterrors.Errorf(vtrpc.Code_NOT_FOUND, "No valid backup found before time %v", snapshotTime.Format("2006-01-02.150405")) + return mysql.Position{}, vterrors.Errorf(vtrpc.Code_NOT_FOUND, "No valid backup found before time %v", snapshotTime.Format(time.RFC3339)) } // There is at least one attempted backup, but none could be read. // This implies there is data we ought to have, so it's not safe to start diff --git a/go/vt/mysqlctl/xtrabackupengine.go b/go/vt/mysqlctl/xtrabackupengine.go index 15d0830945e..6853570bb77 100644 --- a/go/vt/mysqlctl/xtrabackupengine.go +++ b/go/vt/mysqlctl/xtrabackupengine.go @@ -256,6 +256,7 @@ func (be *XtrabackupEngine) ExecuteRestore( var bm xtraBackupManifest var index int zeroPosition := mysql.Position{} + unixZeroTime := time.Unix(0, 0).UTC() for index = len(bhs) - 1; index >= 0; index-- { bh = bhs[index] @@ -271,13 +272,15 @@ func (be *XtrabackupEngine) ExecuteRestore( log.Warningf("Possibly incomplete backup %v in directory %v on BackupStorage (cannot JSON decode MANIFEST: %v)", bh.Name(), dir, err) continue } - - if bm.BackupTime.Before(snapshotTime) { + if snapshotTime.Equal(unixZeroTime) /* uninitialized or not snapshot */ || bm.BackupTime.Before(snapshotTime) { logger.Infof("Restore: found backup %v %v to restore with %v file", bh.Directory(), bh.Name(), bm.FileName) break } } if index < 0 { + if snapshotTime.After(unixZeroTime) { + return mysql.Position{}, vterrors.Errorf(vtrpc.Code_NOT_FOUND, "No valid backup found before time %v", snapshotTime.Format(time.RFC3339)) + } // There is at least one attempted backup, but none could be read. // This implies there is data we ought to have, so it's not safe to start // up empty. From 5c337297fc21b3a7dddcc2c7f86ad556589bef3c Mon Sep 17 00:00:00 2001 From: deepthi Date: Wed, 29 May 2019 15:20:46 -0700 Subject: [PATCH 04/17] remove -recovery_keyspace option for vttablet, add -base_keyspace option for CreateKeyspace call RebuildVSchemaGraph after copying vschema for snapshot keyspace Signed-off-by: deepthi --- go/vt/proto/topodata/topodata.pb.go | 227 ++++++++++---------- go/vt/vtctl/vtctl.go | 57 ++--- go/vt/vttablet/tabletmanager/init_tablet.go | 16 +- go/vt/vttablet/tabletmanager/restore.go | 11 +- proto/topodata.proto | 6 +- py/vtproto/topodata_pb2.py | 67 +++--- test/recovery.py | 68 ++++-- 7 files changed, 261 insertions(+), 191 deletions(-) diff --git a/go/vt/proto/topodata/topodata.pb.go b/go/vt/proto/topodata/topodata.pb.go index 82fc225f6a6..aa6c92f209a 100644 --- a/go/vt/proto/topodata/topodata.pb.go +++ b/go/vt/proto/topodata/topodata.pb.go @@ -42,7 +42,7 @@ func (x KeyspaceType) String() string { return proto.EnumName(KeyspaceType_name, int32(x)) } func (KeyspaceType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{0} + return fileDescriptor_topodata_5534b108e94bf28c, []int{0} } // KeyspaceIdType describes the type of the sharding key for a @@ -75,7 +75,7 @@ func (x KeyspaceIdType) String() string { return proto.EnumName(KeyspaceIdType_name, int32(x)) } func (KeyspaceIdType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{1} + return fileDescriptor_topodata_5534b108e94bf28c, []int{1} } // TabletType represents the type of a given tablet. @@ -144,7 +144,7 @@ func (x TabletType) String() string { return proto.EnumName(TabletType_name, int32(x)) } func (TabletType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{2} + return fileDescriptor_topodata_5534b108e94bf28c, []int{2} } // KeyRange describes a range of sharding keys, when range-based @@ -161,7 +161,7 @@ func (m *KeyRange) Reset() { *m = KeyRange{} } func (m *KeyRange) String() string { return proto.CompactTextString(m) } func (*KeyRange) ProtoMessage() {} func (*KeyRange) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{0} + return fileDescriptor_topodata_5534b108e94bf28c, []int{0} } func (m *KeyRange) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KeyRange.Unmarshal(m, b) @@ -211,7 +211,7 @@ func (m *TabletAlias) Reset() { *m = TabletAlias{} } func (m *TabletAlias) String() string { return proto.CompactTextString(m) } func (*TabletAlias) ProtoMessage() {} func (*TabletAlias) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{1} + return fileDescriptor_topodata_5534b108e94bf28c, []int{1} } func (m *TabletAlias) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TabletAlias.Unmarshal(m, b) @@ -287,7 +287,7 @@ func (m *Tablet) Reset() { *m = Tablet{} } func (m *Tablet) String() string { return proto.CompactTextString(m) } func (*Tablet) ProtoMessage() {} func (*Tablet) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{2} + return fileDescriptor_topodata_5534b108e94bf28c, []int{2} } func (m *Tablet) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Tablet.Unmarshal(m, b) @@ -422,7 +422,7 @@ func (m *Shard) Reset() { *m = Shard{} } func (m *Shard) String() string { return proto.CompactTextString(m) } func (*Shard) ProtoMessage() {} func (*Shard) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{3} + return fileDescriptor_topodata_5534b108e94bf28c, []int{3} } func (m *Shard) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Shard.Unmarshal(m, b) @@ -497,7 +497,7 @@ func (m *Shard_ServedType) Reset() { *m = Shard_ServedType{} } func (m *Shard_ServedType) String() string { return proto.CompactTextString(m) } func (*Shard_ServedType) ProtoMessage() {} func (*Shard_ServedType) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{3, 0} + return fileDescriptor_topodata_5534b108e94bf28c, []int{3, 0} } func (m *Shard_ServedType) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Shard_ServedType.Unmarshal(m, b) @@ -554,7 +554,7 @@ func (m *Shard_SourceShard) Reset() { *m = Shard_SourceShard{} } func (m *Shard_SourceShard) String() string { return proto.CompactTextString(m) } func (*Shard_SourceShard) ProtoMessage() {} func (*Shard_SourceShard) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{3, 1} + return fileDescriptor_topodata_5534b108e94bf28c, []int{3, 1} } func (m *Shard_SourceShard) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Shard_SourceShard.Unmarshal(m, b) @@ -627,7 +627,7 @@ func (m *Shard_TabletControl) Reset() { *m = Shard_TabletControl{} } func (m *Shard_TabletControl) String() string { return proto.CompactTextString(m) } func (*Shard_TabletControl) ProtoMessage() {} func (*Shard_TabletControl) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{3, 2} + return fileDescriptor_topodata_5534b108e94bf28c, []int{3, 2} } func (m *Shard_TabletControl) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Shard_TabletControl.Unmarshal(m, b) @@ -691,10 +691,13 @@ type Keyspace struct { // any query. Snapshot keyspaces are only accessible // by explicit addresssing or by calling "use keyspace" first KeyspaceType KeyspaceType `protobuf:"varint,5,opt,name=keyspace_type,json=keyspaceType,proto3,enum=topodata.KeyspaceType" json:"keyspace_type,omitempty"` + // base_keyspace is the base keyspace from which a snapshot + // keyspace is created. empty for normal keyspaces + BaseKeyspace string `protobuf:"bytes,6,opt,name=base_keyspace,json=baseKeyspace,proto3" json:"base_keyspace,omitempty"` // snapshot_time (in UTC) is a property of snapshot // keyspaces which tells us what point in time // the snapshot is of - SnapshotTime *vttime.Time `protobuf:"bytes,6,opt,name=snapshot_time,json=snapshotTime,proto3" json:"snapshot_time,omitempty"` + SnapshotTime *vttime.Time `protobuf:"bytes,7,opt,name=snapshot_time,json=snapshotTime,proto3" json:"snapshot_time,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -704,7 +707,7 @@ func (m *Keyspace) Reset() { *m = Keyspace{} } func (m *Keyspace) String() string { return proto.CompactTextString(m) } func (*Keyspace) ProtoMessage() {} func (*Keyspace) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{4} + return fileDescriptor_topodata_5534b108e94bf28c, []int{4} } func (m *Keyspace) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Keyspace.Unmarshal(m, b) @@ -752,6 +755,13 @@ func (m *Keyspace) GetKeyspaceType() KeyspaceType { return KeyspaceType_NORMAL } +func (m *Keyspace) GetBaseKeyspace() string { + if m != nil { + return m.BaseKeyspace + } + return "" +} + func (m *Keyspace) GetSnapshotTime() *vttime.Time { if m != nil { return m.SnapshotTime @@ -777,7 +787,7 @@ func (m *Keyspace_ServedFrom) Reset() { *m = Keyspace_ServedFrom{} } func (m *Keyspace_ServedFrom) String() string { return proto.CompactTextString(m) } func (*Keyspace_ServedFrom) ProtoMessage() {} func (*Keyspace_ServedFrom) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{4, 0} + return fileDescriptor_topodata_5534b108e94bf28c, []int{4, 0} } func (m *Keyspace_ServedFrom) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Keyspace_ServedFrom.Unmarshal(m, b) @@ -833,7 +843,7 @@ func (m *ShardReplication) Reset() { *m = ShardReplication{} } func (m *ShardReplication) String() string { return proto.CompactTextString(m) } func (*ShardReplication) ProtoMessage() {} func (*ShardReplication) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{5} + return fileDescriptor_topodata_5534b108e94bf28c, []int{5} } func (m *ShardReplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardReplication.Unmarshal(m, b) @@ -872,7 +882,7 @@ func (m *ShardReplication_Node) Reset() { *m = ShardReplication_Node{} } func (m *ShardReplication_Node) String() string { return proto.CompactTextString(m) } func (*ShardReplication_Node) ProtoMessage() {} func (*ShardReplication_Node) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{5, 0} + return fileDescriptor_topodata_5534b108e94bf28c, []int{5, 0} } func (m *ShardReplication_Node) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardReplication_Node.Unmarshal(m, b) @@ -913,7 +923,7 @@ func (m *ShardReference) Reset() { *m = ShardReference{} } func (m *ShardReference) String() string { return proto.CompactTextString(m) } func (*ShardReference) ProtoMessage() {} func (*ShardReference) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{6} + return fileDescriptor_topodata_5534b108e94bf28c, []int{6} } func (m *ShardReference) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardReference.Unmarshal(m, b) @@ -963,7 +973,7 @@ func (m *ShardTabletControl) Reset() { *m = ShardTabletControl{} } func (m *ShardTabletControl) String() string { return proto.CompactTextString(m) } func (*ShardTabletControl) ProtoMessage() {} func (*ShardTabletControl) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{7} + return fileDescriptor_topodata_5534b108e94bf28c, []int{7} } func (m *ShardTabletControl) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardTabletControl.Unmarshal(m, b) @@ -1021,7 +1031,7 @@ func (m *SrvKeyspace) Reset() { *m = SrvKeyspace{} } func (m *SrvKeyspace) String() string { return proto.CompactTextString(m) } func (*SrvKeyspace) ProtoMessage() {} func (*SrvKeyspace) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{8} + return fileDescriptor_topodata_5534b108e94bf28c, []int{8} } func (m *SrvKeyspace) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SrvKeyspace.Unmarshal(m, b) @@ -1085,7 +1095,7 @@ func (m *SrvKeyspace_KeyspacePartition) Reset() { *m = SrvKeyspace_Keysp func (m *SrvKeyspace_KeyspacePartition) String() string { return proto.CompactTextString(m) } func (*SrvKeyspace_KeyspacePartition) ProtoMessage() {} func (*SrvKeyspace_KeyspacePartition) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{8, 0} + return fileDescriptor_topodata_5534b108e94bf28c, []int{8, 0} } func (m *SrvKeyspace_KeyspacePartition) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SrvKeyspace_KeyspacePartition.Unmarshal(m, b) @@ -1142,7 +1152,7 @@ func (m *SrvKeyspace_ServedFrom) Reset() { *m = SrvKeyspace_ServedFrom{} func (m *SrvKeyspace_ServedFrom) String() string { return proto.CompactTextString(m) } func (*SrvKeyspace_ServedFrom) ProtoMessage() {} func (*SrvKeyspace_ServedFrom) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{8, 1} + return fileDescriptor_topodata_5534b108e94bf28c, []int{8, 1} } func (m *SrvKeyspace_ServedFrom) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SrvKeyspace_ServedFrom.Unmarshal(m, b) @@ -1197,7 +1207,7 @@ func (m *CellInfo) Reset() { *m = CellInfo{} } func (m *CellInfo) String() string { return proto.CompactTextString(m) } func (*CellInfo) ProtoMessage() {} func (*CellInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{9} + return fileDescriptor_topodata_5534b108e94bf28c, []int{9} } func (m *CellInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CellInfo.Unmarshal(m, b) @@ -1244,7 +1254,7 @@ func (m *CellsAlias) Reset() { *m = CellsAlias{} } func (m *CellsAlias) String() string { return proto.CompactTextString(m) } func (*CellsAlias) ProtoMessage() {} func (*CellsAlias) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_bade7f4e9afd1b8c, []int{10} + return fileDescriptor_topodata_5534b108e94bf28c, []int{10} } func (m *CellsAlias) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CellsAlias.Unmarshal(m, b) @@ -1297,90 +1307,91 @@ func init() { proto.RegisterEnum("topodata.TabletType", TabletType_name, TabletType_value) } -func init() { proto.RegisterFile("topodata.proto", fileDescriptor_topodata_bade7f4e9afd1b8c) } - -var fileDescriptor_topodata_bade7f4e9afd1b8c = []byte{ - // 1301 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xe1, 0x6e, 0xdb, 0x46, - 0x12, 0x0e, 0x25, 0x4a, 0xa6, 0x86, 0x94, 0xcc, 0xec, 0x39, 0x01, 0xc1, 0xbb, 0xe0, 0x0c, 0x01, - 0xc1, 0x09, 0x3e, 0x54, 0x6e, 0x9d, 0xa4, 0x35, 0x52, 0x14, 0x88, 0x22, 0x2b, 0x8d, 0x63, 0x5b, - 0x16, 0x56, 0x32, 0xda, 0xf4, 0x0f, 0x41, 0x4b, 0x6b, 0x87, 0x30, 0x45, 0x2a, 0xdc, 0xb5, 0x00, - 0xf5, 0x15, 0xfa, 0xa3, 0xed, 0xdf, 0xbe, 0x41, 0x9f, 0xa0, 0xe8, 0xe3, 0xb4, 0x4f, 0x52, 0xec, - 0x2c, 0x29, 0x51, 0x52, 0x92, 0x3a, 0x85, 0xff, 0xcd, 0xec, 0xce, 0x0c, 0x67, 0xbe, 0x99, 0x6f, - 0x56, 0x82, 0x9a, 0x88, 0x27, 0xf1, 0xc8, 0x17, 0x7e, 0x73, 0x92, 0xc4, 0x22, 0x26, 0x46, 0xa6, - 0xbb, 0x20, 0x82, 0x31, 0x53, 0xa7, 0xf5, 0x3d, 0x30, 0x8e, 0xd8, 0x8c, 0xfa, 0xd1, 0x25, 0x23, - 0x5b, 0x50, 0xe2, 0xc2, 0x4f, 0x84, 0xa3, 0x6d, 0x6b, 0x0d, 0x8b, 0x2a, 0x85, 0xd8, 0x50, 0x64, - 0xd1, 0xc8, 0x29, 0xe0, 0x99, 0x14, 0xeb, 0x8f, 0xc0, 0x1c, 0xf8, 0xe7, 0x21, 0x13, 0xad, 0x30, - 0xf0, 0x39, 0x21, 0xa0, 0x0f, 0x59, 0x18, 0xa2, 0x57, 0x85, 0xa2, 0x2c, 0x9d, 0xae, 0x03, 0xe5, - 0x54, 0xa5, 0x52, 0xac, 0xff, 0xae, 0x43, 0x59, 0x79, 0x91, 0xff, 0x43, 0xc9, 0x97, 0x9e, 0xe8, - 0x61, 0xee, 0xdd, 0x6b, 0xce, 0x33, 0xcd, 0x85, 0xa5, 0xca, 0x86, 0xb8, 0x60, 0xbc, 0x89, 0xb9, - 0x88, 0xfc, 0x31, 0xc3, 0x70, 0x15, 0x3a, 0xd7, 0xc9, 0x3e, 0x18, 0x93, 0x38, 0x11, 0xde, 0xd8, - 0x9f, 0x38, 0xfa, 0x76, 0xb1, 0x61, 0xee, 0x3d, 0x58, 0x8d, 0xd5, 0xec, 0xc5, 0x89, 0x38, 0xf1, - 0x27, 0x9d, 0x48, 0x24, 0x33, 0xba, 0x31, 0x51, 0x9a, 0x8c, 0x7a, 0xc5, 0x66, 0x7c, 0xe2, 0x0f, - 0x99, 0x53, 0x52, 0x51, 0x33, 0x1d, 0x61, 0x78, 0xe3, 0x27, 0x23, 0xa7, 0x8c, 0x17, 0x4a, 0x21, - 0xbb, 0x50, 0xb9, 0x62, 0x33, 0x2f, 0x91, 0x48, 0x39, 0x1b, 0x98, 0x38, 0x59, 0x7c, 0x2c, 0xc3, - 0x10, 0xc3, 0x28, 0x34, 0x1b, 0xa0, 0x8b, 0xd9, 0x84, 0x39, 0xc6, 0xb6, 0xd6, 0xa8, 0xed, 0x6d, - 0xad, 0x26, 0x36, 0x98, 0x4d, 0x18, 0x45, 0x0b, 0xd2, 0x00, 0x7b, 0x74, 0xee, 0xc9, 0x8a, 0xbc, - 0x78, 0xca, 0x92, 0x24, 0x18, 0x31, 0xa7, 0x82, 0xdf, 0xae, 0x8d, 0xce, 0xbb, 0xfe, 0x98, 0x9d, - 0xa6, 0xa7, 0xa4, 0x09, 0xba, 0xf0, 0x2f, 0xb9, 0x03, 0x58, 0xac, 0xbb, 0x56, 0xec, 0xc0, 0xbf, - 0xe4, 0xaa, 0x52, 0xb4, 0x23, 0x0f, 0xa1, 0x36, 0x9e, 0xf1, 0xb7, 0xa1, 0x37, 0x87, 0xd0, 0xc2, - 0xb8, 0x55, 0x3c, 0x7d, 0x99, 0xe1, 0xf8, 0x00, 0x40, 0x99, 0x49, 0x78, 0x9c, 0xea, 0xb6, 0xd6, - 0x28, 0xd1, 0x0a, 0x9e, 0x48, 0xf4, 0xdc, 0xa7, 0x60, 0xe5, 0x51, 0x94, 0xcd, 0xbd, 0x62, 0xb3, - 0xb4, 0xdf, 0x52, 0x94, 0x90, 0x4d, 0xfd, 0xf0, 0x5a, 0x75, 0xa8, 0x44, 0x95, 0xf2, 0xb4, 0xb0, - 0xaf, 0xb9, 0x5f, 0x40, 0x65, 0x9e, 0xd4, 0xdf, 0x39, 0x56, 0x72, 0x8e, 0xaf, 0x74, 0xa3, 0x68, - 0xeb, 0xaf, 0x74, 0xc3, 0xb4, 0xad, 0xfa, 0xcf, 0x65, 0x28, 0xf5, 0xb1, 0x0b, 0xfb, 0x60, 0x8d, - 0x7d, 0x2e, 0x58, 0xe2, 0xdd, 0x60, 0x82, 0x4c, 0x65, 0xaa, 0xa6, 0x74, 0xa9, 0x7f, 0x85, 0x1b, - 0xf4, 0xef, 0x2b, 0xb0, 0x38, 0x4b, 0xa6, 0x6c, 0xe4, 0xc9, 0x26, 0x71, 0xa7, 0xb8, 0x8a, 0x39, - 0x66, 0xd4, 0xec, 0xa3, 0x0d, 0x76, 0xd3, 0xe4, 0x73, 0x99, 0x93, 0x67, 0x50, 0xe5, 0xf1, 0x75, - 0x32, 0x64, 0x1e, 0xce, 0x0f, 0x4f, 0x07, 0xf4, 0xdf, 0x6b, 0xfe, 0x68, 0x84, 0x32, 0xb5, 0xf8, - 0x42, 0xe1, 0xe4, 0x05, 0x6c, 0x0a, 0xac, 0xc6, 0x1b, 0xc6, 0x91, 0x48, 0xe2, 0x90, 0x3b, 0xe5, - 0xd5, 0x21, 0x57, 0x31, 0x54, 0xd1, 0x6d, 0x65, 0x45, 0x6b, 0x22, 0xaf, 0x72, 0xb2, 0x03, 0x77, - 0x03, 0xee, 0xa5, 0xb0, 0xc9, 0x14, 0x83, 0xe8, 0x12, 0x27, 0xd8, 0xa0, 0x9b, 0x01, 0x3f, 0xc1, - 0xf3, 0xbe, 0x3a, 0x76, 0x5f, 0x03, 0x2c, 0x0a, 0x22, 0x4f, 0xc0, 0x4c, 0x33, 0xc0, 0x49, 0xd6, - 0x3e, 0x30, 0xc9, 0x20, 0xe6, 0xb2, 0x6c, 0xaa, 0x5c, 0x02, 0xdc, 0x29, 0x6c, 0x17, 0x65, 0x53, - 0x51, 0x71, 0x7f, 0xd1, 0xc0, 0xcc, 0x15, 0x9b, 0xad, 0x08, 0x6d, 0xbe, 0x22, 0x96, 0x48, 0x59, - 0x78, 0x1f, 0x29, 0x8b, 0xef, 0x25, 0xa5, 0x7e, 0x83, 0xa6, 0xde, 0x87, 0x32, 0x26, 0xca, 0x9d, - 0x12, 0xe6, 0x96, 0x6a, 0xee, 0xaf, 0x1a, 0x54, 0x97, 0x50, 0xbc, 0xd5, 0xda, 0xc9, 0x27, 0x40, - 0xce, 0x43, 0x7f, 0x78, 0x15, 0x06, 0x5c, 0xc8, 0x81, 0x52, 0x29, 0xe8, 0x68, 0x72, 0x37, 0x77, - 0x83, 0x41, 0xb9, 0xcc, 0xf2, 0x22, 0x89, 0xbf, 0x67, 0x11, 0xee, 0x26, 0x83, 0xa6, 0xda, 0x9c, - 0x13, 0x25, 0xbb, 0x5c, 0xff, 0xad, 0x88, 0x9b, 0x5b, 0xa1, 0xf3, 0x29, 0x6c, 0x21, 0x20, 0x41, - 0x74, 0xe9, 0x0d, 0xe3, 0xf0, 0x7a, 0x1c, 0xe1, 0x3a, 0x49, 0x99, 0x46, 0xb2, 0xbb, 0x36, 0x5e, - 0xc9, 0x8d, 0x42, 0x5e, 0xad, 0x7b, 0x60, 0x9d, 0x05, 0xac, 0xd3, 0x59, 0x02, 0x11, 0xbf, 0x71, - 0xa8, 0x66, 0x7c, 0x25, 0x16, 0xd6, 0xfc, 0x6c, 0xce, 0x94, 0x8b, 0x24, 0x1e, 0xf3, 0xf5, 0x55, - 0x9c, 0xc5, 0x48, 0xc9, 0xf2, 0x22, 0x89, 0xc7, 0x19, 0x59, 0xa4, 0xcc, 0xc9, 0x97, 0x50, 0xcd, - 0x3a, 0xad, 0xd2, 0x28, 0x61, 0x1a, 0xf7, 0xd7, 0x43, 0x60, 0x12, 0xd6, 0x55, 0x4e, 0x23, 0x9f, - 0x41, 0x95, 0x47, 0xfe, 0x84, 0xbf, 0x89, 0x85, 0x27, 0x5f, 0x36, 0xdc, 0xdb, 0xe6, 0x9e, 0xd5, - 0x9c, 0x0a, 0x7c, 0xe8, 0x06, 0xc1, 0x98, 0x51, 0x2b, 0x33, 0x91, 0x9a, 0x7b, 0x9d, 0x8d, 0xb9, - 0xfc, 0xfc, 0xed, 0xb6, 0x3a, 0x3f, 0xc4, 0xc5, 0xe5, 0x21, 0x56, 0xfd, 0xab, 0xff, 0xa0, 0x81, - 0xad, 0xf8, 0xce, 0x26, 0x61, 0x30, 0xf4, 0x45, 0x10, 0x47, 0xe4, 0x09, 0x94, 0xa2, 0x78, 0xc4, - 0xe4, 0x46, 0x93, 0xe0, 0xfd, 0x77, 0x85, 0xe2, 0x39, 0xd3, 0x66, 0x37, 0x1e, 0x31, 0xaa, 0xac, - 0xdd, 0x67, 0xa0, 0x4b, 0x55, 0xee, 0xc5, 0xb4, 0x84, 0x9b, 0xec, 0x45, 0xb1, 0x50, 0xea, 0x67, - 0x50, 0x4b, 0xbf, 0x70, 0xc1, 0x12, 0x16, 0x0d, 0x99, 0x7c, 0xcf, 0x73, 0xc3, 0x83, 0xf2, 0x47, - 0x6f, 0xcf, 0xfa, 0x8f, 0x1a, 0x10, 0x8c, 0xbb, 0xcc, 0xaa, 0xdb, 0x88, 0x4d, 0x1e, 0xc3, 0xfd, - 0xb7, 0xd7, 0x2c, 0x99, 0xa9, 0x65, 0x36, 0x64, 0xde, 0x28, 0xe0, 0xf2, 0x2b, 0x6a, 0x39, 0x18, - 0x74, 0x0b, 0x6f, 0xfb, 0xea, 0xf2, 0x20, 0xbd, 0xab, 0xff, 0xa9, 0x83, 0xd9, 0x4f, 0xa6, 0x73, - 0xce, 0x7c, 0x0d, 0x30, 0xf1, 0x13, 0x11, 0x48, 0x4c, 0x33, 0xd8, 0xff, 0x97, 0x83, 0x7d, 0x61, - 0x3a, 0x1f, 0xbe, 0x5e, 0x66, 0x4f, 0x73, 0xae, 0xef, 0x25, 0x5f, 0xe1, 0xa3, 0xc9, 0x57, 0xfc, - 0x07, 0xe4, 0x6b, 0x81, 0x99, 0x23, 0x5f, 0xca, 0xbd, 0xed, 0x77, 0xd7, 0x91, 0xa3, 0x1f, 0x2c, - 0xe8, 0xe7, 0xfe, 0xa1, 0xc1, 0xdd, 0xb5, 0x12, 0x25, 0x2b, 0x72, 0xef, 0xdf, 0x87, 0x59, 0xb1, - 0x78, 0xf8, 0x48, 0x1b, 0x6c, 0xcc, 0xd2, 0x4b, 0xb2, 0x81, 0x52, 0x04, 0x31, 0xf3, 0x75, 0x2d, - 0x4f, 0x1c, 0xdd, 0xe4, 0x4b, 0x3a, 0x27, 0x3d, 0xb8, 0xa7, 0x82, 0xac, 0x3e, 0x80, 0xea, 0x11, - 0xfe, 0xcf, 0x4a, 0xa4, 0xe5, 0xf7, 0xef, 0x5f, 0x7c, 0xed, 0x8c, 0xbb, 0xde, 0x6d, 0x30, 0xfe, - 0x03, 0x0f, 0x54, 0xba, 0x95, 0x8f, 0xc0, 0x68, 0xb3, 0x30, 0x3c, 0x8c, 0x2e, 0x62, 0xf9, 0xe3, - 0x0b, 0x71, 0x49, 0x3c, 0x7f, 0x34, 0x4a, 0x18, 0xe7, 0xe9, 0xd4, 0x57, 0xd5, 0x69, 0x4b, 0x1d, - 0x4a, 0x4a, 0x24, 0x71, 0x2c, 0xd2, 0x80, 0x28, 0xa7, 0x8b, 0xa2, 0x0e, 0x20, 0x83, 0x71, 0xf5, - 0x03, 0xe6, 0x9d, 0xeb, 0x66, 0xa7, 0x01, 0x56, 0x7e, 0x35, 0x12, 0x80, 0x72, 0xf7, 0x94, 0x9e, - 0xb4, 0x8e, 0xed, 0x3b, 0xc4, 0x02, 0xa3, 0xdf, 0x6d, 0xf5, 0xfa, 0x2f, 0x4f, 0x07, 0xb6, 0xb6, - 0xb3, 0x07, 0xb5, 0xe5, 0x71, 0x22, 0x15, 0x28, 0x9d, 0x75, 0xfb, 0x9d, 0x81, 0x7d, 0x47, 0xba, - 0x9d, 0x1d, 0x76, 0x07, 0x9f, 0x3f, 0xb6, 0x35, 0x79, 0xfc, 0xfc, 0xf5, 0xa0, 0xd3, 0xb7, 0x0b, - 0x3b, 0x3f, 0x69, 0x00, 0x0b, 0x2c, 0x88, 0x09, 0x1b, 0x67, 0xdd, 0xa3, 0xee, 0xe9, 0x37, 0x5d, - 0xe5, 0x72, 0xd2, 0xea, 0x0f, 0x3a, 0xd4, 0xd6, 0xe4, 0x05, 0xed, 0xf4, 0x8e, 0x0f, 0xdb, 0x2d, - 0xbb, 0x20, 0x2f, 0xe8, 0xc1, 0x69, 0xf7, 0xf8, 0xb5, 0x5d, 0xc4, 0x58, 0xad, 0x41, 0xfb, 0xa5, - 0x12, 0xfb, 0xbd, 0x16, 0xed, 0xd8, 0x3a, 0xb1, 0xc1, 0xea, 0x7c, 0xdb, 0xeb, 0xd0, 0xc3, 0x93, - 0x4e, 0x77, 0xd0, 0x3a, 0xb6, 0x4b, 0xd2, 0xe7, 0x79, 0xab, 0x7d, 0x74, 0xd6, 0xb3, 0xcb, 0x2a, - 0x58, 0x7f, 0x70, 0x4a, 0x3b, 0xf6, 0x86, 0x54, 0x0e, 0x68, 0xeb, 0xb0, 0xdb, 0x39, 0xb0, 0x0d, - 0xb7, 0x60, 0x6b, 0xcf, 0xf7, 0x61, 0x33, 0x88, 0x9b, 0xd3, 0x40, 0x30, 0xce, 0xd5, 0x7f, 0x98, - 0xef, 0x1e, 0xa6, 0x5a, 0x10, 0xef, 0x2a, 0x69, 0xf7, 0x32, 0xde, 0x9d, 0x8a, 0x5d, 0xbc, 0xdd, - 0xcd, 0x9a, 0x7a, 0x5e, 0x46, 0xfd, 0xd1, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xb7, 0xe6, 0x45, - 0xd0, 0x19, 0x0d, 0x00, 0x00, +func init() { proto.RegisterFile("topodata.proto", fileDescriptor_topodata_5534b108e94bf28c) } + +var fileDescriptor_topodata_5534b108e94bf28c = []byte{ + // 1314 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xe1, 0x6e, 0x1b, 0x45, + 0x10, 0xee, 0xd9, 0x67, 0xe7, 0x3c, 0x3e, 0x27, 0xd7, 0x25, 0xad, 0x4e, 0x07, 0x15, 0x91, 0x51, + 0x85, 0x15, 0x84, 0x03, 0x69, 0x0b, 0x51, 0x11, 0x52, 0x5d, 0xc7, 0xa5, 0x69, 0x12, 0xc7, 0x5a, + 0x3b, 0x82, 0xf2, 0xe7, 0x74, 0xb1, 0x37, 0xe9, 0x29, 0xe7, 0x3b, 0xf7, 0x76, 0x63, 0xc9, 0xbc, + 0x02, 0x3f, 0x80, 0xbf, 0xbc, 0x01, 0x8f, 0xc0, 0xbb, 0xf0, 0x07, 0x9e, 0x04, 0xed, 0xec, 0xdd, + 0xf9, 0x6c, 0xb7, 0x25, 0x45, 0xf9, 0xb7, 0x33, 0x3b, 0x33, 0x37, 0xf3, 0xcd, 0xcc, 0xb7, 0x36, + 0xac, 0x8b, 0x68, 0x12, 0x8d, 0x3c, 0xe1, 0x35, 0x27, 0x71, 0x24, 0x22, 0x62, 0xa4, 0xb2, 0x03, + 0xc2, 0x1f, 0x33, 0xa5, 0xad, 0xef, 0x82, 0x71, 0xc8, 0x66, 0xd4, 0x0b, 0x2f, 0x18, 0xd9, 0x84, + 0x12, 0x17, 0x5e, 0x2c, 0x6c, 0x6d, 0x4b, 0x6b, 0x98, 0x54, 0x09, 0xc4, 0x82, 0x22, 0x0b, 0x47, + 0x76, 0x01, 0x75, 0xf2, 0x58, 0x7f, 0x00, 0xd5, 0x81, 0x77, 0x16, 0x30, 0xd1, 0x0a, 0x7c, 0x8f, + 0x13, 0x02, 0xfa, 0x90, 0x05, 0x01, 0x7a, 0x55, 0x28, 0x9e, 0xa5, 0xd3, 0x95, 0xaf, 0x9c, 0x6a, + 0x54, 0x1e, 0xeb, 0x7f, 0xea, 0x50, 0x56, 0x5e, 0xe4, 0x33, 0x28, 0x79, 0xd2, 0x13, 0x3d, 0xaa, + 0xbb, 0x77, 0x9a, 0x59, 0xa6, 0xb9, 0xb0, 0x54, 0xd9, 0x10, 0x07, 0x8c, 0x57, 0x11, 0x17, 0xa1, + 0x37, 0x66, 0x18, 0xae, 0x42, 0x33, 0x99, 0xec, 0x81, 0x31, 0x89, 0x62, 0xe1, 0x8e, 0xbd, 0x89, + 0xad, 0x6f, 0x15, 0x1b, 0xd5, 0xdd, 0x7b, 0xcb, 0xb1, 0x9a, 0xbd, 0x28, 0x16, 0xc7, 0xde, 0xa4, + 0x13, 0x8a, 0x78, 0x46, 0xd7, 0x26, 0x4a, 0x92, 0x51, 0x2f, 0xd9, 0x8c, 0x4f, 0xbc, 0x21, 0xb3, + 0x4b, 0x2a, 0x6a, 0x2a, 0x23, 0x0c, 0xaf, 0xbc, 0x78, 0x64, 0x97, 0xf1, 0x42, 0x09, 0x64, 0x07, + 0x2a, 0x97, 0x6c, 0xe6, 0xc6, 0x12, 0x29, 0x7b, 0x0d, 0x13, 0x27, 0xf3, 0x8f, 0xa5, 0x18, 0x62, + 0x18, 0x85, 0x66, 0x03, 0x74, 0x31, 0x9b, 0x30, 0xdb, 0xd8, 0xd2, 0x1a, 0xeb, 0xbb, 0x9b, 0xcb, + 0x89, 0x0d, 0x66, 0x13, 0x46, 0xd1, 0x82, 0x34, 0xc0, 0x1a, 0x9d, 0xb9, 0xb2, 0x22, 0x37, 0x9a, + 0xb2, 0x38, 0xf6, 0x47, 0xcc, 0xae, 0xe0, 0xb7, 0xd7, 0x47, 0x67, 0x5d, 0x6f, 0xcc, 0x4e, 0x12, + 0x2d, 0x69, 0x82, 0x2e, 0xbc, 0x0b, 0x6e, 0x03, 0x16, 0xeb, 0xac, 0x14, 0x3b, 0xf0, 0x2e, 0xb8, + 0xaa, 0x14, 0xed, 0xc8, 0x7d, 0x58, 0x1f, 0xcf, 0xf8, 0xeb, 0xc0, 0xcd, 0x20, 0x34, 0x31, 0x6e, + 0x0d, 0xb5, 0xcf, 0x53, 0x1c, 0xef, 0x01, 0x28, 0x33, 0x09, 0x8f, 0x5d, 0xdb, 0xd2, 0x1a, 0x25, + 0x5a, 0x41, 0x8d, 0x44, 0xcf, 0x79, 0x0c, 0x66, 0x1e, 0x45, 0xd9, 0xdc, 0x4b, 0x36, 0x4b, 0xfa, + 0x2d, 0x8f, 0x12, 0xb2, 0xa9, 0x17, 0x5c, 0xa9, 0x0e, 0x95, 0xa8, 0x12, 0x1e, 0x17, 0xf6, 0x34, + 0xe7, 0x6b, 0xa8, 0x64, 0x49, 0xfd, 0x97, 0x63, 0x25, 0xe7, 0xf8, 0x42, 0x37, 0x8a, 0x96, 0xfe, + 0x42, 0x37, 0xaa, 0x96, 0x59, 0xff, 0xad, 0x0c, 0xa5, 0x3e, 0x76, 0x61, 0x0f, 0xcc, 0xb1, 0xc7, + 0x05, 0x8b, 0xdd, 0x6b, 0x4c, 0x50, 0x55, 0x99, 0xaa, 0x29, 0x5d, 0xe8, 0x5f, 0xe1, 0x1a, 0xfd, + 0xfb, 0x16, 0x4c, 0xce, 0xe2, 0x29, 0x1b, 0xb9, 0xb2, 0x49, 0xdc, 0x2e, 0x2e, 0x63, 0x8e, 0x19, + 0x35, 0xfb, 0x68, 0x83, 0xdd, 0xac, 0xf2, 0xec, 0xcc, 0xc9, 0x13, 0xa8, 0xf1, 0xe8, 0x2a, 0x1e, + 0x32, 0x17, 0xe7, 0x87, 0x27, 0x03, 0xfa, 0xe1, 0x8a, 0x3f, 0x1a, 0xe1, 0x99, 0x9a, 0x7c, 0x2e, + 0x70, 0xf2, 0x0c, 0x36, 0x04, 0x56, 0xe3, 0x0e, 0xa3, 0x50, 0xc4, 0x51, 0xc0, 0xed, 0xf2, 0xf2, + 0x90, 0xab, 0x18, 0xaa, 0xe8, 0xb6, 0xb2, 0xa2, 0xeb, 0x22, 0x2f, 0x72, 0xb2, 0x0d, 0xb7, 0x7d, + 0xee, 0x26, 0xb0, 0xc9, 0x14, 0xfd, 0xf0, 0x02, 0x27, 0xd8, 0xa0, 0x1b, 0x3e, 0x3f, 0x46, 0x7d, + 0x5f, 0xa9, 0x9d, 0x97, 0x00, 0xf3, 0x82, 0xc8, 0x23, 0xa8, 0x26, 0x19, 0xe0, 0x24, 0x6b, 0xef, + 0x98, 0x64, 0x10, 0xd9, 0x59, 0x36, 0x55, 0x92, 0x00, 0xb7, 0x0b, 0x5b, 0x45, 0xd9, 0x54, 0x14, + 0x9c, 0xdf, 0x35, 0xa8, 0xe6, 0x8a, 0x4d, 0x29, 0x42, 0xcb, 0x28, 0x62, 0x61, 0x29, 0x0b, 0x6f, + 0x5b, 0xca, 0xe2, 0x5b, 0x97, 0x52, 0xbf, 0x46, 0x53, 0xef, 0x42, 0x19, 0x13, 0xe5, 0x76, 0x09, + 0x73, 0x4b, 0x24, 0xe7, 0x0f, 0x0d, 0x6a, 0x0b, 0x28, 0xde, 0x68, 0xed, 0xe4, 0x73, 0x20, 0x67, + 0x81, 0x37, 0xbc, 0x0c, 0x7c, 0x2e, 0xe4, 0x40, 0xa9, 0x14, 0x74, 0x34, 0xb9, 0x9d, 0xbb, 0xc1, + 0xa0, 0x5c, 0x66, 0x79, 0x1e, 0x47, 0x3f, 0xb1, 0x10, 0xb9, 0xc9, 0xa0, 0x89, 0x94, 0xed, 0x44, + 0xc9, 0x2a, 0xd7, 0xff, 0x2a, 0x22, 0x73, 0x2b, 0x74, 0xbe, 0x80, 0x4d, 0x04, 0xc4, 0x0f, 0x2f, + 0xdc, 0x61, 0x14, 0x5c, 0x8d, 0x43, 0xa4, 0x93, 0x64, 0xd3, 0x48, 0x7a, 0xd7, 0xc6, 0x2b, 0xc9, + 0x28, 0xe4, 0xc5, 0xaa, 0x07, 0xd6, 0x59, 0xc0, 0x3a, 0xed, 0x05, 0x10, 0xf1, 0x1b, 0x07, 0x6a, + 0xc6, 0x97, 0x62, 0x61, 0xcd, 0x4f, 0xb2, 0x4d, 0x39, 0x8f, 0xa3, 0x31, 0x5f, 0xa5, 0xe2, 0x34, + 0x46, 0xb2, 0x2c, 0xcf, 0xe2, 0x68, 0x9c, 0x2e, 0x8b, 0x3c, 0x73, 0xf2, 0x0d, 0xd4, 0xd2, 0x4e, + 0xab, 0x34, 0x4a, 0x98, 0xc6, 0xdd, 0xd5, 0x10, 0x98, 0x84, 0x79, 0x99, 0x93, 0xc8, 0x27, 0x50, + 0x3b, 0xf3, 0x38, 0x73, 0xb3, 0xd9, 0x51, 0xbc, 0x6d, 0x4a, 0x65, 0x86, 0xd0, 0x97, 0x50, 0xe3, + 0xa1, 0x37, 0xe1, 0xaf, 0x22, 0xe1, 0xca, 0xe7, 0x2f, 0xa1, 0x70, 0xb3, 0x39, 0x15, 0xf8, 0x1a, + 0x0e, 0xfc, 0x31, 0xa3, 0x66, 0x6a, 0x22, 0x25, 0xe7, 0x2a, 0xdd, 0x05, 0x99, 0xe3, 0xcd, 0xce, + 0x43, 0x7e, 0xd2, 0x8b, 0x8b, 0x93, 0xae, 0x9a, 0x5c, 0xff, 0x59, 0x03, 0x4b, 0x91, 0x02, 0x9b, + 0x04, 0xfe, 0xd0, 0x13, 0x7e, 0x14, 0x92, 0x47, 0x50, 0x0a, 0xa3, 0x11, 0x93, 0xb4, 0x27, 0x11, + 0xfe, 0x78, 0x89, 0x07, 0x72, 0xa6, 0xcd, 0x6e, 0x34, 0x62, 0x54, 0x59, 0x3b, 0x4f, 0x40, 0x97, + 0xa2, 0x24, 0xcf, 0xa4, 0x84, 0xeb, 0x90, 0xa7, 0x98, 0x0b, 0xf5, 0x53, 0x58, 0x4f, 0xbe, 0x70, + 0xce, 0x62, 0x16, 0x0e, 0x99, 0x7c, 0xf4, 0x73, 0x13, 0x86, 0xe7, 0xf7, 0xa6, 0xd8, 0xfa, 0x2f, + 0x1a, 0x10, 0x8c, 0xbb, 0xb8, 0x7a, 0x37, 0x11, 0x9b, 0x3c, 0x84, 0xbb, 0xaf, 0xaf, 0x58, 0x3c, + 0x53, 0x8c, 0x37, 0x64, 0xee, 0xc8, 0xe7, 0xf2, 0x2b, 0x8a, 0x41, 0x0c, 0xba, 0x89, 0xb7, 0x7d, + 0x75, 0xb9, 0x9f, 0xdc, 0xd5, 0xff, 0xd1, 0xa1, 0xda, 0x8f, 0xa7, 0xd9, 0xd8, 0x7c, 0x07, 0x30, + 0xf1, 0x62, 0xe1, 0x4b, 0x4c, 0x53, 0xd8, 0x3f, 0xcd, 0xc1, 0x3e, 0x37, 0xcd, 0x26, 0xb4, 0x97, + 0xda, 0xd3, 0x9c, 0xeb, 0x5b, 0x37, 0xb4, 0xf0, 0xde, 0x1b, 0x5a, 0xfc, 0x1f, 0x1b, 0xda, 0x82, + 0x6a, 0x6e, 0x43, 0x93, 0x05, 0xdd, 0x7a, 0x73, 0x1d, 0xb9, 0x1d, 0x85, 0xf9, 0x8e, 0x3a, 0x7f, + 0x6b, 0x70, 0x7b, 0xa5, 0x44, 0xb9, 0x15, 0xb9, 0x47, 0xf2, 0xdd, 0x5b, 0x31, 0x7f, 0x1d, 0x49, + 0x1b, 0x2c, 0xcc, 0xd2, 0x8d, 0xd3, 0x81, 0x52, 0x0b, 0x52, 0xcd, 0xd7, 0xb5, 0x38, 0x71, 0x74, + 0x83, 0x2f, 0xc8, 0x9c, 0xf4, 0xe0, 0x8e, 0x0a, 0xb2, 0xfc, 0x4a, 0xaa, 0x97, 0xfa, 0xa3, 0xa5, + 0x48, 0x8b, 0x8f, 0xe4, 0x07, 0x7c, 0x45, 0xc7, 0x1d, 0xf7, 0x26, 0x36, 0xfe, 0x1d, 0xaf, 0x58, + 0x42, 0xdd, 0x87, 0x60, 0xb4, 0x59, 0x10, 0x1c, 0x84, 0xe7, 0x91, 0xfc, 0x85, 0x86, 0xb8, 0xc4, + 0xae, 0x37, 0x1a, 0xc5, 0x8c, 0xf3, 0x64, 0xea, 0x6b, 0x4a, 0xdb, 0x52, 0x4a, 0xb9, 0x12, 0x71, + 0x14, 0x89, 0x24, 0x20, 0x9e, 0x13, 0xa2, 0xa8, 0x03, 0xc8, 0x60, 0x5c, 0xfd, 0xca, 0x79, 0x23, + 0xdd, 0x6c, 0x37, 0xc0, 0xcc, 0xf3, 0x27, 0x01, 0x28, 0x77, 0x4f, 0xe8, 0x71, 0xeb, 0xc8, 0xba, + 0x45, 0x4c, 0x30, 0xfa, 0xdd, 0x56, 0xaf, 0xff, 0xfc, 0x64, 0x60, 0x69, 0xdb, 0xbb, 0xb0, 0xbe, + 0x38, 0x4e, 0xa4, 0x02, 0xa5, 0xd3, 0x6e, 0xbf, 0x33, 0xb0, 0x6e, 0x49, 0xb7, 0xd3, 0x83, 0xee, + 0xe0, 0xab, 0x87, 0x96, 0x26, 0xd5, 0x4f, 0x5f, 0x0e, 0x3a, 0x7d, 0xab, 0xb0, 0xfd, 0xab, 0x06, + 0x30, 0xc7, 0x82, 0x54, 0x61, 0xed, 0xb4, 0x7b, 0xd8, 0x3d, 0xf9, 0xbe, 0xab, 0x5c, 0x8e, 0x5b, + 0xfd, 0x41, 0x87, 0x5a, 0x9a, 0xbc, 0xa0, 0x9d, 0xde, 0xd1, 0x41, 0xbb, 0x65, 0x15, 0xe4, 0x05, + 0xdd, 0x3f, 0xe9, 0x1e, 0xbd, 0xb4, 0x8a, 0x18, 0xab, 0x35, 0x68, 0x3f, 0x57, 0xc7, 0x7e, 0xaf, + 0x45, 0x3b, 0x96, 0x4e, 0x2c, 0x30, 0x3b, 0x3f, 0xf4, 0x3a, 0xf4, 0xe0, 0xb8, 0xd3, 0x1d, 0xb4, + 0x8e, 0xac, 0x92, 0xf4, 0x79, 0xda, 0x6a, 0x1f, 0x9e, 0xf6, 0xac, 0xb2, 0x0a, 0xd6, 0x1f, 0x9c, + 0xd0, 0x8e, 0xb5, 0x26, 0x85, 0x7d, 0xda, 0x3a, 0xe8, 0x76, 0xf6, 0x2d, 0xc3, 0x29, 0x58, 0xda, + 0xd3, 0x3d, 0xd8, 0xf0, 0xa3, 0xe6, 0xd4, 0x17, 0x8c, 0x73, 0xf5, 0x47, 0xe7, 0xc7, 0xfb, 0x89, + 0xe4, 0x47, 0x3b, 0xea, 0xb4, 0x73, 0x11, 0xed, 0x4c, 0xc5, 0x0e, 0xde, 0xee, 0xa4, 0x4d, 0x3d, + 0x2b, 0xa3, 0xfc, 0xe0, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa8, 0x5c, 0xc8, 0x21, 0x3e, 0x0d, + 0x00, 0x00, } diff --git a/go/vt/vtctl/vtctl.go b/go/vt/vtctl/vtctl.go index 45765f4e985..82e32acdcdd 100644 --- a/go/vt/vtctl/vtctl.go +++ b/go/vt/vtctl/vtctl.go @@ -120,11 +120,13 @@ import ( "vitess.io/vitess/go/vt/topo" "vitess.io/vitess/go/vt/topo/topoproto" "vitess.io/vitess/go/vt/topotools" + "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/wrangler" replicationdatapb "vitess.io/vitess/go/vt/proto/replicationdata" topodatapb "vitess.io/vitess/go/vt/proto/topodata" vschemapb "vitess.io/vitess/go/vt/proto/vschema" + vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" "vitess.io/vitess/go/vt/proto/vttime" ) @@ -223,7 +225,7 @@ var commands = []commandGroup{ { "Shards", []command{ {"CreateShard", commandCreateShard, - "[-force] [-parent] [-keyspace_type=keyspace_type] ", + "[-force] [-parent] ", "Creates the specified shard."}, {"GetShard", commandGetShard, "", @@ -282,7 +284,7 @@ var commands = []commandGroup{ { "Keyspaces", []command{ {"CreateKeyspace", commandCreateKeyspace, - "[-sharding_column_name=name] [-sharding_column_type=type] [-served_from=tablettype1:ks1,tablettype2,ks2,...] [-force] [-keyspace_type=type] [-snapshot_time=time] ", + "[-sharding_column_name=name] [-sharding_column_type=type] [-served_from=tablettype1:ks1,tablettype2:ks2,...] [-force] [-keyspace_type=type] [-base_keyspace=base_keyspace] [-snapshot_time=time] ", "Creates the specified keyspace."}, {"DeleteKeyspace", commandDeleteKeyspace, "[-recursive] ", @@ -1150,9 +1152,8 @@ func commandExecuteHook(ctx context.Context, wr *wrangler.Wrangler, subFlags *fl } func commandCreateShard(ctx context.Context, wr *wrangler.Wrangler, subFlags *flag.FlagSet, args []string) error { - force := subFlags.Bool("force", false, "Proceeds with the command even if the keyspace already exists") + force := subFlags.Bool("force", false, "Proceeds with the command even if the shard already exists") parent := subFlags.Bool("parent", false, "Creates the parent keyspace if it doesn't already exist") - keyspaceType := subFlags.String("keyspace_type", "", "Specifies the type of the keyspace") if err := subFlags.Parse(args); err != nil { return err } @@ -1165,12 +1166,7 @@ func commandCreateShard(ctx context.Context, wr *wrangler.Wrangler, subFlags *fl return err } if *parent { - ktype, err := topoproto.ParseKeyspaceType(*keyspaceType) - if err != nil { - wr.Logger().Infof("error parsing keyspace type %v, defaulting to NORMAL", *keyspaceType) - err = nil - } - if err := wr.TopoServer().CreateKeyspace(ctx, keyspace, &topodatapb.Keyspace{KeyspaceType: ktype}); err != nil && !topo.IsErrType(err, topo.NodeExists) { + if err := wr.TopoServer().CreateKeyspace(ctx, keyspace, &topodatapb.Keyspace{}); err != nil && !topo.IsErrType(err, topo.NodeExists) { return err } } @@ -1551,6 +1547,7 @@ func commandCreateKeyspace(ctx context.Context, wr *wrangler.Wrangler, subFlags var servedFrom flagutil.StringMapValue subFlags.Var(&servedFrom, "served_from", "Specifies a comma-separated list of dbtype:keyspace pairs used to serve traffic") keyspaceType := subFlags.String("keyspace_type", "", "Specifies the type of the keyspace") + baseKeyspace := subFlags.String("base_keyspace", "", "Specifies the base keyspace for a snapshot keyspace") timestampStr := subFlags.String("snapshot_time", "", "Specifies the snapshot time for this keyspace") if err := subFlags.Parse(args); err != nil { return err @@ -1567,7 +1564,15 @@ func commandCreateKeyspace(ctx context.Context, wr *wrangler.Wrangler, subFlags ktype, err := topoproto.ParseKeyspaceType(*keyspaceType) if *keyspaceType != "" && err != nil { wr.Logger().Infof("error parsing keyspace type %v, defaulting to NORMAL", *keyspaceType) - err = nil + } + + if ktype == topodatapb.KeyspaceType_SNAPSHOT { + if *baseKeyspace == "" { + return vterrors.New(vtrpcpb.Code_INVALID_ARGUMENT, "baseKeyspace must be specified while creating a snapshot keyspace") + } + if _, err := wr.TopoServer().GetKeyspace(ctx, *baseKeyspace); err != nil { + return vterrors.Wrapf(err, "Cannot find base keyspace: %v", *baseKeyspace) + } } var snapshotTime *vttime.Time @@ -1583,6 +1588,7 @@ func commandCreateKeyspace(ctx context.Context, wr *wrangler.Wrangler, subFlags ShardingColumnName: *shardingColumnName, ShardingColumnType: kit, KeyspaceType: ktype, + BaseKeyspace: *baseKeyspace, SnapshotTime: snapshotTime, } if len(servedFrom) > 0 { @@ -1605,27 +1611,26 @@ func commandCreateKeyspace(ctx context.Context, wr *wrangler.Wrangler, subFlags if err != nil { return err } - // create empty vschema.Keyspace if it doesn't exist yet - _, err = wr.TopoServer().GetVSchema(ctx, keyspace) + // copy vschema from base keyspace + vs, err := wr.TopoServer().GetVSchema(ctx, *baseKeyspace) if err != nil { - wr.Logger().Infof("error from GetVSchema %v", err) + wr.Logger().Infof("error from GetVSchema for keyspace: %v, %v", *baseKeyspace, err) if topo.IsErrType(err, topo.NoNode) { - vs := &vschemapb.Keyspace{ - Tables: map[string]*vschemapb.Table{ - "unsharded": {}, - }, + vs = &vschemapb.Keyspace{ + Sharded: false, + Tables: make(map[string]*vschemapb.Table), + Vindexes: make(map[string]*vschemapb.Vindex), KeyspaceType: ktype, } - if err := wr.TopoServer().SaveVSchema(ctx, keyspace, vs); err != nil { - wr.Logger().Infof("error from SaveVSchema %v:%v", vs, err) - return err - } - err = nil - } else { - return err } + } else { + vs.KeyspaceType = ktype } - return err + if err := wr.TopoServer().SaveVSchema(ctx, keyspace, vs); err != nil { + wr.Logger().Infof("error from SaveVSchema %v:%v", vs, err) + return err + } + return topotools.RebuildVSchema(ctx, wr.Logger(), wr.TopoServer(), nil) } func commandDeleteKeyspace(ctx context.Context, wr *wrangler.Wrangler, subFlags *flag.FlagSet, args []string) error { diff --git a/go/vt/vttablet/tabletmanager/init_tablet.go b/go/vt/vttablet/tabletmanager/init_tablet.go index 5beedb0ffbe..4915e5e9d4b 100644 --- a/go/vt/vttablet/tabletmanager/init_tablet.go +++ b/go/vt/vttablet/tabletmanager/init_tablet.go @@ -64,10 +64,6 @@ func (agent *ActionAgent) InitTablet(port, gRPCPort int32) error { if *initKeyspace == "" || *initShard == "" || *initTabletType == "" { return fmt.Errorf("either need all of init_keyspace, init_shard and init_tablet_type, or none") } - // if we are recovering from a snapshot we need to set initDbNameOverride - if *recoveryKeyspace != "" && *initDbNameOverride == "" { - *initDbNameOverride = topoproto.VtDbPrefix + *recoveryKeyspace - } // parse init_tablet_type tabletType, err := topoproto.ParseTabletType(*initTabletType) @@ -155,6 +151,16 @@ func (agent *ActionAgent) InitTablet(port, gRPCPort int32) error { log.Infof("Using detected machine hostname: %v To change this, fix your machine network configuration or override it with -tablet_hostname.", hostname) } + // if we are recovering from a snapshot we need to set initDbNameOverride + keyspaceInfo, err := agent.TopoServer.GetKeyspace(ctx, *initKeyspace) + if err != nil { + return vterrors.Wrapf(err, "Error getting keyspace: %v", *initKeyspace) + } + baseKeyspace := keyspaceInfo.Keyspace.BaseKeyspace + if baseKeyspace != "" { + *initDbNameOverride = topoproto.VtDbPrefix + baseKeyspace + } + // create and populate tablet record tablet := &topodatapb.Tablet{ Alias: agent.TabletAlias, @@ -199,7 +205,7 @@ func (agent *ActionAgent) InitTablet(port, gRPCPort int32) error { // instance of a startup timeout). Upon running this code // again, we want to fix ShardReplication. if updateErr := topo.UpdateTabletReplicationData(ctx, agent.TopoServer, tablet); updateErr != nil { - return updateErr + return vterrors.Wrap(updateErr, "UpdateTabletReplicationData failed") } // Then overwrite everything, ignoring version mismatch. diff --git a/go/vt/vttablet/tabletmanager/restore.go b/go/vt/vttablet/tabletmanager/restore.go index a03174f38b3..99b3376c841 100644 --- a/go/vt/vttablet/tabletmanager/restore.go +++ b/go/vt/vttablet/tabletmanager/restore.go @@ -39,7 +39,6 @@ import ( var ( restoreFromBackup = flag.Bool("restore_from_backup", false, "(init restore parameter) will check BackupStorage for a recent backup at startup and start there") restoreConcurrency = flag.Int("restore_concurrency", 4, "(init restore parameter) how many concurrent files to restore at once") - recoveryKeyspace = flag.String("recovery_keyspace", "", "(init restore parameter) which keyspace to recover this tablet from") ) // RestoreData is the main entry point for backup restore. @@ -80,17 +79,17 @@ func (agent *ActionAgent) restoreDataLocked(ctx context.Context, logger logutil. // Record local metadata values based on the original type. localMetadata := agent.getLocalMetadataValues(originalType) tablet := agent.Tablet() - keyspaceDir := tablet.Keyspace - if *recoveryKeyspace != "" { - keyspaceDir = *recoveryKeyspace - } - dir := fmt.Sprintf("%v/%v", keyspaceDir, tablet.Shard) keyspaceName := tablet.Keyspace keyspaceInfo, err := agent.TopoServer.GetKeyspace(ctx, keyspaceName) if err != nil { return err } keyspace := keyspaceInfo.Keyspace + keyspaceDir := tablet.Keyspace + if keyspace.BaseKeyspace != "" { + keyspaceDir = keyspace.BaseKeyspace + } + dir := fmt.Sprintf("%v/%v", keyspaceDir, tablet.Shard) pos, err := mysqlctl.Restore(ctx, agent.Cnf, agent.MysqlDaemon, dir, *restoreConcurrency, agent.hookExtraEnv(), localMetadata, logger, deleteBeforeRestore, topoproto.TabletDbName(tablet), logutil.ProtoToTime(keyspace.SnapshotTime)) switch err { case nil: diff --git a/proto/topodata.proto b/proto/topodata.proto index 400dcbf6c07..bfa5dce2e64 100644 --- a/proto/topodata.proto +++ b/proto/topodata.proto @@ -284,10 +284,14 @@ message Keyspace { // by explicit addresssing or by calling "use keyspace" first KeyspaceType keyspace_type = 5; + // base_keyspace is the base keyspace from which a snapshot + // keyspace is created. empty for normal keyspaces + string base_keyspace = 6; + // snapshot_time (in UTC) is a property of snapshot // keyspaces which tells us what point in time // the snapshot is of - vttime.Time snapshot_time = 6; + vttime.Time snapshot_time = 7; } // ShardReplication describes the MySQL replication relationships diff --git a/py/vtproto/topodata_pb2.py b/py/vtproto/topodata_pb2.py index 6caec7e4f6b..71becda9e16 100644 --- a/py/vtproto/topodata_pb2.py +++ b/py/vtproto/topodata_pb2.py @@ -21,7 +21,7 @@ package='topodata', syntax='proto3', serialized_options=_b('\n\017io.vitess.protoZ%vitess.io/vitess/go/vt/proto/topodata'), - serialized_pb=_b('\n\x0etopodata.proto\x12\x08topodata\x1a\ntime.proto\"&\n\x08KeyRange\x12\r\n\x05start\x18\x01 \x01(\x0c\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x0c\"(\n\x0bTabletAlias\x12\x0c\n\x04\x63\x65ll\x18\x01 \x01(\t\x12\x0b\n\x03uid\x18\x02 \x01(\r\"\xb6\x03\n\x06Tablet\x12$\n\x05\x61lias\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\x12\x10\n\x08hostname\x18\x02 \x01(\t\x12/\n\x08port_map\x18\x04 \x03(\x0b\x32\x1d.topodata.Tablet.PortMapEntry\x12\x10\n\x08keyspace\x18\x05 \x01(\t\x12\r\n\x05shard\x18\x06 \x01(\t\x12%\n\tkey_range\x18\x07 \x01(\x0b\x32\x12.topodata.KeyRange\x12\"\n\x04type\x18\x08 \x01(\x0e\x32\x14.topodata.TabletType\x12\x18\n\x10\x64\x62_name_override\x18\t \x01(\t\x12(\n\x04tags\x18\n \x03(\x0b\x32\x1a.topodata.Tablet.TagsEntry\x12\x16\n\x0emysql_hostname\x18\x0c \x01(\t\x12\x12\n\nmysql_port\x18\r \x01(\x05\x1a.\n\x0cPortMapEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a+\n\tTagsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01J\x04\x08\x03\x10\x04J\x04\x08\x0b\x10\x0c\"\xd3\x04\n\x05Shard\x12+\n\x0cmaster_alias\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\x12%\n\tkey_range\x18\x02 \x01(\x0b\x32\x12.topodata.KeyRange\x12\x30\n\x0cserved_types\x18\x03 \x03(\x0b\x32\x1a.topodata.Shard.ServedType\x12\x32\n\rsource_shards\x18\x04 \x03(\x0b\x32\x1b.topodata.Shard.SourceShard\x12\x36\n\x0ftablet_controls\x18\x06 \x03(\x0b\x32\x1d.topodata.Shard.TabletControl\x12\x19\n\x11is_master_serving\x18\x07 \x01(\x08\x1a\x46\n\nServedType\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t\x1ar\n\x0bSourceShard\x12\x0b\n\x03uid\x18\x01 \x01(\r\x12\x10\n\x08keyspace\x18\x02 \x01(\t\x12\r\n\x05shard\x18\x03 \x01(\t\x12%\n\tkey_range\x18\x04 \x01(\x0b\x32\x12.topodata.KeyRange\x12\x0e\n\x06tables\x18\x05 \x03(\t\x1a{\n\rTabletControl\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t\x12\x1a\n\x12\x62lacklisted_tables\x18\x04 \x03(\t\x12\x0e\n\x06\x66rozen\x18\x05 \x01(\x08J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06\"\xc9\x02\n\x08Keyspace\x12\x1c\n\x14sharding_column_name\x18\x01 \x01(\t\x12\x36\n\x14sharding_column_type\x18\x02 \x01(\x0e\x32\x18.topodata.KeyspaceIdType\x12\x33\n\x0cserved_froms\x18\x04 \x03(\x0b\x32\x1d.topodata.Keyspace.ServedFrom\x12-\n\rkeyspace_type\x18\x05 \x01(\x0e\x32\x16.topodata.KeyspaceType\x12#\n\rsnapshot_time\x18\x06 \x01(\x0b\x32\x0c.vttime.Time\x1aX\n\nServedFrom\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t\x12\x10\n\x08keyspace\x18\x03 \x01(\tJ\x04\x08\x03\x10\x04\"w\n\x10ShardReplication\x12.\n\x05nodes\x18\x01 \x03(\x0b\x32\x1f.topodata.ShardReplication.Node\x1a\x33\n\x04Node\x12+\n\x0ctablet_alias\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\"E\n\x0eShardReference\x12\x0c\n\x04name\x18\x01 \x01(\t\x12%\n\tkey_range\x18\x02 \x01(\x0b\x32\x12.topodata.KeyRange\"i\n\x12ShardTabletControl\x12\x0c\n\x04name\x18\x01 \x01(\t\x12%\n\tkey_range\x18\x02 \x01(\x0b\x32\x12.topodata.KeyRange\x12\x1e\n\x16query_service_disabled\x18\x03 \x01(\x08\"\xda\x03\n\x0bSrvKeyspace\x12;\n\npartitions\x18\x01 \x03(\x0b\x32\'.topodata.SrvKeyspace.KeyspacePartition\x12\x1c\n\x14sharding_column_name\x18\x02 \x01(\t\x12\x36\n\x14sharding_column_type\x18\x03 \x01(\x0e\x32\x18.topodata.KeyspaceIdType\x12\x35\n\x0bserved_from\x18\x04 \x03(\x0b\x32 .topodata.SrvKeyspace.ServedFrom\x1a\xaf\x01\n\x11KeyspacePartition\x12)\n\x0bserved_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\x32\n\x10shard_references\x18\x02 \x03(\x0b\x32\x18.topodata.ShardReference\x12;\n\x15shard_tablet_controls\x18\x03 \x03(\x0b\x32\x1c.topodata.ShardTabletControl\x1aI\n\nServedFrom\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\x10\n\x08keyspace\x18\x02 \x01(\tJ\x04\x08\x05\x10\x06\"6\n\x08\x43\x65llInfo\x12\x16\n\x0eserver_address\x18\x01 \x01(\t\x12\x0c\n\x04root\x18\x02 \x01(\tJ\x04\x08\x03\x10\x04\"\x1b\n\nCellsAlias\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t*(\n\x0cKeyspaceType\x12\n\n\x06NORMAL\x10\x00\x12\x0c\n\x08SNAPSHOT\x10\x01*2\n\x0eKeyspaceIdType\x12\t\n\x05UNSET\x10\x00\x12\n\n\x06UINT64\x10\x01\x12\t\n\x05\x42YTES\x10\x02*\x90\x01\n\nTabletType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06MASTER\x10\x01\x12\x0b\n\x07REPLICA\x10\x02\x12\n\n\x06RDONLY\x10\x03\x12\t\n\x05\x42\x41TCH\x10\x03\x12\t\n\x05SPARE\x10\x04\x12\x10\n\x0c\x45XPERIMENTAL\x10\x05\x12\n\n\x06\x42\x41\x43KUP\x10\x06\x12\x0b\n\x07RESTORE\x10\x07\x12\x0b\n\x07\x44RAINED\x10\x08\x1a\x02\x10\x01\x42\x38\n\x0fio.vitess.protoZ%vitess.io/vitess/go/vt/proto/topodatab\x06proto3') + serialized_pb=_b('\n\x0etopodata.proto\x12\x08topodata\x1a\ntime.proto\"&\n\x08KeyRange\x12\r\n\x05start\x18\x01 \x01(\x0c\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x0c\"(\n\x0bTabletAlias\x12\x0c\n\x04\x63\x65ll\x18\x01 \x01(\t\x12\x0b\n\x03uid\x18\x02 \x01(\r\"\xb6\x03\n\x06Tablet\x12$\n\x05\x61lias\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\x12\x10\n\x08hostname\x18\x02 \x01(\t\x12/\n\x08port_map\x18\x04 \x03(\x0b\x32\x1d.topodata.Tablet.PortMapEntry\x12\x10\n\x08keyspace\x18\x05 \x01(\t\x12\r\n\x05shard\x18\x06 \x01(\t\x12%\n\tkey_range\x18\x07 \x01(\x0b\x32\x12.topodata.KeyRange\x12\"\n\x04type\x18\x08 \x01(\x0e\x32\x14.topodata.TabletType\x12\x18\n\x10\x64\x62_name_override\x18\t \x01(\t\x12(\n\x04tags\x18\n \x03(\x0b\x32\x1a.topodata.Tablet.TagsEntry\x12\x16\n\x0emysql_hostname\x18\x0c \x01(\t\x12\x12\n\nmysql_port\x18\r \x01(\x05\x1a.\n\x0cPortMapEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a+\n\tTagsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01J\x04\x08\x03\x10\x04J\x04\x08\x0b\x10\x0c\"\xd3\x04\n\x05Shard\x12+\n\x0cmaster_alias\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\x12%\n\tkey_range\x18\x02 \x01(\x0b\x32\x12.topodata.KeyRange\x12\x30\n\x0cserved_types\x18\x03 \x03(\x0b\x32\x1a.topodata.Shard.ServedType\x12\x32\n\rsource_shards\x18\x04 \x03(\x0b\x32\x1b.topodata.Shard.SourceShard\x12\x36\n\x0ftablet_controls\x18\x06 \x03(\x0b\x32\x1d.topodata.Shard.TabletControl\x12\x19\n\x11is_master_serving\x18\x07 \x01(\x08\x1a\x46\n\nServedType\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t\x1ar\n\x0bSourceShard\x12\x0b\n\x03uid\x18\x01 \x01(\r\x12\x10\n\x08keyspace\x18\x02 \x01(\t\x12\r\n\x05shard\x18\x03 \x01(\t\x12%\n\tkey_range\x18\x04 \x01(\x0b\x32\x12.topodata.KeyRange\x12\x0e\n\x06tables\x18\x05 \x03(\t\x1a{\n\rTabletControl\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t\x12\x1a\n\x12\x62lacklisted_tables\x18\x04 \x03(\t\x12\x0e\n\x06\x66rozen\x18\x05 \x01(\x08J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06\"\xe0\x02\n\x08Keyspace\x12\x1c\n\x14sharding_column_name\x18\x01 \x01(\t\x12\x36\n\x14sharding_column_type\x18\x02 \x01(\x0e\x32\x18.topodata.KeyspaceIdType\x12\x33\n\x0cserved_froms\x18\x04 \x03(\x0b\x32\x1d.topodata.Keyspace.ServedFrom\x12-\n\rkeyspace_type\x18\x05 \x01(\x0e\x32\x16.topodata.KeyspaceType\x12\x15\n\rbase_keyspace\x18\x06 \x01(\t\x12#\n\rsnapshot_time\x18\x07 \x01(\x0b\x32\x0c.vttime.Time\x1aX\n\nServedFrom\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t\x12\x10\n\x08keyspace\x18\x03 \x01(\tJ\x04\x08\x03\x10\x04\"w\n\x10ShardReplication\x12.\n\x05nodes\x18\x01 \x03(\x0b\x32\x1f.topodata.ShardReplication.Node\x1a\x33\n\x04Node\x12+\n\x0ctablet_alias\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\"E\n\x0eShardReference\x12\x0c\n\x04name\x18\x01 \x01(\t\x12%\n\tkey_range\x18\x02 \x01(\x0b\x32\x12.topodata.KeyRange\"i\n\x12ShardTabletControl\x12\x0c\n\x04name\x18\x01 \x01(\t\x12%\n\tkey_range\x18\x02 \x01(\x0b\x32\x12.topodata.KeyRange\x12\x1e\n\x16query_service_disabled\x18\x03 \x01(\x08\"\xda\x03\n\x0bSrvKeyspace\x12;\n\npartitions\x18\x01 \x03(\x0b\x32\'.topodata.SrvKeyspace.KeyspacePartition\x12\x1c\n\x14sharding_column_name\x18\x02 \x01(\t\x12\x36\n\x14sharding_column_type\x18\x03 \x01(\x0e\x32\x18.topodata.KeyspaceIdType\x12\x35\n\x0bserved_from\x18\x04 \x03(\x0b\x32 .topodata.SrvKeyspace.ServedFrom\x1a\xaf\x01\n\x11KeyspacePartition\x12)\n\x0bserved_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\x32\n\x10shard_references\x18\x02 \x03(\x0b\x32\x18.topodata.ShardReference\x12;\n\x15shard_tablet_controls\x18\x03 \x03(\x0b\x32\x1c.topodata.ShardTabletControl\x1aI\n\nServedFrom\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\x10\n\x08keyspace\x18\x02 \x01(\tJ\x04\x08\x05\x10\x06\"6\n\x08\x43\x65llInfo\x12\x16\n\x0eserver_address\x18\x01 \x01(\t\x12\x0c\n\x04root\x18\x02 \x01(\tJ\x04\x08\x03\x10\x04\"\x1b\n\nCellsAlias\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t*(\n\x0cKeyspaceType\x12\n\n\x06NORMAL\x10\x00\x12\x0c\n\x08SNAPSHOT\x10\x01*2\n\x0eKeyspaceIdType\x12\t\n\x05UNSET\x10\x00\x12\n\n\x06UINT64\x10\x01\x12\t\n\x05\x42YTES\x10\x02*\x90\x01\n\nTabletType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06MASTER\x10\x01\x12\x0b\n\x07REPLICA\x10\x02\x12\n\n\x06RDONLY\x10\x03\x12\t\n\x05\x42\x41TCH\x10\x03\x12\t\n\x05SPARE\x10\x04\x12\x10\n\x0c\x45XPERIMENTAL\x10\x05\x12\n\n\x06\x42\x41\x43KUP\x10\x06\x12\x0b\n\x07RESTORE\x10\x07\x12\x0b\n\x07\x44RAINED\x10\x08\x1a\x02\x10\x01\x42\x38\n\x0fio.vitess.protoZ%vitess.io/vitess/go/vt/proto/topodatab\x06proto3') , dependencies=[time__pb2.DESCRIPTOR,]) @@ -42,8 +42,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=2354, - serialized_end=2394, + serialized_start=2377, + serialized_end=2417, ) _sym_db.RegisterEnumDescriptor(_KEYSPACETYPE) @@ -69,8 +69,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=2396, - serialized_end=2446, + serialized_start=2419, + serialized_end=2469, ) _sym_db.RegisterEnumDescriptor(_KEYSPACEIDTYPE) @@ -124,8 +124,8 @@ ], containing_type=None, serialized_options=_b('\020\001'), - serialized_start=2449, - serialized_end=2593, + serialized_start=2472, + serialized_end=2616, ) _sym_db.RegisterEnumDescriptor(_TABLETTYPE) @@ -651,8 +651,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1397, - serialized_end=1485, + serialized_start=1420, + serialized_end=1508, ) _KEYSPACE = _descriptor.Descriptor( @@ -691,8 +691,15 @@ is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='snapshot_time', full_name='topodata.Keyspace.snapshot_time', index=4, - number=6, type=11, cpp_type=10, label=1, + name='base_keyspace', full_name='topodata.Keyspace.base_keyspace', index=4, + 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, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='snapshot_time', full_name='topodata.Keyspace.snapshot_time', index=5, + number=7, 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, @@ -710,7 +717,7 @@ oneofs=[ ], serialized_start=1162, - serialized_end=1491, + serialized_end=1514, ) @@ -740,8 +747,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1561, - serialized_end=1612, + serialized_start=1584, + serialized_end=1635, ) _SHARDREPLICATION = _descriptor.Descriptor( @@ -770,8 +777,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1493, - serialized_end=1612, + serialized_start=1516, + serialized_end=1635, ) @@ -808,8 +815,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1614, - serialized_end=1683, + serialized_start=1637, + serialized_end=1706, ) @@ -853,8 +860,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1685, - serialized_end=1790, + serialized_start=1708, + serialized_end=1813, ) @@ -898,8 +905,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2011, - serialized_end=2186, + serialized_start=2034, + serialized_end=2209, ) _SRVKEYSPACE_SERVEDFROM = _descriptor.Descriptor( @@ -935,8 +942,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2188, - serialized_end=2261, + serialized_start=2211, + serialized_end=2284, ) _SRVKEYSPACE = _descriptor.Descriptor( @@ -986,8 +993,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1793, - serialized_end=2267, + serialized_start=1816, + serialized_end=2290, ) @@ -1024,8 +1031,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2269, - serialized_end=2323, + serialized_start=2292, + serialized_end=2346, ) @@ -1055,8 +1062,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2325, - serialized_end=2352, + serialized_start=2348, + serialized_end=2375, ) _TABLET_PORTMAPENTRY.containing_type = _TABLET diff --git a/test/recovery.py b/test/recovery.py index c21a95f3a8e..278dd687b66 100755 --- a/test/recovery.py +++ b/test/recovery.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -# Copyright 2017 Google Inc. +# 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. @@ -26,13 +26,12 @@ import tablet import utils +from vtdb import vtgate_client + use_mysqlctld = False -use_xtrabackup = False -stream_mode = 'tar' tablet_master = None tablet_replica1 = None tablet_replica2 = None -xtrabackup_args = [] new_init_db = '' db_credentials_file = '' @@ -125,6 +124,13 @@ def tearDownModule(): tablet_replica1.remove_tree() tablet_replica2.remove_tree() +def get_connection(timeout=15.0): + protocol, endpoint = utils.vtgate.rpc_endpoint(python=True) + try: + return vtgate_client.connect(protocol, endpoint, timeout) + except Exception: + logging.exception('Connection to vtgate (timeout=%s) failed.', timeout) + raise class TestVttabletRecovery(unittest.TestCase): @@ -153,8 +159,8 @@ def tearDown(self): t.set_semi_sync_enabled(master=False, slave=False) t.clean_dbs() - #for backup in self._list_backups(): - #self._remove_backup(backup) + for backup in self._list_backups(): + self._remove_backup(backup) _create_vt_insert_test = '''create table vt_insert_test ( id bigint auto_increment, @@ -192,20 +198,19 @@ def _restore(self, t): # create a recovery keyspace utils.run_vtctl(['CreateKeyspace', '-keyspace_type=SNAPSHOT', + '-base_keyspace=test_keyspace', '-snapshot_time', datetime.datetime.utcnow().isoformat("T")+"Z", 'recovery_keyspace']) + # set disable_active_reparents to true, otherwise replication_reporter will + # try to restart replication xtra_args = ['-db-credentials-file', db_credentials_file, '-disable_active_reparents', - '-enable_replication_reporter=false', - '-recovery_keyspace', - 'test_keyspace'] + '-enable_replication_reporter=false'] xtra_args.extend(tablet.get_backup_storage_flags()) - # set disable_active_reparents to true, otherwise replication_reporter will - # try to restart replication t.start_vttablet(wait_for_state='SERVING', init_tablet_type='replica', init_keyspace='recovery_keyspace', @@ -256,7 +261,10 @@ def test_recovery(self): """ # insert data on master, wait for slave to get it - tablet_master.mquery('vt_test_keyspace', self._create_vt_insert_test) + utils.run_vtctl(['ApplySchema', + '-sql=' + self._create_vt_insert_test, + 'test_keyspace'], + auto_log=True) self._insert_data(tablet_master, 1) self._check_data(tablet_replica1, 1, 'replica1 tablet getting data') @@ -287,11 +295,41 @@ def test_recovery(self): self.assertEqual(metadata['ClusterAlias'], 'recovery_keyspace.0') self.assertEqual(metadata['DataCenter'], 'test_nj') - # TODO start vtgate + for t in [tablet_master, tablet_replica1, tablet_replica2]: + utils.run_vtctl(['ReloadSchema', t.tablet_alias], auto_log=True) + + utils.run_vtctl(['RebuildKeyspaceGraph', 'test_keyspace'], auto_log=True) + utils.run_vtctl(['RebuildKeyspaceGraph', 'recovery_keyspace'], auto_log=True) + + # start vtgate + utils.VtGate().start(tablets=[ + tablet_master, tablet_replica1, tablet_replica2 + ], tablet_types_to_wait='REPLICA') + utils.vtgate.wait_for_endpoints('test_keyspace.0.master', 1) + utils.vtgate.wait_for_endpoints('test_keyspace.0.replica', 1) + utils.vtgate.wait_for_endpoints('recovery_keyspace.0.replica', 1) + + # check that vtgate doesn't route queries to new tablet + vtgate_conn = get_connection() + cursor = vtgate_conn.cursor( + tablet_type='replica', keyspace=None, writable=True) + + cursor.execute('select count(*) from vt_insert_test', {}) + result = cursor.fetchall() + if not result: + self.fail('Result cannot be null') + else: + self.assertEqual(result[0][0], 2) - # TODO check that vtgate doesn't route queries to new tablet + # check that new tablet is accessible by using ks.table - # TODO check that new tablet is accessible by using ks:0.table + #cursor.execute('select count(*) from recovery_keyspace.vt_insert_test', {}) + #result = cursor.fetchall() + #if not result: + #self.fail('Result cannot be null') + #else: + #self.assertEqual(result[0][0], 1) + #conn.close() tablet_replica2.kill_vttablet() From ae06bc1c882f74ea8b2371887c2b26dd6f757796 Mon Sep 17 00:00:00 2001 From: deepthi Date: Thu, 30 May 2019 11:12:04 -0700 Subject: [PATCH 05/17] test PITR data access through vtgate Signed-off-by: deepthi --- test/recovery.py | 51 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 10 deletions(-) diff --git a/test/recovery.py b/test/recovery.py index 278dd687b66..79dc209e1a1 100755 --- a/test/recovery.py +++ b/test/recovery.py @@ -168,6 +168,13 @@ def tearDown(self): primary key (id) ) Engine=InnoDB''' + _vschema_json = '''{ + "tables": { + "vt_insert_test": {} + } +}''' + + def _insert_data(self, t, index): """Add a single row with value 'index' to the given tablet.""" t.mquery( @@ -262,7 +269,7 @@ def test_recovery(self): # insert data on master, wait for slave to get it utils.run_vtctl(['ApplySchema', - '-sql=' + self._create_vt_insert_test, + '-sql', self._create_vt_insert_test, 'test_keyspace'], auto_log=True) self._insert_data(tablet_master, 1) @@ -280,9 +287,21 @@ def test_recovery(self): # insert more data on the master self._insert_data(tablet_master, 2) + utils.run_vtctl(['ApplyVSchema', + '-vschema', self._vschema_json, + 'test_keyspace'], + auto_log=True) + + vs, _ = utils.run_vtctl(['GetVSchema', 'test_keyspace'], + mode=utils.VTCTL_VTCTL, trap_output=True) + logging.debug('test_keyspace vschema: %s', vs.splitlines()) + # now bring up the other slave, letting it restore from backup. self._restore(tablet_replica2) + vs, _ = utils.run_vtctl(['GetVSchema', 'recovery_keyspace'], + mode=utils.VTCTL_VTCTL, trap_output=True) + logging.debug('recovery_keyspace vschema: %s', vs.splitlines()) # check the new slave does not have the data self._check_data(tablet_replica2, 1, 'replica2 tablet should not have new data') @@ -295,12 +314,6 @@ def test_recovery(self): self.assertEqual(metadata['ClusterAlias'], 'recovery_keyspace.0') self.assertEqual(metadata['DataCenter'], 'test_nj') - for t in [tablet_master, tablet_replica1, tablet_replica2]: - utils.run_vtctl(['ReloadSchema', t.tablet_alias], auto_log=True) - - utils.run_vtctl(['RebuildKeyspaceGraph', 'test_keyspace'], auto_log=True) - utils.run_vtctl(['RebuildKeyspaceGraph', 'recovery_keyspace'], auto_log=True) - # start vtgate utils.VtGate().start(tablets=[ tablet_master, tablet_replica1, tablet_replica2 @@ -322,15 +335,33 @@ def test_recovery(self): self.assertEqual(result[0][0], 2) # check that new tablet is accessible by using ks.table + cursor.execute('select count(*) from recovery_keyspace.vt_insert_test', {}) + result = cursor.fetchall() + if not result: + self.fail('Result cannot be null') + else: + self.assertEqual(result[0][0], 1) - #cursor.execute('select count(*) from recovery_keyspace.vt_insert_test', {}) + # check that new tablet is accessible with 'use ks' + cursor.execute('use recovery_keyspace@replica', {}) + cursor.execute('select count(*) from vt_insert_test', {}) + result = cursor.fetchall() + if not result: + self.fail('Result cannot be null') + else: + self.assertEqual(result[0][0], 1) + + # TODO check that new tablet is accessible with 'use ks:shard' + # this currently does not work through the python client, though it works from mysql client + #cursor.execute('use recovery_keyspace:0@replica', {}) + #cursor.execute('select count(*) from vt_insert_test', {}) #result = cursor.fetchall() #if not result: #self.fail('Result cannot be null') #else: #self.assertEqual(result[0][0], 1) - #conn.close() - + + vtgate_conn.close() tablet_replica2.kill_vttablet() if __name__ == '__main__': From 3bb0c73f259d71800fee7d81332df2f7b381a422 Mon Sep 17 00:00:00 2001 From: deepthi Date: Thu, 30 May 2019 15:15:19 -0700 Subject: [PATCH 06/17] fix test failures Signed-off-by: deepthi --- go/vt/vtctl/vtctl.go | 37 ++++++++++++++++++++----------------- go/vt/vtctld/api_test.go | 6 ++++-- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/go/vt/vtctl/vtctl.go b/go/vt/vtctl/vtctl.go index 82e32acdcdd..2a42d7381b7 100644 --- a/go/vt/vtctl/vtctl.go +++ b/go/vt/vtctl/vtctl.go @@ -1611,26 +1611,29 @@ func commandCreateKeyspace(ctx context.Context, wr *wrangler.Wrangler, subFlags if err != nil { return err } - // copy vschema from base keyspace - vs, err := wr.TopoServer().GetVSchema(ctx, *baseKeyspace) - if err != nil { - wr.Logger().Infof("error from GetVSchema for keyspace: %v, %v", *baseKeyspace, err) - if topo.IsErrType(err, topo.NoNode) { - vs = &vschemapb.Keyspace{ - Sharded: false, - Tables: make(map[string]*vschemapb.Table), - Vindexes: make(map[string]*vschemapb.Vindex), - KeyspaceType: ktype, + if ktype == topodatapb.KeyspaceType_SNAPSHOT { + // copy vschema from base keyspace + vs, err := wr.TopoServer().GetVSchema(ctx, *baseKeyspace) + if err != nil { + wr.Logger().Infof("error from GetVSchema for keyspace: %v, %v", *baseKeyspace, err) + if topo.IsErrType(err, topo.NoNode) { + vs = &vschemapb.Keyspace{ + Sharded: false, + Tables: make(map[string]*vschemapb.Table), + Vindexes: make(map[string]*vschemapb.Vindex), + KeyspaceType: ktype, + } } + } else { + vs.KeyspaceType = ktype } - } else { - vs.KeyspaceType = ktype - } - if err := wr.TopoServer().SaveVSchema(ctx, keyspace, vs); err != nil { - wr.Logger().Infof("error from SaveVSchema %v:%v", vs, err) - return err + if err := wr.TopoServer().SaveVSchema(ctx, keyspace, vs); err != nil { + wr.Logger().Infof("error from SaveVSchema %v:%v", vs, err) + return err + } + return topotools.RebuildVSchema(ctx, wr.Logger(), wr.TopoServer(), nil) } - return topotools.RebuildVSchema(ctx, wr.Logger(), wr.TopoServer(), nil) + return nil } func commandDeleteKeyspace(ctx context.Context, wr *wrangler.Wrangler, subFlags *flag.FlagSet, args []string) error { diff --git a/go/vt/vtctld/api_test.go b/go/vt/vtctld/api_test.go index cbe91676fb7..d4980368743 100644 --- a/go/vt/vtctld/api_test.go +++ b/go/vt/vtctld/api_test.go @@ -112,6 +112,7 @@ func TestAPI(t *testing.T) { ts.CreateKeyspace(ctx, "ks3", &topodatapb.Keyspace{ ShardingColumnName: "shardcol", KeyspaceType: topodatapb.KeyspaceType_SNAPSHOT, + BaseKeyspace: "ks1", SnapshotTime: sTime, }) @@ -129,6 +130,7 @@ func TestAPI(t *testing.T) { "sharding_column_type": 0, "served_froms": [], "keyspace_type":0, + "base_keyspace":"", "snapshot_time":null }`}, {"GET", "keyspaces/nonexistent", "", "404 page not found"}, @@ -266,11 +268,11 @@ func TestAPI(t *testing.T) { // vtctl RunCommand {"POST", "vtctl/", `["GetKeyspace","ks1"]`, `{ "Error": "", - "Output": "{\n \"sharding_column_name\": \"shardcol\",\n \"sharding_column_type\": 0,\n \"served_froms\": [\n ],\n \"keyspace_type\": 0,\n \"snapshot_time\": null\n}\n\n" + "Output": "{\n \"sharding_column_name\": \"shardcol\",\n \"sharding_column_type\": 0,\n \"served_froms\": [\n ],\n \"keyspace_type\": 0,\n \"base_keyspace\": \"\",\n \"snapshot_time\": null\n}\n\n" }`}, {"POST", "vtctl/", `["GetKeyspace","ks3"]`, `{ "Error": "", - "Output": "{\n \"sharding_column_name\": \"shardcol\",\n \"sharding_column_type\": 0,\n \"served_froms\": [\n ],\n \"keyspace_type\": 1,\n \"snapshot_time\": {\n \"seconds\": \"0\",\n \"nanoseconds\": 0\n }\n}\n\n" + "Output": "{\n \"sharding_column_name\": \"shardcol\",\n \"sharding_column_type\": 0,\n \"served_froms\": [\n ],\n \"keyspace_type\": 1,\n \"base_keyspace\": \"ks1\",\n \"snapshot_time\": {\n \"seconds\": \"0\",\n \"nanoseconds\": 0\n }\n}\n\n" }`}, {"POST", "vtctl/", `["GetKeyspace","does_not_exist"]`, `{ "Error": "node doesn't exist: keyspaces/does_not_exist/Keyspace", From b81a10a7b1ae1ee34ed2d94df8232ec835721308 Mon Sep 17 00:00:00 2001 From: deepthi Date: Thu, 30 May 2019 17:31:27 -0700 Subject: [PATCH 07/17] fix time formats and help text Signed-off-by: deepthi --- go/vt/mysqlctl/builtinbackupengine.go | 24 +++++++++++++----------- go/vt/mysqlctl/xtrabackupengine.go | 9 +++++---- go/vt/vtctl/vtctl.go | 2 +- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/go/vt/mysqlctl/builtinbackupengine.go b/go/vt/mysqlctl/builtinbackupengine.go index df4c2297f79..fc7021fb3e6 100644 --- a/go/vt/mysqlctl/builtinbackupengine.go +++ b/go/vt/mysqlctl/builtinbackupengine.go @@ -74,8 +74,8 @@ type builtinBackupManifest struct { SkipCompress bool // BackupTime is when the backup was taken in UTC time - // format: "2006-01-02.150405" - BackupTime time.Time + // format: "2006-01-02T15:04:05Z00:00" + BackupTime string } // FileEntry is one file to backup @@ -397,7 +397,7 @@ func (be *BuiltinBackupEngine) backupFiles(ctx context.Context, cnf *Mycnf, mysq Position: replicationPosition, TransformHook: *backupStorageHook, SkipCompress: !*backupStorageCompress, - BackupTime: backupTime, + BackupTime: backupTime.Format(time.RFC3339), } data, err := json.MarshalIndent(bm, "", " ") if err != nil { @@ -526,8 +526,9 @@ func (be *BuiltinBackupEngine) ExecuteRestore( var bh backupstorage.BackupHandle var bm builtinBackupManifest var toRestore int - + zeroPosition := mysql.Position{} unixZeroTime := time.Unix(0, 0).UTC() + for toRestore = len(bhs) - 1; toRestore >= 0; toRestore-- { bh = bhs[toRestore] rc, err := bh.ReadFile(ctx, backupManifest) @@ -542,19 +543,20 @@ func (be *BuiltinBackupEngine) ExecuteRestore( log.Warningf("Possibly incomplete backup %v in directory %v on BackupStorage (cannot JSON decode MANIFEST: %v)", bh.Name(), dir, err) continue } - if snapshotTime.Equal(unixZeroTime) /* uninitialized or not snapshot */ || bm.BackupTime.Before(snapshotTime) { + backupTime, _ := time.Parse(time.RFC3339, bm.BackupTime) + if snapshotTime.Equal(unixZeroTime) /* uninitialized or not snapshot */ || bm.BackupTime == "" /* restoring an older backup where MANIFEST does not have backupTime */ || backupTime.Before(snapshotTime) { logger.Infof("Restore: found backup %v %v to restore with %v files", bh.Directory(), bh.Name(), len(bm.FileEntries)) break } } if toRestore < 0 { if snapshotTime.After(unixZeroTime) { - return mysql.Position{}, vterrors.Errorf(vtrpc.Code_NOT_FOUND, "No valid backup found before time %v", snapshotTime.Format(time.RFC3339)) + return zeroPosition, vterrors.Errorf(vtrpc.Code_NOT_FOUND, "No valid backup found before time %v", snapshotTime.Format(time.RFC3339)) } // There is at least one attempted backup, but none could be read. // This implies there is data we ought to have, so it's not safe to start // up empty. - return mysql.Position{}, vterrors.New(vtrpc.Code_NOT_FOUND, "backup(s) found but none could be read, unsafe to start up empty, restart to retry restore") + return zeroPosition, vterrors.New(vtrpc.Code_NOT_FOUND, "backup(s) found but none could be read, unsafe to start up empty, restart to retry restore") } // Starting from here we won't be able to recover if we get stopped by a cancelled @@ -563,23 +565,23 @@ func (be *BuiltinBackupEngine) ExecuteRestore( logger.Infof("Restore: shutdown mysqld") err := mysqld.Shutdown(context.Background(), cnf, true) if err != nil { - return mysql.Position{}, err + return zeroPosition, err } logger.Infof("Restore: deleting existing files") if err := removeExistingFiles(cnf); err != nil { - return mysql.Position{}, err + return zeroPosition, err } logger.Infof("Restore: reinit config file") err = mysqld.ReinitConfig(context.Background(), cnf) if err != nil { - return mysql.Position{}, err + return zeroPosition, err } logger.Infof("Restore: copying all files") if err := be.restoreFiles(context.Background(), cnf, bh, bm.FileEntries, bm.TransformHook, !bm.SkipCompress, restoreConcurrency, hookExtraEnv); err != nil { - return mysql.Position{}, err + return zeroPosition, err } return bm.Position, nil diff --git a/go/vt/mysqlctl/xtrabackupengine.go b/go/vt/mysqlctl/xtrabackupengine.go index 6853570bb77..aa02f2a7cc8 100644 --- a/go/vt/mysqlctl/xtrabackupengine.go +++ b/go/vt/mysqlctl/xtrabackupengine.go @@ -86,8 +86,8 @@ type xtraBackupManifest struct { Params string `json:"ExtraCommandLineParams"` // BackupTime is when the backup was taken in UTC time - // format: "2006-01-02.150405" - BackupTime time.Time + // format: "2006-01-02T15:04:05Z00:00" + BackupTime string } func (be *XtrabackupEngine) backupFileName() string { @@ -226,7 +226,7 @@ func (be *XtrabackupEngine) ExecuteBackup(ctx context.Context, cnf *Mycnf, mysql Position: replicationPosition, SkipCompress: !*backupStorageCompress, Params: *xtrabackupBackupFlags, - BackupTime: backupTime, + BackupTime: backupTime.Format(time.RFC3339), } data, err := json.MarshalIndent(bm, "", " ") @@ -272,7 +272,8 @@ func (be *XtrabackupEngine) ExecuteRestore( log.Warningf("Possibly incomplete backup %v in directory %v on BackupStorage (cannot JSON decode MANIFEST: %v)", bh.Name(), dir, err) continue } - if snapshotTime.Equal(unixZeroTime) /* uninitialized or not snapshot */ || bm.BackupTime.Before(snapshotTime) { + backupTime, _ := time.Parse(time.RFC3339, bm.BackupTime) + if snapshotTime.Equal(unixZeroTime) /* uninitialized or not snapshot */ || backupTime.Before(snapshotTime) { logger.Infof("Restore: found backup %v %v to restore with %v file", bh.Directory(), bh.Name(), bm.FileName) break } diff --git a/go/vt/vtctl/vtctl.go b/go/vt/vtctl/vtctl.go index 2a42d7381b7..39d974df30f 100644 --- a/go/vt/vtctl/vtctl.go +++ b/go/vt/vtctl/vtctl.go @@ -285,7 +285,7 @@ var commands = []commandGroup{ "Keyspaces", []command{ {"CreateKeyspace", commandCreateKeyspace, "[-sharding_column_name=name] [-sharding_column_type=type] [-served_from=tablettype1:ks1,tablettype2:ks2,...] [-force] [-keyspace_type=type] [-base_keyspace=base_keyspace] [-snapshot_time=time] ", - "Creates the specified keyspace."}, + "Creates the specified keyspace. keyspace_type can be NORMAL or SNAPSHOT. For a SNAPSHOT keyspace you must specify the name of a base_keyspace, and a snapshot_time in UTC, in RFC3339 time format, e.g. 2006-01-02T15:04:05Z00:00"}, {"DeleteKeyspace", commandDeleteKeyspace, "[-recursive] ", "Deletes the specified keyspace. In recursive mode, it also recursively deletes all shards in the keyspace. Otherwise, there must be no shards left in the keyspace."}, From 2cb4c0d79c935fd4769d41974d9d10f3caebb38c Mon Sep 17 00:00:00 2001 From: deepthi Date: Fri, 31 May 2019 10:49:41 -0700 Subject: [PATCH 08/17] revert wrapping errors to fix test failure Signed-off-by: deepthi --- go/vt/topo/vschema.go | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/go/vt/topo/vschema.go b/go/vt/topo/vschema.go index ea42467fb84..a2103ff10ea 100644 --- a/go/vt/topo/vschema.go +++ b/go/vt/topo/vschema.go @@ -43,17 +43,10 @@ func (ts *Server) SaveVSchema(ctx context.Context, keyspace string, vschema *vsc if len(data) == 0 { // No vschema, remove it. So we can remove the keyspace. - err = ts.globalCell.Delete(ctx, nodePath, nil) - if err != nil { - return vterrors.Wrap(err, "error from Delete VSchema") - } - return err + return ts.globalCell.Delete(ctx, nodePath, nil) } _, err = ts.globalCell.Update(ctx, nodePath, data, nil) - if err != nil { - return vterrors.Wrap(err, "error from Update VSchema") - } return err } From e56f5d199537cc040ae60d57eb1088a2115f53b4 Mon Sep 17 00:00:00 2001 From: deepthi Date: Fri, 31 May 2019 13:51:12 -0700 Subject: [PATCH 09/17] add fields to Tablet record to store which backup we restored from, and which gtid we restored to Signed-off-by: deepthi --- go/vt/mysqlctl/backup.go | 36 ++-- go/vt/mysqlctl/backupengine.go | 2 +- go/vt/mysqlctl/builtinbackupengine.go | 27 ++- go/vt/mysqlctl/xtrabackupengine.go | 25 +-- go/vt/proto/topodata/topodata.pb.go | 238 +++++++++++++----------- go/vt/vtctld/api_test.go | 4 +- go/vt/vttablet/tabletmanager/restore.go | 4 +- proto/topodata.proto | 6 + py/vtproto/topodata_pb2.py | 98 +++++----- 9 files changed, 249 insertions(+), 191 deletions(-) diff --git a/go/vt/mysqlctl/backup.go b/go/vt/mysqlctl/backup.go index d51aa5e2073..2b0ef6a94f3 100644 --- a/go/vt/mysqlctl/backup.go +++ b/go/vt/mysqlctl/backup.go @@ -220,27 +220,29 @@ func Restore( logger logutil.Logger, deleteBeforeRestore bool, dbName string, - snapshotTime time.Time) (mysql.Position, error) { + snapshotTime time.Time) (mysql.Position, string, error) { - rval := mysql.Position{} + var zeroPosition, rval mysql.Position + zeroPosition = mysql.Position{} + var t, backupTime string // Wait for mysqld to be ready, in case it was launched in parallel with us. if err := mysqld.Wait(ctx, cnf); err != nil { - return mysql.Position{}, err + return zeroPosition, t, err } if !deleteBeforeRestore { logger.Infof("Restore: checking no existing data is present") ok, err := checkNoDB(ctx, mysqld, dbName) if err != nil { - return mysql.Position{}, err + return zeroPosition, t, err } if !ok { logger.Infof("Auto-restore is enabled, but mysqld already contains data. Assuming vttablet was just restarted.") if err = PopulateMetadataTables(mysqld, localMetadata, dbName); err == nil { err = ErrExistingDB } - return mysql.Position{}, err + return zeroPosition, t, err } } @@ -248,13 +250,13 @@ func Restore( logger.Infof("Restore: looking for a suitable backup to restore") bs, err := backupstorage.GetBackupStorage() if err != nil { - return mysql.Position{}, err + return zeroPosition, t, err } defer bs.Close() bhs, err := bs.ListBackups(ctx, dir) if err != nil { - return mysql.Position{}, vterrors.Wrap(err, "ListBackups failed") + return zeroPosition, t, vterrors.Wrap(err, "ListBackups failed") } if len(bhs) == 0 { @@ -269,15 +271,15 @@ func Restore( if err2 := PopulateMetadataTables(mysqld, localMetadata, dbName); err2 == nil { err = ErrNoBackup } - return mysql.Position{}, err + return zeroPosition, t, err } be, err := GetBackupEngine() if err != nil { - return mysql.Position{}, vterrors.Wrap(err, "Failed to find backup engine") + return zeroPosition, t, vterrors.Wrap(err, "Failed to find backup engine") } - if rval, err = be.ExecuteRestore(ctx, cnf, mysqld, logger, dir, bhs, restoreConcurrency, hookExtraEnv, snapshotTime); err != nil { - return rval, err + if rval, backupTime, err = be.ExecuteRestore(ctx, cnf, mysqld, logger, dir, bhs, restoreConcurrency, hookExtraEnv, snapshotTime); err != nil { + return rval, backupTime, err } // mysqld needs to be running in order for mysql_upgrade to work. @@ -291,12 +293,12 @@ func Restore( // Note Start will use dba user for waiting, this is fine, it will be allowed. err = mysqld.Start(context.Background(), cnf, "--skip-grant-tables", "--skip-networking") if err != nil { - return mysql.Position{}, err + return zeroPosition, t, err } logger.Infof("Restore: running mysql_upgrade") if err := mysqld.RunMysqlUpgrade(); err != nil { - return mysql.Position{}, vterrors.Wrap(err, "mysql_upgrade failed") + return zeroPosition, t, vterrors.Wrap(err, "mysql_upgrade failed") } // Populate local_metadata before starting without --skip-networking, @@ -304,7 +306,7 @@ func Restore( logger.Infof("Restore: populating local_metadata") err = PopulateMetadataTables(mysqld, localMetadata, dbName) if err != nil { - return mysql.Position{}, err + return zeroPosition, t, err } // The MySQL manual recommends restarting mysqld after running mysql_upgrade, @@ -312,12 +314,12 @@ func Restore( logger.Infof("Restore: restarting mysqld after mysql_upgrade") err = mysqld.Shutdown(context.Background(), cnf, true) if err != nil { - return mysql.Position{}, err + return zeroPosition, t, err } err = mysqld.Start(context.Background(), cnf) if err != nil { - return mysql.Position{}, err + return zeroPosition, t, err } - return rval, nil + return rval, backupTime, nil } diff --git a/go/vt/mysqlctl/backupengine.go b/go/vt/mysqlctl/backupengine.go index 8cb80a6d692..9f3d0b6740d 100644 --- a/go/vt/mysqlctl/backupengine.go +++ b/go/vt/mysqlctl/backupengine.go @@ -36,7 +36,7 @@ var ( // BackupEngine is the interface to the backup engine type BackupEngine interface { ExecuteBackup(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, bh backupstorage.BackupHandle, backupConcurrency int, hookExtraEnv map[string]string, backupTime time.Time) (bool, error) - ExecuteRestore(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, dir string, bhs []backupstorage.BackupHandle, restoreConcurrency int, hookExtraEnv map[string]string, snapshotTime time.Time) (mysql.Position, error) + ExecuteRestore(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, dir string, bhs []backupstorage.BackupHandle, restoreConcurrency int, hookExtraEnv map[string]string, snapshotTime time.Time) (mysql.Position, string, error) } // BackupEngineMap contains the registered implementations for BackupEngine diff --git a/go/vt/mysqlctl/builtinbackupengine.go b/go/vt/mysqlctl/builtinbackupengine.go index fc7021fb3e6..89b75b4d097 100644 --- a/go/vt/mysqlctl/builtinbackupengine.go +++ b/go/vt/mysqlctl/builtinbackupengine.go @@ -521,13 +521,14 @@ func (be *BuiltinBackupEngine) ExecuteRestore( bhs []backupstorage.BackupHandle, restoreConcurrency int, hookExtraEnv map[string]string, - snapshotTime time.Time) (mysql.Position, error) { + snapshotTime time.Time) (mysql.Position, string, error) { var bh backupstorage.BackupHandle var bm builtinBackupManifest var toRestore int zeroPosition := mysql.Position{} unixZeroTime := time.Unix(0, 0).UTC() + var s string for toRestore = len(bhs) - 1; toRestore >= 0; toRestore-- { bh = bhs[toRestore] @@ -546,17 +547,27 @@ func (be *BuiltinBackupEngine) ExecuteRestore( backupTime, _ := time.Parse(time.RFC3339, bm.BackupTime) if snapshotTime.Equal(unixZeroTime) /* uninitialized or not snapshot */ || bm.BackupTime == "" /* restoring an older backup where MANIFEST does not have backupTime */ || backupTime.Before(snapshotTime) { logger.Infof("Restore: found backup %v %v to restore with %v files", bh.Directory(), bh.Name(), len(bm.FileEntries)) + // older backups don't have backupTime + if bm.BackupTime == "" { + // backup Name is of the format 2006-01-02.150405.cell-tabletAlias + if bhTime, err := time.Parse("2006-01-02.150405", bh.Name()[:17]); err == nil { + bm.BackupTime = bhTime.Format(time.RFC3339) + logger.Infof("Setting backup time to %v", bm.BackupTime) + } else { + logger.Warningf("error parsing time from backup handle name: %v, %v", bh.Name(), err) + } + } break } } if toRestore < 0 { if snapshotTime.After(unixZeroTime) { - return zeroPosition, vterrors.Errorf(vtrpc.Code_NOT_FOUND, "No valid backup found before time %v", snapshotTime.Format(time.RFC3339)) + return zeroPosition, s, vterrors.Errorf(vtrpc.Code_NOT_FOUND, "No valid backup found before time %v", snapshotTime.Format(time.RFC3339)) } // There is at least one attempted backup, but none could be read. // This implies there is data we ought to have, so it's not safe to start // up empty. - return zeroPosition, vterrors.New(vtrpc.Code_NOT_FOUND, "backup(s) found but none could be read, unsafe to start up empty, restart to retry restore") + return zeroPosition, s, vterrors.New(vtrpc.Code_NOT_FOUND, "backup(s) found but none could be read, unsafe to start up empty, restart to retry restore") } // Starting from here we won't be able to recover if we get stopped by a cancelled @@ -565,26 +576,26 @@ func (be *BuiltinBackupEngine) ExecuteRestore( logger.Infof("Restore: shutdown mysqld") err := mysqld.Shutdown(context.Background(), cnf, true) if err != nil { - return zeroPosition, err + return zeroPosition, s, err } logger.Infof("Restore: deleting existing files") if err := removeExistingFiles(cnf); err != nil { - return zeroPosition, err + return zeroPosition, s, err } logger.Infof("Restore: reinit config file") err = mysqld.ReinitConfig(context.Background(), cnf) if err != nil { - return zeroPosition, err + return zeroPosition, s, err } logger.Infof("Restore: copying all files") if err := be.restoreFiles(context.Background(), cnf, bh, bm.FileEntries, bm.TransformHook, !bm.SkipCompress, restoreConcurrency, hookExtraEnv); err != nil { - return zeroPosition, err + return zeroPosition, s, err } - return bm.Position, nil + return bm.Position, bm.BackupTime, nil } // restoreFiles will copy all the files from the BackupStorage to the diff --git a/go/vt/mysqlctl/xtrabackupengine.go b/go/vt/mysqlctl/xtrabackupengine.go index aa02f2a7cc8..aa243c9fc83 100644 --- a/go/vt/mysqlctl/xtrabackupengine.go +++ b/go/vt/mysqlctl/xtrabackupengine.go @@ -250,13 +250,14 @@ func (be *XtrabackupEngine) ExecuteRestore( bhs []backupstorage.BackupHandle, restoreConcurrency int, hookExtraEnv map[string]string, - snapshotTime time.Time) (mysql.Position, error) { + snapshotTime time.Time) (mysql.Position, string, error) { var bh backupstorage.BackupHandle var bm xtraBackupManifest var index int zeroPosition := mysql.Position{} unixZeroTime := time.Unix(0, 0).UTC() + var s string for index = len(bhs) - 1; index >= 0; index-- { bh = bhs[index] @@ -280,12 +281,12 @@ func (be *XtrabackupEngine) ExecuteRestore( } if index < 0 { if snapshotTime.After(unixZeroTime) { - return mysql.Position{}, vterrors.Errorf(vtrpc.Code_NOT_FOUND, "No valid backup found before time %v", snapshotTime.Format(time.RFC3339)) + return zeroPosition, s, vterrors.Errorf(vtrpc.Code_NOT_FOUND, "No valid backup found before time %v", snapshotTime.Format(time.RFC3339)) } // There is at least one attempted backup, but none could be read. // This implies there is data we ought to have, so it's not safe to start // up empty. - return zeroPosition, errors.New("backup(s) found but none could be read, unsafe to start up empty, restart to retry restore") + return zeroPosition, s, errors.New("backup(s) found but none could be read, unsafe to start up empty, restart to retry restore") } // Starting from here we won't be able to recover if we get stopped by a cancelled @@ -294,18 +295,18 @@ func (be *XtrabackupEngine) ExecuteRestore( logger.Infof("Restore: shutdown mysqld") err := mysqld.Shutdown(context.Background(), cnf, true) if err != nil { - return zeroPosition, err + return zeroPosition, s, err } logger.Infof("Restore: deleting existing files") if err := removeExistingFiles(cnf); err != nil { - return zeroPosition, err + return zeroPosition, s, err } logger.Infof("Restore: reinit config file") err = mysqld.ReinitConfig(context.Background(), cnf) if err != nil { - return zeroPosition, err + return zeroPosition, s, err } // copy / extract files @@ -315,7 +316,7 @@ func (be *XtrabackupEngine) ExecuteRestore( // extract all the files if err := be.restoreFile(ctx, cnf, logger, bh, !bm.SkipCompress, be.backupFileName()); err != nil { logger.Errorf("error restoring backup file %v:%v", be.backupFileName(), err) - return zeroPosition, err + return zeroPosition, s, err } // copy / extract files @@ -330,7 +331,7 @@ func (be *XtrabackupEngine) ExecuteRestore( prepareOut, _ := prepareCmd.StdoutPipe() prepareErr, _ := prepareCmd.StderrPipe() if err = prepareCmd.Start(); err != nil { - return zeroPosition, vterrors.Wrap(err, "unable to start prepare") + return zeroPosition, s, vterrors.Wrap(err, "unable to start prepare") } errOutput, _ := ioutil.ReadAll(prepareErr) @@ -345,7 +346,7 @@ func (be *XtrabackupEngine) ExecuteRestore( } if err != nil { - return zeroPosition, vterrors.Wrap(err, "prepare step failed") + return zeroPosition, s, vterrors.Wrap(err, "prepare step failed") } // then copy-back @@ -360,7 +361,7 @@ func (be *XtrabackupEngine) ExecuteRestore( copybackOut, _ := copybackCmd.StdoutPipe() if err = copybackCmd.Start(); err != nil { - return zeroPosition, vterrors.Wrap(err, "unable to start copy-back") + return zeroPosition, s, vterrors.Wrap(err, "unable to start copy-back") } errOutput, _ = ioutil.ReadAll(copybackErr) @@ -375,12 +376,12 @@ func (be *XtrabackupEngine) ExecuteRestore( } if err != nil { - return zeroPosition, vterrors.Wrap(err, "copy-back step failed") + return zeroPosition, s, vterrors.Wrap(err, "copy-back step failed") } // now find the slave position and return that logger.Infof("Returning replication position %v", bm.Position) - return bm.Position, nil + return bm.Position, bm.BackupTime, nil } // restoreFile restores an individual file. diff --git a/go/vt/proto/topodata/topodata.pb.go b/go/vt/proto/topodata/topodata.pb.go index aa6c92f209a..5658fee6aef 100644 --- a/go/vt/proto/topodata/topodata.pb.go +++ b/go/vt/proto/topodata/topodata.pb.go @@ -42,7 +42,7 @@ func (x KeyspaceType) String() string { return proto.EnumName(KeyspaceType_name, int32(x)) } func (KeyspaceType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_topodata_5534b108e94bf28c, []int{0} + return fileDescriptor_topodata_db9f508878dc735b, []int{0} } // KeyspaceIdType describes the type of the sharding key for a @@ -75,7 +75,7 @@ func (x KeyspaceIdType) String() string { return proto.EnumName(KeyspaceIdType_name, int32(x)) } func (KeyspaceIdType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_topodata_5534b108e94bf28c, []int{1} + return fileDescriptor_topodata_db9f508878dc735b, []int{1} } // TabletType represents the type of a given tablet. @@ -144,7 +144,7 @@ func (x TabletType) String() string { return proto.EnumName(TabletType_name, int32(x)) } func (TabletType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_topodata_5534b108e94bf28c, []int{2} + return fileDescriptor_topodata_db9f508878dc735b, []int{2} } // KeyRange describes a range of sharding keys, when range-based @@ -161,7 +161,7 @@ func (m *KeyRange) Reset() { *m = KeyRange{} } func (m *KeyRange) String() string { return proto.CompactTextString(m) } func (*KeyRange) ProtoMessage() {} func (*KeyRange) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5534b108e94bf28c, []int{0} + return fileDescriptor_topodata_db9f508878dc735b, []int{0} } func (m *KeyRange) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KeyRange.Unmarshal(m, b) @@ -211,7 +211,7 @@ func (m *TabletAlias) Reset() { *m = TabletAlias{} } func (m *TabletAlias) String() string { return proto.CompactTextString(m) } func (*TabletAlias) ProtoMessage() {} func (*TabletAlias) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5534b108e94bf28c, []int{1} + return fileDescriptor_topodata_db9f508878dc735b, []int{1} } func (m *TabletAlias) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TabletAlias.Unmarshal(m, b) @@ -277,7 +277,11 @@ type Tablet struct { // MySQL port. Use topoproto.MysqlPort and topoproto.SetMysqlPort // to access this variable. The functions provide support // for legacy behavior. - MysqlPort int32 `protobuf:"varint,13,opt,name=mysql_port,json=mysqlPort,proto3" json:"mysql_port,omitempty"` + MysqlPort int32 `protobuf:"varint,13,opt,name=mysql_port,json=mysqlPort,proto3" json:"mysql_port,omitempty"` + // Timestamp of backup that this tablet was restored from + BackupTime string `protobuf:"bytes,14,opt,name=backup_time,json=backupTime,proto3" json:"backup_time,omitempty"` + // GTID that this tablet was restored up to + RestorePosition string `protobuf:"bytes,15,opt,name=restore_position,json=restorePosition,proto3" json:"restore_position,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -287,7 +291,7 @@ func (m *Tablet) Reset() { *m = Tablet{} } func (m *Tablet) String() string { return proto.CompactTextString(m) } func (*Tablet) ProtoMessage() {} func (*Tablet) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5534b108e94bf28c, []int{2} + return fileDescriptor_topodata_db9f508878dc735b, []int{2} } func (m *Tablet) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Tablet.Unmarshal(m, b) @@ -384,6 +388,20 @@ func (m *Tablet) GetMysqlPort() int32 { return 0 } +func (m *Tablet) GetBackupTime() string { + if m != nil { + return m.BackupTime + } + return "" +} + +func (m *Tablet) GetRestorePosition() string { + if m != nil { + return m.RestorePosition + } + return "" +} + // A Shard contains data about a subset of the data whithin a keyspace. type Shard struct { // No lock is necessary to update this field, when for instance @@ -422,7 +440,7 @@ func (m *Shard) Reset() { *m = Shard{} } func (m *Shard) String() string { return proto.CompactTextString(m) } func (*Shard) ProtoMessage() {} func (*Shard) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5534b108e94bf28c, []int{3} + return fileDescriptor_topodata_db9f508878dc735b, []int{3} } func (m *Shard) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Shard.Unmarshal(m, b) @@ -497,7 +515,7 @@ func (m *Shard_ServedType) Reset() { *m = Shard_ServedType{} } func (m *Shard_ServedType) String() string { return proto.CompactTextString(m) } func (*Shard_ServedType) ProtoMessage() {} func (*Shard_ServedType) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5534b108e94bf28c, []int{3, 0} + return fileDescriptor_topodata_db9f508878dc735b, []int{3, 0} } func (m *Shard_ServedType) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Shard_ServedType.Unmarshal(m, b) @@ -554,7 +572,7 @@ func (m *Shard_SourceShard) Reset() { *m = Shard_SourceShard{} } func (m *Shard_SourceShard) String() string { return proto.CompactTextString(m) } func (*Shard_SourceShard) ProtoMessage() {} func (*Shard_SourceShard) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5534b108e94bf28c, []int{3, 1} + return fileDescriptor_topodata_db9f508878dc735b, []int{3, 1} } func (m *Shard_SourceShard) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Shard_SourceShard.Unmarshal(m, b) @@ -627,7 +645,7 @@ func (m *Shard_TabletControl) Reset() { *m = Shard_TabletControl{} } func (m *Shard_TabletControl) String() string { return proto.CompactTextString(m) } func (*Shard_TabletControl) ProtoMessage() {} func (*Shard_TabletControl) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5534b108e94bf28c, []int{3, 2} + return fileDescriptor_topodata_db9f508878dc735b, []int{3, 2} } func (m *Shard_TabletControl) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Shard_TabletControl.Unmarshal(m, b) @@ -707,7 +725,7 @@ func (m *Keyspace) Reset() { *m = Keyspace{} } func (m *Keyspace) String() string { return proto.CompactTextString(m) } func (*Keyspace) ProtoMessage() {} func (*Keyspace) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5534b108e94bf28c, []int{4} + return fileDescriptor_topodata_db9f508878dc735b, []int{4} } func (m *Keyspace) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Keyspace.Unmarshal(m, b) @@ -787,7 +805,7 @@ func (m *Keyspace_ServedFrom) Reset() { *m = Keyspace_ServedFrom{} } func (m *Keyspace_ServedFrom) String() string { return proto.CompactTextString(m) } func (*Keyspace_ServedFrom) ProtoMessage() {} func (*Keyspace_ServedFrom) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5534b108e94bf28c, []int{4, 0} + return fileDescriptor_topodata_db9f508878dc735b, []int{4, 0} } func (m *Keyspace_ServedFrom) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Keyspace_ServedFrom.Unmarshal(m, b) @@ -843,7 +861,7 @@ func (m *ShardReplication) Reset() { *m = ShardReplication{} } func (m *ShardReplication) String() string { return proto.CompactTextString(m) } func (*ShardReplication) ProtoMessage() {} func (*ShardReplication) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5534b108e94bf28c, []int{5} + return fileDescriptor_topodata_db9f508878dc735b, []int{5} } func (m *ShardReplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardReplication.Unmarshal(m, b) @@ -882,7 +900,7 @@ func (m *ShardReplication_Node) Reset() { *m = ShardReplication_Node{} } func (m *ShardReplication_Node) String() string { return proto.CompactTextString(m) } func (*ShardReplication_Node) ProtoMessage() {} func (*ShardReplication_Node) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5534b108e94bf28c, []int{5, 0} + return fileDescriptor_topodata_db9f508878dc735b, []int{5, 0} } func (m *ShardReplication_Node) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardReplication_Node.Unmarshal(m, b) @@ -923,7 +941,7 @@ func (m *ShardReference) Reset() { *m = ShardReference{} } func (m *ShardReference) String() string { return proto.CompactTextString(m) } func (*ShardReference) ProtoMessage() {} func (*ShardReference) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5534b108e94bf28c, []int{6} + return fileDescriptor_topodata_db9f508878dc735b, []int{6} } func (m *ShardReference) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardReference.Unmarshal(m, b) @@ -973,7 +991,7 @@ func (m *ShardTabletControl) Reset() { *m = ShardTabletControl{} } func (m *ShardTabletControl) String() string { return proto.CompactTextString(m) } func (*ShardTabletControl) ProtoMessage() {} func (*ShardTabletControl) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5534b108e94bf28c, []int{7} + return fileDescriptor_topodata_db9f508878dc735b, []int{7} } func (m *ShardTabletControl) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardTabletControl.Unmarshal(m, b) @@ -1031,7 +1049,7 @@ func (m *SrvKeyspace) Reset() { *m = SrvKeyspace{} } func (m *SrvKeyspace) String() string { return proto.CompactTextString(m) } func (*SrvKeyspace) ProtoMessage() {} func (*SrvKeyspace) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5534b108e94bf28c, []int{8} + return fileDescriptor_topodata_db9f508878dc735b, []int{8} } func (m *SrvKeyspace) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SrvKeyspace.Unmarshal(m, b) @@ -1095,7 +1113,7 @@ func (m *SrvKeyspace_KeyspacePartition) Reset() { *m = SrvKeyspace_Keysp func (m *SrvKeyspace_KeyspacePartition) String() string { return proto.CompactTextString(m) } func (*SrvKeyspace_KeyspacePartition) ProtoMessage() {} func (*SrvKeyspace_KeyspacePartition) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5534b108e94bf28c, []int{8, 0} + return fileDescriptor_topodata_db9f508878dc735b, []int{8, 0} } func (m *SrvKeyspace_KeyspacePartition) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SrvKeyspace_KeyspacePartition.Unmarshal(m, b) @@ -1152,7 +1170,7 @@ func (m *SrvKeyspace_ServedFrom) Reset() { *m = SrvKeyspace_ServedFrom{} func (m *SrvKeyspace_ServedFrom) String() string { return proto.CompactTextString(m) } func (*SrvKeyspace_ServedFrom) ProtoMessage() {} func (*SrvKeyspace_ServedFrom) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5534b108e94bf28c, []int{8, 1} + return fileDescriptor_topodata_db9f508878dc735b, []int{8, 1} } func (m *SrvKeyspace_ServedFrom) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SrvKeyspace_ServedFrom.Unmarshal(m, b) @@ -1207,7 +1225,7 @@ func (m *CellInfo) Reset() { *m = CellInfo{} } func (m *CellInfo) String() string { return proto.CompactTextString(m) } func (*CellInfo) ProtoMessage() {} func (*CellInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5534b108e94bf28c, []int{9} + return fileDescriptor_topodata_db9f508878dc735b, []int{9} } func (m *CellInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CellInfo.Unmarshal(m, b) @@ -1254,7 +1272,7 @@ func (m *CellsAlias) Reset() { *m = CellsAlias{} } func (m *CellsAlias) String() string { return proto.CompactTextString(m) } func (*CellsAlias) ProtoMessage() {} func (*CellsAlias) Descriptor() ([]byte, []int) { - return fileDescriptor_topodata_5534b108e94bf28c, []int{10} + return fileDescriptor_topodata_db9f508878dc735b, []int{10} } func (m *CellsAlias) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CellsAlias.Unmarshal(m, b) @@ -1307,91 +1325,93 @@ func init() { proto.RegisterEnum("topodata.TabletType", TabletType_name, TabletType_value) } -func init() { proto.RegisterFile("topodata.proto", fileDescriptor_topodata_5534b108e94bf28c) } - -var fileDescriptor_topodata_5534b108e94bf28c = []byte{ - // 1314 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xe1, 0x6e, 0x1b, 0x45, - 0x10, 0xee, 0xd9, 0x67, 0xe7, 0x3c, 0x3e, 0x27, 0xd7, 0x25, 0xad, 0x4e, 0x07, 0x15, 0x91, 0x51, - 0x85, 0x15, 0x84, 0x03, 0x69, 0x0b, 0x51, 0x11, 0x52, 0x5d, 0xc7, 0xa5, 0x69, 0x12, 0xc7, 0x5a, - 0x3b, 0x82, 0xf2, 0xe7, 0x74, 0xb1, 0x37, 0xe9, 0x29, 0xe7, 0x3b, 0xf7, 0x76, 0x63, 0xc9, 0xbc, - 0x02, 0x3f, 0x80, 0xbf, 0xbc, 0x01, 0x8f, 0xc0, 0xbb, 0xf0, 0x07, 0x9e, 0x04, 0xed, 0xec, 0xdd, - 0xf9, 0x6c, 0xb7, 0x25, 0x45, 0xf9, 0xb7, 0x33, 0x3b, 0x33, 0x37, 0xf3, 0xcd, 0xcc, 0xb7, 0x36, - 0xac, 0x8b, 0x68, 0x12, 0x8d, 0x3c, 0xe1, 0x35, 0x27, 0x71, 0x24, 0x22, 0x62, 0xa4, 0xb2, 0x03, - 0xc2, 0x1f, 0x33, 0xa5, 0xad, 0xef, 0x82, 0x71, 0xc8, 0x66, 0xd4, 0x0b, 0x2f, 0x18, 0xd9, 0x84, - 0x12, 0x17, 0x5e, 0x2c, 0x6c, 0x6d, 0x4b, 0x6b, 0x98, 0x54, 0x09, 0xc4, 0x82, 0x22, 0x0b, 0x47, - 0x76, 0x01, 0x75, 0xf2, 0x58, 0x7f, 0x00, 0xd5, 0x81, 0x77, 0x16, 0x30, 0xd1, 0x0a, 0x7c, 0x8f, - 0x13, 0x02, 0xfa, 0x90, 0x05, 0x01, 0x7a, 0x55, 0x28, 0x9e, 0xa5, 0xd3, 0x95, 0xaf, 0x9c, 0x6a, - 0x54, 0x1e, 0xeb, 0x7f, 0xea, 0x50, 0x56, 0x5e, 0xe4, 0x33, 0x28, 0x79, 0xd2, 0x13, 0x3d, 0xaa, - 0xbb, 0x77, 0x9a, 0x59, 0xa6, 0xb9, 0xb0, 0x54, 0xd9, 0x10, 0x07, 0x8c, 0x57, 0x11, 0x17, 0xa1, - 0x37, 0x66, 0x18, 0xae, 0x42, 0x33, 0x99, 0xec, 0x81, 0x31, 0x89, 0x62, 0xe1, 0x8e, 0xbd, 0x89, - 0xad, 0x6f, 0x15, 0x1b, 0xd5, 0xdd, 0x7b, 0xcb, 0xb1, 0x9a, 0xbd, 0x28, 0x16, 0xc7, 0xde, 0xa4, - 0x13, 0x8a, 0x78, 0x46, 0xd7, 0x26, 0x4a, 0x92, 0x51, 0x2f, 0xd9, 0x8c, 0x4f, 0xbc, 0x21, 0xb3, - 0x4b, 0x2a, 0x6a, 0x2a, 0x23, 0x0c, 0xaf, 0xbc, 0x78, 0x64, 0x97, 0xf1, 0x42, 0x09, 0x64, 0x07, - 0x2a, 0x97, 0x6c, 0xe6, 0xc6, 0x12, 0x29, 0x7b, 0x0d, 0x13, 0x27, 0xf3, 0x8f, 0xa5, 0x18, 0x62, - 0x18, 0x85, 0x66, 0x03, 0x74, 0x31, 0x9b, 0x30, 0xdb, 0xd8, 0xd2, 0x1a, 0xeb, 0xbb, 0x9b, 0xcb, - 0x89, 0x0d, 0x66, 0x13, 0x46, 0xd1, 0x82, 0x34, 0xc0, 0x1a, 0x9d, 0xb9, 0xb2, 0x22, 0x37, 0x9a, - 0xb2, 0x38, 0xf6, 0x47, 0xcc, 0xae, 0xe0, 0xb7, 0xd7, 0x47, 0x67, 0x5d, 0x6f, 0xcc, 0x4e, 0x12, - 0x2d, 0x69, 0x82, 0x2e, 0xbc, 0x0b, 0x6e, 0x03, 0x16, 0xeb, 0xac, 0x14, 0x3b, 0xf0, 0x2e, 0xb8, - 0xaa, 0x14, 0xed, 0xc8, 0x7d, 0x58, 0x1f, 0xcf, 0xf8, 0xeb, 0xc0, 0xcd, 0x20, 0x34, 0x31, 0x6e, - 0x0d, 0xb5, 0xcf, 0x53, 0x1c, 0xef, 0x01, 0x28, 0x33, 0x09, 0x8f, 0x5d, 0xdb, 0xd2, 0x1a, 0x25, - 0x5a, 0x41, 0x8d, 0x44, 0xcf, 0x79, 0x0c, 0x66, 0x1e, 0x45, 0xd9, 0xdc, 0x4b, 0x36, 0x4b, 0xfa, - 0x2d, 0x8f, 0x12, 0xb2, 0xa9, 0x17, 0x5c, 0xa9, 0x0e, 0x95, 0xa8, 0x12, 0x1e, 0x17, 0xf6, 0x34, - 0xe7, 0x6b, 0xa8, 0x64, 0x49, 0xfd, 0x97, 0x63, 0x25, 0xe7, 0xf8, 0x42, 0x37, 0x8a, 0x96, 0xfe, - 0x42, 0x37, 0xaa, 0x96, 0x59, 0xff, 0xad, 0x0c, 0xa5, 0x3e, 0x76, 0x61, 0x0f, 0xcc, 0xb1, 0xc7, - 0x05, 0x8b, 0xdd, 0x6b, 0x4c, 0x50, 0x55, 0x99, 0xaa, 0x29, 0x5d, 0xe8, 0x5f, 0xe1, 0x1a, 0xfd, - 0xfb, 0x16, 0x4c, 0xce, 0xe2, 0x29, 0x1b, 0xb9, 0xb2, 0x49, 0xdc, 0x2e, 0x2e, 0x63, 0x8e, 0x19, - 0x35, 0xfb, 0x68, 0x83, 0xdd, 0xac, 0xf2, 0xec, 0xcc, 0xc9, 0x13, 0xa8, 0xf1, 0xe8, 0x2a, 0x1e, - 0x32, 0x17, 0xe7, 0x87, 0x27, 0x03, 0xfa, 0xe1, 0x8a, 0x3f, 0x1a, 0xe1, 0x99, 0x9a, 0x7c, 0x2e, - 0x70, 0xf2, 0x0c, 0x36, 0x04, 0x56, 0xe3, 0x0e, 0xa3, 0x50, 0xc4, 0x51, 0xc0, 0xed, 0xf2, 0xf2, - 0x90, 0xab, 0x18, 0xaa, 0xe8, 0xb6, 0xb2, 0xa2, 0xeb, 0x22, 0x2f, 0x72, 0xb2, 0x0d, 0xb7, 0x7d, - 0xee, 0x26, 0xb0, 0xc9, 0x14, 0xfd, 0xf0, 0x02, 0x27, 0xd8, 0xa0, 0x1b, 0x3e, 0x3f, 0x46, 0x7d, - 0x5f, 0xa9, 0x9d, 0x97, 0x00, 0xf3, 0x82, 0xc8, 0x23, 0xa8, 0x26, 0x19, 0xe0, 0x24, 0x6b, 0xef, - 0x98, 0x64, 0x10, 0xd9, 0x59, 0x36, 0x55, 0x92, 0x00, 0xb7, 0x0b, 0x5b, 0x45, 0xd9, 0x54, 0x14, - 0x9c, 0xdf, 0x35, 0xa8, 0xe6, 0x8a, 0x4d, 0x29, 0x42, 0xcb, 0x28, 0x62, 0x61, 0x29, 0x0b, 0x6f, - 0x5b, 0xca, 0xe2, 0x5b, 0x97, 0x52, 0xbf, 0x46, 0x53, 0xef, 0x42, 0x19, 0x13, 0xe5, 0x76, 0x09, - 0x73, 0x4b, 0x24, 0xe7, 0x0f, 0x0d, 0x6a, 0x0b, 0x28, 0xde, 0x68, 0xed, 0xe4, 0x73, 0x20, 0x67, - 0x81, 0x37, 0xbc, 0x0c, 0x7c, 0x2e, 0xe4, 0x40, 0xa9, 0x14, 0x74, 0x34, 0xb9, 0x9d, 0xbb, 0xc1, - 0xa0, 0x5c, 0x66, 0x79, 0x1e, 0x47, 0x3f, 0xb1, 0x10, 0xb9, 0xc9, 0xa0, 0x89, 0x94, 0xed, 0x44, - 0xc9, 0x2a, 0xd7, 0xff, 0x2a, 0x22, 0x73, 0x2b, 0x74, 0xbe, 0x80, 0x4d, 0x04, 0xc4, 0x0f, 0x2f, - 0xdc, 0x61, 0x14, 0x5c, 0x8d, 0x43, 0xa4, 0x93, 0x64, 0xd3, 0x48, 0x7a, 0xd7, 0xc6, 0x2b, 0xc9, - 0x28, 0xe4, 0xc5, 0xaa, 0x07, 0xd6, 0x59, 0xc0, 0x3a, 0xed, 0x05, 0x10, 0xf1, 0x1b, 0x07, 0x6a, - 0xc6, 0x97, 0x62, 0x61, 0xcd, 0x4f, 0xb2, 0x4d, 0x39, 0x8f, 0xa3, 0x31, 0x5f, 0xa5, 0xe2, 0x34, - 0x46, 0xb2, 0x2c, 0xcf, 0xe2, 0x68, 0x9c, 0x2e, 0x8b, 0x3c, 0x73, 0xf2, 0x0d, 0xd4, 0xd2, 0x4e, - 0xab, 0x34, 0x4a, 0x98, 0xc6, 0xdd, 0xd5, 0x10, 0x98, 0x84, 0x79, 0x99, 0x93, 0xc8, 0x27, 0x50, - 0x3b, 0xf3, 0x38, 0x73, 0xb3, 0xd9, 0x51, 0xbc, 0x6d, 0x4a, 0x65, 0x86, 0xd0, 0x97, 0x50, 0xe3, - 0xa1, 0x37, 0xe1, 0xaf, 0x22, 0xe1, 0xca, 0xe7, 0x2f, 0xa1, 0x70, 0xb3, 0x39, 0x15, 0xf8, 0x1a, - 0x0e, 0xfc, 0x31, 0xa3, 0x66, 0x6a, 0x22, 0x25, 0xe7, 0x2a, 0xdd, 0x05, 0x99, 0xe3, 0xcd, 0xce, - 0x43, 0x7e, 0xd2, 0x8b, 0x8b, 0x93, 0xae, 0x9a, 0x5c, 0xff, 0x59, 0x03, 0x4b, 0x91, 0x02, 0x9b, - 0x04, 0xfe, 0xd0, 0x13, 0x7e, 0x14, 0x92, 0x47, 0x50, 0x0a, 0xa3, 0x11, 0x93, 0xb4, 0x27, 0x11, - 0xfe, 0x78, 0x89, 0x07, 0x72, 0xa6, 0xcd, 0x6e, 0x34, 0x62, 0x54, 0x59, 0x3b, 0x4f, 0x40, 0x97, - 0xa2, 0x24, 0xcf, 0xa4, 0x84, 0xeb, 0x90, 0xa7, 0x98, 0x0b, 0xf5, 0x53, 0x58, 0x4f, 0xbe, 0x70, - 0xce, 0x62, 0x16, 0x0e, 0x99, 0x7c, 0xf4, 0x73, 0x13, 0x86, 0xe7, 0xf7, 0xa6, 0xd8, 0xfa, 0x2f, - 0x1a, 0x10, 0x8c, 0xbb, 0xb8, 0x7a, 0x37, 0x11, 0x9b, 0x3c, 0x84, 0xbb, 0xaf, 0xaf, 0x58, 0x3c, - 0x53, 0x8c, 0x37, 0x64, 0xee, 0xc8, 0xe7, 0xf2, 0x2b, 0x8a, 0x41, 0x0c, 0xba, 0x89, 0xb7, 0x7d, - 0x75, 0xb9, 0x9f, 0xdc, 0xd5, 0xff, 0xd1, 0xa1, 0xda, 0x8f, 0xa7, 0xd9, 0xd8, 0x7c, 0x07, 0x30, - 0xf1, 0x62, 0xe1, 0x4b, 0x4c, 0x53, 0xd8, 0x3f, 0xcd, 0xc1, 0x3e, 0x37, 0xcd, 0x26, 0xb4, 0x97, - 0xda, 0xd3, 0x9c, 0xeb, 0x5b, 0x37, 0xb4, 0xf0, 0xde, 0x1b, 0x5a, 0xfc, 0x1f, 0x1b, 0xda, 0x82, - 0x6a, 0x6e, 0x43, 0x93, 0x05, 0xdd, 0x7a, 0x73, 0x1d, 0xb9, 0x1d, 0x85, 0xf9, 0x8e, 0x3a, 0x7f, - 0x6b, 0x70, 0x7b, 0xa5, 0x44, 0xb9, 0x15, 0xb9, 0x47, 0xf2, 0xdd, 0x5b, 0x31, 0x7f, 0x1d, 0x49, - 0x1b, 0x2c, 0xcc, 0xd2, 0x8d, 0xd3, 0x81, 0x52, 0x0b, 0x52, 0xcd, 0xd7, 0xb5, 0x38, 0x71, 0x74, - 0x83, 0x2f, 0xc8, 0x9c, 0xf4, 0xe0, 0x8e, 0x0a, 0xb2, 0xfc, 0x4a, 0xaa, 0x97, 0xfa, 0xa3, 0xa5, - 0x48, 0x8b, 0x8f, 0xe4, 0x07, 0x7c, 0x45, 0xc7, 0x1d, 0xf7, 0x26, 0x36, 0xfe, 0x1d, 0xaf, 0x58, - 0x42, 0xdd, 0x87, 0x60, 0xb4, 0x59, 0x10, 0x1c, 0x84, 0xe7, 0x91, 0xfc, 0x85, 0x86, 0xb8, 0xc4, - 0xae, 0x37, 0x1a, 0xc5, 0x8c, 0xf3, 0x64, 0xea, 0x6b, 0x4a, 0xdb, 0x52, 0x4a, 0xb9, 0x12, 0x71, - 0x14, 0x89, 0x24, 0x20, 0x9e, 0x13, 0xa2, 0xa8, 0x03, 0xc8, 0x60, 0x5c, 0xfd, 0xca, 0x79, 0x23, - 0xdd, 0x6c, 0x37, 0xc0, 0xcc, 0xf3, 0x27, 0x01, 0x28, 0x77, 0x4f, 0xe8, 0x71, 0xeb, 0xc8, 0xba, - 0x45, 0x4c, 0x30, 0xfa, 0xdd, 0x56, 0xaf, 0xff, 0xfc, 0x64, 0x60, 0x69, 0xdb, 0xbb, 0xb0, 0xbe, - 0x38, 0x4e, 0xa4, 0x02, 0xa5, 0xd3, 0x6e, 0xbf, 0x33, 0xb0, 0x6e, 0x49, 0xb7, 0xd3, 0x83, 0xee, - 0xe0, 0xab, 0x87, 0x96, 0x26, 0xd5, 0x4f, 0x5f, 0x0e, 0x3a, 0x7d, 0xab, 0xb0, 0xfd, 0xab, 0x06, - 0x30, 0xc7, 0x82, 0x54, 0x61, 0xed, 0xb4, 0x7b, 0xd8, 0x3d, 0xf9, 0xbe, 0xab, 0x5c, 0x8e, 0x5b, - 0xfd, 0x41, 0x87, 0x5a, 0x9a, 0xbc, 0xa0, 0x9d, 0xde, 0xd1, 0x41, 0xbb, 0x65, 0x15, 0xe4, 0x05, - 0xdd, 0x3f, 0xe9, 0x1e, 0xbd, 0xb4, 0x8a, 0x18, 0xab, 0x35, 0x68, 0x3f, 0x57, 0xc7, 0x7e, 0xaf, - 0x45, 0x3b, 0x96, 0x4e, 0x2c, 0x30, 0x3b, 0x3f, 0xf4, 0x3a, 0xf4, 0xe0, 0xb8, 0xd3, 0x1d, 0xb4, - 0x8e, 0xac, 0x92, 0xf4, 0x79, 0xda, 0x6a, 0x1f, 0x9e, 0xf6, 0xac, 0xb2, 0x0a, 0xd6, 0x1f, 0x9c, - 0xd0, 0x8e, 0xb5, 0x26, 0x85, 0x7d, 0xda, 0x3a, 0xe8, 0x76, 0xf6, 0x2d, 0xc3, 0x29, 0x58, 0xda, - 0xd3, 0x3d, 0xd8, 0xf0, 0xa3, 0xe6, 0xd4, 0x17, 0x8c, 0x73, 0xf5, 0x47, 0xe7, 0xc7, 0xfb, 0x89, - 0xe4, 0x47, 0x3b, 0xea, 0xb4, 0x73, 0x11, 0xed, 0x4c, 0xc5, 0x0e, 0xde, 0xee, 0xa4, 0x4d, 0x3d, - 0x2b, 0xa3, 0xfc, 0xe0, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa8, 0x5c, 0xc8, 0x21, 0x3e, 0x0d, - 0x00, 0x00, +func init() { proto.RegisterFile("topodata.proto", fileDescriptor_topodata_db9f508878dc735b) } + +var fileDescriptor_topodata_db9f508878dc735b = []byte{ + // 1352 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x5f, 0x6f, 0x1b, 0x45, + 0x10, 0xef, 0xf9, 0x5f, 0xec, 0xf1, 0xd9, 0xb9, 0x2e, 0x69, 0x75, 0x32, 0x54, 0x8d, 0x8c, 0x2a, + 0x4c, 0x10, 0x0e, 0xa4, 0x2d, 0x44, 0x45, 0x48, 0x75, 0x1d, 0x97, 0xa6, 0x49, 0x1c, 0x6b, 0xed, + 0x08, 0xca, 0xcb, 0xe9, 0x6c, 0x6f, 0xd2, 0x53, 0xec, 0xdb, 0xeb, 0xed, 0xda, 0x92, 0x79, 0xe7, + 0x89, 0x07, 0xe0, 0x95, 0x6f, 0xc0, 0x77, 0xe2, 0x05, 0x3e, 0x09, 0xda, 0xd9, 0x3b, 0xfb, 0x6c, + 0xb7, 0x21, 0x45, 0x79, 0x9b, 0x99, 0x9d, 0x99, 0x9b, 0x99, 0xfd, 0xfd, 0x66, 0x6d, 0x28, 0x4b, + 0x1e, 0xf0, 0xa1, 0x2b, 0xdd, 0x7a, 0x10, 0x72, 0xc9, 0x49, 0x3e, 0xd6, 0x2b, 0x20, 0xbd, 0x31, + 0xd3, 0xd6, 0xea, 0x1e, 0xe4, 0x8f, 0xd8, 0x8c, 0xba, 0xfe, 0x05, 0x23, 0x5b, 0x90, 0x15, 0xd2, + 0x0d, 0xa5, 0x6d, 0x6c, 0x1b, 0x35, 0x93, 0x6a, 0x85, 0x58, 0x90, 0x66, 0xfe, 0xd0, 0x4e, 0xa1, + 0x4d, 0x89, 0xd5, 0x87, 0x50, 0xec, 0xb9, 0xfd, 0x11, 0x93, 0x8d, 0x91, 0xe7, 0x0a, 0x42, 0x20, + 0x33, 0x60, 0xa3, 0x11, 0x46, 0x15, 0x28, 0xca, 0x2a, 0x68, 0xe2, 0xe9, 0xa0, 0x12, 0x55, 0x62, + 0xf5, 0xe7, 0x2c, 0xe4, 0x74, 0x14, 0xf9, 0x0c, 0xb2, 0xae, 0x8a, 0xc4, 0x88, 0xe2, 0xde, 0x9d, + 0xfa, 0xbc, 0xd2, 0x44, 0x5a, 0xaa, 0x7d, 0x48, 0x05, 0xf2, 0xaf, 0xb9, 0x90, 0xbe, 0x3b, 0x66, + 0x98, 0xae, 0x40, 0xe7, 0x3a, 0xd9, 0x87, 0x7c, 0xc0, 0x43, 0xe9, 0x8c, 0xdd, 0xc0, 0xce, 0x6c, + 0xa7, 0x6b, 0xc5, 0xbd, 0x7b, 0xab, 0xb9, 0xea, 0x1d, 0x1e, 0xca, 0x13, 0x37, 0x68, 0xf9, 0x32, + 0x9c, 0xd1, 0x8d, 0x40, 0x6b, 0x2a, 0xeb, 0x25, 0x9b, 0x89, 0xc0, 0x1d, 0x30, 0x3b, 0xab, 0xb3, + 0xc6, 0x3a, 0x8e, 0xe1, 0xb5, 0x1b, 0x0e, 0xed, 0x1c, 0x1e, 0x68, 0x85, 0xec, 0x42, 0xe1, 0x92, + 0xcd, 0x9c, 0x50, 0x4d, 0xca, 0xde, 0xc0, 0xc2, 0xc9, 0xe2, 0x63, 0xf1, 0x0c, 0x31, 0x8d, 0x9e, + 0x66, 0x0d, 0x32, 0x72, 0x16, 0x30, 0x3b, 0xbf, 0x6d, 0xd4, 0xca, 0x7b, 0x5b, 0xab, 0x85, 0xf5, + 0x66, 0x01, 0xa3, 0xe8, 0x41, 0x6a, 0x60, 0x0d, 0xfb, 0x8e, 0xea, 0xc8, 0xe1, 0x53, 0x16, 0x86, + 0xde, 0x90, 0xd9, 0x05, 0xfc, 0x76, 0x79, 0xd8, 0x6f, 0xbb, 0x63, 0x76, 0x1a, 0x59, 0x49, 0x1d, + 0x32, 0xd2, 0xbd, 0x10, 0x36, 0x60, 0xb3, 0x95, 0xb5, 0x66, 0x7b, 0xee, 0x85, 0xd0, 0x9d, 0xa2, + 0x1f, 0x79, 0x00, 0xe5, 0xf1, 0x4c, 0xbc, 0x19, 0x39, 0xf3, 0x11, 0x9a, 0x98, 0xb7, 0x84, 0xd6, + 0x17, 0xf1, 0x1c, 0xef, 0x01, 0x68, 0x37, 0x35, 0x1e, 0xbb, 0xb4, 0x6d, 0xd4, 0xb2, 0xb4, 0x80, + 0x16, 0x35, 0x3d, 0x72, 0x1f, 0x8a, 0x7d, 0x77, 0x70, 0x39, 0x09, 0x1c, 0x05, 0x1c, 0xbb, 0x8c, + 0x29, 0x40, 0x9b, 0x7a, 0xde, 0x98, 0x91, 0x4f, 0xc1, 0x0a, 0x99, 0x90, 0x3c, 0x64, 0x4e, 0xc0, + 0x85, 0x27, 0x3d, 0xee, 0xdb, 0x9b, 0xe8, 0xb5, 0x19, 0xd9, 0x3b, 0x91, 0xb9, 0xf2, 0x04, 0xcc, + 0xe4, 0x8d, 0x28, 0xa0, 0x5c, 0xb2, 0x59, 0x84, 0x1d, 0x25, 0xaa, 0xf1, 0x4f, 0xdd, 0xd1, 0x44, + 0xdf, 0x76, 0x96, 0x6a, 0xe5, 0x49, 0x6a, 0xdf, 0xa8, 0x7c, 0x0d, 0x85, 0x79, 0x83, 0xff, 0x15, + 0x58, 0x48, 0x04, 0xbe, 0xcc, 0xe4, 0xd3, 0x56, 0xe6, 0x65, 0x26, 0x5f, 0xb4, 0xcc, 0xea, 0xef, + 0x39, 0xc8, 0x76, 0xf1, 0x46, 0xf7, 0xc1, 0x1c, 0xbb, 0x42, 0xb2, 0xd0, 0xb9, 0x06, 0x1a, 0x8b, + 0xda, 0x55, 0x23, 0x7e, 0x09, 0x0b, 0xa9, 0x6b, 0x60, 0xe1, 0x5b, 0x30, 0x05, 0x0b, 0xa7, 0x6c, + 0xe8, 0xa8, 0x0b, 0x17, 0x76, 0x7a, 0xf5, 0xfe, 0xb0, 0xa2, 0x7a, 0x17, 0x7d, 0x10, 0x19, 0x45, + 0x31, 0x97, 0x05, 0x79, 0x0a, 0x25, 0xc1, 0x27, 0xe1, 0x80, 0x39, 0x88, 0x45, 0x11, 0x81, 0xfd, + 0xc3, 0xb5, 0x78, 0x74, 0x42, 0x99, 0x9a, 0x62, 0xa1, 0x08, 0xf2, 0x1c, 0x36, 0x25, 0x76, 0xe3, + 0x0c, 0xb8, 0x2f, 0x43, 0x3e, 0x12, 0x76, 0x6e, 0x95, 0x30, 0x3a, 0x87, 0x6e, 0xba, 0xa9, 0xbd, + 0x68, 0x59, 0x26, 0x55, 0x41, 0x76, 0xe0, 0xb6, 0x27, 0x9c, 0x68, 0x6c, 0xaa, 0x44, 0xcf, 0xbf, + 0x40, 0x36, 0xe4, 0xe9, 0xa6, 0x27, 0x4e, 0xd0, 0xde, 0xd5, 0xe6, 0xca, 0x2b, 0x80, 0x45, 0x43, + 0xe4, 0x31, 0x14, 0xa3, 0x0a, 0x90, 0x15, 0xc6, 0x15, 0xac, 0x00, 0x39, 0x97, 0xd5, 0xa5, 0xaa, + 0x85, 0x22, 0xec, 0xd4, 0x76, 0x5a, 0x5d, 0x2a, 0x2a, 0x95, 0x3f, 0x0c, 0x28, 0x26, 0x9a, 0x8d, + 0xd7, 0x8d, 0x31, 0x5f, 0x37, 0x4b, 0x04, 0x4f, 0xbd, 0x8b, 0xe0, 0xe9, 0x77, 0x12, 0x3c, 0x73, + 0x8d, 0x4b, 0xbd, 0x0b, 0x39, 0x2c, 0x54, 0xd8, 0x59, 0xac, 0x2d, 0xd2, 0x2a, 0x7f, 0x1a, 0x50, + 0x5a, 0x9a, 0xe2, 0x8d, 0xf6, 0x4e, 0x3e, 0x07, 0xd2, 0x1f, 0xb9, 0x83, 0xcb, 0x91, 0x27, 0xa4, + 0x02, 0x94, 0x2e, 0x21, 0x83, 0x2e, 0xb7, 0x13, 0x27, 0x98, 0x54, 0xa8, 0x2a, 0xcf, 0x43, 0xfe, + 0x13, 0xf3, 0x71, 0xcf, 0xe5, 0x69, 0xa4, 0xcd, 0x39, 0x91, 0xb5, 0x72, 0xd5, 0xbf, 0xd2, 0xf8, + 0x0a, 0xe8, 0xe9, 0x7c, 0x01, 0x5b, 0x38, 0x10, 0xcf, 0xbf, 0x70, 0x06, 0x7c, 0x34, 0x19, 0xfb, + 0xb8, 0x9a, 0x22, 0xa6, 0x91, 0xf8, 0xac, 0x89, 0x47, 0x6a, 0x3b, 0x91, 0x97, 0xeb, 0x11, 0xd8, + 0x67, 0x0a, 0xfb, 0xb4, 0x97, 0x86, 0x88, 0xdf, 0x38, 0xd4, 0x18, 0x5f, 0xc9, 0x85, 0x3d, 0x3f, + 0x9d, 0x33, 0xe5, 0x3c, 0xe4, 0x63, 0xb1, 0xbe, 0xd6, 0xe3, 0x1c, 0x11, 0x59, 0x9e, 0x87, 0x7c, + 0x1c, 0x93, 0x45, 0xc9, 0x82, 0x7c, 0x03, 0xa5, 0xf8, 0xa6, 0x75, 0x19, 0x59, 0x2c, 0xe3, 0xee, + 0x7a, 0x0a, 0x2c, 0xc2, 0xbc, 0x4c, 0x68, 0xe4, 0x63, 0x28, 0xf5, 0x5d, 0xc1, 0x9c, 0x39, 0x76, + 0xf4, 0x1b, 0x60, 0x2a, 0xe3, 0x7c, 0x42, 0x5f, 0x42, 0x49, 0xf8, 0x6e, 0x20, 0x5e, 0x73, 0xa9, + 0x37, 0xa2, 0x7e, 0x0e, 0xcc, 0xfa, 0x54, 0xe2, 0xcb, 0xaa, 0x76, 0x22, 0x35, 0x63, 0x17, 0xa5, + 0x55, 0x26, 0x31, 0x17, 0x54, 0x8d, 0x37, 0x8b, 0x87, 0x24, 0xd2, 0xd3, 0xcb, 0x48, 0xd7, 0x97, + 0x5c, 0xfd, 0xc5, 0x00, 0x4b, 0x2f, 0x05, 0x16, 0x8c, 0xbc, 0x81, 0xab, 0x16, 0x31, 0x79, 0x0c, + 0x59, 0x9f, 0x0f, 0x99, 0x5a, 0x7b, 0x6a, 0xc2, 0xf7, 0x57, 0xf6, 0x40, 0xc2, 0xb5, 0xde, 0xe6, + 0x43, 0x46, 0xb5, 0x77, 0xe5, 0x29, 0x64, 0x94, 0xaa, 0x96, 0x67, 0xd4, 0xc2, 0x75, 0x96, 0xa7, + 0x5c, 0x28, 0xd5, 0x33, 0x28, 0x47, 0x5f, 0x38, 0x67, 0x21, 0xf3, 0x07, 0x4c, 0xfd, 0x80, 0x48, + 0x20, 0x0c, 0xe5, 0xf7, 0x5e, 0xb1, 0xd5, 0x5f, 0x0d, 0x20, 0x98, 0x77, 0x99, 0x7a, 0x37, 0x91, + 0x9b, 0x3c, 0x82, 0xbb, 0x6f, 0x26, 0x2c, 0x9c, 0xe9, 0x8d, 0x37, 0x60, 0xce, 0xd0, 0x13, 0xea, + 0x2b, 0x7a, 0x83, 0xe4, 0xe9, 0x16, 0x9e, 0x76, 0xf5, 0xe1, 0x41, 0x74, 0x56, 0xfd, 0x27, 0x03, + 0xc5, 0x6e, 0x38, 0x9d, 0xc3, 0xe6, 0x3b, 0x80, 0xc0, 0x0d, 0x25, 0xbe, 0x83, 0xf1, 0xd8, 0x3f, + 0x49, 0x8c, 0x7d, 0xe1, 0x3a, 0x47, 0x68, 0x27, 0xf6, 0xa7, 0x89, 0xd0, 0x77, 0x32, 0x34, 0xf5, + 0xde, 0x0c, 0x4d, 0xff, 0x0f, 0x86, 0x36, 0xa0, 0x98, 0x60, 0x68, 0x44, 0xd0, 0xed, 0xb7, 0xf7, + 0x91, 0xe0, 0x28, 0x2c, 0x38, 0x5a, 0xf9, 0xdb, 0x80, 0xdb, 0x6b, 0x2d, 0x2a, 0x56, 0x24, 0x1e, + 0xc9, 0xab, 0x59, 0xb1, 0x78, 0x1d, 0x49, 0x13, 0x2c, 0xac, 0xd2, 0x09, 0x63, 0x40, 0x69, 0x82, + 0x14, 0x93, 0x7d, 0x2d, 0x23, 0x8e, 0x6e, 0x8a, 0x25, 0x5d, 0x90, 0x0e, 0xdc, 0xd1, 0x49, 0x56, + 0x5f, 0x49, 0xfd, 0x52, 0x7f, 0xb4, 0x92, 0x69, 0xf9, 0x91, 0xfc, 0x40, 0xac, 0xd9, 0x44, 0xc5, + 0xb9, 0x09, 0xc6, 0x5f, 0xf1, 0x8a, 0x45, 0xab, 0xfb, 0x08, 0xf2, 0x4d, 0x36, 0x1a, 0x1d, 0xfa, + 0xe7, 0x5c, 0xfd, 0xda, 0xc3, 0xb9, 0x84, 0x8e, 0x3b, 0x1c, 0x86, 0x4c, 0x88, 0x08, 0xf5, 0x25, + 0x6d, 0x6d, 0x68, 0xa3, 0xa2, 0x44, 0xc8, 0xb9, 0x8c, 0x12, 0xa2, 0x1c, 0x2d, 0x8a, 0x2a, 0x80, + 0x4a, 0x26, 0xf4, 0xaf, 0x9c, 0xb7, 0xae, 0x9b, 0x9d, 0x1a, 0x98, 0xc9, 0xfd, 0x49, 0x00, 0x72, + 0xed, 0x53, 0x7a, 0xd2, 0x38, 0xb6, 0x6e, 0x11, 0x13, 0xf2, 0xdd, 0x76, 0xa3, 0xd3, 0x7d, 0x71, + 0xda, 0xb3, 0x8c, 0x9d, 0x3d, 0x28, 0x2f, 0xc3, 0x89, 0x14, 0x20, 0x7b, 0xd6, 0xee, 0xb6, 0x7a, + 0xd6, 0x2d, 0x15, 0x76, 0x76, 0xd8, 0xee, 0x7d, 0xf5, 0xc8, 0x32, 0x94, 0xf9, 0xd9, 0xab, 0x5e, + 0xab, 0x6b, 0xa5, 0x76, 0x7e, 0x33, 0x00, 0x16, 0xb3, 0x20, 0x45, 0xd8, 0x38, 0x6b, 0x1f, 0xb5, + 0x4f, 0xbf, 0x6f, 0xeb, 0x90, 0x93, 0x46, 0xb7, 0xd7, 0xa2, 0x96, 0xa1, 0x0e, 0x68, 0xab, 0x73, + 0x7c, 0xd8, 0x6c, 0x58, 0x29, 0x75, 0x40, 0x0f, 0x4e, 0xdb, 0xc7, 0xaf, 0xac, 0x34, 0xe6, 0x6a, + 0xf4, 0x9a, 0x2f, 0xb4, 0xd8, 0xed, 0x34, 0x68, 0xcb, 0xca, 0x10, 0x0b, 0xcc, 0xd6, 0x0f, 0x9d, + 0x16, 0x3d, 0x3c, 0x69, 0xb5, 0x7b, 0x8d, 0x63, 0x2b, 0xab, 0x62, 0x9e, 0x35, 0x9a, 0x47, 0x67, + 0x1d, 0x2b, 0xa7, 0x93, 0x75, 0x7b, 0xa7, 0xb4, 0x65, 0x6d, 0x28, 0xe5, 0x80, 0x36, 0x0e, 0xdb, + 0xad, 0x03, 0x2b, 0x5f, 0x49, 0x59, 0xc6, 0xb3, 0x7d, 0xd8, 0xf4, 0x78, 0x7d, 0xea, 0x49, 0x26, + 0x84, 0xfe, 0xd3, 0xf4, 0xe3, 0x83, 0x48, 0xf3, 0xf8, 0xae, 0x96, 0x76, 0x2f, 0xf8, 0xee, 0x54, + 0xee, 0xe2, 0xe9, 0x6e, 0x7c, 0xa9, 0xfd, 0x1c, 0xea, 0x0f, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, + 0x86, 0x60, 0xf5, 0x0e, 0x8a, 0x0d, 0x00, 0x00, } diff --git a/go/vt/vtctld/api_test.go b/go/vt/vtctld/api_test.go index d4980368743..e9d5cf6b65d 100644 --- a/go/vt/vtctld/api_test.go +++ b/go/vt/vtctld/api_test.go @@ -188,7 +188,9 @@ func TestAPI(t *testing.T) { "db_name_override": "", "tags": {}, "mysql_hostname":"", - "mysql_port":0 + "mysql_port":0, + "backup_time":"", + "restore_position":"" }`}, {"GET", "tablets/nonexistent-999", "", "404 page not found"}, {"POST", "tablets/cell1-100?action=TestTabletAction", "", `{ diff --git a/go/vt/vttablet/tabletmanager/restore.go b/go/vt/vttablet/tabletmanager/restore.go index 99b3376c841..4ae93e2fc25 100644 --- a/go/vt/vttablet/tabletmanager/restore.go +++ b/go/vt/vttablet/tabletmanager/restore.go @@ -90,7 +90,7 @@ func (agent *ActionAgent) restoreDataLocked(ctx context.Context, logger logutil. keyspaceDir = keyspace.BaseKeyspace } dir := fmt.Sprintf("%v/%v", keyspaceDir, tablet.Shard) - pos, err := mysqlctl.Restore(ctx, agent.Cnf, agent.MysqlDaemon, dir, *restoreConcurrency, agent.hookExtraEnv(), localMetadata, logger, deleteBeforeRestore, topoproto.TabletDbName(tablet), logutil.ProtoToTime(keyspace.SnapshotTime)) + pos, backupTime, err := mysqlctl.Restore(ctx, agent.Cnf, agent.MysqlDaemon, dir, *restoreConcurrency, agent.hookExtraEnv(), localMetadata, logger, deleteBeforeRestore, topoproto.TabletDbName(tablet), logutil.ProtoToTime(keyspace.SnapshotTime)) switch err { case nil: // Starting from here we won't be able to recover if we get stopped by a cancelled @@ -130,6 +130,8 @@ func (agent *ActionAgent) restoreDataLocked(ctx context.Context, logger logutil. // Change type back to original type if we're ok to serve. if _, err := agent.TopoServer.UpdateTabletFields(context.Background(), tablet.Alias, func(tablet *topodatapb.Tablet) error { tablet.Type = originalType + tablet.BackupTime = backupTime + tablet.RestorePosition = pos.String() return nil }); err != nil { return vterrors.Wrapf(err, "Cannot change type back to %v", originalType) diff --git a/proto/topodata.proto b/proto/topodata.proto index bfa5dce2e64..b29a370386b 100644 --- a/proto/topodata.proto +++ b/proto/topodata.proto @@ -158,6 +158,12 @@ message Tablet { // for legacy behavior. int32 mysql_port = 13; + // Timestamp of backup that this tablet was restored from + string backup_time = 14; + + // GTID that this tablet was restored up to + string restore_position = 15; + // OBSOLETE: ip and tablet health information // string ip = 3; // map health_map = 11; diff --git a/py/vtproto/topodata_pb2.py b/py/vtproto/topodata_pb2.py index 71becda9e16..ba47aa4397e 100644 --- a/py/vtproto/topodata_pb2.py +++ b/py/vtproto/topodata_pb2.py @@ -21,7 +21,7 @@ package='topodata', syntax='proto3', serialized_options=_b('\n\017io.vitess.protoZ%vitess.io/vitess/go/vt/proto/topodata'), - serialized_pb=_b('\n\x0etopodata.proto\x12\x08topodata\x1a\ntime.proto\"&\n\x08KeyRange\x12\r\n\x05start\x18\x01 \x01(\x0c\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x0c\"(\n\x0bTabletAlias\x12\x0c\n\x04\x63\x65ll\x18\x01 \x01(\t\x12\x0b\n\x03uid\x18\x02 \x01(\r\"\xb6\x03\n\x06Tablet\x12$\n\x05\x61lias\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\x12\x10\n\x08hostname\x18\x02 \x01(\t\x12/\n\x08port_map\x18\x04 \x03(\x0b\x32\x1d.topodata.Tablet.PortMapEntry\x12\x10\n\x08keyspace\x18\x05 \x01(\t\x12\r\n\x05shard\x18\x06 \x01(\t\x12%\n\tkey_range\x18\x07 \x01(\x0b\x32\x12.topodata.KeyRange\x12\"\n\x04type\x18\x08 \x01(\x0e\x32\x14.topodata.TabletType\x12\x18\n\x10\x64\x62_name_override\x18\t \x01(\t\x12(\n\x04tags\x18\n \x03(\x0b\x32\x1a.topodata.Tablet.TagsEntry\x12\x16\n\x0emysql_hostname\x18\x0c \x01(\t\x12\x12\n\nmysql_port\x18\r \x01(\x05\x1a.\n\x0cPortMapEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a+\n\tTagsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01J\x04\x08\x03\x10\x04J\x04\x08\x0b\x10\x0c\"\xd3\x04\n\x05Shard\x12+\n\x0cmaster_alias\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\x12%\n\tkey_range\x18\x02 \x01(\x0b\x32\x12.topodata.KeyRange\x12\x30\n\x0cserved_types\x18\x03 \x03(\x0b\x32\x1a.topodata.Shard.ServedType\x12\x32\n\rsource_shards\x18\x04 \x03(\x0b\x32\x1b.topodata.Shard.SourceShard\x12\x36\n\x0ftablet_controls\x18\x06 \x03(\x0b\x32\x1d.topodata.Shard.TabletControl\x12\x19\n\x11is_master_serving\x18\x07 \x01(\x08\x1a\x46\n\nServedType\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t\x1ar\n\x0bSourceShard\x12\x0b\n\x03uid\x18\x01 \x01(\r\x12\x10\n\x08keyspace\x18\x02 \x01(\t\x12\r\n\x05shard\x18\x03 \x01(\t\x12%\n\tkey_range\x18\x04 \x01(\x0b\x32\x12.topodata.KeyRange\x12\x0e\n\x06tables\x18\x05 \x03(\t\x1a{\n\rTabletControl\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t\x12\x1a\n\x12\x62lacklisted_tables\x18\x04 \x03(\t\x12\x0e\n\x06\x66rozen\x18\x05 \x01(\x08J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06\"\xe0\x02\n\x08Keyspace\x12\x1c\n\x14sharding_column_name\x18\x01 \x01(\t\x12\x36\n\x14sharding_column_type\x18\x02 \x01(\x0e\x32\x18.topodata.KeyspaceIdType\x12\x33\n\x0cserved_froms\x18\x04 \x03(\x0b\x32\x1d.topodata.Keyspace.ServedFrom\x12-\n\rkeyspace_type\x18\x05 \x01(\x0e\x32\x16.topodata.KeyspaceType\x12\x15\n\rbase_keyspace\x18\x06 \x01(\t\x12#\n\rsnapshot_time\x18\x07 \x01(\x0b\x32\x0c.vttime.Time\x1aX\n\nServedFrom\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t\x12\x10\n\x08keyspace\x18\x03 \x01(\tJ\x04\x08\x03\x10\x04\"w\n\x10ShardReplication\x12.\n\x05nodes\x18\x01 \x03(\x0b\x32\x1f.topodata.ShardReplication.Node\x1a\x33\n\x04Node\x12+\n\x0ctablet_alias\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\"E\n\x0eShardReference\x12\x0c\n\x04name\x18\x01 \x01(\t\x12%\n\tkey_range\x18\x02 \x01(\x0b\x32\x12.topodata.KeyRange\"i\n\x12ShardTabletControl\x12\x0c\n\x04name\x18\x01 \x01(\t\x12%\n\tkey_range\x18\x02 \x01(\x0b\x32\x12.topodata.KeyRange\x12\x1e\n\x16query_service_disabled\x18\x03 \x01(\x08\"\xda\x03\n\x0bSrvKeyspace\x12;\n\npartitions\x18\x01 \x03(\x0b\x32\'.topodata.SrvKeyspace.KeyspacePartition\x12\x1c\n\x14sharding_column_name\x18\x02 \x01(\t\x12\x36\n\x14sharding_column_type\x18\x03 \x01(\x0e\x32\x18.topodata.KeyspaceIdType\x12\x35\n\x0bserved_from\x18\x04 \x03(\x0b\x32 .topodata.SrvKeyspace.ServedFrom\x1a\xaf\x01\n\x11KeyspacePartition\x12)\n\x0bserved_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\x32\n\x10shard_references\x18\x02 \x03(\x0b\x32\x18.topodata.ShardReference\x12;\n\x15shard_tablet_controls\x18\x03 \x03(\x0b\x32\x1c.topodata.ShardTabletControl\x1aI\n\nServedFrom\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\x10\n\x08keyspace\x18\x02 \x01(\tJ\x04\x08\x05\x10\x06\"6\n\x08\x43\x65llInfo\x12\x16\n\x0eserver_address\x18\x01 \x01(\t\x12\x0c\n\x04root\x18\x02 \x01(\tJ\x04\x08\x03\x10\x04\"\x1b\n\nCellsAlias\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t*(\n\x0cKeyspaceType\x12\n\n\x06NORMAL\x10\x00\x12\x0c\n\x08SNAPSHOT\x10\x01*2\n\x0eKeyspaceIdType\x12\t\n\x05UNSET\x10\x00\x12\n\n\x06UINT64\x10\x01\x12\t\n\x05\x42YTES\x10\x02*\x90\x01\n\nTabletType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06MASTER\x10\x01\x12\x0b\n\x07REPLICA\x10\x02\x12\n\n\x06RDONLY\x10\x03\x12\t\n\x05\x42\x41TCH\x10\x03\x12\t\n\x05SPARE\x10\x04\x12\x10\n\x0c\x45XPERIMENTAL\x10\x05\x12\n\n\x06\x42\x41\x43KUP\x10\x06\x12\x0b\n\x07RESTORE\x10\x07\x12\x0b\n\x07\x44RAINED\x10\x08\x1a\x02\x10\x01\x42\x38\n\x0fio.vitess.protoZ%vitess.io/vitess/go/vt/proto/topodatab\x06proto3') + serialized_pb=_b('\n\x0etopodata.proto\x12\x08topodata\x1a\ntime.proto\"&\n\x08KeyRange\x12\r\n\x05start\x18\x01 \x01(\x0c\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x0c\"(\n\x0bTabletAlias\x12\x0c\n\x04\x63\x65ll\x18\x01 \x01(\t\x12\x0b\n\x03uid\x18\x02 \x01(\r\"\xe5\x03\n\x06Tablet\x12$\n\x05\x61lias\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\x12\x10\n\x08hostname\x18\x02 \x01(\t\x12/\n\x08port_map\x18\x04 \x03(\x0b\x32\x1d.topodata.Tablet.PortMapEntry\x12\x10\n\x08keyspace\x18\x05 \x01(\t\x12\r\n\x05shard\x18\x06 \x01(\t\x12%\n\tkey_range\x18\x07 \x01(\x0b\x32\x12.topodata.KeyRange\x12\"\n\x04type\x18\x08 \x01(\x0e\x32\x14.topodata.TabletType\x12\x18\n\x10\x64\x62_name_override\x18\t \x01(\t\x12(\n\x04tags\x18\n \x03(\x0b\x32\x1a.topodata.Tablet.TagsEntry\x12\x16\n\x0emysql_hostname\x18\x0c \x01(\t\x12\x12\n\nmysql_port\x18\r \x01(\x05\x12\x13\n\x0b\x62\x61\x63kup_time\x18\x0e \x01(\t\x12\x18\n\x10restore_position\x18\x0f \x01(\t\x1a.\n\x0cPortMapEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a+\n\tTagsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01J\x04\x08\x03\x10\x04J\x04\x08\x0b\x10\x0c\"\xd3\x04\n\x05Shard\x12+\n\x0cmaster_alias\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\x12%\n\tkey_range\x18\x02 \x01(\x0b\x32\x12.topodata.KeyRange\x12\x30\n\x0cserved_types\x18\x03 \x03(\x0b\x32\x1a.topodata.Shard.ServedType\x12\x32\n\rsource_shards\x18\x04 \x03(\x0b\x32\x1b.topodata.Shard.SourceShard\x12\x36\n\x0ftablet_controls\x18\x06 \x03(\x0b\x32\x1d.topodata.Shard.TabletControl\x12\x19\n\x11is_master_serving\x18\x07 \x01(\x08\x1a\x46\n\nServedType\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t\x1ar\n\x0bSourceShard\x12\x0b\n\x03uid\x18\x01 \x01(\r\x12\x10\n\x08keyspace\x18\x02 \x01(\t\x12\r\n\x05shard\x18\x03 \x01(\t\x12%\n\tkey_range\x18\x04 \x01(\x0b\x32\x12.topodata.KeyRange\x12\x0e\n\x06tables\x18\x05 \x03(\t\x1a{\n\rTabletControl\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t\x12\x1a\n\x12\x62lacklisted_tables\x18\x04 \x03(\t\x12\x0e\n\x06\x66rozen\x18\x05 \x01(\x08J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06\"\xe0\x02\n\x08Keyspace\x12\x1c\n\x14sharding_column_name\x18\x01 \x01(\t\x12\x36\n\x14sharding_column_type\x18\x02 \x01(\x0e\x32\x18.topodata.KeyspaceIdType\x12\x33\n\x0cserved_froms\x18\x04 \x03(\x0b\x32\x1d.topodata.Keyspace.ServedFrom\x12-\n\rkeyspace_type\x18\x05 \x01(\x0e\x32\x16.topodata.KeyspaceType\x12\x15\n\rbase_keyspace\x18\x06 \x01(\t\x12#\n\rsnapshot_time\x18\x07 \x01(\x0b\x32\x0c.vttime.Time\x1aX\n\nServedFrom\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t\x12\x10\n\x08keyspace\x18\x03 \x01(\tJ\x04\x08\x03\x10\x04\"w\n\x10ShardReplication\x12.\n\x05nodes\x18\x01 \x03(\x0b\x32\x1f.topodata.ShardReplication.Node\x1a\x33\n\x04Node\x12+\n\x0ctablet_alias\x18\x01 \x01(\x0b\x32\x15.topodata.TabletAlias\"E\n\x0eShardReference\x12\x0c\n\x04name\x18\x01 \x01(\t\x12%\n\tkey_range\x18\x02 \x01(\x0b\x32\x12.topodata.KeyRange\"i\n\x12ShardTabletControl\x12\x0c\n\x04name\x18\x01 \x01(\t\x12%\n\tkey_range\x18\x02 \x01(\x0b\x32\x12.topodata.KeyRange\x12\x1e\n\x16query_service_disabled\x18\x03 \x01(\x08\"\xda\x03\n\x0bSrvKeyspace\x12;\n\npartitions\x18\x01 \x03(\x0b\x32\'.topodata.SrvKeyspace.KeyspacePartition\x12\x1c\n\x14sharding_column_name\x18\x02 \x01(\t\x12\x36\n\x14sharding_column_type\x18\x03 \x01(\x0e\x32\x18.topodata.KeyspaceIdType\x12\x35\n\x0bserved_from\x18\x04 \x03(\x0b\x32 .topodata.SrvKeyspace.ServedFrom\x1a\xaf\x01\n\x11KeyspacePartition\x12)\n\x0bserved_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\x32\n\x10shard_references\x18\x02 \x03(\x0b\x32\x18.topodata.ShardReference\x12;\n\x15shard_tablet_controls\x18\x03 \x03(\x0b\x32\x1c.topodata.ShardTabletControl\x1aI\n\nServedFrom\x12)\n\x0btablet_type\x18\x01 \x01(\x0e\x32\x14.topodata.TabletType\x12\x10\n\x08keyspace\x18\x02 \x01(\tJ\x04\x08\x05\x10\x06\"6\n\x08\x43\x65llInfo\x12\x16\n\x0eserver_address\x18\x01 \x01(\t\x12\x0c\n\x04root\x18\x02 \x01(\tJ\x04\x08\x03\x10\x04\"\x1b\n\nCellsAlias\x12\r\n\x05\x63\x65lls\x18\x02 \x03(\t*(\n\x0cKeyspaceType\x12\n\n\x06NORMAL\x10\x00\x12\x0c\n\x08SNAPSHOT\x10\x01*2\n\x0eKeyspaceIdType\x12\t\n\x05UNSET\x10\x00\x12\n\n\x06UINT64\x10\x01\x12\t\n\x05\x42YTES\x10\x02*\x90\x01\n\nTabletType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\n\n\x06MASTER\x10\x01\x12\x0b\n\x07REPLICA\x10\x02\x12\n\n\x06RDONLY\x10\x03\x12\t\n\x05\x42\x41TCH\x10\x03\x12\t\n\x05SPARE\x10\x04\x12\x10\n\x0c\x45XPERIMENTAL\x10\x05\x12\n\n\x06\x42\x41\x43KUP\x10\x06\x12\x0b\n\x07RESTORE\x10\x07\x12\x0b\n\x07\x44RAINED\x10\x08\x1a\x02\x10\x01\x42\x38\n\x0fio.vitess.protoZ%vitess.io/vitess/go/vt/proto/topodatab\x06proto3') , dependencies=[time__pb2.DESCRIPTOR,]) @@ -42,8 +42,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=2377, - serialized_end=2417, + serialized_start=2424, + serialized_end=2464, ) _sym_db.RegisterEnumDescriptor(_KEYSPACETYPE) @@ -69,8 +69,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=2419, - serialized_end=2469, + serialized_start=2466, + serialized_end=2516, ) _sym_db.RegisterEnumDescriptor(_KEYSPACEIDTYPE) @@ -124,8 +124,8 @@ ], containing_type=None, serialized_options=_b('\020\001'), - serialized_start=2472, - serialized_end=2616, + serialized_start=2519, + serialized_end=2663, ) _sym_db.RegisterEnumDescriptor(_TABLETTYPE) @@ -257,8 +257,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=458, - serialized_end=504, + serialized_start=505, + serialized_end=551, ) _TABLET_TAGSENTRY = _descriptor.Descriptor( @@ -294,8 +294,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=506, - serialized_end=549, + serialized_start=553, + serialized_end=596, ) _TABLET = _descriptor.Descriptor( @@ -382,6 +382,20 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='backup_time', full_name='topodata.Tablet.backup_time', index=11, + number=14, 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='restore_position', full_name='topodata.Tablet.restore_position', index=12, + number=15, 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=[ ], @@ -395,7 +409,7 @@ oneofs=[ ], serialized_start=123, - serialized_end=561, + serialized_end=608, ) @@ -432,8 +446,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=842, - serialized_end=912, + serialized_start=889, + serialized_end=959, ) _SHARD_SOURCESHARD = _descriptor.Descriptor( @@ -490,8 +504,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=914, - serialized_end=1028, + serialized_start=961, + serialized_end=1075, ) _SHARD_TABLETCONTROL = _descriptor.Descriptor( @@ -541,8 +555,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1030, - serialized_end=1153, + serialized_start=1077, + serialized_end=1200, ) _SHARD = _descriptor.Descriptor( @@ -606,8 +620,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=564, - serialized_end=1159, + serialized_start=611, + serialized_end=1206, ) @@ -651,8 +665,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1420, - serialized_end=1508, + serialized_start=1467, + serialized_end=1555, ) _KEYSPACE = _descriptor.Descriptor( @@ -716,8 +730,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1162, - serialized_end=1514, + serialized_start=1209, + serialized_end=1561, ) @@ -747,8 +761,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1584, - serialized_end=1635, + serialized_start=1631, + serialized_end=1682, ) _SHARDREPLICATION = _descriptor.Descriptor( @@ -777,8 +791,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1516, - serialized_end=1635, + serialized_start=1563, + serialized_end=1682, ) @@ -815,8 +829,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1637, - serialized_end=1706, + serialized_start=1684, + serialized_end=1753, ) @@ -860,8 +874,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1708, - serialized_end=1813, + serialized_start=1755, + serialized_end=1860, ) @@ -905,8 +919,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2034, - serialized_end=2209, + serialized_start=2081, + serialized_end=2256, ) _SRVKEYSPACE_SERVEDFROM = _descriptor.Descriptor( @@ -942,8 +956,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2211, - serialized_end=2284, + serialized_start=2258, + serialized_end=2331, ) _SRVKEYSPACE = _descriptor.Descriptor( @@ -993,8 +1007,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1816, - serialized_end=2290, + serialized_start=1863, + serialized_end=2337, ) @@ -1031,8 +1045,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2292, - serialized_end=2346, + serialized_start=2339, + serialized_end=2393, ) @@ -1062,8 +1076,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2348, - serialized_end=2375, + serialized_start=2395, + serialized_end=2422, ) _TABLET_PORTMAPENTRY.containing_type = _TABLET From 6b27741a5bdd77ea876106140eaf12bf3ec67d49 Mon Sep 17 00:00:00 2001 From: deepthi Date: Thu, 20 Jun 2019 12:17:07 -0700 Subject: [PATCH 10/17] pitr: fix compile errors, refactor after merge Signed-off-by: deepthi --- go/vt/mysqlctl/backup.go | 10 ++++---- go/vt/mysqlctl/backupengine.go | 28 +++++++++++---------- go/vt/mysqlctl/backupmanifest.go | 25 +++++++++++++++++++ go/vt/mysqlctl/builtinbackupengine.go | 18 ++++++++++---- go/vt/mysqlctl/xtrabackupengine.go | 22 +++++++++++------ go/vt/vtctl/vtctl.go | 33 +++++++++++-------------- go/vt/vttablet/tabletmanager/restore.go | 4 +-- test/config.json | 2 +- 8 files changed, 90 insertions(+), 52 deletions(-) create mode 100644 go/vt/mysqlctl/backupmanifest.go diff --git a/go/vt/mysqlctl/backup.go b/go/vt/mysqlctl/backup.go index 386638fddd1..5fe46f5ee83 100644 --- a/go/vt/mysqlctl/backup.go +++ b/go/vt/mysqlctl/backup.go @@ -44,7 +44,7 @@ const ( backupData = "Data" // the manifest file name - backupManifest = "MANIFEST" + backupManifestFile = "MANIFEST" // RestoreState is the name of the sentinel file used to detect whether a previous restore // terminated abnormally RestoreState = "restore_in_progress" @@ -239,19 +239,19 @@ func Restore( logger.Infof("Restore: No %v file found, checking no existing data is present", RestoreState) // Wait for mysqld to be ready, in case it was launched in parallel with us. if err := mysqld.Wait(ctx, cnf); err != nil { - return zeroPosition, err + return zeroPosition, t, err } ok, err := checkNoDB(ctx, mysqld, dbName) if err != nil { - return zeroPosition, err + return zeroPosition, t, err } if !ok { logger.Infof("Auto-restore is enabled, but mysqld already contains data. Assuming vttablet was just restarted.") if err = PopulateMetadataTables(mysqld, localMetadata, dbName); err == nil { err = ErrExistingDB } - return zeroPosition, err + return zeroPosition, t, err } } } @@ -275,7 +275,7 @@ func Restore( // Wait for mysqld to be ready, in case it was launched in parallel with us. if err = mysqld.Wait(ctx, cnf); err != nil { logger.Errorf("mysqld is not running: %v", err) - return mysql.Position{}, err + return zeroPosition, t, err } // Since this is an empty database make sure we start replication at the beginning if err = mysqld.ResetReplication(ctx); err == nil { diff --git a/go/vt/mysqlctl/backupengine.go b/go/vt/mysqlctl/backupengine.go index ce0fd69465b..f6dec0a9fbb 100644 --- a/go/vt/mysqlctl/backupengine.go +++ b/go/vt/mysqlctl/backupengine.go @@ -20,10 +20,10 @@ import ( "context" "encoding/json" "flag" - "time" "fmt" "os" "path/filepath" + "time" "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/vt/log" @@ -57,7 +57,7 @@ func GetBackupEngine() (BackupEngine, error) { return be, nil } -func findBackupToRestore(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, dir string, bhs []backupstorage.BackupHandle, bm interface{}) (backupstorage.BackupHandle, error) { +func findBackupToRestore(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, dir string, bhs []backupstorage.BackupHandle, bm backupManifest, snapshotTime time.Time) (backupstorage.BackupHandle, error) { var bh backupstorage.BackupHandle var index int @@ -65,7 +65,7 @@ func findBackupToRestore(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, lo for index = len(bhs) - 1; index >= 0; index-- { bh = bhs[index] - rc, err := bh.ReadFile(ctx, backupManifest) + rc, err := bh.ReadFile(ctx, backupManifestFile) if err != nil { log.Warningf("Possibly incomplete backup %v in directory %v on BackupStorage: can't read MANIFEST: %v)", bh.Name(), dir, err) continue @@ -78,25 +78,27 @@ func findBackupToRestore(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, lo continue } - backupTime, _ := time.Parse(time.RFC3339, bm.BackupTime) - if snapshotTime.Equal(unixZeroTime) /* uninitialized or not snapshot */ || bm.BackupTime == "" /* restoring an older backup where MANIFEST does not have backupTime */ || backupTime.Before(snapshotTime) { - logger.Infof("Restore: found backup %v %v to restore", bh.Directory(), bh.Name()) + manifestTime := bm.GetBackupTime() + backupTime, _ := time.Parse(time.RFC3339, manifestTime) + if snapshotTime.Equal(unixZeroTime) /* uninitialized or not snapshot */ || manifestTime == "" /* restoring an older backup where MANIFEST does not have backupTime */ || backupTime.Before(snapshotTime) { + logger.Infof("Restore: found backup %v %v to restore", bh.Directory(), bh.Name()) // older backups don't have backupTime - if bm.BackupTime == "" { + if manifestTime == "" { // backup Name is of the format 2006-01-02.150405.cell-tabletAlias if bhTime, err := time.Parse("2006-01-02.150405", bh.Name()[:17]); err == nil { - bm.BackupTime = bhTime.Format(time.RFC3339) - logger.Infof("Setting backup time to %v", bm.BackupTime) + bm.SetBackupTime(bhTime.Format(time.RFC3339)) + logger.Infof("Setting backup time to %v", bm.GetBackupTime()) } else { logger.Warningf("error parsing time from backup handle name: %v, %v", bh.Name(), err) } } - break + break + } } if index < 0 { - // There is at least one backup but not for the time we are looking for - if snapshotTime.After(unixZeroTime) { - return zeroPosition, s, vterrors.Errorf(vtrpc.Code_NOT_FOUND, "No valid backup found before time %v", snapshotTime.Format(time.RFC3339)) + // There is at least one backup but not for the time we are looking for + if snapshotTime.After(unixZeroTime) { + return nil, vterrors.Errorf(vtrpc.Code_NOT_FOUND, "No valid backup found before time %v", snapshotTime.Format(time.RFC3339)) } // There is at least one attempted backup, but none could be read. // This implies there is data we ought to have, so it's not safe to start diff --git a/go/vt/mysqlctl/backupmanifest.go b/go/vt/mysqlctl/backupmanifest.go new file mode 100644 index 00000000000..66ecb894306 --- /dev/null +++ b/go/vt/mysqlctl/backupmanifest.go @@ -0,0 +1,25 @@ +/* +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 mysqlctl + +// backupManifest describes an individual backup +type backupManifest interface { + // BackupTime is when the backup was taken in UTC time + // format: "2006-01-02T15:04:05Z00:00" + GetBackupTime() string + SetBackupTime(t string) +} diff --git a/go/vt/mysqlctl/builtinbackupengine.go b/go/vt/mysqlctl/builtinbackupengine.go index 5a5228121bf..82be765b542 100644 --- a/go/vt/mysqlctl/builtinbackupengine.go +++ b/go/vt/mysqlctl/builtinbackupengine.go @@ -78,6 +78,14 @@ type builtinBackupManifest struct { BackupTime string } +func (bm *builtinBackupManifest) GetBackupTime() string { + return bm.BackupTime +} + +func (bm *builtinBackupManifest) SetBackupTime(t string) { + bm.BackupTime = t +} + // FileEntry is one file to backup type FileEntry struct { // Base is one of: @@ -381,9 +389,9 @@ func (be *BuiltinBackupEngine) backupFiles(ctx context.Context, cnf *Mycnf, mysq } // open the MANIFEST - wc, err := bh.AddFile(ctx, backupManifest, 0) + wc, err := bh.AddFile(ctx, backupManifestFile, 0) if err != nil { - return vterrors.Wrapf(err, "cannot add %v to backup", backupManifest) + return vterrors.Wrapf(err, "cannot add %v to backup", backupManifestFile) } defer func() { if closeErr := wc.Close(); err == nil { @@ -401,10 +409,10 @@ func (be *BuiltinBackupEngine) backupFiles(ctx context.Context, cnf *Mycnf, mysq } data, err := json.MarshalIndent(bm, "", " ") if err != nil { - return vterrors.Wrapf(err, "cannot JSON encode %v", backupManifest) + return vterrors.Wrapf(err, "cannot JSON encode %v", backupManifestFile) } if _, err := wc.Write([]byte(data)); err != nil { - return vterrors.Wrapf(err, "cannot write %v", backupManifest) + return vterrors.Wrapf(err, "cannot write %v", backupManifestFile) } return nil @@ -527,7 +535,7 @@ func (be *BuiltinBackupEngine) ExecuteRestore( var bm builtinBackupManifest var s string - bh, err := findBackupToRestore(ctx, cnf, mysqld, logger, dir, bhs, &bm) + bh, err := findBackupToRestore(ctx, cnf, mysqld, logger, dir, bhs, &bm, snapshotTime) if err != nil { return zeroPosition, s, err } diff --git a/go/vt/mysqlctl/xtrabackupengine.go b/go/vt/mysqlctl/xtrabackupengine.go index 192671a6b72..7e32130ff33 100644 --- a/go/vt/mysqlctl/xtrabackupengine.go +++ b/go/vt/mysqlctl/xtrabackupengine.go @@ -90,6 +90,14 @@ type xtraBackupManifest struct { BackupTime string } +func (bm *xtraBackupManifest) GetBackupTime() string { + return bm.BackupTime +} + +func (bm *xtraBackupManifest) SetBackupTime(t string) { + bm.BackupTime = t +} + func (be *XtrabackupEngine) backupFileName() string { fileName := "backup" if *xtrabackupStreamMode != "" { @@ -213,11 +221,11 @@ func (be *XtrabackupEngine) ExecuteBackup(ctx context.Context, cnf *Mycnf, mysql return false, vterrors.Wrap(rerr, "backup failed trying to find replication position") } // open the MANIFEST - mwc, err := bh.AddFile(ctx, backupManifest, 0) + mwc, err := bh.AddFile(ctx, backupManifestFile, 0) if err != nil { - return false, vterrors.Wrapf(err, "cannot add %v to backup", backupManifest) + return false, vterrors.Wrapf(err, "cannot add %v to backup", backupManifestFile) } - defer closeFile(mwc, backupManifest) + defer closeFile(mwc, backupManifestFile) // JSON-encode and write the MANIFEST bm := &xtraBackupManifest{ @@ -231,10 +239,10 @@ func (be *XtrabackupEngine) ExecuteBackup(ctx context.Context, cnf *Mycnf, mysql data, err := json.MarshalIndent(bm, "", " ") if err != nil { - return false, vterrors.Wrapf(err, "cannot JSON encode %v", backupManifest) + return false, vterrors.Wrapf(err, "cannot JSON encode %v", backupManifestFile) } if _, err := mwc.Write([]byte(data)); err != nil { - return false, vterrors.Wrapf(err, "cannot write %v", backupManifest) + return false, vterrors.Wrapf(err, "cannot write %v", backupManifestFile) } return true, nil @@ -254,9 +262,9 @@ func (be *XtrabackupEngine) ExecuteRestore( zeroPosition := mysql.Position{} var bm xtraBackupManifest - var s string + var s string - bh, err := findBackupToRestore(ctx, cnf, mysqld, logger, dir, bhs, &bm) + bh, err := findBackupToRestore(ctx, cnf, mysqld, logger, dir, bhs, &bm, snapshotTime) if err != nil { return zeroPosition, s, err } diff --git a/go/vt/vtctl/vtctl.go b/go/vt/vtctl/vtctl.go index bd6b278e15e..4fbac4c0c98 100644 --- a/go/vt/vtctl/vtctl.go +++ b/go/vt/vtctl/vtctl.go @@ -1631,25 +1631,20 @@ func commandCreateKeyspace(ctx context.Context, wr *wrangler.Wrangler, subFlags wr.Logger().Infof("error from SaveVSchema %v:%v", vs, err) return err } - err = topotools.RebuildVSchema(ctx, wr.Logger(), wr.TopoServer(), nil) - if err != nil { - wr.Logger().Errorf("could not rebuild SrvVschema after creating keyspace: %v", err) - return err - } - } else { - vschema, err := wr.TopoServer().GetVSchema(ctx, keyspace) - if !*allowEmptyVSchema && (vschema == nil || topo.IsErrType(err, topo.NoNode)) { - err = wr.TopoServer().SaveVSchema(ctx, keyspace, &vschemapb.Keyspace{ - Sharded: false, - Vindexes: make(map[string]*vschemapb.Vindex), - Tables: make(map[string]*vschemapb.Table), - }) - if err != nil { - wr.Logger().Errorf("could not create blank vschema: %v", err) - return err - } - } - } + } else { + vschema, err := wr.TopoServer().GetVSchema(ctx, keyspace) + if !*allowEmptyVSchema && (vschema == nil || topo.IsErrType(err, topo.NoNode)) { + err = wr.TopoServer().SaveVSchema(ctx, keyspace, &vschemapb.Keyspace{ + Sharded: false, + Vindexes: make(map[string]*vschemapb.Vindex), + Tables: make(map[string]*vschemapb.Table), + }) + if err != nil { + wr.Logger().Errorf("could not create blank vschema: %v", err) + return err + } + } + } err = wr.TopoServer().RebuildSrvVSchema(ctx, []string{} /* cells */) if err != nil { wr.Logger().Errorf("could not rebuild SrvVschema after creating keyspace: %v", err) diff --git a/go/vt/vttablet/tabletmanager/restore.go b/go/vt/vttablet/tabletmanager/restore.go index 777b21f28d1..fbe7a2b462b 100644 --- a/go/vt/vttablet/tabletmanager/restore.go +++ b/go/vt/vttablet/tabletmanager/restore.go @@ -95,9 +95,9 @@ func (agent *ActionAgent) restoreDataLocked(ctx context.Context, logger logutil. // Loop until a backup exists, unless we were told to give up immediately. var pos mysql.Position - var err error + var backupTime string for { - pos, err = mysqlctl.Restore(ctx, agent.Cnf, agent.MysqlDaemon, dir, *restoreConcurrency, agent.hookExtraEnv(), localMetadata, logger, deleteBeforeRestore, topoproto.TabletDbName(tablet)) + pos, backupTime, err = mysqlctl.Restore(ctx, agent.Cnf, agent.MysqlDaemon, dir, *restoreConcurrency, agent.hookExtraEnv(), localMetadata, logger, deleteBeforeRestore, topoproto.TabletDbName(tablet), logutil.ProtoToTime(keyspace.SnapshotTime)) if waitForBackupInterval == 0 { break } diff --git a/test/config.json b/test/config.json index 2b19f6b15d8..d72310ca881 100644 --- a/test/config.json +++ b/test/config.json @@ -537,6 +537,6 @@ "Shard": 3, "RetryMax": 0, "Tags": [] - }, + } } } From 873818b76a3f6d6ead9d7c4cb211f488398ce634 Mon Sep 17 00:00:00 2001 From: deepthi Date: Mon, 24 Jun 2019 13:19:39 -0700 Subject: [PATCH 11/17] add multi-recovery integration test distribute backup tests among jobs Signed-off-by: deepthi --- go/vt/vtctl/vtctl.go | 2 +- go/vt/vtgate/gateway/gateway.go | 4 +- test/config.json | 8 +- test/recovery.py | 188 +++++++++++++++++++++++++++++--- 4 files changed, 177 insertions(+), 25 deletions(-) diff --git a/go/vt/vtctl/vtctl.go b/go/vt/vtctl/vtctl.go index 4fbac4c0c98..90f8536572c 100644 --- a/go/vt/vtctl/vtctl.go +++ b/go/vt/vtctl/vtctl.go @@ -1612,7 +1612,7 @@ func commandCreateKeyspace(ctx context.Context, wr *wrangler.Wrangler, subFlags err = nil } if ktype == topodatapb.KeyspaceType_SNAPSHOT { - // copy vschema from base keyspace? + // copy vschema from base keyspace vs, err := wr.TopoServer().GetVSchema(ctx, *baseKeyspace) if err != nil { wr.Logger().Infof("error from GetVSchema for keyspace: %v, %v", *baseKeyspace, err) diff --git a/go/vt/vtgate/gateway/gateway.go b/go/vt/vtgate/gateway/gateway.go index 7b458332fac..7350ed82676 100644 --- a/go/vt/vtgate/gateway/gateway.go +++ b/go/vt/vtgate/gateway/gateway.go @@ -106,7 +106,7 @@ func GetCreator() Creator { // Note it has the same name as the Gateway's interface method, as it // just calls it. func WaitForTablets(gw Gateway, tabletTypesToWait []topodatapb.TabletType) error { - log.Infof("Gateway waiting for serving tablets...") + log.Infof("Gateway waiting for serving tablets of types %v ...", tabletTypesToWait) ctx, cancel := context.WithTimeout(context.Background(), *initialTabletTimeout) defer cancel() @@ -119,7 +119,7 @@ func WaitForTablets(gw Gateway, tabletTypesToWait []topodatapb.TabletType) error // In this scenario, we were able to reach the // topology service, but some tablets may not be // ready. We just warn and keep going. - log.Warningf("Timeout waiting for all keyspaces / shards to have healthy tablets, may be in degraded mode") + log.Warningf("Timeout waiting for all keyspaces / shards to have healthy tablets of types %v, may be in degraded mode", tabletTypesToWait) err = nil default: // Nothing to do here, the caller will log.Fatalf. diff --git a/test/config.json b/test/config.json index d72310ca881..fffc5a5a7d0 100644 --- a/test/config.json +++ b/test/config.json @@ -24,7 +24,7 @@ "Args": [], "Command": [], "Manual": false, - "Shard": 4, + "Shard": 1, "RetryMax": 0, "Tags": [] }, @@ -33,7 +33,7 @@ "Args": [], "Command": [], "Manual": false, - "Shard": 4, + "Shard": 0, "RetryMax": 0, "Tags": [ "worker_test" @@ -525,7 +525,7 @@ "Args": [], "Command": [], "Manual": false, - "Shard": 3, + "Shard": 2, "RetryMax": 0, "Tags": [] }, @@ -534,7 +534,7 @@ "Args": [], "Command": [], "Manual": false, - "Shard": 3, + "Shard": 1, "RetryMax": 0, "Tags": [] } diff --git a/test/recovery.py b/test/recovery.py index 79dc209e1a1..f8ddd90cd06 100755 --- a/test/recovery.py +++ b/test/recovery.py @@ -32,13 +32,14 @@ tablet_master = None tablet_replica1 = None tablet_replica2 = None +tablet_replica3 = None new_init_db = '' db_credentials_file = '' def setUpModule(): global new_init_db, db_credentials_file - global tablet_master, tablet_replica1, tablet_replica2 + global tablet_master, tablet_replica1, tablet_replica2, tablet_replica3 tablet_master = tablet.Tablet(use_mysqlctld=use_mysqlctld, vt_dba_passwd='VtDbaPass') @@ -46,6 +47,8 @@ def setUpModule(): vt_dba_passwd='VtDbaPass') tablet_replica2 = tablet.Tablet(use_mysqlctld=use_mysqlctld, vt_dba_passwd='VtDbaPass') + tablet_replica3 = tablet.Tablet(use_mysqlctld=use_mysqlctld, + vt_dba_passwd='VtDbaPass') try: environment.topo_server().setup() @@ -89,11 +92,15 @@ def setUpModule(): tablet_replica2.init_mysql(init_db=new_init_db, extra_args=['-db-credentials-file', db_credentials_file]), + tablet_replica3.init_mysql(init_db=new_init_db, + extra_args=['-db-credentials-file', + db_credentials_file]), ] if use_mysqlctld: tablet_master.wait_for_mysqlctl_socket() tablet_replica1.wait_for_mysqlctl_socket() tablet_replica2.wait_for_mysqlctl_socket() + tablet_replica3.wait_for_mysqlctl_socket() else: utils.wait_procs(setup_procs) except: @@ -113,6 +120,8 @@ def tearDownModule(): db_credentials_file]), tablet_replica2.teardown_mysql(extra_args=['-db-credentials-file', db_credentials_file]), + tablet_replica3.teardown_mysql(extra_args=['-db-credentials-file', + db_credentials_file]), ] utils.wait_procs(teardown_procs, raise_on_error=False) @@ -123,6 +132,7 @@ def tearDownModule(): tablet_master.remove_tree() tablet_replica1.remove_tree() tablet_replica2.remove_tree() + tablet_replica3.remove_tree() def get_connection(timeout=15.0): protocol, endpoint = utils.vtgate.rpc_endpoint(python=True) @@ -149,12 +159,12 @@ def setUp(self): tablet_master.tablet_alias]) def tearDown(self): - for t in tablet_master, tablet_replica1, tablet_replica2: + for t in tablet_master, tablet_replica1, tablet_replica2, tablet_replica3: t.kill_vttablet() tablet.Tablet.check_vttablet_count() environment.topo_server().wipe() - for t in [tablet_master, tablet_replica1, tablet_replica2]: + for t in [tablet_master, tablet_replica1, tablet_replica2, tablet_replica3]: t.reset_replication() t.set_semi_sync_enabled(master=False, slave=False) t.clean_dbs() @@ -198,7 +208,7 @@ def _check_data(self, t, count, msg): logging.exception('exception waiting for data to replicate') timeout = utils.wait_step(msg, timeout) - def _restore(self, t): + def _restore(self, t, keyspace): """Erase mysql/tablet dir, then start tablet with restore enabled.""" self._reset_tablet_dir(t) @@ -208,7 +218,7 @@ def _restore(self, t): '-base_keyspace=test_keyspace', '-snapshot_time', datetime.datetime.utcnow().isoformat("T")+"Z", - 'recovery_keyspace']) + keyspace]) # set disable_active_reparents to true, otherwise replication_reporter will # try to restart replication @@ -220,7 +230,7 @@ def _restore(self, t): t.start_vttablet(wait_for_state='SERVING', init_tablet_type='replica', - init_keyspace='recovery_keyspace', + init_keyspace=keyspace, init_shard='0', supports_backups=True, extra_args=xtra_args) @@ -252,7 +262,7 @@ def _remove_backup(self, backup): ['RemoveBackup', 'test_keyspace/0', backup], auto_log=True, mode=utils.VTCTL_VTCTL) - def test_recovery(self): + def test_basic_recovery(self): """Test recovery from backup flow. test_recovery will: @@ -261,9 +271,10 @@ def test_recovery(self): - insert some data - take a backup - insert more data on the master - - bring up tablet_replica2 after the fact, let it restore the backup - - check all data is right (before+after backup data) - - list the backup, remove it + - create a recovery keyspace + - bring up tablet_replica2 in the new keyspace + - check that new tablet does not have data created after backup + - check that vtgate queries work correctly """ @@ -292,16 +303,23 @@ def test_recovery(self): 'test_keyspace'], auto_log=True) - vs, _ = utils.run_vtctl(['GetVSchema', 'test_keyspace'], - mode=utils.VTCTL_VTCTL, trap_output=True) - logging.debug('test_keyspace vschema: %s', vs.splitlines()) + vs = utils.run_vtctl_json(['GetVSchema', 'test_keyspace']) + logging.debug('test_keyspace vschema: %s', str(vs)) + ks = utils.run_vtctl_json(['GetSrvKeyspace', 'test_nj', 'test_keyspace']) + logging.debug('Serving keyspace before: %s', str(ks)) + vs = utils.run_vtctl_json(['GetSrvVSchema', 'test_nj']) + logging.debug('Serving vschema before recovery: %s', str(vs)) # now bring up the other slave, letting it restore from backup. - self._restore(tablet_replica2) + self._restore(tablet_replica2, 'recovery_keyspace') + + vs = utils.run_vtctl_json(['GetSrvVSchema', 'test_nj']) + logging.debug('Serving vschema after recovery: %s', str(vs)) + ks = utils.run_vtctl_json(['GetSrvKeyspace', 'test_nj', 'test_keyspace']) + logging.debug('Serving keyspace after: %s', str(ks)) + vs = utils.run_vtctl_json(['GetVSchema', 'recovery_keyspace']) + logging.debug('recovery_keyspace vschema: %s', str(vs)) - vs, _ = utils.run_vtctl(['GetVSchema', 'recovery_keyspace'], - mode=utils.VTCTL_VTCTL, trap_output=True) - logging.debug('recovery_keyspace vschema: %s', vs.splitlines()) # check the new slave does not have the data self._check_data(tablet_replica2, 1, 'replica2 tablet should not have new data') @@ -315,7 +333,8 @@ def test_recovery(self): self.assertEqual(metadata['DataCenter'], 'test_nj') # start vtgate - utils.VtGate().start(tablets=[ + vtgate = utils.VtGate() + vtgate.start(tablets=[ tablet_master, tablet_replica1, tablet_replica2 ], tablet_types_to_wait='REPLICA') utils.vtgate.wait_for_endpoints('test_keyspace.0.master', 1) @@ -363,6 +382,139 @@ def test_recovery(self): vtgate_conn.close() tablet_replica2.kill_vttablet() + vtgate.kill() + + def test_multi_recovery(self): + """Test recovery from backup flow. + + test_multi_recovery will: + - create a shard with master and replica1 only + - run InitShardMaster + - insert some data + - take a backup + - insert more data on the master + - take another backup + - create a recovery keyspace after first backup + - bring up tablet_replica2 in the new keyspace + - check that new tablet does not have data created after backup1 + - create second recovery keyspace after second backup + - bring up tablet_replica3 in second keyspace + - check that new tablet has data created after backup1 but not data created after backup2 + - check that vtgate queries work correctly + + """ + + # insert data on master, wait for slave to get it + utils.run_vtctl(['ApplySchema', + '-sql', self._create_vt_insert_test, + 'test_keyspace'], + auto_log=True) + self._insert_data(tablet_master, 1) + self._check_data(tablet_replica1, 1, 'replica1 tablet getting data') + + # backup the slave + utils.run_vtctl(['Backup', tablet_replica1.tablet_alias], auto_log=True) + + # check that the backup shows up in the listing + backups = self._list_backups() + logging.debug('list of backups: %s', backups) + self.assertEqual(len(backups), 1) + self.assertTrue(backups[0].endswith(tablet_replica1.tablet_alias)) + + # insert more data on the master + self._insert_data(tablet_master, 2) + # wait for it to replicate + self._check_data(tablet_replica1, 2, 'replica1 tablet getting data') + + utils.run_vtctl(['ApplyVSchema', + '-vschema', self._vschema_json, + 'test_keyspace'], + auto_log=True) + + vs = utils.run_vtctl_json(['GetVSchema', 'test_keyspace']) + logging.debug('test_keyspace vschema: %s', str(vs)) + + # now bring up the other slave, letting it restore from backup. + self._restore(tablet_replica2, 'recovery_ks1') + + # we are not asserting on the contents of vschema here + # because the later part of the test (vtgate) will fail + # if the vschema is not copied correctly from the base_keyspace + vs = utils.run_vtctl_json(['GetVSchema', 'recovery_ks1']) + logging.debug('recovery_ks1 vschema: %s', str(vs)) + + # check the new slave does not have the data + self._check_data(tablet_replica2, 1, 'replica2 tablet should not have new data') + + # take another backup on the slave + utils.run_vtctl(['Backup', tablet_replica1.tablet_alias], auto_log=True) + + # insert more data on the master + self._insert_data(tablet_master, 3) + # wait for it to replicate + self._check_data(tablet_replica1, 3, 'replica1 tablet getting data') + + # now bring up the other slave, letting it restore from backup2. + self._restore(tablet_replica3, 'recovery_ks2') + + vs = utils.run_vtctl(['GetVSchema', 'recovery_ks2']) + logging.debug('recovery_ks2 vschema: %s', str(vs)) + + # check the new slave does not have the latest data + self._check_data(tablet_replica3, 2, 'replica3 tablet should not have new data') + + # start vtgate + vtgate = utils.VtGate() + vtgate.start(tablets=[ + tablet_master, tablet_replica1, tablet_replica2, tablet_replica3 + ], tablet_types_to_wait='REPLICA') + utils.vtgate.wait_for_endpoints('test_keyspace.0.master', 1) + utils.vtgate.wait_for_endpoints('test_keyspace.0.replica', 1) + utils.vtgate.wait_for_endpoints('recovery_ks1.0.replica', 1) + utils.vtgate.wait_for_endpoints('recovery_ks2.0.replica', 1) + + # check that vtgate doesn't route queries to new tablet + vtgate_conn = get_connection() + cursor = vtgate_conn.cursor( + tablet_type='replica', keyspace=None, writable=True) + + cursor.execute('select count(*) from vt_insert_test', {}) + result = cursor.fetchall() + if not result: + self.fail('Result cannot be null') + else: + self.assertEqual(result[0][0], 3) + + # check that new tablet is accessible by using ks.table + cursor.execute('select count(*) from recovery_ks1.vt_insert_test', {}) + result = cursor.fetchall() + if not result: + self.fail('Result cannot be null') + else: + self.assertEqual(result[0][0], 1) + + # check that new tablet is accessible by using ks.table + cursor.execute('select count(*) from recovery_ks2.vt_insert_test', {}) + result = cursor.fetchall() + if not result: + self.fail('Result cannot be null') + else: + self.assertEqual(result[0][0], 2) + + # TODO check that new tablet is accessible with 'use ks:shard' + # this currently does not work through the python client, though it works from mysql client + #cursor.execute('use recovery_ks1:0@replica', {}) + #cursor.execute('select count(*) from vt_insert_test', {}) + #result = cursor.fetchall() + #if not result: + #self.fail('Result cannot be null') + #else: + #self.assertEqual(result[0][0], 1) + + vtgate_conn.close() + tablet_replica2.kill_vttablet() + tablet_replica3.kill_vttablet() + vtgate.kill() if __name__ == '__main__': utils.main() From 603be9e64ac8328bdab0b9c39b588ab3fa9441d8 Mon Sep 17 00:00:00 2001 From: deepthi Date: Fri, 28 Jun 2019 15:25:47 -0700 Subject: [PATCH 12/17] simplify recovery test setup Signed-off-by: deepthi --- test/recovery.py | 188 +++++++++++++---------------------------------- 1 file changed, 52 insertions(+), 136 deletions(-) diff --git a/test/recovery.py b/test/recovery.py index f8ddd90cd06..1a9a62d9a32 100755 --- a/test/recovery.py +++ b/test/recovery.py @@ -28,111 +28,35 @@ from vtdb import vtgate_client -use_mysqlctld = False -tablet_master = None -tablet_replica1 = None -tablet_replica2 = None -tablet_replica3 = None -new_init_db = '' -db_credentials_file = '' +# initial shard, covers everything +unsharded_master = tablet.Tablet() +unsharded_replica1 = tablet.Tablet() +unsharded_replica2 = tablet.Tablet() +unsharded_replica3 = tablet.Tablet() +all_tablets = [unsharded_master, unsharded_replica1, unsharded_replica2, unsharded_replica3] +unsharded_tablets = [unsharded_master, unsharded_replica1, unsharded_replica2, unsharded_replica3] def setUpModule(): - global new_init_db, db_credentials_file - global tablet_master, tablet_replica1, tablet_replica2, tablet_replica3 - - tablet_master = tablet.Tablet(use_mysqlctld=use_mysqlctld, - vt_dba_passwd='VtDbaPass') - tablet_replica1 = tablet.Tablet(use_mysqlctld=use_mysqlctld, - vt_dba_passwd='VtDbaPass') - tablet_replica2 = tablet.Tablet(use_mysqlctld=use_mysqlctld, - vt_dba_passwd='VtDbaPass') - tablet_replica3 = tablet.Tablet(use_mysqlctld=use_mysqlctld, - vt_dba_passwd='VtDbaPass') - try: environment.topo_server().setup() - - # Create a new init_db.sql file that sets up passwords for all users. - # Then we use a db-credentials-file with the passwords. - new_init_db = environment.tmproot + '/init_db_with_passwords.sql' - with open(environment.vttop + '/config/init_db.sql') as fd: - init_db = fd.read() - with open(new_init_db, 'w') as fd: - fd.write(init_db) - fd.write(''' -# Set real passwords for all users. -ALTER USER 'root'@'localhost' IDENTIFIED BY 'RootPass'; -ALTER USER 'vt_dba'@'localhost' IDENTIFIED BY 'VtDbaPass'; -ALTER USER 'vt_app'@'localhost' IDENTIFIED BY 'VtAppPass'; -ALTER USER 'vt_allprivs'@'localhost' IDENTIFIED BY 'VtAllPrivsPass'; -ALTER USER 'vt_repl'@'%' IDENTIFIED BY 'VtReplPass'; -ALTER USER 'vt_filtered'@'localhost' IDENTIFIED BY 'VtFilteredPass'; -FLUSH PRIVILEGES; -''') - credentials = { - 'vt_dba': ['VtDbaPass'], - 'vt_app': ['VtAppPass'], - 'vt_allprivs': ['VtAllprivsPass'], - 'vt_repl': ['VtReplPass'], - 'vt_filtered': ['VtFilteredPass'], - } - db_credentials_file = environment.tmproot+'/db_credentials.json' - with open(db_credentials_file, 'w') as fd: - fd.write(json.dumps(credentials)) - - # start mysql instance external to the test - setup_procs = [ - tablet_master.init_mysql(init_db=new_init_db, - extra_args=['-db-credentials-file', - db_credentials_file]), - tablet_replica1.init_mysql(init_db=new_init_db, - extra_args=['-db-credentials-file', - db_credentials_file]), - tablet_replica2.init_mysql(init_db=new_init_db, - extra_args=['-db-credentials-file', - db_credentials_file]), - tablet_replica3.init_mysql(init_db=new_init_db, - extra_args=['-db-credentials-file', - db_credentials_file]), - ] - if use_mysqlctld: - tablet_master.wait_for_mysqlctl_socket() - tablet_replica1.wait_for_mysqlctl_socket() - tablet_replica2.wait_for_mysqlctl_socket() - tablet_replica3.wait_for_mysqlctl_socket() - else: - utils.wait_procs(setup_procs) + setup_procs = [t.init_mysql() for t in all_tablets] + utils.wait_procs(setup_procs) except: tearDownModule() raise - def tearDownModule(): utils.required_teardown() if utils.options.skip_teardown: return - - teardown_procs = [ - tablet_master.teardown_mysql(extra_args=['-db-credentials-file', - db_credentials_file]), - tablet_replica1.teardown_mysql(extra_args=['-db-credentials-file', - db_credentials_file]), - tablet_replica2.teardown_mysql(extra_args=['-db-credentials-file', - db_credentials_file]), - tablet_replica3.teardown_mysql(extra_args=['-db-credentials-file', - db_credentials_file]), - ] + teardown_procs = [t.teardown_mysql() for t in all_tablets] utils.wait_procs(teardown_procs, raise_on_error=False) - environment.topo_server().teardown() utils.kill_sub_processes() utils.remove_tmp_files() - - tablet_master.remove_tree() - tablet_replica1.remove_tree() - tablet_replica2.remove_tree() - tablet_replica3.remove_tree() + for t in all_tablets: + t.remove_tree() def get_connection(timeout=15.0): protocol, endpoint = utils.vtgate.rpc_endpoint(python=True) @@ -145,26 +69,26 @@ def get_connection(timeout=15.0): class TestVttabletRecovery(unittest.TestCase): def setUp(self): - for t in tablet_master, tablet_replica1: + for t in unsharded_master, unsharded_replica1: t.create_db('vt_test_keyspace') - xtra_args = ['-db-credentials-file', db_credentials_file, '-enable_replication_reporter'] - tablet_master.init_tablet('replica', 'test_keyspace', '0', start=True, + xtra_args = ['-enable_replication_reporter'] + unsharded_master.init_tablet('replica', 'test_keyspace', '0', start=True, supports_backups=True, extra_args=xtra_args) - tablet_replica1.init_tablet('replica', 'test_keyspace', '0', start=True, + unsharded_replica1.init_tablet('replica', 'test_keyspace', '0', start=True, supports_backups=True, extra_args=xtra_args) utils.run_vtctl(['InitShardMaster', '-force', 'test_keyspace/0', - tablet_master.tablet_alias]) + unsharded_master.tablet_alias]) def tearDown(self): - for t in tablet_master, tablet_replica1, tablet_replica2, tablet_replica3: + for t in all_tablets: t.kill_vttablet() tablet.Tablet.check_vttablet_count() environment.topo_server().wipe() - for t in [tablet_master, tablet_replica1, tablet_replica2, tablet_replica3]: + for t in all_tablets: t.reset_replication() t.set_semi_sync_enabled(master=False, slave=False) t.clean_dbs() @@ -222,9 +146,7 @@ def _restore(self, t, keyspace): # set disable_active_reparents to true, otherwise replication_reporter will # try to restart replication - xtra_args = ['-db-credentials-file', - db_credentials_file, - '-disable_active_reparents', + xtra_args = ['-disable_active_reparents', '-enable_replication_reporter=false'] xtra_args.extend(tablet.get_backup_storage_flags()) @@ -237,16 +159,12 @@ def _restore(self, t, keyspace): def _reset_tablet_dir(self, t): """Stop mysql, delete everything including tablet dir, restart mysql.""" - extra_args = ['-db-credentials-file', db_credentials_file] - utils.wait_procs([t.teardown_mysql(extra_args=extra_args)]) + utils.wait_procs([t.teardown_mysql()]) # Specify ignore_options because we want to delete the tree even # if the test's -k / --keep-logs was specified on the command line. t.remove_tree(ignore_options=True) - proc = t.init_mysql(init_db=new_init_db, extra_args=extra_args) - if use_mysqlctld: - t.wait_for_mysqlctl_socket() - else: - utils.wait_procs([proc]) + proc = t.init_mysql() + utils.wait_procs([proc]) def _list_backups(self): """Get a list of backup names for the test shard.""" @@ -272,7 +190,7 @@ def test_basic_recovery(self): - take a backup - insert more data on the master - create a recovery keyspace - - bring up tablet_replica2 in the new keyspace + - bring up unsharded_replica2 in the new keyspace - check that new tablet does not have data created after backup - check that vtgate queries work correctly @@ -283,20 +201,20 @@ def test_basic_recovery(self): '-sql', self._create_vt_insert_test, 'test_keyspace'], auto_log=True) - self._insert_data(tablet_master, 1) - self._check_data(tablet_replica1, 1, 'replica1 tablet getting data') + self._insert_data(unsharded_master, 1) + self._check_data(unsharded_replica1, 1, 'replica1 tablet getting data') # backup the slave - utils.run_vtctl(['Backup', tablet_replica1.tablet_alias], auto_log=True) + utils.run_vtctl(['Backup', unsharded_replica1.tablet_alias], auto_log=True) # check that the backup shows up in the listing backups = self._list_backups() logging.debug('list of backups: %s', backups) self.assertEqual(len(backups), 1) - self.assertTrue(backups[0].endswith(tablet_replica1.tablet_alias)) + self.assertTrue(backups[0].endswith(unsharded_replica1.tablet_alias)) # insert more data on the master - self._insert_data(tablet_master, 2) + self._insert_data(unsharded_master, 2) utils.run_vtctl(['ApplyVSchema', '-vschema', self._vschema_json, @@ -311,7 +229,7 @@ def test_basic_recovery(self): logging.debug('Serving vschema before recovery: %s', str(vs)) # now bring up the other slave, letting it restore from backup. - self._restore(tablet_replica2, 'recovery_keyspace') + self._restore(unsharded_replica2, 'recovery_keyspace') vs = utils.run_vtctl_json(['GetSrvVSchema', 'test_nj']) logging.debug('Serving vschema after recovery: %s', str(vs)) @@ -321,10 +239,10 @@ def test_basic_recovery(self): logging.debug('recovery_keyspace vschema: %s', str(vs)) # check the new slave does not have the data - self._check_data(tablet_replica2, 1, 'replica2 tablet should not have new data') + self._check_data(unsharded_replica2, 1, 'replica2 tablet should not have new data') # check that the restored slave has the right local_metadata - result = tablet_replica2.mquery('_vt', 'select * from local_metadata') + result = unsharded_replica2.mquery('_vt', 'select * from local_metadata') metadata = {} for row in result: metadata[row[0]] = row[1] @@ -335,7 +253,7 @@ def test_basic_recovery(self): # start vtgate vtgate = utils.VtGate() vtgate.start(tablets=[ - tablet_master, tablet_replica1, tablet_replica2 + unsharded_master, unsharded_replica1, unsharded_replica2 ], tablet_types_to_wait='REPLICA') utils.vtgate.wait_for_endpoints('test_keyspace.0.master', 1) utils.vtgate.wait_for_endpoints('test_keyspace.0.replica', 1) @@ -381,7 +299,7 @@ def test_basic_recovery(self): #self.assertEqual(result[0][0], 1) vtgate_conn.close() - tablet_replica2.kill_vttablet() + unsharded_replica2.kill_vttablet() vtgate.kill() def test_multi_recovery(self): @@ -395,10 +313,10 @@ def test_multi_recovery(self): - insert more data on the master - take another backup - create a recovery keyspace after first backup - - bring up tablet_replica2 in the new keyspace + - bring up unsharded_replica2 in the new keyspace - check that new tablet does not have data created after backup1 - create second recovery keyspace after second backup - - bring up tablet_replica3 in second keyspace + - bring up unsharded_replica3 in second keyspace - check that new tablet has data created after backup1 but not data created after backup2 - check that vtgate queries work correctly @@ -409,22 +327,22 @@ def test_multi_recovery(self): '-sql', self._create_vt_insert_test, 'test_keyspace'], auto_log=True) - self._insert_data(tablet_master, 1) - self._check_data(tablet_replica1, 1, 'replica1 tablet getting data') + self._insert_data(unsharded_master, 1) + self._check_data(unsharded_replica1, 1, 'replica1 tablet getting data') # backup the slave - utils.run_vtctl(['Backup', tablet_replica1.tablet_alias], auto_log=True) + utils.run_vtctl(['Backup', unsharded_replica1.tablet_alias], auto_log=True) # check that the backup shows up in the listing backups = self._list_backups() logging.debug('list of backups: %s', backups) self.assertEqual(len(backups), 1) - self.assertTrue(backups[0].endswith(tablet_replica1.tablet_alias)) + self.assertTrue(backups[0].endswith(unsharded_replica1.tablet_alias)) # insert more data on the master - self._insert_data(tablet_master, 2) + self._insert_data(unsharded_master, 2) # wait for it to replicate - self._check_data(tablet_replica1, 2, 'replica1 tablet getting data') + self._check_data(unsharded_replica1, 2, 'replica1 tablet getting data') utils.run_vtctl(['ApplyVSchema', '-vschema', self._vschema_json, @@ -435,7 +353,7 @@ def test_multi_recovery(self): logging.debug('test_keyspace vschema: %s', str(vs)) # now bring up the other slave, letting it restore from backup. - self._restore(tablet_replica2, 'recovery_ks1') + self._restore(unsharded_replica2, 'recovery_ks1') # we are not asserting on the contents of vschema here # because the later part of the test (vtgate) will fail @@ -444,30 +362,28 @@ def test_multi_recovery(self): logging.debug('recovery_ks1 vschema: %s', str(vs)) # check the new slave does not have the data - self._check_data(tablet_replica2, 1, 'replica2 tablet should not have new data') + self._check_data(unsharded_replica2, 1, 'replica2 tablet should not have new data') # take another backup on the slave - utils.run_vtctl(['Backup', tablet_replica1.tablet_alias], auto_log=True) + utils.run_vtctl(['Backup', unsharded_replica1.tablet_alias], auto_log=True) # insert more data on the master - self._insert_data(tablet_master, 3) + self._insert_data(unsharded_master, 3) # wait for it to replicate - self._check_data(tablet_replica1, 3, 'replica1 tablet getting data') + self._check_data(unsharded_replica1, 3, 'replica1 tablet getting data') # now bring up the other slave, letting it restore from backup2. - self._restore(tablet_replica3, 'recovery_ks2') + self._restore(unsharded_replica3, 'recovery_ks2') vs = utils.run_vtctl(['GetVSchema', 'recovery_ks2']) logging.debug('recovery_ks2 vschema: %s', str(vs)) # check the new slave does not have the latest data - self._check_data(tablet_replica3, 2, 'replica3 tablet should not have new data') + self._check_data(unsharded_replica3, 2, 'replica3 tablet should not have new data') # start vtgate vtgate = utils.VtGate() - vtgate.start(tablets=[ - tablet_master, tablet_replica1, tablet_replica2, tablet_replica3 - ], tablet_types_to_wait='REPLICA') + vtgate.start(tablets=unsharded_tablets, tablet_types_to_wait='REPLICA') utils.vtgate.wait_for_endpoints('test_keyspace.0.master', 1) utils.vtgate.wait_for_endpoints('test_keyspace.0.replica', 1) utils.vtgate.wait_for_endpoints('recovery_ks1.0.replica', 1) @@ -512,8 +428,8 @@ def test_multi_recovery(self): #self.assertEqual(result[0][0], 1) vtgate_conn.close() - tablet_replica2.kill_vttablet() - tablet_replica3.kill_vttablet() + unsharded_replica2.kill_vttablet() + unsharded_replica3.kill_vttablet() vtgate.kill() if __name__ == '__main__': From 5c0bef0a0e6013e821f3dd480fd4b37dc780cbcc Mon Sep 17 00:00:00 2001 From: deepthi Date: Mon, 1 Jul 2019 13:51:05 -0700 Subject: [PATCH 13/17] fix after merge Signed-off-by: deepthi --- go/cmd/vtbackup/vtbackup.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/go/cmd/vtbackup/vtbackup.go b/go/cmd/vtbackup/vtbackup.go index c95f609ff06..e2f0e3e1768 100644 --- a/go/cmd/vtbackup/vtbackup.go +++ b/go/cmd/vtbackup/vtbackup.go @@ -231,9 +231,10 @@ func takeBackup(ctx context.Context, topoServer *topo.Server, backupStorage back if err := mysqld.ExecuteSuperQueryList(ctx, cmds); err != nil { return fmt.Errorf("can't initialize database: %v", err) } + backupTime := time.Now() // Now we're ready to take the backup. - name := backupName(time.Now(), tabletAlias) - if err := mysqlctl.Backup(ctx, mycnf, mysqld, logutil.NewConsoleLogger(), backupDir, name, *concurrency, extraEnv); err != nil { + name := backupName(backupTime, tabletAlias) + if err := mysqlctl.Backup(ctx, mycnf, mysqld, logutil.NewConsoleLogger(), backupDir, name, *concurrency, extraEnv, backupTime); err != nil { return fmt.Errorf("backup failed: %v", err) } log.Info("Initial backup successful.") @@ -241,7 +242,7 @@ func takeBackup(ctx context.Context, topoServer *topo.Server, backupStorage back } log.Infof("Restoring latest backup from directory %v", backupDir) - restorePos, err := mysqlctl.Restore(ctx, mycnf, mysqld, backupDir, *concurrency, extraEnv, map[string]string{}, logutil.NewConsoleLogger(), true, dbName) + restorePos, _, err := mysqlctl.Restore(ctx, mycnf, mysqld, backupDir, *concurrency, extraEnv, map[string]string{}, logutil.NewConsoleLogger(), true, dbName, time.Unix(0, 0).UTC()) switch err { case nil: log.Infof("Successfully restored from backup at replication position %v", restorePos) @@ -326,7 +327,7 @@ func takeBackup(ctx context.Context, topoServer *topo.Server, backupStorage back // Now we can take a new backup. name := backupName(backupTime, tabletAlias) - if err := mysqlctl.Backup(ctx, mycnf, mysqld, logutil.NewConsoleLogger(), backupDir, name, *concurrency, extraEnv); err != nil { + if err := mysqlctl.Backup(ctx, mycnf, mysqld, logutil.NewConsoleLogger(), backupDir, name, *concurrency, extraEnv, backupTime); err != nil { return fmt.Errorf("error taking backup: %v", err) } From 07fe3857ed023434ad5345159c8bf97f400e838a Mon Sep 17 00:00:00 2001 From: deepthi Date: Tue, 2 Jul 2019 13:16:03 -0700 Subject: [PATCH 14/17] sharded recovery testcase Signed-off-by: deepthi --- test/config.json | 9 + test/recovery.py | 104 +++++----- test/sharded_recovery.py | 399 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 457 insertions(+), 55 deletions(-) create mode 100755 test/sharded_recovery.py diff --git a/test/config.json b/test/config.json index ad443539a5c..c407ed00874 100644 --- a/test/config.json +++ b/test/config.json @@ -358,6 +358,15 @@ "RetryMax": 0, "Tags": [] }, + "sharded_recovery": { + "File": "sharded_recovery.py", + "Args": [], + "Command": [], + "Manual": false, + "Shard": 4, + "RetryMax": 0, + "Tags": [] + }, "tabletmanager": { "File": "tabletmanager.py", "Args": [], diff --git a/test/recovery.py b/test/recovery.py index 1a9a62d9a32..c50f90eec94 100755 --- a/test/recovery.py +++ b/test/recovery.py @@ -28,14 +28,13 @@ from vtdb import vtgate_client -# initial shard, covers everything -unsharded_master = tablet.Tablet() -unsharded_replica1 = tablet.Tablet() -unsharded_replica2 = tablet.Tablet() -unsharded_replica3 = tablet.Tablet() +# tablets +tablet_master = tablet.Tablet() +tablet_replica1 = tablet.Tablet() +tablet_replica2 = tablet.Tablet() +tablet_replica3 = tablet.Tablet() -all_tablets = [unsharded_master, unsharded_replica1, unsharded_replica2, unsharded_replica3] -unsharded_tablets = [unsharded_master, unsharded_replica1, unsharded_replica2, unsharded_replica3] +all_tablets = [tablet_master, tablet_replica1, tablet_replica2, tablet_replica3] def setUpModule(): try: @@ -66,21 +65,18 @@ def get_connection(timeout=15.0): logging.exception('Connection to vtgate (timeout=%s) failed.', timeout) raise -class TestVttabletRecovery(unittest.TestCase): +class TestRecovery(unittest.TestCase): def setUp(self): - for t in unsharded_master, unsharded_replica1: - t.create_db('vt_test_keyspace') - xtra_args = ['-enable_replication_reporter'] - unsharded_master.init_tablet('replica', 'test_keyspace', '0', start=True, + tablet_master.init_tablet('replica', 'test_keyspace', '0', start=True, supports_backups=True, extra_args=xtra_args) - unsharded_replica1.init_tablet('replica', 'test_keyspace', '0', start=True, + tablet_replica1.init_tablet('replica', 'test_keyspace', '0', start=True, supports_backups=True, extra_args=xtra_args) utils.run_vtctl(['InitShardMaster', '-force', 'test_keyspace/0', - unsharded_master.tablet_alias]) + tablet_master.tablet_alias]) def tearDown(self): for t in all_tablets: @@ -190,31 +186,31 @@ def test_basic_recovery(self): - take a backup - insert more data on the master - create a recovery keyspace - - bring up unsharded_replica2 in the new keyspace + - bring up tablet_replica2 in the new keyspace - check that new tablet does not have data created after backup - check that vtgate queries work correctly """ - # insert data on master, wait for slave to get it + # insert data on master, wait for replica to get it utils.run_vtctl(['ApplySchema', '-sql', self._create_vt_insert_test, 'test_keyspace'], auto_log=True) - self._insert_data(unsharded_master, 1) - self._check_data(unsharded_replica1, 1, 'replica1 tablet getting data') + self._insert_data(tablet_master, 1) + self._check_data(tablet_replica1, 1, 'replica1 tablet getting data') - # backup the slave - utils.run_vtctl(['Backup', unsharded_replica1.tablet_alias], auto_log=True) + # backup the replica + utils.run_vtctl(['Backup', tablet_replica1.tablet_alias], auto_log=True) # check that the backup shows up in the listing backups = self._list_backups() logging.debug('list of backups: %s', backups) self.assertEqual(len(backups), 1) - self.assertTrue(backups[0].endswith(unsharded_replica1.tablet_alias)) + self.assertTrue(backups[0].endswith(tablet_replica1.tablet_alias)) # insert more data on the master - self._insert_data(unsharded_master, 2) + self._insert_data(tablet_master, 2) utils.run_vtctl(['ApplyVSchema', '-vschema', self._vschema_json, @@ -228,8 +224,8 @@ def test_basic_recovery(self): vs = utils.run_vtctl_json(['GetSrvVSchema', 'test_nj']) logging.debug('Serving vschema before recovery: %s', str(vs)) - # now bring up the other slave, letting it restore from backup. - self._restore(unsharded_replica2, 'recovery_keyspace') + # now bring up the recovery keyspace with 1 tablet, letting it restore from backup. + self._restore(tablet_replica2, 'recovery_keyspace') vs = utils.run_vtctl_json(['GetSrvVSchema', 'test_nj']) logging.debug('Serving vschema after recovery: %s', str(vs)) @@ -238,11 +234,11 @@ def test_basic_recovery(self): vs = utils.run_vtctl_json(['GetVSchema', 'recovery_keyspace']) logging.debug('recovery_keyspace vschema: %s', str(vs)) - # check the new slave does not have the data - self._check_data(unsharded_replica2, 1, 'replica2 tablet should not have new data') + # check the new replica does not have the data + self._check_data(tablet_replica2, 1, 'replica2 tablet should not have new data') - # check that the restored slave has the right local_metadata - result = unsharded_replica2.mquery('_vt', 'select * from local_metadata') + # check that the restored replica has the right local_metadata + result = tablet_replica2.mquery('_vt', 'select * from local_metadata') metadata = {} for row in result: metadata[row[0]] = row[1] @@ -253,7 +249,7 @@ def test_basic_recovery(self): # start vtgate vtgate = utils.VtGate() vtgate.start(tablets=[ - unsharded_master, unsharded_replica1, unsharded_replica2 + tablet_master, tablet_replica1, tablet_replica2 ], tablet_types_to_wait='REPLICA') utils.vtgate.wait_for_endpoints('test_keyspace.0.master', 1) utils.vtgate.wait_for_endpoints('test_keyspace.0.replica', 1) @@ -299,7 +295,7 @@ def test_basic_recovery(self): #self.assertEqual(result[0][0], 1) vtgate_conn.close() - unsharded_replica2.kill_vttablet() + tablet_replica2.kill_vttablet() vtgate.kill() def test_multi_recovery(self): @@ -313,36 +309,36 @@ def test_multi_recovery(self): - insert more data on the master - take another backup - create a recovery keyspace after first backup - - bring up unsharded_replica2 in the new keyspace + - bring up tablet_replica2 in the new keyspace - check that new tablet does not have data created after backup1 - create second recovery keyspace after second backup - - bring up unsharded_replica3 in second keyspace + - bring up tablet_replica3 in second keyspace - check that new tablet has data created after backup1 but not data created after backup2 - check that vtgate queries work correctly """ - # insert data on master, wait for slave to get it + # insert data on master, wait for replica to get it utils.run_vtctl(['ApplySchema', '-sql', self._create_vt_insert_test, 'test_keyspace'], auto_log=True) - self._insert_data(unsharded_master, 1) - self._check_data(unsharded_replica1, 1, 'replica1 tablet getting data') + self._insert_data(tablet_master, 1) + self._check_data(tablet_replica1, 1, 'replica1 tablet getting data') - # backup the slave - utils.run_vtctl(['Backup', unsharded_replica1.tablet_alias], auto_log=True) + # backup the replica + utils.run_vtctl(['Backup', tablet_replica1.tablet_alias], auto_log=True) # check that the backup shows up in the listing backups = self._list_backups() logging.debug('list of backups: %s', backups) self.assertEqual(len(backups), 1) - self.assertTrue(backups[0].endswith(unsharded_replica1.tablet_alias)) + self.assertTrue(backups[0].endswith(tablet_replica1.tablet_alias)) # insert more data on the master - self._insert_data(unsharded_master, 2) + self._insert_data(tablet_master, 2) # wait for it to replicate - self._check_data(unsharded_replica1, 2, 'replica1 tablet getting data') + self._check_data(tablet_replica1, 2, 'replica1 tablet getting data') utils.run_vtctl(['ApplyVSchema', '-vschema', self._vschema_json, @@ -352,8 +348,8 @@ def test_multi_recovery(self): vs = utils.run_vtctl_json(['GetVSchema', 'test_keyspace']) logging.debug('test_keyspace vschema: %s', str(vs)) - # now bring up the other slave, letting it restore from backup. - self._restore(unsharded_replica2, 'recovery_ks1') + # now bring up the other replica, letting it restore from backup. + self._restore(tablet_replica2, 'recovery_ks1') # we are not asserting on the contents of vschema here # because the later part of the test (vtgate) will fail @@ -361,29 +357,29 @@ def test_multi_recovery(self): vs = utils.run_vtctl_json(['GetVSchema', 'recovery_ks1']) logging.debug('recovery_ks1 vschema: %s', str(vs)) - # check the new slave does not have the data - self._check_data(unsharded_replica2, 1, 'replica2 tablet should not have new data') + # check the new replica does not have the data + self._check_data(tablet_replica2, 1, 'replica2 tablet should not have new data') - # take another backup on the slave - utils.run_vtctl(['Backup', unsharded_replica1.tablet_alias], auto_log=True) + # take another backup on the replica + utils.run_vtctl(['Backup', tablet_replica1.tablet_alias], auto_log=True) # insert more data on the master - self._insert_data(unsharded_master, 3) + self._insert_data(tablet_master, 3) # wait for it to replicate - self._check_data(unsharded_replica1, 3, 'replica1 tablet getting data') + self._check_data(tablet_replica1, 3, 'replica1 tablet getting data') - # now bring up the other slave, letting it restore from backup2. - self._restore(unsharded_replica3, 'recovery_ks2') + # now bring up the other replica, letting it restore from backup2. + self._restore(tablet_replica3, 'recovery_ks2') vs = utils.run_vtctl(['GetVSchema', 'recovery_ks2']) logging.debug('recovery_ks2 vschema: %s', str(vs)) - # check the new slave does not have the latest data - self._check_data(unsharded_replica3, 2, 'replica3 tablet should not have new data') + # check the new replica does not have the latest data + self._check_data(tablet_replica3, 2, 'replica3 tablet should not have new data') # start vtgate vtgate = utils.VtGate() - vtgate.start(tablets=unsharded_tablets, tablet_types_to_wait='REPLICA') + vtgate.start(tablets=all_tablets, tablet_types_to_wait='REPLICA') utils.vtgate.wait_for_endpoints('test_keyspace.0.master', 1) utils.vtgate.wait_for_endpoints('test_keyspace.0.replica', 1) utils.vtgate.wait_for_endpoints('recovery_ks1.0.replica', 1) @@ -428,8 +424,6 @@ def test_multi_recovery(self): #self.assertEqual(result[0][0], 1) vtgate_conn.close() - unsharded_replica2.kill_vttablet() - unsharded_replica3.kill_vttablet() vtgate.kill() if __name__ == '__main__': diff --git a/test/sharded_recovery.py b/test/sharded_recovery.py new file mode 100755 index 00000000000..5be36f0c37f --- /dev/null +++ b/test/sharded_recovery.py @@ -0,0 +1,399 @@ +#!/usr/bin/env python + +# 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. + +import datetime +import json +import logging +import os +import unittest + +import MySQLdb + +import environment +import tablet +import utils + +from vtdb import vtgate_client + +# initial shard, covers everything +tablet_master = tablet.Tablet() +tablet_replica1 = tablet.Tablet() +tablet_rdonly = tablet.Tablet() +# to use for recovery keyspace +tablet_replica2 = tablet.Tablet() + +# split shards +# range '' - 80 +shard_0_master = tablet.Tablet() +shard_0_replica = tablet.Tablet() +shard_0_rdonly = tablet.Tablet() +# range 80 - '' +shard_1_master = tablet.Tablet() +shard_1_replica = tablet.Tablet() +shard_1_rdonly = tablet.Tablet() + +all_tablets = [tablet_master, tablet_replica1, tablet_replica2, tablet_rdonly, + shard_0_master, shard_0_replica, shard_0_rdonly, shard_1_master, shard_1_replica, shard_1_rdonly] + +def setUpModule(): + try: + environment.topo_server().setup() + setup_procs = [t.init_mysql() for t in all_tablets] + utils.wait_procs(setup_procs) + except: + tearDownModule() + raise + +def tearDownModule(): + utils.required_teardown() + if utils.options.skip_teardown: + return + teardown_procs = [t.teardown_mysql() for t in all_tablets] + utils.wait_procs(teardown_procs, raise_on_error=False) + environment.topo_server().teardown() + utils.kill_sub_processes() + utils.remove_tmp_files() + for t in all_tablets: + t.remove_tree() + +def get_connection(timeout=15.0): + protocol, endpoint = utils.vtgate.rpc_endpoint(python=True) + try: + return vtgate_client.connect(protocol, endpoint, timeout) + except Exception: + logging.exception('Connection to vtgate (timeout=%s) failed.', timeout) + raise + +class TestShardedRecovery(unittest.TestCase): + + def setUp(self): + xtra_args = ['-enable_replication_reporter'] + tablet_master.init_tablet('replica', 'test_keyspace', '0', start=True, + supports_backups=True, + extra_args=xtra_args) + tablet_replica1.init_tablet('replica', 'test_keyspace', '0', start=True, + supports_backups=True, + extra_args=xtra_args) + tablet_rdonly.init_tablet('rdonly', 'test_keyspace', '0', start=True, + supports_backups=True, + extra_args=xtra_args) + utils.run_vtctl(['InitShardMaster', '-force', 'test_keyspace/0', + tablet_master.tablet_alias]) + + def tearDown(self): + for t in all_tablets: + t.kill_vttablet() + + tablet.Tablet.check_vttablet_count() + environment.topo_server().wipe() + for t in all_tablets: + t.reset_replication() + t.set_semi_sync_enabled(master=False, slave=False) + t.clean_dbs() + + for backup in self._list_backups(): + self._remove_backup(backup) + + _create_vt_insert_test = '''create table vt_insert_test ( + id bigint auto_increment, + msg varchar(64), + primary key (id) + ) Engine=InnoDB''' + + _vschema_json = '''{ + "sharded": true, + "vindexes": { + "hash": { + "type": "hash" + } + }, + "tables": { + "vt_insert_test": { + "column_vindexes": [ + { + "column": "id", + "name": "hash" + } + ] + } + } +}''' + + def _insert_data(self, t, index): + """Add a single row with value 'index' to the given tablet.""" + t.mquery( + 'vt_test_keyspace', + "insert into vt_insert_test (msg) values ('test %s')" % + index, write=True) + + def _check_data(self, t, count, msg): + """Check that the specified tablet has the expected number of rows.""" + timeout = 10 + while True: + try: + result = t.mquery( + 'vt_test_keyspace', 'select count(*) from vt_insert_test') + if result[0][0] == count: + break + except MySQLdb.DatabaseError: + # ignore exceptions, we'll just timeout (the tablet creation + # can take some time to replicate, and we get a 'table vt_insert_test + # does not exist exception in some rare cases) + logging.exception('exception waiting for data to replicate') + timeout = utils.wait_step(msg, timeout) + + def _restore(self, t, keyspace): + """Erase mysql/tablet dir, then start tablet with restore enabled.""" + self._reset_tablet_dir(t) + + # create a recovery keyspace + utils.run_vtctl(['CreateKeyspace', + '-keyspace_type=SNAPSHOT', + '-base_keyspace=test_keyspace', + '-snapshot_time', + datetime.datetime.utcnow().isoformat("T")+"Z", + keyspace]) + + # set disable_active_reparents to true, otherwise replication_reporter will + # try to restart replication + xtra_args = ['-disable_active_reparents', + '-enable_replication_reporter=false'] + xtra_args.extend(tablet.get_backup_storage_flags()) + + t.start_vttablet(wait_for_state='SERVING', + init_tablet_type='replica', + init_keyspace=keyspace, + init_shard='0', + supports_backups=True, + extra_args=xtra_args) + + def _reset_tablet_dir(self, t): + """Stop mysql, delete everything including tablet dir, restart mysql.""" + utils.wait_procs([t.teardown_mysql()]) + # Specify ignore_options because we want to delete the tree even + # if the test's -k / --keep-logs was specified on the command line. + t.remove_tree(ignore_options=True) + proc = t.init_mysql() + utils.wait_procs([proc]) + + def _list_backups(self): + """Get a list of backup names for the test shard.""" + backups, _ = utils.run_vtctl(tablet.get_backup_storage_flags() + + ['ListBackups', 'test_keyspace/0'], + mode=utils.VTCTL_VTCTL, trap_output=True) + return backups.splitlines() + + def _remove_backup(self, backup): + """Remove a named backup from the test shard.""" + utils.run_vtctl( + tablet.get_backup_storage_flags() + + ['RemoveBackup', 'test_keyspace/0', backup], + auto_log=True, mode=utils.VTCTL_VTCTL) + + def test_sharded_recovery(self): + """Test recovery from backup flow. + + test_recovery will: + - create a shard with master and replica1 only + - run InitShardMaster + - insert some data + - take a backup + - insert more data on the master + - perform a resharding + - create a recovery keyspace + - bring up tablet_replica2 in the new keyspace + - check that new tablet does not have data created after backup + - check that vtgate queries work correctly + + """ + + # insert data on master, wait for replica to get it + utils.run_vtctl(['ApplySchema', + '-sql', self._create_vt_insert_test, + 'test_keyspace'], + auto_log=True) + self._insert_data(tablet_master, 1) + self._check_data(tablet_replica1, 1, 'replica1 tablet getting data') + # insert more data on the master + self._insert_data(tablet_master, 2) + + # backup the replica + utils.run_vtctl(['Backup', tablet_replica1.tablet_alias], auto_log=True) + + # check that the backup shows up in the listing + backups = self._list_backups() + logging.debug('list of backups: %s', backups) + self.assertEqual(len(backups), 1) + self.assertTrue(backups[0].endswith(tablet_replica1.tablet_alias)) + + # insert more data on the master + self._insert_data(tablet_master, 3) + + utils.run_vtctl(['ApplyVSchema', + '-vschema', self._vschema_json, + 'test_keyspace'], + auto_log=True) + + # create the split shards + shard_0_master.init_tablet( + 'replica', + keyspace='test_keyspace', + shard='-80', + tablet_index=0) + shard_0_replica.init_tablet( + 'replica', + keyspace='test_keyspace', + shard='-80', + tablet_index=1) + shard_0_rdonly.init_tablet( + 'rdonly', + keyspace='test_keyspace', + shard='-80', + tablet_index=2) + shard_1_master.init_tablet( + 'replica', + keyspace='test_keyspace', + shard='80-', + tablet_index=0) + shard_1_replica.init_tablet( + 'replica', + keyspace='test_keyspace', + shard='80-', + tablet_index=1) + shard_1_rdonly.init_tablet( + 'rdonly', + keyspace='test_keyspace', + shard='80-', + tablet_index=2) + + for t in [shard_0_master, shard_0_replica, shard_0_rdonly, + shard_1_master, shard_1_replica, shard_1_rdonly]: + t.start_vttablet(wait_for_state=None, + binlog_use_v3_resharding_mode=True) + + for t in [shard_0_master, shard_0_replica, shard_0_rdonly, + shard_1_master, shard_1_replica, shard_1_rdonly]: + t.wait_for_vttablet_state('NOT_SERVING') + + utils.run_vtctl(['InitShardMaster', '-force', 'test_keyspace/-80', + shard_0_master.tablet_alias], auto_log=True) + utils.run_vtctl(['InitShardMaster', '-force', 'test_keyspace/80-', + shard_1_master.tablet_alias], auto_log=True) + + for t in [shard_0_replica, shard_1_replica]: + utils.wait_for_tablet_type(t.tablet_alias, 'replica') + + sharded_tablets = [shard_0_master, shard_0_replica, shard_0_rdonly, + shard_1_master, shard_1_replica, shard_1_rdonly] + for t in sharded_tablets: + t.wait_for_vttablet_state('SERVING') + + # we need to create the schema, and the worker will do data copying + for keyspace_shard in ('test_keyspace/-80', 'test_keyspace/80-'): + utils.run_vtctl(['CopySchemaShard', + 'test_keyspace/0', + keyspace_shard], + auto_log=True) + + # Run vtworker as daemon for the following SplitClone commands. + worker_proc, worker_port, worker_rpc_port = utils.run_vtworker_bg( + ['--cell', 'test_nj', '--command_display_interval', '10ms', + '--use_v3_resharding_mode=true'], + auto_log=True) + + # Run SplitClone. + workerclient_proc = utils.run_vtworker_client_bg( + ['SplitClone', + '--chunk_count', '10', + '--min_rows_per_chunk', '1', + '--min_healthy_rdonly_tablets', '1', + 'test_keyspace/0'], + worker_rpc_port) + utils.wait_procs([workerclient_proc]) + + # Terminate worker daemon because it is no longer needed. + utils.kill_sub_process(worker_proc, soft=True) + + utils.run_vtctl( + ['MigrateServedTypes', 'test_keyspace/0', 'rdonly'], auto_log=True) + utils.run_vtctl( + ['MigrateServedTypes', 'test_keyspace/0', 'replica'], auto_log=True) + # then serve master from the split shards + utils.run_vtctl(['MigrateServedTypes', 'test_keyspace/0', 'master'], + auto_log=True) + + # now bring up the recovery keyspace and a tablet, letting it restore from backup. + self._restore(tablet_replica2, 'recovery_keyspace') + + # check the new replica does not have the data + self._check_data(tablet_replica2, 2, 'replica2 tablet should not have new data') + + # start vtgate + vtgate = utils.VtGate() + vtgate.start(tablets=[ + shard_0_master, shard_0_replica, shard_1_master, shard_1_replica, tablet_replica2 + ], tablet_types_to_wait='REPLICA') + utils.vtgate.wait_for_endpoints('test_keyspace.-80.master', 1) + utils.vtgate.wait_for_endpoints('test_keyspace.80-.replica', 1) + utils.vtgate.wait_for_endpoints('test_keyspace.-80.master', 1) + utils.vtgate.wait_for_endpoints('test_keyspace.80-.replica', 1) + utils.vtgate.wait_for_endpoints('recovery_keyspace.0.replica', 1) + + # check that vtgate doesn't route queries to new tablet + vtgate_conn = get_connection() + cursor = vtgate_conn.cursor( + tablet_type='replica', keyspace=None, writable=True) + + cursor.execute('select count(*) from vt_insert_test', {}) + result = cursor.fetchall() + if not result: + self.fail('Result cannot be null') + else: + self.assertEqual(result[0][0], 3) + + # check that new tablet is accessible by using ks.table + cursor.execute('select count(*) from recovery_keyspace.vt_insert_test', {}) + result = cursor.fetchall() + if not result: + self.fail('Result cannot be null') + else: + self.assertEqual(result[0][0], 2) + + # check that new tablet is accessible with 'use ks' + cursor.execute('use recovery_keyspace@replica', {}) + cursor.execute('select count(*) from vt_insert_test', {}) + result = cursor.fetchall() + if not result: + self.fail('Result cannot be null') + else: + self.assertEqual(result[0][0], 2) + + # TODO check that new tablet is accessible with 'use ks:shard' + # this currently does not work through the python client, though it works from mysql client + #cursor.execute('use recovery_keyspace:0@replica', {}) + #cursor.execute('select count(*) from vt_insert_test', {}) + #result = cursor.fetchall() + #if not result: + #self.fail('Result cannot be null') + #else: + #self.assertEqual(result[0][0], 1) + + vtgate_conn.close() + tablet_replica2.kill_vttablet() + vtgate.kill() + +if __name__ == '__main__': + utils.main() From 485431d9bc3f04ce28ae8c1130cde532e0fb0971 Mon Sep 17 00:00:00 2001 From: deepthi Date: Tue, 2 Jul 2019 15:24:38 -0700 Subject: [PATCH 15/17] use vtctl SplitClone instead of vtworker Signed-off-by: deepthi --- test/sharded_recovery.py | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/test/sharded_recovery.py b/test/sharded_recovery.py index 5be36f0c37f..171883f58aa 100755 --- a/test/sharded_recovery.py +++ b/test/sharded_recovery.py @@ -308,24 +308,8 @@ def test_sharded_recovery(self): keyspace_shard], auto_log=True) - # Run vtworker as daemon for the following SplitClone commands. - worker_proc, worker_port, worker_rpc_port = utils.run_vtworker_bg( - ['--cell', 'test_nj', '--command_display_interval', '10ms', - '--use_v3_resharding_mode=true'], - auto_log=True) - - # Run SplitClone. - workerclient_proc = utils.run_vtworker_client_bg( - ['SplitClone', - '--chunk_count', '10', - '--min_rows_per_chunk', '1', - '--min_healthy_rdonly_tablets', '1', - 'test_keyspace/0'], - worker_rpc_port) - utils.wait_procs([workerclient_proc]) - - # Terminate worker daemon because it is no longer needed. - utils.kill_sub_process(worker_proc, soft=True) + utils.run_vtctl( + ['SplitClone', 'test_keyspace', '0', '-80,80-'], auto_log=True) utils.run_vtctl( ['MigrateServedTypes', 'test_keyspace/0', 'rdonly'], auto_log=True) @@ -341,6 +325,19 @@ def test_sharded_recovery(self): # check the new replica does not have the data self._check_data(tablet_replica2, 2, 'replica2 tablet should not have new data') + # remove the original tablets in the original shard + tablet.kill_tablets([tablet_master, tablet_replica1, tablet_rdonly]) + for t in [tablet_replica1, tablet_rdonly]: + utils.run_vtctl(['DeleteTablet', t.tablet_alias], auto_log=True) + utils.run_vtctl(['DeleteTablet', '-allow_master', + tablet_master.tablet_alias], auto_log=True) + + # rebuild the serving graph, all mentions of the old shards should be gone + utils.run_vtctl(['RebuildKeyspaceGraph', 'test_keyspace'], auto_log=True) + + # delete the original shard + utils.run_vtctl(['DeleteShard', 'test_keyspace/0'], auto_log=True) + # start vtgate vtgate = utils.VtGate() vtgate.start(tablets=[ From 382d3c77ed1a565394789fd9ba98f0cd6e16797a Mon Sep 17 00:00:00 2001 From: deepthi Date: Tue, 13 Aug 2019 11:38:19 -0700 Subject: [PATCH 16/17] Merge branch 'master' into ds-pitr-tablet Signed-off-by: deepthi --- .dockerignore | 2 +- .ruby-version | 1 - Makefile | 15 +- bootstrap.sh | 33 +- config/mycnf/default-fast.cnf | 19 - config/mycnf/default.cnf | 20 - config/mycnf/master_mariadb.cnf | 12 +- config/mycnf/master_mariadb100.cnf | 12 + config/mycnf/master_mariadb101.cnf | 12 + config/mycnf/master_mariadb102.cnf | 12 + config/mycnf/master_mariadb103.cnf | 2 + config/mycnf/master_mysql56.cnf | 2 + config/mycnf/master_mysql57.cnf | 32 + config/mycnf/master_mysql80.cnf | 2 + dev.env | 10 - doc/AdvancedFeaturesIndex.md | 12 - doc/BackupAndRestore.md | 250 - doc/CodeReviews.md | 72 - doc/Concepts.md | 221 - doc/Contributing.md | 53 - doc/FAQ.md | 77 - doc/GettingStarted.md | 673 --- doc/GettingStartedKubernetes.md | 747 --- doc/GitHubWorkflow.md | 137 - doc/HorizontalReshardingGuide.md | 262 - doc/HorizontalReshardingWorkflowGuide.md | 262 - doc/Messaging.md | 209 - doc/Monitoring.md | 43 - doc/MySQLServerProtocol.md | 17 - doc/Production.md | 34 - doc/ProductionPlanning.md | 73 - doc/ReferenceTables.md | 153 - doc/Reparenting.md | 185 - doc/RowBasedReplication.md | 168 - doc/ScalabilityPhilosophy.md | 247 - doc/ScalingMySQL.md | 143 - doc/SchemaManagement.md | 190 - doc/SchemaSwap.md | 87 - doc/ServerConfiguration.md | 684 --- doc/Sharding.md | 187 - doc/ShardingKubernetes.md | 286 - doc/ShardingKubernetesWorkflow.md | 222 - doc/TestingOnARamDisk.md | 28 - doc/TopologyService.md | 586 -- doc/Troubleshooting.md | 47 - doc/TwoPhaseCommitGuide.md | 86 - doc/UpdateStream.md | 498 -- doc/Upgrading.md | 49 - doc/UserGuideIntroduction.md | 83 - doc/VSchema.md | 340 -- doc/VTTabletModes.md | 107 - doc/VTTabletModules.png | Bin 37401 -> 0 bytes doc/VitessApi.md | 1033 ---- doc/VitessComponents.png | Bin 24320 -> 0 bytes doc/VitessOverview.md | 239 - doc/VitessOverview.png | Bin 35460 -> 0 bytes doc/VitessReplication.md | 162 - doc/VitessSequences.md | 208 - doc/VitessTransportSecurityModel.md | 110 - doc/VtExplain.md | 151 - doc/internal/PublishWebsite.md | 166 - doc/slides/Percona2015.pptx | Bin 546098 -> 0 bytes doc/slides/Vitess2014.pdf | Bin 4379379 -> 0 bytes doc/vtctlReference.md | 2573 -------- docker/bootstrap/Dockerfile.common | 2 +- docker/bootstrap/Dockerfile.mariadb103 | 4 +- docker/k8s/Dockerfile | 21 +- docker/k8s/orchestrator/Dockerfile | 6 +- docker/lite/Dockerfile | 10 +- docker/orchestrator/orchestrator.conf.json | 260 +- docker/packaging/Dockerfile | 23 + docker/packaging/package_vitess.sh | 47 + docker/packaging/preinstall.sh | 9 + docker/test/run.sh | 4 +- examples/compose/.env | 8 + examples/compose/README.md | 143 +- examples/compose/backups/.gitignore | 4 + examples/compose/client.sh | 12 +- examples/compose/docker-compose.yml | 39 +- examples/compose/fix_replication.sh | 69 + examples/compose/lfixrepl.sh | 25 + examples/compose/lmysql.sh | 24 + examples/compose/lvtctl.sh | 10 +- examples/compose/vttablet-up.sh | 118 +- .../kubernetes/etcd-service-template.yaml | 7 + examples/local/101_initial_cluster.sh | 6 +- examples/local/401_teardown.sh | 6 +- examples/local/env.sh | 43 +- examples/local/vttablet-up.sh | 16 +- go/cmd/vtbackup/vtbackup.go | 76 +- go/cmd/vtbench/vtbench.go | 2 + go/cmd/vtgateclienttest/services/echo.go | 31 + .../v001__create_customer_table.sql | 7 + .../v002__add_customer_vschema.sql | 1 + .../data/schema/app_customer/vschema.json | 10 + .../test_keyspace/v001__create_test_table.sql | 12 + .../v002__create_hash_vindex.sql | 1 + .../test_keyspace/v003__add_table_vschema.sql | 1 + .../v004__create_test_table1.sql | 11 + go/cmd/vttestserver/main.go | 26 +- go/cmd/vttestserver/vttestserver_test.go | 68 + go/cmd/zk/zkcmd.go | 2 +- go/mysql/binlog_event_json.go | 26 +- go/mysql/binlog_event_json_test.go | 67 +- go/mysql/conn.go | 248 +- go/mysql/constants.go | 18 + go/mysql/fakesqldb/server.go | 12 + go/mysql/query.go | 827 ++- go/mysql/query_test.go | 175 + go/mysql/server.go | 9 + go/mysql/server_test.go | 9 + go/pools/resource_pool.go | 2 +- go/sqltypes/type.go | 1 + go/sqltypes/type_test.go | 4 +- go/vt/logutil/purge.go | 4 +- go/vt/mysqlctl/builtinbackupengine.go | 51 +- go/vt/mysqlctl/capabilityset.go | 79 + go/vt/mysqlctl/mysqld.go | 173 +- go/vt/mysqlctl/mysqld_test.go | 146 + go/vt/mysqlctl/version.go | 38 + go/vt/mysqlctl/xtrabackupengine.go | 574 +- go/vt/mysqlctl/xtrabackupengine_test.go | 101 + go/vt/proto/binlogdata/binlogdata.pb.go | 408 +- go/vt/proto/vtgate/vtgate.pb.go | 114 +- go/vt/sqlparser/parse_test.go | 3 + go/vt/sqlparser/sql.go | 5269 +++++++++-------- go/vt/sqlparser/sql.y | 24 +- go/vt/tableacl/acl/acl.go | 4 +- go/vt/topo/shard.go | 5 + go/vt/topo/srv_keyspace.go | 8 +- go/vt/topo/vschema.go | 24 + go/vt/topo/zk2topo/election.go | 2 +- go/vt/topo/zk2topo/error.go | 2 +- go/vt/topo/zk2topo/file.go | 2 +- go/vt/topo/zk2topo/lock.go | 2 +- go/vt/topo/zk2topo/utils.go | 2 +- go/vt/topo/zk2topo/zk_conn.go | 2 +- go/vt/vtctl/vtctl.go | 75 +- go/vt/vtgate/endtoend/aggr_test.go | 18 +- .../vtgate/endtoend/deletetest/delete_test.go | 191 + go/vt/vtgate/endtoend/main_test.go | 18 +- go/vt/vtgate/engine/delete.go | 13 + go/vt/vtgate/engine/fake_primitive_test.go | 8 + go/vt/vtgate/engine/insert.go | 13 + go/vt/vtgate/engine/join.go | 13 + go/vt/vtgate/engine/limit.go | 10 + go/vt/vtgate/engine/memory_sort.go | 30 +- go/vt/vtgate/engine/memory_sort_test.go | 88 + go/vt/vtgate/engine/ordered_aggregate.go | 15 + go/vt/vtgate/engine/primitive.go | 2 + go/vt/vtgate/engine/pullout_subquery.go | 10 + go/vt/vtgate/engine/route.go | 20 + go/vt/vtgate/engine/subquery.go | 10 + go/vt/vtgate/engine/update.go | 13 + go/vt/vtgate/engine/vindex_func.go | 10 + go/vt/vtgate/executor.go | 135 +- go/vt/vtgate/executor_dml_test.go | 78 + go/vt/vtgate/executor_framework_test.go | 9 + go/vt/vtgate/executor_select_test.go | 25 + go/vt/vtgate/executor_test.go | 32 +- go/vt/vtgate/planbuilder/builder.go | 141 +- go/vt/vtgate/planbuilder/expr.go | 2 +- go/vt/vtgate/planbuilder/from.go | 9 +- go/vt/vtgate/planbuilder/insert.go | 4 +- go/vt/vtgate/planbuilder/join.go | 47 +- go/vt/vtgate/planbuilder/limit.go | 52 +- go/vt/vtgate/planbuilder/memory_sort.go | 92 +- go/vt/vtgate/planbuilder/merge_sort.go | 81 +- go/vt/vtgate/planbuilder/ordered_aggregate.go | 94 +- go/vt/vtgate/planbuilder/pullout_subquery.go | 11 +- go/vt/vtgate/planbuilder/route.go | 91 +- go/vt/vtgate/planbuilder/select.go | 6 +- go/vt/vtgate/planbuilder/subquery.go | 55 +- go/vt/vtgate/planbuilder/symtab.go | 40 +- .../planbuilder/testdata/aggr_cases.txt | 250 +- .../planbuilder/testdata/filter_cases.txt | 180 +- .../planbuilder/testdata/from_cases.txt | 306 +- .../testdata/memory_sort_cases.txt | 381 +- .../testdata/postprocess_cases.txt | 170 +- .../planbuilder/testdata/schema_test.json | 26 + .../planbuilder/testdata/select_cases.txt | 196 +- .../planbuilder/testdata/symtab_cases.txt | 6 +- .../testdata/unsupported_cases.txt | 24 +- .../testdata/vindex_func_cases.txt | 34 +- .../planbuilder/testdata/wireup_cases.txt | 102 +- go/vt/vtgate/planbuilder/union.go | 2 +- go/vt/vtgate/planbuilder/vindex_func.go | 17 +- go/vt/vtgate/plugin_mysql_server.go | 122 + go/vt/vtgate/plugin_mysql_server_test.go | 9 + go/vt/vtgate/resolver.go | 8 + go/vt/vtgate/resolver_test.go | 59 + go/vt/vtgate/vtgate.go | 33 +- go/vt/vtqueryserver/plugin_mysql_server.go | 8 + .../vtqueryserver/plugin_mysql_server_test.go | 9 + .../vreplication/controller_plan.go | 62 +- .../vreplication/controller_plan_test.go | 45 +- .../tabletmanager/vreplication/engine.go | 64 +- .../tabletmanager/vreplication/engine_test.go | 5 + .../vreplication/framework_test.go | 30 +- .../vreplication/replicator_plan.go | 19 +- .../vreplication/replicator_plan_test.go | 52 +- .../vreplication/table_plan_builder.go | 42 +- .../tabletmanager/vreplication/vcopier.go | 8 +- .../vreplication/vcopier_test.go | 381 +- .../tabletmanager/vreplication/vplayer.go | 5 + .../vreplication/vplayer_test.go | 171 +- .../tabletmanager/vreplication/vreplicator.go | 17 +- .../vttablet/tabletserver/messager/engine.go | 2 +- .../txserializer/tx_serializer.go | 2 +- .../tabletserver/vstreamer/rowstreamer.go | 2 +- .../vstreamer/rowstreamer_test.go | 12 +- .../tabletserver/vstreamer/vstreamer.go | 13 +- .../tabletserver/vstreamer/vstreamer_test.go | 6 +- go/vt/vttest/local_cluster.go | 71 +- go/vt/vttest/vtprocess.go | 3 + go/vt/worker/row_differ.go | 2 +- go/vt/worker/split_clone_cmd.go | 2 +- go/vt/worker/vertical_split_clone_cmd.go | 2 +- go/vt/workflow/resharding/tasks.go | 8 + go/vt/workflow/resharding/workflow.go | 19 +- go/vt/workflow/resharding/workflow_test.go | 59 +- go/vt/wrangler/fake_dbclient_test.go | 120 + go/vt/wrangler/fake_tablet_test.go | 228 + go/vt/wrangler/migrater.go | 857 +++ go/vt/wrangler/migrater_env_test.go | 397 ++ go/vt/wrangler/migrater_test.go | 1039 ++++ go/vt/wrangler/shard.go | 6 +- .../testlib/migrate_served_from_test.go | 3 +- .../testlib/migrate_served_types_test.go | 26 +- go/vt/zkctl/zkctl.go | 2 +- helm/vitess/templates/_orchestrator-conf.tpl | 22 +- helm/vitess/values.yaml | 2 +- .../main/java/io/vitess/client/RpcClient.java | 14 + .../io/vitess/client/VTGateConnection.java | 22 + .../java/io/vitess/client/RpcClientTest.java | 55 + .../io/vitess/client/grpc/GrpcClient.java | 16 + proto/binlogdata.proto | 23 + py/vtproto/binlogdata_pb2.py | 201 +- test/backup.py | 4 +- test/config.json | 9 + test/keyspace_test.py | 17 + test/local_example.sh | 1 + test/prepared_statement_test.py | 301 + test/xtrabackup_xbstream.py | 1 + vagrant-scripts/bootstrap_vm.sh | 3 +- vagrant-scripts/vitess/build.sh | 5 +- vagrant-scripts/vitess/start.sh | 2 + vendor/vendor.json | 628 +- 248 files changed, 13840 insertions(+), 16716 deletions(-) delete mode 100644 .ruby-version create mode 100644 config/mycnf/master_mariadb100.cnf create mode 100644 config/mycnf/master_mariadb101.cnf create mode 100644 config/mycnf/master_mariadb102.cnf create mode 100644 config/mycnf/master_mysql57.cnf delete mode 100644 doc/AdvancedFeaturesIndex.md delete mode 100644 doc/BackupAndRestore.md delete mode 100644 doc/CodeReviews.md delete mode 100644 doc/Concepts.md delete mode 100644 doc/Contributing.md delete mode 100644 doc/FAQ.md delete mode 100644 doc/GettingStarted.md delete mode 100644 doc/GettingStartedKubernetes.md delete mode 100644 doc/GitHubWorkflow.md delete mode 100644 doc/HorizontalReshardingGuide.md delete mode 100644 doc/HorizontalReshardingWorkflowGuide.md delete mode 100644 doc/Messaging.md delete mode 100644 doc/Monitoring.md delete mode 100644 doc/MySQLServerProtocol.md delete mode 100644 doc/Production.md delete mode 100644 doc/ProductionPlanning.md delete mode 100644 doc/ReferenceTables.md delete mode 100644 doc/Reparenting.md delete mode 100644 doc/RowBasedReplication.md delete mode 100644 doc/ScalabilityPhilosophy.md delete mode 100644 doc/ScalingMySQL.md delete mode 100644 doc/SchemaManagement.md delete mode 100644 doc/SchemaSwap.md delete mode 100644 doc/ServerConfiguration.md delete mode 100644 doc/Sharding.md delete mode 100644 doc/ShardingKubernetes.md delete mode 100644 doc/ShardingKubernetesWorkflow.md delete mode 100644 doc/TestingOnARamDisk.md delete mode 100644 doc/TopologyService.md delete mode 100644 doc/Troubleshooting.md delete mode 100644 doc/TwoPhaseCommitGuide.md delete mode 100644 doc/UpdateStream.md delete mode 100644 doc/Upgrading.md delete mode 100644 doc/UserGuideIntroduction.md delete mode 100644 doc/VSchema.md delete mode 100644 doc/VTTabletModes.md delete mode 100644 doc/VTTabletModules.png delete mode 100644 doc/VitessApi.md delete mode 100644 doc/VitessComponents.png delete mode 100644 doc/VitessOverview.md delete mode 100644 doc/VitessOverview.png delete mode 100644 doc/VitessReplication.md delete mode 100644 doc/VitessSequences.md delete mode 100644 doc/VitessTransportSecurityModel.md delete mode 100644 doc/VtExplain.md delete mode 100644 doc/internal/PublishWebsite.md delete mode 100644 doc/slides/Percona2015.pptx delete mode 100644 doc/slides/Vitess2014.pdf delete mode 100644 doc/vtctlReference.md create mode 100644 docker/packaging/Dockerfile create mode 100755 docker/packaging/package_vitess.sh create mode 100755 docker/packaging/preinstall.sh create mode 100644 examples/compose/backups/.gitignore create mode 100644 examples/compose/fix_replication.sh create mode 100644 examples/compose/lfixrepl.sh create mode 100644 examples/compose/lmysql.sh create mode 100644 go/cmd/vttestserver/data/schema/app_customer/v001__create_customer_table.sql create mode 100644 go/cmd/vttestserver/data/schema/app_customer/v002__add_customer_vschema.sql create mode 100644 go/cmd/vttestserver/data/schema/app_customer/vschema.json create mode 100644 go/cmd/vttestserver/data/schema/test_keyspace/v001__create_test_table.sql create mode 100644 go/cmd/vttestserver/data/schema/test_keyspace/v002__create_hash_vindex.sql create mode 100644 go/cmd/vttestserver/data/schema/test_keyspace/v003__add_table_vschema.sql create mode 100644 go/cmd/vttestserver/data/schema/test_keyspace/v004__create_test_table1.sql create mode 100644 go/cmd/vttestserver/vttestserver_test.go create mode 100644 go/vt/mysqlctl/capabilityset.go create mode 100644 go/vt/mysqlctl/mysqld_test.go create mode 100644 go/vt/mysqlctl/version.go create mode 100644 go/vt/mysqlctl/xtrabackupengine_test.go create mode 100644 go/vt/vtgate/endtoend/deletetest/delete_test.go create mode 100644 go/vt/wrangler/fake_dbclient_test.go create mode 100644 go/vt/wrangler/fake_tablet_test.go create mode 100644 go/vt/wrangler/migrater.go create mode 100644 go/vt/wrangler/migrater_env_test.go create mode 100644 go/vt/wrangler/migrater_test.go create mode 100755 test/prepared_statement_test.py diff --git a/.dockerignore b/.dockerignore index f885d93a677..5b123fd0195 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,4 +4,4 @@ _test java/*/target java/*/bin php/vendor - +releases diff --git a/.ruby-version b/.ruby-version deleted file mode 100644 index 585940699b5..00000000000 --- a/.ruby-version +++ /dev/null @@ -1 +0,0 @@ -2.2.3 diff --git a/Makefile b/Makefile index f1676f9d6ba..f8ae541f167 100644 --- a/Makefile +++ b/Makefile @@ -29,6 +29,10 @@ ifdef VT_GO_PARALLEL_VALUE export VT_GO_PARALLEL := -p $(VT_GO_PARALLEL_VALUE) endif +ifdef VT_EXTRA_BUILD_FLAGS +export EXTRA_BUILD_FLAGS := $(VT_EXTRA_BUILD_FLAGS) +endif + # Link against the MySQL library in $VT_MYSQL_ROOT if it's specified. ifdef VT_MYSQL_ROOT # Clutter the env var only if it's a non-standard path. @@ -46,7 +50,7 @@ build: ifndef NOBANNER echo $$(date): Building source tree endif - go install $(VT_GO_PARALLEL) -ldflags "$(shell tools/build_version_flags.sh)" ./go/... + go install $(EXTRA_BUILD_FLAGS) $(VT_GO_PARALLEL) -ldflags "$(shell tools/build_version_flags.sh)" ./go/... parser: make -C go/vt/sqlparser @@ -276,3 +280,12 @@ release: docker_base echo "A git tag was created, you can push it with:" echo "git push origin v$(VERSION)" echo "Also, don't forget the upload releases/v$(VERSION).tar.gz file to GitHub releases" + +packages: docker_base + @if [ -z "$VERSION" ]; then \ + echo "Set the env var VERSION with the release version"; exit 1;\ + fi + mkdir -p releases + docker build -f docker/packaging/Dockerfile -t vitess/packaging . + docker run --rm -v ${PWD}/releases:/vt/releases --env VERSION=$(VERSION) vitess/packaging --package /vt/releases -t deb --deb-no-default-config-files + docker run --rm -v ${PWD}/releases:/vt/releases --env VERSION=$(VERSION) vitess/packaging --package /vt/releases -t rpm diff --git a/bootstrap.sh b/bootstrap.sh index 0476dc1e7eb..afdd724edde 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -24,6 +24,8 @@ # 4. Installation of development related steps e.g. creating Git hooks. BUILD_TESTS=${BUILD_TESTS:-1} +BUILD_PYTHON=${BUILD_PYTHON:-1} +BUILD_JAVA=${BUILD_JAVA:-1} # # 0. Initialization and helper methods. @@ -48,6 +50,12 @@ function fail() { go version &>/dev/null || fail "Go is not installed or is not on \$PATH" [[ "$(go version 2>&1)" =~ go1\.[1-9][1-9] ]] || fail "Go is not version 1.11+" +# Create main directories. +mkdir -p "$VTROOT/dist" +mkdir -p "$VTROOT/bin" +mkdir -p "$VTROOT/lib" +mkdir -p "$VTROOT/vthook" + # Set up the proper GOPATH for go get below. if [ "$BUILD_TESTS" == 1 ] ; then source ./dev.env @@ -55,12 +63,6 @@ else source ./build.env fi -# Create main directories. -mkdir -p "$VTROOT/dist" -mkdir -p "$VTROOT/bin" -mkdir -p "$VTROOT/lib" -mkdir -p "$VTROOT/vthook" - if [ "$BUILD_TESTS" == 1 ] ; then # Set up required soft links. # TODO(mberlin): Which of these can be deleted? @@ -144,12 +146,13 @@ function install_grpc() { PIP=$grpc_virtualenv/bin/pip $PIP install --upgrade pip $PIP install --upgrade --ignore-installed virtualenv + $PIP install mysql-connector-python grpcio_ver=$version $PIP install --upgrade grpcio=="$grpcio_ver" grpcio-tools=="$grpcio_ver" } -if [ "$BUILD_TESTS" == 1 ] ; then +if [ "$BUILD_PYTHON" == 1 ] ; then install_dep "gRPC" "1.16.0" "$VTROOT/dist/grpc" install_grpc fi @@ -186,9 +189,11 @@ function install_zookeeper() { zip -d "lib/$zk-fatjar.jar" 'META-INF/*.SF' 'META-INF/*.RSA' 'META-INF/*SF' || true # needed for >=3.4.10 <3.5 rm -rf "$zk" "$zk.tar.gz" } -zk_ver=${ZK_VERSION:-3.4.14} -install_dep "Zookeeper" "$zk_ver" "$VTROOT/dist/vt-zookeeper-$zk_ver" install_zookeeper +zk_ver=${ZK_VERSION:-3.4.14} +if [ "$BUILD_JAVA" == 1 ] ; then + install_dep "Zookeeper" "$zk_ver" "$VTROOT/dist/vt-zookeeper-$zk_ver" install_zookeeper +fi # Download and install etcd, link etcd binary into our root. function install_etcd() { @@ -252,7 +257,7 @@ function install_pymock() { popd >/dev/null } pymock_version=1.0.1 -if [ "$BUILD_TESTS" == 1 ] ; then +if [ "$BUILD_PYTHON" == 1 ] ; then install_dep "py-mock" "$pymock_version" "$VTROOT/dist/py-mock-$pymock_version" install_pymock fi @@ -267,7 +272,7 @@ function install_selenium() { # instead of go/dist/selenium/lib/python3.5/site-packages and then can't find module 'pip._vendor.requests' PYTHONPATH='' $PIP install selenium } -if [ "$BUILD_TESTS" == 1 ] ; then +if [ "$BUILD_PYTHON" == 1 ] ; then install_dep "Selenium" "latest" "$VTROOT/dist/selenium" install_selenium fi @@ -281,7 +286,7 @@ function install_chromedriver() { unzip -o -q chromedriver_linux64.zip -d "$dist" rm chromedriver_linux64.zip } -if [ "$BUILD_TESTS" == 1 ] ; then +if [ "$BUILD_PYTHON" == 1 ] ; then install_dep "chromedriver" "73.0.3683.20" "$VTROOT/dist/chromedriver" install_chromedriver fi @@ -360,6 +365,10 @@ if [ "$BUILD_TESTS" == 1 ] ; then echo "$MYSQL_FLAVOR" > "$VTROOT/dist/MYSQL_FLAVOR" fi +if [ "$BUILD_PYTHON" == 1 ] ; then + PYTHONPATH='' $PIP install mysql-connector-python +fi + # # 4. Installation of development related steps e.g. creating Git hooks. # diff --git a/config/mycnf/default-fast.cnf b/config/mycnf/default-fast.cnf index 0046bad32a2..bb7edf6720b 100644 --- a/config/mycnf/default-fast.cnf +++ b/config/mycnf/default-fast.cnf @@ -1,41 +1,27 @@ # basic config parameters for all db instances in the grid sql_mode = STRICT_TRANS_TABLES -back_log = 50 binlog_format = statement character_set_server = utf8 collation_server = utf8_general_ci connect_timeout = 30 datadir = {{.DataDir}} -default-storage-engine = innodb expire_logs_days = 3 -innodb_autoextend_increment = 1 innodb_buffer_pool_size = 64M -innodb_data_file_path = ibdata1:10M:autoextend innodb_data_home_dir = {{.InnodbDataHomeDir}} -innodb_file_per_table innodb_flush_log_at_trx_commit = 2 -innodb_flush_method = O_DIRECT innodb_lock_wait_timeout = 20 innodb_log_buffer_size = 1M innodb_log_file_size = 4M -innodb_log_files_in_group = 2 innodb_log_group_home_dir = {{.InnodbLogGroupHomeDir}} -innodb_max_dirty_pages_pct = 75 -innodb_thread_concurrency = 2 key_buffer_size = 2M log-error = {{.ErrorLogPath}} long_query_time = 2 -max_allowed_packet = 16M -max_connections = 200 -net_write_timeout = 60 pid-file = {{.PidFile}} port = {{.MysqlPort}} # all db instances should start in read-only mode - once the db is started and # fully functional, we'll push it into read-write mode read-only -read_buffer_size = 1M -read_rnd_buffer_size = 1M server-id = {{.ServerID}} skip-name-resolve # we now need networking for replication. this is a tombstone to simpler times. @@ -49,9 +35,4 @@ slave_load_tmpdir = {{.SlaveLoadTmpDir}} slow-query-log slow-query-log-file = {{.SlowLogPath}} socket = {{.SocketFile}} -sort_buffer_size = 2M -table_open_cache = 2048 -thread_cache_size = 200 tmpdir = {{.TmpDir}} -tmp_table_size = 32M -transaction-isolation = REPEATABLE-READ diff --git a/config/mycnf/default.cnf b/config/mycnf/default.cnf index cb6711d3fa7..61f767a8032 100644 --- a/config/mycnf/default.cnf +++ b/config/mycnf/default.cnf @@ -1,41 +1,26 @@ # basic config parameters for all db instances in the grid sql_mode = STRICT_TRANS_TABLES -back_log = 50 binlog_format = statement character_set_server = utf8 collation_server = utf8_general_ci connect_timeout = 30 datadir = {{.DataDir}} -default-storage-engine = innodb expire_logs_days = 3 -innodb_autoextend_increment = 64 innodb_buffer_pool_size = 32M -innodb_data_file_path = ibdata1:10M:autoextend innodb_data_home_dir = {{.InnodbDataHomeDir}} -innodb_file_per_table innodb_flush_log_at_trx_commit = 2 -innodb_flush_method = O_DIRECT innodb_lock_wait_timeout = 20 -innodb_log_buffer_size = 8M -innodb_log_file_size = 64M -innodb_log_files_in_group = 2 innodb_log_group_home_dir = {{.InnodbLogGroupHomeDir}} -innodb_max_dirty_pages_pct = 75 -innodb_thread_concurrency = 20 -key_buffer_size = 32M log-error = {{.ErrorLogPath}} long_query_time = 2 max_allowed_packet = 64M max_connections = 500 -net_write_timeout = 60 pid-file = {{.PidFile}} port = {{.MysqlPort}} # all db instances should start in read-only mode - once the db is started and # fully functional, we'll push it into read-write mode read-only -read_buffer_size = 8M -read_rnd_buffer_size = 8M server-id = {{.ServerID}} skip-name-resolve # all db instances should skip the slave startup - that way we can do any @@ -47,9 +32,4 @@ slave_load_tmpdir = {{.SlaveLoadTmpDir}} slow-query-log slow-query-log-file = {{.SlowLogPath}} socket = {{.SocketFile}} -sort_buffer_size = 2M -table_open_cache = 2048 -thread_cache_size = 200 tmpdir = {{.TmpDir}} -tmp_table_size = 32M -transaction-isolation = REPEATABLE-READ diff --git a/config/mycnf/master_mariadb.cnf b/config/mycnf/master_mariadb.cnf index 83f6f318e4c..1e41cd8f3ce 100644 --- a/config/mycnf/master_mariadb.cnf +++ b/config/mycnf/master_mariadb.cnf @@ -1,16 +1,8 @@ +# This file is auto-included when MariaDB (any version) is detected. + # enable strict mode so it's safe to compare sequence numbers across different server IDs. gtid_strict_mode = 1 innodb_stats_persistent = 0 -innodb_support_xa = 0 - -# Semi-sync replication is required for automated unplanned failover -# (when the master goes away). Here we just load the plugin so it's -# available if desired, but it's disabled at startup. -# -# If the -enable_semi_sync flag is used, VTTablet will enable semi-sync -# at the proper time when replication is set up, or when masters are -# promoted or demoted. -plugin-load = rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so # When semi-sync is enabled, don't allow fallback to async # if you get no ack, or have no slaves. This is necessary to diff --git a/config/mycnf/master_mariadb100.cnf b/config/mycnf/master_mariadb100.cnf new file mode 100644 index 00000000000..ce85c641c13 --- /dev/null +++ b/config/mycnf/master_mariadb100.cnf @@ -0,0 +1,12 @@ +# This file is auto-included when MariaDB 10.0 is detected. + +innodb_support_xa = 0 + +# Semi-sync replication is required for automated unplanned failover +# (when the master goes away). Here we just load the plugin so it's +# available if desired, but it's disabled at startup. +# +# If the -enable_semi_sync flag is used, VTTablet will enable semi-sync +# at the proper time when replication is set up, or when masters are +# promoted or demoted. +plugin-load = rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so diff --git a/config/mycnf/master_mariadb101.cnf b/config/mycnf/master_mariadb101.cnf new file mode 100644 index 00000000000..d613b155d68 --- /dev/null +++ b/config/mycnf/master_mariadb101.cnf @@ -0,0 +1,12 @@ +# This file is auto-included when MariaDB 10.1 is detected. + +innodb_support_xa = 0 + +# Semi-sync replication is required for automated unplanned failover +# (when the master goes away). Here we just load the plugin so it's +# available if desired, but it's disabled at startup. +# +# If the -enable_semi_sync flag is used, VTTablet will enable semi-sync +# at the proper time when replication is set up, or when masters are +# promoted or demoted. +plugin-load = rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so diff --git a/config/mycnf/master_mariadb102.cnf b/config/mycnf/master_mariadb102.cnf new file mode 100644 index 00000000000..487baa9bf87 --- /dev/null +++ b/config/mycnf/master_mariadb102.cnf @@ -0,0 +1,12 @@ +# This file is auto-included when MariaDB 10.2 is detected. + +innodb_support_xa = 0 + +# Semi-sync replication is required for automated unplanned failover +# (when the master goes away). Here we just load the plugin so it's +# available if desired, but it's disabled at startup. +# +# If the -enable_semi_sync flag is used, VTTablet will enable semi-sync +# at the proper time when replication is set up, or when masters are +# promoted or demoted. +plugin-load = rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so diff --git a/config/mycnf/master_mariadb103.cnf b/config/mycnf/master_mariadb103.cnf index a4dfb50ab18..ac8b38404fd 100644 --- a/config/mycnf/master_mariadb103.cnf +++ b/config/mycnf/master_mariadb103.cnf @@ -1,3 +1,5 @@ +# This file is auto-included when MariaDB 10.3 is detected. + # enable strict mode so it's safe to compare sequence numbers across different server IDs. gtid_strict_mode = 1 innodb_stats_persistent = 0 diff --git a/config/mycnf/master_mysql56.cnf b/config/mycnf/master_mysql56.cnf index 2c802b2332a..dcb8a4e113f 100644 --- a/config/mycnf/master_mysql56.cnf +++ b/config/mycnf/master_mysql56.cnf @@ -1,3 +1,5 @@ +# This file is auto-included when MySQL 5.6 is detected. + # Options for enabling GTID # https://dev.mysql.com/doc/refman/5.6/en/replication-gtids-howto.html gtid_mode = ON diff --git a/config/mycnf/master_mysql57.cnf b/config/mycnf/master_mysql57.cnf new file mode 100644 index 00000000000..381b05ac14c --- /dev/null +++ b/config/mycnf/master_mysql57.cnf @@ -0,0 +1,32 @@ +# This file is auto-included when MySQL 5.7 is detected. + +# Options for enabling GTID +# https://dev.mysql.com/doc/refman/5.6/en/replication-gtids-howto.html +gtid_mode = ON +log_bin +log_slave_updates +enforce_gtid_consistency +innodb_use_native_aio = 0 + +# Crash-safe replication settings. +master_info_repository = TABLE +relay_log_info_repository = TABLE +relay_log_purge = 1 +relay_log_recovery = 1 + +# Semi-sync replication is required for automated unplanned failover +# (when the master goes away). Here we just load the plugin so it's +# available if desired, but it's disabled at startup. +# +# If the -enable_semi_sync flag is used, VTTablet will enable semi-sync +# at the proper time when replication is set up, or when masters are +# promoted or demoted. +plugin-load = rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so + +# When semi-sync is enabled, don't allow fallback to async +# if you get no ack, or have no slaves. This is necessary to +# prevent alternate futures when doing a failover in response to +# a master that becomes unresponsive. +rpl_semi_sync_master_timeout = 1000000000000000000 +rpl_semi_sync_master_wait_no_slave = 1 + diff --git a/config/mycnf/master_mysql80.cnf b/config/mycnf/master_mysql80.cnf index f81761ad906..e92b794ef9b 100644 --- a/config/mycnf/master_mysql80.cnf +++ b/config/mycnf/master_mysql80.cnf @@ -1,3 +1,5 @@ +# This file is auto-included when MySQL 8.0 is detected. + # Options for enabling GTID # https://dev.mysql.com/doc/refman/5.6/en/replication-gtids-howto.html gtid_mode = ON diff --git a/dev.env b/dev.env index e31c16167e2..ca7bc608721 100644 --- a/dev.env +++ b/dev.env @@ -95,16 +95,6 @@ if [[ "$VT_MYSQL_ROOT" == "" ]]; then fi fi -# restore MYSQL_FLAVOR, saved by bootstrap.sh -if [ -r "$VTROOT/dist/MYSQL_FLAVOR" ]; then - MYSQL_FLAVOR=$(cat "$VTROOT/dist/MYSQL_FLAVOR") - export MYSQL_FLAVOR -fi - -# mysql cgo library config -if [ -z "$MYSQL_FLAVOR" ]; then - export MYSQL_FLAVOR=MariaDB -fi PKG_CONFIG_PATH=$(prepend_path "$PKG_CONFIG_PATH" "$VTROOT/lib") export PKG_CONFIG_PATH diff --git a/doc/AdvancedFeaturesIndex.md b/doc/AdvancedFeaturesIndex.md deleted file mode 100644 index c2fe3a753d2..00000000000 --- a/doc/AdvancedFeaturesIndex.md +++ /dev/null @@ -1,12 +0,0 @@ -# Advanced Features - -The pages below this navigation entry `Advanced Features` can be understood as an addition to the `User Guide`. Here we describe advanced Vitess features which you may want to enable or tune in a production setup. - -As of October 2017, many of these features are not documented yet. We plan to add pages for them later. - -Examples for undocumented features: - -* hot row protection in vttablet -* vtgate buffer for lossless failovers -* vttablet consolidator (avoids duplicated read queries to MySQL, turned on by default) -* [vtexplain](https://github.com/vitessio/vitess/blob/master/doc/VtExplain.md) diff --git a/doc/BackupAndRestore.md b/doc/BackupAndRestore.md deleted file mode 100644 index 00f700e3111..00000000000 --- a/doc/BackupAndRestore.md +++ /dev/null @@ -1,250 +0,0 @@ -This document explains how to create and restore data backups with -Vitess. Vitess uses backups for two purposes: - -* Provide a point-in-time backup of the data on a tablet. -* Bootstrap new tablets in an existing shard. - -## Prerequisites - -Vitess stores data backups on a Backup Storage service, which is -a -[pluggable interface](https://github.com/vitessio/vitess/blob/master/go/vt/mysqlctl/backupstorage/interface.go). - -Currently, we have plugins for: - -* A network-mounted path (e.g. NFS) -* Google Cloud Storage -* Amazon S3 -* Ceph - -Before you can back up or restore a tablet, you need to ensure that the -tablet is aware of the Backup Storage system that you are using. To do so, -use the following command-line flags when starting a vttablet that has -access to the location where you are storing backups. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Flags
backup_storage_implementationSpecifies the implementation of the Backup Storage interface to - use.

- Current plugin options available are: -
    -
  • file: NFS or any other filesystem-mounted network - drive.
  • -
  • gcs: Google Cloud Storage.
  • -
  • s3: Amazon S3.
  • -
  • ceph: Ceph Object Gateway S3 API.
  • -
-
backup_storage_hookIf set, the contents of every file to backup is sent to a hook. The - hook receives the data for each file on stdin. It should echo the - transformed data to stdout. Anything the hook prints to stderr will - be printed in the vttablet logs.
- Hooks should be located in the vthook subdirectory of the - VTROOT directory.
- The hook receives a -operation write or a - -operation read parameter depending on the direction - of the data processing. For instance, write would be for - encryption, and read would be for decryption.
-
backup_storage_compressThis flag controls if the backups are compressed by the Vitess code. - By default it is set to true. Use - -backup_storage_compress=false to disable.
- This is meant to be used with a -backup_storage_hook - hook that already compresses the data, to avoid compressing the data - twice. -
file_backup_storage_rootFor the file plugin, this identifies the root directory - for backups. -
gcs_backup_storage_bucketFor the gcs plugin, this identifies the - bucket - to use.
s3_backup_aws_regionFor the s3 plugin, this identifies the AWS region.
s3_backup_storage_bucketFor the s3 plugin, this identifies the AWS S3 - bucket.
ceph_backup_storage_configFor the ceph plugin, this identifies the path to a text - file with a JSON object as configuration. The JSON object requires the - following keys: accessKey, secretKey, - endPoint and useSSL. Bucket name is computed - from keyspace name and shard name and is separate for different - keyspaces / shards.
restore_from_backupIndicates that, when started with an empty MySQL instance, the - tablet should restore the most recent backup from the specified - storage plugin.
- -### Authentication - -Note that for the Google Cloud Storage plugin, we currently only -support -[Application Default Credentials](https://developers.google.com/identity/protocols/application-default-credentials). -It means that access to Cloud Storage is automatically granted by virtue of -the fact that you're already running within Google Compute Engine or Container -Engine. - -For this to work, the GCE instances must have been created with -the [scope](https://cloud.google.com/compute/docs/authentication#using) that -grants read-write access to Cloud Storage. When using Container Engine, you can -do this for all the instances it creates by adding `--scopes storage-rw` to the -`gcloud container clusters create` command as shown in the [Vitess on Kubernetes -guide]({% link getting-started/index.md %}#start-a-container-engine-cluster). - -## Creating a backup - -Run the following vtctl command to create a backup: - -``` sh -vtctl Backup -``` - -In response to this command, the designated tablet performs the following -sequence of actions: - -1. Switches its type to `BACKUP`. After this step, the tablet is no - longer used by vtgate to serve any query. - -1. Stops replication, get the current replication position (to be saved in the - backup along with the data). - -1. Shuts down its mysqld process. - -1. Copies the necessary files to the Backup Storage implementation that was - specified when the tablet was started. Note if this fails, we still keep - going, so the tablet is not left in an unstable state because of a storage - failure. - -1. Restarts mysqld. - -1. Restarts replication (with the right semi-sync flags corresponding to its - original type, if applicable). - -1. Switches its type back to its original type. After this, it will most likely - be behind on replication, and not used by vtgate for serving until it catches - up. - -## Restoring a backup - -When a tablet starts, Vitess checks the value of the -`-restore_from_backup` command-line flag to determine whether -to restore a backup to that tablet. - -* If the flag is present, Vitess tries to restore the most recent backup from - the Backup Storage system when starting the tablet. -* If the flag is absent, Vitess does not try to restore a backup to the - tablet. This is the equivalent of starting a new tablet in a new shard. - -As noted in the [Prerequisites](#prerequisites) section, the flag is -generally enabled all of the time for all of the tablets in a shard. -By default, if Vitess cannot find a backup in the Backup Storage system, -the tablet will start up empty. This behavior allows you to bootstrap a new -shard before any backups exist. - -If the `-wait_for_backup_interval` flag is set to a value greater than zero, -the tablet will instead keep checking for a backup to appear at that interval. -This can be used to ensure tablets launched concurrently while an initial backup -is being seeded for the shard (e.g. uploaded from cold storage or created by -another tablet) will wait until the proper time and then pull the new backup -when it's ready. - -``` sh -vttablet ... -backup_storage_implementation=file \ - -file_backup_storage_root=/nfs/XXX \ - -restore_from_backup -``` - -## Managing backups - -**vtctl** provides two commands for managing backups: - -* [ListBackups]({% link reference/vtctl.md %}#listbackups) displays the - existing backups for a keyspace/shard in chronological order. - - ``` sh - vtctl ListBackups - ``` - -* [RemoveBackup]({% link reference/vtctl.md %}#removebackup) deletes a - specified backup for a keyspace/shard. - - ``` sh - RemoveBackup - ``` - -## Bootstrapping a new tablet - -Bootstrapping a new tablet is almost identical to restoring an existing tablet. -The only thing you need to be cautious about is that the tablet specifies its -keyspace, shard and tablet type when it registers itself at the topology. -Specifically, make sure that the following vttablet parameters are set: - -``` sh - -init_keyspace - -init_shard - -init_tablet_type replica|rdonly -``` - -The bootstrapped tablet will restore the data from the backup and then apply -changes, which occurred after the backup, by restarting replication. - - -## Backup Frequency - -We recommend to take backups regularly e.g. you should set up a cron -job for it. - -To determine the proper frequency for creating backups, consider -the amount of time that you keep replication logs and allow enough -time to investigate and fix problems in the event that a backup -operation fails. - -For example, suppose you typically keep four days of replication logs -and you create daily backups. In that case, even if a backup fails, -you have at least a couple of days from the time of the failure to -investigate and fix the problem. - -## Concurrency - -The back-up and restore processes simultaneously copy and either -compress or decompress multiple files to increase throughput. You -can control the concurrency using command-line flags: - -* The vtctl [Backup]({% link reference/vtctl.md %}#backup) command uses the - `-concurrency` flag. -* vttablet uses the `-restore_concurrency` flag. - -If the network link is fast enough, the concurrency matches the CPU -usage of the process during the backup or restore process. - diff --git a/doc/CodeReviews.md b/doc/CodeReviews.md deleted file mode 100644 index 61e13385320..00000000000 --- a/doc/CodeReviews.md +++ /dev/null @@ -1,72 +0,0 @@ -# Code Reviews - -Every GitHub pull request must go through a code review and get approved before it will be merged into the master branch. - -## What to look for in a Review - -Both authors and reviewers need to answer these general questions: - -* Does this change match an existing design / bug? -* Is there proper unit test coverage for this change? All changes should - increase coverage. We need at least integration test coverage when unit test - coverage is not possible. -* Is this change going to log too much? (Error logs should only happen when - the component is in bad shape, not because of bad transient state or bad - user queries) -* Does this change match our coding conventions / style? Linter was run and is - happy? -* Does this match our current patterns? Example include RPC patterns, - Retries / Waits / Timeouts patterns using Context, ... - -Additionally, we recommend every author to look over your own reviews just before committing them and check if you are following the recommendations below. -We usually check these kinds of things while skimming through `git diff --cached` just before committing. - -* Scan the diffs as if you're the reviewer. - * Look for files that shouldn't be checked in (temporary/generated files). - * Googlers only: Remove Google confidential info (e.g. internal URLs). - * Look for temporary code/comments you added while debugging. - * Example: fmt.Println(`AAAAAAAAAAAAAAAAAA`) - * Look for inconsistencies in indentation. - * Use 2 spaces in everything except Go. - * In Go, just use goimports. -* Commit message format: - * ``` - : This is a short description of the change. - - If necessary, more sentences follow e.g. to explain the intent of the change, how it fits into the bigger picture or which implications it has (e.g. other parts in the system have to be adapted.) - - Sometimes this message can also contain more material for reference e.g. benchmark numbers to justify why the change was implemented in this way. - ``` -* Comments - * `// Prefer complete sentences when possible.` - * Leave a space after the comment marker `//`. - -During the review make sure you address all comments. Click Done (reviewable.io) or reply with "Done." (GitHub Review) to mark comments as addressed. There should be 0 unresolved discussions when it's ready to merge. - -## Assigning a Pull Request - -If you want to address your review to a particular set of teammates, add them as Assignee (righthand side on the pull request). -They'll receive an email. - -During discussions, you can also refer to somebody using the *@username* syntax and they'll receive an email as well. - -If you want to receive notifications even when you aren't mentioned, you can go to the [repository page](https://github.com/vitessio/vitess) and click *Watch*. - -## Approving a Pull Request - -As a reviewer you can approve a pull request through two ways: - -* Approve the pull request via GitHub's new code review system -* reply with a comment that contains the word *LGTM* (Looks Good To Me) - -## Merging a Pull Request - -Pull requests can be merged after they were approved and the Travis tests have passed. -External contributions will be merged by a team member. -Internal team members can merge their **own** pull requests. - -## Internal Bug Numbers - -Most of the bugs the team is working on are tracked internally. -We reference to them as `b/########` or `BUG=########` in commit messages and comments. -External users can ignore these. diff --git a/doc/Concepts.md b/doc/Concepts.md deleted file mode 100644 index acb87277522..00000000000 --- a/doc/Concepts.md +++ /dev/null @@ -1,221 +0,0 @@ -This document defines common Vitess concepts and terminology. - -## Keyspace - -A *keyspace* is a logical database. In the unsharded case, it maps directly -to a MySQL database name. If [sharded](https://en.wikipedia.org/wiki/Shard_(database_architecture)), -a keyspace maps to multiple MySQL databases. However, it appears as a single -database to the application. - -Reading data from a keyspace is like reading from a MySQL database. However, -depending on the consistency requirements of the read operation, Vitess -might fetch the data from a master database or from a replica. By routing -each query to the appropriate database, Vitess allows your code to be -structured as if it were reading from a single MySQL database. - - -## Keyspace ID - -The *keyspace ID* is the value that is used to decide on which shard a given -row lives. [Range-based Sharding]({% link user-guide/sharding.md %}#range-based-sharding) -refers to creating shards that each cover a particular range of keyspace IDs. - -Using this technique means you can split a given shard by replacing it with two -or more new shards that combine to cover the original range of keyspace IDs, -without having to move any records in other shards. - -The keyspace ID itself is computed using a function of some column in your data, -such as the user ID. Vitess allows you to choose from a variety of functions -([vindexes]({% link user-guide/vschema.md %}#vindex)) -to perform this mapping. This allows you to choose the right one to achieve optimal -distribution of the data across shards. - -## VSchema - -A [VSchema]({% link user-guide/vschema.md %}) allows you to describe how data is organized -within keyspaces and shards. This information is used for routing queries, and also during -resharding operations. - -For a Keyspace, you can specify if it's sharded or not. For sharded keyspaces, you can specify -the list of vindexes for each table. - -Vitess also supports [sequence generators]({% link user-guide/vschema.md %}#sequences) -that can be used to generate new ids that work like MySQL auto increment columns. -The VSchema allows you to associate table columns to sequence tables. -If no value is specified for such a column, then VTGate will know to use -the sequence table to generate a new value for it. - - -## Shard - -A *shard* is a division within a keyspace. A shard typically contains one MySQL -master and many MySQL slaves. - -Each MySQL instance within a shard has the same data (excepting some replication -lag). The slaves can serve read-only traffic (with eventual consistency guarantees), -execute long-running data analysis tools, or perform administrative tasks -(backup, restore, diff, etc.). - -An unsharded keyspace has effectively one shard. -Vitess names the shard `0` by convention. When sharded, a keyspace has `N` -shards with non-overlapping data. - -### Resharding - -Vitess supports [dynamic resharding]({% link user-guide/sharding.md %}#resharding), -in which the number of shards is changed on a live cluster. This can be either -splitting one or more shards into smaller pieces, or merging neighboring shards -into bigger pieces. - -During dynamic resharding, the data in the source shards is copied into the -destination shards, allowed to catch up on replication, and then compared -against the original to ensure data integrity. Then the live serving -infrastructure is shifted to the destination shards, and the source shards are -deleted. - -## Tablet - -A *tablet* is a combination of a `mysqld` process and a corresponding `vttablet` -process, usually running on the same machine. - -Each tablet is assigned a *tablet type*, which specifies what role it currently -performs. - -### Tablet Types - -* **master** - A *replica* tablet that happens to currently be the MySQL master - for its shard. -* **replica** - A MySQL slave that is eligible to be promoted to *master*. - Conventionally, these are reserved for serving live, user-facing - requests (like from the website's frontend). -* **rdonly** - A MySQL slave that cannot be promoted to *master*. - Conventionally, these are used for background processing jobs, - such as taking backups, dumping data to other systems, heavy - analytical queries, MapReduce, and resharding. -* **backup** - A tablet that has stopped replication at a consistent snapshot, - so it can upload a new backup for its shard. After it finishes, - it will resume replication and return to its previous type. -* **restore** - A tablet that has started up with no data, and is in the process - of restoring itself from the latest backup. After it finishes, - it will begin replicating at the GTID position of the backup, - and become either *replica* or *rdonly*. -* **drained** - A tablet that has been reserved by a Vitess background - process (such as rdonly tablets for resharding). - - - -## Keyspace Graph - -The *keyspace graph* allows Vitess to decide which set of shards to use for a -given keyspace, cell, and tablet type. - -### Partitions - -During horizontal resharding (splitting or merging shards), there can be shards -with overlapping key ranges. For example, the source shard of a split may serve -`c0-d0` while its destination shards serve `c0-c8` and `c8-d0` respectively. - -Since these shards need to exist simultaneously during the migration, -the keyspace graph maintains a list (called a *partitioning* or just a *partition*) -of shards whose ranges cover all possible keyspace ID values, while being -non-overlapping and contiguous. Shards can be moved in and out of this list to -determine whether they are active. - -The keyspace graph stores a separate partitioning for each `(cell, tablet type)` pair. -This allows migrations to proceed in phases: first migrate *rdonly* and -*replica* requests, one cell at a time, and finally migrate *master* requests. - -### Served From - -During vertical resharding (moving tables out from one keyspace to form a new -keyspace), there can be multiple keyspaces that contain the same table. - -Since these multiple copies of the table need to exist simultaneously during -the migration, the keyspace graph supports keyspace redirects, called -`ServedFrom` records. That enables a migration flow like this: - -1. Create `new_keyspace` and set its `ServedFrom` to point to `old_keyspace`. -1. Update the app to look for the tables to be moved in `new_keyspace`. - Vitess will automatically redirect these requests to `old_keyspace`. -1. Perform a vertical split clone to copy data to the new keyspace and start - filtered replication. -1. Remove the `ServedFrom` redirect to begin actually serving from `new_keyspace`. -1. Drop the now unused copies of the tables from `old_keyspace`. - -There can be a different `ServedFrom` record for each `(cell, tablet type)` pair. -This allows migrations to proceed in phases: first migrate *rdonly* and -*replica* requests, one cell at a time, and finally migrate *master* requests. - -## Replication Graph - -The *replication graph* identifies the relationships between master -databases and their respective replicas. During a master failover, -the replication graph enables Vitess to point all existing replicas -to a newly designated master database so that replication can continue. - -## Topology Service - -The *[Topology Service]({% link user-guide/topology-service.md %})* -is a set of backend processes running on different servers. -Those servers store topology data and provide a distributed locking service. - -Vitess uses a plug-in system to support various backends for storing topology -data, which are assumed to provide a distributed, consistent key-value store. -By default, our [local example]({% link getting-started/local-instance.md %}) -uses the ZooKeeper plugin, and the [Kubernetes example]({% link getting-started/index.md %}) -uses etcd. - -The topology service exists for several reasons: - -* It enables tablets to coordinate among themselves as a cluster. -* It enables Vitess to discover tablets, so it knows where to route queries. -* It stores Vitess configuration provided by the database administrator that is - needed by many different servers in the cluster, and that must persist between - server restarts. - -A Vitess cluster has one global topology service, and a local topology service -in each cell. Since *cluster* is an overloaded term, and one Vitess cluster is -distinguished from another by the fact that each has its own global topology -service, we refer to each Vitess cluster as a **toposphere**. - -### Global Topology - -The global topology stores Vitess-wide data that does not change frequently. -Specifically, it contains data about keyspaces and shards as well as the -master tablet alias for each shard. - -The global topology is used for some operations, including reparenting and -resharding. By design, the global topology server is not used a lot. - -In order to survive any single cell going down, the global topology service -should have nodes in multiple cells, with enough to maintain quorum in the -event of a cell failure. - -### Local Topology - -Each local topology contains information related to its own cell. -Specifically, it contains data about tablets in the cell, the keyspace graph -for that cell, and the replication graph for that cell. - -The local topology service must be available for Vitess to discover tablets -and adjust routing as tablets come and go. However, no calls to the topology -service are made in the critical path of serving a query at steady state. -That means queries are still served during temporary unavailability of topology. - -## Cell (Data Center) - -A *cell* is a group of servers and network infrastructure collocated in an area, -and isolated from failures in other cells. It is typically either a full data -center or a subset of a data center, sometimes called a *zone* or *availability zone*. -Vitess gracefully handles cell-level failures, such as when a cell is cut off the network. - -Each cell in a Vitess implementation has a [local topology service](#topology-service), -which is hosted in that cell. The topology service contains most of the -information about the Vitess tablets in its cell. -This enables a cell to be taken down and rebuilt as a unit. - -Vitess limits cross-cell traffic for both data and metadata. -While it may be useful to also have the ability to route read traffic to -individual cells, Vitess currently serves reads only from the local cell. -Writes will go cross-cell when necessary, to wherever the master for that shard -resides. diff --git a/doc/Contributing.md b/doc/Contributing.md deleted file mode 100644 index 70bf486e408..00000000000 --- a/doc/Contributing.md +++ /dev/null @@ -1,53 +0,0 @@ -# Contributing to Vitess - -You want to contribute to Vitess? That's awesome! - -We're looking forward to any contribution! Before you start larger contributions, make sure to reach out first and discuss your plans with us. - -This page describes for new contributors how to make yourself familiar with Vitess and the programming language Go. - -## Learning Go - -Vitess was one of the early adaptors of [Google's programming language Go](https://golang.org/). - -We love it for its simplicity (e.g. compared to C++ or Java) and performance (e.g. compared to Python). - -Contributing to our server code will require you to learn Go. We recommend to read the following resources. - -### Go Tour - -https://tour.golang.org/ - -The Go tour is a browser based tutorial which explains the different concepts of the programming language. -It's interactive i.e. you can change and run all examples on the right side. -The later steps also have specific exercises which you're supposed to implement yourself. -It's a lot of fun and demonstrates how simple it is to write Go code. - -### Go Readability - -While there's no Go style guide, there is a set of recommendations in the Go community which add up to an implicit style guide. -To make sure you're writing idiomatic Go code, please read the following documents: - -* Go Readability slides: https://talks.golang.org/2014/readability.slide - * Talk about Go readability with many specific examples. -* `Effective Go`: https://golang.org/doc/effective_go.html - * Recommendations for writing good Go code. -* Go Code Review Comments: https://github.com/golang/go/wiki/CodeReviewComments - * The closest thing to a style guide. - -### Other Resources - -If you're unsure about Go's behavior or syntax, we recommend to look it up in the specification: https://golang.org/ref/spec -It is well written and easy to understand. - -### Appreciating Go - -After using Go for several weeks, we hope that you'll start to love Go as much as we do. - -In our opinion, the song "Write in Go" from ScaleAbility, a Google acapella band, perfectly captures what's so special about Go. Watch it and enjoy that you learnt Go: www.youtube.com/watch?v=LJvEIjRBSDA - -## Learning Vitess - -Vitess is a complex distributed system. There are a few design docs in the `/doc` section. The best way to ramp up on vitess is by starting to use it. -Then, you can dive into the code to see how the various parts work. For questions, the best place to get them answered is by asking on the slack channel. -You can sign up to the channel by clicking on the top right link at vitess.io. diff --git a/doc/FAQ.md b/doc/FAQ.md deleted file mode 100644 index d34acbc4b0a..00000000000 --- a/doc/FAQ.md +++ /dev/null @@ -1,77 +0,0 @@ -## Does the application need to know about the sharding scheme underneath Vitess? - -The application does not need to know about how the data is sharded. This information is stored in a VSchema which the VTGates use to automatically route your queries. This allows the application to connect to vitess and use it as if it’s a single giant database server. - -## Can I address a specific shard if I want to? - -If necessary, you can access a specific shard by connecting to it using the shard specific database name. For a keyspace `ks` and shard `-80`, you would connect to `ks:-80`. - -## How do I choose between master vs. replica for queries? - -You can qualify the keyspace name with the desired tablet type using the `@` suffix. This can be specified as part of the connection as the database name, or can be changed on the fly through the `USE` command. - -For example, `ks@master` will select `ks` as the default keyspace with all queries being sent to the master. Consequently `ks@replica` will load balance requests across all `REPLICA` tablet types, and `ks@rdonly` will choose `RDONLY`. - -You can also specify the database name as `@master`, etc, which instructs vitess that no default keyspace was specified, but that the requests are for the specified tablet type. - -If no tablet type was specified, then VTGate chooses its default, which can be overridden with the `-default_tablet_type` command line argument. - -## There seems to be a 10,000 row limit per query. What if I want to do a full table scan? - -Vitess supports different modes. In OLTP mode, the result size is typically limited to a preset number (10,000 rows by default). This limit can be adjusted based on your needs. - -However, OLAP mode has no limit to the number of rows returned. In order to change to this mode, you may issue the following command before executing your query: - -``` -set workload='olap' -``` - -You can also set the workload to `dba` mode, which allows you to override the implicit timeouts that exist in vttablet. However, this mode should be used judiciously as it supersedes shutdown and reparent commands. - -The general convention is to send OLTP queries to `REPLICA` tablet types, and OLAP queries to `RDONLY`. - -## Is there a list of supported/unsupported queries? - -The list of unsupported constructs is currently in the form of test cases contained in this [test file](https://github.com/vitessio/vitess/blob/master/go/vt/vtgate/planbuilder/testdata/unsupported_cases.txt). However, contrary to the test cases, there is limited support for SET, DDL and DBA constructs. This will be documented soon. - - -## If I have a log of all queries from my app. Is there a way I can try them against vitess to see how they’ll work? - -Yes. The [vtexplain tool]({% link user-guide/vtexplain.md %}) can be used to preview how your queries will be executed by vitess. It can also be used to try different sharding scenarios before deciding on one. - -## Does the Primary Vindex for a tablet have to be the same as its Primary Key. - -It is not necessary that a Primary Vindex be the same as the Primary Key. In fact, there are many use cases where you would not want this. For example, if there are tables with one-to-many relationships, the Primary Vindex of the main table is likely to be the same as the Primary Key. However, if you want the rows of the secondary table to reside in the same shard as the parent row, the Primary Vindex for that table must be the foreign key that points to the main table. A typical example is a `user` and `order` table. In this case, the order table has the `user_id` as a foreign key to the `id` of the `user` table. The `order_id` may be the primary key for `order`, but you may still want to choose `user_id` as Primary Vindex, which will make a user's orders live in the same shard as the user. - -## How do I connect to vtgate using mysql protocol? - -If you look at the example [vtgate-up.sh script](https://github.com/vitessio/vitess/blob/master/examples/local/vtgate-up.sh), you'll see the following lines: - - -``` - -mysql_server_port $mysql_server_port \ - -mysql_server_socket_path $mysql_server_socket_path \ - -mysql_auth_server_static_file "./mysql_auth_server_static_creds.json" \ -``` - -In that example, vtgate accepts mysql connections on port 15306, and the authentication info is stored in the json file. So, you should be able to connect to it using the following command: - -``` -mysql -h 127.0.0.1 -P 15306 -u mysql_user --password=mysql_password -``` - -## Can I override the default db name from `vt_xxx` to my own? - -Yes. You can start vttablet with the `-init_db_name_override` command line option to specify a different db name. There is no downside to performing this override. - -## I cannot start a cluster, and see these errors in the logs: Could not open required defaults file: /path/to/my.cnf - -Most likely this means that apparmor is running on your server and is preventing vitess processes from accessing the my.cnf file. The workaround is to uninstall apparmor: - -``` -sudo service apparmor stop -sudo service apparmor teardown -sudo update-rc.d -f apparmor remove -``` - -You may also need to reboot the machine after this. Many programs automatically install apparmor, so you may need to uninstall again. diff --git a/doc/GettingStarted.md b/doc/GettingStarted.md deleted file mode 100644 index f8e42628b5e..00000000000 --- a/doc/GettingStarted.md +++ /dev/null @@ -1,673 +0,0 @@ -You can build Vitess using either [Docker](#docker-build) or a -[manual](#manual-build) build process. - -If you run into issues or have questions, please post on our -[forum](https://groups.google.com/forum/#!forum/vitess). - -## Docker Build - -To run Vitess in Docker, you can either use our pre-built images on [Docker Hub](https://hub.docker.com/u/vitess/), or build them yourself. - -### Docker Hub Images - -* The [vitess/base](https://hub.docker.com/r/vitess/base/) image contains a full - development environment, capable of building Vitess and running integration tests. - -* The [vitess/lite](https://hub.docker.com/r/vitess/lite/) image contains only - the compiled Vitess binaries, excluding ZooKeeper. It can run Vitess, but - lacks the environment needed to build Vitess or run tests. It's primarily used - for the [Vitess on Kubernetes]({% link getting-started/index.md %}) guide. - -For example, you can directly run `vitess/base`, and Docker will download the -image for you: - -``` sh -$ sudo docker run -ti vitess/base bash -vitess@32f187ef9351:/vt/src/vitess.io/vitess$ make build -``` - -Now you can proceed to [start a Vitess cluster](#start-a-vitess-cluster) inside -the Docker container you just started. Note that if you want to access the -servers from outside the container, you'll need to expose the ports as described -in the [Docker Engine Reference Guide](https://docs.docker.com/engine/reference/run/#/expose-incoming-ports). - -For local testing, you can also access the servers on the local IP address -created for the container by Docker: - -``` sh -$ docker inspect 32f187ef9351 | grep IPAddress -### example output: -# "IPAddress": "172.17.3.1", -``` - -### Custom Docker Image - -You can also build Vitess Docker images yourself to include your -own patches or configuration data. The -[Dockerfile](https://github.com/vitessio/vitess/blob/master/Dockerfile) -in the root of the Vitess tree builds the `vitess/base` image. -The [docker](https://github.com/vitessio/vitess/tree/master/docker) -subdirectory contains scripts for building other images, such as `vitess/lite`. - -Our `Makefile` also contains rules to build the images. For example: - -``` sh -# Create vitess/bootstrap, which prepares everything up to ./bootstrap.sh -vitess$ make docker_bootstrap -# Create vitess/base from vitess/bootstrap by copying in your local working directory. -vitess$ make docker_base -``` - -## Manual Build - -The following sections explain the process for manually building -Vitess without Docker. - -### Install Dependencies - -We currently test Vitess regularly on Ubuntu 14.04 (Trusty) and Debian 8 (Jessie). -OS X 10.11 (El Capitan) should work as well, the installation instructions are below. - -#### Ubuntu and Debian - -In addition, Vitess requires the software and libraries listed below. - -1. [Install Go 1.11+](https://golang.org/doc/install). - -2. Install [MariaDB 10.0](https://downloads.mariadb.org/) or - [MySQL 5.6](https://dev.mysql.com/downloads/mysql). You can use any - installation method (src/bin/rpm/deb), but be sure to include the client - development headers (`libmariadbclient-dev` or `libmysqlclient-dev`). - - The Vitess development team currently tests against MariaDB 10.0.21 - and MySQL 5.6.27. - - If you are installing MariaDB, note that you must install version 10.0 or - higher. If you are using `apt-get`, confirm that your repository - offers an option to install that version. You can also download the source - directly from [mariadb.org](https://downloads.mariadb.org/mariadb/). - - If you are using Ubuntu 14.04 with MySQL 5.6, the default install may be - missing a file too, `/usr/share/mysql/my-default.cnf`. It would show as an - error like `Could not find my-default.cnf`. If you run into this, just add - it with the following contents: - - ``` - [mysqld] - sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES - ``` - -3. Uninstall or disable `AppArmor`. Some versions of MySQL come with default - AppArmor configurations that the Vitess tools don't recognize yet. This causes - various permission failures when Vitess initializes MySQL instances through - the `mysqlctl` tool. This is only an issue for a test environment. If AppArmor - is necessary in production, you can configure the MySQL instances appropriately - without going through mysqlctl. - - ``` sh - $ sudo service apparmor stop - $ sudo service apparmor teardown - $ sudo update-rc.d -f apparmor remove - ``` - - Reboot, just to be sure that `AppArmor` is fully disabled. - - -4. Select a lock service from the options listed below. It is technically - possible to use another lock server, but plugins currently exist only - for ZooKeeper, etcd and consul. - - ZooKeeper 3.4.14 is included by default. - - [Install etcd v3.0+](https://github.com/coreos/etcd/releases). - If you use etcd, remember to include the `etcd` command - on your path. - - [Install Consul](https://www.consul.io/). - If you use consul, remember to include the `consul` command - on your path. - -5. Install the following other tools needed to build and run Vitess: - - make - - automake - - libtool - - python-dev - - python-virtualenv - - python-mysqldb - - libssl-dev - - g++ - - git - - pkg-config - - bison - - curl - - unzip - - These can be installed with the following apt-get command: - - ``` sh - $ sudo apt-get install make automake libtool python-dev python-virtualenv python-mysqldb libssl-dev g++ git pkg-config bison curl unzip - ``` - -6. If you decided to use ZooKeeper in step 3, you also need to install a - Java Runtime, such as OpenJDK. - - ``` sh - $ sudo apt-get install openjdk-7-jre - ``` - -#### OS X - -1. [Install Homebrew](https://brew.sh/). If your /usr/local directory is not empty and you never used Homebrew before, - it will be - [mandatory](https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/El_Capitan_and_Homebrew.md) - to run the following command: - - ``` sh - sudo chown -R $(whoami):admin /usr/local - ``` - -2. On OS X, MySQL 5.6 has to be used, MariaDB doesn't work for some reason yet. It should be installed from Homebrew - (`install steps are below`). - -3. If Xcode is installed (with Console tools, which should be bundled automatically since the 7.1 version), all - the dev dependencies should be satisfied in this step. If no Xcode is present, it is necessary to install pkg-config. - - ``` sh - brew install pkg-config - ``` - -4. ZooKeeper is used as lock service. - -5. Run the following commands: - - ``` sh - brew install go automake libtool python git bison curl wget mysql56 - pip install --upgrade pip setuptools - pip install virtualenv - pip install MySQL-python - pip install tox - - ``` - -6. The Vitess bootstrap script makes some checks for the go runtime, so it is recommended to have the following - commands in your ~/.profile or ~/.bashrc or ~/.zshrc or ~/.bash_profile: - - ``` sh - export PATH="/usr/local/opt/mysql@5.6/bin:$PATH" - export PATH=/usr/local/go/bin:$PATH - export GOROOT=/usr/local/go - ``` - -7. For the Vitess hostname resolving functions to work correctly, a new entry has to be added into the /etc/hosts file - with the current LAN IP address of the computer (preferably IPv4) and the current hostname, which you get by - typing the 'hostname' command in the terminal. - - It is also a good idea to put the following line to [force the Go DNS resolver](https://golang.org/doc/go1.5#net) - in your ~/.profile or ~/.bashrc or ~/.zshrc: - - ``` - export GODEBUG=netdns=go - ``` - -### Build Vitess - -1. Navigate to the directory where you want to download the Vitess - source code and clone the Vitess Github repo. After doing so, - navigate to the `src/vitess.io/vitess` directory. For go to work - correctly, you should create a symbolic link to this inide your ${HOME}/go/src - - ``` sh - cd $WORKSPACE - git clone https://github.com/vitessio/vitess.git \ - src/vitess.io/vitess - ln -s src/vitess.io ${HOME}/go/src/vitess.io - cd ${HOME}/go/src/vitess.io/vitess - ``` - -1. Set the `MYSQL_FLAVOR` environment variable. Choose the appropriate - value for your database. This value is case-sensitive. - - ``` sh - # export MYSQL_FLAVOR=MariaDB - # or (mandatory for OS X) - export MYSQL_FLAVOR=MySQL56 - ``` - -1. If your selected database installed in a location other than `/usr/bin`, - set the `VT_MYSQL_ROOT` variable to the root directory of your - MariaDB installation. For example, if mysql is installed in - `/usr/local/mysql`, run the following command. - - ``` sh - # export VT_MYSQL_ROOT=/usr/local/mysql - - # on OS X, this is the correct value: - export VT_MYSQL_ROOT=/usr/local/opt/mysql@5.6 - ``` - - Note that the command indicates that the `mysql` executable should - be found at `/usr/local/opt/mysql@5.6/bin/mysql`. - -1. Run `mysqld --version` and confirm that you - are running the correct version of MariaDB or MySQL. The value should - be 10 or higher for MariaDB and 5.6.x for MySQL. - -1. Build Vitess using the commands below. Note that the - `bootstrap.sh` script needs to download some dependencies. - If your machine requires a proxy to access the Internet, you will need - to set the usual environment variables (e.g. `http_proxy`, - `https_proxy`, `no_proxy`). - - Run the boostrap.sh script: - - ``` sh - ./bootstrap.sh - ### example output: - # skipping zookeeper build - # go install golang.org/x/tools/cmd/cover ... - # Found MariaDB installation in ... - # creating git pre-commit hooks - # - # source dev.env in your shell before building - ``` - - ``` sh - # Remaining commands to build Vitess - source ./dev.env - make build - ``` - -### Run Tests - -**Note:** If you are using etcd, set the following environment variable: - -``` sh -export VT_TEST_FLAGS='--topo-server-flavor=etcd2' -``` - -**Note:** If you are using consul, set the following environment variable: - -``` sh -export VT_TEST_FLAGS='--topo-server-flavor=consul -``` - -The default targets when running `make test` contain a full set of -tests intended to help Vitess developers to verify code changes. Those tests -simulate a small Vitess cluster by launching many servers on the local -machine. To do so, they require a lot of resources; a minimum of 8GB RAM -and SSD is recommended to run the tests. - -Some tests require extra packages. For example, on Ubuntu: - -``` sh -$ sudo apt-get install chromium-browser mvn xvfb -``` - -If you want only to check that Vitess is working in your environment, -you can run a lighter set of tests: - -``` sh -make site_test -``` - -#### Common Test Issues - -Attempts to run the full developer test suite (`make test`) -on an underpowered machine often results in failure. If you still see -the same failures when running the lighter set of tests (`make site_test`), -please let the development team know in the -[vitess@googlegroups.com](https://groups.google.com/forum/#!forum/vitess) -discussion forum. - -##### Node already exists, port in use, etc. - -A failed test can leave orphaned processes. If you use the default -settings, you can use the following commands to identify and kill -those processes: - -``` sh -pgrep -f -l '(vtdataroot|VTDATAROOT)' # list Vitess processes -pkill -f '(vtdataroot|VTDATAROOT)' # kill Vitess processes -``` - -##### Too many connections to MySQL, or other timeouts - -This error often means your disk is too slow. If you don't have access -to an SSD, you can try [testing against a -ramdisk](https://github.com/vitessio/vitess/blob/master/doc/TestingOnARamDisk.md). - -##### Connection refused to tablet, MySQL socket not found, etc. - -These errors might indicate that the machine ran out of RAM and a server -crashed when trying to allocate more RAM. Some of the heavier tests -require up to 8GB RAM. - -##### Connection refused in zkctl test - -This error might indicate that the machine does not have a Java Runtime -installed, which is a requirement if you are using ZooKeeper as the lock server. - -##### Running out of disk space - -Some of the larger tests use up to 4GB of temporary space on disk. - - -## Start a Vitess cluster - -After completing the instructions above to [build Vitess](#build-vitess), -you can use the example scripts in the Github repo to bring up a Vitess -cluster on your local machine. These scripts use ZooKeeper as the -lock service. ZooKeeper is included in the Vitess distribution. - -1. **Check system settings** - - Some Linux distributions ship with default file descriptor limits - that are too low for database servers. This issue could show up - as the database crashing with the message `too many open files`. - - Check the system-wide `file-max` setting as well as user-specific - `ulimit` values. We recommend setting them above 100K to be safe. - The exact [procedure](https://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/) - may vary depending on your Linux distribution. - -1. **Configure environment variables** - - If you are still in the same terminal window that - you used to run the build commands, you can skip to the next - step since the environment variables will already be set. - - If you're adapting this example to your own deployment, the only environment - variables required before running the scripts are `VTROOT` and `VTDATAROOT`. - - Set `VTROOT` to the parent of the Vitess source tree. For example, if you - ran `make build` while in `$HOME/vt/src/vitess.io/vitess`, - then you should set: - - ``` sh - export VTROOT=$HOME/vt - ``` - - Set `VTDATAROOT` to the directory where you want data files and logs to - be stored. For example: - - ``` sh - export VTDATAROOT=$HOME/vtdataroot - ``` - -1. **Start ZooKeeper or Etcd** - - Servers in a Vitess cluster find each other by looking for - dynamic configuration data stored in a distributed lock - service. The following script creates a small ZooKeeper cluster: - - ``` sh - $ cd $VTROOT/src/vitess.io/vitess/examples/local - vitess/examples/local$ ./zk-up.sh - ### example output: - # Starting zk servers... - # Waiting for zk servers to be ready... - ``` - - After the ZooKeeper cluster is running, we only need to tell each - Vitess process how to connect to ZooKeeper. Then, each process can - find all of the other Vitess processes by coordinating via ZooKeeper. - - Each of our scripts automatically uses the `TOPOLOGY_FLAGS` environment - variable to point to the global ZooKeeper instance. The global instance in - turn is configured to point to the local instance. In our sample scripts, - they are both hosted in the same ZooKeeper service. - - If you want to use Etcd as a distributed lock service, The following script - creates a Etcd instance: - - ``` sh - $ cd $VTROOT/src/vitess.io/vitess/examples/local - vitess/examples/local$ source ./topo-etcd2.sh - vitess/examples/local$ ./etcd-up.sh - ### example output: - # enter etcd2 env - # etcdmain: etcd Version: 3.X.X - # ... - # etcd start done... - ``` - -1. **Start vtctld** - - The *vtctld* server provides a web interface that - displays all of the coordination information stored in ZooKeeper. - - ``` sh - vitess/examples/local$ ./vtctld-up.sh - # Starting vtctld - # Access vtctld web UI at http://localhost:15000 - # Send commands with: vtctlclient -server localhost:15999 ... - ``` - - Open `http://localhost:15000` to verify that - *vtctld* is running. There won't be any information - there yet, but the menu should come up, which indicates that - *vtctld* is running. - - The *vtctld* server also accepts commands from the `vtctlclient` tool, - which is used to administer the cluster. Note that the port for RPCs - (in this case `15999`) is different from the web UI port (`15000`). - These ports can be configured with command-line flags, as demonstrated - in `vtctld-up.sh`. - - For convenience, we'll use the `lvtctl.sh` script in example commands, - to avoid having to type the *vtctld* address every time. - - ``` sh - # List available commands - vitess/examples/local$ ./lvtctl.sh help - ``` - -1. **Start vttablets** - - The `vttablet-up.sh` script brings up three vttablets, and assigns them to - a [keyspace]({% link overview/concepts.md %}#keyspace) and [shard]({% link overview/concepts.md %}#shard) - according to the variables set at the top of the script file. - - ``` sh - vitess/examples/local$ ./vttablet-up.sh - # Output from vttablet-up.sh is below - # Starting MySQL for tablet test-0000000100... - # Starting vttablet for test-0000000100... - # Access tablet test-0000000100 at http://localhost:15100/debug/status - # Starting MySQL for tablet test-0000000101... - # Starting vttablet for test-0000000101... - # Access tablet test-0000000101 at http://localhost:15101/debug/status - # Starting MySQL for tablet test-0000000102... - # Starting vttablet for test-0000000102... - # Access tablet test-0000000102 at http://localhost:15102/debug/status - ``` - - After this command completes, refresh the *vtctld* web UI, and you should - see a keyspace named `test_keyspace` with a single shard named `0`. - This is what an unsharded keyspace looks like. - - If you click on the shard box, you'll see a list of [tablets]({% link overview/concepts.md %}#tablet) - in that shard. Note that it's normal for the tablets to be unhealthy at this point, since - you haven't initialized them yet. - - You can also click the **STATUS** link on each tablet to be taken to its - status page, showing more details on its operation. Every Vitess server has - a status page served at `/debug/status` on its web port. - -1. **Initialize MySQL databases** - - Next, designate one of the tablets to be the initial master. - Vitess will automatically connect the other slaves' mysqld instances so - that they start replicating from the master's mysqld. - This is also when the default database is created. Since our keyspace is - named `test_keyspace`, the MySQL database will be named `vt_test_keyspace`. - - ``` sh - vitess/examples/local$ ./lvtctl.sh InitShardMaster -force test_keyspace/0 test-100 - ### example output: - # master-elect tablet test-0000000100 is not the shard master, proceeding anyway as -force was used - # master-elect tablet test-0000000100 is not a master in the shard, proceeding anyway as -force was used - ``` - - **Note:** Since this is the first time the shard has been started, - the tablets are not already doing any replication, and there is no - existing master. The `InitShardMaster` command above uses the `-force` flag - to bypass the usual sanity checks that would apply if this wasn't a - brand new shard. - - After running this command, go back to the **Shard Status** page - in the *vtctld* web interface. When you refresh the - page, you should see that one *vttablet* is the master, - two are replicas and two are rdonly. - - You can also see this on the command line: - - ``` sh - vitess/examples/local$ ./lvtctl.sh ListAllTablets test - ### example output: - # test-0000000100 test_keyspace 0 master localhost:15100 localhost:17100 [] - # test-0000000101 test_keyspace 0 replica localhost:15101 localhost:17101 [] - # test-0000000102 test_keyspace 0 replica localhost:15102 localhost:17102 [] - # test-0000000103 test_keyspace 0 rdonly localhost:15103 localhost:17103 [] - # test-0000000104 test_keyspace 0 rdonly localhost:15104 localhost:17104 [] - ``` - -1. **Create a table** - - The `vtctlclient` tool can be used to apply the database schema across all - tablets in a keyspace. The following command creates the table defined in - the `create_test_table.sql` file: - - ``` sh - # Make sure to run this from the examples/local dir, so it finds the file. - vitess/examples/local$ ./lvtctl.sh ApplySchema -sql "$(cat create_test_table.sql)" test_keyspace - ``` - - The SQL to create the table is shown below: - - ``` sql - CREATE TABLE messages ( - page BIGINT(20) UNSIGNED, - time_created_ns BIGINT(20) UNSIGNED, - message VARCHAR(10000), - PRIMARY KEY (page, time_created_ns) - ) ENGINE=InnoDB - ``` - -1. **Take a backup** - - Now that the initial schema is applied, it's a good time to take the first - [backup]({% link user-guide/backup-and-restore.md %}). This backup - will be used to automatically restore any additional replicas that you run, - before they connect themselves to the master and catch up on replication. - If an existing tablet goes down and comes back up without its data, it will - also automatically restore from the latest backup and then resume replication. - - ``` sh - vitess/examples/local$ ./lvtctl.sh Backup test-0000000102 - ``` - - After the backup completes, you can list available backups for the shard: - - ``` sh - vitess/examples/local$ ./lvtctl.sh ListBackups test_keyspace/0 - ### example output: - # 2016-05-06.072724.test-0000000102 - ``` - - **Note:** In this single-server example setup, backups are stored at - `$VTDATAROOT/backups`. In a multi-server deployment, you would usually mount - an NFS directory there. You can also change the location by setting the - `-file_backup_storage_root` flag on *vtctld* and *vttablet*, as demonstrated - in `vtctld-up.sh` and `vttablet-up.sh`. - -1. **Initialize Vitess Routing Schema** - - In the examples, we are just using a single database with no specific - configuration. So we just need to make that (empty) configuration visible - for serving. This is done by running the following command: - - ``` sh - vitess/examples/local$ ./lvtctl.sh RebuildVSchemaGraph - ``` - - (As it works, this command will not display any output.) - -1. **Start vtgate** - - Vitess uses *vtgate* to route each client query to - the correct *vttablet*. This local example runs a - single *vtgate* instance, though a real deployment - would likely run multiple *vtgate* instances to share - the load. - - ``` sh - vitess/examples/local$ ./vtgate-up.sh - ``` - -### Run a Client Application - -The `client.py` file is a simple sample application -that connects to *vtgate* and executes some queries. -To run it, you need to either: - -* Add the Vitess Python packages to your `PYTHONPATH`. - - or - -* Use the `client.sh` wrapper script, which temporarily - sets up the environment and then runs `client.py`. - - ``` sh - vitess/examples/local$ ./client.sh - ### example output: - # Inserting into master... - # Reading from master... - # (5L, 1462510331910124032L, 'V is for speed') - # (15L, 1462519383758071808L, 'V is for speed') - # (42L, 1462510369213753088L, 'V is for speed') - # ... - ``` - -There are also sample clients in the same directory for Java, PHP, and Go. -See the comments at the top of each sample file for usage instructions. - -### Try Vitess resharding - -Now that you have a full Vitess stack running, you may want to go on to the -[Horizontal Sharding workflow guide]({% link user-guide/horizontal-sharding-workflow.md %}) -or [Horizontal Sharding codelab]({% link user-guide/horizontal-sharding.md %}) -(if you prefer to run each step manually through commands) to try out -[dynamic resharding]({% link user-guide/sharding.md %}#resharding). - -If so, you can skip the tear-down since the sharding guide picks up right here. -If not, continue to the clean-up steps below. - -### Tear down the cluster - -Each `-up.sh` script has a corresponding `-down.sh` script to stop the servers. - -``` sh -vitess/examples/local$ ./vtgate-down.sh -vitess/examples/local$ ./vttablet-down.sh -vitess/examples/local$ ./vtctld-down.sh -vitess/examples/local$ ./zk-down.sh # If you use Etcd, run ./etcd-down.sh -``` - -Note that the `-down.sh` scripts will leave behind any data files created. -If you're done with this example data, you can clear out the contents of `VTDATAROOT`: - -``` sh -$ cd $VTDATAROOT -/path/to/vtdataroot$ rm -rf * -``` - -## Troubleshooting - -If anything goes wrong, check the logs in your `$VTDATAROOT/tmp` directory -for error messages. There are also some tablet-specific logs, as well as -MySQL logs in the various `$VTDATAROOT/vt_*` directories. - -If you need help diagnosing a problem, send a message to our -[mailing list](https://groups.google.com/forum/#!forum/vitess). -In addition to any errors you see at the command-line, it would also help to -upload an archive of your `VTDATAROOT` directory to a file sharing service -and provide a link to it. - diff --git a/doc/GettingStartedKubernetes.md b/doc/GettingStartedKubernetes.md deleted file mode 100644 index d38e7946283..00000000000 --- a/doc/GettingStartedKubernetes.md +++ /dev/null @@ -1,747 +0,0 @@ -This page explains how to run Vitess on [Kubernetes](https://kubernetes.io). -It also gives the steps to start a Kubernetes cluster with -[Google Container Engine](https://cloud.google.com/container-engine/). - -If you already have Kubernetes v1.0+ running in one of the other -[supported platforms](https://kubernetes.io/docs/setup/pick-right-solution/), -you can skip the `gcloud` steps. -The `kubectl` steps will apply to any Kubernetes cluster. - -## Prerequisites - -To complete the exercise in this guide, you must -[install etcd-operator](https://github.com/coreos/etcd-operator/blob/master/doc/user/install_guide.md) -in the same namespace in which you plan to run Vitess. - -You also must locally install Go 1.11+, -the Vitess' `vtctlclient` tool, and `kubectl`. -The following sections explain how to set these up in your environment. - -### Install Go 1.11+ - -You need to install [Go 1.11+](https://golang.org/doc/install) to build the -`vtctlclient` tool, which issues commands to Vitess. - -After installing Go, make sure your `GOPATH` environment -variable is set to the root of your workspace. The most common setting -is `GOPATH=$HOME/go`, and the value should identify a -directory to which your non-root user has write access. - -In addition, make sure that `$GOPATH/bin` is included in -your `$PATH`. More information about setting up a Go -workspace can be found at -[How to Write Go Code](https://golang.org/doc/code.html#Organization). - -### Build and install vtctlclient - -The `vtctlclient` tool issues commands to Vitess. - -``` sh -$ go get vitess.io/vitess/go/cmd/vtctlclient -``` - -This command downloads and builds the Vitess source code at: - -``` sh -$GOPATH/src/vitess.io/vitess/ -``` - -It also copies the built `vtctlclient` binary into `$GOPATH/bin`. - -### Set up Google Compute Engine, Container Engine, and Cloud tools - -**Note:** If you are running Kubernetes elsewhere, skip to -[Locate kubectl](#locate-kubectl). - -To run Vitess on Kubernetes using Google Compute Engine (GCE), -you must have a GCE account with billing enabled. The instructions -below explain how to enable billing and how to associate a billing -account with a project in the Google Developers Console. - -1. Log in to the Google Developers Console to [enable billing](https://console.developers.google.com/billing). - 1. Click the **Billing** pane if you are not there already. - 1. Click **New billing account**. - 1. Assign a name to the billing account -- e.g. "Vitess on - Kubernetes." Then click **Continue**. You can sign up - for the [free trial](https://cloud.google.com/free-trial/) - to avoid any charges. - -1. Create a project in the Google Developers Console that uses - your billing account: - 1. At the top of the Google Developers Console, click the **Projects** dropdown. - 1. Click the Create a Project... link. - 1. Assign a name to your project. Then click the **Create** button. - Your project should be created and associated with your - billing account. (If you have multiple billing accounts, - confirm that the project is associated with the correct account.) - 1. After creating your project, click **API Manager** in the left menu. - 1. Find **Google Compute Engine** and **Google Container Engine API**. - (Both should be listed under "Google Cloud APIs".) - For each, click on it, then click the **"Enable API"** button. - -1. Follow the [Google Cloud SDK quickstart instructions](https://cloud.google.com/sdk/#Quick_Start) - to set up and test the Google Cloud SDK. You will also set your default project - ID while completing the quickstart. - - **Note:** If you skip the quickstart guide because you've previously set up - the Google Cloud SDK, just make sure to set a default project ID by running - the following command. Replace `PROJECT` with the project ID assigned to - your [Google Developers Console](https://console.developers.google.com/) - project. You can [find the ID](https://cloud.google.com/compute/docs/projects#projectids) - by navigating to the **Overview** page for the project in the Console. - - ``` sh - $ gcloud config set project PROJECT - ``` - -1. Install or update the `kubectl` tool: - - ``` sh - $ gcloud components update kubectl - ``` - -### Locate kubectl - -Check if `kubectl` is on your `PATH`: - -``` sh -$ which kubectl -### example output: -# ~/google-cloud-sdk/bin/kubectl -``` - -If `kubectl` isn't on your `PATH`, you can tell our scripts where -to find it by setting the `KUBECTL` environment variable: - -``` sh -$ export KUBECTL=/example/path/to/google-cloud-sdk/bin/kubectl -``` - -## Start a Container Engine cluster - -**Note:** If you are running Kubernetes elsewhere, skip to -[Start a Vitess cluster](#start-a-vitess-cluster). - -1. Set the [zone](https://cloud.google.com/compute/docs/zones#overview) - that your installation will use: - - ``` sh - $ gcloud config set compute/zone us-central1-b - ``` - -1. Create a Container Engine cluster: - - ``` sh - $ gcloud container clusters create example --machine-type n1-standard-4 --num-nodes 5 --scopes storage-rw - ### example output: - # Creating cluster example...done. - # Created [https://container.googleapis.com/v1/projects/vitess/zones/us-central1-b/clusters/example]. - # kubeconfig entry generated for example. - ``` - - **Note:** The `--scopes storage-rw` argument is necessary to allow - [built-in backup/restore]({% link user-guide/backup-and-restore.md %}) - to access [Google Cloud Storage](https://cloud.google.com/storage/). - -1. Create a Cloud Storage bucket: - - To use the Cloud Storage plugin for built-in backups, first create a - [bucket](https://cloud.google.com/storage/docs/concepts-techniques#concepts) - for Vitess backup data. See the - [bucket naming guidelines](https://cloud.google.com/storage/docs/bucket-naming) - if you're new to Cloud Storage. - - ``` sh - $ gsutil mb gs://my-backup-bucket - ``` - -## Start a Vitess cluster - -1. **Navigate to your local Vitess source code** - - This directory would have been created when you installed - `vtctlclient`: - - ``` sh - $ cd $GOPATH/src/vitess.io/vitess/examples/kubernetes - ``` - -1. **Configure site-local settings** - - Run the `configure.sh` script to generate a `config.sh` file, which will be - used to customize your cluster settings. - - Currently, we have out-of-the-box support for storing - [backups]({% link user-guide/backup-and-restore.md %}) in - [Google Cloud Storage](https://cloud.google.com/storage/). If you're using - GCS, fill in the fields requested by the configure script, including the - name of the bucket you created above. - - ``` sh - vitess/examples/kubernetes$ ./configure.sh - ### example output: - # Backup Storage (file, gcs) [gcs]: - # Google Developers Console Project [my-project]: - # Google Cloud Storage bucket for Vitess backups: my-backup-bucket - # Saving config.sh... - ``` - - For other platforms, you'll need to choose the `file` backup storage plugin, - and mount a read-write network volume into the `vttablet` and `vtctld` pods. - For example, you can mount any storage service accessible through NFS into a - [Kubernetes volume](https://kubernetes.io/docs/concepts/storage/volumes#nfs). - Then provide the mount path to the configure script here. - - Direct support for other cloud blob stores like Amazon S3 can be added by - implementing the Vitess [BackupStorage plugin interface](https://github.com/vitessio/vitess/blob/master/go/vt/mysqlctl/backupstorage/interface.go). - Let us know on the [discussion forum](https://groups.google.com/forum/#!forum/vitess) - if you have any specific plugin requests. - -1. **Start an etcd cluster** - - The Vitess [topology service]({% link overview/concepts.md %}#topology-service) - stores coordination data for all the servers in a Vitess cluster. - It can store this data in one of several consistent storage systems. - In this example, we'll use [etcd](https://github.com/coreos/etcd). - Note that we need our own etcd clusters, separate from the one used by - Kubernetes itself. We will use etcd-operator to manage these clusters. - - If you haven't done so already, make sure you - [install etcd-operator](https://github.com/coreos/etcd-operator/blob/master/doc/user/install_guide.md) - in the same namespace in which you plan to run Vitess - before continuing. - - ``` sh - vitess/examples/kubernetes$ ./etcd-up.sh - ### example output: - # Creating etcd service for 'global' cell... - # etcdcluster "etcd-global" created - # Creating etcd service for 'global' cell... - # etcdcluster "etcd-test" created - # ... - ``` - - This command creates two clusters. One is for the - [global cell]({% link user-guide/topology-service.md %}#global-vs-local), - and the other is for a - [local cell]({% link overview/concepts.md %}#cell-data-center) - called *test*. You can check the status of the - [pods](https://kubernetes.io/docs/concepts/workloads/pods/) - in the cluster by running: - - ``` sh - $ kubectl get pods - ### example output: - # NAME READY STATUS RESTARTS AGE - # etcd-global-0000 1/1 Running 0 1m - # etcd-global-0001 1/1 Running 0 1m - # etcd-global-0002 1/1 Running 0 1m - # etcd-operator-857677187-rvgf5 1/1 Running 0 28m - # etcd-test-0000 1/1 Running 0 1m - # etcd-test-0001 1/1 Running 0 1m - # etcd-test-0002 1/1 Running 0 1m - ``` - - It may take a while for each Kubernetes node to download the - Docker images the first time it needs them. While the images - are downloading, the pod status will be Pending. - - **Note:** In this example, each script that has a name ending in - `-up.sh` also has a corresponding `-down.sh` - script, which can be used to stop certain components of the - Vitess cluster without bringing down the whole cluster. For - example, to tear down the `etcd` deployment, run: - - ``` sh - vitess/examples/kubernetes$ ./etcd-down.sh - ``` - -1. **Start vtctld** - - The `vtctld` server provides a web interface to inspect the state of the - Vitess cluster. It also accepts RPC commands from `vtctlclient` to modify - the cluster. - - ``` sh - vitess/examples/kubernetes$ ./vtctld-up.sh - ### example output: - # Creating vtctld ClusterIP service... - # service "vtctld" created - # Creating vtctld replicationcontroller... - # replicationcontroller "vtctld" create createdd - ``` - -1. **Access vtctld web UI** - - To access vtctld from outside Kubernetes, use [kubectl proxy](https://kubernetes.io/docs/tasks/access-kubernetes-api/http-proxy-access-api/) - to create an authenticated tunnel on your workstation: - - **Note:** The proxy command runs in the foreground, - so you may want to run it in a separate terminal. - - ``` sh - $ kubectl proxy --port=8001 - ### example output: - # Starting to serve on localhost:8001 - ``` - - You can then load the vtctld web UI on `localhost`: - - http://localhost:8001/api/v1/namespaces/default/services/vtctld:web/proxy - - You can also use this proxy to access the [Kubernetes Dashboard](https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/), - where you can monitor nodes, pods, and services: - - http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/. - -1. **Use vtctlclient to send commands to vtctld** - - You can now run `vtctlclient` locally to issue commands - to the `vtctld` service on your Kubernetes cluster. - - To enable RPC access into the Kubernetes cluster, we'll again use - `kubectl` to set up an authenticated tunnel. Unlike the HTTP proxy - we used for the web UI, this time we need raw [port forwarding](https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/) - for vtctld's [gRPC](https://grpc.io) port. - - Since the tunnel needs to target a particular vtctld pod name, - we've provided the `kvtctl.sh` script, which uses `kubectl` to - discover the pod name and set up the tunnel before running `vtctlclient`. - - Now, running `kvtctl.sh help` will test your connection to - `vtctld` and also list the `vtctlclient` - commands that you can use to administer the Vitess cluster. - - ``` sh - vitess/examples/kubernetes$ ./kvtctl.sh help - ### example output: - # Available commands: - # - # Tablets: - # InitTablet ... - # ... - ``` - - You can also use the `help` command to get more details about each command: - - ``` sh - vitess/examples/kubernetes$ ./kvtctl.sh help ListAllTablets - ``` - - See the [vtctl reference]({% link reference/vtctl.md %}) for a - web-formatted version of the `vtctl help` output. - -1. **Setup the cell in the topology** - - The global etcd cluster is configured from command-line parameters, - specified in the Kubernetes configuration files. The per-cell etcd cluster - however needs to be configured, so it is reachable by Vitess. The following - command sets it up: - - ``` sh - ./kvtctl.sh AddCellInfo --root /test -server_address http://etcd-test-client:2379 test - ``` - - -1. **Start vttablets** - - A Vitess [tablet]({% link overview/concepts.md %}#tablet) is the - unit of scaling for the database. A tablet consists of the - `vttablet` and `mysqld` processes, running on the same - host. We enforce this coupling in Kubernetes by putting the respective - containers for vttablet and mysqld inside a single - [pod](https://kubernetes.io/docs/concepts/workloads/pods/). - - Run the following script to launch the vttablet pods, which also include - mysqld: - - ``` sh - vitess/examples/kubernetes$ ./vttablet-up.sh - ### example output: - # Creating test_keyspace.shard-0 pods in cell test... - # Creating pod for tablet test-0000000100... - # pod "vttablet-100" created - # Creating pod for tablet test-0000000101... - # pod "vttablet-101" created - # Creating pod for tablet test-0000000102... - # pod "vttablet-102" created - # Creating pod for tablet test-0000000103... - # pod "vttablet-103" created - # Creating pod for tablet test-0000000104... - # pod "vttablet-104" created - ``` - - In the vtctld web UI, you should soon see a - [keyspace]({% link overview/concepts.md %}#keyspace) named `test_keyspace` - with a single [shard]({% link overview/concepts.md %}#shard) named `0`. - Click on the shard name to see the list of tablets. When all 5 tablets - show up on the shard status page, you're ready to continue. Note that it's - normal for the tablets to be unhealthy at this point, since you haven't - initialized the databases on them yet. - - It can take some time for the tablets to come up for the first time if a pod - was scheduled on a node that hasn't downloaded the [Vitess Docker image](https://hub.docker.com/u/vitess/) - yet. You can also check the status of the - tablets from the command line using `kvtctl.sh`: - - ``` sh - vitess/examples/kubernetes$ ./kvtctl.sh ListAllTablets test - ### example output: - # test-0000000100 test_keyspace 0 spare 10.64.1.6:15002 10.64.1.6:3306 [] - # test-0000000101 test_keyspace 0 spare 10.64.2.5:15002 10.64.2.5:3306 [] - # test-0000000102 test_keyspace 0 spare 10.64.0.7:15002 10.64.0.7:3306 [] - # test-0000000103 test_keyspace 0 spare 10.64.1.7:15002 10.64.1.7:3306 [] - # test-0000000104 test_keyspace 0 spare 10.64.2.6:15002 10.64.2.6:3306 [] - ``` - -1. **Initialize MySQL databases** - - Once all the tablets show up, you're ready to initialize the underlying - MySQL databases. - - **Note:** Many `vtctlclient` commands produce no output on success. - - First, designate one of the tablets to be the initial master. Vitess will - automatically connect the other slaves' mysqld instances so that they start - replicating from the master's mysqld. This is also when the default database - is created. Since our keyspace is named `test_keyspace`, the MySQL database - will be named `vt_test_keyspace`. - - ``` sh - vitess/examples/kubernetes$ ./kvtctl.sh InitShardMaster -force test_keyspace/0 test-0000000100 - ### example output: - # master-elect tablet test-0000000100 is not the shard master, proceeding anyway as -force was used - # master-elect tablet test-0000000100 is not a master in the shard, proceeding anyway as -force was used - ``` - - **Note:** Since this is the first time the shard has been started, the - tablets are not already doing any replication, and there is no existing - master. The `InitShardMaster` command above uses the `-force` flag to bypass - the usual sanity checks that would apply if this wasn't a brand new shard. - - After the tablets finish updating, you should see one **master**, and - several **replica** and **rdonly** tablets: - - ``` sh - vitess/examples/kubernetes$ ./kvtctl.sh ListAllTablets test - ### example output: - # test-0000000100 test_keyspace 0 master 10.64.1.6:15002 10.64.1.6:3306 [] - # test-0000000101 test_keyspace 0 replica 10.64.2.5:15002 10.64.2.5:3306 [] - # test-0000000102 test_keyspace 0 replica 10.64.0.7:15002 10.64.0.7:3306 [] - # test-0000000103 test_keyspace 0 rdonly 10.64.1.7:15002 10.64.1.7:3306 [] - # test-0000000104 test_keyspace 0 rdonly 10.64.2.6:15002 10.64.2.6:3306 [] - ``` - - The **replica** tablets are used for serving live web traffic, while the - **rdonly** tablets are used for offline processing, such as batch jobs and backups. - The amount of each [tablet type]({% link overview/concepts.md %}#tablet) - that you launch can be configured in the `vttablet-up.sh` script. - -1. **Create a table** - - The `vtctlclient` tool can be used to apply the database schema - across all tablets in a keyspace. The following command creates - the table defined in the `create_test_table.sql` file: - - ``` sh - # Make sure to run this from the examples/kubernetes dir, so it finds the file. - vitess/examples/kubernetes$ ./kvtctl.sh ApplySchema -sql "$(cat create_test_table.sql)" test_keyspace - ``` - - The SQL to create the table is shown below: - - ``` sql - CREATE TABLE messages ( - page BIGINT(20) UNSIGNED, - time_created_ns BIGINT(20) UNSIGNED, - message VARCHAR(10000), - PRIMARY KEY (page, time_created_ns) - ) ENGINE=InnoDB - ``` - - You can run this command to confirm that the schema was created - properly on a given tablet, where `test-0000000100` - is a tablet alias as shown by the `ListAllTablets` command: - - ``` sh - vitess/examples/kubernetes$ ./kvtctl.sh GetSchema test-0000000100 - ### example output: - # { - # "DatabaseSchema": "CREATE DATABASE `{{.DatabaseName}}` /*!40100 DEFAULT CHARACTER SET utf8 */", - # "TableDefinitions": [ - # { - # "Name": "messages", - # "Schema": "CREATE TABLE `messages` (\n `page` bigint(20) unsigned NOT NULL DEFAULT '0',\n `time_created_ns` bigint(20) unsigned NOT NULL DEFAULT '0',\n `message` varchar(10000) DEFAULT NULL,\n PRIMARY KEY (`page`,`time_created_ns`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8", - # "Columns": [ - # "page", - # "time_created_ns", - # "message" - # ], - # ... - ``` - -1. **Take a backup** - - Now that the initial schema is applied, it's a good time to take the first - [backup]({% link user-guide/backup-and-restore.md %}). This backup - will be used to automatically restore any additional replicas that you run, - before they connect themselves to the master and catch up on replication. - If an existing tablet goes down and comes back up without its data, it will - also automatically restore from the latest backup and then resume replication. - - Select one of the **rdonly** tablets and tell it to take a backup. We use a - **rdonly** tablet instead of a **replica** because the tablet will pause - replication and stop serving during data copy to create a consistent snapshot. - - ``` sh - vitess/examples/kubernetes$ ./kvtctl.sh Backup test-0000000104 - ``` - - After the backup completes, you can list available backups for the shard: - - ``` sh - vitess/examples/kubernetes$ ./kvtctl.sh ListBackups test_keyspace/0 - ### example output: - # 2015-10-21.042940.test-0000000104 - ``` - -1. **Initialize Vitess Routing Schema** - - In the examples, we are just using a single database with no specific - configuration. So we just need to make that (empty) configuration visible - for serving. This is done by running the following command: - - ``` sh - vitess/examples/kubernetes$ ./kvtctl.sh RebuildVSchemaGraph - ``` - - (As it works, this command will not display any output.) - -1. **Start vtgate** - - Vitess uses [vtgate]({% link overview/index.md %}#vtgate) to route each client - query to the correct `vttablet`. In Kubernetes, a `vtgate` service - distributes connections to a pool of `vtgate` pods. The pods are curated by - a [replication controller](https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/). - - ``` sh - vitess/examples/kubernetes$ ./vtgate-up.sh - ### example output: - # Creating vtgate service in cell test... - # service "vtgate-test" created - # Creating vtgate replicationcontroller in cell test... - # replicationcontroller "vtgate-test" created - ``` - -## Test your cluster with a client app - -The GuestBook app in the example is ported from the -[Kubernetes GuestBook example](https://github.com/kubernetes/kubernetes/tree/master/examples/guestbook-go). -The server-side code has been rewritten in Python to use Vitess as the storage -engine. The client-side code (HTML/JavaScript) has been modified to support -multiple Guestbook pages, which will be useful to demonstrate Vitess sharding in -a later guide. - -``` sh -vitess/examples/kubernetes$ ./guestbook-up.sh -### example output: -# Creating guestbook service... -# services "guestbook" created -# Creating guestbook replicationcontroller... -# replicationcontroller "guestbook" created -``` - -As with the `vtctld` service, by default the GuestBook app is not accessible -from outside Kubernetes. In this case, since this is a user-facing frontend, -we set `type: LoadBalancer` in the GuestBook service definition, -which tells Kubernetes to create a public -[load balancer](https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/) -using the API for whatever platform your Kubernetes cluster is in. - -You also need to [allow access through your platform's firewall](https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/). - -``` sh -# For example, to open port 80 in the GCE firewall: -$ gcloud compute firewall-rules create guestbook --allow tcp:80 -``` - -**Note:** For simplicity, the firewall rule above opens the port on **all** -GCE instances in your project. In a production system, you would likely -limit it to specific instances. - -Then, get the external IP of the load balancer for the GuestBook service: - -``` sh -$ kubectl get service guestbook -### example output: -# NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE -# guestbook 10.67.242.247 3.4.5.6 80/TCP 1m -``` - -If the `EXTERNAL-IP` is still empty, give it a few minutes to create -the external load balancer and check again. - -Once the pods are running, the GuestBook app should be accessible -from the load balancer's external IP. In the example above, it would be at -`http://3.4.5.6`. - -You can see Vitess' replication capabilities by opening the app in -multiple browser windows, with the same Guestbook page number. -Each new entry is committed to the master database. -In the meantime, JavaScript on the page continuously polls -the app server to retrieve a list of GuestBook entries. The app serves -read-only requests by querying Vitess in 'replica' mode, confirming -that replication is working. - -You can also inspect the data stored by the app: - -``` sh -vitess/examples/kubernetes$ ./kvtctl.sh ExecuteFetchAsDba test-0000000100 "SELECT * FROM messages" -### example output: -# +------+---------------------+---------+ -# | page | time_created_ns | message | -# +------+---------------------+---------+ -# | 42 | 1460771336286560000 | Hello | -# +------+---------------------+---------+ -``` - -The [GuestBook source code](https://github.com/vitessio/vitess/tree/master/examples/kubernetes/guestbook) -provides more detail about how the app server interacts with Vitess. - -## Try Vitess resharding - -Now that you have a full Vitess stack running, you may want to go on to the -[Sharding in Kubernetes workflow guide]({% link user-guide/sharding-kubernetes.md %}) -or [Sharding in Kubernetes codelab]({% link user-guide/sharding-kubernetes.md %}) -(if you prefer to run each step manually through commands) to try out -[dynamic resharding]({% link user-guide/sharding.md %}#resharding). - -If so, you can skip the tear-down since the sharding guide picks up right here. -If not, continue to the clean-up steps below. - -## Tear down and clean up - -Before stopping the Container Engine cluster, you should tear down the Vitess -services. Kubernetes will then take care of cleaning up any entities it created -for those services, like external load balancers. - -``` sh -vitess/examples/kubernetes$ ./guestbook-down.sh -vitess/examples/kubernetes$ ./vtgate-down.sh -vitess/examples/kubernetes$ ./vttablet-down.sh -vitess/examples/kubernetes$ ./vtctld-down.sh -vitess/examples/kubernetes$ ./etcd-down.sh -``` - -Then tear down the Container Engine cluster itself, which will stop the virtual -machines running on Compute Engine: - -``` sh -$ gcloud container clusters delete example -``` - -It's also a good idea to remove any firewall rules you created, unless you plan -to use them again soon: - -``` sh -$ gcloud compute firewall-rules delete guestbook -``` - -## Troubleshooting - -### Server logs - -If a pod enters the `Running` state, but the server -doesn't respond as expected, use the `kubectl logs` -command to check the pod output: - -``` sh -# show logs for container 'vttablet' within pod 'vttablet-100' -$ kubectl logs vttablet-100 vttablet - -# show logs for container 'mysql' within pod 'vttablet-100' -# Note that this is NOT MySQL error log. -$ kubectl logs vttablet-100 mysql -``` - -Post the logs somewhere and send a link to the [Vitess -mailing list](https://groups.google.com/forum/#!forum/vitess) -to get more help. - -### Shell access - -If you want to poke around inside a container, you can use `kubectl exec` to run -a shell. - -For example, to launch a shell inside the `vttablet` container of the -`vttablet-100` pod: - -``` sh -$ kubectl exec vttablet-100 -c vttablet -t -i -- bash -il -root@vttablet-100:/# ls /vt/vtdataroot/vt_0000000100 -### example output: -# bin-logs innodb my.cnf relay-logs -# data memcache.sock764383635 mysql.pid slow-query.log -# error.log multi-master.info mysql.sock tmp -``` - -### Root certificates - -If you see in the logs a message like this: - -``` -x509: failed to load system roots and no roots provided -``` - -It usually means that your Kubernetes nodes are running a host OS -that puts root certificates in a different place than our configuration -expects by default (for example, Fedora). See the comments in the -[etcd controller template](https://github.com/kubernetes/examples/blob/master/staging/storage/vitess/etcd-controller-template.yaml) -for examples of how to set the right location for your host OS. -You'll also need to adjust the same certificate path settings in the -`vtctld` and `vttablet` templates. - -### Status pages for vttablets - -Each `vttablet` serves a set of HTML status pages on its primary port. -The `vtctld` interface provides a **STATUS** link for each tablet. - -If you access the vtctld web UI through the kubectl proxy as described above, -it will automatically link to the vttablets through that same proxy, -giving you access from outside the cluster. - -You can also use the proxy to go directly to a tablet. For example, -to see the status page for the tablet with ID `100`, you could navigate to: - -http://localhost:8001/api/v1/proxy/namespaces/default/pods/vttablet-100:15002/debug/status - -### Direct connection to mysqld - -Since the `mysqld` within the `vttablet` pod is only meant to be accessed -via vttablet, our default bootstrap settings only allow connections from -localhost. - -If you want to check or manipulate the underlying mysqld, you can issue -simple queries or commands through `vtctlclient` like this: - -``` sh -# Send a query to tablet 100 in cell 'test'. -vitess/examples/kubernetes$ ./kvtctl.sh ExecuteFetchAsDba test-0000000100 "SELECT VERSION()" -### example output: -# +------------+ -# | VERSION() | -# +------------+ -# | 5.7.13-log | -# +------------+ -``` - -If you need a truly direct connection to mysqld, you can [launch a shell](#shell-access) -inside the mysql container, and then connect with the `mysql` -command-line client: - -``` sh -$ kubectl exec vttablet-100 -c mysql -t -i -- bash -il -root@vttablet-100:/# export TERM=ansi -root@vttablet-100:/# mysql -S /vt/vtdataroot/vt_0000000100/mysql.sock -u vt_dba -``` - diff --git a/doc/GitHubWorkflow.md b/doc/GitHubWorkflow.md deleted file mode 100644 index c81aefb69b0..00000000000 --- a/doc/GitHubWorkflow.md +++ /dev/null @@ -1,137 +0,0 @@ -# GitHub Workflow - -If you are new to Git and GitHub, we recommend to read this page. Otherwise, you may skip it. - -Our GitHub workflow is a so called triangular workflow: - -visualization of the GitHub triangular workflow - -*Image Source:* https://github.com/blog/2042-git-2-5-including-multiple-worktrees-and-triangular-workflows - -The Vitess code is hosted on GitHub (https://github.com/vitessio/vitess). -This repository is called *upstream*. -You develop and commit your changes in a clone of our upstream repository (shown as *local* in the image above). -Then you push your changes to your forked repository (*origin*) and send us a pull request. -Eventually, we will merge your pull request back into the *upstream* repository. - -## Remotes - -Since you should have cloned the repository from your fork, the `origin` remote -should look like this: - -``` -$ git remote -v -origin git@github.com:/vitess.git (fetch) -origin git@github.com:/vitess.git (push) -``` - -To help you keep your fork in sync with the main repo, add an `upstream` remote: - -``` -$ git remote add upstream git@github.com:vitessio/vitess.git -$ git remote -v -origin git@github.com:/vitess.git (fetch) -origin git@github.com:/vitess.git (push) -upstream git@github.com:vitessio/vitess.git (fetch) -upstream git@github.com:vitessio/vitess.git (push) -``` - -Now to sync your local `master` branch, do this: - -``` -$ git checkout master -(master) $ git pull upstream master -``` - -Note: In the example output above we prefixed the prompt with `(master)` to -stress the fact that the command must be run from the branch `master`. - -You can omit the `upstream master` from the `git pull` command when you let your -`master` branch always track the main `vitessio/vitess` repository. To achieve -this, run this command once: - -``` -(master) $ git branch --set-upstream-to=upstream/master -``` - -Now the following command syncs your local `master` branch as well: - -``` -(master) $ git pull -``` - -## Topic Branches - -Before you start working on changes, create a topic branch: - -``` -$ git checkout master -(master) $ git pull -(master) $ git checkout -b new-feature -(new-feature) $ # You are now in the new-feature branch. -``` - -Try to commit small pieces along the way as you finish them, with an explanation -of the changes in the commit message. -Please see the [Code Review page]({% link contributing/code-reviews.md %}) for more guidance. - -As you work in a package, you can run just -the unit tests for that package by running `go test` from within that package. - -When you're ready to test the whole system, run the full test suite with `make -test` from the root of the Git tree. -If you haven't installed all dependencies for `make test`, you can rely on the Travis CI test results as well. -These results will be linked on your pull request. - -## Committing your work - -When running `git commit` use the `-s` option to add a Signed-off-by line. -This is needed for [the Developer Certificate of Origin](https://github.com/apps/dco). - -## Sending Pull Requests - -Push your branch to the repository (and set it to track with `-u`): - -``` -(new-feature) $ git push -u origin new-feature -``` - -You can omit `origin` and `-u new-feature` parameters from the `git push` -command with the following two Git configuration changes: - -``` -$ git config remote.pushdefault origin -$ git config push.default current -``` - -The first setting saves you from typing `origin` every time. And with the second -setting, Git assumes that the remote branch on the GitHub side will have the -same name as your local branch. - -After this change, you can run `git push` without arguments: - -``` -(new-feature) $ git push -``` - -Then go to the [repository page](https://github.com/vitessio/vitess) and it -should prompt you to create a Pull Request from a branch you recently pushed. -You can also [choose a branch manually](https://github.com/vitessio/vitess/compare). - -## Addressing Changes - -If you need to make changes in response to the reviewer's comments, just make -another commit on your branch and then push it again: - -``` -$ git checkout new-feature -(new-feature) $ git commit -(new-feature) $ git push -``` - -That is because a pull request always mirrors all commits from your topic branch which are not in the master branch. - -Once your pull request is merged: - -* close the GitHub issue (if it wasn't automatically closed) -* delete your local topic branch (`git branch -d new-feature`) diff --git a/doc/HorizontalReshardingGuide.md b/doc/HorizontalReshardingGuide.md deleted file mode 100644 index f38c5563ef4..00000000000 --- a/doc/HorizontalReshardingGuide.md +++ /dev/null @@ -1,262 +0,0 @@ -This guide walks you through the process of sharding an existing unsharded -Vitess [keyspace]({% link overview/concepts.md %}#keyspace). - -## Prerequisites - -We begin by assuming you've completed the -[Getting Started]({% link getting-started/local-instance.md %}) guide, -and have left the cluster running. - -## Overview - -The sample clients in the `examples/local` folder use the following schema: - -``` sql -CREATE TABLE messages ( - page BIGINT(20) UNSIGNED, - time_created_ns BIGINT(20) UNSIGNED, - message VARCHAR(10000), - PRIMARY KEY (page, time_created_ns) -) ENGINE=InnoDB -``` - -The idea is that each page number represents a separate guestbook in a -multi-tenant app. Each guestbook page consists of a list of messages. - -In this guide, we'll introduce sharding by page number. -That means pages will be randomly distributed across shards, -but all records for a given page are always guaranteed to be on the same shard. -In this way, we can transparently scale the database to support arbitrary growth -in the number of pages. - -## Configure sharding information - -The first step is to tell Vitess how we want to partition the data. -We do this by providing a VSchema definition as follows: - -``` json -{ - "sharded": true, - "vindexes": { - "hash": { - "type": "hash" - } - }, - "tables": { - "messages": { - "column_vindexes": [ - { - "column": "page", - "name": "hash" - } - ] - } - } -} -``` - -This says that we want to shard the data by a hash of the `page` column. -In other words, keep each page's messages together, but spread pages around -the shards randomly. - -We can load this VSchema into Vitess like this: - -``` sh -vitess/examples/local$ ./lvtctl.sh ApplyVSchema -vschema "$(cat vschema.json)" test_keyspace -``` - -## Bring up tablets for new shards - -In the unsharded example, you started tablets for a shard -named *0* in *test_keyspace*, written as *test_keyspace/0*. -Now you'll start tablets for two additional shards, -named *test_keyspace/-80* and *test_keyspace/80-*: - -``` sh -vitess/examples/local$ ./sharded-vttablet-up.sh -``` - -Since the sharding key is the page number, -this will result in half the pages going to each shard, -since *0x80* is the midpoint of the -[sharding key range]({% link user-guide/sharding.md %}#key-ranges-and-partitions). - -These new shards will run in parallel with the original shard during the -transition, but actual traffic will be served only by the original shard -until we tell it to switch over. - -Check the *vtctld* web UI, or the output of `lvtctl.sh ListAllTablets test`, -to see when the tablets are ready. There should be 5 tablets in each shard. - -Once the tablets are ready, initialize replication by electing the first master -for each of the new shards: - -``` sh -vitess/examples/local$ ./lvtctl.sh InitShardMaster -force test_keyspace/-80 test-0000000200 -vitess/examples/local$ ./lvtctl.sh InitShardMaster -force test_keyspace/80- test-0000000300 -``` - -Now there should be a total of 15 tablets, with one master for each shard: - -``` sh -vitess/examples/local$ ./lvtctl.sh ListAllTablets test -### example output: -# test-0000000100 test_keyspace 0 master 10.64.3.4:15002 10.64.3.4:3306 [] -# ... -# test-0000000200 test_keyspace -80 master 10.64.0.7:15002 10.64.0.7:3306 [] -# ... -# test-0000000300 test_keyspace 80- master 10.64.0.9:15002 10.64.0.9:3306 [] -# ... -``` - -## Copy data from original shard - -The new tablets start out empty, so we need to copy everything from the -original shard to the two new ones, starting with the schema: - -``` sh -vitess/examples/local$ ./lvtctl.sh CopySchemaShard test_keyspace/0 test_keyspace/-80 -vitess/examples/local$ ./lvtctl.sh CopySchemaShard test_keyspace/0 test_keyspace/80- -``` - -Next we copy the data. Since the amount of data to copy can be very large, -we use a special batch process called *vtworker* to stream the data from a -single source to multiple destinations, routing each row based on its -*keyspace_id*: - -``` sh -vitess/examples/local$ ./sharded-vtworker.sh SplitClone test_keyspace/0 -### example output: -# I0416 02:08:59.952805 9 instance.go:115] Starting worker... -# ... -# State: done -# Success: -# messages: copy done, copied 11 rows -``` - -Notice that we've only specified the source shard, *test_keyspace/0*. -The *SplitClone* process will automatically figure out which shards to use -as the destinations based on the key range that needs to be covered. -In this case, shard *0* covers the entire range, so it identifies -*-80* and *80-* as the destination shards, since they combine to cover the -same range. - -Next, it will pause replication on one *rdonly* (offline processing) tablet -to serve as a consistent snapshot of the data. The app can continue without -downtime, since live traffic is served by *replica* and *master* tablets, -which are unaffected. Other batch jobs will also be unaffected, since they -will be served only by the remaining, un-paused *rdonly* tablets. - -## Check filtered replication - -Once the copy from the paused snapshot finishes, *vtworker* turns on -[filtered replication]({% link user-guide/sharding.md %}#filtered-replication) -from the source shard to each destination shard. This allows the destination -shards to catch up on updates that have continued to flow in from the app since -the time of the snapshot. - -When the destination shards are caught up, they will continue to replicate -new updates. You can see this by looking at the contents of each shard as -you add new messages to various pages in the Guestbook app. Shard *0* will -see all the messages, while the new shards will only see messages for pages -that live on that shard. - -``` sh -# See what's on shard test_keyspace/0: -vitess/examples/local$ ./lvtctl.sh ExecuteFetchAsDba test-0000000100 "SELECT * FROM messages" -# See what's on shard test_keyspace/-80: -vitess/examples/local$ ./lvtctl.sh ExecuteFetchAsDba test-0000000200 "SELECT * FROM messages" -# See what's on shard test_keyspace/80-: -vitess/examples/local$ ./lvtctl.sh ExecuteFetchAsDba test-0000000300 "SELECT * FROM messages" -``` - -You can run the client script again to add some messages on various pages -and see how they get routed. - -## Check copied data integrity - -The *vtworker* batch process has another mode that will compare the source -and destination to ensure all the data is present and correct. -The following commands will run a diff for each destination shard: - -``` sh -vitess/examples/local$ ./sharded-vtworker.sh SplitDiff test_keyspace/-80 -vitess/examples/local$ ./sharded-vtworker.sh SplitDiff test_keyspace/80- -``` - -If any discrepancies are found, they will be printed. -If everything is good, you should see something like this: - -``` -I0416 02:10:56.927313 10 split_diff.go:496] Table messages checks out (4 rows processed, 1072961 qps) -``` - -## Switch over to new shards - -Now we're ready to switch over to serving from the new shards. -The [MigrateServedTypes]({% link reference/vtctl.md %}#migrateservedtypes) -command lets you do this one -[tablet type]({% link overview/concepts.md %}#tablet) at a time, -and even one [cell]({% link overview/concepts.md %}#cell-data-center) -at a time. The process can be rolled back at any point *until* the master is -switched over. - -``` sh -vitess/examples/local$ ./lvtctl.sh MigrateServedTypes test_keyspace/0 rdonly -vitess/examples/local$ ./lvtctl.sh MigrateServedTypes test_keyspace/0 replica -vitess/examples/local$ ./lvtctl.sh MigrateServedTypes test_keyspace/0 master -``` - -During the *master* migration, the original shard master will first stop -accepting updates. Then the process will wait for the new shard masters to -fully catch up on filtered replication before allowing them to begin serving. -Since filtered replication has been following along with live updates, there -should only be a few seconds of master unavailability. - -When the master traffic is migrated, the filtered replication will be stopped. -Data updates will be visible on the new shards, but not on the original shard. -See it for yourself: Add a message to the guestbook page and then inspect -the database content: - -``` sh -# See what's on shard test_keyspace/0 -# (no updates visible since we migrated away from it): -vitess/examples/local$ ./lvtctl.sh ExecuteFetchAsDba test-0000000100 "SELECT * FROM messages" -# See what's on shard test_keyspace/-80: -vitess/examples/local$ ./lvtctl.sh ExecuteFetchAsDba test-0000000200 "SELECT * FROM messages" -# See what's on shard test_keyspace/80-: -vitess/examples/local$ ./lvtctl.sh ExecuteFetchAsDba test-0000000300 "SELECT * FROM messages" -``` - -## Remove original shard - -Now that all traffic is being served from the new shards, we can remove the -original one. To do that, we use the `vttablet-down.sh` script from the -unsharded example: - -``` sh -vitess/examples/local$ ./vttablet-down.sh -``` - -Then we can delete the now-empty shard: - -``` sh -vitess/examples/local$ ./lvtctl.sh DeleteShard -recursive test_keyspace/0 -``` - -You should then see in the vtctld **Topology** page, or in the output of -`lvtctl.sh ListAllTablets test` that the tablets for shard *0* are gone. - -## Tear down and clean up - -Since you already cleaned up the tablets from the original unsharded example by -running `./vttablet-down.sh`, that step has been replaced with -`./sharded-vttablet-down.sh` to clean up the new sharded tablets. - -``` sh -vitess/examples/local$ ./vtgate-down.sh -vitess/examples/local$ ./sharded-vttablet-down.sh -vitess/examples/local$ ./vtctld-down.sh -vitess/examples/local$ ./zk-down.sh -``` - diff --git a/doc/HorizontalReshardingWorkflowGuide.md b/doc/HorizontalReshardingWorkflowGuide.md deleted file mode 100644 index ff3eb8b0809..00000000000 --- a/doc/HorizontalReshardingWorkflowGuide.md +++ /dev/null @@ -1,262 +0,0 @@ -This guide shows you an example about how to apply range-based sharding -process in an existing unsharded Vitess [keyspace]({% link overview/concepts.md %}#keyspace) -using the horizontal resharding workflow. In this example, we will reshard -from 1 shard "0" into 2 shards "-80" and "80-". - -## Overview - -The horizontal resharding process mainly contains the following steps -(each step is a phase in the workflow): - -1. Copy schema from original shards to destination shards. - (**Phase: CopySchemaShard**) -1. Copy the data with a batch process called *vtworker* - (**Phase: SplitClone**). - [more details](#details-in-splitclone-phase) -1. Check filtered replication (**Phase: WaitForFilteredReplication**). - [more details](#details-in-waitforfilteredreplication-phase) -1. Check copied data integrity using *vtworker* batch process in the mode - to compare the source and destination data. (**Phase: SplitDiff**) -1. Migrate all the serving rdonly tablets in the original shards. - (**Phase: MigrateServedTypeRdonly**) -1. Migrate all the serving replica tablets in the original shards. - (**Phase: MigrateServedTypeReplica**) -1. Migrate all the serving master tablets in the original shards. - (**Phase: MigrateServedTypeMaster**) - [more details](#details-in-migrateservedtypemaste-phase) - -## Prerequisites - -You should complete the [Getting Started]({% link getting-started/local-instance.md %}) guide -(please finish all the steps before Try Vitess resharding) and have left -the cluster running. Then, please follow these steps before running -the resharding process: - -1. Configure sharding information. By running the command below, we tell - Vitess to shard the data using the page column through the provided VSchema. - - ``` sh - vitess/examples/local$ ./lvtctl.sh ApplyVSchema -vschema "$(cat vschema.json)" test_keyspace - ``` - -1. Bring up tablets for 2 additional shards: *test_keyspace/-80* and - *test_keyspace/80-* (you can learn more about sharding key range - [here]({% link user-guide/sharding.md %}#key-ranges-and-partitions)): - - ``` sh - vitess/examples/local$ ./sharded-vttablet-up.sh - ``` - - Initialize replication by electing the first master for each of the new shards: - - ``` sh - vitess/examples/local$ ./lvtctl.sh InitShardMaster -force test_keyspace/-80 test-200 - vitess/examples/local$ ./lvtctl.sh InitShardMaster -force test_keyspace/80- test-300 - ``` - - After this set up, you should see the shards on Dashboard page of vtctld UI - (http://localhost:15000). There should be 1 serving shard named "0" and - 2 non-serving shards named "-80" and "80-". Click the shard node, you can - inspect all its tablets information. - -1. Bring up a vtworker process, which can be connected through port 15033. - (The number of *vtworker* should be the same of original shards, - we start one vtworker process here since we have only one original shard - in this example.) - - ``` sh - vitess/examples/local$ ./vtworker-up.sh - ``` - - You can verify this *vtworker* process set up through http://localhost:15032/Debugging. - It should be pinged successfully. After you ping the vtworker, please click - "Reset Job". Otherwise, the vtworker is not ready for executing other tasks. - -## Horizontal resharding workflow - -### Create the workflow - -1. Open the *Workflows* section on the left menu of vtctld UI (http://localhost:15000). - Click the "+" button in the top right corner to open the "Create - a new Workflow" dialog. -1. Fill in the "Create a new Workflow" dialogue following the instructions - below (you can checkout our example [here](https://cloud.githubusercontent.com/assets/23492389/24314500/27f27988-109f-11e7-8e10-630bad14a286.png)): - * Select the "Skip Start" checkbox if you don't want to start the workflow - immediately after creation. If so, you need to click a "Start" button in - the workflow bar later to run the workflow. - * Open the "Factory Name" menu and select "Horizontal Resharding". This field - defines the type of workflow you want to create. - * Fill in *test_keyspace* in the "Keyspace" slot. - * Fill in *localhost:15033* in the "vtworker Addresses" slot. - * Unselect the "enable_approvals" checkbox if you don't want to manually - approve task executions for canarying. (We suggest you to keep the default - selected choice since this will enable the canary feature) -1. Click "Create" button at the bottom of the dialog. You will see a workflow - node created in the *Workflows* page if the creation succeeds. - The workflow has started running now if "Skip Start" is not selected. - -Another way to start the workflow is through the vtctlclient command, you can -also visualize the workflow on vtctld UI *Workflows* section after executing -the command: - -``` sh -vitess/examples/local$ ./lvtctl.sh WorkflowCreate -skip_start=false horizontal_resharding -keyspace=test_keyspace -vtworkers=localhost:15033 -enable_approvals=true -``` - -When creating the resharding workflow, the program automatically detect the -source shards and destination shards and create tasks for the resharding -process. After the creation, click the workflow node, you can see a list of -child nodes. Each child node represents a phase in the workflow (each phase -represents a step mentioned in [Overview]({% link user-guide/horizontal-sharding-workflow.md %}#overview)). -Further click a phase node, you can inspect tasks in this phase. -For example, in the "CopySchemaShard" phase, it includes tasks to copy schema -to 2 destination shards, therefore you can see task node "Shard -80" and -"Shard 80-". You should see a page similar to -[this](https://cloud.githubusercontent.com/assets/23492389/24313539/71c9c8ae-109a-11e7-9e4a-0c3e8ee8ba85.png). - -### Approvals of Tasks Execution (Canary feature) - -Once the workflow start to run (click the "Start" button if you selected -"Skip Start" and the workflow hasn't started yet.), you need to approve the -task execution for each phase if "enable_approvals" is selected. The approvals -include 2 stages. The first stage approves only the first task, which runs as -canarying. The second stage approves the remaining tasks. - -The resharding workflow runs through phases sequentially. Once the phase starts, -you can see the approval buttons for all the stages under the phase node (click -the phase node if you didn't see the approval buttons, you should see a page -like [this](https://cloud.githubusercontent.com/assets/23492389/24313613/c9508ef0-109a-11e7-8848-75a1ae18a6c5.png)). The -button is enabled when the corresponding task(s) are ready to run. Click the -enabled button to approve task execution, then you can see approved message -on the clicked button. The approval buttons are cleared after the phase has -finished. The next phase will only starts if its previous phase has finished -successfully. - -If the workflow is restored from a checkpoint, you will still see the -approval button with approved message when there are running tasks under this -approval. But you don't need to approve the same tasks again for a restarted -workflow. - -### Retry - -A "Retry" button will be enabled under the task node if the task failed (click -the task node if your job get stuck but don't see the Retry button). Click this -button if you have fixed the bugs and want to retry the failed task. You can -retry as many times as you want if the task continually failed. The workflow -can continue from your failure point once it is fixed. - -For example, you might forget to bring up a vtworker process. The task which -requires that vtworker process in SplitClone phase will fail. After you fix -this, click the retry button on the task node and the workflow will continue -to run. - -When a task failed, the execution of other tasks under this phase won't be -affected if this phase runs tasks in parallel (applied to phase -"CopySchemaShard", "SplitClone", "WaitForFilteredReplication"). For phases -that runs tasks sequentially, remaining unstarted tasks under this phase will -no long be executed. The phases afterwards will no longer be executed. - -### Checkpoint and Recovery - -The resharding workflow tracks the status for every task and checkpoint these -status into topology server whenever there is a status update. When a workflow -is stopped and restarted by loading the checkpoint in the topology, it can -continue to run all the unfinished tasks. - - -## Verify Results and Clean up - -After the resharding process, data in the original shard is identically copied -to new shards. Data updates will be visible on the new shards, but not on the -original shard. You should then see in the vtctld UI *Dashboard* page that shard -*0* becomes non-serving and shard *-80* and shard *80-* are serving shards. -Verify this for yourself: inspect the database content using following commands, -then add messages to the guestbook page (you can use script client.sh mentioned -[here]({% link getting-started/local-instance.md %}#run-a-client-application)) -and inspect using same commands: - -``` sh -# See what's on shard test_keyspace/0 -# (no updates visible since we migrated away from it): -vitess/examples/local$ ./lvtctl.sh ExecuteFetchAsDba test-100 "SELECT * FROM messages" -# See what's on shard test_keyspace/-80: -vitess/examples/local$ ./lvtctl.sh ExecuteFetchAsDba test-200 "SELECT * FROM messages" -# See what's on shard test_keyspace/80-: -vitess/examples/local$ ./lvtctl.sh ExecuteFetchAsDba test-300 "SELECT * FROM messages" -``` - -You can also checkout the *Topology* browser on vtctl UI. It shows you the -information of the keyrange of shard and their serving status. Each shard -should look like this - -[shard 0](https://cloud.githubusercontent.com/assets/23492389/24313876/072f61e6-109c-11e7-938a-23b8398958aa.png) - -[shard -80](https://cloud.githubusercontent.com/assets/23492389/24313813/bd11c824-109b-11e7-83d4-cca3f6093360.png) - -[shard 80-](https://cloud.githubusercontent.com/assets/23492389/24313743/7f9ae1c4-109b-11e7-997a-774f4f16e473.png) - -After you verify the result, we can remove the -original shard since all traffic is being served from the new shards: - -``` sh -vitess/examples/local$ ./vttablet-down.sh -``` - -Then we can delete the now-empty shard: - -``` sh -vitess/examples/local$ ./lvtctl.sh DeleteShard -recursive test_keyspace/0 -``` - -You should then see in the vtctld UI *Dashboard* page that shard *0* is gone. - -## Tear down and clean up - -Since you already cleaned up the tablets from the original unsharded example by -running `./vttablet-down.sh`, that step has been replaced with -`./sharded-vttablet-down.sh` to clean up the new sharded tablets. - -``` sh -vitess/examples/local$ ./vtworker-down.sh -vitess/examples/local$ ./vtgate-down.sh -vitess/examples/local$ ./sharded-vttablet-down.sh -vitess/examples/local$ ./vtctld-down.sh -vitess/examples/local$ ./zk-down.sh -``` - -## Reference - -You can checkout the old version tutorial [here]({% link user-guide/horizontal-sharding.md %}). -It walks you through the resharding process by manually executing commands. - -### Details in SplitClone phase - -*vtworker* copies data from a paused snapshot. It will pause replication on -one rdonly (offline processing) tablet to serve as a consistent snapshot of -the data. The app can continue without downtime, since live traffic is served -by replica and master tablets, which are unaffected. Other batch jobs will -also be unaffected, since they will be served only by the remaining, un-paused -rdonly tablets. - -During the data copying, *vtworker* streams the data from a single source to -multiple destinations, routing each row based on its *keyspace_id*. It can -automatically figure out which shards to use as the destinations based on the -key range that needs to be covered. In our example, shard 0 covers the entire -range, so it identifies -80 and 80- as the destination shards, since they -combine to cover the same range. - -### Details in WaitForFilteredReplication phase - -Once the copying from a paused snapshot (phase SplitClone) has finished, -*vtworker* turns on [filtered replication]({% link user-guide/sharding.md %}#filtered-replication), -which allows the destination shards to catch up on updates that have continued -to flow in from the app since the time of the snapshot. After the destination -shards are caught up, they will continue to replicate new updates. - -### Details in MigrateServedTypeMaster phase - -During the *master* migration, the original shard masters will first stop -accepting updates. Then the process will wait for the new shard masters to -fully catch up on filtered replication before allowing them to begin serving. -After the master traffic is migrated, the filtered replication will be stopped. -Data updates will be visible on the new shards, but not on the original shards. diff --git a/doc/Messaging.md b/doc/Messaging.md deleted file mode 100644 index f605002c49d..00000000000 --- a/doc/Messaging.md +++ /dev/null @@ -1,209 +0,0 @@ -# Vitess Messaging - -## Overview - -Vitess messaging gives the application an easy way to schedule and manage work -that needs to be performed asynchronously. Under the covers, messages are -stored in a traditional MySQL table and therefore enjoy the following -properties: - -* **Scalable**: Because of vitess's sharding abilities, messages can scale to - very large QPS or sizes. -* **Guaranteed delivery**: A message will be indefinitely retried until a - successful ack is received. -* **Non-blocking**: If the sending is backlogged, new messages continue to be - accepted for eventual delivery. -* **Adaptive**: Messages that fail delivery are backed off exponentially. -* **Analytics**: The retention period for messages is dictated by the - application. One could potentially choose to never delete any messages and - use the data for performing analytics. -* **Transactional**: Messages can be created or acked as part of an existing - transaction. The action will complete only if the commit succeeds. - -The properties of a message are chosen by the application. However, every -message needs a uniquely identifiable key. If the messages are stored in a -sharded table, the key must also be the primary vindex of the table. - -Although messages will generally be delivered in the order they're created, -this is not an explicit guarantee of the system. The focus is more on keeping -track of the work that needs to be done and ensuring that it was performed. -Messages are good for: - -* Handing off work to another system. -* Recording potentially time-consuming work that needs to be done - asynchronously. -* Scheduling for future delivery. -* Accumulating work that could be done during off-peak hours. - -Messages are not a good fit for the following use cases: - -* Broadcasting of events to multiple subscribers. -* Ordered delivery. -* Real-time delivery. - -## Creating a message table - -The current implementation requires a fixed schema. This will be made more -flexible in the future. There will also be a custom DDL syntax. For now, a -message table must be created like this: - -``` -create table my_message( - time_scheduled bigint, - id bigint, - time_next bigint, - epoch bigint, - time_created bigint, - time_acked bigint, - message varchar(128), - primary key(time_scheduled, id), - unique index id_idx(id), - index next_idx(time_next, epoch) -) comment 'vitess_message,vt_ack_wait=30,vt_purge_after=86400,vt_batch_size=10,vt_cache_size=10000,vt_poller_interval=30' -``` - -The application-related columns are as follows: - -* `id`: can be any type. Must be unique. -* `message`: can be any type. -* `time_scheduled`: must be a bigint. It will be used to store unix time in - nanoseconds. If unspecified, the `Now` value is inserted. - -The above indexes are recommended for optimum performance. However, some -variation can be allowed to achieve different performance trade-offs. - -The comment section specifies additional configuration parameters. The fields -are as follows: - -* `vitess_message`: Indicates that this is a message table. -* `vt_ack_wait=30`: Wait for 30s for the first message ack. If one is not - received, resend. -* `vt_purge_after=86400`: Purge acked messages that are older than 86400 - seconds (1 day). -* `vt_batch_size=10`: Send up to 10 messages per RPC packet. -* `vt_cache_size=10000`: Store up to 10000 messages in the cache. If the demand - is higher, the rest of the items will have to wait for the next poller cycle. -* `vt_poller_interval=30`: Poll every 30s for messages that are due to be sent. - -If any of the above fields are missing, vitess will fail to load the table. No -operation will be allowed on a table that has failed to load. - -## Enqueuing messages - -The application can enqueue messages using an insert statement: - -``` -insert into my_message(id, message) values(1, 'hello world') -``` - -These inserts can be part of a regular transaction. Multiple messages can be -inserted to different tables. Avoid accumulating too many big messages within a -transaction as it consumes memory on the VTTablet side. At the time of commit, -memory permitting, all messages are instantly enqueued to be sent. - -Messages can also be created to be sent in the future: - -``` -insert into my_message(id, message, time_scheduled) values(1, 'hello world', :future_time) -``` - -`future_time` must be the unix time expressed in nanoseconds. - -## Receiving messages - -Processes can subscribe to receive messages by sending a `MessageStream` -request to VTGate. If there are multiple subscribers, the messages will be -delivered in a round-robin fashion. Note that this is not a broadcast; Each -message will be sent to at most one subscriber. - -The format for messages is the same as a vitess `Result`. This means that -standard database tools that understand query results can also be message -recipients. Currently, there is no SQL format for subscribing to messages, but -one will be provided soon. - -### Subsetting - -It's possible that you may want to subscribe to specific shards or groups of -shards while requesting messages. This is useful for partitioning or load -balancing. The `MessageStream` API allows you to specify these constraints. The -request parameters are as follows: - -* `Name`: Name of the message table. -* `Keyspace`: Keyspace where the message table is present. -* `Shard`: For unsharded keyspaces, this is usually "0". However, an empty - shard will also work. For sharded keyspaces, a specific shard name can be - specified. -* `KeyRange`: If the keyspace is sharded, streaming will be performed only from - the shards that match the range. This must be an exact match. - -## Acknowledging messages - -A received (or processed) message can be acknowledged using the `MessageAck` -API call. This call accepts the following parameters: - -* `Name`: Name of the message table. -* `Keyspace`: Keyspace where the message table is present. This field can be - empty if the table name is unique across all keyspaces. -* `Ids`: The list of ids that need to be acked. - -Once a message is successfully acked, it will never be resent. - -## Exponential backoff - -A message that was successfully sent will wait for the specified ack wait time. -If no ack is received by then, it will be resent. The next attempt will be 2x -the previous wait, and this delay is doubled for every attempt. - -## Purging - -Messages that have been successfully acked will be deleted after their age -exceeds the time period specified by `vt_purge_after`. - -## Advanced usage - -The `MessageAck` functionality is currently an API call and cannot be used -inside a transaction. However, you can ack messages using a regular DML. It -should look like this: - -``` -update my_message set time_acked = :time_acked, time_next = null where id in ::ids and time_acked is null -``` - -You can manually change the schedule of existing messages with a statement like -this: - -``` -update my_message set time_next = :time_next, epoch = :epoch where id in ::ids and time_acked is null -``` - -This comes in handy if a bunch of messages had chronic failures and got -postponed to the distant future. If the root cause of the problem was fixed, -the application could reschedule them to be delivered immediately. You can also -optionally change the epoch. Lower epoch values increase the priority of the -message and the back-off is less aggressive. - -You can also view messages using regular `select` queries. - -## Undocumented features - -These are features that were previously known limitations, but have since been supported -and are awaiting further documentation. - -* Flexible columns: Allow any number of application defined columns to be in - the message table. -* No ACL check for receivers: To be added. -* Monitoring support: To be added. -* Dropped tables: The message engine does not currently detect dropped tables. - -## Known limitations - -The message feature is currently in alpha, and can be improved. Here is the -list of possible limitations/improvements: - -* Proactive scheduling: Upcoming messages can be proactively scheduled for - timely delivery instead of waiting for the next polling cycle. -* Changed properties: Although the engine detects new message tables, it does - not refresh properties of an existing table. -* A `SELECT` style syntax for subscribing to messages. -* No rate limiting. -* Usage of partitions for efficient purging. diff --git a/doc/Monitoring.md b/doc/Monitoring.md deleted file mode 100644 index aa1a163d17a..00000000000 --- a/doc/Monitoring.md +++ /dev/null @@ -1,43 +0,0 @@ -# Vitess Monitoring - -This page explains the current state of Vitess metrics monitoring, and potential future work in the area. - -## Current state of monitoring - -There are currently three main ways that a Vitess cluster can be monitored. Depending on your needs, you can use any of the following methods: - -### 1. Vitess status pages - -The status HTML pages of various Vitess components can be accessed by pointing your browser to `http://:/debug/status`. The status pages will often display some basic, but useful, information for monitoring. For example, the status page of a vttablet will show the QPS graph for the past few minutes. - -Viewing a status page can be useful since it works out of the box, but it only provides very basic monitoring capabilities. - -### 2. Pull-based metrics system - -Vitess uses Go’s [expvar package](https://golang.org/pkg/expvar/) to expose various metrics, with the expectation that a user can configure a pull-based metrics system to ingest those metrics. Metrics are published to `http://:/debug/vars` as JSON key-value pairs, which should be easy for any metrics system to parse. - -Scraping Vitess variables is a good way to integrate Vitess into an existing monitoring system, and is useful for building up detailed monitoring dashboards. It is also the officially supported way for monitoring Vitess. - -### 3. Push-based metrics system - -Vitess also includes support for push-based metrics systems via plug-ins. Each Vitess component would need to be run with the `--emit_stats` flag. - -By default, the stats_emit_period is 60s, so each component will push stats to the selected backend every minute. This is configurable via the `--stats_emit_period` flag. - -Vitess has preliminary plug-ins to support OpenTSDB as a push-based metrics backend. - -It should be fairly straightforward to write your own plug-in, if you want to support a different backend. The plug-in package simply needs to implement the `PushBackend` interface of the `stats` package. For an example, you can see the [OpenTSDB plugin](https://github.com/vitessio/vitess/blob/master/go/stats/opentsdb/opentsdb.go). - -Once you’ve written the backend plug-in, you also need to register the plug-in from within all the relevant Vitess binaries. An example of how to do this can be seen in [this pull request](https://github.com/vitessio/vitess/pull/469). - -You can then specify that Vitess should publish stats to the backend that you’re targeting by using the `--stats_backend` flag. - -Connecting Vitess to a push-based metrics system can be useful if you’re already running a push-based system that you would like to integrate into. More discussion on using a push vs pull based monitoring system can be seen here: [http://www.boxever.com/push-vs-pull-for-monitoring](https://www.boxever.com/push-vs-pull-for-monitoring) - -## Monitoring with Kubernetes - -The existing methods for integrating metrics are not supported in a Kubernetes environment by the Vitess team yet, but are on the roadmap for the future. However, it should be possible to get the Prometheus backend working with Kubernetes, similar to how [Heapster for Kubernetes works](https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/prometheus). - -In the meantime, if you run into issues or have questions, please post on our [forum](https://groups.google.com/forum/#!forum/vitess). - - diff --git a/doc/MySQLServerProtocol.md b/doc/MySQLServerProtocol.md deleted file mode 100644 index fc52b1638b4..00000000000 --- a/doc/MySQLServerProtocol.md +++ /dev/null @@ -1,17 +0,0 @@ -# MySQL Binary Protocol - -Vitess supports MySQL binary protocol. This allows existing applications to connect to Vitess directly without any change, or without using a new driver or connector. This is now the recommended and the most popular protocol for connecting to Vitess. - -# Features of RPC protocol not supported by SQL protocol - -### Bind Variables -The RPC protocol supports bind variables which allows Vitess to cache query plans providing much better execution times. - -### Event Tokens -The RPC protocols allows you to use event tokens to get the latest binlog position. These can be used for cache invalidation. - -### Update Stream -Update stream allows you to subscribe to changing rows. - -### Query Multiplexing -Ability to multiplex multiple request/responses on the same TCP connection. \ No newline at end of file diff --git a/doc/Production.md b/doc/Production.md deleted file mode 100644 index 1b49fca93b9..00000000000 --- a/doc/Production.md +++ /dev/null @@ -1,34 +0,0 @@ -# Production setup -Setting up vitess in production will depend on many factors. -Here are some initial considerations: - -* *Global Transaction IDs*: Vitess requires a version of MySQL -that supports GTIDs. -We currently support MariaDB 10.0 and MySQL 5.6. -* *Firewalls*: Vitess tools and servers assume that they -can open direct TCP connection to each other. If you have -firewalls between your servers, you may have to add exceptions -to allow these communications. -* *Authentication*: If you need authentication, you -need to setup SASL, which is supported by Vitess. -* *Encryption:* Vitess RPC servers support SSL. -* *MySQL permissions*: Vitess currently assumes that all -application clients have uniform permissions. -The connection pooler opens a number of connections under -the same user (vt_app), and rotates them for all requests. -Vitess management tasks use a different user name (vt_dba), -which is assumed to have all administrative privileges. -* *Client Language*: We currently support -Python and Go. -It's not too hard to add support for more languages, -and we are open to contributions in this area. - -## Deploying in Kubernetes - -See the [Getting Started]({% link getting-started/index.md %}) guide. - -## Deploying on bare metal - -See the -[Local Setup](https://github.com/vitessio/vitess/tree/master/examples/local) -scripts for examples of how to bring up a Vitess cluster manually. diff --git a/doc/ProductionPlanning.md b/doc/ProductionPlanning.md deleted file mode 100644 index 4f0ab2d9d15..00000000000 --- a/doc/ProductionPlanning.md +++ /dev/null @@ -1,73 +0,0 @@ -## Provisioning - -### Estimating total resources - -Although Vitess helps you scale indefinitely, the various layers do consume CPU and memory. Currently, the cost of Vitess servers is dominated by the RPC framework which we use: gRPC (gRPC is a relatively young product). So, Vitess servers are expected to get more efficient over time as there are improvements in gRPC as well as the Go runtime. For now, you can use the following rules of thumb to budget resources for Vitess: - -Every MySQL instance that serves traffic requires one VTTablet, which is in turn expected to consume an equal amount of CPU. So, if MySQL consumes 8 CPUs, VTTablet is likely going to consume another 8. - -The memory consumed by VTTablet depends on QPS and result size, but you can start off with the rule of thumb of requesting 1 GB/CPU. - -As for VTGate, double the total number of CPUs you’ve allocated for VTTablet. That should be approximately how much the VTGates are expected to consume. In terms of memory, you should again budget about 1 GB/CPU (needs verification). - -Vitess servers will use disk space for their logs. A smoothly running server should create very little log spam. However, log files can grow big very quickly if there are too many errors. It will be wise to run a log purger daemon if you’re concerned about filling up disk. - -Vitess servers are also likely to add about 2 ms of round-trip latency per MySQL call. This may result in some hidden costs that may or may not be negligible. On the app side, if a significant time is spent making database calls, then you may have to run additional threads or workers to compensate for the delay, which may result in additional memory requirements. - -The client driver CPU usage may be different from a normal MySQL driver. That may require you to allocate more CPU per app thread. - -On the server side, this could result in longer running transactions, which could weigh down MySQL. - -With the above numbers as starting point, the next step will be to set up benchmarks that generate production representative load. If you cannot afford this luxury, you may have to go into production with some over-provisioning, just in case. - -### Mapping topology to hardware - -The different Vitess components have different resource requirements e.g. vtgate requires little disk in comparison to vttablet. Therefore, the components should be mapped to different machine classes for optimal resource usage. If you’re using a cluster manager (such as Kubernetes), the automatic scheduler will do this for you. Otherwise, you have to allocate physical machines and plan out how you’re going to map servers onto them. - -Machine classes needed: - -#### MySQL + vttablet - -You’ll need database-class machines that are likely to have SSDs, and enough RAM to fit the MySQL working set in buffer cache. Make sure that there will be sufficient CPU left for VTTablet to run on them. - -The VTTablet provisioning will be dictated by the MySQL instances they run against. However, soon after launch, it’s recommended to shard these instances to a data size of 100-300 GB. This should also typically reduce the per-MySQL CPU usage to around 2-4 CPUS depending on the load pattern. - -#### VTGate - -For VTGates, you’ll need a class of machines that would be CPU heavy, but may be light on memory usage, and should require normal hard disks, for binary and logs only. - -It’s advisable to run more instances than there are machines. VTGates are happiest when they’re consuming between 2-4 CPUs. So, if your total requirement was 400 CPUs, and your VTGate class machine has 48 cores each, you’ll need about 10 such machines and you’ll be running about 10 VTGates per box. - -You may have to add a few more app class machines to absorb any additional CPU and latency overheads. - -## Lock service setup - -The Lock Service should be running, and both the global and local instances -should be up. See the -[Topology Service]({% link user-guide/topology-service.md %}) -document for more information. - -Each lock service implementation supports a couple configuration command line -parameters, they need to be specified for each Vitess process. - -For sizing purposes, the Vitess processes do not access the lock service very -much. Each *vtgate* process keeps a few watches on a few local nodes (VSchema -and SrvKeyspace). Each *vttablet* process will keep its own Tablet record up to -date, but it usually doesn't change. The *vtctld* process will access it a lot -more, but only on demand to display web pages. - -As mentioned previously, if the setup is only in one cell, the global and local -instances can be combined. Just use different top-level directories. - -## Production testing - -Before running Vitess in production, please make yourself comfortable first with the different operations. We recommend to go through the following scenarios on a non-production system. - -Here is a short list of all the basic workflows Vitess supports: - -* [Failover / Reparents]({% link user-guide/reparenting.md %}) -* [Backup/Restore]({% link user-guide/backup-and-restore.md %}) -* [Schema Management]({% link user-guide/schema-management.md %}) / [Schema Swap]({% link user-guide/schema-swap.md %}) -* [Resharding]({% link user-guide/sharding.md %}) / [Horizontal Resharding Tutorial]({% link user-guide/horizontal-sharding.md %}) -* [Upgrading]({% link user-guide/upgrading.md %}) - diff --git a/doc/ReferenceTables.md b/doc/ReferenceTables.md deleted file mode 100644 index ea262f5d695..00000000000 --- a/doc/ReferenceTables.md +++ /dev/null @@ -1,153 +0,0 @@ -# Reference Tables - -This document describes a proposed design and implementation guidelines for -the `Reference Tables` Vitess feature. - -The idea is to have a `reference keyspace` that contains a small number of -`reference tables`, and replicate these tables to every shard of another -keyspace, the `destination keyspace`. Any update to the reference tables will be -propagated to the destination keyspace. The reference tables in the destination -keyspace can then be used directly, in read-only mode (in `JOIN` queries for -instance). This provides for much better performance than cross-keyspace joins. - -Since the data is replicated to every shard on the destination keyspace, the -write QPS on the reference keyspace is also applied to every shard on the -destination keyspace. So the change rate in the reference keyspace cannot be -very high, and so let's also assume it is not sharded. - -Vitess already has all the right components to support this scenario, it's just -a matter of plumbing it the right way. Let's explore the required changes. - -## Replication Setup - -We can copy all the data and then setup `Filtered Replication` between the -reference keyspace and each shard of the destination keyspace. This is really -just a corner case of the vertical splits Vitess already supports. - -Action items: - -* First, this setup probably needs to be explicitly mentioned somewhere in the - topology, not just as SourceShard objects in the destination keyspace, so - Vitess can know about this setup at a higher level. Let's add a `repeated - ReferenceKeyspace` field to the Keyspace object. Each `ReferenceKeyspace` - object contains the name of the reference keyspace, the list of tables to - copy, and the UID of the SourceShard entry (the same UID in all shards). By - making this a repeated field, the destination keyspace should be able to - support multiple reference keyspaces to copy data from, if necessary. - -* `vtctl CopySchemaShard` can already be used to copy the schema from the - reference keyspace to each destination shard. - -* A new vtworker data copy job needs to be added. `vtworker VerticalSplitClone` - would be a good start, but the new copy has a few special requirements: the - destination keyspace needs the data in all its shards, and the write rate - cannot cause the destination shards to be overloaded (or lag behind on - replication). This job would also populate an entry in the - `\_vt/blp\_checkpoint` table in the destination shards. - -* Setting up Filtered Replication after the copy is easy, each destination Shard - just needs to have a SourceShard with the proper data, and after a - RefreshTablet, the destination masters will start the replication. - -All these steps can be supported by a vtctld workflow. - -## Supporting Horizontal Resharding in the Destination Keyspace - -We still need to support horizontal resharding in the Destination Keyspace while -the Reference Tables feature is enabled. - -Action items: - -* Each step of the process would know what to do because of the - `ReferenceKeyspace` entries in the destination keyspace. - -* `vtctl CopySchemaShard` needs to also copy the schema of the reference tables. - -* `vtworker SplitClone` needs to also copy all of the reference table data, and - the `\_vt/blp\_checkpoint` entry for the reference keyspace. It needs to do - that copy from the first source shard to each destination shard only once. So - in case of a split, the source shard data is copied to each destination - shard. In case of a merge, only the first source shard data is copied to the - destination shard. - -* Enabling filtered replication on the destination shards needs to not use the - same UID for replication as the reference keyspace entries. Right now, their - UID are hardcoded to start at 0. But since the reserved UIDs are documented in - the `ReferenceKeyspace` entries, it's easy. - -* At this point, the destination shards will also replicate from the reference - keyspace. When the `vtctl MigrateServedType master` command is issued, it - needs to just remove the horizontal resharding Filtered Replication entries, - not the `ReferenceKeyspace` entries entries. - -## Other Use Cases - -Other scenarios might also need to be supported, or explicitly disabled: - -* Simple schema changes, or complicated Schema Swap in the reference keyspace: - They would also need to be applied to the destination keyspace, the same way. - -* Vertical Split of the reference keyspace: Since it is replicated, splitting it - will be more complicated. - -## Query Routing - -This would be handled by the vtgate and the VSchema. Once the reference tables -are documented in the VSchema, vtgate will know to do the following: - -* DMLs on the reference tables are routed to the reference keyspace. - -* Select queries on the reference tables only are also routed to the reference - keyspace. - -* JOIN queries between reference tables and destination keyspace tables can be - routed only to the right destination keyspace (based on that keyspace sharding - situation). - -Note this introduces some corner cases: for instance, if the client is asking -for a JOIN between reference tables and destination keyspace tables, with tablet -type `master`. Routing this to the destination keyspace would satisfy the -critical read for the destination tables, but not for the reference -tables. vtgate may need to perform the JOIN to both masters at this point. - -Action Items: - -* Find the right way to represent reference tables in the VSchema. - -* Implement corresponding query routing. - -## Notes - -### Vitess Keyspace vs MySQL Database - -This may force us to revisit the use of databases in our tablets. The current -assumption is that a keyspace only has one MySQL database (with a name usually -derived from the keyspace name with a `vt_` prefix, but that can also be -changed): - -* When vttablet connects to MySQL for data queries, it uses that database name - by default. - -* The VSchema also maps tables to keyspaces, so it can just send queries that - have no keyspace to the right shard (which in turns is configured properly for - that database). - -* Vitess' Filtered Replication only replicates data related to that single - database. The database name has to be the same when we horizontally split a - keyspace, so statements from the source shards can be applied on the - destination shards. - -* Vitess' Query Service only loads the schema for that single database. - -Maybe it's time to change this assumption: - -* A keyspace could be defined as a group of databases, each having a group of - tables. - -* When addressing a table, we could support the `keyspace.database.table` - syntax. - -* We could support moving databases from one keyspace to another. - -But maybe this is too many indirections for nothing? Saying one keyspace is one -database may be just the complexity we need. diff --git a/doc/Reparenting.md b/doc/Reparenting.md deleted file mode 100644 index 5f0cf0ae35a..00000000000 --- a/doc/Reparenting.md +++ /dev/null @@ -1,185 +0,0 @@ -**Reparenting** is the process of changing a shard's master tablet -from one host to another or changing a slave tablet to have a -different master. Reparenting can be initiated manually -or it can occur automatically in response to particular database -conditions. As examples, you might reparent a shard or tablet during -a maintenance exercise or automatically trigger reparenting when -a master tablet dies. - -This document explains the types of reparenting that Vitess supports: - -* *[Active reparenting](#active-reparenting)* occurs when the Vitess - toolchain manages the entire reparenting process. -* *[External reparenting](#external-reparenting)* occurs when another tool - handles the reparenting process, and the Vitess toolchain just updates its - topology server, replication graph, and serving graph to accurately reflect - master-slave relationships. - -**Note:** The InitShardMaster command defines the initial -parenting relationships within a shard. That command makes the specified -tablet the master and makes the other tablets in the shard slaves that -replicate from that master. - -## MySQL requirements - -### GTIDs -Vitess requires the use of global transaction identifiers -([GTIDs](https://dev.mysql.com/doc/refman/5.6/en/replication-gtids-concepts.html)) for its operations: - -* During active reparenting, Vitess uses GTIDs to initialize the - replication process and then depends on the GTID stream to be - correct when reparenting. (During external reparenting, Vitess - assumes the external tool manages the replication process.) -* During resharding, Vitess uses GTIDs for - [filtered replication]({% link user-guide/sharding.md %}#filtered-replication), - the process by which source tablet data is transferred to the proper - destination tablets. - -### Semisynchronous replication - -Vitess does not depend on -[semisynchronous replication](https://dev.mysql.com/doc/refman/5.6/en/replication-semisync.html) but does work if it is implemented. -Larger Vitess deployments typically do implement semisynchronous replication. - -## Active Reparenting - -You can use the following [vtctl]({% link reference/vtctl.md %}) -commands to perform reparenting operations: - -* PlannedReparentShard -* EmergencyReparentShard - -Both commands lock the Shard record in the global topology server. The two commands -cannot run in parallel, nor can either command run in parallel with the -InitShardMaster command. - -The two commands are both dependent on the global topology server being -available, and they both insert rows in the topology server's -\_vt.reparent\_journal table. As such, you can review -your database's reparenting history by inspecting that table. - -### PlannedReparentShard: Planned reparenting - -The PlannedReparentShard command reparents a healthy master -tablet to a new master. The current and new master must both be up and -running. - -This command performs the following actions: - -1. Puts the current master tablet in read-only mode. -1. Shuts down the current master's query service, which is the part of - the system that handles user SQL queries. At this point, Vitess does - not handle any user SQL queries until the new master is configured - and can be used a few seconds later. -1. Retrieves the current master's replication position. -1. Instructs the master-elect tablet to wait for replication data and - then begin functioning as the new master after that data is fully - transferred. -1. Ensures replication is functioning properly via the following steps: - 1. On the master-elect tablet, insert an entry in a test table - and then update the global Shard object's - MasterAlias record. - 1. In parallel on each slave, including the old master, set the new - master and wait for the test entry to replicate to the slave tablet. - (Slave tablets that had not been replicating before the command was - called are left in their current state and do not start replication - after the reparenting process.) - 1. Start replication on the old master tablet so it catches up to the - new master. - -In this scenario, the old master's tablet type transitions to -spare. If health checking is enabled on the old master, -it will likely rejoin the cluster as a replica on the next health -check. To enable health checking, set the -target\_tablet\_type parameter when starting a tablet. -That parameter indicates what type of tablet that tablet tries to be -when healthy. When it is not healthy, the tablet type changes to -spare. - -### EmergencyReparentShard: Emergency reparenting - -The EmergencyReparentShard command is used to force -a reparent to a new master when the current master is unavailable. -The command assumes that data cannot be retrieved from the current -master because it is dead or not working properly. - -As such, this command does not rely on the current master at all -to replicate data to the new master. Instead, it makes sure that -the master-elect is the most advanced in replication within all -of the available slaves. - -**Important:** Before calling this command, you must first identify -the slave with the most advanced replication position as that slave -must be designated as the new master. You can use the -[vtctl ShardReplicationPositions]({% link reference/vtctl.md %}#shardreplicationpositions) -command to determine the current replication positions of a shard's slaves. - -This command performs the following actions: - -1. Determines the current replication position on all of the slave - tablets and confirms that the master-elect tablet has the most - advanced replication position. -1. Promotes the master-elect tablet to be the new master. In addition to - changing its tablet type to master, the master-elect - performs any other changes that might be required for its new state. -1. Ensures replication is functioning properly via the following steps: - 1. On the master-elect tablet, Vitess inserts an entry in a test table - and then updates the MasterAlias record of the global - Shard object. - 1. In parallel on each slave, excluding the old master, Vitess sets the - master and waits for the test entry to replicate to the slave tablet. - (Slave tablets that had not been replicating before the command was - called are left in their current state and do not start replication - after the reparenting process.) - -## External Reparenting - -External reparenting occurs when another tool handles the process -of changing a shard's master tablet. After that occurs, the tool -needs to call the -[vtctl TabletExternallyReparented]({% link reference/vtctl.md %}#tabletexternallyreparented) -command to ensure that the topology server, replication graph, and serving -graph are updated accordingly. - -That command performs the following operations: - -1. Locks the shard in the global topology server. -1. Reads the Shard object from the global topology server. -1. Reads all of the tablets in the replication graph for the shard. - Vitess does allow partial reads in this step, which means that Vitess - will proceed even if a data center is down as long as the data center - containing the new master is available. -1. Ensures that the new master's state is updated correctly and that the - new master is not a MySQL slave of another server. It runs the MySQL - show slave status command, ultimately aiming to confirm - that the MySQL reset slave command already executed on - the tablet. -1. Updates, for each slave, the topology server record and replication - graph to reflect the new master. If the old master does not return - successfully in this step, Vitess changes its tablet type to - spare to ensure that it does not interfere with ongoing - operations. -1. Updates the Shard object to specify the new master. - -The TabletExternallyReparented command fails in the following -cases: - -* The global topology server is not available for locking and - modification. In that case, the operation fails completely. - -Active reparenting might be a dangerous practice in any system -that depends on external reparents. You can disable active reparents -by starting vtctld with the ---disable\_active\_reparents flag set to true. -(You cannot set the flag after vtctld is started.) - -## Fixing Replication - -A tablet can be orphaned after a reparenting if it is unavailable -when the reparent operation is running but then recovers later on. -In that case, you can manually reset the tablet's master to the -current shard master using the -[vtctl ReparentTablet]({% link reference/vtctl.md %}#reparenttablet) -command. You can then restart replication on the tablet if it was stopped -by calling the [vtctl StartSlave]({% link reference/vtctl.md %}#startslave) -command. diff --git a/doc/RowBasedReplication.md b/doc/RowBasedReplication.md deleted file mode 100644 index f4bba3611d2..00000000000 --- a/doc/RowBasedReplication.md +++ /dev/null @@ -1,168 +0,0 @@ -# Row Based Replication - -In Vitess 2.2, we are adding preliminary support for Row Based Replication. This -document explains how we are managing it and how it affects various Vitess -features. - -See the [Vitess and Replication]({% link user-guide/vitess-replication.md %}) document -for an introduction on various types of replication and how it affects Vitess. - -## MySQL Row Based Replication - -With Row Based replication, a more compact binary version of the rows affected -are sent through the replication stream, instead of the SQL statements. The -slaves then do not spend any time parsing the SQL, or performing any complex SQL -operations (like `where` clauses). They can just apply the new rows directly. - -A few binlog events are used: - -* Table Map event: describes a table that is affected by the next - events. Contains the database and table name, the number of columns, and the - Type for each column. It does not contain the individual column names, nor the - flags for each column (so it is impossible to differentiate signed vs unsigned - integers for instance). - -* Write Rows: equivalent of Insert. - -* Update Rows: change the values of some rows. - -* Delete Rows: delete the provided rows. - -The -[`binlog-row-image` option](https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html#sysvar_binlog_row_image) can -be used to control which rows are used to identify the columns for the Update -and Delete Rows events. The default setting for that option is to log all -columns. - -## Vitess Use of MySQL Replication Stream - -Vitess uses the Replication Stream in a number of places. This part explains how -we use RBR for these. - -### vttablet Replication Stream Watcher - -This is enabled by the `watch_replication_stream` option, and is used -by [Update Stream]({% link user-guide/update-stream.md %}). It only cares about the -GTIDs for the events, so it is unaffected by the use of RBR. - -*Note*: the current vttablet also reloads the schema when it sees a DDL in the -stream. See below for more information on this. DDLs are however not represented -in RBR, so this is an orthogonal issue. - -### Update Stream - -The current implementation uses comments in the original SQL (in SQR) to provide -the primary key of the column that is being changed. - -We are changing this to also parse the RBR events, and extract the primary key -value. - -*Note*: this means we need accurate schema information. See below. - -### Filtered Replication - -This is used during horizontal and vertical resharding, to keep source and -destination shards up to date. - -We need to transform the RBR events into SQL statements, filter them based -either on keyspace_id (horizontal resharding) or table name (vertical -resharding), and apply them. - -For horizontal splits, we need to understand the VSchema to be able to find the -primary VIndex used for sharding. - -*Note*: this again means we need accurate schema information. We could do one of -two things: - -* Send all statements to all destination shards, and let them do the - filtering. They can have accurate schema information if they receive and apply - all schema changes through Filtered Replication. - -* Have the filtering be done on the stream server side, and assume the schema - doesn't change in incompatible ways. As this is simpler for now, that's the - option we're going with. - -## Database Schema Considerations - -### Interpreting RBR Events - -A lot of the work to interpret RBR events correctly requires knowledge of the -table's schema. However, this introduces the possibility of inconsistencies -during schema changes: the current schema for a table might be newer than the -schema an older replication stream event was using. - -For the short term, Vitess will not deal very gracefully with this scenario: we -will only support the case where the current schema for a table has exactly the -same columns as all events in the binlog, plus some other optional columns that -are then unused. That way, it is possible to add columns to tables without -breaking anything. - -Note if the main use case is Filtered Replication for resharding, this -limitation only exists while the resharding process is running. It is somewhat -easy to not change the schema at the same time as resharding is on-going. - -### Applying Schema Changes - -When using -RBR, [Schema Swap]({% link user-guide/vitess-replication.md %}#vitess-schema-swap) -becomes useless, as replication between hosts with different schemas will most -likely break. This is however an existing limitation that is already known and -handled by MySQL DBAs. - -Vitess at this point does not provide an integrated way of applying involved -schema changes through RBR. A number of external tools however already exist to -handle this case, like [gh-ost](https://github.com/github/gh-ost). - -We have future plans to: - -* Integrate with a tool like gh-ost to provide a seamless schema change story. - -* Maintain a history of the schema changes that happen on all shards, so events - can be parsed correctly in all cases. - -## Unsupported Features - -This part describes the features that are not supported for RBR in Vitess as of -March 2017: - -* *Fractional timestamps for MariaDB*: not supported. This affects the objects - of type `TIMESTAMP`, `TIME` and `DATETIME`. The way that feature is - implemented in MariaDB, the binary logs do not contain enough information to - be parsed, but instead MariaDB relies on the schema knowledge. This is very - fragile. MySQL 5.6+ added new data types, and these are supported. - -* *JSON type in MySQL 5.7+*: the representation of these in the binlogs is a - blob containing indexed binary data. Re-building the SQL version of the data, - so it can be re-inserted during resharding, is not supported yet. It wouldn't - however be a lot of work, with other libraries also supporting this, and the - C++ MySQL code being well written and easy to read. See for instance - https://github.com/shyiko/mysql-binlog-connector-java/pull/119 - -* *Timezones support*: the binary logs store timestamps in UTC. When converting - these to SQL, we print the UTC value. If the server is not in UTC, that will - result in data corruption. *Note*: we are working on a fix for that one. - -## Update Stream Extensions - -[Update Stream]({% link user-guide/update-stream.md %}) can be changed to contain both -old and new values of the rows being changed. Again the values will depend on -the schema. We will also make this feature optional, so if the client is using -this for Primary Key based cache invalidation for instance, no extra unneeded -data is sent. - -This can be used to re-populate a cache with Update Stream, instead of -invalidating it, by putting the new values directly in there. - -Then, using this in conjunction with `binlog-row-image` would help provide a -feature-complete way of always getting all changes on rows. It would also help -handle Update Stream corner cases that replay events during resharding, when -switching traffic from old to new shards. - -## Vttablet Simplifications - -A lot of the work done by vttablet now is to find the Primary Key of the -modified rows, to rewrite the queries in an efficient way and tag each statement -with the Primary Key. None of this may be necessary with RBR. - -We plan to eventually add a `rbr_mode` flag to vttablet to disable all the -things it can skip if RBR is used. diff --git a/doc/ScalabilityPhilosophy.md b/doc/ScalabilityPhilosophy.md deleted file mode 100644 index f9ad7b5a6c2..00000000000 --- a/doc/ScalabilityPhilosophy.md +++ /dev/null @@ -1,247 +0,0 @@ -Scalability problems can be solved using many approaches. This document describes Vitess’ approach to address these problems. - -## Small instances - -When deciding to shard or break databases up into smaller parts, it’s tempting to break them just enough that they fit in one machine. In the industry, it’s common to run only one MySQL instance per host. - -Vitess recommends that instances be broken up to be even smaller, and not to shy away from running multiple instances per host. The net resource usage would be about the same. But the manageability greatly improves when MySQL instances are small. There is the complication of keeping track of ports, and separating the paths for the MySQL instances. However, everything else becomes simpler once this hurdle is crossed. - -There are fewer lock contentions to worry about, replication is a lot happier, production impact of outages become smaller, backups and restores run faster, and a lot more secondary advantages can be realized. For example, you can shuffle instances around to get better machine or rack diversity leading to even smaller production impact on outages, and improved resource usage. - -### Cloud Vs Baremetal - -Although Vitess is designed to run in the cloud, it is entirely possible to -run it on baremetal configs, and many users still do. If deploying in a cloud, -the assignment of servers and ports is abstracted away from the administrator. -On baremetal, the operator still has these responsibilities. - -We provide sample configs to help you [get started on Kubernetes](https://vitess.io/docs/tutorials/kubernetes/) -since it's the most similar to Borg (the [predecessor to Kubernetes](https://kubernetes.io/blog/2015/04/borg-predecessor-to-kubernetes/) -on which Vitess now runs in YouTube). -If you're more familiar with alternatives like Mesos, Swarm, Nomad, or DC/OS, -we'd welcome your contribution of sample configs for Vitess. - -These orchestration systems typically use [containers](https://en.wikipedia.org/wiki/Software_container) -to isolate small instances so they can be efficiently packed onto machines -without contention on ports, paths, or compute resources. -Then an automated scheduler does the job of shuffling instances around for -failure resilience and optimum utilization. - -## Durability through replication - -Traditional data storage software treated data as durable as soon as it was flushed to disk. However, this approach is impractical in today’s world of commodity hardware. Such an approach also does not address disaster scenarios. - -The new approach to durability is achieved by copying the data to multiple machines, and even geographical locations. This form of durability addresses the modern concerns of device failures and disasters. - -Many of the workflows in Vitess have been built with this approach in mind. For example, turning on semi-sync replication is highly recommended. This allows Vitess to failover to a new replica when a master goes down, with no data loss. Vitess also recommends that you avoid recovering a crashed database. Instead, create a fresh one from a recent backup and let it catch up. - -Relying on replication also allows you to loosen some of the disk-based durability settings. For example, you can turn off sync\_binlog, which greatly reduces the number of IOPS to the disk thereby increasing effective throughput. - -## Consistency model - -Before sharding or moving tables to different keyspaces, the application needs to be verified (or changed) such that it can tolerate the following changes: - -* Cross-shard reads may not be consistent with each other. Conversely, the sharding decision should also attempt to minimize such occurrences because cross-shard reads are more expensive. -* In "best-effort mode", cross-shard transactions can fail in the middle and result in partial commits. You could instead use "2PC mode" transactions that give you distributed atomic guarantees. However, choosing this option increases the write cost by approximately 50%. - -Single shard transactions continue to remain ACID, just like MySQL supports it. - -If there are read-only code paths that can tolerate slightly stale data, the queries should be sent to REPLICA tablets for OLTP, and RDONLY tablets for OLAP workloads. This allows you to scale your read traffic more easily, and gives you the ability to distribute them geographically. - -This tradeoff allows for better throughput at the expense of stale or possible inconsistent reads, since the reads may be lagging behind the master, as data changes (and possibly with varying lag on different shards). To mitigate this, VTGates are capable of monitoring replica lag and can be configured to avoid serving data from instances that are lagging beyond X seconds. - -For true snapshot, the queries must be sent to the master within a transaction. For read-after-write consistency, reading from the master without a transaction is sufficient. - -To summarize, these are the various levels of consistency supported: - -* REPLICA/RDONLY read: Servers be scaled geographically. Local reads are fast, but can be stale depending on replica lag. -* MASTER read: There is only one worldwide master per shard. Reads coming from remote locations will be subject to network latency and reliability, but the data will be up-to-date (read-after-write consistency). The isolation level is READ\_COMMITTED. -* MASTER transactions: These exhibit the same properties as MASTER reads. However, you get REPEATABLE\_READ consistency and ACID writes for a single shard. Support is underway for cross-shard Atomic transactions. - -As for atomicity, the following levels are supported: - -* SINGLE: disallow multi-db transactions. -* MULTI: multi-db transactions with best effort commit. -* TWOPC: multi-db transactions with 2pc commit. - -### No multi-master - -Vitess doesn’t support multi-master setup. It has alternate ways of addressing most of the use cases that are typically solved by multi-master: - -* Scalability: There are situations where multi-master gives you a little bit of additional runway. However, since the statements have to eventually be applied to all masters, it’s not a sustainable strategy. Vitess addresses this problem through sharding, which can scale indefinitely. -* High availability: Vitess integrates with Orchestrator, which is capable of performing a failover to a new master within seconds of failure detection. This is usually sufficient for most applications. -* Low-latency geographically distributed writes: This is one case that is not addressed by Vitess. The current recommendation is to absorb the latency cost of long-distance round-trips for writes. If the data distribution allows, you still have the option of sharding based on geographic affinity. You can then setup masters for different shards to be in different geographic location. This way, most of the master writes can still be local. - -### Big data queries - -There are two main ways to access the data for offline data processing (as -opposed to online web or direct access to the live data): sending queries to -rdonly servers, or using a Map Reduce framework. - -#### Batch queries - -These are regular queries, but they can consume a lot of data. Typically, the -streaming APIs are used, to consume large quantities of data. - -These queries are just sent to the *rdonly* servers (also known as *batch* -servers). They can take as much resources as they want without affecting live -traffic. - -#### MapReduce - -Vitess supports MapReduce access to the data. Vitess provides a Hadoop -connector, that can also be used with Apache Spark. See the [Hadoop package -documentation](https://github.com/vitessio/vitess/tree/master/java/hadoop/src/main/java/io/vitess/hadoop) -for more information. - -With a MapReduce framework, Vitess does not support very complicated -queries. In part because it would be difficult and not very efficient, but also -because the MapReduce frameworks are usually very good at data processing. So -instead of doing very complex SQL queries and have processed results, it is -recommended to just dump the input data out of Vitess (with simple *select* -statements), and process it with a MapReduce pipeline. - -## Multi-cell - -Vitess is meant to run in multiple data centers / regions / cells. In this part, -we'll use *cell* as a set of servers that are very close together, and share the -same regional availability. - -A cell typically contains a set of tablets, a vtgate pool, and app servers that -use the Vitess cluster. With Vitess, all components can be configured and -brought up as needed: - -* The master for a shard can be in any cell. If cross-cell master access is - required, vtgate can be configured to do so easily (by passing the cell that - contains the master as a cell to watch). -* It is not uncommon to have the cells that can contain the master be more - provisioned than read-only serving cells. These *master-capable* cells may - need one more replica to handle a possible failover, while still maintaining - the same replica serving capacity. -* Failing over from one master in one cell to a master in a different cell is no - different than a local failover. It has an implication on traffic and latency, - but if the application traffic also gets re-directed to the new cell, the end - result is stable. -* It is also possible to have some shards with a master in one cell, and some - other shards with their master in another cell. vtgate will just route the - traffic to the right place, incurring extra latency cost only on the remote - access. For instance, creating U.S. user records in a database with masters in - the U.S. and European user records in a database with masters in Europe is - easy to do. Replicas can exist in every cell anyway, and serve the replica - traffic quickly. -* Replica serving cells are a good compromise to reduce user-visible latency: - they only contain *replica* servers, and master access is always done - remotely. If the application profile is mostly reads, this works really well. -* Not all cells need *rdonly* (or batch) instances. Only the cells that run - batch jobs, or MapReduce jobs, really need them. - -Note Vitess uses local-cell data first, and is very resilient to any cell going -down (most of our processes handle that case gracefully). - -## Lock server - -Vitess is a highly available service, and Vitess itself needs to store a small -amount of metadata very reliably. For that purpose, Vitess needs a highly -available and consistent data store. - -Lock servers were built for this exact purpose, and Vitess needs one such -cluster to be setup to run smoothly. Vitess can be customized to utilize any -lock server, and by default it supports Zookeeper, etcd and Consul. We call this -component [Topology Service]({% link user-guide/topology-service.md %}). - -As Vitess is meant to run in multiple data centers / regions (called cells -below), it relies on two different lock servers: - -* global instance: it contains global meta data, like the list of Keyspaces / - Shards, the VSchema, ... It should be reliable and distributed across multiple - cells. Running Vitess processes almost never access the global instance. -* per-cell instance (local): It should be running only in the local cell. It - contains aggregates of all the global data, plus local running tablet - information. Running Vitess processes get most of their topology data from the - local instance. - -This separation is key to higher reliability. A single cell going bad is never -critical for Vitess, as the global instance is configured to survive it, and -other cells can take over the production traffic. The global instance can be -unavailable for minutes and not affect serving at all (it would affect VSchema -changes for instance, but these are not critical, they can wait for the global -instance to be back). - -If Vitess is only running in one cell, both global and local instances can share -the same lock service instance. It is always possible to split them later when -expanding to multiple cells. - -## Monitoring - -The most stressful part of running a production system is the situation where one is trying to troubleshoot an ongoing outage. You have to be able to get to the root cause quickly and find the correct remedy. This is one area where monitoring becomes critical and Vitess has been battle-tested. A large number of internal state variables and counters are continuously exported by Vitess through the /debug/vars and other URLs. There’s also work underway to integrate with third party monitoring tools like Prometheus. - -Vitess errs on the side of over-reporting, but you can be picky about which of these variables you want to monitor. It’s important and recommended to plot graphs of this data because it’s easy to spot the timing and magnitude of a change. It’s also essential to set up various threshold-based alerts that can be used to proactively prevent outages. - -## Development workflow - -Vitess provides binaries and scripts to make unit testing of the application -code very easy. With these tools, we recommend to unit test all the application -features if possible. - -A production environment for a Vitess cluster involves a topology service, -multiple database instances, a vtgate pool and at least one vtctld process, -possibly in multiple data centers. The vttest library uses the *vtcombo* binary -to combine all the Vitess processes into just one. The various databases are -also combined into a single MySQL instance (using different database names for -each shard). The database schema is initialized at startup. The (optional) -VSchema is also initialized at startup. - -A few things to consider: - -* Use the same database schema in tests as the production schema. -* Use the same VSchema in tests as the production VSchema. -* When a production keyspace is sharded, use a sharded test keyspace as - well. Just two shards is usually enough, to minimize test startup time, while - still re-producing the production environment. -* *vtcombo* can also start the *vtctld* component, so the test environment is - visible with the Vitess UI. -* See - [vttest.proto](https://github.com/vitessio/vitess/blob/master/proto/vttest.proto) - for more information. - -## Application query patterns - -Although Vitess strives to minimize the app changes required to scale, -there are some important considerations for application queries. - -### Commands specific to single MySQL instances - -Since vitess represents a combined view of all MySQL instances, there -are some operations it cannot reasonably perform in a backward compatible -manner. For example: - -* SET GLOBAL -* SHOW -* Binary log commands -* Other single keyspace administrative commands - -However, Vitess allows you to target a single MySQL instance through -an extended syntax of the USE statement. If so, it will -allow you to execute some of these statements as pass-through. - -### Connecting to Vitess - -If your application previously connected to master or replica -instances through different hosts and ports, those parts will -have to be changed to connect to a single load-balanced IP. - -Instead, the database type will be specified as part of the -db name. For example, to connect to a master, you would specify -the dbname as db@master. For a replica, it would be -db@replica. - -### Query support - -A sharded Vitess is not 100% backward compatible with MySQL. -Some queries that used to work will cease to work. -It’s important that you run all your queries on a sharded test environment -- see the [Development workflow](#development-workflow) section above -- to make sure none will fail on production. - -Our goal is to expand query support based on the needs of users. -If you encounter an important construct that isn't supported, -please create or comment on an existing feature request so we -know how to prioritize. diff --git a/doc/ScalingMySQL.md b/doc/ScalingMySQL.md deleted file mode 100644 index deef192c8b3..00000000000 --- a/doc/ScalingMySQL.md +++ /dev/null @@ -1,143 +0,0 @@ -Traditionally, it's been difficult to scale a MySQL-based database to an arbitrary size. Since MySQL lacks the out-of-the-box multi-instance support required to really scale an application, the process can be complex and obscure. - -As the application grows, scripts emerge to back up data, migrate a master database, or run some offline data processing. Complexity creeps into the application layer, which increasingly needs to be aware of database details. And before we know it, any change needs a big engineering effort so we can keep scaling. - -Vitess grew out of YouTube's attempt to break this cycle, and YouTube decided to open source Vitess after realizing that this is a very common problem. Vitess simplifies every aspect of managing a MySQL cluster, allowing easy scaling to any size without complicating your application layer. It ensures your database can keep up when your application takes off, leaving you with a database that is flexible, secure, and easy to mine. - -This document talks about the process of moving from a single small database to a limitless database cluster. It explains how steps in that process influenced Vitess' design, linking to relevant parts of the Vitess documentation along the way. It concludes with tips for designing a new, highly scalable application and database schema. - -## Getting started - -Vitess sits between your application and your MySQL database. It looks at incoming queries and routes them properly. So, instead of sending a query directly from your application to your database, you send it through Vitess, which understands your database topology and constantly monitors the health of individual database instances. - -While Vitess is designed to manage large, multi-instance databases, it offers features that simplify database setup and management at all stages of your product's lifecycle. - -Starting out, our first step is getting a simple, reliable, durable database cluster in place with a master instance and a couple of replicas. In Vitess terminology, that's a single-shard, single-keyspace database. Once that building block is in place, we can focus on scaling it up. - -### Planning for scale - -We recommend a number of best practices to facilitate scaling your database as your product evolves. You might not experience the benefits of these actions immediately, but adopting these practices from day one will make it much easier for your database and product to grow: - -* Always keep your database schema under source control and provide unit test coverage of that schema. Also check schema changes into source control and run unit tests against the newly modified schema. -* Think about code paths that can read from a replica vs. always choosing to read from the master. This will let you to scale your reads by just adding more replicas. Additionally, this will make it easy to expand into other data centers across the world. -* Avoid complicated data relationships. Although RDBMS systems can handle them very well, such relationships hinder scaling in the future. When the time comes, it will be easier to shard the data. -* Avoid pushing too much logic into the database in the form of stored procedures, foreign keys, or triggers. Such operations overly tax the database and hinder scaling. - -## Step 1: Setting up a database cluster - -At the outset, plan to create a database cluster that has a master instance and a couple of read-only replicas (or slaves). The replicas would be able to take over if the master became unavailable, and they might also handle read-only traffic. You'd also want to schedule regular data backups. - -It's worth noting that master management is a complex and critical challenge for data reliability. At any given time, a shard has only one master instance, and all replica instances replicate from it. Your application -- either a component in your application layer or Vitess, if you are using it -- needs to be able to easily identify the master instance for write operations, recognizing that the master might change from time to time. Similarly, your application, with or without Vitess, should be able to seamlessly adapt to new replicas coming online or old ones being unavailable. - -### Keep routing logic out of your application - -A core principle underlying Vitess' design is that your database and data management practices should always be ready to support your application's growth. So, you might not yet have an immediate need to store data in multiple data centers, shard your database, or even do regular backups. But when those needs arise, you want to be sure that you'll have an easy path to achieve them. Note that you can run Vitess in a Kubernetes cluster or on local hardware. - -With that in mind, you want to have a plan that allows your database to grow without complicating your application code. For example, if you reshard your database, your application code shouldn't need to change to identify the target shards for a particular query. - -Vitess has several components that keep this complexity out of your application: - -* Each MySQL instance is paired with a **vttablet** process, which provides features like connection pooling, query rewriting, and query de-duping. -* Your application sends queries to **vtgate**, a light proxy that routes traffic to the correct vttablet(s) and then returns consolidated results to the application. -* The **Topology Service** -- Vitess supports Zookeeper, etcd and Consul -- maintains configuration data for the database system. Vitess relies on the service to know where to route queries based on both the sharding scheme and the availability of individual MySQL instances. -* The **vtctl** and **vtctld** tools offer command-line and web interfaces to the system. - -
-Diagram showing Vitess implementation -
- - -Setting up these components directly -- for example, writing your own topology service or your own implementation of vtgate -- would require a lot of scripting specific to a given configuration. It would also yield a system that would be difficult and costly to support. In addition, while any one of the components on its own is useful in limiting complexity, you need all of them to keep your application as simple as possible while also optimizing performance. - -**Optional functionality to implement** - -* *Recommended*. Vitess has basic support for identifying or changing a master, but it doesn't aim to fully address this feature. As such, we recommend using another program, like [Orchestrator](https://github.com/github/orchestrator), to monitor the health of your servers and to change your master database when necessary. (In a sharded database, each shard has a master.) - - -* *Recommended*. You should have a way to monitor your database topology and set up alerts as needed. Vitess components facilitate this monitoring by exporting a lot of runtime variables, like QPS over the last few minutes, error rates, and query latency. The variables are exported in JSON format, and Vitess also supports a Prometheus plug-in. - - -* *Optional*. Using the Kubernetes scripts as a base, you could run Vitess components with other configuration management systems (like Puppet) or frameworks (like Mesos or AWS images). - -**Related Vitess documentation:** - -* [Running Vitess on Kubernetes]({% link getting-started/index.md %}) -* [Running Vitess on a local server]({% link getting-started/local-instance.md %}) -* [Backing up data]({% link user-guide/backup-and-restore.md %}) -* [Reparenting - basic assignment of master instance in Vitess]({% link user-guide/reparenting.md %}) - -## Step 2: Connect your application to your database - -Obviously, your application needs to be able to call your database. So, we'll jump straight to explaining how you'd modify your application to connect to your database through vtgate. - -As of Release 2.1, VTGate supports the MySQL protocol. So, the application only needs to change where it connects to. For those using Java or Go, we additionally provide libraries that can communicate to VTGate using [gRPC](https://www.grpc.io/). Using the provided libraries allow you to send queries with bind variables, which is not inherently possible through the MySQL protocol. - -#### Unit testing database interactions - -The vttest library and executables provide a unit testing environment that lets you start a fake cluster that acts as an exact replica of your production environment for testing purposes. In the fake cluster, a single DB instance hosts all of your shards. - -### Migrating production data to Vitess - -The easiest way to migrate data to your Vitess database is to take a backup of your existing data, restore it on the Vitess cluster, and go from there. However, that requires some downtime. - -Another, more complicated approach, is a live migration, which requires your application to support both direct MySQL access and Vitess access. In that approach, you'd enable MySQL replication from your source database to the Vitess master database. This would allow you to migrate quickly and with almost no downtime. - -Note that this path is highly dependent on the source setup. Thus, while Vitess provides helper tools, it does not offer a generic way to support this type of migration. - -The final option is to deploy Vitess directly onto the existing MySQL instances and slowly migrate the application traffic to move over to using Vitess. - -**Related Vitess documentation:** - -* [Schema Management]({% link user-guide/schema-management.md %}) -* [Transport Security Model]({% link user-guide/transport-security-model.md %}) - -## Step 3: Vertical sharding (scaling to multiple keyspaces) - -Typically, the first step in scaling up is vertical sharding, in which you identify groups of tables that belong together and move them to separate keyspaces. A keyspace is a distributed database, and, usually, the databases are unsharded at this point. That said, it's possible that you'll need to horizontally shard your data (step 4) before scaling to multiple keyspaces. - -The benefit of splitting tables into multiple keyspaces is to parallelize access to the data (increased performance), and to prepare each smaller keyspace for horizontal sharding. And, in separating data into multiple keyspaces, you should aim to reach a point where: - -* All tables inside a keyspace share a common key. This will make it more convenient to horizontally shard in the future as described in step 4. -* Joins are primarily within keyspaces. (Joins between keyspaces are costly.) -* Transactions involving data in multiple keyspaces, which are also expensive, are uncommon. - -### Scaling keyspaces with Vitess - -Several vtctl functions -- vtctl is Vitess' command-line tool for managing your database topology -- support features for vertically splitting a keyspace. In this process, a set of tables can be moved from an existing keyspace to a new keyspace with no read downtime and write downtime of just a few seconds. - -**Related Vitess documentation:** - -* [vtctl Reference guide]({% link reference/vtctl.md %}) - -## Step 4: Horizontal sharding (partitioning your data) - -The next step in scaling your data is horizontal sharding, the process of partitioning your data to improve scalability and performance. A shard is a horizontal partition of the data within a keyspace. Each shard has a master instance and replica instances, but data does not overlap between shards. - -In order to perform horizontal sharding, you need to identify the column that will be used to decide the target shard for each table. This is known as the Primary Vindex, which is similar to a NoSQL sharding key, but provides additional flexibility. The decision on such primary vindexes and other sharding metadata is stored in the VSchema. - -Vitess offers robust resharding support, which involves updating the sharding scheme for a keyspace and dynamically reorganizing data to match the new scheme. During resharding, Vitess copies, verifies, and keeps data up-to-date on new shards while existing shards continue serving live read and write traffic. When you're ready to switch over, the migration occurs with just a few seconds of read-only downtime. - -**Related Vitess documentation:** - -* [VSchema Reference guide]({% link user-guide/vschema.md %}) -* [Sharding]({% link user-guide/sharding.md %}) -* [Horizontal sharding (Codelab)]({% link user-guide/horizontal-sharding.md %}) -* [Sharding in Kubernetes (Codelab)]({% link user-guide/sharding-kubernetes.md %}) - -## Related tasks - -In addition to the four steps discussed above, you might also want to do some or all of the following as your application matures. - -### Data processing input / output - -Hadoop is a framework that enables distributed processing of large data sets across clusters of computers using simple programming models. - -Vitess provides a Hadoop InputSource that can be used for any Hadoop MapReduce job or even connected to Spark. The Vitess InputSource takes a simple SQL query, splits that query into small chunks, and parallelizes data reading as much as possible across database instances, shards, etc. - -### Query log analysis - -Database query logs can help you to monitor and improve your application's performance. - -To that end, each vttablet instance provides runtime stats, which can be accessed through the tablet’s web page, for the queries the tablet is running. These stats make it easy to detect slow queries, which are usually hampered by a missing or mismatched table index. Reviewing these queries regularly helps maintain the overall health of your large database installation. - -Each vttablet instance can also provide a stream of all the queries it is running. If the Vitess cluster is colocated with a log cluster, you can dump this data in real time and then run more advanced query analysis. diff --git a/doc/SchemaManagement.md b/doc/SchemaManagement.md deleted file mode 100644 index 701bc603658..00000000000 --- a/doc/SchemaManagement.md +++ /dev/null @@ -1,190 +0,0 @@ -Using Vitess requires you to work with two different types of schemas: - -1. The MySQL database schema. This is the schema of the individual MySQL instances. -2. The [VSchema]({% link user-guide/vschema.md %}), which describes all the keyspaces and how they're sharded. - -The workflow for the VSchema is as follows: - -1. Apply the VSchema for each keyspace using the ApplyVschema command. This saves the VSchemas in the global topo server. -2. Execute RebuildVSchemaGraph for each cell (or all cells). This command propagates a denormalized version of the combined VSchema to all the specified cells. The main purpose for this propagation is to minimize the dependency of each cell from the global topology. The ability to push a change to only specific cells allows you to canary the change to make sure that it's good before deploying it everywhere. - -This document describes the [vtctl]({% link reference/vtctl.md %}) -commands that you can use to [review](#reviewing-your-schema) or -[update](#changing-your-schema) your schema in Vitess. - -Note that this functionality is not recommended for long-running schema changes. In such cases, we recommend to do a [schema swap]({% link user-guide/schema-swap.md %}) instead. - -## Reviewing your schema - -This section describes the following vtctl commands, which let you look at the schema and validate its consistency across tablets or shards: - -* [GetSchema](#getschema) -* [ValidateSchemaShard](#validateschemashard) -* [ValidateSchemaKeyspace](#validateschemakeyspace) -* [GetVSchema](#getvschema) -* [GetSrvVSchema](#getsrvvschema) - -### GetSchema - -The [GetSchema]({% link reference/vtctl.md %}#getschema) command -displays the full schema for a tablet or a subset of the tablet's tables. -When you call GetSchema, you specify the tablet alias that -uniquely identifies the tablet. The \ -argument value has the format \-\. - -**Note:** You can use the -[vtctl ListAllTablets]({% link reference/vtctl.md %}#listalltablets) -command to retrieve a list of tablets in a cell and their unique IDs. - -The following example retrieves the schema for the tablet with the -unique ID test-000000100: - -``` -GetSchema test-000000100 -``` - -### ValidateSchemaShard - -The -[ValidateSchemaShard]({% link reference/vtctl.md %}#validateschemashard) -command confirms that for a given keyspace, all of the slave tablets -in a specified shard have the same schema as the master tablet in that -shard. When you call ValidateSchemaShard, you specify both -the keyspace and the shard that you are validating. - -The following command confirms that the master and slave tablets in -shard 0 all have the same schema for the user -keyspace: - -``` -ValidateSchemaShard user/0 -``` - -### ValidateSchemaKeyspace - -The [ValidateSchemaKeyspace]({% link reference/vtctl.md %}#validateschemakeyspace) -command confirms that all of the tablets in a given keyspace have -the same schema as the master tablet on shard 0 -in that keyspace. Thus, whereas the ValidateSchemaShard -command confirms the consistency of the schema on tablets within a shard -for a given keyspace, ValidateSchemaKeyspace confirms the -consistency across all tablets in all shards for that keyspace. - -The following command confirms that all tablets in all shards have the -same schema as the master tablet in shard 0 for the -user keyspace: - -``` -ValidateSchemaKeyspace user -``` - -### GetVSchema - -The [GetVSchema]({% link reference/vtctl.md %}#getvschema) -command displays the global VSchema for the specified keyspace. - -### GetSrvVSchema - -The [GetSrvVSchema]({% link reference/vtctl.md %}#getsrvvschema) -command displays the combined VSchema for a given cell. - -## Changing your schema - -This section describes the following commands: - -* [ApplySchema](#applyschema) -* [ApplyVSchema](#applyvschema) -* [RebuildVSchemaGraph](#rebuildvschemagraph) - -### ApplySchema - -Vitess' schema modification functionality is designed the following goals in mind: - -* Enable simple updates that propagate to your entire fleet of servers. -* Require minimal human interaction. -* Minimize errors by testing changes against a temporary database. -* Guarantee very little downtime (or no downtime) for most schema updates. -* Do not store permanent schema data in the topology server. - -Note that, at this time, Vitess only supports -[data definition statements](https://dev.mysql.com/doc/refman/5.6/en/sql-syntax-data-definition.html) -that create, modify, or delete database tables. -For instance, ApplySchema does not affect stored procedures -or grants. - -The [ApplySchema]({% link reference/vtctl.md %}#applyschema) -command applies a schema change to the specified keyspace on every -master tablet, running in parallel on all shards. Changes are then -propagated to slaves via replication. The command format is: -``` -ApplySchema {-sql= || -sql_file=} -``` - -When the ApplySchema action actually applies a schema -change to the specified keyspace, it performs the following steps: - -1. It finds shards that belong to the keyspace, including newly added - shards if a [resharding event]({% link user-guide/sharding.md %}#resharding) - has taken place. -1. It validates the SQL syntax and determines the impact of the schema - change. If the scope of the change is too large, Vitess rejects it. - See the [permitted schema changes](#permitted-schema-changes) section - for more detail. -1. It employs a pre-flight check to ensure that a schema update will - succeed before the change is actually applied to the live database. - In this stage, Vitess copies the current schema into a temporary - database, applies the change there to validate it, and retrieves - the resulting schema. By doing so, Vitess verifies that the change - succeeds without actually touching live database tables. -1. It applies the SQL command on the master tablet in each shard. - -The following sample command applies the SQL in the **user_table.sql** -file to the **user** keyspace: - -``` -ApplySchema -sql_file=user_table.sql user -``` - -#### Permitted schema changes - -The ApplySchema command supports a limited set of DDL -statements. In addition, Vitess rejects some schema changes because -large changes can slow replication and may reduce the availability -of your overall system. - -The following list identifies types of DDL statements that Vitess -supports: - -* CREATE TABLE -* CREATE INDEX -* CREATE VIEW -* ALTER TABLE -* ALTER VIEW -* RENAME TABLE -* DROP TABLE -* DROP INDEX -* DROP VIEW - -In addition, Vitess applies the following rules when assessing the -impact of a potential change: - -* DROP statements are always allowed, regardless of the - table's size. -* ALTER statements are only allowed if the table on the - shard's master tablet has 100,000 rows or less. -* For all other statements, the table on the shard's master tablet - must have 2 million rows or less. - -If a schema change gets rejected because it affects too many rows, you can specify the flag `-allow_long_unavailability` to tell `ApplySchema` to skip this check. -However, we do not recommend this. Instead, you should apply large schema changes by following the [schema swap process]({% link user-guide/schema-swap.md %}). - -### ApplyVSchema - -The [ApplyVSchema]({% link reference/vtctl.md %}#applyvschema) -command applies the specified VSchema to the keyspace. The VSchema can be specified -as a string or in a file. - -### RebuildVSchemaGraph - -The [RebuildVSchemaGraph]({% link reference/vtctl.md %}#rebuildvschemagraph) -command propagates the global VSchema to a specific cell or the list of specified cells. diff --git a/doc/SchemaSwap.md b/doc/SchemaSwap.md deleted file mode 100644 index a893761464d..00000000000 --- a/doc/SchemaSwap.md +++ /dev/null @@ -1,87 +0,0 @@ -# Schema Swap: A Tutorial - -This page describes how to apply long-running schema changes in Vitess/MySQL -without disrupting ongoing operations. Examples for long-running changes on -large databases are `ALTER TABLE` (for example to add a column), `OPTIMIZE -TABLE` or large-scale data changes (e.g. populating a column or clearing out -values). - -If a schema change is not long-running, please use the simpler [vtctl -ApplySchema]({% link user-guide/schema-management.md %}) instead. - -## Overview - -One solution to realize such long-running schema changes is to use a temporary -table and keep it in sync with triggers as [originally proposed by -Shlomi](https://code.openark.org/blog/mysql/online-alter-table-now-available-in-openark-kit) -and further refined by others ([Percona's -pt-online-schema-change](https://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html), -[Square's Shift](https://github.com/square/shift)). - -Here we describe an alternative solution which uses a combination of MySQL's -statement based replication and backups to apply the changes to all tablets. -Since the long-running schema changes are applied to an offline tablet, ongoing -operations are not affected. We called this process **schema swap** due to the -way it's done, and therefore we refer to it by this name throughout the -document. - -This tutorial outlines the necessary steps for a schema swap and is based on the -[Vitess Kubernetes Getting Started Guide]({% link getting-started/index.md %}). - -**At the high level, a schema swap comprises the following phases:** - -1. Apply the schema changes to an offline tablet. -1. Let the tablet catch up and then create a backup of it. -1. Restore all remaining tablets (excluding the master) from the backup. -1. Failover the master to a replica tablet which has the new schema. Restore - the old master from the backup. -1. At this point, all tablets have the new schema and you can start using it. - -**You may be wondering: Why does this work?** - -The key here is that the new schema is backward compatible with respect to -statements sent by the app. The replication stream remains backward compatible -as well because we use statement based replication. As a consequence, the new -schema must not be used until it has been changed on all tablets. If the schema -would have been used e.g. when an insert uses a new column, replication would -break on tablets which have the old schema. Swapping schema on all tablets first -ensures this doesn't happen. - -Also note that the changes are applied to only one tablet and then all other -tablets are restored from the backup. This is more efficient than applying the -long-running changes on every single tablet. - -Now let's carry out an actual schema swap based on our Guestbook example schema. -We'll add a column to it. - -## Prerequisites - -We assume that you have followed the [Vitess Kubernetes Getting Started -Guide]({% link getting-started/index.md %}) up to and including the step "9. -Create a table". - -## Schema Swap Steps - -1. Got to the Workflows section of vtctld UI (it will be at - http://localhost:8001/api/v1/proxy/namespaces/default/services/vtctld:web/app2/workflows - if you followed the Getting Started Guide as is) and press the "+" button in - the top right corner. You will be presented with "Create a new Workflow" - dialog. -1. In the "Factory Name" list select "Schema Swap". -1. In the field "Keyspace" enter "test_keyspace" (without quotes). -1. In the field "SQL" enter the statement representing the schema change you - want to execute. As an example we want to execute statement "ALTER TABLE - messages ADD views BIGINT(20) UNSIGNED NULL". -1. Click "Create" button at the bottom of the dialog. - -Another way to start the schema swap is to execute vtctlclient command: - -``` sh -vitess/examples/local$ ./lvtctl.sh WorkflowCreate schema_swap -keyspace=test_keyspace -sql='SQL statement' -``` - -From this point on all you need to do is watch how the schema swap process is -progressing. Try expanding the displayed nodes in vtctld UI and look at the logs -of all the actions that process is doing. Once the UI shows "Schema swap is -finished" you can start using the new schema, it will be propagated to all -tablets. diff --git a/doc/ServerConfiguration.md b/doc/ServerConfiguration.md deleted file mode 100644 index 737757ae726..00000000000 --- a/doc/ServerConfiguration.md +++ /dev/null @@ -1,684 +0,0 @@ -## MySQL - -Vitess has some requirements on how MySQL should be configured. These will be detailed below. - -As a reminder, semi-sync replication is highly recommended. It offers a much better durability story than relying on a disk. This will also let you relax the disk-based durability settings. - -### Versions - -MySQL versions supported are: MariaDB 10.0, MySQL 5.6 and MySQL 5.7. A number of custom versions based on these exist (Percona, …), Vitess most likely supports them if the version they are based on is supported. - -### Config files - -#### my.cnf - -The main `my.cnf` file is generated by -[mysqlctl init](https://github.com/vitessio/vitess/blob/312064b96ac0070d9f8990e57af6f2c0a76a45a9/examples/local/vttablet-up.sh#L66) -based primarily on -[$VTROOT/config/mycnf/default.cnf](https://github.com/vitessio/vitess/blob/master/config/mycnf/default.cnf). -Additional files will be appended to the generated `my.cnf` as specified in -a colon-separated list of absolute paths in the `EXTRA_MY_CNF` environment -variable. For example, this is typically used to include [flavor-specific -config files](https://github.com/vitessio/vitess/blob/312064b96ac0070d9f8990e57af6f2c0a76a45a9/examples/local/vttablet-up.sh#L41). - -To customize the `my.cnf`, you can either add overrides in an additional -`EXTRA_MY_CNF` file, or modify the files in `$VTROOT/config/mycnf` before -distributing to your servers. In Kubernetes, you can use a -[ConfigMap](https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/) to overwrite -the entire `$VTROOT/config/mycnf` directory with your custom versions, -rather than baking them into a custom container image. - -#### init_db.sql - -When a new instance is initialized with `mysqlctl init` (as opposed to -restarting in a previously initialized data dir with `mysqlctl start`), -the [init_db.sql](https://github.com/vitessio/vitess/blob/master/config/init_db.sql) -file is applied to the server immediately after executing `mysql_install_db`. -By default, this file contains the equivalent of running -[mysql_secure_installation](https://dev.mysql.com/doc/refman/5.7/en/mysql-secure-installation.html), -as well as the necessary tables and grants for Vitess. - -If you are running Vitess on top of an existing MySQL instance, -rather than using mysqlctl, you can use this file as a sample of what -grants need to be applied to enable Vitess. - -Note that changes to this file will not be reflected in shards that have -already been initialized and had at least one backup taken. -New instances in such shards will automatically restore the latest backup -upon vttablet startup, overwriting the data dir created by mysqlctl. - -### Statement-based replication (SBR) - -Vitess relies on adding comments to DMLs, which are later parsed on the other end of replication for various post-processing work. The critical ones are: - -* Redirect DMLs to the correct shard during resharding workflow. -* Identify which rows have changed for notifying downstream services that wish to subscribe to changes in vitess. -* Workflows that allow you to apply schema changes to replicas first, and rotate the masters, which improves uptime. - -In order to achieve this, Vitess also rewrites all your DMLs to be primary-key based. In a way, this also makes statement based replication almost as efficient as row-based replication (RBR). So, there should be no major loss of performance if you switched to SBR in Vitess. - -In Vitess 2.2 preliminary support for Row Based Replication (RBR) was added. See [this document]({% link user-guide/row-based-replication.md %}) for more information. - -### Data types - -Vitess supports all data types including newer data types like spatial and JSON. Additionally, the TIMESTAMP data type should not be used in a primary key or sharding column. Otherwise, Vitess cannot predict those values correctly and this may result in data corruption. - -### No side effects - -Vitess cannot guarantee data consistency if the schema contains constructs with side effects. These are triggers, stored procedures and foreign keys. This is because the resharding workflow and update stream cannot correctly detect what has changed by looking at a statement. - -This rule is not strictly enforced. You are allowed to add these things, but at your own risk. As long as you’ve ensured that a certain side-effect will not break Vitess, you can add it to the schema. - -Similar guidelines should be used when deciding to bypass Vitess to send statements directly to MySQL. - -Vitess also requires you to turn on STRICT_TRANS_TABLES or STRICT_ALL_TABLES mode. Otherwise, it cannot accurately predict what will be written to the database. - -It’s safe to apply backward compatible DDLs directly to MySQL. VTTablets can be configured to periodically check the schema for changes. - -There is also work in progress to actively watch the binlog for schema changes. This will likely happen around release 2.1. - -### Autocommit - -MySQL autocommit needs to be turned on. - -VTTablet uses connection pools to MySQL. If autocommit was turned off, MySQL will start an implicit transaction (with a point in time snapshot) for each connection and will work very hard at keeping the current view unchanged, which would be counter-productive. - -### Safe startup - -We recommend to enable `read-only` and `skip-slave-start` at startup. -The first ensures that writes will not be accepted accidentally, -which could cause split brain or alternate futures. -The second ensures that slaves do not connect to the master before -settings like semisync are initialized by vttablet according to -Vitess-specific logic. - - -### Binary logging - -By default, we enable binary logging everywhere (`log-bin`), -including on slaves (`log-slave-updates`). -On *replica* type tablets, this is important to make sure they have the -necessary binlogs in case they are promoted to master. -The slave binlogs are also used to implement Vitess features like -filtered replication (during resharding) and the upcoming update stream -and online schema swap. - -### Global Transaction ID (GTID) - -Many features of Vitess require a fully GTID-based MySQL replication -topology, including master management, resharding, update stream, -and online schema swap. - -For MySQL 5.6+, that means you must use `gtid_mode=ON` on all servers. -We also strongly encourage `enforce_gtid_consistency`. - -Similarly, for MariaDB, you should use `gtid_strict_mode` to ensure that -master management operations will fail rather than risk causing data loss -if slaves diverge from the master due to external interference. - -### Monitoring - -In addition to monitoring the Vitess processes, we recommend to monitor MySQL as well. Here is a list of MySQL metrics you should monitor: - -* QPS -* Bytes sent/received -* Replication lag -* Threads running -* Innodb buffer cache hit rate -* CPU, memory and disk usage. For disk, break into bytes read/written, latencies and IOPS. - -### Recap - -* 2-4 cores -* 100-300GB data size -* Statement based replication (required) -* Semi-sync replication - * rpl_semi_sync_master_timeout is huge (essentially never; there's no way to actually specify never) - * rpl_semi_sync_master_wait_no_slave = 1 - * sync_binlog=0 - * innodb_flush_log_at_trx_commit=2 -* STRICT_TRANS_TABLES -* auto-commit ON (required) -* Additional parameters as mentioned in above sections. - -## Vitess servers - -Vitess servers are written in Go. There are a few Vitess-specific knobs that apply to all servers. - -### Go version - -Go, being a young language, tends to add major improvements over each version. -So, the latest Go version is almost always recommended. -Note that the latest Go version may be higher than the minimum version we require for compiling the binaries (see ["Prerequisites" section in the Getting Started guide](https://github.com/vitessio/website/blob/master/content/docs/tutorials/kubernetes.md#prerequisites)). - -### GOMAXPROCS - -You typically don’t have to set this environment variable. The default Go runtime will try to use as much CPU as necessary. However, if you want to force a Go server to not exceed a certain CPU limit, setting GOMAXPROCS to that value will work in most situations. - -### GOGC - -The default value for this variable is 100. Which means that garbage is collected every time memory doubles from the baseline (100% growth). You typically don’t have to change this value either. However, if you care about tail latency, increasing this value will help you in that area, but at the cost of increased memory usage. - -### Logging - -Vitess servers write to log files, and they are rotated when they reach a maximum size. It’s recommended that you run at INFO level logging. The information printed in the log files come in handy for troubleshooting. You can limit the disk usage by running cron jobs that periodically purge or archive them. - -### gRPC - -Vitess uses gRPC for communication between client and Vitess, and between Vitess -servers. By default, Vitess does not use SSL. - -Also, even without using SSL, we allow the use of an application-provided -CallerID object. It allows unsecure but easy to use authorization using Table -ACLs. - -See the -[Transport Security Model document]({% link user-guide/transport-security-model.md %}) -for more information on how to setup both of these features, and what command -line parameters exist. - -## Topology Service configuration - -Vttablet, vtgate, vtctld need the right command line parameters to find the -Topology Server. First the *topo\_implementation* flag needs to be set to one of -*zk2*, *etcd2*, or *consul*. Then they're all configured as follows: - -* The *topo_global_server_address* contains the server address / addresses of - the global topology server. -* The *topo_global_root* contains the directory / path to use. - -Note that the local cell for the tablet must exist and be configured properly in -the Topology Service for vttablet to start. Local cells are configured inside -the topo server, by using the `vtctl AddCellInfo` command. See -the [Topology Service]({% link user-guide/topology-service.md %}) documentation for more -information. - -## VTTablet - - - -VTTablet has a large number of command line options. Some important ones will be covered here. In terms of provisioning these are the recommended values - -* 2-4 cores (in proportion to MySQL cores) -* 2-4 GB RAM - -### Directory Configuration - -vttablet supports a number of command line options and environment variables -to facilitate its setup. - -The **VTDATAROOT** environment variable specifies the toplevel directory for all -data files. If not set, it defaults to `/vt`. - -By default, a vttablet will use a subdirectory in **VTDATAROOT** named -`vt_NNNNNNNNNN` where `NNNNNNNNNN` is the tablet id. The **tablet_dir** -command-line parameter allows overriding this relative path. This is useful in -containers where the filesystem only contains one vttablet, in order to have a -fixed root directory. - -When starting up and using `mysqlctl` to manage MySQL, the MySQL files will be -in subdirectories of the tablet root. For instance, `bin-logs` for the binary -logs, `data` for the data files, and `relay-logs` for the relay logs. - -It is possible to host different parts of a MySQL server files on different -partitions. For instance, the data file may reside in flash, while the bin logs -and relay logs are on spindle. To achieve this, create a symlink from -`$VTDATAROOT/` to the proper location on disk. When MySQL is -configured by mysqlctl, it will realize this directory exists, and use it for the -files it would otherwise have put in the tablet directory. For instance, to host -the binlogs in `/mnt/bin-logs`: - -* Create a symlink from `$VTDATAROOT/bin-logs` to `/mnt/bin-logs`. - -* When starting up a tablet: - - * `/mnt/bin-logs/vt_NNNNNNNNNN` will be created. - - * `$VTDATAROOT/vt_NNNNNNNNNN/bin-logs` will be a symlink to - `/mnt/bin-logs/vt_NNNNNNNNNN` - -### Initialization - -* Init_keyspace, init_shard, init_tablet_type: These parameters should be set at startup with the keyspace / shard / tablet type to start the tablet as. Note ‘master’ is not allowed here, instead use ‘replica’, as the tablet when starting will figure out if it is the master (this way, all replica tablets start with the same command line parameters, independently of which one is the master). - -### Query server parameters - - - -* **queryserver-config-pool-size**: This value should typically be set to the max number of simultaneous queries you want MySQL to run. This should typically be around 2-3x the number of allocated CPUs. Around 4-16. There is not much harm in going higher with this value, but you may see no additional benefits. -* **queryserver-config-stream-pool-size**: This value is relevant only if you plan to run streaming queries against the database. It’s recommended that you use rdonly instances for such streaming queries. This value depends on how many simultaneous streaming queries you plan to run. Typical values are in the low 100s. -* **queryserver-config-transaction-cap**: This value should be set to how many concurrent transactions you wish to allow. This should be a function of transaction QPS and transaction length. Typical values are in the low 100s. -* **queryserver-config-query-timeout**: This value should be set to the upper limit you’re willing to allow a query to run before it’s deemed too expensive or detrimental to the rest of the system. VTTablet will kill any query that exceeds this timeout. This value is usually around 15-30s. -* **queryserver-config-transaction-timeout**: This value is meant to protect the situation where a client has crashed without completing a transaction. Typical value for this timeout is 30s. -* **queryserver-config-max-result-size**: This parameter prevents the OLTP application from accidentally requesting too many rows. If the result exceeds the specified number of rows, VTTablet returns an error. The default value is 10,000. - -### DB config parameters - -VTTablet requires multiple user credentials to perform its tasks. Since it's required to run on the same machine as MySQL, it’s most beneficial to use the more efficient unix socket connections. - -**connection** parameters - -* **db\_socket**: The unix socket to connect on. If this is specified, host and port will not be used. -* **db\_host**: The host name for the tcp connection. -* **db\_port**: The tcp port to be used with the db\_host. -* **db\_charset**: Character set. Only utf8 or latin1 based character sets are supported. -* **db\_flags**: Flag values as defined by MySQL. -* **db\ssl\_ca, db\_ssl\_ca\_path, db\_ssl\_cert, db\_ssl\_key**: SSL flags. - - -**app** credentials are for serving app queries: - -* **db\_app\_user**: App username. -* **db\_app\_password**: Password for the app username. If you need a more secure way of managing and supplying passwords, VTTablet does allow you to plug into a "password server" that can securely supply and refresh usernames and passwords. Please contact the Vitess team for help if you’d like to write such a custom plugin. -* **db\_app\_use\_ssl**: Set this flag to false if you don't want to use SSL for this connection. This will allow you to turn off SSL for all users except for `repl`, which may have to be turned on for replication that goes over open networks. - -**appdebug** credentials are for the appdebug user: - -* **db\_appdebug\_user** -* **db\_appdebug\_password** -* **db\_appdebug\_use\_ssl** - -**dba** credentials will be used for housekeeping work like loading the schema or killing runaway queries: - -* **db\_dba\_user** -* **db\_dba\_password** -* **db\_dba\_use\_ssl** - -**repl** credentials are for managing replication. - -* **db\_repl\_user** -* **db\_repl\_password** -* **db\_repl\_use\_ssl** - -**filtered** credentials are for performing resharding: - -* **db\_filtered\_user** -* **db\_filtered\_password** -* **db\_filtered\_use\_ssl** - -### Monitoring - -VTTablet exports a wealth of real-time information about itself. This section will explain the essential ones: - -#### /debug/status - -This page has a variety of human-readable information about the current VTTablet. You can look at this page to get a general overview of what’s going on. It also has links to various other diagnostic URLs below. - -#### /debug/vars - -This is the most important source of information for monitoring. There are other URLs below that can be used to further drill down. - -##### Queries (as described in /debug/vars section) - -Vitess has a structured way of exporting certain performance stats. The most common one is the Histogram structure, which is used by Queries: - -``` - "Queries": { - "Histograms": { - "PASS_SELECT": { - "1000000": 1138196, - "10000000": 1138313, - "100000000": 1138342, - "1000000000": 1138342, - "10000000000": 1138342, - "500000": 1133195, - "5000000": 1138277, - "50000000": 1138342, - "500000000": 1138342, - "5000000000": 1138342, - "Count": 1138342, - "Time": 387710449887, - "inf": 1138342 - } - }, - "TotalCount": 1138342, - "TotalTime": 387710449887 - }, -``` - -The histograms are broken out into query categories. In the above case, "PASS_SELECT" is the only category. An entry like `"500000": 1133195` means that `1133195` queries took under `500000` nanoseconds to execute. - -Queries.Histograms.PASS_SELECT.Count is the total count in the PASS_SELECT category. - -Queries.Histograms.PASS_SELECT.Time is the total time in the PASS_SELECT category. - -Queries.TotalCount is the total count across all categories. - -Queries.TotalTime is the total time across all categories. - -There are other Histogram variables described below, and they will always have the same structure. - -Use this variable to track: - -* QPS -* Latency -* Per-category QPS. For replicas, the only category will be PASS_SELECT, but there will be more for masters. -* Per-category latency -* Per-category tail latency - -##### Results - -``` - "Results": { - "0": 0, - "1": 0, - "10": 1138326, - "100": 1138326, - "1000": 1138342, - "10000": 1138342, - "5": 1138326, - "50": 1138326, - "500": 1138342, - "5000": 1138342, - "Count": 1138342, - "Total": 1140438, - "inf": 1138342 - } -``` - -Results is a simple histogram with no timing info. It gives you a histogram view of the number of rows returned per query. - -##### Mysql - -Mysql is a histogram variable like Queries, except that it reports MySQL execution times. The categories are "Exec" and “ExecStream”. - -In the past, the exec time difference between VTTablet and MySQL used to be substantial. With the newer versions of Go, the VTTablet exec time has been predominantly been equal to the mysql exec time, conn pool wait time and consolidations waits. In other words, this variable has not shown much value recently. However, it’s good to track this variable initially, until it’s determined that there are no other factors causing a big difference between MySQL performance and VTTablet performance. - -##### Transactions - -Transactions is a histogram variable that tracks transactions. The categories are "Completed" and “Aborted”. - -##### Waits - -Waits is a histogram variable that tracks various waits in the system. Right now, the only category is "Consolidations". A consolidation happens when one query waits for the results of an identical query already executing, thereby saving the database from performing duplicate work. - -This variable used to report connection pool waits, but a refactor moved those variables out into the pool related vars. - -##### Errors - -``` - "Errors": { - "Deadlock": 0, - "Fail": 1, - "NotInTx": 0, - "TxPoolFull": 0 - }, -``` - -Errors are reported under different categories. It’s beneficial to track each category separately as it will be more helpful for troubleshooting. Right now, there are four categories. The category list may vary as Vitess evolves. - -Plotting errors/query can sometimes be useful for troubleshooting. - -VTTablet also exports an InfoErrors variable that tracks inconsequential errors that don’t signify any kind of problem with the system. For example, a dup key on insert is considered normal because apps tend to use that error to instead update an existing row. So, no monitoring is needed for that variable. - -##### InternalErrors - -``` - "InternalErrors": { - "HungQuery": 0, - "Invalidation": 0, - "MemcacheStats": 0, - "Mismatch": 0, - "Panic": 0, - "Schema": 0, - "StrayTransactions": 0, - "Task": 0 - }, -``` - -An internal error is an unexpected situation in code that may possibly point to a bug. Such errors may not cause outages, but even a single error needs be escalated for root cause analysis. - -##### Kills - -``` - "Kills": { - "Queries": 2, - "Transactions": 0 - }, -``` - -Kills reports the queries and transactions killed by VTTablet due to timeout. It’s a very important variable to look at during outages. - -##### TransactionPool* - -There are a few variables with the above prefix: - -``` - "TransactionPoolAvailable": 300, - "TransactionPoolCapacity": 300, - "TransactionPoolIdleTimeout": 600000000000, - "TransactionPoolMaxCap": 300, - "TransactionPoolTimeout": 30000000000, - "TransactionPoolWaitCount": 0, - "TransactionPoolWaitTime": 0, -``` - -* WaitCount will give you how often the transaction pool gets full that causes new transactions to wait. -* WaitTime/WaitCount will tell you the average wait time. -* Available is a gauge that tells you the number of available connections in the pool in real-time. Capacity-Available is the number of connections in use. Note that this number could be misleading if the traffic is spiky. - -##### Other Pool variables - -Just like TransactionPool, there are variables for other pools: - -* ConnPool: This is the pool used for read traffic. -* StreamConnPool: This is the pool used for streaming queries. - -There are other internal pools used by VTTablet that are not very consequential. - -##### TableACLAllowed, TableACLDenied, TableACLPseudoDenied - -The above three variables table acl stats broken out by table, plan and user. - -##### QueryPlanCacheSize - -If the application does not make good use of bind variables, this value would reach the QueryCacheCapacity. If so, inspecting the current query cache will give you a clue about where the misuse is happening. - -##### QueryCounts, QueryErrorCounts, QueryRowCounts, QueryTimesNs - -These variables are another multi-dimensional view of Queries. They have a lot more data than Queries because they’re broken out into tables as well as plan. This is a priceless source of information when it comes to troubleshooting. If an outage is related to rogue queries, the graphs plotted from these vars will immediately show the table on which such queries are run. After that, a quick look at the detailed query stats will most likely identify the culprit. - -##### UserTableQueryCount, UserTableQueryTimesNs, UserTransactionCount, UserTransactionTimesNs - -These variables are yet another view of Queries, but broken out by user, table and plan. If you have well-compartmentalized app users, this is another priceless way of identifying a rogue "user app" that could be misbehaving. - -##### DataFree, DataLength, IndexLength, TableRows - -These variables are updated periodically from information_schema.tables. They represent statistical information as reported by MySQL about each table. They can be used for planning purposes, or to track unusual changes in table stats. - -* DataFree represents data_free -* DataLength represents data_length -* IndexLength represents index_length -* TableRows represents table_rows - -#### /debug/health - -This URL prints out a simple "ok" or “not ok” string that can be used to check if the server is healthy. The health check makes sure mysqld connections work, and replication is configured (though not necessarily running) if not master. - -#### /queryz, /debug/query_stats, /debug/query_plans, /streamqueryz - -* /debug/query_stats is a JSON view of the per-query stats. This information is pulled in real-time from the query cache. The per-table stats in /debug/vars are a roll-up of this information. -* /queryz is a human-readable version of /debug/query_stats. If a graph shows a table as a possible source of problems, this is the next place to look at to see if a specific query is the root cause. -* /debug/query_plans is a more static view of the query cache. It just shows how VTTablet will process or rewrite the input query. -* /streamqueryz lists the currently running streaming queries. You have the option to kill any of them from this page. - -#### /querylogz, /debug/querylog, /txlogz, /debug/txlog - -* /debug/querylog is a never-ending stream of currently executing queries with verbose information about each query. This URL can generate a lot of data because it streams every query processed by VTTablet. The details are as per this function: [https://github.com/vitessio/vitess/tree/master/go/vt/vttablet/tabletserver/tabletenv/logstats.go#L202](https://github.com/vitessio/vitess/tree/master/go/vt/vttablet/tabletserver/tabletenv/logstats.go#L202) -* /querylogz is a limited human readable version of /debug/querylog. It prints the next 300 queries by default. The limit can be specified with a limit=N parameter on the URL. -* /txlogz is like /querylogz, but for transactions. -* /debug/txlog is the JSON counterpart to /txlogz. - -#### /consolidations - -This URL has an MRU list of consolidations. This is a way of identifying if multiple clients are spamming the same query to a server. - -#### /schemaz, /debug/schema - -* /schemaz shows the schema info loaded by VTTablet. -* /debug/schema is the JSON version of /schemaz. - -#### /debug/query_rules - -This URL displays the currently active query blacklist rules. - -### Alerting - -Alerting is built on top of the variables you monitor. Before setting up alerts, you should get some baseline stats and variance, and then you can build meaningful alerting rules. You can use the following list as a guideline to build your own: - -* Query latency among all vttablets -* Per keyspace latency -* Errors/query -* Memory usage -* Unhealthy for too long -* Too many vttablets down -* Health has been flapping -* Transaction pool full error rate -* Any internal error -* Traffic out of balance among replicas -* Qps/core too high - -## VTGate - -A typical VTGate should be provisioned as follows. - -* 2-4 cores -* 2-4 GB RAM - -Since VTGate is stateless, you can scale it linearly by just adding more servers as needed. Beyond the recommended values, it’s better to add more VTGates than giving more resources to existing servers, as recommended in the philosophy section. - -Load-balancer in front of vtgate to scale up (not covered by Vitess). Stateless, can use the health URL for health check. - -### Parameters - -* **cells_to_watch**: which cell vtgate is in and will monitor tablets from. Cross-cell master access needs multiple cells here. -* **keyspaces_to_watch**: Specifies that a vtgate will only be able to perform queries against or view the topology of these keyspaces -* **tablet_types_to_wait**: VTGate waits for at least one serving tablet per tablet type specified here during startup, before listening to the serving port. So VTGate does not serve error. It should match the available tablet types VTGate connects to (master, replica, rdonly). -* **discovery_low_replication_lag**: when replication lags of all VTTablet in a particular shard and tablet type are less than or equal the flag (in seconds), VTGate does not filter them by replication lag and uses all to balance traffic. -* **degraded_threshold (30s)**: a tablet will publish itself as degraded if replication lag exceeds this threshold. This will cause VTGates to choose more up-to-date servers over this one. If all servers are degraded, VTGate resorts to serving from all of them. -* **unhealthy_threshold (2h)**: a tablet will publish itself as unhealthy if replication lag exceeds this threshold. -* **transaction_mode (multi)**: `single`: disallow multi-db transactions, `multi`: allow multi-db transactions with best effort commit, `twopc`: allow multi-db transactions with 2pc commit. -* **normalize_queries (false)**: Turning this flag on will cause vtgate to rewrite queries with bind vars. This is beneficial if the app doesn't itself send normalized queries. - -### Monitoring - -#### /debug/status - -This is the landing page for a VTGate, which can gives you a status on how a particular server is doing. Of particular interest there is the list of tablets this vtgate process is connected to, as this is the list of tablets that can potentially serve queries. - -#### /debug/vars - -##### VTGateApi - -This is the main histogram variable to track for vtgates. It gives you a break up of all queries by command, keyspace, and type. - -##### HealthcheckConnections - -It shows the number of tablet connections for query/healthcheck per keyspace, shard, and tablet type. - -#### /debug/query_plans - -This URL gives you all the query plans for queries going through VTGate. - -#### /debug/vschema - -This URL shows the vschema as loaded by VTGate. - -### Alerting - -For VTGate, here’s a list of possible variables to alert on: - -* Error rate -* Error/query rate -* Error/query/tablet-type rate -* VTGate serving graph is stale by x minutes (lock server is down) -* Qps/core -* Latency - - - -## External processes - -Things that need to be configured: - -### Periodic backup configuration - -We recommend to take backups regularly e.g. you should set up a cron job for it. See our recommendations at [{% link user-guide/backup-and-restore.md %}#backup-frequency]({% link user-guide/backup-and-restore.md %}#backup-frequency). - -### Logs archiver/purger - -You will need to run some cron jobs to archive or purge log files periodically. - -### Orchestrator - -[Orchestrator](https://github.com/github/orchestrator) is a tool for -managing MySQL replication topologies, including automated failover. -It can detect master failure and initiate a recovery in a matter of seconds. - -For the most part, Vitess is agnostic to the actions of Orchestrator, -which operates below Vitess at the MySQL level. That means you can -pretty much -[set up Orchestrator](https://github.com/github/orchestrator/wiki/Orchestrator-Manual) -in the normal way, with just a few additions as described below. - -For the [Kubernetes example](https://github.com/vitessio/website/blob/master/content/docs/tutorials/kubernetes.md), we provide a -[sample script](https://github.com/vitessio/vitess/blob/master/examples/kubernetes/orchestrator-up.sh) -to launch Orchestrator for you with these settings applied. - -#### Orchestrator configuration - -Orchestrator needs to know some things from the Vitess side, -like the tablet aliases and whether semisync is enforced -(with async fallback disabled). -We pass this information by telling Orchestrator to execute certain -queries that return local metadata from a non-replicated table, -as seen in our sample -[orchestrator.conf.json](https://github.com/vitessio/vitess/blob/master/docker/orchestrator/orchestrator.conf.json): - -```json - "DetectClusterAliasQuery": "SELECT value FROM _vt.local_metadata WHERE name='ClusterAlias'", - "DetectInstanceAliasQuery": "SELECT value FROM _vt.local_metadata WHERE name='Alias'", - "DetectPromotionRuleQuery": "SELECT value FROM _vt.local_metadata WHERE name='PromotionRule'", - "DetectSemiSyncEnforcedQuery": "SELECT @@global.rpl_semi_sync_master_wait_no_slave AND @@global.rpl_semi_sync_master_timeout > 1000000", -``` - -There is also one thing that Vitess needs to know from Orchestrator, -which is the identity of the master for each shard, if a failover occurs. - -From our experience at YouTube, we believe that this signal is too critical -for data integrity to rely on bottom-up detection such as asking each MySQL -if it thinks it's the master. Instead, we rely on Orchestrator to be the -source of truth, and expect it to send a top-down signal to Vitess. - -This signal is sent by ensuring the Orchestrator server has access to -`vtctlclient`, which it then uses to send an RPC to vtctld, informing -Vitess of the change in mastership via the -[TabletExternallyReparented]({% link reference/vtctl.md %}#tabletexternallyreparented) -command. - -```json - "PostMasterFailoverProcesses": [ - "echo 'Recovered from {failureType} on {failureCluster}. Failed: {failedHost}:{failedPort}; Promoted: {successorHost}:{successorPort}' >> /tmp/recovery.log", - "vtctlclient -server vtctld:15999 TabletExternallyReparented {successorAlias}" - ], -``` - -#### VTTablet configuration - -Normally, you need to seed Orchestrator by giving it the addresses of -MySQL instances in each shard. If you have lots of shards, this could -be tedious or error-prone. - -Luckily, Vitess already knows everything about all the MySQL instances -that comprise your cluster. So we provide a mechanism for tablets to -self-register with the Orchestrator API, configured by the following -vttablet parameters: - -* **orc_api_url**: Address of Orchestrator's HTTP API (e.g. http://host:port/api/). Leave empty to disable Orchestrator integration. -* **orc_discover_interval**: How often (e.g. 60s) to ping Orchestrator's HTTP API endpoint to tell it we exist. 0 means never. - -Not only does this relieve you from the initial seeding of addresses into -Orchestrator, it also means new instances will be discovered immediately, -and the topology will automatically repopulate even if Orchestrator's -backing store is wiped out. Note that Orchestrator will forget stale -instances after a configurable timeout. diff --git a/doc/Sharding.md b/doc/Sharding.md deleted file mode 100644 index 1ab77855db7..00000000000 --- a/doc/Sharding.md +++ /dev/null @@ -1,187 +0,0 @@ -Sharding is a method of horizontally partitioning a database to store -data across two or more database servers. This document explains how -sharding works in Vitess and the types of sharding that Vitess supports. - -## Overview - -A keyspace in Vitess can be sharded or unsharded. An unsharded keyspace -maps directly to a MySQL database. If sharded, the rows of the keyspace -are partitioned into different databases of identical schema. - -For example, if an application's "user" keyspace is split into two -shards, each shard contains records for approximately half of the -application's users. Similarly, each user's information is stored -in only one shard. - -Note that sharding is orthogonal to (MySQL) replication. -A Vitess shard typically contains one MySQL master and many MySQL -slaves. The master handles write operations, while slaves handle -read-only traffic, batch processing operations, and other tasks. -Each MySQL instance within the shard should have the same data, -excepting some replication lag. - -### Supported Operations - -Vitess supports the following types of sharding operations: - -* **Horizontal sharding:** Splitting or merging shards in a sharded keyspace -* **Vertical sharding:** Moving tables from an unsharded keyspace to - a different keyspace. - -With these features, you can start with a single keyspace that contains -all of your data (in multiple tables). As your database grows, you can -move tables to different keyspaces (vertical split) and shard some or -all of those keyspaces (horizontal split) without any real downtime -for your application. - -## Sharding scheme - -Vitess allows you to choose the type of sharding scheme by the choice of -your Primary Vindex for the tables of a shard. Once you have chosen -the Primary Vindex, you can choose the partitions depending on how the -resulting keyspace IDs are distributed. - -Vitess calculates the sharding key or keys for each query and then -routes that query to the appropriate shards. For example, a query -that updates information about a particular user might be directed to -a single shard in the application's "user" keyspace. On the other hand, -a query that retrieves information about several products might be -directed to one or more shards in the application's "product" keyspace. - -### Key Ranges and Partitions - -Vitess uses key ranges to determine which shards should handle any -particular query. - -* A **key range** is a series of consecutive keyspace ID values. It - has starting and ending values. A key falls inside the range if - it is equal to or greater than the start value and strictly less - than the end value. -* A **partition** represents a set of key ranges that covers the entire - space. - -When building the serving graph for a sharded keyspace, -Vitess ensures that each shard is valid and that the shards -collectively constitute a full partition. In each keyspace, one shard -must have a key range with an empty start value and one shard, which -could be the same shard, must have a key range with an empty end value. - -* An empty start value represents the lowest value, and all values are - greater than it. -* An empty end value represents a value larger than the highest possible - value, and all values are strictly lower than it. - -Vitess always converts sharding keys to a left-justified binary string for -computing a shard. This left-justification makes the right-most zeroes -insignificant and optional. Therefore, the value 0x80 is -always the middle value for sharding keys. -So, in a keyspace with two shards, sharding keys that have a binary -value lower than 0x80 are assigned to one shard. Keys with a binary -value equal to or higher than 0x80 are assigned to the other shard. - -Several sample key ranges are shown below: - -``` sh -Start=[], End=[]: Full Key Range -Start=[], End=[0x80]: Lower half of the Key Range. -Start=[0x80], End=[]: Upper half of the Key Range. -Start=[0x40], End=[0x80]: Second quarter of the Key Range. -Start=[0xFF00], End=[0xFF80]: Second to last 1/512th of the Key Range. -``` - -Two key ranges are consecutive if the end value of one range equals the -start value of the other range. - -### Shard Names - -A shard's name identifies the start -and end of the shard's key range, printed in hexadecimal and separated -by a hyphen. For instance, if a shard's key range is the array of bytes -beginning with [ 0x80 ] and ending, noninclusively, with [ 0xc0], then -the shard's name is 80-c0. - -Using this naming convention, the following four shards would be a valid -full partition: - -* -40 -* 40-80 -* 80-c0 -* c0- - -Shards do not need to handle the same size portion of the key space. For example, the following five shards would also be a valid full partition, possibly with a highly uneven distribution of keys. - -* -80 -* 80-c0 -* c0-dc00 -* dc00-dc80 -* dc80- - -## Resharding - -Resharding describes the process of updating the sharding -scheme for a keyspace and dynamically reorganizing data to match the -new scheme. During resharding, Vitess copies, verifies, and keeps -data up-to-date on new shards while the existing shards continue to -serve live read and write traffic. When you're ready to switch over, -the migration occurs with only a few seconds of read-only downtime. -During that time, existing data can be read, but new data cannot be -written. - -The table below lists the sharding (or resharding) processes that you -would typically perform for different types of requirements: - -Requirement | Action ------------ | ------ -Uniformly increase read capacity | Add replicas or split shards -Uniformly increase write capacity | Split shards -Reclaim overprovisioned resources | Merge shards and/or keyspaces -Increase geo-diversity | Add new cells and replicas -Cool a hot tablet | For read access, add replicas or split shards. For write access, split shards. - -### Filtered Replication - -The cornerstone of resharding is replicating the right data. Vitess -implements the following functions to support filtered replication, -the process that ensures that the correct source tablet data is -transferred to the proper destination tablets. - -#### Statement-based Replication - -If you've configured the MySQL servers to use Statement-based Replication (SBR), -then Vitess must be able to identify the destination for such statements during -the filtered replication process. This performed the following way: - -1. The source tablet tags transactions with comments so that MySQL binlogs - contain the filtering data needed during the resharding process. The - comments describe the scope of each transaction (its keyspace ID, - table, etc.). -1. A server process uses the comments to filter the MySQL binlogs and - stream the correct data to the destination tablet. -1. A client process on the destination tablet applies the filtered logs, - which are just regular SQL statements at this point. - -#### Row-based Replication - -If MySQL is configured to use Row-based Replication (RBR), the filtered replication -is performed the following way: - -1. The server process uses the primary vindex to compute the keyspace ID for every - row coming throug the replication stream, and sends that row to the corresponding - target shard. -1. The target shard converts the row into the corresponding DML (Data Manipulation Language) - and applies the statement. - -If using RBR, it's generally required that you have full image turned on. However, if your -Primary Vindex is also part of the Primary key, it's not required, because every RBR event -will always contain the full primary key of its affected row. - -### Additional Tools and Processes - -Vitess provides the following tools to help manage range-based shards: - -* The [vtctl]({% link reference/vtctl.md %}) command-line tool supports - functions for managing keyspaces, shards, tablets, and more. -* Client APIs account for sharding operations. -* The [MapReduce framework](https://github.com/vitessio/vitess/tree/master/java/hadoop/src/main/java/io/vitess/hadoop) - fully utilizes key ranges to read data as quickly as possible, - concurrently from all shards and all replicas. diff --git a/doc/ShardingKubernetes.md b/doc/ShardingKubernetes.md deleted file mode 100644 index 2181b2e004c..00000000000 --- a/doc/ShardingKubernetes.md +++ /dev/null @@ -1,286 +0,0 @@ -This guide walks you through the process of sharding an existing unsharded -Vitess [keyspace]({% link overview/concepts.md %}#keyspace) in -[Kubernetes](https://kubernetes.io/). - -## Prerequisites - -We begin by assuming you've completed the -[Getting Started on Kubernetes]({% link getting-started/index.md %}) guide, and -have left the cluster running. - -## Overview - -We will follow a process similar to the one in the general -[Horizontal Sharding]({% link user-guide/horizontal-sharding.md %}) -guide, except that here we'll give the commands you'll need to do it for -the example Vitess cluster in Kubernetes. - -Since Vitess makes [sharding]({% link user-guide/sharding.md %}) -transparent to the app layer, the -[Guestbook](https://github.com/vitessio/vitess/tree/master/examples/kubernetes/guestbook) -sample app will stay live throughout the -[resharding]({% link user-guide/sharding.md %}#resharding) process, -confirming that the Vitess cluster continues to serve without downtime. - -## Configure sharding information - -The first step is to tell Vitess how we want to partition the data. -We do this by providing a VSchema definition as follows: - -``` json -{ - "sharded": true, - "vindexes": { - "hash": { - "type": "hash" - } - }, - "tables": { - "messages": { - "column_vindexes": [ - { - "column": "page", - "name": "hash" - } - ] - } - } -} -``` - -This says that we want to shard the data by a hash of the `page` column. -In other words, keep each page's messages together, but spread pages around -the shards randomly. - -We can load this VSchema into Vitess like this: - -``` sh -vitess/examples/kubernetes$ ./kvtctl.sh ApplyVSchema -vschema "$(cat vschema.json)" test_keyspace -``` - -## Bring up tablets for new shards - -In the unsharded example, you started tablets for a shard -named *0* in *test_keyspace*, written as *test_keyspace/0*. -Now you'll start tablets for two additional shards, -named *test_keyspace/-80* and *test_keyspace/80-*: - -``` sh -vitess/examples/kubernetes$ ./sharded-vttablet-up.sh -### example output: -# Creating test_keyspace.shard--80 pods in cell test... -# ... -# Creating test_keyspace.shard-80- pods in cell test... -# ... -``` - -Since the sharding key in the Guestbook app is the page number, -this will result in half the pages going to each shard, -since *0x80* is the midpoint of the -[sharding key range]({% link user-guide/sharding.md %}#key-ranges-and-partitions). - -These new shards will run in parallel with the original shard during the -transition, but actual traffic will be served only by the original shard -until we tell it to switch over. - -Check the `vtctld` web UI, or the output of `kvtctl.sh ListAllTablets test`, -to see when the tablets are ready. There should be 5 tablets in each shard. - -Once the tablets are ready, initialize replication by electing the first master -for each of the new shards: - -``` sh -vitess/examples/kubernetes$ ./kvtctl.sh InitShardMaster -force test_keyspace/-80 test-0000000200 -vitess/examples/kubernetes$ ./kvtctl.sh InitShardMaster -force test_keyspace/80- test-0000000300 -``` - -Now there should be a total of 15 tablets, with one master for each shard: - -``` sh -vitess/examples/kubernetes$ ./kvtctl.sh ListAllTablets test -### example output: -# test-0000000100 test_keyspace 0 master 10.64.3.4:15002 10.64.3.4:3306 [] -# ... -# test-0000000200 test_keyspace -80 master 10.64.0.7:15002 10.64.0.7:3306 [] -# ... -# test-0000000300 test_keyspace 80- master 10.64.0.9:15002 10.64.0.9:3306 [] -# ... -``` - -## Copy data from original shard - -The new tablets start out empty, so we need to copy everything from the -original shard to the two new ones, starting with the schema: - -``` sh -vitess/examples/kubernetes$ ./kvtctl.sh CopySchemaShard test_keyspace/0 test_keyspace/-80 -vitess/examples/kubernetes$ ./kvtctl.sh CopySchemaShard test_keyspace/0 test_keyspace/80- -``` - -Next we copy the data. Since the amount of data to copy can be very large, -we use a special batch process called *vtworker* to stream the data from a -single source to multiple destinations, routing each row based on its -*keyspace_id*: - -``` sh -vitess/examples/kubernetes$ ./sharded-vtworker.sh SplitClone test_keyspace/0 -### example output: -# Creating vtworker pod in cell test... -# pods/vtworker -# Following vtworker logs until termination... -# I0416 02:08:59.952805 9 instance.go:115] Starting worker... -# ... -# State: done -# Success: -# messages: copy done, copied 11 rows -# Deleting vtworker pod... -# pods/vtworker -``` - -Notice that we've only specified the source shard, *test_keyspace/0*. -The *SplitClone* process will automatically figure out which shards to use -as the destinations based on the key range that needs to be covered. -In this case, shard *0* covers the entire range, so it identifies -*-80* and *80-* as the destination shards, since they combine to cover the -same range. - -Next, it will pause replication on one *rdonly* (offline processing) tablet -to serve as a consistent snapshot of the data. The app can continue without -downtime, since live traffic is served by *replica* and *master* tablets, -which are unaffected. Other batch jobs will also be unaffected, since they -will be served only by the remaining, un-paused *rdonly* tablets. - -## Check filtered replication - -Once the copy from the paused snapshot finishes, *vtworker* turns on -[filtered replication]({% link user-guide/sharding.md %}#filtered-replication) -from the source shard to each destination shard. This allows the destination -shards to catch up on updates that have continued to flow in from the app since -the time of the snapshot. - -When the destination shards are caught up, they will continue to replicate -new updates. You can see this by looking at the contents of each shard as -you add new messages to various pages in the Guestbook app. Shard *0* will -see all the messages, while the new shards will only see messages for pages -that live on that shard. - -``` sh -# See what's on shard test_keyspace/0: -vitess/examples/kubernetes$ ./kvtctl.sh ExecuteFetchAsDba test-0000000100 "SELECT * FROM messages" -# See what's on shard test_keyspace/-80: -vitess/examples/kubernetes$ ./kvtctl.sh ExecuteFetchAsDba test-0000000200 "SELECT * FROM messages" -# See what's on shard test_keyspace/80-: -vitess/examples/kubernetes$ ./kvtctl.sh ExecuteFetchAsDba test-0000000300 "SELECT * FROM messages" -``` - -Add some messages on various pages of the Guestbook to see how they get routed. - -## Check copied data integrity - -The *vtworker* batch process has another mode that will compare the source -and destination to ensure all the data is present and correct. -The following commands will run a diff for each destination shard: - -``` sh -vitess/examples/kubernetes$ ./sharded-vtworker.sh SplitDiff test_keyspace/-80 -vitess/examples/kubernetes$ ./sharded-vtworker.sh SplitDiff test_keyspace/80- -``` - -If any discrepancies are found, they will be printed. -If everything is good, you should see something like this: - -``` -I0416 02:10:56.927313 10 split_diff.go:496] Table messages checks out (4 rows processed, 1072961 qps) -``` - -## Switch over to new shards - -Now we're ready to switch over to serving from the new shards. -The [MigrateServedTypes]({% link reference/vtctl.md %}#migrateservedtypes) -command lets you do this one -[tablet type]({% link overview/concepts.md %}#tablet) at a time, -and even one [cell]({% link overview/concepts.md %}#cell-data-center) -at a time. The process can be rolled back at any point *until* the master is -switched over. - -``` sh -vitess/examples/kubernetes$ ./kvtctl.sh MigrateServedTypes test_keyspace/0 rdonly -vitess/examples/kubernetes$ ./kvtctl.sh MigrateServedTypes test_keyspace/0 replica -vitess/examples/kubernetes$ ./kvtctl.sh MigrateServedTypes test_keyspace/0 master -``` - -During the *master* migration, the original shard master will first stop -accepting updates. Then the process will wait for the new shard masters to -fully catch up on filtered replication before allowing them to begin serving. -Since filtered replication has been following along with live updates, there -should only be a few seconds of master unavailability. - -When the master traffic is migrated, the filtered replication will be stopped. -Data updates will be visible on the new shards, but not on the original shard. -See it for yourself: Add a message to the guestbook page and then inspect -the database content: - -``` sh -# See what's on shard test_keyspace/0 -# (no updates visible since we migrated away from it): -vitess/examples/kubernetes$ ./kvtctl.sh ExecuteFetchAsDba test-0000000100 "SELECT * FROM messages" -# See what's on shard test_keyspace/-80: -vitess/examples/kubernetes$ ./kvtctl.sh ExecuteFetchAsDba test-0000000200 "SELECT * FROM messages" -# See what's on shard test_keyspace/80-: -vitess/examples/kubernetes$ ./kvtctl.sh ExecuteFetchAsDba test-0000000300 "SELECT * FROM messages" -``` - -## Remove original shard - -Now that all traffic is being served from the new shards, we can remove the -original one. To do that, we use the `vttablet-down.sh` script from the -unsharded example: - -``` sh -vitess/examples/kubernetes$ ./vttablet-down.sh -### example output: -# Deleting pod for tablet test-0000000100... -# pods/vttablet-100 -# ... -``` - -Then we can delete the now-empty shard: - -``` sh -vitess/examples/kubernetes$ ./kvtctl.sh DeleteShard -recursive test_keyspace/0 -``` - -You should then see in the vtctld **Topology** page, or in the output of -`kvtctl.sh ListAllTablets test` that the tablets for shard *0* are gone. - -## Tear down and clean up - -Before stopping the Container Engine cluster, you should tear down the Vitess -services. Kubernetes will then take care of cleaning up any entities it created -for those services, like external load balancers. - -Since you already cleaned up the tablets from the original unsharded example by -running `./vttablet-down.sh`, that step has been replaced with -`./sharded-vttablet-down.sh` to clean up the new sharded tablets. - -``` sh -vitess/examples/kubernetes$ ./guestbook-down.sh -vitess/examples/kubernetes$ ./vtgate-down.sh -vitess/examples/kubernetes$ ./sharded-vttablet-down.sh -vitess/examples/kubernetes$ ./vtctld-down.sh -vitess/examples/kubernetes$ ./etcd-down.sh -``` - -Then tear down the Container Engine cluster itself, which will stop the virtual -machines running on Compute Engine: - -``` sh -$ gcloud container clusters delete example -``` - -It's also a good idea to remove the firewall rules you created, unless you plan -to use them again soon: - -``` sh -$ gcloud compute firewall-rules delete vtctld guestbook -``` diff --git a/doc/ShardingKubernetesWorkflow.md b/doc/ShardingKubernetesWorkflow.md deleted file mode 100644 index a428861c9ef..00000000000 --- a/doc/ShardingKubernetesWorkflow.md +++ /dev/null @@ -1,222 +0,0 @@ -This guide shows you an example about how to apply range-based sharding -process in an existing unsharded Vitess [keyspace]({% link overview/concepts.md %}#keyspace) -in [Kubernetes](https://kubernetes.io/) using the horizontal resharding workflow. -In this example, we will reshard from 1 shard "0" into 2 shards "-80" and "80-". -We will follow a process similar to the general -[Horizontal Sharding guide]({% link user-guide/horizontal-sharding-workflow.md %}) -except that here we'll give you the commands you'll need in the kubernetes -environment. - -## Overview - -The horizontal resharding process overview can be found -[here]({% link user-guide/horizontal-sharding-workflow.md %}#overview) - -## Prerequisites - -You should complete the [Getting Started on Kubernetes]({% link getting-started/index.md %}) -guide (please finish all the steps before Try Vitess resharding) and have left -the cluster running. Then, please follow these steps before running the -resharding process: - -1. Configure sharding information. By running the command below, we tell - Vitess to shard the data using the page column through the provided VSchema. - - ``` sh - vitess/examples/kubernetes$ ./kvtctl.sh ApplyVSchema -vschema "$(cat vschema.json)" test_keyspace - ``` - -1. Bring up tablets for 2 additional shards: *test_keyspace/-80* and - *test_keyspace/80-* (you can learn more about sharding key range - [here]({% link user-guide/sharding.md %}#key-ranges-and-partitions)): - - ``` sh - vitess/examples/kubernetes$ ./sharded-vttablet-up.sh - ``` - - Initialize replication by electing the first master for each of the new shards: - - ``` sh - vitess/examples/kubernetes$ ./kvtctl.sh InitShardMaster -force test_keyspace/-80 test-200 - vitess/examples/kubernetes$ ./kvtctl.sh InitShardMaster -force test_keyspace/80- test-300 - ``` - - After this set up, you should see the shards on Dashboard page of vtctld UI - (http://localhost:8001/api/v1/proxy/namespaces/default/services/vtctld:web). - There should be 1 serving shard named "0" and 2 non-serving shards named - "-80" and "80-". Click the shard node, you can inspect all its tablets - information. - -1. Bring up a *vtworker* process (a pod in kubernetes) and a *vtworker* service - which is used by the workflow to connect with the *vtworker* pod. (The - number of *vtworker* should be the same of original shards, we start one - vtworker process here since we have only one original shard in this example.) - - ``` sh - vitess/examples/kubernetes$ ./vtworker-up.sh - ``` - - You can check out the external IP for the vtworker service (please take note - of this external IP, it will be used for the vtworker address in creating - the resharding workflow): - - ``` sh - $ kubectl get service vtworker - ``` - - You can verify this *vtworker* process set up through http://:15032/Debugging. - It should be pinged successfully. After you ping the vtworker, please click - "Reset Job". Otherwise, the vtworker is not ready for executing other tasks. - -## Horizontal Resharding Workflow - -### Create the Workflow - -Using the web vtctld UI to create the workflow is the same with [steps in local -environment]({% link user-guide/horizontal-sharding-workflow.md %}#create-the-workflow) -except for filling the "vtworker Addresses" slot. You need to get the external -IP for vtworker service (mentioned in -[Prerequisites](#prerequisites)) and use -\:15033 as the vtworker addresses. - -Another way to start the workflow is through the vtctlclient command: - -``` sh -vitess/examples/kubernetes$ ./kvtctl.sh WorkflowCreate -skip_start=false horizontal_resharding -keyspace=test_keyspace -vtworkers=:15033 -enable_approvals=true -``` - -### Approvals of Tasks Execution (Canary feature) - -Please check the content in general -[Horizontal Sharding guide]({% link user-guide/horizontal-sharding-workflow.md %}#approvals-of-tasks-execution-canary-feature) - -### Retry - -Please check the content in general -[Horizontal Sharding guide]({% link user-guide/horizontal-sharding-workflow.md %}#retry) - -### Checkpoint and Recovery - -Please check the content in general -[Horizontal Sharding guide]({% link user-guide/horizontal-sharding-workflow.md %}#checkpoint-and-recovery) - -## Verify Results and Clean up - -After the resharding process, data in the original shard is identically copied -to new shards. Data updates will be visible on the new shards, but not on the -original shard. You should then see in the vtctld UI *Dashboard* page that shard -*0* becomes non-serving and shard *-80* and shard *80-* are serving shards. -Verify this for yourself: inspect the database content, -then add messages to the guestbook page and inspect again. You can use -http://\ (EXTERNAL-IP refers to the external IP of the guest book -service) to visit the guestbook webpage in your browser and choose any random -page for inserting information. Details can be found -[here]({% link getting-started/index.md %}#test-your-cluster-with-a-client-app)) -You can inspect the database content using the following commands: - -``` sh -# See what's on shard test_keyspace/0 -# (no updates visible since we migrated away from it): -vitess/examples/kubernetes$ ./kvtctl.sh ExecuteFetchAsDba test-100 "SELECT * FROM messages" -# See what's on shard test_keyspace/-80: -vitess/examples/kubernetes$ ./kvtctl.sh ExecuteFetchAsDba test-200 "SELECT * FROM messages" -# See what's on shard test_keyspace/80-: -vitess/examples/kubernetes$ ./kvtctl.sh ExecuteFetchAsDba test-300 "SELECT * FROM messages" -``` - -You can also checkout the *Topology* browser on vtctl UI. It shows you the -information of the keyrange of shard and their serving status. Each shard -should look like this - -[shard 0](https://cloud.githubusercontent.com/assets/23492389/24313876/072f61e6-109c-11e7-938a-23b8398958aa.png) - -[shard -80](https://cloud.githubusercontent.com/assets/23492389/24313813/bd11c824-109b-11e7-83d4-cca3f6093360.png) - -[shard 80-](https://cloud.githubusercontent.com/assets/23492389/24313743/7f9ae1c4-109b-11e7-997a-774f4f16e473.png) - -After you verify the result, we can remove the -original shard since all traffic is being served from the new shards: - -``` sh -vitess/examples/kubernetes$ ./vttablet-down.sh -``` - -Then we can delete the now-empty shard: - -``` sh -vitess/examples/local$ ./kvtctl.sh DeleteShard -recursive test_keyspace/0 -``` - -You should then see in the vtctld UI *Dashboard* page that shard *0* is gone. - -## Tear down and Clean up - -Since you already cleaned up the tablets from the original unsharded example by -running `./vttablet-down.sh`, that step has been replaced with -`./sharded-vttablet-down.sh` to clean up the new sharded tablets. - -``` sh -vitess/examples/kubernetes$ ./guestbook-down.sh -vitess/examples/kubernetes$ ./vtworker-down.sh -vitess/examples/kubernetes$ ./vtgate-down.sh -vitess/examples/kubernetes$ ./sharded-vttablet-down.sh -vitess/examples/kubernetes$ ./vtctld-down.sh -vitess/examples/kubernetes$ ./etcd-down.sh -``` - -Then tear down the Container Engine cluster itself, which will stop the virtual machines running on Compute Engine: - -``` sh -$ gcloud container clusters delete example -``` - -It's also a good idea to remove the firewall rules you created, unless you plan to use them again soon: - -``` sh -$ gcloud compute firewall-rules delete vtctld guestbook -``` - -## Reference - -You can checkout the old version tutorial [here]({% link user-guide/sharding-kubernetes.md %}). -It walks you through the resharding process by manually executing commands. - -For the kubectl command line interface, which helps you interact with the -kubernetes cluster, you can check out more information -[here](https://kubernetes.io/docs/user-guide/kubectl-overview). - -## Troubleshooting - -### Checking status of your setup. - -To get status of pods and services you've setup, you can use the commands -(all pods should be in Running status, guestbook and vtworker services -should have assign external IP): - -``` sh -$ kubectl get pods -$ kubectl get services -``` - -### Debugging pods. - -If you find out a component (e.g. vttablet, vtgate) doesn't respond as -expected, you can surface the log using this command (the pod name can be -found out using the command mentioned above): - -``` sh -$ kubectl logs [-c ] -### example -# $ kubectl logs vtworker -# $ kubectl logs vttablet-XXXX -c vttablet -``` - -### Debugging pending external IP issue. - -If you found that your service has a pending external IP for long time, it -maybe because you've reached the limitation of networking resource. Please -go to your project console on gcloud (cloud.google.com), then go to *Load -balancing* page (you can search "Load balancing" in the search bar to get -to the page) under Networking section. Then, click "advanced menu" for -editing load balancing resources. Check the forwarding rules you have and -delete the unused ones if there are too many. diff --git a/doc/TestingOnARamDisk.md b/doc/TestingOnARamDisk.md deleted file mode 100644 index 1adb82cf273..00000000000 --- a/doc/TestingOnARamDisk.md +++ /dev/null @@ -1,28 +0,0 @@ -# Testing On A Ramdisk - -The `integration_test` testsuite contains tests that may time-out if run against a slow disk. If your workspace lives on hard disk (as opposed to [SSD](https://en.wikipedia.org/wiki/Solid-state_drive)), it is recommended that you run tests using a [ramdisk](https://en.wikipedia.org/wiki/RAM_drive). - -# Setup - -First, set up a normal vitess development environment by running `bootstrap.sh` and sourcing `dev.env` (see [GettingStarted](GettingStarted.md)). Then overwrite the testing temporary directories and make a 4GiB (smaller sizes may work, if you're constrained on RAM) ramdisk at the location of your choice (this example uses `/tmp/vt`): - -```sh -export VT_TEST_TMPDIR=/tmp/vt - -mkdir ${VT_TEST_TMPDIR} -sudo mount -t tmpfs -o size=4g tmpfs ${VT_TEST_TMPDIR} - -export VTDATAROOT=${VT_TEST_TMPDIR} -export TEST_UNDECLARED_OUTPUTS_DIR=${VT_TEST_TMPDIR} -``` - -You can now run tests (either individually or as part of `make test`) normally. - -# Teardown - -When you are done testing, you can remove the ramdisk by unmounting it and then removing the directory: - -```sh -sudo umount ${VT_TEST_TMPDIR} -rmdir ${VT_TEST_TMPDIR} -``` diff --git a/doc/TopologyService.md b/doc/TopologyService.md deleted file mode 100644 index d4c63348d6a..00000000000 --- a/doc/TopologyService.md +++ /dev/null @@ -1,586 +0,0 @@ -# Topology Service - -This document describes the Topology Service, a key part of the Vitess -architecture. This service is exposed to all Vitess processes, and is used to -store small pieces of configuration data about the Vitess cluster, and provide -cluster-wide locks. It also supports watches, and master election. - -Concretely, the Topology Service features are implemented by -a [Lock Server](https://en.wikipedia.org/wiki/Distributed_lock_manager), referred -to as Topology Server in the rest of this document. We use a plug-in -implementation and we support multiple Lock Servers (Zookeeper, etcd, Consul, …) -as backends for the service. - -## Requirements and usage - -The Topology Service is used to store information about the Keyspaces, the -Shards, the Tablets, the Replication Graph, and the Serving Graph. We store -small data structures (a few hundred bytes) per object. - -The main contract for the Topology Server is to be very highly available and -consistent. It is understood it will come at a higher latency cost and very low -throughput. - -We never use the Topology Server as an RPC mechanism, nor as a storage system -for logs. We never depend on the Topology Server being responsive and fast to -serve every query. - -The Topology Server must also support a Watch interface, to signal when certain -conditions occur on a node. This is used for instance to know when keyspaces -topology changes (for resharding for instance). - -### Global vs local - -We differentiate two instances of the Topology Server: the Global instance, and -the per-cell Local instance: - -* The Global instance is used to store global data about the topology that - doesn’t change very often, for instance information about Keyspaces and - Shards. The data is independent of individual instances and cells, and needs - to survive a cell going down entirely. -* There is one Local instance per cell, that contains cell-specific information, - and also rolled-up data from the global + local cell to make it easier for - clients to find the data. The Vitess local processes should not use the Global - topology instance, but instead the rolled-up data in the Local topology - server as much as possible. - -The Global instance can go down for a while and not impact the local cells (an -exception to that is if a reparent needs to be processed, it might not work). If -a Local instance goes down, it only affects the local tablets in that instance -(and then the cell is usually in bad shape, and should not be used). - -Furthermore, the Vitess processes will not use the Global nor the Local Topology -Server to serve individual queries. They only use the Topology Server to get the -topology information at startup and in the background, but never to directly -serve queries. - -### Recovery - -If a local Topology Server dies and is not recoverable, it can be wiped out. All -the tablets in that cell then need to be restarted so they re-initialize their -topology records (but they won’t lose any MySQL data). - -If the global Topology Server dies and is not recoverable, this is more of a -problem. All the Keyspace / Shard objects have to be re-created. Then the cells -should recover. - -## Global data - -This section describes the data structures stored in the global instance of the -topology server. - -### Keyspace - -The Keyspace object contains various information, mostly about sharding: how is -this Keyspace sharded, what is the name of the sharding key column, is this -Keyspace serving data yet, how to split incoming queries, … - -An entire Keyspace can be locked. We use this during resharding for instance, -when we change which Shard is serving what inside a Keyspace. That way we -guarantee only one operation changes the keyspace data concurrently. - -### Shard - -A Shard contains a subset of the data for a Keyspace. The Shard record in the -global topology contains: - -* the Master tablet alias for this shard (that has the MySQL master). -* the sharding key range covered by this Shard inside the Keyspace. -* the tablet types this Shard is serving (master, replica, batch, …), per cell - if necessary. -* if during filtered replication, the source shards this shard is replicating - from. -* the list of cells that have tablets in this shard. -* shard-global tablet controls, like blacklisted tables no tablet should serve - in this shard. - -A Shard can be locked. We use this during operations that affect either the -Shard record, or multiple tablets within a Shard (like reparenting), so multiple -jobs don’t concurrently alter the data. - -### VSchema data - -The VSchema data contains sharding and routing information for -the [VTGate V3](https://github.com/vitessio/vitess/blob/master/doc/VTGateV3Features.md) API. - -## Local data - -This section describes the data structures stored in the local instance (per -cell) of the topology server. - -### Tablets - -The Tablet record has a lot of information about a single vttablet process -running inside a tablet (along with the MySQL process): - -* the Tablet Alias (cell+unique id) that uniquely identifies the Tablet. -* the Hostname, IP address and port map of the Tablet. -* the current Tablet type (master, replica, batch, spare, …). -* which Keyspace / Shard the tablet is part of. -* the sharding Key Range served by this Tablet. -* user-specified tag map (to store per installation data for instance). - -A Tablet record is created before a tablet can be running (either by `vtctl -InitTablet` or by passing the `init_*` parameters to the vttablet process). -The only way a Tablet record will be updated is one of: - -* The vttablet process itself owns the record while it is running, and can - change it. -* At init time, before the tablet starts. -* After shutdown, when the tablet gets deleted. -* If a tablet becomes unresponsive, it may be forced to spare to make it - unhealthy when it restarts. - -### Replication graph - -The Replication Graph allows us to find Tablets in a given Cell / Keyspace / -Shard. It used to contain information about which Tablet is replicating from -which other Tablet, but that was too complicated to maintain. Now it is just a -list of Tablets. - -### Serving graph - -The Serving Graph is what the clients use to find the per-cell topology of a -Keyspace. It is a roll-up of global data (Keyspace + Shard). vtgates only open a -small number of these objects and get all they need quickly. - -#### SrvKeyspace - -It is the local representation of a Keyspace. It contains information on what -shard to use for getting to the data (but not information about each individual -shard): - -* the partitions map is keyed by the tablet type (master, replica, batch, …) and - the values are list of shards to use for serving. -* it also contains the global Keyspace fields, copied for fast access. - -It can be rebuilt by running `vtctl RebuildKeyspaceGraph`. It is -automatically rebuilt when a tablet starts up in a cell and the SrvKeyspace -for that cell / keyspace doesn't exist yet. It will also be changed -during horizontal and vertical splits. - -#### SrvVSchema - -It is the local roll-up for the VSchema. It contains the VSchema for all -keyspaces in a single object. - -It can be rebuilt by running `vtctl RebuildVSchemaGraph`. It is automatically -rebuilt when using `vtctl ApplyVSchema` (unless prevented by flags). - -## Workflows involving the Topology Server - -The Topology Server is involved in many Vitess workflows. - -When a Tablet is initialized, we create the Tablet record, and add the Tablet to -the Replication Graph. If it is the master for a Shard, we update the global -Shard record as well. - -Administration tools need to find the tablets for a given Keyspace / Shard: -first we get the list of Cells that have Tablets for the Shard (global topology -Shard record has these) then we use the Replication Graph for that Cell / -Keyspace / Shard to find all the tablets then we can read each tablet record. - -When a Shard is reparented, we need to update the global Shard record with the -new master alias. - -Finding a tablet to serve the data is done in two stages: vtgate maintains a -health check connection to all possible tablets, and they report which keyspace -/ shard / tablet type they serve. vtgate also reads the SrvKeyspace object, to -find out the shard map. With these two pieces of information, vtgate can route -the query to the right vttablet. - -During resharding events, we also change the topology a lot. An horizontal split -will change the global Shard records, and the local SrvKeyspace records. A -vertical split will change the global Keyspace records, and the local -SrvKeyspace records. - -## Exploring the data in a Topology Server - -We store the proto3 binary data for each object. - -We use the following paths for the data, in all implementations: - -*Global Cell*: - -* CellInfo path: `cells//CellInfo` -* Keyspace: `keyspaces//Keyspace` -* Shard: `keyspaces//shards//Shard` -* VSchema: `keyspaces//VSchema` - -*Local Cell*: - -* Tablet: `tablets/-/Tablet` -* Replication Graph: `keyspaces//shards//ShardReplication` -* SrvKeyspace: `keyspaces//SrvKeyspace` -* SrvVSchema: `SvrVSchema` - -The `vtctl TopoCat` utility can decode these files when using the -`-decode_proto` option: - -``` sh -TOPOLOGY="-topo_implementation zk2 -topo_global_server_address global_server1,global_server2 -topo_global_root /vitess/global" - -$ vtctl $TOPOLOGY TopoCat -decode_proto -long /keyspaces/*/Keyspace -path=/keyspaces/ks1/Keyspace version=53 -sharding_column_name: "col1" -path=/keyspaces/ks2/Keyspace version=55 -sharding_column_name: "col2" -``` - -The `vtctld` web tool also contains a topology browser (use the `Topology` -tab on the left side). It will display the various proto files, decoded. - -## Implementations - -The Topology Server interfaces are defined in our code in `go/vt/topo/`, -specific implementations are in `go/vt/topo/`, and we also have -a set of unit tests for it in `go/vt/topo/test`. - -This part describes the implementations we have, and their specific -behavior. - -If starting from scratch, please use the `zk2`, `etcd2` or `consul` -implementations. We deprecated the old `zookeeper` and `etcd` -implementations. See the migration section below if you want to migrate. - -### Zookeeper `zk2` implementation - -This is the current implementation when using Zookeeper. (The old `zookeeper` -implementation is deprecated). - -The global cell typically has around 5 servers, distributed one in each -cell. The local cells typically have 3 or 5 servers, in different server racks / -sub-networks for higher resilience. For our integration tests, we use a single -ZK server that serves both global and local cells. - -We provide the `zk` utility for easy access to the topology data in -Zookeeper. It can list, read and write files inside any Zoopeeker server. Just -specify the `-server` parameter to point to the Zookeeper servers. Note the -vtctld UI can also be used to see the contents of the topology data. - -To configure a Zookeeper installation, let's start with the global cell -service. It is described by the addresses of the servers (comma separated list), -and by the root directory to put the Vitess data in. For instance, assuming we -want to use servers `global_server1,global_server2` in path `/vitess/global`: - -``` sh -# The root directory in the global server will be created -# automatically, same as when running this command: -# zk -server global_server1,global_server2 touch -p /vitess/global - -# Set the following flags to let Vitess use this global server: -# -topo_implementation zk2 -# -topo_global_server_address global_server1,global_server2 -# -topo_global_root /vitess/global -``` - -Then to add a cell whose local topology servers `cell1_server1,cell1_server2` -will store their data under the directory `/vitess/cell1`: - -``` sh -TOPOLOGY="-topo_implementation zk2 -topo_global_server_address global_server1,global_server2 -topo_global_root /vitess/global" - -# Reference cell1 in the global topology service: -vtctl $TOPOLOGY AddCellInfo \ - -server_address cell1_server1,cell1_server2 \ - -root /vitess/cell1 \ - cell1 -``` - -If only one cell is used, the same Zookeeper instance can be used for both -global and local data. A local cell record still needs to be created, just use -the same server address, and very importantly a *different* root directory. - -[Zookeeper -Observers](https://zookeeper.apache.org/doc/trunk/zookeeperObservers.html) can -also be used to limit the load on the global Zookeeper. They are configured by -specifying the addresses of the observers in the server address, after a `|`, -for instance: -`global_server1:p1,global_server2:p2|observer1:po1,observer2:po2`. - -#### Implementation details - -We use the following paths for Zookeeper specific data, in addition to the -regular files: - -* Locks sub-directory: `locks/` (for instance: - `keyspaces//Keyspace/locks/` for a keyspace) -* Master election path: `elections/` - -Both locks and master election are implemented using ephemeral, sequential files -which are stored in their respective directory. - -### etcd `etcd2` implementation (new version of `etcd`) - -This topology service plugin is meant to use etcd clusters as storage backend -for the topology data. This topology service supports version 3 and up of the -etcd server. - -This implementation is named `etcd2` because it supersedes our previous -implementation `etcd`. Note that the storage format has been changed with the -`etcd2` implementation, i.e. existing data created by the previous `etcd` -implementation must be migrated manually (See migration section below). - -To configure an `etcd2` installation, let's start with the global cell -service. It is described by the addresses of the servers (comma separated list), -and by the root directory to put the Vitess data in. For instance, assuming we -want to use servers `http://global_server1,http://global_server2` in path -`/vitess/global`: - -``` sh -# Set the following flags to let Vitess use this global server, -# and simplify the example below: -# -topo_implementation etcd2 -# -topo_global_server_address http://global_server1,http://global_server2 -# -topo_global_root /vitess/global -TOPOLOGY="-topo_implementation etcd2 -topo_global_server_address http://global_server1,http://global_server2 -topo_global_root /vitess/global -``` - -Then to add a cell whose local topology servers -`http://cell1_server1,http://cell1_server2` will store their data under the -directory `/vitess/cell1`: - -``` sh -# Reference cell1 in the global topology service: -# (the TOPOLOGY variable is defined in the previous section) -vtctl $TOPOLOGY AddCellInfo \ - -server_address http://cell1_server1,http://cell1_server2 \ - -root /vitess/cell1 \ - cell1 -``` - -If only one cell is used, the same etcd instances can be used for both -global and local data. A local cell record still needs to be created, just use -the same server address and, very importantly, a *different* root directory. - -#### Implementation details - -For locks, we use a subdirectory named `locks` in the directory to lock, and an -ephemeral file in that subdirectory (it is associated with a lease, whose TTL -can be set with the `-topo_etcd_lease_duration` flag, defaults to 30 -seconds). The ephemeral file with the lowest ModRevision has the lock, the -others wait for files with older ModRevisions to disappear. - -Master elections also use a subdirectory, named after the election Name, and use -a similar method as the locks, with ephemeral files. - -We store the proto3 binary data for each object (as the v3 API allows us to store binary data). - -### Consul `consul` implementation - -This topology service plugin is meant to use Consul clusters as storage backend -for the topology data. - -To configure a `consul` installation, let's start with the global cell -service. It is described by the address of a server, -and by the root node path to put the Vitess data in (it cannot start with `/`). For instance, assuming we -want to use servers `global_server:global_port` with node path -`vitess/global`: - -``` sh -# Set the following flags to let Vitess use this global server, -# and simplify the example below: -# -topo_implementation consul -# -topo_global_server_address global_server:global_port -# -topo_global_root vitess/global -TOPOLOGY="-topo_implementation consul -topo_global_server_address global_server:global_port -topo_global_root vitess/global -``` - -Then to add a cell whose local topology server -`cell1_server1:cell1_port` will store their data under the -directory `vitess/cell1`: - -``` sh -# Reference cell1 in the global topology service: -# (the TOPOLOGY variable is defined in the previous section) -vtctl $TOPOLOGY AddCellInfo \ - -server_address cell1_server1:cell1_port \ - -root vitess/cell1 \ - cell1 -``` - -If only one cell is used, the same consul instances can be used for both -global and local data. A local cell record still needs to be created, just use -the same server address and, very importantly, a *different* root node path. - -#### Implementation details - -For locks, we use a file named `Lock` in the directory to lock, and the regular -Consul Lock API. - -Master elections use a single lock file (the Election path) and the regular -Consul Lock API. The contents of the lock file is the ID of the current master. - -Watches use the Consul long polling Get call. They cannot be interrupted, so we -use a long poll whose duration is set by the -`-topo_consul_watch_poll_duration` flag. Canceling a watch may have to -wait until the end of a polling cycle with that duration before returning. - -## Running in only one cell - -The topology service is meant to be distributed across multiple cells, and -survive single cell outages. However, one common usage is to run a Vitess -cluster in only one cell / region. This part explains how to do this, and later -on upgrade to multiple cells / regions. - -If running in a single cell, the same topology service can be used for both -global and local data. A local cell record still needs to be created, just use -the same server address and, very importantly, a *different* root node path. - -In that case, just running 3 servers for topology service quorum is probably -sufficient. For instance, 3 etcd servers. And use their address for the local -cell as well. Let's use a short cell name, like `local`, as the local data in -that topology server will later on be moved to a different topology service, -which will have the real cell name. - -### Extending to more cells - -To then run in multiple cells, the current topology service needs to be split -into a global instance and one local instance per cell. Whereas, the initial -setup had 3 topology servers (used for global and local data), we recommend to -run 5 global servers across all cells (for global topology data) and 3 local -servers per cell (for per-cell topology data). - -To migrate to such a setup, start by adding the 3 local servers in the second -cell and run `vtctl AddCellinfo` as was done for the first cell. Tablets and -vtgates can now be started in the second cell, and used normally. - -vtgate can then be configured with a list of cells to watch for tablets using -the `-cells_to_watch` command line parameter. It can then use all tablets in -all cells to route traffic. Note this is necessary to access the master in -another cell. - -After the extension to two cells, the original topo service contains both the -global topology data, and the first cell topology data. The more symmetrical -configuration we're after would be to split that original service into two: a -global one that only contains the global data (spread across both cells), and a -local one to the original cells. To achieve that split: - -* Start up a new local topology service in that original cell (3 more local - servers in that cell). -* Pick a name for that cell, different from `local`. -* Use `vtctl AddCellInfo` to configure it. -* Make sure all vtgates can see that new local cell (again, using - `-cells_to_watch`). -* Restart all vttablets to be in that new cell, instead of the `local` cell name - used before. -* Use `vtctl RemoveKeyspaceCell` to remove all mentions of the `local` cell in - all keyspaces. -* Use `vtctl RemoveCellInfo` to remove the global configurations for that - `local` cell. -* Remove all remaining data in the global topology service that are in the old - local server root. - -After this split, the configuration is completely symmetrical: - -* a global topology service, with servers in all cells. Only contains global - topology data about Keyspaces, Shards and VSchema. Typically it has 5 servers - across all cells. -* a local topology service to each cell, with servers only in that cell. Only - contains local topology data about Tablets, and roll-ups of global data for - efficient access. Typically, it has 3 servers in each cell. - -## Migration between implementations - -We provide the `topo2topo` binary file to migrate between one implementation -and another of the topology service. - -The process to follow in that case is: - -* Start from a stable topology, where no resharding or reparenting is on-going. -* Configure the new topology service so it has at least all the cells of the - source topology service. Make sure it is running. -* Run the `topo2topo` program with the right flags. `-from_implementation`, - `-from_root`, `-from_server` describe the source (old) topology - service. `-to_implementation`, `-to_root`, `-to_server` describe the - destination (new) topology service. -* Run `vtctl RebuildKeyspaceGraph` for each keyspace using the new topology - service flags. -* Run `vtctl RebuildVSchemaGraph` using the new topology service flags. -* Restart all `vtgate` using the new topology service flags. They will see the - same keyspaces / shards / tablets / vschema as before, as the topology was - copied over. -* Restart all `vttablet` using the new topology service flags. They may use the - same ports or not, but they will update the new topology when they start up, - and be visible from vtgate. -* Restart all `vtctld` processes using the new topology service flags. So that - the UI also shows the new data. - -Sample commands to migrate from deprecated `zookeeper` to `zk2` -topology would be: - -``` sh -# Let's assume the zookeeper client config file is already -# exported in $ZK_CLIENT_CONFIG, and it contains a global record -# pointing to: global_server1,global_server2 -# an a local cell cell1 pointing to cell1_server1,cell1_server2 -# -# The existing directories created by Vitess are: -# /zk/global/vt/... -# /zk/cell1/vt/... -# -# The new zk2 implementation can use any root, so we will use: -# /vitess/global in the global topology service, and: -# /vitess/cell1 in the local topology service. - -# Create the new topology service roots in global and local cell. -zk -server global_server1,global_server2 touch -p /vitess/global -zk -server cell1_server1,cell1_server2 touch -p /vitess/cell1 - -# Store the flags in a shell variable to simplify the example below. -TOPOLOGY="-topo_implementation zk2 -topo_global_server_address global_server1,global_server2 -topo_global_root /vitess/global" - -# Reference cell1 in the global topology service: -vtctl $TOPOLOGY AddCellInfo \ - -server_address cell1_server1,cell1_server2 \ - -root /vitess/cell1 \ - cell1 - -# Now copy the topology. Note the old zookeeper implementation doesn't need -# any server or root parameter, as it reads ZK_CLIENT_CONFIG. -topo2topo \ - -from_implementation zookeeper \ - -to_implementation zk2 \ - -to_server global_server1,global_server2 \ - -to_root /vitess/global \ - -# Rebuild SvrKeyspace objects in new service, for each keyspace. -vtctl $TOPOLOGY RebuildKeyspaceGraph keyspace1 -vtctl $TOPOLOGY RebuildKeyspaceGraph keyspace2 - -# Rebuild SrvVSchema objects in new service. -vtctl $TOPOLOGY RebuildVSchemaGraph - -# Now restart all vtgate, vttablet, vtctld processes replacing: -# -topo_implementation zookeeper -# With: -# -topo_implementation zk2 -# -topo_global_server_address global_server1,global_server2 -# -topo_global_root /vitess/global -# -# After this, the ZK_CLIENT_CONF file and environment variables are not needed -# any more. -``` - -### Migration using the `Tee` implementation - -If your migration is more complex, or has special requirements, we also support -a 'tee' implementation of the topo service interface. It is defined in -`go/vt/topo/helpers/tee.go`. It allows communicating to two topo services, -and the migration uses multiple phases: - -* Start with the old topo service implementation we want to replace. -* Bring up the new topo service, with the same cells. -* Use `topo2topo` to copy the current data from the old to the new topo. -* Configure a Tee topo implementation to maintain both services. - * Note we don't expose a plugin for this, so a small code change is necessary. - * all updates will go to both services. - * the `primary` topo service is the one we will get errors from, if any. - * the `secondary` topo service is just kept in sync. - * at first, use the old topo service as `primary`, and the new one as - `secondary`. - * then, change the configuration to use the new one as `primary`, and the - old one as `secondary`. Reverse the lock order here. - * then rollout a configuration to just use the new service. - - diff --git a/doc/Troubleshooting.md b/doc/Troubleshooting.md deleted file mode 100644 index a7b4b0541c2..00000000000 --- a/doc/Troubleshooting.md +++ /dev/null @@ -1,47 +0,0 @@ -If there is a problem in the system, one or many alerts would typically fire. If a problem was found through means other than an alert, then the alert system needs to be iterated upon. - -When an alert fires, you have the following sources of information to perform your investigation: - -* Alert values -* Graphs -* Diagnostic URLs -* Log files - -Below are a few possible scenarios. - -### Elevated query latency on master - -Diagnosis 1: Inspect the graphs to see if QPS has gone up. If yes, drill down on the more detailed QPS graphs to see which table, or user caused the increase. If a table is identified, look at /debug/queryz for queries on that table. - -Action: Inform engineer about toxic query. If it’s a specific user, you can stop their job or throttle them to keep the load manageable. As a last resort, blacklist query to allow the rest of the system to stay healthy. - -Diagnosis 2: QPS did not go up, only latency did. Inspect the per-table latency graphs. If it’s a specific table, then it’s most likely a long-running low QPS query that’s skewing the numbers. Identify the culprit query and take necessary steps to get it optimized. Such queries usually do not cause outage. So, there may not be a need to take extreme measures. - -Diagnosis 3: Latency seems to be up across the board. Inspect transaction latency. If this has gone up, then something is causing MySQL to run too many concurrent transactions which causes slow-down. See if there are any tx pool full errors. If there is an increase, the INFO logs will dump info about all transactions. From there, you should be able to if a specific sequence of statements is causing the problem. Once that is identified, find out the root cause. It could be network issues, or it could be a recent change in app behavior. - -Diagnosis 4: No particular transaction seems to be the culprit. Nothing seems to have changed in any of the requests. Look at system variables to see if there are hardware faults. Is the disk latency too high? Are there memory parity errors? If so, you may have to failover to a new machine. - -### Master starts up read-only - -To prevent accidentally accepting writes, our default `my.cnf` settings -tell MySQL to always start up read-only. If the master MySQL gets restarted, -it will thus come back read-only until you intervene to confirm that it should -accept writes. You can use the [SetReadWrite]({% link reference/vtctl.md %}#setreadwrite) -command to do that. - -However, usually if something unexpected happens to the master, it's better to -reparent to a different replica with [EmergencyReparentShard]({% link reference/vtctl.md %}#emergencyreparentshard). If you need to do planned maintenance on the master, -it's best to first reparent to another replica with [PlannedReparentShard]({% link reference/vtctl.md %}#plannedreparentshard). - -### Vitess sees the wrong tablet as master - -If you do a failover manually (not through Vitess), you'll need to tell -Vitess which tablet corresponds to the new master MySQL. Until then, -writes will fail since they'll be routed to a read-only replica -(the old master). Use the [TabletExternallyReparented]({% link reference/vtctl.md %}#tabletexternallyreparented) -command to tell Vitess the new master tablet for a shard. - -Tools like [Orchestrator](https://github.com/github/orchestrator) -can be configured to call this automatically when a failover occurs. -See our sample [orchestrator.conf.json](https://github.com/vitessio/vitess/blob/1129d69282bb738c94b8af661b984b6377a759f7/docker/orchestrator/orchestrator.conf.json#L131) -for an example of this. diff --git a/doc/TwoPhaseCommitGuide.md b/doc/TwoPhaseCommitGuide.md deleted file mode 100644 index dccdb196eac..00000000000 --- a/doc/TwoPhaseCommitGuide.md +++ /dev/null @@ -1,86 +0,0 @@ -# 2PC User guide - -# Overview - -Vitess 2PC allows you to perform atomic distributed commits. The feature is implemented using traditional MySQL transactions, and hence inherits the same guarantees. With this addition, Vitess can be configured to support the following three levels of atomicity: - -1. **Single database**: At this level, only single database transactions are allowed. Any transaction that tries to go beyond a single database will be failed. -2. **Multi database**: A transaction can span multiple databases, but the commit will be best effort. Partial commits are possible. -3. **2PC**: This is the same as Multi-database, but the commit will be atomic. - -2PC commits are more expensive than multi-database because the system has to save away the statements before starting the commit process, and also clean them up after a successful commit. This is the reason why it's a separate option instead of being always on. - -## Isolation - -2PC transactions guarantee atomicity: either the whole transaction commits, or it's rolled back entirely. It does not guarantee Isolation (in the ACID sense). This means that a third party that performs cross-database reads can observe partial commits while a 2PC transaction is in progress. - -Guaranteeing ACID Isolation is very contentious and has high costs. Providing it by default would have made vitess impractical for the most common use cases. - - -# Configuring VTGate - -The atomicity policy is controlled by the `transaction_mode` flag. The default value is `multi`, and will set it in multi-database mode. This is the same as the previous legacy behavior. - -To enforce single-database transactions, the VTGates can be started by specifying `transaction_mode=single`. - -To enable 2PC, the VTGates need to be started with `transaction_mode=twopc`. The VTTablets will require a few more flags, which will be explained below. - -The VTGate `transaction_mode` flag decides what to allow. The application can independently request a specific atomicity for each transaction. The request will be honored by VTGate only if it does not exceed what is allowed by the `transaction_mode`. For example, `transaction_mode=single` will only allow single-db transactions. On the other hand, `transaction_mode=twopc` will allow all three levels of atomicity. - -# Driver APIs - -The way to request atomicity from the application is driver-specific. - -## Go driver - -For the Go driver, you request the atomicity by adding it to the context using the `WithAtomicity` function. For more details, please refer to the respective GoDocs. - -## Python driver - -For Python, the `begin` function of the cursor has an optional `single_db` flag. If the flag is `True`, then the request is for a single-db transaction. If `False` (or unspecified), then the following `commit` call's `twopc` flag decides if the commit is 2PC or Best Effort (`multi`). - -## Java & PHP (TODO) - -## Adding support in a new driver - -The VTGate RPC API extends the `Begin` and `Commit` functions to specify atomicity. The API mimics the Python driver: The `BeginRequest` message provides a `single_db` flag and the `CommitRequest` message provides an `atomic` flag which is synonymous to `twopc`. - -# Configuring VTTablet - -The following flags need to be set to enable 2PC support in VTTablet: - -* **twopc_enable**: This flag needs to be turned on. -* **twopc_coordinator_address**: This should specify the address (or VIP) of the VTGate that VTTablet will use to resolve abandoned transactions. -* **twopc_abandon_age**: This is the time in seconds that specifies how long to wait before asking a VTGate to resolve an abandoned transaction. - -With the above flags specified, every master VTTablet also turns into a watchdog. If any 2PC transaction is left lingering for longer than `twopc_abandon_age` seconds, then VTTablet invokes VTGate and requests it to resolve it. Typically, the `abandon_age` needs to be substantially longer than the time it takes for a typical 2PC commit to complete (10s of seconds). - -# Configuring MySQL - -The usual default values of MySQL are sufficient. However, it's important to verify that `wait_timeout` (28800) has not been changed. If this value was changed to be too short, then MySQL could prematurely kill a prepared transaction causing data loss. - -# Monitoring - -A few additional variables have been added to `/debug/vars`. Failures described below should be rare. But these variables are present so you can build an alert mechanism if anything were to go wrong. - -## Critical failures - -The following errors are not expected to happen. If they do, it means that 2PC transactions have failed to commit atomically: - -* **InternalErrors.TwopcCommit**: This is a counter that shows the number of times a prepared transaction failed to fulfil a commit request. -* **InternalErrors.TwopcResurrection**: This counter is incremented if a new master failed to resurrect a previously prepared (and unresolved) transaction. - -## Alertable failures - -The following failures are not urgent, but require someone to investigate: - -* **InternalErrors.WatchdogFail**: This counter is incremented if there are failures in the watchdog thread of VTTablet. This means that the watch dog is not able to alert VTGate of abandoned transactions. -* **Unresolved.Prepares**: This is a gauge that is set based on the number of lingering Prepared transactions that have been alive for longer than 5x the abandon age. This usually means that a distributed transaction has repeatedly failed to resolve. A more serious condition is when the metadata for a distributed transaction has been lost and this Prepare is now permanently orphaned. - -# Repairs - -If any of the alerts fire, it's time to investigate. Once you identify the `dtid` or the VTTablet that originated the alert, you can navigate to the `/twopcz` URL. This will display three lists: - -1. **Failed Transactions**: A transaction reaches this state if it failed to commit. The only action allowed for such transactions is that you can discard it. However, you can record the DMLs that were involved and have someone come up with a plan to repair the partial commit. -2. **Prepared Transactions**: Prepared transactions can be rolled back or committed. Prepared transactions must be remedied only if their root Distributed Transaction has been lost or resolved. -3. **Distributed Transactions**: Distributed transactions can only be Concluded (marked as resolved). diff --git a/doc/UpdateStream.md b/doc/UpdateStream.md deleted file mode 100644 index 8891fb11cd9..00000000000 --- a/doc/UpdateStream.md +++ /dev/null @@ -1,498 +0,0 @@ -# Update Stream - -Update Stream is a Vitess service that provides a change stream for any keyspace. -The use cases for this service include: - -* Providing an *invalidation stream*, that an application can use to maintain a cache. - -* Maintain an external copy of the data in another system, that is only updated - when the data changes. - -* Maintain a change record of all the transactions that have been applied to the data. - -A good understanding -of [Vitess Replication]({% link user-guide/vitess-replication.md %}) is required to -understand this document better. We will go through the use cases in a bit more -details, then introduce the EventToken notion, and finally explain the service. - -## Use Cases - -### Maintaining Cache Consistency - -The first use case we’re trying to address is to maintain a consistent cache of -the data. The problem here has two parts: - -* When data changes, we need to invalidate the cache. - -* When we want to re-populate the cache after an invalidation, we need to make - sure we get data that is more recent than the data change. For instance, we - can’t just re-query any replica, as it might be behind on replication. - -This process can be somewhat resilient to some stream anomalies. For instance, -invalidating the same record twice in some corner cases is fine, as long as we -don’t poison the cache with an old value. - -Note the location / ownership of the cache is not set in stone: - -* Application-layer cache: the app servers maintain the cache. It’s very early - in the serving chain, so in case of a cache hit, it’s lower latency. However, - an invalidation process needs to run and is probably also owned by the - application layer, which is somewhat annoying. - -* vtgate-layer cache: it would be a row cache accessed by vtgate, transparent to - the app. It requires vtgate to do a lot of extra heavy-lifting, depending on - what we want to support. Cache invalidation is still required, at a row level. - -* vttablet-layer cache: this is the old rowcache. Since the cache is not shared - across instances, and the app still needs a cache, we abandoned this one. - -Since the vtgate-layer cache is much harder to work on (because of the query -implications), and will probably require similar components as the app-layer -cache, we decided to work on the app-layer cache for now, with possibly an -invalidation process that is somewhat tied to the app. - -The *composite object cache* is an interesting use case: if the application is -in charge of the cache, it would seem possible to put in the cache higher level -composite objects, that are built from multiple table records. They would be -invalidated any time one of the composing table record is changed. They need to -be addressed by a part of the primary key, so they’re easy to find. - -### Change Log - -A Change Log provides a stream of all data changes, so an external application -can either record these changes, or keep an external database up to date with -the latest data. - -Unlike the Cache Invalidation use case, this is not as forgiving. If we have -duplicate updates, they will need to be handled. - -## Design Considerations - -### Single Shard Update Stream - -This has been supported in Vitess for a while, but not exposed. It works as follows: - -* vttablet adds an SQL comment to every DML, that contains the Primary Key of - the modified row. - -* vttablet provides a streaming service that can connect to the local MySQL - replication stream, extract the comment, and stream events to the client. - -* Use the GTID as the start / restart position. It is sent back with each - update, and an Update Stream can be started from it. - -Note Vitess supports both the MariaDB GTIDs (domain:server:sequence) and the -MySQL 5.6 GTID Sets (encoded in SID blocks). - -### Surviving Resharding: Problem - -The Vitess tools are supposed to provide transparent sharding for the user’s -data. Most of the trouble we run into is surviving resharding events, when we -hop over from one set of shards to another set of shards. - -Two strategies then come to mind: - -* Provide a per-shard update stream. Let the user handle the hop when resharding - happens. If we were to do this for the Cache use case, we would also need to - provide some way of preventing bad corner cases, like a full cache flush, or - no cache update for a while, or lost cache invalidations. Simple for us, but - the app can be a lot more complicated. And the Change Log use case is also - hard to do. - -* Provide a per-keyrange update stream. Vtgate would connect to the right - shards, and resolve all conflicts. We can add the restriction that the client - only asks for keyranges that are exactly matching to one or more shards. For - instance, if a keyspace is sharded four ways, -40, 40-80, 80-c0, c0-, we can - support clients asking for -40, -80, -, but not for 60-a0 for instance. - -As a reminder, the resharding process is somewhat simple: - -* Let’s say we want to split a shard 20-40 into two shards, 20-30 and 30-40. At - first, only 20-40 exists and has a GTID stream. - -* We create 20-30 and 30-40, each has its own GTID stream. We copy the schema, - and the data. - -* Filtered replication is enabled. A transaction in 20-40 is replayed on both - 20-30 and 30-40, with an extra blp_checkpoint statement, that saves the 20-40 - GTID. - -* At some point, we migrate the read-only traffic from 20-40 replicas to 20-30 - and 30-40 replicas. (Note: this is probably when we want to migrate any - invalidation process as well). - -* Then as a final step, the writes are migrated from 20-40 to 20-30 and 30-40. - -So we have a window of time when both streams are available simultaneously. For -the resharding process to be operationally better, that window should be as -small as possible (so we don't run with two copies of the data for too long). So -we will make sure an Update Stream can hop from the source shards to the -destination shards quickly. - -### Surviving Resharding: First Try - -To solve the shard hop problem during resharding, we tried to explore adding -good timing information to the replication stream. However: - -* Since the time is added by vttablet, not MySQL, it is not accurate, not - monotonic, and provides no guarantees. - -* Which such loose guarantees, it is no better than the second-accurate - timestamp added by MySQL to each transaction. - -So this idea was abandoned. - -The GTID stream maintained by MySQL is the only true source of IDs for -changes. It’s the only one we can trivially seek on, and get binlogs. The main -issue with it is that it’s not maintained across shards when resharding. - -However, it is worth noting that a transaction replicated by the binlog streamer -using Filtered Replication also saves the original GTID and the source -transaction timestamp in the blp_checkpoint table. So we could extract the -original GTID and timestamp from at least that statement (and if not, from an -added comment). - -### Change Log and SBR - -If all we have is Statement Based Replication (SBR), we cannot get an accurate -Change Log. SBR only provides the SQL statements, there is no easy way for us to -parse them to get the final values of the columns (OK, there is, it’s just too -complicated). And we cannot just query MySQL, as it may have already applied -more transactions related to that record. So for Change Log, we need Row Based -Replication (or a more advanced replication system). - -Note we can use the following setup: - -* Master and replicas use SBR. - -* Rdonly use SBR to connect to master, but log RBR logs locally. - -* We get the replication stream from rdonly servers. - -This is a bit awkward, and the main question is: what happens if a rdonly server -is the only server that has replicated and semi-sync-acked a transaction, while -the master is dying? Then to get that change, the other servers would get the -RBR version of the change. - -Vitess support for RBR is coming. We will then explore these use cases further. - -## Detailed Design - -In the rest of this document, we’ll explore using the GTID when tracking a -single shard, and revert to the timestamp when we hop across shards. - -As we do not want the application layer to understand / parse / compare the -GTIDs, we’ll use an opaque token, and just pass it around the various -layers. Vtgate / vttablet will understand it. The invalidation process should -not have to, but will as there is no better solution. - -This approach can be made to work for the cache invalidation use case, but it -might be difficult to provide an exact point in time for recovery / switching -over to a different set of shards during resharding. - -For the Change Log, we’ll see what we can provide. - -### Event Token - -We define an Event Token structure that contains: - -* a MySQL replication timestamp (int64, seconds since Epoch). - -* a shard name - -* A GTIDSet position. - -It basically describes a position in a replication stream. - -An Event Token is always constructed from reading a transaction from the -binlogs. If filtered replication is running, we use the source shard timestamp. - -Event Token comparison: - -* First, if the timestamps are different, just use that. - -* Then, if both use the same shard name, compare the GTIDs. - -* Otherwise we do not know for sure. It will depend on the usage to figure out - what we do. - -*Possible Extension*: when filtered replication is running, we also update -blp_checkpoint with the source GTID. We could add that information to the Event -Token. Let’s try to go without in the first version, to remain simple. More on -this later in the ‘Data Dump, Keeping it up to Date’ section. - -### Vttablet Changes - -#### Watching the Replication Stream - -Replicas are changed to add a background routine that reads the binlogs -(controlled by the `watch_replication_stream` flag). When a tablet’s type is set -to `replica`, the routine starts. It stops when the tablet is not `replica` any -more (goes to `master`, `worker`, …). - -The routine starts reading the binlog from the current position. It then remembers: - -* The Event Token of the last seen transaction. - -* *Possible Optimization*: A map of the first time a timestamp is seen to the - corresponding GTID position and filename / position. This would be a value per - second. Let’s age these out: we keep the values for the last N seconds, then - we keep a value for every minute for the last M hours. We forget values older - than 3 days (or whatever the binlog retention time is). - -#### `include_event_token` Option - -We added an option to the Query Service API for Execute calls, called -`include_event_token`. If set, vttablet will get the last seen Event Token right -before issuing the query to MySQL, and include it in the response. This -essentially represents the last known replication position that we’re sure the -data we’re returning is fresher than. - -#### `compare_event_token` Option - -We added an option to the Query Service API for Execute calls, called -`compare_event_token`. The provided event token is sent along with the call, and -vttablet compares that token with the one its current replication stream watcher -has. It returns the result of the comparison in ResultExtras. - -#### Update Stream API Change - -The Update Stream API in vttablet right now can only start from a GTID. We added a -new API that can start from a timestamp as well. It will look for the right -binlog file to start with, and start streaming events, discarding events until -it finds the provided timestamp. *Optimization*: It can also look in the map to -find the closest value it can start with, and then read from the binlogs until -it finds the first timestamp. If it doesn’t have old enough values in its map, -it errors out (the goal is to have vtgate then try another tablet to start -from). For each event, we will also return the corresponding Event Token. - -*Optimization*: if an Update Stream client is caught up to the current binlog -reading thread, we can just tee the binlog stream to that client. We won’t do -that in the first version, as we don’t expect that many clients. - -Note that when filtered replication is running, we need to have the timestamp of -the source transaction on the source shard, not the local timestamp of the -applied transaction. Which also means that timestamps will not be always -linearly increasing in the stream, in the case of a shard merge (although they -will be linearly increasing for a given keyspace_id). - -### Vtgate Changes - -We added a new Update Stream service to vtgate. It takes as input a keyspace and -an optional KeyRange (for sharded keyspaces). As a starting point, it takes a -timestamp. - -*Caveat*: As previously mentioned, at first, we can add the restriction that the -client only asks for KeyRanges that are exactly matching to one or more -shards. For instance, if a keyspace is sharded four ways, -40, 40-80, 80-c0, -c0-, we can support clients asking for -40, -80, -, but not for 60-a0 for -instance. Lifting that restriction is somewhat easy, we’d just have to filter -the returned keyspace_ids by KeyRange, but that’s extra work for not much gain -in the short term (and we don’t parse keyspace_id in Binlog Streamer right now, -just the PK). - -After using the partition map in SrvKeyspace, vtgate will have a list of shards -to query. It will need to create a connection for every shard that overlaps with -the input KeyRange. For every shard, it will pick an up-to-date replica and use -the Update Stream API mentioned above. If the vttablet cannot provide the -stream, it will failover to another one. It will then start an Update Stream on -all sources, and just merge and stream the results back to the source. For each -Event Token that is read from a source, vtgate will also send the smallest -timestamp of all Events it’s seen in all sources. That way the client has a -value to start back from in case it needs to restart. - -In case of resharding event, the list of shards to connect to may change. Vtgate -will build a map of overlapping shards, to know which source shards are mapped -to which destination shards. It will then stop reading from all the source -shards, find the minimum timestamp of the last event it got from each source, -and use that to restart the stream on the destination shards. - -*Alternate Simpler Solution*: when vtgate notices a SrvKeyspace change in the -serving shards, it just aborts the invalidation stream. The client is -responsible for reconnecting with the last timestamp it’s seen. The client will -need to handle this error case anyway (when vtgates get upgraded at least). - -*Caveat*: this will produce duplicate Event Tokens, with the same timestamp but -with GTID positions from two different streams. More on this later, but for a -Cache Invalidation scenario, no issue, and for a Change Log application, we’ll -see how we can deal with it. - -We also add the same `include_event_token` flag to vtgate query service. It just -passes it along to the underlying vttablet. It’s only supported for -single-keyspace_id queries. The resulting EventToken is just returned back as -is. - -## Use Cases How To - -Let's revisit our use cases and see how this addresses them. - -### Cache Invalidation - -The idea is to use the Event Token coming from both the Execute results and the -Update Stream to maintain cache consistency. - -The cache contains entries with both: - -* An Event Token. It describes either the invalidation, or the last population. - -* An optional value. - -The invalidation process works as follows: - -* It asks vtgate for an Update Stream for a provided keyspace / KeyRange, - starting at the current timestamp (or from a few seconds/minutes/hours in the - past, or from the last checkpointed timestamp it had saved). - -* Vtgate resolves the keyrange into shards. It starts an invalidation stream - with a healthy replica in each shard from the provided timestamp. - -* Vtgate sends back all Event Tokens it collects, with all of timestamp, shard - name and GTID. - -* For each change it gets, the invalidation process reads the cache record. Two cases: - - * No entry in the cache: it stores the Event Token (to indicate the cache - should not be populated unless the value is greater) with no value. - - * An entry in the cache exists, with an Event Token: - - * If the cached Event Token is strictly older, update it with the new Event - Token, clear the value. - - * If the cached Event Token is strictly more recent, discard the new Event. - - * If we don’t know which Event Token is the most recent (meaning they have - the same timestamp, and are read from different invalidation stream), we - need to do the safest thing: invalidate the cache with the current Event - Token. This is the safest because we’re guaranteed to get duplicate - events, and not miss events. - - * In any case the invalidation process only updates the cache if it still - contains the value it read (CAS). Otherwise it rereads and tries again - (means an appserver or another invalidator somehow also updated the cache). - -A regular appserver will query the cache for the value it wants. It will get either: - -* No entry: asks vtgate for the Event Token when querying the database, use a - CAS operation to set the value the returned Event Token + Value. - -* An entry with both an Event Token and a Value: Just use the value. - -* An entry with just an Event Token and no Value: - - * Send the Event Token along with the query to vtgate as - `compare_event_token`, and also asking for Event Token using `include_event_token`. - - * Vtgate will query vttablet as usual, but also passing both flags. - - * Vttablet will then compare the provided Event Token with the one that was - included. It will include in the response the knowledge of the Event Token - comparison as a boolean, only set if the data read is `fresher`. - - * Depending on the `fresher` boolean flag, the app will: - - * Data read is more recent: Update the cache with new Event Token / Value. - - * Data read is not more recent (or we don't know for sure): don’t update the cache. - -*Constraints*: - -* When restarting the invalidation process, we start from a point back in time, - let’s say N seconds behind now. Since we can ask destination shards at this - point for events that are N seconds old, filtered replication has to have been - running for at least N seconds. (Alternatively, the invalidators can - checkpoint their current position from time to time, and restart from that - when starting up, and revert back to N seconds behind now). - -* As mentioned before, the shard range queried by the invalidation process - should cover a round number of actual shards. - -* The invalidation process needs to know how to compare tokens. This is a - bummer, I don’t see any way around it. We could simplify and only do the - timestamp comparison part, but that would mean the cache is unused for up to - an entire second upon changes. The appserver doesn’t need to compare, it gives - the value to vtgate and let it do the work. - -To see a sample use of the Update Stream feature, look at -the -[cache_invalidation.py](https://github.com/vitessio/vitess/blob/master/test/cache_invalidation.py) integration -test. It shows how to do the invalidaiton in python, and the application -component. - -### Extension: Removing Duplicate Events - -In the previous section, we use timestamps to easily seek on replication -streams. If we added the ability to seek on any source GTID that appears in the -destination stream, we should be able to precisely seek at the right spot. That -would make exact transitions from one stream to the next possible. Again, as -long as the destination shard in a resharding event has been running filtered -replication for as long as we want to go back. - -However, describing a position on a replication stream becomes tricky: it needs -one Event Token per replication stream. When resharding the Event Tokens would -jump around. When restarting a stream from an Event Token list, we may need to -restart earlier in some cases and skip some items. - -*Bottom Line*: - -* This would require a bunch of non-trivial code. - -* This requires that filtered replication would be running for at least as long - as we want to go back in time for the starting point. - -If there is no use case for it, let’s not do it. - -### Extension: Adding Update Data to the Stream, Towards Change Log - -Let’s add a flag to the streaming query, that, if specified, asks for the -changed columns as well as the PK. - -* If using SBR, and the flag is present, vttablet can just query the row at the - time we get the event, and send it along. As already mentioned, the data may - not be exactly up to date. It is however guaranteed to be newer than the Event - Token, which might be good enough to put in a cache for instance. - -* If using RBR, we just get the data for free, just send it along. - -*Bottom Line*: Let’s try to go without this extension and see how it goes. We -can implement the additional data when we fully support RBR. - -### Extension: Data Dump, Keeping It Up To Date - -*Use Case*: keep a secondary database (like a HBase database) up to date. -*Requirements*: RBR replication, plus Data included in the Stream (previous extension). - -It’s simple: - -* The external database has the same schema as MySQL. Each row is indexed by - PK. It also has an extra field, for the last Event Token. - -* Remember start time of the process, let’s call it StartTime - -* Dump the data to other database. Using Map/Reduce, whatever. Do not populate - the Event Tokens. - -* Start an invalidation process, asking for changes from StartTime. When getting - updates, read the current external database row and its Event Token: - - * If there is no existing row / no Event token, save the new value. - - * If there is an existing row with a strictly more recent Event Token, ignore - the event. - - * Otherwise (when the existing Event Token is older or we don’t know), store - the new Value / Event Token. - -Note this again means the dumping process needs to be able to compare Event -Tokens, as the invalidator does. - -*Caveat*: As described, the values in the secondary storage will converge, but -they may go back in time for a bit, as we will process duplicate events during -resharding, and we may not know how to compare them. - -*Extension*: if we also add the source GTID in Event Tokens read from a -destination shard during filtered replication, we can break the tie easily on -duplicate events, and guarantee we only move forward. This seems like the -easiest solution, and we can then use only timestamps as starting times for -restarting the sync process. - diff --git a/doc/Upgrading.md b/doc/Upgrading.md deleted file mode 100644 index 04723da9ded..00000000000 --- a/doc/Upgrading.md +++ /dev/null @@ -1,49 +0,0 @@ -# Upgrading a Vitess Installation - -This document highlights things to look after when upgrading a Vitess production installation to a newer Vitess release. - -Generally speaking, upgrading Vitess is a safe and easy process because it is explicitly designed for it. This is because in YouTube we follow the practice of releasing new versions often (usually from the tip of the Git master branch). - -## Compatibility - -Our versioning strategy is based on [Semantic Versioning](https://semver.org/). - -Vitess version numbers follow the format `MAJOR.MINOR.PATCH`. -We guarantee compatibility when upgrading to a newer **patch** or **minor** version. -Upgrades to a higher **major** version may require manual configuration changes. - -In general, always **read the 'Upgrading' section of the release notes**. -It will mention any incompatible changes and necessary manual steps. - -## Upgrade Order - -We recommend to upgrade components in a bottom-to-top order such that "old" clients will talk to "new" servers during the transition. - -Please use this upgrade order (unless otherwise noted in the release notes): - -- vtctld -- vttablet -- vtgate -- application code which links client libraries - -*vtctld* is listed first to make sure that you can still administrate Vitess - or if not find out as soon as possible. - -## Canary Testing - -Within the vtgate and vttablet components, we recommend to [canary](https://martinfowler.com/bliki/CanaryRelease.html) single instances, keyspaces and cells. Upgraded canary instances can "bake" for several hours or days to verify that the upgrade did not introduce a regression. Eventually, you can upgrade the remaining instances. - -## Rolling Upgrades - -We recommend to automate the upgrade process with a configuration management software. It will reduce the possibility of human errors and simplify the process of managing all instances. - -As of June 2016 we do not have templates for any major open-source configuration management software because our internal upgrade process is based on a proprietary software. Therefore, we invite open-source users to contribute such templates. - -Any upgrade should be a rolling release i.e. usually one tablet at a time within a shard. This ensures that the remaining tablets continue serving live traffic and there is no interruption. - -## Upgrading the Master Tablet - -The *master* tablet of each shard should always be updated last in the following manner: - -- verify that all *replica* tablets in the shard have been upgraded -- reparent away from the current *master* to a *replica* tablet -- upgrade old *master* tablet diff --git a/doc/UserGuideIntroduction.md b/doc/UserGuideIntroduction.md deleted file mode 100644 index 261abfa46ef..00000000000 --- a/doc/UserGuideIntroduction.md +++ /dev/null @@ -1,83 +0,0 @@ -## Platform support - -We continuously test against Ubuntu 14.04 (Trusty) and Debian 8 (Jessie). -Other Linux distributions should work as well. - -## Database support - -Vitess supports [MySQL 5.6](https://dev.mysql.com/doc/refman/5.6/en/), -[MariaDB 10.0](https://downloads.mariadb.org/mariadb/10.0.21/), and any -newer versions like MySQL 5.7, etc. Vitess also supports Percona's -variations of these versions. - -### Relational capabilities - -Vitess attempts to leverage the capabilities of the underlying MySQL -instances to the fullest extent. In this respect, any query that can -be passed through to a single keyspace, shard or set of shards will -be sent to the MySQL servers as is. - -This approach allows you to exploit the full capabilities of MySQL -as long as the relationships and constraints are within one shard (or -unsharded keyspace). - -For relationships that go beyond shards, Vitess provides -support through the [VSchema]({% link user-guide/vschema.md %}). - -### Schema management - -Vitess supports several functions for looking at your schema and -validating its consistency across tablets in a shard or across all -shards in a keyspace. - -In addition, Vitess supports -[data definition statements](https://dev.mysql.com/doc/refman/5.6/en/sql-syntax-data-definition.html) -that create, modify, or delete database tables. Vitess executes -schema changes on the master tablet within each shard, and those -changes then propagate to slave tablets via replication. Vitess does -not support other types of DDL statements, such as those that affect -stored procedures or grants. - -Before executing a schema change, Vitess validates the SQL syntax -and determines the impact of the change. It also does a pre-flight -check to ensure that the update can be applied to your schema. In -addition, to avoid reducing the availability of your entire system, -Vitess rejects changes that exceed a certain scope. - -See the [Schema Management]({% link user-guide/schema-management.md %}) -section of this guide for more information. - -## Supported clients - -The VTGate server is the main entry point that applications use -to connect to Vitess. - -VTGate understands the MySQL binary protocol. So, any client that -can directly talk to MySQL can also use Vitess. - -Additionally, VTGate exposes its functionality through a -[gRPC](https://www.grpc.io/) API which has support for multiple languages. - -Accessing Vitess through gRPC has some minor advantages over the MySQL -protocol: - -* You can send requests with bind variables, which is slightly more - efficient and secure than building the full text query. -* You can exploit the statelessness of connections. For example, you - can start a transaction using one VTGate server, and complete it - using another. - -Vitess currently provides gRPC based connectors for Java (JDBC) and Go -(database/sql). All others can use the native MySQL drivers instead. The -native MySQL drivers for Java and Go should also work. - -## Backups - -Vitess supports data backups to either a network mount (e.g. NFS) or to a blob store. -Backup storage is implemented through a pluggable interface, -and we currently have plugins available for Google Cloud Storage, Amazon S3, -and Ceph. - -See the [Backing Up Data]({% link user-guide/backup-and-restore.md %}) section -of this guide for more information about creating and restoring data -backups with Vitess. diff --git a/doc/VSchema.md b/doc/VSchema.md deleted file mode 100644 index 83c207badd7..00000000000 --- a/doc/VSchema.md +++ /dev/null @@ -1,340 +0,0 @@ -# VSchema User Guide - -VSchema stands for Vitess Schema. In contrast to a traditional database schema that contains metadata about tables, a VSchema contains metadata about how tables are organized across keyspaces and shards. Simply put, it contains the information needed to make Vitess look like a single database server. - -For example, the VSchema will contain the information about the sharding key for a sharded table. When the application issues a query with a WHERE clause that references the key, the VSchema information will be used to route the query to the appropriate shard. - -## Sharding Model - -In Vitess, a `keyspace` is sharded by `keyspace ID` ranges. Each row is assigned a keyspace ID, which acts like a street address, and it determines the shard where the row lives. In some respect, one could say that the `keyspace ID` is the equivalent of a NoSQL sharding key. However, there are some differences: - -1. The `keyspace ID` is a concept that is internal to Vitess. The application does not need to know anything about it. -2. There is no physical column that stores the actual `keyspace ID`. This value is computed as needed. - -This difference is significant enough that we do not refer to the keyspace ID as the sharding key. we will later introduce the concept of a Primary Vindex which more closely resembles the NoSQL sharding key. - -Mapping to a `keyspace ID`, and then to a shard, gives us the flexibility to reshard the data with minimal disruption because the `keyspace ID` of each row remains unchanged through the process. - -## Vindex - -The Sharding Key is a concept that was introduced by NoSQL datastores. It is based on the fact that there is only one access path to the data, which is the Key. However, relational databases are more versatile about the data and their relationships. So, sharding a database by only designating a sharding key is often insufficient. - -If one were to draw an analogy, the indexes in a database would be the equivalent of the key in a NoSQL datastore, except that databases allow you to define multiple indexes per table, and there are many types of indexes. Extending this analogy to a sharded database results in different types of cross-shard indexes. In Vitess, these are called Vindexes. - -Simplistically stated, a Vindex provides a way to map a column value to a `keyspace ID`. This mapping can be used to identify the location of a row. A variety of vindexes are available to choose from with different trade-offs, and you can choose one that best suits your needs. - -Vindexes offer many flexibilities: - -* A table can have multiple Vindexes. -* Vindexes could be NonUnique, which allows a column value to yield multiple keyspace IDs. -* They could be a simple function or be based on a lookup table. -* They could be shared across multiple tables. -* Custom Vindexes can be plugged in, and Vitess will still know how to reshard using such Vindexes. - -### The Primary Vindex - -The Primary Vindex is analogous to a database primary key. Every sharded table must have one defined. A Primary Vindex must be unique: given an input value, it must produce a single keyspace ID. This unique mapping will be used at the time of insert to decide the target shard for a row. Conceptually, this is also equivalent to the NoSQL Sharding Key, and we often refer to the Primary Vindex as the Sharding Key. - -Uniqueness for a Primary Vindex does not mean that the column has to be a primary key or unique in the MySQL schema. You can have multiple rows that map to the same keyspace ID. The Vindex uniqueness constraint is only used to make sure that all rows for a keyspace ID live in the same shard. - -However, there is a subtle difference: NoSQL datastores let you choose the Sharding Key, but the Sharding Scheme is generally hardcoded in the engine. In Vitess, the choice of Vindex lets you control how a column value maps to a keyspace ID. In other words, a Primary Vindex in Vitess not only defines the Sharding Key, it also decides the Sharding Scheme. - -Vindexes come in many varieties. Some of them can be used as Primary Vindex, and others have different purposes. The following sections will describe their properties. - -### Secondary Vindexes - -Secondary Vindexes are additional vindexes you can define against other columns of a table offering you optimizations for WHERE clauses that do not use the Primary Vindex. Secondary Vindexes return a single or a limited set of `keyspace IDs` which will allow VTGate to only target shards where the relevant data is present. In the absence of a Secondary Vindex, VTGate would have to send the query to all shards. - -Secondary Vindexes are also commonly known as cross-shard indexes. It is important to note that Secondary Vindexes are only for making routing decisions. The underlying database shards will most likely need traditional indexes on those same columns. - -### Unique and NonUnique Vindex - -A Unique Vindex is one that yields at most one keyspace ID for a given input. Knowing that a Vindex is Unique is useful because VTGate can push down some complex queries into VTTablet if it knows that the scope of that query cannot exceed a shard. Uniqueness is also a prerequisite for a Vindex to be used as Primary Vindex. - -A NonUnique Vindex is analogous to a database non-unique index. It is a secondary index for searching by an alternate WHERE clause. An input value could yield multiple keyspace IDs, and rows could be matched from multiple shards. For example, if a table has a `name` column that allows duplicates, you can define a cross-shard NonUnique Vindex for it, and this will let you efficiently search for users that match a certain `name`. - -### Functional and Lookup Vindex - -A Functional Vindex is one where the column value to keyspace ID mapping is pre-established, typically through an algorithmic function. In contrast, a Lookup Vindex is one that gives you the ability to create an association between a value and a keyspace ID, and recall it later when needed. - -Typically, the Primary Vindex is Functional. In some cases, it is the identity function where the input value yields itself as the kesypace id. However, one could also choose other algorithms like hashing or mod functions. - -A Lookup Vindex is usually backed by a lookup table. This is analogous to the traditional database index, except that it is cross-shard. At the time of insert, the computed keyspace ID of the row is stored in the lookup table against the column value. - -### Shared Vindexes - -Relational databases encourage normalization, which lets you split data into different tables to avoid duplication in the case of one-to-many relationships. In such cases, a key is shared between the two tables to indicate that the rows are related, aka `Foreign Key`. - -In a sharded environment, it is often beneficial to keep those rows in the same shard. If a Lookup Vindex was created on the foreign key column of each of those tables, you would find that the backing tables would actually be identical. In such cases, Vitess lets you share a single Lookup Vindex for multiple tables. Of these, one of them is designated as the owner, which is responsible for creating and deleting these associations. The other tables just reuse these associations. - -Caveat: If you delete a row from the owner table, Vitess will not perform cascading deletes. This is mainly for efficiency reasons; The application is likely capable of doing this more efficiently. - -Functional Vindexes can be also be shared. However, there is no concept of ownership because the column to keyspace ID mapping is pre-established. - -### Orthogonality - -The previously described properties are mostly orthogonal. Combining them gives rise to the following valid categories: - -* **Functional Unique**: This is the most popular category because it is the one best suited to be a Primary Vindex. -* **Functional NonUnique**: There are currently no use cases that need this category. -* **Lookup Unique Owned**: This gets used for optimizing high QPS queries that do not use the Primary Vindex columns in their WHERE clause. There is a price to pay: You incur an extra write to the lookup table for insert and delete operations, and an extra lookup for read operations. However, it is worth it if you do not want these high QPS queries to be sent to all shards. -* **Lookup Unique Unowned**: This category is used as an optimization as described in the Shared Vindexes section. -* **Lookup NonUnique Owned**: This gets used for high QPS queries on columns that are non-unique. -* **Lookup NonUnique Unowned**: You would rarely have to use this category because it is unlikely that you will be using a column as foreign key that is not unique within a shard. But it is theoretically possible. - -Of the above categories, `Functional Unique` and `Lookup Unique Unowned` Vindexes can be Primary. This is because those are the only ones that are unique and have the column to keyspace ID mapping pre-established. This is required because the Primary Vindex is responsible for assigning the keyspace ID for a row when it is created. - -However, it is generally not recommended to use a Lookup vindex as Primary because it is too slow for resharding. If absolutely unavoidable, you can use a Lookup Vindex as Primary. In such cases, it is recommended that you add a `keyspace ID` column to such tables. While resharding, Vitess can use that column to efficiently compute the target shard. You can even configure Vitess to auto-populate that column on inserts. This is done using the reverse map feature explained below. - -### How vindexes are used - -#### Cost - -Vindexes have costs. For routing a query, the Vindex with the lowest cost is chosen. The current costs are: - -Vindex Type | Cost ------------ | ---- -Indentity | 0 -Functional | 1 -Lookup Unique | 10 -Lookup NonUnique | 20 - -#### Select - -In the case of a simple select, Vitess scans the WHERE clause to match references to Vindex columns and chooses the best one to use. If there is no match and the query is simple without complex constructs like aggregates, etc, it is sent to all shards. - -Vitess can handle more complex queries. For now, you can refer to the [design doc](https://github.com/vitessio/vitess/blob/master/doc/V3HighLevelDesign.md) on how it handles them. - -#### Insert - -* The Primary Vindex is used to generate a keyspace ID. -* The keyspace ID is validated against the rest of the Vindexes on the table. There must exist a mapping from the column value to the keyspace ID. -* If a column value was not provided for a Vindex and the Vindex is capable of reverse mapping a keyspace ID to an input value, that function is used to auto-fill the column. If there is no reverse map, it is an error. - -#### Update - -The WHERE clause is used to route the update. Updating the value of a Vindex column is supported, but with a restriction: the change in the column value should not result in the row being moved from one shard to another. A workaround is to perform a delete followed by insert, which works as expected. - -#### Delete - -If the table owns lookup vindexes, then the rows to be deleted are first read and the associated Vindex entries are deleted. Following this, the query is routed according to the WHERE clause. - -### Predefined Vindexes - -Vitess provides the following predefined Vindexes: - -Name | Type | Description | Primary | Reversible | Cost ----- | ---- | ----------- | ------- | ---------- | ---- -binary | Functional Unique | Identity | Yes | Yes | 0 -binary_md5 | Functional Unique | md5 hash | Yes | No | 1 -hash | Functional Unique | 3DES null-key hash | Yes | Yes | 1 -lookup | Lookup NonUnique | Lookup table non-unique values | No | Yes | 20 -lookup_unique | Lookup Unique | Lookup table unique values | If unowned | Yes | 10 -numeric | Functional Unique | Identity | Yes | Yes | 0 -numeric_static_map | Functional Unique | A JSON file that maps input values to keyspace IDs | Yes | No | 1 -unicode_loose_md5 | Functional Unique | Case-insensitive (UCA level 1) md5 hash | Yes | No | 1 -reverse_bits | Functional Unique | Bit Reversal | Yes | Yes | 1 - -Custom vindexes can also be plugged in as needed. - -## Sequences - -Auto-increment columns do not work very well for sharded tables. [Vitess sequences]({% link user-guide/vitess-sequences.md %}) solve this problem. Sequence tables must be specified in the VSchema, and then tied to table columns. At the time of insert, if no value is specified for such a column, VTGate will generate a number for it using the sequence table. - -## VSchema - -As mentioned in the beginning of the document, a VSchema is needed to tie together all the databases that Vitess manages. For a very trivial setup where there is only one unsharded keyspace, there is no need to specify a VSchema because Vitess will know that there is no other place to route a query. - -If you have multiple unsharded keyspaces, you can still avoid defining a VSchema in one of two ways: - -1. Connect to a keyspace and all queries are sent to it. -2. Connect to Vitess without specifying a keyspace, but use qualified names for tables, like `keyspace.table` in your queries. - -However, once the setup exceeds the above complexity, VSchemas become a necessity. Vitess has a [working demo](https://github.com/vitessio/vitess/tree/master/examples/demo) of VSchemas. This section documents the various features highlighted with snippets pulled from the demo. - -### Unsharded Table - -The following snippets show the necessary configs for creating a table in an unsharded keyspace: - -Schema: - -``` sql -# lookup keyspace -create table name_user_idx(name varchar(128), user_id bigint, primary key(name, user_id)); -``` - -VSchema: - -``` json -// lookup keyspace -{ - "sharded": false, - "tables": { - "name_user_idx": {} - } -} -``` - -For a normal unsharded table, the VSchema only needs to know the table name. No additional metadata is needed. - -### Sharded Table With Simple Primary Vindex - -To create a sharded table with a simple Primary Vindex, the VSchema requires more information: - -Schema: - -``` sql -# user keyspace -create table user(user_id bigint, name varchar(128), primary key(user_id)); -``` - -VSchema: - -``` json -// user keyspace -{ - "sharded": true, - "vindexes": { - "hash": { - "type": "hash" - }, - "tables": { - "user": { - "column_vindexes": [ - { - "column": "user_id", - "name": "hash" - } - ] - } - } -} -``` - -Because Vindexes can be shared, the JSON requires them to be specified in a separate `vindexes` section, and then referenced by name from the `tables` section. The VSchema above simply states that `user_id` uses `hash` as Primary Vindex. The first Vindex of every table must be the Primary Vindex. - -### Specifying A Sequence - -Since user is a sharded table, it will be beneficial to tie it to a Sequence. However, the sequence must be defined in the lookup (unsharded) keyspace. It is then referred from the user (sharded) keyspace. In this example, we are designating the user_id (Primary Vindex) column as the auto-increment. - -Schema: - -``` sql -# lookup keyspace -create table user_seq(id int, next_id bigint, cache bigint, primary key(id)) comment 'vitess_sequence'; -insert into user_seq(id, next_id, cache) values(0, 1, 3); -``` - -For the sequence table, `id` is always 0. `next_id` starts off as 1, and the cache is usually a medium-sized number like 1000. In our example, we are using a small number to showcase how it works. - -VSchema: - -``` json -// lookup keyspace -{ - "sharded": false, - "tables": { - "user_seq": { - "type": "sequence" - } - } -} - -// user keyspace -{ - "sharded": true, - "vindexes": { - "hash": { - "type": "hash" - }, - "tables": { - "user": { - "column_vindexes": [ - { - "column": "user_id", - "name": "hash" - } - ], - "auto_increment": { - "column": "user_id", - "sequence": "user_seq" - } - } - } -} -``` - -### Specifying A Secondary Vindex - -The following snippet shows how to configure a Secondary Vindex that is backed by a lookup table. In this case, the lookup table is configured to be in the unsharded lookup keyspace: - -Schema: - -``` sql -# lookup keyspace -create table name_user_idx(name varchar(128), user_id bigint, primary key(name, user_id)); -``` - -VSchema: - -``` json -// lookup keyspace -{ - "sharded": false, - "tables": { - "name_user_idx": {} - } -} - -// user keyspace -{ - "sharded": true, - "vindexes": { - "name_user_idx": { - "type": "lookup_hash", - "params": { - "table": "name_user_idx", - "from": "name", - "to": "user_id" - }, - "owner": "user" - }, - "tables": { - "user": { - "column_vindexes": [ - { - "column": "name", - "name": "name_user_idx" - } - ] - } - } -} -``` - -To recap, a checklist for creating the shared Secondary Vindex is: - -* Create physical `name_user_idx` table in lookup database. -* Define a routing for it in the lookup VSchema. -* Define a Vindex as type `lookup_hash` that points to it. Ensure that the `params` match the table name and columns. -* Define the owner for the Vindex as the `user` table. -* Specify that `name` uses the Vindex. - -Currently, these steps have to be currently performed manually. However, extended DDLs backed by improved automation will simplify these tasks in the future. - -### Advanced usage - -The examples/demo also shows more tricks you can perform: - -* The `music` table uses a secondary lookup vindex `music_user_idx`. However, this lookup vindex is itself a sharded table. -* `music_extra` shares `music_user_idx` with `music`, and uses it as Primary Vindex. -* `music_extra` defines an additional Functional Vindex called `keyspace_id` which the demo auto-populates using the reverse mapping capability. -* There is also a `name_info` table that showcases a case-insensitive Vindex `unicode_loose_md5`. - -## Roadmap - -VSchema is still evolving. Features are mostly added on demand. The following features are currently on our roadmap: - -* DDL support -* Lookup Vindex backfill -* Pinned tables: This feature will allow unsharded tables to be pinned to a keyspace id. This avoids the need for a separate unsharded keyspace to contain them. diff --git a/doc/VTTabletModes.md b/doc/VTTabletModes.md deleted file mode 100644 index 1d37efdf4af..00000000000 --- a/doc/VTTabletModes.md +++ /dev/null @@ -1,107 +0,0 @@ -VTTablet can be configured to control mysql at many levels. At the level with the most control, vttablet can perform backups and restores, respond to reparenting commands coming through vtctld, automatically fix replication, and enforce semi-sync settings. - -At the level with the least control, vttablet just sends the application’s queries to mysql. The level of desired control is achieved through various command line arguments, explained below. - -## Managed MySQL - -In the mode with the highest control, VTTablet can take backups. It can also automatically restore from an existing backup to prime a new replica. For this mode, vttablet needs to run on the same host as mysql, and must be given access to mysql's my.cnf file. Additionally, the flags must not contain any connectivity parameters like `-db_host` or `-db_socket`; VTTablet will fetch the socket information from my.cnf and use that to connect to the local mysql. - -It will also load other information from the my.cnf, like the location of data files, etc. When it receives a request to take a backup, it will shut down mysql, copy the mysql data files to the backup store, and restart mysql. - -The my.cnf file can be specified the following ways: - -* Implicit: If mysql was initialized by the `mysqlctl` tool, then vttablet can find it based on just the `-tablet-path`. The default location for this file is `$VTDATAROOT/vt_/my.cnf`. -* `-mycnf-file`: This option can be used if the file is not present in the default location. -* `-my_cnf_server_id` and other flags: You can specify all values of the my.cnf file from the command line, and vttablet will behave as it read this information from a physical file. - -Specifying a `-db_host` or a `-db_socket` parameter will cause vttablet to skip the loading of the my.cnf file, and will disable its ability to perform backups or restores. - -### -restore\_from\_backup - -The default value for this flag is false. If set to true, and the my.cnf file was successfully loaded, then vttablet can perform automatic restores as follows: - -If started against a mysql instance that has no data files, it will search the list of backups for the latest one, and initiate a restore. After this, it will point the mysql to the current master and wait for replication to catch up. Once replication is caught up to the specified tolerance limit, it will advertise itself as serving. This will cause the vtgates to add it to the list of healthy tablets to serve queries from. - -If this flag is true, but my.cnf was not loaded, then vttablet will fatally exit with an error message. - -You can additionally control the level of concurrency for a restore with the `-restore_concurrency` flag. This is typically useful in cloud environments to prevent the restore process from becoming a 'noisy' neighbor by consuming all available disk IOPS. - -## Unmanaged or remote MySQL - -You can start a vttablet against a remote mysql by simply specifying the connection parameters `-db_host` and `-db_port` on the command line. In this mode, backup and restore operations will be disabled. If you start vttablet against a local mysql, you can specify a `-db_socket` instead, which will still make vttablet treat mysql as if it was remote. - -Specifically, the absence of a my.cnf file indicates to vttablet that it's connecting to a remote MySQL. - -## Partially managed MySQL - -Even if a MySQL is remote, you can still make vttablet perform some management functions. They are as follows: - -* `-disable_active_reparents`: If this flag is set, then any reparent or slave commands will not be allowed. These are InitShardMaster, PlannedReparent, EmergencyReparent, and ReparentTablet. In this mode, you should use the TabletExternallyReparented command to inform vitess of the current master. -* `-master_connect_retry`: This value is give to mysql when it connects a slave to the master as the retry duration parameter. -* `-enable_replication_reporter`: If this flag is set, then vttablet will transmit replica lag related information to the vtgates, which will allow it to balance load better. Additionally, enabling this will also cause vttablet to restart replication if it was stopped. However, it will do this only if -disable_active_reparents was not turned on. -* `-enable_semi_sync`: This option will automatically enable semi-sync on new replicas as well as on any tablet that transitions into a replica type. This includes the demotion of a master to a replica. -* `-heatbeat_enable` and `-heartbeat_interval_duration`: cause vttablet to write heartbeats to the sidecar database. This information is also used by the replication reporter to assess replica lag. - -## Typical vttablet command line flags - -### Minimal vttablet to enable query serving -``` -$TOPOLOGY_FLAGS --tablet-path $alias --init_keyspace $keyspace --init_shard $shard --init_tablet_type $tablet_type --port $port --grpc_port $grpc_port --service_map 'grpc-queryservice,grpc-tabletmanager,grpc-updatestream' -``` - -$alias needs to be of the form: `-id`, and the cell should match one of the local cells that was created in the topology. The id can be left padded with zeroes: `cell-100` and `cell-000000100` are synonymous. - -Example TOPOLOGY\_FLAGS for a lockserver like zookeeper: - -`-topo_implementation zk2 -topo_global_server_address localhost:21811,localhost:21812,localhost:21813 -topo_global_root /vitess/global` - -### Additional parameters to enable cluster management -``` --enable_semi_sync --enable_replication_reporter --backup_storage_implementation file --file_backup_storage_root $BACKUP_MOUNT --restore_from_backup --vtctld_addr http://$hostname:$vtctld_web_port/ -``` - -### Additional parameters for running in prod - -``` --queryserver-config-pool-size 24 --queryserver-config-stream-pool-size 24 --queryserver-config-transaction-cap 300 -``` - -More tuning parameters are available, but the above overrides are definitely needed for serving reasonable production traffic. - -### Connecting vttablet to an already running mysql - -``` --db_host $MYSQL_HOST --db_port $MYSQL_PORT --db_app_user $USER --db_app_password $PASSWORD -``` - -### Additional user credentials that need to be supplied for performing various operations - -``` --db_allprivs_user --db_allprivs_password --db_appdebug_user --db_appdebug_password --db_dba_user --db_dba_password --db_filtered_user --db_filtered_password -``` - -Other flags exist for finer control. diff --git a/doc/VTTabletModules.png b/doc/VTTabletModules.png deleted file mode 100644 index 7d107faa703f1f906170d3545e0f99919181609e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37401 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 -Range-based Sharding - -ExecuteBatchKeyspaceIds -ExecuteBatchKeyspaceIds executes the list of queries based on the specified keyspace ids. - - -ExecuteEntityIds -ExecuteEntityIds executes the query based on the specified external id to keyspace id map. - - -ExecuteKeyRanges -ExecuteKeyRanges executes the query based on the specified key ranges. - - -ExecuteKeyspaceIds -ExecuteKeyspaceIds executes the query based on the specified keyspace ids. - - -StreamExecuteKeyRanges -StreamExecuteKeyRanges executes a streaming query based on key ranges. Use this method if the query returns a large number of rows. - - -StreamExecuteKeyspaceIds -StreamExecuteKeyspaceIds executes a streaming query based on keyspace ids. Use this method if the query returns a large number of rows. - -Transactions - -Begin -Begin a transaction. - - -Commit -Commit a transaction. - - -ResolveTransaction -ResolveTransaction resolves a transaction. - - -Rollback -Rollback a transaction. - -Custom Sharding - -ExecuteBatchShards -ExecuteBatchShards executes the list of queries on the specified shards. - - -ExecuteShards -ExecuteShards executes the query on the specified shards. - - -StreamExecuteShards -StreamExecuteShards executes a streaming query based on shards. Use this method if the query returns a large number of rows. - -Map Reduce - -SplitQuery -Split a query into non-overlapping sub queries - -Topology - -GetSrvKeyspace -GetSrvKeyspace returns a SrvKeyspace object (as seen by this vtgate). This method is provided as a convenient way for clients to take a look at the sharding configuration for a Keyspace. Looking at the sharding information should not be used for routing queries (as the information may change, use the Execute calls for that). It is convenient for monitoring applications for instance, or if using custom sharding. - -v3 API (alpha) - -Execute -Execute tries to route the query to the right shard. It depends on the query and bind variables to provide enough information in conjunction with the vindexes to route the query. - - -StreamExecute -StreamExecute executes a streaming query based on shards. It depends on the query and bind variables to provide enough information in conjunction with the vindexes to route the query. Use this method if the query returns a large number of rows. - - -##Range-based Sharding -### ExecuteBatchKeyspaceIds - -ExecuteBatchKeyspaceIds executes the list of queries based on the specified keyspace ids. - -#### Request - - ExecuteBatchKeyspaceIdsRequest is the payload to ExecuteBatchKeyspaceId. - -##### Parameters - -| Name |Description | -| :-------- | :-------- -| caller_id
[vtrpc.CallerID](#vtrpc.callerid)| CallerID is passed along RPCs to identify the originating client for a request. It is not meant to be secure, but only informational. The client can put whatever info they want in these fields, and they will be trusted by the servers. The fields will just be used for logging purposes, and to easily find a client. VtGate propagates it to VtTablet, and VtTablet may use this information for monitoring purposes, to display on dashboards, or for blacklisting purposes. | -| session
[Session](#session)| Session objects are session cookies and are invalidated on use. Query results will contain updated session values. Their content should be opaque to the user. | -| queries
list <[BoundKeyspaceIdQuery](#boundkeyspaceidquery)>| BoundKeyspaceIdQuery represents a single query request for the specified list of keyspace ids. This is used in a list for ExecuteBatchKeyspaceIdsRequest. | -| tablet_type
[topodata.TabletType](#topodata.tablettype)| TabletType represents the type of a given tablet. | -| as_transaction
bool| as_transaction will execute the queries in this batch in a single transaction per shard, created for this purpose. (this can be seen as adding a 'begin' before and 'commit' after the queries). Only makes sense if tablet_type is master. If set, the Session is ignored. | -| options
[query.ExecuteOptions](#query.executeoptions)| ExecuteOptions is passed around for all Execute calls. | - -#### Response - - ExecuteBatchKeyspaceIdsResponse is the returned value from ExecuteBatchKeyspaceId. - -##### Properties - -| Name |Description | -| :-------- | :-------- -| error
[vtrpc.RPCError](#vtrpc.rpcerror)| RPCError is an application-level error structure returned by VtTablet (and passed along by VtGate if appropriate). We use this so the clients don't have to parse the error messages, but instead can depend on the value of the code. | -| session
[Session](#session)| Session objects are session cookies and are invalidated on use. Query results will contain updated session values. Their content should be opaque to the user. | -| results
list <[query.QueryResult](#query.queryresult)>| QueryResult is returned by Execute and ExecuteStream. As returned by Execute, len(fields) is always equal to len(row) (for each row in rows). As returned by StreamExecute, the first QueryResult has the fields set, and subsequent QueryResult have rows set. And as Execute, len(QueryResult[0].fields) is always equal to len(row) (for each row in rows for each QueryResult in QueryResult[1:]). | - -### ExecuteEntityIds - -ExecuteEntityIds executes the query based on the specified external id to keyspace id map. - -#### Request - - ExecuteEntityIdsRequest is the payload to ExecuteEntityIds. - -##### Parameters - -| Name |Description | -| :-------- | :-------- -| caller_id
[vtrpc.CallerID](#vtrpc.callerid)| CallerID is passed along RPCs to identify the originating client for a request. It is not meant to be secure, but only informational. The client can put whatever info they want in these fields, and they will be trusted by the servers. The fields will just be used for logging purposes, and to easily find a client. VtGate propagates it to VtTablet, and VtTablet may use this information for monitoring purposes, to display on dashboards, or for blacklisting purposes. | -| session
[Session](#session)| Session objects are session cookies and are invalidated on use. Query results will contain updated session values. Their content should be opaque to the user. | -| query
[query.BoundQuery](#query.boundquery)| BoundQuery is a query with its bind variables | -| keyspace
string| keyspace to target the query to. | -| entity_column_name
string| entity_column_name is the column name to use. | -| entity_keyspace_ids
list <[EntityId](#executeentityidsrequest.entityid)>| entity_keyspace_ids are pairs of entity_column_name values associated with its corresponding keyspace_id. | -| tablet_type
[topodata.TabletType](#topodata.tablettype)| TabletType represents the type of a given tablet. | -| not_in_transaction
bool| not_in_transaction is deprecated and should not be used. | -| options
[query.ExecuteOptions](#query.executeoptions)| ExecuteOptions is passed around for all Execute calls. | - -#### Messages - -##### ExecuteEntityIdsRequest.EntityId - -Properties - -| Name |Description | -| :-------- | :-------- -| type
[query.Type](#query.type)| Type defines the various supported data types in bind vars and query results. | -| value
bytes| value is the value for the entity. Not set if type is NULL_TYPE. | -| keyspace_id
bytes| keyspace_id is the associated keyspace_id for the entity. | - -#### Response - - ExecuteEntityIdsResponse is the returned value from ExecuteEntityIds. - -##### Properties - -| Name |Description | -| :-------- | :-------- -| error
[vtrpc.RPCError](#vtrpc.rpcerror)| RPCError is an application-level error structure returned by VtTablet (and passed along by VtGate if appropriate). We use this so the clients don't have to parse the error messages, but instead can depend on the value of the code. | -| session
[Session](#session)| Session objects are session cookies and are invalidated on use. Query results will contain updated session values. Their content should be opaque to the user. | -| result
[query.QueryResult](#query.queryresult)| QueryResult is returned by Execute and ExecuteStream. As returned by Execute, len(fields) is always equal to len(row) (for each row in rows). As returned by StreamExecute, the first QueryResult has the fields set, and subsequent QueryResult have rows set. And as Execute, len(QueryResult[0].fields) is always equal to len(row) (for each row in rows for each QueryResult in QueryResult[1:]). | - -### ExecuteKeyRanges - -ExecuteKeyRanges executes the query based on the specified key ranges. - -#### Request - - ExecuteKeyRangesRequest is the payload to ExecuteKeyRanges. - -##### Parameters - -| Name |Description | -| :-------- | :-------- -| caller_id
[vtrpc.CallerID](#vtrpc.callerid)| CallerID is passed along RPCs to identify the originating client for a request. It is not meant to be secure, but only informational. The client can put whatever info they want in these fields, and they will be trusted by the servers. The fields will just be used for logging purposes, and to easily find a client. VtGate propagates it to VtTablet, and VtTablet may use this information for monitoring purposes, to display on dashboards, or for blacklisting purposes. | -| session
[Session](#session)| Session objects are session cookies and are invalidated on use. Query results will contain updated session values. Their content should be opaque to the user. | -| query
[query.BoundQuery](#query.boundquery)| BoundQuery is a query with its bind variables | -| keyspace
string| keyspace to target the query to | -| key_ranges
list <[topodata.KeyRange](#topodata.keyrange)>| KeyRange describes a range of sharding keys, when range-based sharding is used. | -| tablet_type
[topodata.TabletType](#topodata.tablettype)| TabletType represents the type of a given tablet. | -| not_in_transaction
bool| not_in_transaction is deprecated and should not be used. | -| options
[query.ExecuteOptions](#query.executeoptions)| ExecuteOptions is passed around for all Execute calls. | - -#### Response - - ExecuteKeyRangesResponse is the returned value from ExecuteKeyRanges. - -##### Properties - -| Name |Description | -| :-------- | :-------- -| error
[vtrpc.RPCError](#vtrpc.rpcerror)| RPCError is an application-level error structure returned by VtTablet (and passed along by VtGate if appropriate). We use this so the clients don't have to parse the error messages, but instead can depend on the value of the code. | -| session
[Session](#session)| Session objects are session cookies and are invalidated on use. Query results will contain updated session values. Their content should be opaque to the user. | -| result
[query.QueryResult](#query.queryresult)| QueryResult is returned by Execute and ExecuteStream. As returned by Execute, len(fields) is always equal to len(row) (for each row in rows). As returned by StreamExecute, the first QueryResult has the fields set, and subsequent QueryResult have rows set. And as Execute, len(QueryResult[0].fields) is always equal to len(row) (for each row in rows for each QueryResult in QueryResult[1:]). | - -### ExecuteKeyspaceIds - -ExecuteKeyspaceIds executes the query based on the specified keyspace ids. - -#### Request - - ExecuteKeyspaceIdsRequest is the payload to ExecuteKeyspaceIds. - -##### Parameters - -| Name |Description | -| :-------- | :-------- -| caller_id
[vtrpc.CallerID](#vtrpc.callerid)| CallerID is passed along RPCs to identify the originating client for a request. It is not meant to be secure, but only informational. The client can put whatever info they want in these fields, and they will be trusted by the servers. The fields will just be used for logging purposes, and to easily find a client. VtGate propagates it to VtTablet, and VtTablet may use this information for monitoring purposes, to display on dashboards, or for blacklisting purposes. | -| session
[Session](#session)| Session objects are session cookies and are invalidated on use. Query results will contain updated session values. Their content should be opaque to the user. | -| query
[query.BoundQuery](#query.boundquery)| BoundQuery is a query with its bind variables | -| keyspace
string| keyspace to target the query to. | -| keyspace_ids
list <bytes>| keyspace_ids contains the list of keyspace_ids affected by this query. Will be used to find the shards to send the query to. | -| tablet_type
[topodata.TabletType](#topodata.tablettype)| TabletType represents the type of a given tablet. | -| not_in_transaction
bool| not_in_transaction is deprecated and should not be used. | -| options
[query.ExecuteOptions](#query.executeoptions)| ExecuteOptions is passed around for all Execute calls. | - -#### Response - - ExecuteKeyspaceIdsResponse is the returned value from ExecuteKeyspaceIds. - -##### Properties - -| Name |Description | -| :-------- | :-------- -| error
[vtrpc.RPCError](#vtrpc.rpcerror)| RPCError is an application-level error structure returned by VtTablet (and passed along by VtGate if appropriate). We use this so the clients don't have to parse the error messages, but instead can depend on the value of the code. | -| session
[Session](#session)| Session objects are session cookies and are invalidated on use. Query results will contain updated session values. Their content should be opaque to the user. | -| result
[query.QueryResult](#query.queryresult)| QueryResult is returned by Execute and ExecuteStream. As returned by Execute, len(fields) is always equal to len(row) (for each row in rows). As returned by StreamExecute, the first QueryResult has the fields set, and subsequent QueryResult have rows set. And as Execute, len(QueryResult[0].fields) is always equal to len(row) (for each row in rows for each QueryResult in QueryResult[1:]). | - -### StreamExecuteKeyRanges - -StreamExecuteKeyRanges executes a streaming query based on key ranges. Use this method if the query returns a large number of rows. - -#### Request - - StreamExecuteKeyRangesRequest is the payload to StreamExecuteKeyRanges. - -##### Parameters - -| Name |Description | -| :-------- | :-------- -| caller_id
[vtrpc.CallerID](#vtrpc.callerid)| CallerID is passed along RPCs to identify the originating client for a request. It is not meant to be secure, but only informational. The client can put whatever info they want in these fields, and they will be trusted by the servers. The fields will just be used for logging purposes, and to easily find a client. VtGate propagates it to VtTablet, and VtTablet may use this information for monitoring purposes, to display on dashboards, or for blacklisting purposes. | -| query
[query.BoundQuery](#query.boundquery)| BoundQuery is a query with its bind variables | -| keyspace
string| keyspace to target the query to. | -| key_ranges
list <[topodata.KeyRange](#topodata.keyrange)>| KeyRange describes a range of sharding keys, when range-based sharding is used. | -| tablet_type
[topodata.TabletType](#topodata.tablettype)| TabletType represents the type of a given tablet. | -| options
[query.ExecuteOptions](#query.executeoptions)| ExecuteOptions is passed around for all Execute calls. | - -#### Response - - StreamExecuteKeyRangesResponse is the returned value from StreamExecuteKeyRanges. - -##### Properties - -| Name |Description | -| :-------- | :-------- -| result
[query.QueryResult](#query.queryresult)| QueryResult is returned by Execute and ExecuteStream. As returned by Execute, len(fields) is always equal to len(row) (for each row in rows). As returned by StreamExecute, the first QueryResult has the fields set, and subsequent QueryResult have rows set. And as Execute, len(QueryResult[0].fields) is always equal to len(row) (for each row in rows for each QueryResult in QueryResult[1:]). | - -### StreamExecuteKeyspaceIds - -StreamExecuteKeyspaceIds executes a streaming query based on keyspace ids. Use this method if the query returns a large number of rows. - -#### Request - - StreamExecuteKeyspaceIdsRequest is the payload to StreamExecuteKeyspaceIds. - -##### Parameters - -| Name |Description | -| :-------- | :-------- -| caller_id
[vtrpc.CallerID](#vtrpc.callerid)| CallerID is passed along RPCs to identify the originating client for a request. It is not meant to be secure, but only informational. The client can put whatever info they want in these fields, and they will be trusted by the servers. The fields will just be used for logging purposes, and to easily find a client. VtGate propagates it to VtTablet, and VtTablet may use this information for monitoring purposes, to display on dashboards, or for blacklisting purposes. | -| query
[query.BoundQuery](#query.boundquery)| BoundQuery is a query with its bind variables | -| keyspace
string| keyspace to target the query to. | -| keyspace_ids
list <bytes>| keyspace_ids contains the list of keyspace_ids affected by this query. Will be used to find the shards to send the query to. | -| tablet_type
[topodata.TabletType](#topodata.tablettype)| TabletType represents the type of a given tablet. | -| options
[query.ExecuteOptions](#query.executeoptions)| ExecuteOptions is passed around for all Execute calls. | - -#### Response - - StreamExecuteKeyspaceIdsResponse is the returned value from StreamExecuteKeyspaceIds. - -##### Properties - -| Name |Description | -| :-------- | :-------- -| result
[query.QueryResult](#query.queryresult)| QueryResult is returned by Execute and ExecuteStream. As returned by Execute, len(fields) is always equal to len(row) (for each row in rows). As returned by StreamExecute, the first QueryResult has the fields set, and subsequent QueryResult have rows set. And as Execute, len(QueryResult[0].fields) is always equal to len(row) (for each row in rows for each QueryResult in QueryResult[1:]). | - -##Transactions -### Begin - -Begin a transaction. - -#### Request - - BeginRequest is the payload to Begin. - -##### Parameters - -| Name |Description | -| :-------- | :-------- -| caller_id
[vtrpc.CallerID](#vtrpc.callerid)| CallerID is passed along RPCs to identify the originating client for a request. It is not meant to be secure, but only informational. The client can put whatever info they want in these fields, and they will be trusted by the servers. The fields will just be used for logging purposes, and to easily find a client. VtGate propagates it to VtTablet, and VtTablet may use this information for monitoring purposes, to display on dashboards, or for blacklisting purposes. | -| single_db
bool| single_db specifies if the transaction should be restricted to a single database. | - -#### Response - - BeginResponse is the returned value from Begin. - -##### Properties - -| Name |Description | -| :-------- | :-------- -| session
[Session](#session)| Session objects are session cookies and are invalidated on use. Query results will contain updated session values. Their content should be opaque to the user. | - -### Commit - -Commit a transaction. - -#### Request - - CommitRequest is the payload to Commit. - -##### Parameters - -| Name |Description | -| :-------- | :-------- -| caller_id
[vtrpc.CallerID](#vtrpc.callerid)| CallerID is passed along RPCs to identify the originating client for a request. It is not meant to be secure, but only informational. The client can put whatever info they want in these fields, and they will be trusted by the servers. The fields will just be used for logging purposes, and to easily find a client. VtGate propagates it to VtTablet, and VtTablet may use this information for monitoring purposes, to display on dashboards, or for blacklisting purposes. | -| session
[Session](#session)| Session objects are session cookies and are invalidated on use. Query results will contain updated session values. Their content should be opaque to the user. | -| atomic
bool| atomic specifies if the commit should go through the 2PC workflow to ensure atomicity. | - -#### Response - - CommitResponse is the returned value from Commit. - -##### Properties - -| Name |Description | -| :-------- | :-------- - -### ResolveTransaction - -ResolveTransaction resolves a transaction. - -#### Request - - ResolveTransactionRequest is the payload to ResolveTransaction. - -##### Parameters - -| Name |Description | -| :-------- | :-------- -| caller_id
[vtrpc.CallerID](#vtrpc.callerid)| CallerID is passed along RPCs to identify the originating client for a request. It is not meant to be secure, but only informational. The client can put whatever info they want in these fields, and they will be trusted by the servers. The fields will just be used for logging purposes, and to easily find a client. VtGate propagates it to VtTablet, and VtTablet may use this information for monitoring purposes, to display on dashboards, or for blacklisting purposes. | -| dtid
string| dtid is the dtid of the transaction to be resolved. | - -#### Response - - ResolveTransactionResponse is the returned value from Rollback. - -##### Properties - -| Name |Description | -| :-------- | :-------- - -### Rollback - -Rollback a transaction. - -#### Request - - RollbackRequest is the payload to Rollback. - -##### Parameters - -| Name |Description | -| :-------- | :-------- -| caller_id
[vtrpc.CallerID](#vtrpc.callerid)| CallerID is passed along RPCs to identify the originating client for a request. It is not meant to be secure, but only informational. The client can put whatever info they want in these fields, and they will be trusted by the servers. The fields will just be used for logging purposes, and to easily find a client. VtGate propagates it to VtTablet, and VtTablet may use this information for monitoring purposes, to display on dashboards, or for blacklisting purposes. | -| session
[Session](#session)| Session objects are session cookies and are invalidated on use. Query results will contain updated session values. Their content should be opaque to the user. | - -#### Response - - RollbackResponse is the returned value from Rollback. - -##### Properties - -| Name |Description | -| :-------- | :-------- - -##Custom Sharding -### ExecuteBatchShards - -ExecuteBatchShards executes the list of queries on the specified shards. - -#### Request - - ExecuteBatchShardsRequest is the payload to ExecuteBatchShards - -##### Parameters - -| Name |Description | -| :-------- | :-------- -| caller_id
[vtrpc.CallerID](#vtrpc.callerid)| CallerID is passed along RPCs to identify the originating client for a request. It is not meant to be secure, but only informational. The client can put whatever info they want in these fields, and they will be trusted by the servers. The fields will just be used for logging purposes, and to easily find a client. VtGate propagates it to VtTablet, and VtTablet may use this information for monitoring purposes, to display on dashboards, or for blacklisting purposes. | -| session
[Session](#session)| Session objects are session cookies and are invalidated on use. Query results will contain updated session values. Their content should be opaque to the user. | -| queries
list <[BoundShardQuery](#boundshardquery)>| BoundShardQuery represents a single query request for the specified list of shards. This is used in a list for ExecuteBatchShardsRequest. | -| tablet_type
[topodata.TabletType](#topodata.tablettype)| TabletType represents the type of a given tablet. | -| as_transaction
bool| as_transaction will execute the queries in this batch in a single transaction per shard, created for this purpose. (this can be seen as adding a 'begin' before and 'commit' after the queries). Only makes sense if tablet_type is master. If set, the Session is ignored. | -| options
[query.ExecuteOptions](#query.executeoptions)| ExecuteOptions is passed around for all Execute calls. | - -#### Response - - ExecuteBatchShardsResponse is the returned value from ExecuteBatchShards. - -##### Properties - -| Name |Description | -| :-------- | :-------- -| error
[vtrpc.RPCError](#vtrpc.rpcerror)| RPCError is an application-level error structure returned by VtTablet (and passed along by VtGate if appropriate). We use this so the clients don't have to parse the error messages, but instead can depend on the value of the code. | -| session
[Session](#session)| Session objects are session cookies and are invalidated on use. Query results will contain updated session values. Their content should be opaque to the user. | -| results
list <[query.QueryResult](#query.queryresult)>| QueryResult is returned by Execute and ExecuteStream. As returned by Execute, len(fields) is always equal to len(row) (for each row in rows). As returned by StreamExecute, the first QueryResult has the fields set, and subsequent QueryResult have rows set. And as Execute, len(QueryResult[0].fields) is always equal to len(row) (for each row in rows for each QueryResult in QueryResult[1:]). | - -### ExecuteShards - -ExecuteShards executes the query on the specified shards. - -#### Request - - ExecuteShardsRequest is the payload to ExecuteShards. - -##### Parameters - -| Name |Description | -| :-------- | :-------- -| caller_id
[vtrpc.CallerID](#vtrpc.callerid)| CallerID is passed along RPCs to identify the originating client for a request. It is not meant to be secure, but only informational. The client can put whatever info they want in these fields, and they will be trusted by the servers. The fields will just be used for logging purposes, and to easily find a client. VtGate propagates it to VtTablet, and VtTablet may use this information for monitoring purposes, to display on dashboards, or for blacklisting purposes. | -| session
[Session](#session)| Session objects are session cookies and are invalidated on use. Query results will contain updated session values. Their content should be opaque to the user. | -| query
[query.BoundQuery](#query.boundquery)| BoundQuery is a query with its bind variables | -| keyspace
string| keyspace to target the query to. | -| shards
list <string>| shards to target the query to. A DML can only target one shard. | -| tablet_type
[topodata.TabletType](#topodata.tablettype)| TabletType represents the type of a given tablet. | -| not_in_transaction
bool| not_in_transaction is deprecated and should not be used. | -| options
[query.ExecuteOptions](#query.executeoptions)| ExecuteOptions is passed around for all Execute calls. | - -#### Response - - ExecuteShardsResponse is the returned value from ExecuteShards. - -##### Properties - -| Name |Description | -| :-------- | :-------- -| error
[vtrpc.RPCError](#vtrpc.rpcerror)| RPCError is an application-level error structure returned by VtTablet (and passed along by VtGate if appropriate). We use this so the clients don't have to parse the error messages, but instead can depend on the value of the code. | -| session
[Session](#session)| Session objects are session cookies and are invalidated on use. Query results will contain updated session values. Their content should be opaque to the user. | -| result
[query.QueryResult](#query.queryresult)| QueryResult is returned by Execute and ExecuteStream. As returned by Execute, len(fields) is always equal to len(row) (for each row in rows). As returned by StreamExecute, the first QueryResult has the fields set, and subsequent QueryResult have rows set. And as Execute, len(QueryResult[0].fields) is always equal to len(row) (for each row in rows for each QueryResult in QueryResult[1:]). | - -### StreamExecuteShards - -StreamExecuteShards executes a streaming query based on shards. Use this method if the query returns a large number of rows. - -#### Request - - StreamExecuteShardsRequest is the payload to StreamExecuteShards. - -##### Parameters - -| Name |Description | -| :-------- | :-------- -| caller_id
[vtrpc.CallerID](#vtrpc.callerid)| CallerID is passed along RPCs to identify the originating client for a request. It is not meant to be secure, but only informational. The client can put whatever info they want in these fields, and they will be trusted by the servers. The fields will just be used for logging purposes, and to easily find a client. VtGate propagates it to VtTablet, and VtTablet may use this information for monitoring purposes, to display on dashboards, or for blacklisting purposes. | -| query
[query.BoundQuery](#query.boundquery)| BoundQuery is a query with its bind variables | -| keyspace
string| keyspace to target the query to. | -| shards
list <string>| shards to target the query to. | -| tablet_type
[topodata.TabletType](#topodata.tablettype)| TabletType represents the type of a given tablet. | -| options
[query.ExecuteOptions](#query.executeoptions)| ExecuteOptions is passed around for all Execute calls. | - -#### Response - - StreamExecuteShardsResponse is the returned value from StreamExecuteShards. - -##### Properties - -| Name |Description | -| :-------- | :-------- -| result
[query.QueryResult](#query.queryresult)| QueryResult is returned by Execute and ExecuteStream. As returned by Execute, len(fields) is always equal to len(row) (for each row in rows). As returned by StreamExecute, the first QueryResult has the fields set, and subsequent QueryResult have rows set. And as Execute, len(QueryResult[0].fields) is always equal to len(row) (for each row in rows for each QueryResult in QueryResult[1:]). | - -##Map Reduce -### SplitQuery - -Split a query into non-overlapping sub queries - -#### Request - - SplitQueryRequest is the payload to SplitQuery. SplitQuery takes a "SELECT" query and generates a list of queries called "query-parts". Each query-part consists of the original query with an added WHERE clause that restricts the query-part to operate only on rows whose values in the columns listed in the "split_column" field of the request (see below) are in a particular range. It is guaranteed that the set of rows obtained from executing each query-part on a database snapshot and merging (without deduping) the results is equal to the set of rows obtained from executing the original query on the same snapshot with the rows containing NULL values in any of the split_column's excluded. This is typically called by the MapReduce master when reading from Vitess. There it's desirable that the sets of rows returned by the query-parts have roughly the same size. - -##### Parameters - -| Name |Description | -| :-------- | :-------- -| caller_id
[vtrpc.CallerID](#vtrpc.callerid)| CallerID is passed along RPCs to identify the originating client for a request. It is not meant to be secure, but only informational. The client can put whatever info they want in these fields, and they will be trusted by the servers. The fields will just be used for logging purposes, and to easily find a client. VtGate propagates it to VtTablet, and VtTablet may use this information for monitoring purposes, to display on dashboards, or for blacklisting purposes. | -| keyspace
string| keyspace to target the query to. | -| query
[query.BoundQuery](#query.boundquery)| BoundQuery is a query with its bind variables | -| split_column
list <string>| Each generated query-part will be restricted to rows whose values in the columns listed in this field are in a particular range. The list of columns named here must be a prefix of the list of columns defining some index or primary key of the table referenced in 'query'. For many tables using the primary key columns (in order) is sufficient and this is the default if this field is omitted. See the comment on the 'algorithm' field for more restrictions and information. | -| split_count
int64| You can specify either an estimate of the number of query-parts to generate or an estimate of the number of rows each query-part should return. Thus, exactly one of split_count or num_rows_per_query_part should be nonzero. The non-given parameter is calculated from the given parameter using the formula: split_count * num_rows_per_query_pary = table_size, where table_size is an approximation of the number of rows in the table. Note that if "split_count" is given it is regarded as an estimate. The number of query-parts returned may differ slightly (in particular, if it's not a whole multiple of the number of vitess shards). | -| num_rows_per_query_part
int64| | -| algorithm
query.SplitQueryRequest.Algorithm| The algorithm to use to split the query. The split algorithm is performed on each database shard in parallel. The lists of query-parts generated by the shards are merged and returned to the caller. Two algorithms are supported: EQUAL_SPLITS If this algorithm is selected then only the first 'split_column' given is used (or the first primary key column if the 'split_column' field is empty). In the rest of this algorithm's description, we refer to this column as "the split column". The split column must have numeric type (integral or floating point). The algorithm works by taking the interval [min, max], where min and max are the minimum and maximum values of the split column in the table-shard, respectively, and partitioning it into 'split_count' sub-intervals of equal size. The added WHERE clause of each query-part restricts that part to rows whose value in the split column belongs to a particular sub-interval. This is fast, but requires that the distribution of values of the split column be uniform in [min, max] for the number of rows returned by each query part to be roughly the same. FULL_SCAN If this algorithm is used then the split_column must be the primary key columns (in order). This algorithm performs a full-scan of the table-shard referenced in 'query' to get "boundary" rows that are num_rows_per_query_part apart when the table is ordered by the columns listed in 'split_column'. It then restricts each query-part to the rows located between two successive boundary rows. This algorithm supports multiple split_column's of any type, but is slower than EQUAL_SPLITS. | -| use_split_query_v2
bool| Remove this field after this new server code is released to prod. We must keep it for now, so that clients can still send it to the old server code currently in production. | - -#### Response - - SplitQueryResponse is the returned value from SplitQuery. - -##### Properties - -| Name |Description | -| :-------- | :-------- -| splits
list <[Part](#splitqueryresponse.part)>| splits contains the queries to run to fetch the entire data set. | - -#### Messages - -##### SplitQueryResponse.KeyRangePart - -Properties - -| Name |Description | -| :-------- | :-------- -| keyspace
string| keyspace to target the query to. | -| key_ranges
list <[topodata.KeyRange](#topodata.keyrange)>| KeyRange describes a range of sharding keys, when range-based sharding is used. | - -##### SplitQueryResponse.Part - -Properties - -| Name |Description | -| :-------- | :-------- -| query
[query.BoundQuery](#query.boundquery)| BoundQuery is a query with its bind variables | -| key_range_part
[KeyRangePart](#splitqueryresponse.keyrangepart)| key_range_part is set if the query should be executed by ExecuteKeyRanges. | -| shard_part
[ShardPart](#splitqueryresponse.shardpart)| shard_part is set if the query should be executed by ExecuteShards. | -| size
int64| size is the approximate number of rows this query will return. | - -##### SplitQueryResponse.ShardPart - -Properties - -| Name |Description | -| :-------- | :-------- -| keyspace
string| keyspace to target the query to. | -| shards
list <string>| shards to target the query to. | - -##Topology -### GetSrvKeyspace - -GetSrvKeyspace returns a SrvKeyspace object (as seen by this vtgate). This method is provided as a convenient way for clients to take a look at the sharding configuration for a Keyspace. Looking at the sharding information should not be used for routing queries (as the information may change, use the Execute calls for that). It is convenient for monitoring applications for instance, or if using custom sharding. - -#### Request - - GetSrvKeyspaceRequest is the payload to GetSrvKeyspace. - -##### Parameters - -| Name |Description | -| :-------- | :-------- -| keyspace
string| keyspace name to fetch. | - -#### Response - - GetSrvKeyspaceResponse is the returned value from GetSrvKeyspace. - -##### Properties - -| Name |Description | -| :-------- | :-------- -| srv_keyspace
[topodata.SrvKeyspace](#topodata.srvkeyspace)| SrvKeyspace is a rollup node for the keyspace itself. | - -##v3 API (alpha) -### Execute - -Execute tries to route the query to the right shard. It depends on the query and bind variables to provide enough information in conjunction with the vindexes to route the query. - -#### Request - - ExecuteRequest is the payload to Execute. - -##### Parameters - -| Name |Description | -| :-------- | :-------- -| caller_id
[vtrpc.CallerID](#vtrpc.callerid)| CallerID is passed along RPCs to identify the originating client for a request. It is not meant to be secure, but only informational. The client can put whatever info they want in these fields, and they will be trusted by the servers. The fields will just be used for logging purposes, and to easily find a client. VtGate propagates it to VtTablet, and VtTablet may use this information for monitoring purposes, to display on dashboards, or for blacklisting purposes. | -| session
[Session](#session)| Session objects are session cookies and are invalidated on use. Query results will contain updated session values. Their content should be opaque to the user. | -| query
[query.BoundQuery](#query.boundquery)| BoundQuery is a query with its bind variables | -| tablet_type
[topodata.TabletType](#topodata.tablettype)| TabletType represents the type of a given tablet. | -| not_in_transaction
bool| not_in_transaction is deprecated and should not be used. | -| keyspace
string| keyspace to target the query to. | -| options
[query.ExecuteOptions](#query.executeoptions)| ExecuteOptions is passed around for all Execute calls. | - -#### Response - - ExecuteResponse is the returned value from Execute. - -##### Properties - -| Name |Description | -| :-------- | :-------- -| error
[vtrpc.RPCError](#vtrpc.rpcerror)| RPCError is an application-level error structure returned by VtTablet (and passed along by VtGate if appropriate). We use this so the clients don't have to parse the error messages, but instead can depend on the value of the code. | -| session
[Session](#session)| Session objects are session cookies and are invalidated on use. Query results will contain updated session values. Their content should be opaque to the user. | -| result
[query.QueryResult](#query.queryresult)| QueryResult is returned by Execute and ExecuteStream. As returned by Execute, len(fields) is always equal to len(row) (for each row in rows). As returned by StreamExecute, the first QueryResult has the fields set, and subsequent QueryResult have rows set. And as Execute, len(QueryResult[0].fields) is always equal to len(row) (for each row in rows for each QueryResult in QueryResult[1:]). | - -### StreamExecute - -StreamExecute executes a streaming query based on shards. It depends on the query and bind variables to provide enough information in conjunction with the vindexes to route the query. Use this method if the query returns a large number of rows. - -#### Request - - StreamExecuteRequest is the payload to StreamExecute. - -##### Parameters - -| Name |Description | -| :-------- | :-------- -| caller_id
[vtrpc.CallerID](#vtrpc.callerid)| CallerID is passed along RPCs to identify the originating client for a request. It is not meant to be secure, but only informational. The client can put whatever info they want in these fields, and they will be trusted by the servers. The fields will just be used for logging purposes, and to easily find a client. VtGate propagates it to VtTablet, and VtTablet may use this information for monitoring purposes, to display on dashboards, or for blacklisting purposes. | -| query
[query.BoundQuery](#query.boundquery)| BoundQuery is a query with its bind variables | -| tablet_type
[topodata.TabletType](#topodata.tablettype)| TabletType represents the type of a given tablet. | -| keyspace
string| keyspace to target the query to. | -| options
[query.ExecuteOptions](#query.executeoptions)| ExecuteOptions is passed around for all Execute calls. | - -#### Response - - StreamExecuteResponse is the returned value from StreamExecute. - -##### Properties - -| Name |Description | -| :-------- | :-------- -| result
[query.QueryResult](#query.queryresult)| QueryResult is returned by Execute and ExecuteStream. As returned by Execute, len(fields) is always equal to len(row) (for each row in rows). As returned by StreamExecute, the first QueryResult has the fields set, and subsequent QueryResult have rows set. And as Execute, len(QueryResult[0].fields) is always equal to len(row) (for each row in rows for each QueryResult in QueryResult[1:]). | - -## Enums - -### query.Type - - Type defines the various supported data types in bind vars and query results. - -| Name |Value |Description | -| :-------- | :-------- | :-------- -| NULL_TYPE | 0 | NULL_TYPE specifies a NULL type. | -| INT8 | 257 | INT8 specifies a TINYINT type. Properties: 1, IsNumber. | -| UINT8 | 770 | UINT8 specifies a TINYINT UNSIGNED type. Properties: 2, IsNumber, IsUnsigned. | -| INT16 | 259 | INT16 specifies a SMALLINT type. Properties: 3, IsNumber. | -| UINT16 | 772 | UINT16 specifies a SMALLINT UNSIGNED type. Properties: 4, IsNumber, IsUnsigned. | -| INT24 | 261 | INT24 specifies a MEDIUMINT type. Properties: 5, IsNumber. | -| UINT24 | 774 | UINT24 specifies a MEDIUMINT UNSIGNED type. Properties: 6, IsNumber, IsUnsigned. | -| INT32 | 263 | INT32 specifies a INTEGER type. Properties: 7, IsNumber. | -| UINT32 | 776 | UINT32 specifies a INTEGER UNSIGNED type. Properties: 8, IsNumber, IsUnsigned. | -| INT64 | 265 | INT64 specifies a BIGINT type. Properties: 9, IsNumber. | -| UINT64 | 778 | UINT64 specifies a BIGINT UNSIGNED type. Properties: 10, IsNumber, IsUnsigned. | -| FLOAT32 | 1035 | FLOAT32 specifies a FLOAT type. Properties: 11, IsFloat. | -| FLOAT64 | 1036 | FLOAT64 specifies a DOUBLE or REAL type. Properties: 12, IsFloat. | -| TIMESTAMP | 2061 | TIMESTAMP specifies a TIMESTAMP type. Properties: 13, IsQuoted. | -| DATE | 2062 | DATE specifies a DATE type. Properties: 14, IsQuoted. | -| TIME | 2063 | TIME specifies a TIME type. Properties: 15, IsQuoted. | -| DATETIME | 2064 | DATETIME specifies a DATETIME type. Properties: 16, IsQuoted. | -| YEAR | 785 | YEAR specifies a YEAR type. Properties: 17, IsNumber, IsUnsigned. | -| DECIMAL | 18 | DECIMAL specifies a DECIMAL or NUMERIC type. Properties: 18, None. | -| TEXT | 6163 | TEXT specifies a TEXT type. Properties: 19, IsQuoted, IsText. | -| BLOB | 10260 | BLOB specifies a BLOB type. Properties: 20, IsQuoted, IsBinary. | -| VARCHAR | 6165 | VARCHAR specifies a VARCHAR type. Properties: 21, IsQuoted, IsText. | -| VARBINARY | 10262 | VARBINARY specifies a VARBINARY type. Properties: 22, IsQuoted, IsBinary. | -| CHAR | 6167 | CHAR specifies a CHAR type. Properties: 23, IsQuoted, IsText. | -| BINARY | 10264 | BINARY specifies a BINARY type. Properties: 24, IsQuoted, IsBinary. | -| BIT | 2073 | BIT specifies a BIT type. Properties: 25, IsQuoted. | -| ENUM | 2074 | ENUM specifies an ENUM type. Properties: 26, IsQuoted. | -| SET | 2075 | SET specifies a SET type. Properties: 27, IsQuoted. | -| TUPLE | 28 | TUPLE specifies a tuple. This cannot be returned in a QueryResult, but it can be sent as a bind var. Properties: 28, None. | -| GEOMETRY | 2077 | GEOMETRY specifies a GEOMETRY type. Properties: 29, IsQuoted. | -| JSON | 2078 | JSON specified a JSON type. Properties: 30, IsQuoted. | - -### topodata.KeyspaceIdType - - KeyspaceIdType describes the type of the sharding key for a range-based sharded keyspace. - -| Name |Value |Description | -| :-------- | :-------- | :-------- -| UNSET | 0 | UNSET is the default value, when range-based sharding is not used. | -| UINT64 | 1 | UINT64 is when uint64 value is used. This is represented as 'unsigned bigint' in mysql | -| BYTES | 2 | BYTES is when an array of bytes is used. This is represented as 'varbinary' in mysql | - -### topodata.TabletType - - TabletType represents the type of a given tablet. - -| Name |Value |Description | -| :-------- | :-------- | :-------- -| UNKNOWN | 0 | UNKNOWN is not a valid value. | -| MASTER | 1 | MASTER is the master server for the shard. Only MASTER allows DMLs. | -| REPLICA | 2 | REPLICA is a slave type. It is used to serve live traffic. A REPLICA can be promoted to MASTER. A demoted MASTER will go to REPLICA. | -| RDONLY | 3 | RDONLY (old name) / BATCH (new name) is used to serve traffic for long-running jobs. It is a separate type from REPLICA so long-running queries don't affect web-like traffic. | -| BATCH | 3 | | -| SPARE | 4 | SPARE is a type of servers that cannot serve queries, but is available in case an extra server is needed. | -| EXPERIMENTAL | 5 | EXPERIMENTAL is like SPARE, except it can serve queries. This type can be used for usages not planned by Vitess, like online export to another storage engine. | -| BACKUP | 6 | BACKUP is the type a server goes to when taking a backup. No queries can be served in BACKUP mode. | -| RESTORE | 7 | RESTORE is the type a server uses when restoring a backup, at startup time. No queries can be served in RESTORE mode. | -| DRAINED | 8 | DRAINED is the type a server goes into when used by Vitess tools to perform an offline action. It is a serving type (as the tools processes may need to run queries), but it's not used to route queries from Vitess users. In this state, this tablet is dedicated to the process that uses it. | - -### vtrpc.ErrorCode - - ErrorCode is the enum values for Errors. Internally, errors should be created with one of these codes. These will then be translated over the wire by various RPC frameworks. - -| Name |Value |Description | -| :-------- | :-------- | :-------- -| SUCCESS | 0 | SUCCESS is returned from a successful call. | -| CANCELLED | 1 | CANCELLED means that the context was cancelled (and noticed in the app layer, as opposed to the RPC layer). | -| UNKNOWN_ERROR | 2 | UNKNOWN_ERROR includes: 1. MySQL error codes that we don't explicitly handle. 2. MySQL response that wasn't as expected. For example, we might expect a MySQL timestamp to be returned in a particular way, but it wasn't. 3. Anything else that doesn't fall into a different bucket. | -| BAD_INPUT | 3 | BAD_INPUT is returned when an end-user either sends SQL that couldn't be parsed correctly, or tries a query that isn't supported by Vitess. | -| DEADLINE_EXCEEDED | 4 | DEADLINE_EXCEEDED is returned when an action is taking longer than a given timeout. | -| INTEGRITY_ERROR | 5 | INTEGRITY_ERROR is returned on integrity error from MySQL, usually due to duplicate primary keys. | -| PERMISSION_DENIED | 6 | PERMISSION_DENIED errors are returned when a user requests access to something that they don't have permissions for. | -| RESOURCE_EXHAUSTED | 7 | RESOURCE_EXHAUSTED is returned when a query exceeds its quota in some dimension and can't be completed due to that. Queries that return RESOURCE_EXHAUSTED should not be retried, as it could be detrimental to the server's health. Examples of errors that will cause the RESOURCE_EXHAUSTED code: 1. TxPoolFull: this is retried server-side, and is only returned as an error if the server-side retries failed. 2. Query is killed due to it taking too long. | -| QUERY_NOT_SERVED | 8 | QUERY_NOT_SERVED means that a query could not be served right now. Client can interpret it as: "the tablet that you sent this query to cannot serve the query right now, try a different tablet or try again later." This could be due to various reasons: QueryService is not serving, should not be serving, wrong shard, wrong tablet type, blacklisted table, etc. Clients that receive this error should usually retry the query, but after taking the appropriate steps to make sure that the query will get sent to the correct tablet. | -| NOT_IN_TX | 9 | NOT_IN_TX means that we're not currently in a transaction, but we should be. | -| INTERNAL_ERROR | 10 | INTERNAL_ERRORs are problems that only the server can fix, not the client. These errors are not due to a query itself, but rather due to the state of the system. Generally, we don't expect the errors to go away by themselves, but they may go away after human intervention. Examples of scenarios where INTERNAL_ERROR is returned: 1. Something is not configured correctly internally. 2. A necessary resource is not available, and we don't expect it to become available by itself. 3. A sanity check fails. 4. Some other internal error occurs. Clients should not retry immediately, as there is little chance of success. However, it's acceptable for retries to happen internally, for example to multiple backends, in case only a subset of backend are not functional. | -| TRANSIENT_ERROR | 11 | TRANSIENT_ERROR is used for when there is some error that we expect we can recover from automatically - often due to a resource limit temporarily being reached. Retrying this error, with an exponential backoff, should succeed. Clients should be able to successfully retry the query on the same backends. Examples of things that can trigger this error: 1. Query has been throttled 2. VtGate could have request backlog | -| UNAUTHENTICATED | 12 | UNAUTHENTICATED errors are returned when a user requests access to something, and we're unable to verify the user's authentication. | - -## Messages - -### BoundKeyspaceIdQuery - -BoundKeyspaceIdQuery represents a single query request for the specified list of keyspace ids. This is used in a list for ExecuteBatchKeyspaceIdsRequest. - -#### Properties - -| Name |Description | -| :-------- | :-------- -| query
[query.BoundQuery](#query.boundquery)| BoundQuery is a query with its bind variables | -| keyspace
string| keyspace to target the query to. | -| keyspace_ids
list <bytes>| keyspace_ids contains the list of keyspace_ids affected by this query. Will be used to find the shards to send the query to. | - -### BoundShardQuery - -BoundShardQuery represents a single query request for the specified list of shards. This is used in a list for ExecuteBatchShardsRequest. - -#### Properties - -| Name |Description | -| :-------- | :-------- -| query
[query.BoundQuery](#query.boundquery)| BoundQuery is a query with its bind variables | -| keyspace
string| keyspace to target the query to. | -| shards
list <string>| shards to target the query to. A DML can only target one shard. | - -### Session - -Session objects are session cookies and are invalidated on use. Query results will contain updated session values. Their content should be opaque to the user. - -#### Properties - -| Name |Description | -| :-------- | :-------- -| in_transaction
bool| | -| shard_sessions
list <[ShardSession](#session.shardsession)>| | -| single_db
bool| single_db specifies if the transaction should be restricted to a single database. | - -#### Messages - -##### Session.ShardSession - -Properties - -| Name |Description | -| :-------- | :-------- -| target
[query.Target](#query.target)| Target describes what the client expects the tablet is. If the tablet does not match, an error is returned. | -| transaction_id
int64| | - -### query.BindVariable - -BindVariable represents a single bind variable in a Query. - -#### Properties - -| Name |Description | -| :-------- | :-------- -| type
[Type](#query.type)| | -| value
bytes| | -| values
list <[Value](#query.value)>| Value represents a typed value. | - -### query.BoundQuery - -BoundQuery is a query with its bind variables - -#### Properties - -| Name |Description | -| :-------- | :-------- -| sql
string| sql is the SQL query to execute | -| bind_variables
map <string, [BindVariable](#query.bindvariable)>| bind_variables is a map of all bind variables to expand in the query | - -### query.EventToken - -EventToken is a structure that describes a point in time in a replication stream on one shard. The most recent known replication position can be retrieved from vttablet when executing a query. It is also sent with the replication streams from the binlog service. - -#### Properties - -| Name |Description | -| :-------- | :-------- -| timestamp
int64| timestamp is the MySQL timestamp of the statements. Seconds since Epoch. | -| shard
string| The shard name that applied the statements. Note this is not set when streaming from a vttablet. It is only used on the client -> vtgate link. | -| position
string| The position on the replication stream after this statement was applied. It is not the transaction ID / GTID, but the position / GTIDSet. | - -### query.ExecuteOptions - -ExecuteOptions is passed around for all Execute calls. - -#### Properties - -| Name |Description | -| :-------- | :-------- -| include_event_token
bool| This used to be exclude_field_names, which was replaced by IncludedFields enum below If set, we will try to include an EventToken with the responses. | -| compare_event_token
[EventToken](#query.eventtoken)| EventToken is a structure that describes a point in time in a replication stream on one shard. The most recent known replication position can be retrieved from vttablet when executing a query. It is also sent with the replication streams from the binlog service. | -| included_fields
[IncludedFields](#executeoptions.includedfields)| Controls what fields are returned in Field message responses from mysql, i.e. field name, table name, etc. This is an optimization for high-QPS queries where the client knows what it's getting | - -#### Enums - -##### ExecuteOptions.IncludedFields - -| Name |Value |Description | -| :-------- | :-------- | :-------- -| TYPE_AND_NAME | 0 | | -| TYPE_ONLY | 1 | | -| ALL | 2 | | - -### query.Field - -Field describes a single column returned by a query - -#### Properties - -| Name |Description | -| :-------- | :-------- -| name
string| name of the field as returned by mysql C API | -| type
[Type](#query.type)| vitess-defined type. Conversion function is in sqltypes package. | -| table
string| Remaining fields from mysql C API. These fields are only populated when ExecuteOptions.included_fields is set to IncludedFields.ALL. | -| org_table
string| | -| database
string| | -| org_name
string| | -| column_length
uint32| column_length is really a uint32. All 32 bits can be used. | -| charset
uint32| charset is actually a uint16. Only the lower 16 bits are used. | -| decimals
uint32| decimals is actually a uint8. Only the lower 8 bits are used. | -| flags
uint32| flags is actually a uint16. Only the lower 16 bits are used. | - -### query.QueryResult - -QueryResult is returned by Execute and ExecuteStream. As returned by Execute, len(fields) is always equal to len(row) (for each row in rows). As returned by StreamExecute, the first QueryResult has the fields set, and subsequent QueryResult have rows set. And as Execute, len(QueryResult[0].fields) is always equal to len(row) (for each row in rows for each QueryResult in QueryResult[1:]). - -#### Properties - -| Name |Description | -| :-------- | :-------- -| fields
list <[Field](#query.field)>| Field describes a single column returned by a query | -| rows_affected
uint64| | -| insert_id
uint64| | -| rows
list <[Row](#query.row)>| Row is a database row. | -| extras
[ResultExtras](#query.resultextras)| ResultExtras contains optional out-of-band information. Usually the extras are requested by adding ExecuteOptions flags. | - -### query.ResultExtras - -ResultExtras contains optional out-of-band information. Usually the extras are requested by adding ExecuteOptions flags. - -#### Properties - -| Name |Description | -| :-------- | :-------- -| event_token
[EventToken](#query.eventtoken)| EventToken is a structure that describes a point in time in a replication stream on one shard. The most recent known replication position can be retrieved from vttablet when executing a query. It is also sent with the replication streams from the binlog service. | -| fresher
bool| If set, it means the data returned with this result is fresher than the compare_token passed in the ExecuteOptions. | - -### query.ResultWithError - -ResultWithError represents a query response in the form of result or error but not both. - -#### Properties - -| Name |Description | -| :-------- | :-------- -| error
[vtrpc.RPCError](#vtrpc.rpcerror)| RPCError is an application-level error structure returned by VtTablet (and passed along by VtGate if appropriate). We use this so the clients don't have to parse the error messages, but instead can depend on the value of the code. | -| result
[query.QueryResult](#query.queryresult)| QueryResult is returned by Execute and ExecuteStream. As returned by Execute, len(fields) is always equal to len(row) (for each row in rows). As returned by StreamExecute, the first QueryResult has the fields set, and subsequent QueryResult have rows set. And as Execute, len(QueryResult[0].fields) is always equal to len(row) (for each row in rows for each QueryResult in QueryResult[1:]). | - -### query.Row - -Row is a database row. - -#### Properties - -| Name |Description | -| :-------- | :-------- -| lengths
list <sint64>| lengths contains the length of each value in values. A length of -1 means that the field is NULL. While reading values, you have to accummulate the length to know the offset where the next value begins in values. | -| values
bytes| values contains a concatenation of all values in the row. | - -### query.StreamEvent - -StreamEvent describes a set of transformations that happened as a single transactional unit on a server. It is streamed back by the Update Stream calls. - -#### Properties - -| Name |Description | -| :-------- | :-------- -| statements
list <[Statement](#streamevent.statement)>| The statements in this transaction. | -| event_token
[EventToken](#query.eventtoken)| EventToken is a structure that describes a point in time in a replication stream on one shard. The most recent known replication position can be retrieved from vttablet when executing a query. It is also sent with the replication streams from the binlog service. | - -#### Messages - -##### StreamEvent.Statement - -One individual Statement in a transaction. - -Properties - -| Name |Description | -| :-------- | :-------- -| category
[Category](#streamevent.statement.category)| | -| table_name
string| table_name, primary_key_fields and primary_key_values are set for DML. | -| primary_key_fields
list <[Field](#query.field)>| Field describes a single column returned by a query | -| primary_key_values
list <[Row](#query.row)>| Row is a database row. | -| sql
bytes| sql is set for all queries. FIXME(alainjobart) we may not need it for DMLs. | - -#### Enums - -##### StreamEvent.Statement.Category - - One individual Statement in a transaction. The category of one statement. - -| Name |Value |Description | -| :-------- | :-------- | :-------- -| Error | 0 | | -| DML | 1 | | -| DDL | 2 | | - -### query.Target - -Target describes what the client expects the tablet is. If the tablet does not match, an error is returned. - -#### Properties - -| Name |Description | -| :-------- | :-------- -| keyspace
string| | -| shard
string| | -| tablet_type
[topodata.TabletType](#topodata.tablettype)| TabletType represents the type of a given tablet. | - -### query.Value - -Value represents a typed value. - -#### Properties - -| Name |Description | -| :-------- | :-------- -| type
[Type](#query.type)| | -| value
bytes| | - -### topodata.KeyRange - -KeyRange describes a range of sharding keys, when range-based sharding is used. - -#### Properties - -| Name |Description | -| :-------- | :-------- -| start
bytes| | -| end
bytes| | - -### topodata.ShardReference - -ShardReference is used as a pointer from a SrvKeyspace to a Shard - -#### Properties - -| Name |Description | -| :-------- | :-------- -| name
string| Copied from Shard. | -| key_range
[KeyRange](#topodata.keyrange)| KeyRange describes a range of sharding keys, when range-based sharding is used. | - -### topodata.SrvKeyspace - -SrvKeyspace is a rollup node for the keyspace itself. - -#### Properties - -| Name |Description | -| :-------- | :-------- -| partitions
list <[KeyspacePartition](#srvkeyspace.keyspacepartition)>| The partitions this keyspace is serving, per tablet type. | -| sharding_column_name
string| copied from Keyspace | -| sharding_column_type
[KeyspaceIdType](#topodata.keyspaceidtype)| | -| served_from
list <[ServedFrom](#srvkeyspace.servedfrom)>| | - -#### Messages - -##### SrvKeyspace.KeyspacePartition - -Properties - -| Name |Description | -| :-------- | :-------- -| served_type
[TabletType](#topodata.tablettype)| The type this partition applies to. | -| shard_references
list <[ShardReference](#topodata.shardreference)>| ShardReference is used as a pointer from a SrvKeyspace to a Shard | - -##### SrvKeyspace.ServedFrom - -ServedFrom indicates a relationship between a TabletType and the keyspace name that's serving it. - -Properties - -| Name |Description | -| :-------- | :-------- -| tablet_type
[TabletType](#topodata.tablettype)| ServedFrom indicates a relationship between a TabletType and the keyspace name that's serving it. the tablet type | -| keyspace
string| the keyspace name that's serving it | - -### vtrpc.CallerID - -CallerID is passed along RPCs to identify the originating client for a request. It is not meant to be secure, but only informational. The client can put whatever info they want in these fields, and they will be trusted by the servers. The fields will just be used for logging purposes, and to easily find a client. VtGate propagates it to VtTablet, and VtTablet may use this information for monitoring purposes, to display on dashboards, or for blacklisting purposes. - -#### Properties - -| Name |Description | -| :-------- | :-------- -| principal
string| principal is the effective user identifier. It is usually filled in with whoever made the request to the appserver, if the request came from an automated job or another system component. If the request comes directly from the Internet, or if the Vitess client takes action on its own accord, it is okay for this field to be absent. | -| component
string| component describes the running process of the effective caller. It can for instance be the hostname:port of the servlet initiating the database call, or the container engine ID used by the servlet. | -| subcomponent
string| subcomponent describes a component inisde the immediate caller which is responsible for generating is request. Suggested values are a servlet name or an API endpoint name. | - -### vtrpc.RPCError - -RPCError is an application-level error structure returned by VtTablet (and passed along by VtGate if appropriate). We use this so the clients don't have to parse the error messages, but instead can depend on the value of the code. - -#### Properties - -| Name |Description | -| :-------- | :-------- -| code
[ErrorCode](#vtrpc.errorcode)| | -| message
string| | - diff --git a/doc/VitessComponents.png b/doc/VitessComponents.png deleted file mode 100644 index 73e904221533e52d950fdbfea6e0312fc0701b5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24320 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 - - - Vanilla MySQL - Vitess - - - - - Every MySQL connection has a memory overhead that ranges between 256KB and almost 3MB, depending on which MySQL release you're using. As your user base grows, you need to add RAM to support additional connections, but the RAM does not contribute to faster queries. In addition, there is a significant CPU cost associated with obtaining the connections. - Vitess' gRPC-based protocol creates very lightweight connections. Vitess' connection pooling feature uses Go's concurrency support to map these lightweight connections to a small pool of MySQL connections. As such, Vitess can easily handle thousands of connections. - - - Poorly written queries, such as those that don't set a LIMIT, can negatively impact database performance for all users. - Vitess employs a SQL parser that uses a configurable set of rules to rewrite queries that might hurt database performance. - - - Sharding is a process of partitioning your data to improve scalability and performance. MySQL lacks native sharding support, requiring you to write sharding code and embed sharding logic in your application. - Vitess supports a variety of sharding schemes. It can also migrate tables into different databases and scale up or down the number of shards. These functions are performed non-intrusively, completing most data transitions with just a few seconds of read-only downtime. - - - A MySQL cluster using replication for availability has a master database and a few replicas. If the master fails, a replica should become the new master. This requires you to manage the database lifecycle and communicate the current system state to your application. - Vitess helps to manage the lifecycle of your database scenarios. It supports and automatically handles various scenarios, including master failover and data backups. - - - A MySQL cluster can have custom database configurations for different workloads, like a master database for writes, fast read-only replicas for web clients, slower read-only replicas for batch jobs, and so forth. If the database has horizontal sharding, the setup is repeated for each shard, and the app needs baked-in logic to know how to find the right database. - Vitess uses a topology backed by a consistent data store, like etcd or ZooKeeper. This means the cluster view is always up-to-date and consistent for different clients. Vitess also provides a proxy that routes queries efficiently to the most appropriate MySQL instance. - - - - -### Vitess vs. NoSQL - -If you're considering a NoSQL solution primarily because of concerns about the scalability of MySQL, Vitess might be a more appropriate choice for your application. While NoSQL provides great support for unstructured data, Vitess still offers several benefits not available in NoSQL datastores: - - - - - - - - - - - - - - - - - - - - - - - - - - -
NoSQLVitess
NoSQL databases do not define relationships between database tables, and only support a subset of the SQL language.Vitess is not a simple key-value store. It supports complex query semantics such as where clauses, JOINS, aggregation functions, and more.
NoSQL datastores do not support transactions.Vitess supports transactions within a shard. For transactions that span multiple shards, it allows you to optionally enable 2PC.
NoSQL solutions have custom APIs, leading to custom architectures, applications, and tools.Vitess adds very little variance to MySQL, a database that most people are already accustomed to working with.
NoSQL solutions provide limited support for database indexes compared to MySQL.Vitess allows you to use all of MySQL's indexing functionality to optimize query performance.
- -## Architecture - -The Vitess platform consists of a number of server processes, command-line utilities, and web-based utilities, backed by a consistent metadata store. - -Depending on the current state of your application, you could arrive at a full Vitess implementation through a number of different process flows. For example, if you're building a service from scratch, your first step with Vitess would be to define your database topology. However, if you need to scale your existing database, you'd likely start by deploying a connection proxy. - -Vitess tools and servers are designed to help you whether you start with a complete fleet of databases or start small and scale over time. For smaller implementations, vttablet features like connection pooling and query rewriting help you get more from your existing hardware. Vitess' automation tools then provide additional benefits for larger implementations. - -The diagram below illustrates Vitess' components: - -
-Diagram showing Vitess implementation -
- -### Topology - -The [Topology Service]({% link user-guide/topology-service.md %}) is a metadata store that contains information about running servers, the sharding scheme, and the replication graph. The topology is backed by a consistent data store. You can explore the topology using **vtctl** (command-line) and **vtctld** (web). - -In Kubernetes, the data store is [etcd](https://github.com/coreos/etcd). Vitess source code also ships with [Apache ZooKeeper](https://zookeeper.apache.org/) support. - -### vtgate - -**vtgate** is a light proxy server that routes traffic to the correct vttablet(s) and returns consolidated results back to the client. It is the server to which applications send queries. Thus, the client can be very simple since it only needs to be able to find a vtgate instance. - -To route queries, vtgate considers the sharding scheme, required latency, and the availability of the tablets and their underlying MySQL instances. - -### vttablet - -**vttablet** is a proxy server that sits in front of a MySQL database. A Vitess implementation has one vttablet for each MySQL instance. - -vttablet performs tasks that attempt to maximize throughput as well as protect MySQL from harmful queries. Its features include connection pooling, query rewriting, and query de-duping. In addition, vttablet executes management tasks that vtctl initiates, and it provides streaming services that are used for [filtered replication]({% link user-guide/sharding.md %}#filtered-replication) and data exports. - -A lightweight Vitess implementation uses vttablet as a smart connection proxy that serves queries for a single MySQL database. By running vttablet in front of your MySQL database and changing your app to use the Vitess client instead of your MySQL driver, your app benefits from vttablet's connection pooling, query rewriting, and query de-duping features. - -### vtctl - -**vtctl** is a command-line tool used to administer a Vitess cluster. It allows a human or application to easily interact with a Vitess implementation. Using vtctl, you can identify master and replica databases, create tables, initiate failovers, perform sharding (and resharding) operations, and so forth. - -As vtctl performs operations, it updates the lockserver as needed. Other Vitess servers observe those changes and react accordingly. For example, if you use vtctl to fail over to a new master database, vtgate sees the change and directs future write operations to the new master. - -### vtctld - -**vtctld** is an HTTP server that lets you browse the information stored in the lockserver. It is useful for troubleshooting or for getting a high-level overview of the servers and their current states. - -### vtworker - -**vtworker** hosts long-running processes. It supports a plugin architecture and offers libraries so that you can easily choose tablets to use. Plugins are available for the following types of jobs: - -* **resharding differ** jobs check data integrity during shard splits and joins -* **vertical split differ** jobs check data integrity during vertical splits and joins - -vtworker also lets you easily add other validation procedures. You could do in-tablet integrity checks to verify foreign-key-like relationships or cross-shard integrity checks if, for example, an index table in one keyspace references data in another keyspace. - -### Other support tools - -Vitess also includes the following tools: - -* **mysqlctl**: Manage MySQL instances -* **vtcombo**: A single binary that contains all components of Vitess. It can be used for testing queries in a Continuous Integration environment. -* **vtexplain**: A command line tool that is used to explore how Vitess will handle queries based on a user-supplied schema and topology, without needing to set up a full cluster. -* **zk**: Command-line ZooKeeper client and explorer -* **zkctl**: Manage ZooKeeper instances - -## Vitess on Kubernetes - -[Kubernetes](https://kubernetes.io/) is an open-source orchestration system for Docker containers, and Vitess can run as a Kubernetes-aware cloud native distributed database. - -Kubernetes handles scheduling onto nodes in a compute cluster, actively manages workloads on those nodes, and groups containers comprising an application for easy management and discovery. -This provides an analogous open-source environment to the way Vitess runs in YouTube, -on the [predecessor to Kubernetes](https://kubernetes.io/blog/2015/04/borg-predecessor-to-kubernetes/). - -The easiest way to run Vitess is via Kubernetes. However, it's not a requirement, and other types of deployment are used as well. - - - -## History - -Vitess has been a fundamental component of YouTube infrastructure since 2011. -This section briefly summarizes the sequence of events that led to Vitess' -creation: - -1. YouTube's MySQL database reached a point when peak traffic would soon - exceed the database's serving capacity. To temporarily alleviate the - problem, YouTube created a master database for write traffic and a - replica database for read traffic. -1. With demand for cat videos at an all-time high, read-only traffic was - still high enough to overload the replica database. So YouTube added - more replicas, again providing a temporary solution. -1. Eventually, write traffic became too high for the master database to - handle, requiring YouTube to shard data to handle incoming traffic. - (Sharding would have also become necessary if the overall size of the - database became too large for a single MySQL instance.) -1. YouTube's application layer was modified so that before executing any - database operation, the code could identify the right database shard - to receive that particular query. - -Vitess let YouTube remove that logic from the source code, introducing -a proxy between the application and the database to route and manage -database interactions. Since then, YouTube has scaled its user base -by a factor of more than 50, greatly increasing its capacity to serve -pages, process newly uploaded videos, and more. Even more importantly, -Vitess is a platform that continues to scale. - -YouTube chose to write Vitess in Go because Go offers a combination of -expressiveness and performance. It is almost as expressive as Python and -very maintainable. However, its performance is in the same range as Java -and close to C++ in certain cases. In addition, the language is extremely -well suited for concurrent programming and has a very high quality -standard library. - -### Open Source First - -The open source version of Vitess is extremely similar to the version -used at YouTube. While there are some changes that let YouTube take -advantage of Google's infrastructure, the core functionality is the same. -When developing new features, the Vitess team first makes them work in -the Open Source tree. In some cases, the team then writes a plugin -that makes use of Google-specific technology. This approach ensures that -the Open Source version of Vitess maintains the same level of quality as -the internal version. - -The vast majority of Vitess development takes place in the open, on GitHub. -As such, Vitess is built with extensibility in mind so that you can adjust -it to the needs of your infrastructure. diff --git a/doc/VitessOverview.png b/doc/VitessOverview.png deleted file mode 100644 index e8e1b17fc19a428c665ac189db7ebab82f71ccc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35460 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 diff --git a/doc/VitessReplication.md b/doc/VitessReplication.md deleted file mode 100644 index 7e7ad213c91..00000000000 --- a/doc/VitessReplication.md +++ /dev/null @@ -1,162 +0,0 @@ -# Vitess, MySQL Replication, and Schema Changes - -## Statement vs Row Based Replication - -MySQL supports two primary modes of replication in its binary logs: statement or -row based. Vitess supports both these modes. - -For schema changes, if the number of affected rows is greater > 100k (configurable), we don't allow direct application -of DDLs. The recommended tools in such cases are [gh-ost](https://github.com/github/gh-ost) or [pt-osc](https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.html). - -Not all statements are safe for Statement Based Replication (SBR): https://dev.mysql.com/doc/refman/8.0/en/replication-rbr-safe-unsafe.html. Vitess rewrites some of these statements to be safe for SBR, and others are explicitly failed. This is described in detail below. - -With statement based replication, it becomes easier to perform offline -advanced schema changes, or large data updates. Vitess’s solution is called -schema swap (described below). - -## Rewriting Update Statements - -Vitess rewrites ‘UPDATE’ SQL statements to always know what rows will be -affected. For instance, this statement: - -``` -UPDATE SET WHERE -``` - -Will be rewritten into: - -``` -SELECT FROM
WHERE FOR UPDATE -UPDATE
SET WHERE IN /* primary key values: … */ -``` - -With this rewrite in effect, we know exactly which rows are affected, by primary -key, and we also document them as a SQL comment. - -The replication stream then doesn’t contain the expensive WHERE clauses, but -only the UPDATE statements by primary key. In a sense, it is combining the best -of row based and statement based replication: the slaves only do primary key -based updates, but the replication stream is very friendly for schema changes. - -Also, Vitess adds comments to the rewritten statements that identify the primary -key affected by that statement. This allows us to produce an Update Stream (see -section below). - -## Vitess Schema Swap - -Within YouTube, we also use a combination of statement based replication and -backups to apply long-running schema changes without disrupting ongoing -operations. See the [schema swap tutorial]({% link user-guide/schema-swap.md %}) -for a detailed example. - -This operation, which is called **schema swap**, works as follows: - -* Pick a slave, take it out of service. It is not used by clients any more. -* Apply whatever schema or large data change is needed, on the slave. -* Take a backup of that slave. -* On all the other slaves, one at a time, take them out of service, restore the - backup, catch up on replication, put them back into service. -* When all slaves are done, reparent to a slave that has applied the change. -* The old master can then be restored from a backup too, and put back into - service. - -With this process, the only guarantee we need is for the change (schema or data) -to be backward compatible: the clients won’t know if they talk to a server -that has applied the change yet or not. This is usually fairly easy to deal -with: - -* When adding a column, clients cannot use it until the schema swap is done. -* When removing a column, all clients must stop referring to it before the - schema swap begins. -* A column rename is still tricky: the best way to do it is to add a new column - with the new name in one schema swap, then change the client to populate both - (and backfill the values), then change the client again to use the new - column only, then use another schema swap to remove the original column. -* A whole bunch of operations are really easy to perform though: index changes, - optimize table, … - -Note the real change is only applied to one instance. We then rely on the backup -/ restore process to propagate the change. This is a very good improvement from -letting the changes through the replication stream, where they are applied to -all hosts, not just one. This is also a very good improvement over the industry -practice of online schema change, which also must run on all hosts. -Since Vitess’s backup / restore and reparent processes -are very reliable (they need to be reliable on their own, independently of this -process!), this does not add much more complexity to a running system. - -## Update Stream - -Since the SBR replication stream also contains comments of which primary key is -affected by a change, it is possible to look at the replication stream and know -exactly what objects have changed. This Vitess feature is -called [Update Stream]({% link user-guide/update-stream.md %}). - -By subscribing to the Update Stream for a given shard, one can know what values -change. This stream can be used to create a stream of data changes (export to an -Apache Kafka for instance), or even invalidate an application layer cache. - -Note: the Update Stream only reliably contains the primary key values of the -rows that have changed, not the actual values for all columns. To get these -values, it is necessary to re-query the database. - -We have plans to make this [Update Stream]({% link user-guide/update-stream.md %}) -feature more consistent, very resilient, fast, and transparent to sharding. - -## Semi-Sync - -If you tell Vitess to enforce semi-sync -([semisynchronous replication](https://dev.mysql.com/doc/refman/5.7/en/replication-semisync.html)) -by passing the `-enable_semi_sync` flag to vttablets, -then the following will happen: - -* The master will only accept writes if it has at least one slave connected - and sending semi-sync ACK. It will never fall back to asynchronous - (not requiring ACKs) because of timeouts while waiting for ACK, nor because - of having zero slaves connected (although it will fall back to asynchronous - in case of shutdown, abrupt or graceful). - - This is important to prevent split brain (or alternate futures) in case of a - network partition. If we can verify all slaves have stopped replicating, - we know the old master is not accepting writes, even if we are unable to - contact the old master itself. - -* Slaves of *replica* type will send semi-sync ACK. Slaves of *rdonly* type will - **not** send ACK. This is because rdonly slaves are not eligible to be - promoted to master, so we want to avoid the case where a rdonly slave is the - single best candidate for election at the time of master failure (though - a split brain is possible when all rdonly slaves have transactions that - none of replica slaves have). - -These behaviors combine to give you the property that, in case of master -failure, there is at least one other *replica* type slave that has every -transaction that was ever reported to clients as having completed. -You can then ([manually]({% link reference/vtctl.md %}#emergencyreparentshard), -or with an automated tool like [Orchestrator](https://github.com/github/orchestrator)) -pick the replica that is farthest ahead in GTID position and promote that to be -the new master. - -Thus, you can survive sudden master failure without losing any transactions that -were reported to clients as completed. In MySQL 5.7+, this guarantee is -strengthened slightly to preventing loss of any transactions that were ever -**committed** on the original master, eliminating so-called -[phantom reads](https://bugs.mysql.com/bug.php?id=62174). - -On the other hand these behaviors also give a requirement that each shard must -have at least 2 tablets with type *replica* (with addition of the master that -can be demoted to type *replica* this gives a minimum of 3 tablets with initial -type *replica*). This will allow for the master to have a semi-sync acker when -one of the *replica* tablets is down for any reason (for a version update, -machine reboot, schema swap or anything else). - -With regard to replication lag, note that this does **not** guarantee there is -always at least one *replica* type slave from which queries will always return -up-to-date results. Semi-sync guarantees that at least one slave has the -transaction in its relay log, but it has not necessarily been applied yet. -The only way to guarantee a fully up-to-date read is to send the request to the -master. - -## Appendix: Adding support for RBR in Vitess - -We are in the process of adding support for RBR in Vitess. - -See [this document]({% link user-guide/row-based-replication.md %})) for more information. diff --git a/doc/VitessSequences.md b/doc/VitessSequences.md deleted file mode 100644 index 155b315acfb..00000000000 --- a/doc/VitessSequences.md +++ /dev/null @@ -1,208 +0,0 @@ -# Vitess Sequences - -This document describes the Vitess Sequences feature, and how to use it. - -## Motivation - -MySQL provides the `auto-increment` feature to assign monotonically incrementing -IDs to a column in a table. However, when a table is sharded across multiple -instances, maintaining the same feature is a lot more tricky. - -Vitess Sequences fill that gap: - -* Inspired from the usual SQL sequences (implemented in different ways by - Oracle, SQL Server and PostgreSQL). - -* Very high throughput for ID creation, using a configurable in-memory block allocation. - -* Transparent use, similar to MySQL auto-increment: when the field is omitted in - an `insert` statement, the next sequence value is used. - -## When *not* to Use Auto-Increment - -Before we go any further, an auto-increment column has limitations and -drawbacks. let's explore this topic a bit here. - -### Security Considerations - -Using auto-increment can leak confidential information about a service. Let's -take the example of a web site that store user information, and assign user IDs -to its users as they sign in. The user ID is then passed in a cookie for all -subsequent requests. - -The client then knows their own user ID. It is now possible to: - -* Try other user IDs and expose potential system vulnerabilities. - -* Get an approximate number of users of the system (using the user ID). - -* Get an approximate number of sign-ins during a week (creating two accounts a - week apart, and diffing the two IDs). - -Auto-incrementing IDs should be reserved for either internal applications, or -exposed to the clients only when safe. - -### Alternatives - -Alternative to auto-incrementing IDs are: - -* use a 64 bits random generator number. Try to insert a new row with that - ID. If taken (because the statement returns an integrity error), try another - ID. - -* use a UUID scheme, and generate truly unique IDs. - -Now that this is out of the way, let's get to MySQL auto-increment. - -## MySQL Auto-increment Feature - -Let's start by looking at the MySQL auto-increment feature: - -* A row that has no value for the auto-increment value will be given the next ID. - -* The current value is stored in the table metadata. - -* Values may be ‘burned’ (by rolled back transactions). - -* Inserting a row with a given value that is higher than the current value will - set the current value. - -* The value used by the master in a statement is sent in the replication stream, - so slaves will have the same value when re-playing the stream. - -* There is no strict guarantee about ordering: two concurrent statements may - have their commit time in one order, but their auto-incrementing ID in the - opposite order (as the value for the ID is reserved when the statement is - issued, not when the transaction is committed). - -* MySQL has multiple options for auto-increment, like only using every N number - (for multi-master configurations), or performance related features (locking - that table’s current ID may have concurrency implications). - -* When inserting a row in a table with an auto-increment column, if the value - for the auto-increment row is not set, the value for the column is returned to - the client alongside the statement result. - -## Vitess Sequences - -An early design was to use a single unsharded database and a table with an -auto-increment value to generate new values. However, this has serious -limitations, in particular throughput, and storing one entry for each value in -that table, for no reason. - -So we decided instead to base sequences on a MySQL table, and use a single value -in that table to describe which values the sequence should have next. To -increase performance, we also support block allocation of IDs: each update to -the MySQL table is only done every N IDs (N being configurable), and in between -only memory structures in vttablet are updated, making the QPS only limited by -RPC latency. - -In a sharded keyspace, a Sequence's data is only present in one shard (but its -schema is in all the shards). We configure which shard has the data by using a -keyspace_id for the sequence, and route all sequence traffic to the shard that -hold that keyspace_id. That way we are completely compatible with any horizontal -resharding. - -The final goal is to have Sequences supported with SQL statements, like: - -``` sql -/* DDL support */ -CREATE SEQUENCE my_sequence; - -SELECT NEXT VALUE FROM my_sequence; - -ALTER SEQUENCE my_sequence ...; - -DROP SEQUENCE my_sequence; - -SHOW CREATE SEQUENCE my_sequence; -``` - -In the current implementation, we support the query access to Sequences, but not -the administration commands yet. - -### Creating a Sequence - -*Note*: The names in this section are extracted from the examples/demo sample -application. - -To create a Sequence, a backing table must first be created and initialized with a single row. The columns for that table have to be respected. - -This is an example: - -``` sql -create table user_seq(id int, next_id bigint, cache bigint, primary key(id)) comment 'vitess_sequence'; - -insert into user_seq(id, next_id, cache) values(0, 1, 100); -``` - -Then, the Sequence has to be define in the VSchema for that keyspace: - -``` json -{ - "sharded": false, - "tables": { - "user_seq": { - "type": "sequence" - }, - ... - } -} -``` - -And the table it is going to be using it can also reference the Sequence in its VSchema: - -``` json -{ - ... - "tables" : { - "user": { - "column_vindexes": [ - ... - ], - "auto_increment": { - "column": "user_id", - "sequence": "user_seq" - } - }, - -``` - -After this done (and the Schema has been reloaded on master tablet, and the -VSchema has been pushed), the sequence can be used. - -### Accessing a Sequence - -If a Sequence is used to fill in a column for a table, nothing further needs to -be done. Just sending no value for the column will make vtgate insert the next -Sequence value in its place. - -It is also possible to access the Sequence directly with the following SQL constructs: - -``` sql -/* Returns the next value for the sequence */ -select next value from my_sequence; - -/* Returns the next value for the sequence, and also reserve 4 values after that. */ -select next 5 values from my_sequence; - -``` - -## TO-DO List - -### DDL Support - -We want to add DDL support for sequences, as previously mentioned: - -``` sql -CREATE SEQUENCE my_sequence; - -ALTER SEQUENCE my_sequence ...; - -DROP SEQUENCE my_sequence; - -SHOW CREATE SEQUENCE my_sequence; -``` - -But for now, the Sequence backing table has to be created and managed using the -usual schema management features, with the right column definitions and table comment. diff --git a/doc/VitessTransportSecurityModel.md b/doc/VitessTransportSecurityModel.md deleted file mode 100644 index bc9d0ebe832..00000000000 --- a/doc/VitessTransportSecurityModel.md +++ /dev/null @@ -1,110 +0,0 @@ -# Vitess Transport Security Model - -Vitess exposes a few RPC services, and internally also uses RPCs. These RPCs -may use secure transport options. This document explains how to use these -features. - -## Overview - -The following diagram represents all the RPCs we use in a Vitess cluster: - -
-Vitess Transport Security Model Diagram -
- -There are two main categories: - -* Internal RPCs: they are used to connect Vitess components. -* Externally visible RPCs: they are use by the app to talk to Vitess. - -A few features in the Vitess ecosystem depend on authentication, like Caller ID -and table ACLs. We'll explore the Caller ID feature first. - -The encryption and authentication scheme used depends on the transport -used. With gRPC (the default for Vitess), TLS can be used to secure both -internal and external RPCs. We'll detail what the options are. - -## Caller ID - -Caller ID is a feature provided by the Vitess stack to identify the source of -queries. There are two different Caller IDs: - -* **Immediate Caller ID**: It represents the secure client identity when it - enters the Vitess side: - * It is a single string, represents the user connecting to Vitess (vtgate). - * It is authenticated by the transport layer used. - * It is used by the Vitess TableACL feature. -* **Effective Caller ID**: It provides detailed information on who the - individual caller process is: - * It contains more information about the caller: principal, component, - sub-component. - * It is provided by the application layer. - * It is not authenticated. - * It is exposed in query logs to be able to debug the source of a slow query, - for instance. - -## gRPC Transport - -### gRPC Encrypted Transport - -When using gRPC transport, Vitess can use the usual TLS security features -(familiarity with SSL / TLS is necessary here): - -* Any Vitess server can be configured to use TLS with the following - command line parameters: - * grpc\_cert, grpc\_key: server cert and key to use. - * grpc\_ca (optional): client cert chains to trust. If specified, the client - must use a certificate signed by one ca in the provided file. -* A Vitess go client can be configured with symmetrical parameters to enable TLS: - * ...\_grpc\_ca: list of server cert signers to trust. - * ...\_grpc\_server\_name: name of the server cert to trust, instead of the - hostname used to connect. - * ...\_grpc\_cert, ...\_grpc\_key: client side cert and key to use (when the - server requires client authentication) -* Other clients can take similar parameters, in various ways, see each client - for more information. - -With these options, it is possible to use TLS-secured connections for all parts -of the system. This enables the server side to authenticate the client, and / or -the client to authenticate the server. - -Note this is not enabled by default, as usually the different Vitess servers -will run on a private network (in a Cloud environment, usually all local traffic -is already secured over a VPN, for instance). - -### Certificates and Caller ID - -Additionally, if a client uses a certificate to connect to Vitess (vtgate), the -common name of that certificate is passed to vttablet as the Immediate Caller -ID. It can then be used by table ACLs, to grant read, write or admin access to -individual tables. This should be used if different clients should have -different access to Vitess tables. - -### Caller ID Override - -In a private network, where SSL security is not required, it might still be -desirable to use table ACLs as a safety mechanism to prevent a user from -accessing sensitive data. The gRPC connector provides the -grpc\_use\_effective\_callerid flag for this purpose: if specified when running -vtgate, the Effective Caller ID's principal is copied into the Immediate Caller -ID, and then used throughout the Vitess stack. - -**Important**: this is not secure. Any user code can provide any value for -the Effective Caller ID's principal, and therefore access any data. This is -intended as a safety feature to make sure some applications do not misbehave. -Therefore, this flag is not enabled by default. - -### Example - -For a concrete example, see -[test/encrypted\_transport.py](https://github.com/vitessio/vitess/blob/master/test/encrypted_transport.py) -in the source tree. It first sets up all the certificates, and some table ACLs, -then uses the python client to connect with SSL. It also exercises the -grpc\_use\_effective\_callerid flag, by connecting without SSL. - -## MySQL Transport - -To get vtgate to support SSL/TLS use `-mysql_server_ssl_cert` and `-mysql_server_ssl_key`. - -To require client certificates set `-mysql_server_ssl_ca`. If there is no CA specified then -TLS is optional. diff --git a/doc/VtExplain.md b/doc/VtExplain.md deleted file mode 100644 index 93d06a8f0c3..00000000000 --- a/doc/VtExplain.md +++ /dev/null @@ -1,151 +0,0 @@ -# VTExplain Tool - -The vtexplain tool provides information about how Vitess will execute a statement (the Vitess version of MySQL `EXPLAIN`). - -## Prerequisites - -You'll need to build the `vtexplain` binary in your environment. -To find instructions on how to build this binary please refer to this [guide](https://vitess.io/docs/tutorials/local/). - -## Explaining a Query - -In order to explain a query you will need to first collect a sql schema for the various tables and a vschema json file containing a map of keyspace to the set of vindexes / tables in the vschema. - -For example, let's use the following: - -Schema: - -```SQL -CREATE TABLE users( - user_id bigint, - name varchar(128), - primary key(user_id) -); - -CREATE TABLE users_name_idx( - user_id bigint, - name varchar(128), - primary key(name, user_id) -); -``` - -VSchema: - -```json -{ - "mainkeyspace": { - "sharded": true, - "vindexes": { - "hash": { - "type": "hash" - }, - "md5": { - "type": "unicode_loose_md5", - "params": {}, - "owner": "" - }, - "users_name_idx": { - "type": "lookup_hash", - "params": { - "from": "name", - "table": "users_name_idx", - "to": "user_id" - }, - "owner": "users" - } - }, - "tables": { - "users": { - "column_vindexes": [ - { - "column": "user_id", - "name": "hash" - }, - { - "column": "name", - "name": "users_name_idx" - } - ], - "auto_increment": null - }, - "users_name_idx": { - "type": "", - "column_vindexes": [ - { - "column": "name", - "name": "md5" - } - ], - "auto_increment": null - } - } - } -} -``` - -These can be passed to vtexplain either on the command line or (more readily) through files. - -Then you can use the tool like this: - -**Select:** - -```bash -vtexplain -shards 8 -vschema-file /tmp/vschema.json -schema-file /tmp/schema.sql -replication-mode "ROW" -output-mode text -sql "SELECT * from users" ----------------------------------------------------------------------- -SELECT * from users - -1 mainkeyspace/-20: select * from users limit 10001 -1 mainkeyspace/20-40: select * from users limit 10001 -1 mainkeyspace/40-60: select * from users limit 10001 -1 mainkeyspace/60-80: select * from users limit 10001 -1 mainkeyspace/80-a0: select * from users limit 10001 -1 mainkeyspace/a0-c0: select * from users limit 10001 -1 mainkeyspace/c0-e0: select * from users limit 10001 -1 mainkeyspace/e0-: select * from users limit 10001 - ----------------------------------------------------------------------- -``` - -The output shows the sequence of queries run. - -In this case, the query planner is a scatter query to all shards, and each line shows: - -(a) the logical sequence of the query -(b) the keyspace/shard -(c) the query that was executed - -The fact that each query runs at time `1` shows that vitess executes these in parallel, and the `limit 10001` is automatically added as a protection against large results. - -**Insert:** - -```bash -vtexplain -shards 128 -vschema-file /tmp/vschema.json -schema-file /tmp/schema.sql -replication-mode "ROW" -output-mode text -sql "INSERT INTO users (user_id, name) VALUES(1, 'john')" - ----------------------------------------------------------------------- -INSERT INTO users (user_id, name) VALUES(1, 'john') - -1 mainkeyspace/22-24: begin -1 mainkeyspace/22-24: insert into users_name_idx(name, user_id) values ('john', 1) /* vtgate:: keyspace_id:22c0c31d7a0b489a16332a5b32b028bc */ -2 mainkeyspace/16-18: begin -2 mainkeyspace/16-18: insert into users(user_id, name) values (1, 'john') /* vtgate:: keyspace_id:166b40b44aba4bd6 */ -3 mainkeyspace/22-24: commit -4 mainkeyspace/16-18: commit - ----------------------------------------------------------------------- -``` - -This example shows how Vitess handles an insert into a table with a secondary lookup vindex. - -First, at time `1`, a transaction is opened on one shard to insert the row into the `users_name_idx` table. Then at time `2` a second transaction is opened on another shard with the actual insert into the `users` table, and finally each transaction is committed at time `3` and `4`. - -**Configuration Options** - -The `--shards` option specifies the number of shards to simulate. vtexplain will always allocate an evenly divided key range to each. - -The `--replication-mode` option controls whether to simulate row based or statement based replication. - -You can find more usage of `vtexplain` by executing the following command: - -``` -vtexplain --help -``` diff --git a/doc/internal/PublishWebsite.md b/doc/internal/PublishWebsite.md deleted file mode 100644 index 5787416f932..00000000000 --- a/doc/internal/PublishWebsite.md +++ /dev/null @@ -1,166 +0,0 @@ -# Publishing vitess.io Web Site - -## Overview - -Our website [vitess.io](https://vitess.io) are static HTML pages which are -generated by [Jekyll](https://github.com/jekyll/jekyll) from Markdown files -located in the [`doc/`](https://github.com/vitessio/vitess/tree/master/doc) -directory. - -The generated files will be put in the -[`docs/`](https://github.com/vitessio/vitess/tree/master/docs) directory (note -the extra **s**). GitHub serves the website from this directory off the master -branch. - -## TL;DR - -### To preview site locally - -* Run: - - ``` - ./vitess.io/preview-site.sh - ``` - -* Site should be live at localhost:4000 - -### To publish the site - -* Make sure your doc and site changes have been committed to your branch and - your branch is clean. -* Run: - - ``` - ./vitess.io/publish-site.sh - ``` - -* Sanity check the diffs. - * `git diff HEAD~` -* Create a pull request for your branch and let somebody review it. -* Merge the pull request into the master branch. - -## Details - -### Directory Structure - -We have three main directories: - -* [`doc/`](https://github.com/vitessio/vitess/tree/master/doc) - original - content -* [`docs/`](https://github.com/vitessio/vitess/tree/master/docs) - generated - website actually served at https://vitess.io/ -* [`vitess.io/`](https://github.com/vitessio/vitess/tree/master/vitess.io) - - all relevant files for the website e.g. - * Jekyll configuration - * images e.g. our logo - * CSS - * [Navigation - menu](https://github.com/vitessio/vitess/blob/master/vitess.io/_includes/left-nav-menu.html) - * boiler plate markdown files which include the actual content from the - `doc/` directory - ([example](https://github.com/vitessio/vitess/blob/master/vitess.io/contributing/github-workflow.md)) - -The boiler plate markdown files have multiple purposes: - -* feed the actual content into a template which adds e.g. the navigation to - the file -* re-arrange paths on the website e.g. - [`doc/GitHubWorkFlow.md`](https://github.com/vitessio/vitess/blob/master/doc/GitHubWorkflow.md) - is actually served as https://vitess.io/docs/contributing/github-workflow/ - because there is the file - [`vitess.io/contributing/github-workflow.md`](https://github.com/vitessio/vitess/blob/master/vitess.io/contributing/github-workflow.md). - -### Changing Content - -To modify our website, you need to: - -* change the underlying Markdown files in the `doc/` directory -* re-generate the static pages (see [`publish-site.sh` - above](#to-publish-the-site)) -* merge your changes into the master branch e.g. as pull request - -### Linking pages - -Always use the `{% raw %}{% link ... %}{% endraw %}` template tag to link other pages. - -Note that you have to refer to the `.md` file of the page. Example: - -``` -[GitHub Workflow page]({% raw %}{% link contributing/github-workflow.md %}{% endraw %}) -``` - -### Adding new Pages - -If you want to add a new page, you must also: - -* add it to the left menu: - [`vitess.io/_includes/left-nav-menu.html`](https://github.com/vitessio/vitess/blob/master/vitess.io/_includes/left-nav-menu.html) -* create a boiler plate .md file. Example: - [`vitess.io/contributing/github-workflow.md`](https://github.com/vitessio/vitess/blob/master/vitess.io/contributing/github-workflow.md) - -When you add a new section to the menu, please create a new directory below -`vitess.io/`. For example, the "Contributing" section is served out of -`vitess.io/contributing/`. - -The main file in the section should have `index.md` as its boiler plate counter -part. Example: `doc/Contributing.md` is included by -`vitess.io/contributing/index.md` and therefore served as -https://vitess.io/contributing/. - -Make sure that you use `{% raw %}{% link ... %}{% endraw %}` to generate the URLs. -See existing entries for examples. - -### Orphaned doc/ Markdown Files - -There are several files in `doc/` which are currently not visible on -https://vitess.io. - -Examples: - -* https://github.com/vitessio/vitess/blob/master/doc/LifeOfAQuery.md -* https://github.com/vitessio/vitess/blob/master/doc/V3VindexDesign.md - -This is fine and accepted. Users can still view them on GitHub.com. - -Note that these files should include images using the full path e.g. in -`LifeOfAQuery.md`: - -``` -![](https://raw.githubusercontent.com/vitessio/vitess/master/doc/life_of_a_query.png) -``` - -Otherwise GitHub cannot find and show the images. - -## Jekyll Install Instructions - -This section describes how to install Jekyll to generate the website. - -### The Easy Way - -* Install Docker. -* Run the `./vitess.io/preview-site.sh` and `./vitess.io/publish-site.sh` commands as shown above. - -### The Hard Way - -* On Ubuntu, you need a non-root Ruby install so gem packages can be - installed correctly. - * [Install rbenv](https://github.com/sstephenson/rbenv#installation). - * Close and re-open your shell to complete the installation. - * [Install - ruby-build](https://github.com/sstephenson/ruby-build#installation) - plugin for rbenv. - * Use rbenv to build a recent version of Ruby. - * rbenv install 2.2.3 - * You may need to install extra dependencies. The build output should tell - you which packages. For example: ```sudo apt-get install -y libreadline-dev``` - * Set the new Ruby as the system-wide default. - * ```rbenv global 2.2.3``` - * ```rbenv rehash``` -* Install bundler. - * ```gem install bundler``` -* Install "nodejs" as JavaScript runtime. - * ```sudo apt-get install nodejs``` - * In Ubuntu, the binary is unfortunately renamed from "node" to "nodejs". - We work-around this by creating a "node" symlink on a directory which is - early in the PATH list: ```ln -s /usr/bin/nodejs $HOME/.rbenv/bin/node``` -* Add `--docker=false` to the commands above. diff --git a/doc/slides/Percona2015.pptx b/doc/slides/Percona2015.pptx deleted file mode 100644 index b38e77df5ee6521201afab86ec1ecedabb199fc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 546098 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%0AT>2hJ1EQ?@ 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

x{eLXz zO!+@MTGJnUhI@8;^uWmhsg6=9waaz%v?<+JXPvwFxWb%?_l``li~9s-&Mi`C{EB=#KNa%rX3NK3m%h=Wu7vyN>CBA) z=(eeWExJkkF)OuL;fiI;% z8nPb@kWO+SclX(`NPKTELaWCxm1D%F30B0r0;CHgt$Mn;Ah36(PE%xEov2ShvE9t(lsC!(vR)r^8u3;$2A6r$tcl>b7CYJZ$QuIVSjDf0y1CFf74g7# zB_ColPP1T_FRq{}Y@6e2O$-COM2!pH^|Q7%|9)txe6)PCHDT6TJ000*$I(_@x-%lo z!ra)~?Y?(bI1_WOF`mO2Q?k*jamUPPr}#D{xsq?C#wdMeLKI z=}G4eg+uOBZ;C~o*~&YkfGeIHA8=1=3<>Q3zxTkG$oH>K?N68jNxwmpw2kH1?FB(5f52i#yDt;= zrSO#4#nEK44f`X?P^2VW5R9ns_L=~B+&*t>RUcbLF?O5np{2dg@vD@Y@hjmeoI!*{ zG%7#~=)W6^OXJ$($l zAXiQ)c&#<3QPQsW6C%tjW5Q(H;Rv_grGruyW1pud1E70 z0l-66rot#u@$!`b`?BNBtKW_GlKTf+z2R_D`ElgKEzBUuZ)I_yRs~zEV6>~0gAme<`D{}YLl)jG_ zQh8ZFe$*p}&uxXiu~R-;xf|Q$vD*9L?C0`$L#|#z{^Tq-RQ_Eh0oEt5Tu8s>t&;pQ z1yhZtrsi1^Ui{|tcNx6McS8#DRHCn6O`KiYvsF(_W|Vztv@<706pnIN*J=#EAA7NU z)mvdZ-@XFzgxYpl_RseUfTaJDK<2o?pZp^EN_-WqTJK^>X09fH5B)d&CsVHMXX+dz=Ix(RIe4SD)05wkyOBW#m}G0fr&zf zkj8!XK0eWLK`(SwhTDR87gE9jr<1jP>a10~%K={Wf4LkEHdFlR!Q%1alow!5R>(_< zQd>et`@#Ox(q+t&R@LpH7C=4n`C_g3ubv+OYfX*f7wR#*FMZdIM^X$Y>4|JDUIe4) z`dqRi!GXMglLM${GmH$ET-L3@L{l{+Y}{&2q^YF^*4h}^rbGy~(HkokU$umm&j#yz z2f{ngE=s}N+Z8ikk5&)Or}|Adn!nw$dooPK%R5T?7a;CZuyTdth3u@&+$Km zheoZmi%j#D*KQ)emV=Jtj5>;04O(5-6uat(5V6Aywz->JyG#G5w&!YSZHR;||=MTX=&M8It;(Iwzb{N+LnnK%B4lVrXs zlD4`nu}BXm)QGM445zm_zL*2uq=6DLz9#jfn;p~^?0j9yAkTIQsIAK1_iu9C^ZMvL zZOW+_timbrSbXSv+UNXu{>!EFcSO86Y7eqVYVzy7tDBoEyJI>jystU_tMVzyzO&=m zZcmTyySm_;hnn${{5n006Cy5{rN;TXjxTMGH$p%wzax*ro-Z%0=Z^ZcXKN?|I@zV4 z3##00`g2kHO`RcrYKmWpiR0;va-gi88FwN3Kp^uzPIJE>eLp;Mz{xy}XK!b`x33Qe zb^i5Ie)$(*9)c}e3`Nc&ci_}1bCkRGaa$V&xMFj^mKAScvan8P{|hiNg>A}d<>|pz zxC$_QBX zqbZB*&M32RYt1--QeH@ps+fLlR%*%khuLlU`#4wG&)o$(%QsCU$|5IOIRQ7(>@v@5 zaj?UW{U;(;YS%F28nvG9P51W7r5C^AudF-}?E3aiDfI5JhMk(9WmEVCDGXM8vkK{h zj|UYMdmvaqii}W1necl56_9rx#8hF@MQ^esa-P&amh^v@* zPw^@Y8ml!zdq(e^>7wWCHz||>dmfd+FDXEw%ge@<`Yoq(+4tkmimn*`SKJlfpW!J9 z?KTXtXocJb^Enl25Ejj?b=X$&s z*hb;=VlJ}o!{N)6Djl#(E4;PR)e*pWp$s@9qnvK0ahv__`Ak~;uieXt`29N}H>`*5 zp`s$S_bz+W@#1JUl7u~1>W#06Uuz@HhJaMT(~^;@dLc1l4<~d3Lt}zIJ({+y+0o~k zQdD7)yRCt*$w!yM`O`E7h*uVlAolb9g>*^3HWf{>{);X*%{XCfu+I{zez6>-$#7cjts0U&{MYT++`rw9 z)!RooIboadSc!6}sPKT1_D2%>pq(S0P}qyWF1#&8oscnPnzOxLiVj@!b%6y`=4XuQ zdpO>`RVv~FSDH<%GZDmDq2D-n$!$ z7au3+UgYfI-dd!Fsx90TowKT)Mc6OWQ z4av6}%771X^cXssT5JLr&87z4vz{BDVM*tD+zgY!n8DV>A)h5*R_VydNq-%2Xs*E2 zLcu})0FQDrG(={+(y)I>vTu^`u0XfmT#Sj$FaRH)z9&b>*kMaPph()1d1hu^$XI?a z$4)CdG~6<`EXS({LXCS3d9l`kdgIOUFCQfc{f*MHGzrk=w{C1`Ms`u;{fg<6 zK5spaMhp0<+>cS@w`8kWZk_j!uA@VBy-HYq5Y!wx#J{@j!D?Mt{kU6(egI64YpIe| zl%vIU(ufg8Pq8*5LWC;S>ca;rFOtUN#kSl!|FbwfBc|xyUee)_CJ<((ebr_#KOC9X zTWc%E%CqF0)@|>17)NiVEeNVBa?|^JIlFijH^3X$A0Bc21D;%LS6as)I-n%E=$8e% zpr_QPCTpH8<#=)Xk7mzBOcVdzR>Y<2J)+?H33LuRi-V;$kD4QFbb2?m@Ft?Q$zQ{c zy6M*Ed$S1@0p7&f&h?I@gxdP~d;%%fpJC&`bxt<06M!2Wl12g^k8U&D5!!O+g6VHg zG;x+6pH{P+msQ|Wf-KUd3NUQAE&WXOUpCr(can##f5{4-v?@_)t|)w|jjUSlX7-WH zt!)_7?kFd1^yK`XqZwigw6_~I z!uQ>UwN8vVP3jx+(w-F3yU`r{WTh=0_Ods(awM&H8*f@#>Jdu{yGGL$_pOYd&vC>2 z>;DrN>prolL2OU9mCcWP{8&h`0ky+~}-35;=3ju=s< z)A;eMBW9YbS})m*$EvQx!O)g&jAuEbgJsCZcDnsa%Q3;NImP{Ch(O+2w&>w;t_Z`Z0hde?ce&EAWXU3BeGYE079!AUR(xTDki~%AC{4x)$-F$D%wTsDDy9q zXG}YF>cXDQmwyv8QAfAop`y99ErkCF20sg4_6pG zLRJSBT5S0BJ*HP0bBfd7z4;mF=zckP-(d4(+$5ww=s|WAzEfk0rs7dE(a4s`^Oz=i zfBHExt+?#-M?8xR`eN(a4o7}0@dtW`PW};yEGX$9sHH`_rev=9=&~Y(1K`{OihRCi zHC6j_&00tYF>>T-eYhx7PBjTn1OF3`Qen)!bkko(gmHKG)&1$uBtaF z(>3fHZ?v})ZwY^slsXi@8@q8Ph!?vue#vUI=|P+Du(wiA0uX>8{BwIVJpA538zLIs z^N%m5WXJ!oUe{ndUl*KOJZjQC_1dlZ6X`GN8ugNBkU`sJ-2T4fw=}5W-Q2xoyB%|T zt!}hmjh?z95^ME%tM9DWkS9bsX;ovAPEUTk@RMNqZhqvqU1@;DD2e&=zP)qrg;z_&;|eUL=Xs3^yJTkN^lGBx21mJFUO}6W^(Oy|O=RrrCB_JRU`lwTo@b3e(UhTgpVArfn*2mFf8L{H-`?CQ4@NEBq zg__)K7u*7*E7M=9D<{j0;_jciok&Rs`rfLq5u*V)BckKY$A1zS_^ufG58w#et_U@N zD^Uts)~3xPr1GW6v?1y;(9~vIVYxU>h9x>7uWmWL{s~sE@jkZRZYft8X|=p3bkD&4 zsORcn@uDBY!h&LE=tNn}UZ5m~MmDCU=}hCLGjS9zd>&Vgd- zXhJbYMuC0L|MID9&;QO>vDn*2g}rajE0kH7bp7O2C#mro@5pv#ig@L>dd(4?`&t+h zax!8pGBPe_dlBII+D3*2pXNLgnw&C0PQ+i?4O=-sO*3W%U#EX(jh+y@iy>gyTMEhP zXDV?+^LJTDKZneu|M*J#GocieK+OBEy zZ;zYPr9BAJuGj}Fe3P{egM~yaBh}sm|9{N~8mVc;V(mh?AvaHJfYGU-j9T zE6Nwt4;`PxjekSK!+dQ~7v!S^{TE;1-=IAY+-IN?{RQfYjEsK3lY z4H`Y!KrdIYV5^l(`A<^=Z9K~i+@8RYW&xx0OD2dy?m#6+$}L%$Wb?!2(yP~>@DpT1 zva(29U3Z;-O&B)Wlil3hguJ187fY-e&a_El9)4kdQ0t#{mtl?!aT_+zxdOsodZOj7Z|icp-E#GJb-k*?&D8!qygj!Llh^uUu2TnK0Mrdgz~ zb%P!s=;NQZ$pGMKG;3>X1OJ=Nuc@hLBgT)3_A9M7WRZtUO)gIlS9t%teuz$H(dM=o z#s`?cmPLt_yT3@uoh)#{90RH&hiftl89;TjzBELi!Z%2H%fH3LTi1{~#+9|=)i;&P zc0N0$+ktY;CkV)`bqz=UBJX!Z95(X26t!wUx@c55q?vfa=~$#@{HdyFw^jiU$jeky z`a8kuX+)Su%*tvqp~F6&664oPPDt?1eyvlZvg9+%!v1|$MN7ZPh8~*eqp9tHF7ZkQ zz^;Y0JD0s5;EtGL2W&C4QRt!B6Zj~r2E<37uheNu=U>h2b8+z9@gN0t+#R(Q78NCA zWhq=8tvtll8`IIzRT{J;USE4EiQRnQvn$WtT)MR#{nd$1F&|#9Odf65EL9MP`Yyb? zPGNYsB2Da0-v22zpwDsBQ%xO7U9E0UZ~jsOols1wN@U)C@PdMXqgp4h%XX8E z$Nu5|90<7=zU@A)LHmtw1j|IOtos@IxPTMFy6jh3UQ}{se_qotQ*6}Gv^GaU@rN-{ z|AELdeTR-@F~3_*>nU15!E~#(kyj|Rp>;0XO61-J66bl0QaA`YLV`l zBje^40?lg4S5|B$S4V1qg1+7_RBxNFR()P^nT3E<_p-nOl|~)j4o>}?=;h_*X}s3B znfwm)MCeByfcEy~iPDSrX3jkJou}wZulNu4chi|E$e5S7%PQk)oklQ~o^B3(nr2!GN}CTGZ=Hlh@b~HqTfH?oO2sO-jfHPq>2uxS;wt2-aeY9xLHGSg zXD!>12~}N!OD;vkSFZ@GhK6qT-x~W{m!7cw>w|n|;(1{Hcp`&(OZb4?4Da!l&`^%6 z($YaBsM|Y-Z+g6??vFoE)_aeeP#Rnz=ct%sN|Y8RNok^P&>Bw1a;Dp936CXm(F&S0 zgBEqV7L4V*nXG+FR%FD?&c0Pvl0!{J6~qtnO}YXFfFQCLKfxY`@{sC7Ii>fM#BNZ3 zj}T@GjbA7yPVKkj4ELAS3}!!^QM*lErX&lL)SZr)a_PB>FDi#06U{phPLNIkuu^mR zgVrBfRdn4vErb#lO^6V?1OItAK;hdOxb$?HRpaICY@e@~nZ%JU>T?b7!}#y9O4wfm z7|z5n(Bt+bCPbWlV`jR3pECKe6O`ber`&`YLq3(N9#8VVq7oe{C8(r|Y1SD!#d4Yg zqbY}>A~#b$2kc8dF)h)78EDI~Hy4wDfPgpOu(3qXv8(hNsD*`>AhH-gk5<~4*xCDe z6=9%$cxyC$*=^2nz7ZqPZpruYX4}8N(gmdOnnbXcza*D83TnczDF~^{t2D6EEi!)F zG5vmIFf#4W(mAwT#6`B}QoMVVXV<-hKsRWV*^lEUS5Ja+W$`R-1JDuK^|s+$0uja3 z2kkQcPNq4B#m1yq;rBNqpj?a1R>jT_*1#>)y1IVjdXw%#zzwd%v&AR)n{6=F-wz)~ z(WSR)efYD;v}mDx>`FM6)O2v$##(TuN#WyMP3l5*Y+6 zy!udFWTH!NJ(lQb7++ez#I2ZMO*G#qt?8ClCz{M^SReGHaFh1=r?|CMB9j{)MWHq|&`$>q@E<;ui+Dcd_iT`I25C(|xzb{V>DB*Uc?x*9&UY@)bw6NM{OYo*;W@$S>gMQ{<+dGy`q&p^3*t z|Esn%BkN+{GTpw{Q8JS!(QmuuEsu5@_oJ3=XOQ33WSxaPpg@+bqP!fA5*zvW9H@M@ z9!`Oa8hX7E&7srkS~js8XAqv1(%To>{Ag7IESE-P(=UYh0a7RkYuUryO`ac#Q8u$!|>tr{fjPRN_A36wk-HJA=Q;NHT8UF2lq0wLO@&V+(SOX$^ zx;-6vIujl+O3n7*2FqL)C^ubdXob23wMU{M*g^w7hw?)R#!|G`V}rH7O!;decc07lYbUk*E7Jk&9_{|ADgC|B&?e9wbNC_)87#aC04GYfp6eE=r_;!tQXa6Oc z@I#!2jgb4npy<_dPoZ4WeH`^gR|=bc^LCEU^%4l0Ouy>!)H-O}-)wrhjt=#^X}Stw z|8s+a7pO^s=DEM3?77u&W%k3Hq>GB39Ud5SCnGJr?p#|15wo<@+#dHZYOovwc?X7C zqzjC1(db>Y1N&Wo1SMdvoMFeQk7>nnU5#l%e&h}lI$bdf;o_nv$FmdNZY&@u)2@}# z$;Zr@wf(NiubV`1dy?U&71D3H`WhP5CfHj<9=C1e-p6R0su35N zbQM?TXY4~fzv>#ZMz0UQCgEtZ^8qY<2h&-Nr6rWBWj!Ajmi&o`yiQdP@81tU+~kPf z2&%wo+-7VYL>3I$=XC4h$t0y`Cbb_n1v^v()(A_S^-WzpqXW$QBIbdXs+`SbP)CLxhg<6f~ zh^iC`Jip2Mi!$rPRyQAq)#2o%4ayFz1Gr(ok;Ez1$lhKl@|&Is>+EbfXETv?Sq=Rn z6qpnX+*&*T$2+7O&v9yK{AnE^_lb#SZ;fbf7J#w`yt;wG=;h&(*GV5?3ph^rKF&o) z&&uj_hfEvDRYF(2Uw-fVg>{6M)ahm)%<<2u#6z4qi&Cy9DZjB3G3=5Q2fQ^ZG@Nf8 zO8W}<;9Na|`_ihjlU!nxlHI2Ias$L3Z_?OV|K&igg1>A3Dm~pwftAD9BWGKBqN-eP z!-Le@ZNICR3tsTB@OvR0Vp*J&qoK02zyb?9zR6Gqo5=mB{%BT57et`p)6TDN%bwua zEbqNCf0=}Ld6kth;*Tfs%TNgU%LuX#VD1kX@*BQ0^Ho_gr=acOlzktu?GbQ8_>_Li zm14oSGxSM$*#-V>+}<1By=yXQT1y2WEm5s*qdiNmUuOtF>``rW)_&OPVeYmmn zRGMTA(JwUkR9OwY_1|r9u$g5PW8h++r@p8euYZWE(avRvF7^2SYyw!KOaTDP(%_(m z3LG_qiJ+N$B$cBiFArwUPGGb2UU5mc(UN9uvcrYl2!8meM3(pGuL2*(#gm>JNVrQW zrp$eut4=?(_TTkNU2Ym-NyYzsjv?;t*)(n3(M+TqI2>4Pffn`teK%(*G{e_7$jfi5 z8yRsjk-GDD<@ED^*8Z2QBY`1*KsKG2c>7>Hk(0VC=CC@`xs~R5pz;pu@#$d2$`jv> zknh-M_^3GH%^O)bst{a>HxSB>QVjyhjM4~RNo2e)xDHVw_wW5$! z6l`QRDk{H`(RPaSiAW24;Ne)Gu^d=xW;%Ykql9A zv~r(ksLccJU)e6<#rGNCo0!P31R}%ygrN)?DEarmg@A@M;`uTq-^}V4<=FPo3XNN% z?W;>at=ZQBltVwR0EZcKJ$b8Gd3r^s$0wJclVsK>0bl4)%64_HO|?bnCydP8NevN@ zkP4)uUqS_%2@Vc!H0~{33~*Np>Sf#8+c~|@KQ6a>;fddy{B{f#%b{3CdT4D7sY!i- z+SIoh$r$y;0!92VZeZ9=+!V5|ZYguCY?m?HJ=$#gg%+oL*i;~2Jh8|)T#B&z8uKjG z4#8yF<|746Muqbxgq`1hxq7i&6E0x)xg7Zal~dwjK@bueNe8N-W zi^oH>8jOUf((CsalOP-fSgq(7imRO7C6|&- zq3}a2O*NKXvpTiGBdKkuOgy(|ZHB?Aqzwqx7 zjK`Oj4g^rNx_yl5f)PKM4;Vd=4VbD^Wt)z#`Z5M+~d^ zZKQ74whjX^j{PadPp8bG-3vVJr76kfPV-tLaiT*v+1it`W<1)pD;7 z4TA#i>^Mo=0dZi4i3~C%nB(DJtDdcM@U_BOmNHb#+_Z91-tVBMkTl@i#ZH-r)F9Q28ljBH;TVZlYSy(q8eC_?zmFb zkxMcU@7@Mq6T1VSDj(Fd`MLa4`xnKVjYEsRInYzgT#28V`&YQ==;$6O?p0b{t?LW0 zTV`x(I>Kr?Z&3-^4LF5|A?}qqaZ^D>d5j|7XMl)&n9P~a{8m+6dlc^QaR%yV3KZh_ z*-Ly|DFXSvxYDrY^lJqijV6yJ#>7)SBNaV|doxY0aq)zhucn?+k52a&|BM`P@NMTv zzS@G>9u(SN^*be^mc03^38SsS;op4j=s#*biT(b)xUPne`BSwsA|F{drPln3tNr-$ z4HPDW4_Bc0BKg#f-ICm}rlzI^r-7z4}MsC@j-+_l&Uf)X-n~&?r}DQi(&JTr=uc&?m-$~ zacg|~9&#f@8tGAA=YC)4^L)a?O^USf->W$D*EYo$9X?mvC0R;#ruIh-RtDAk-=dt+ z0(;mVg5lsfPlsfV`y*D7Iq;B6MqWs7B9ae_>n1u1(_zGmUSVogKTIA7+-Q|+Ftwjg z$?J6b3NmX|esm|LR=>HsD^M+XSE|>*JX@)2?oMjZ=7i*CqxDX~)vFo5??6EMGfbXq zAVtPpO;~rlcnC~@G3}~CcgMLxla-*~F5=!yWz-ssF?om5SF8*~9Sf9r(P`Y15{`}j z!?xC0j~3j7WVc;^N&y^M;e4Avb;T?E_umr4 z*nYRiQ)<}3eSnG7)U6scR2L%5WKDE?%bF$c2;l;Fm#P*Z^4TvBN($ryzI$JMI^P8j z91y_-h9=1rXoB^iGH)rvqz09i8ESBUcH6bJhe%4*!siOPrj?9u7QkE2?M+GK;|51{ zQdO~`#E9Rn!i(p`77}j%NV6w-v&cXo;&ZaZw*ODesN>bD7MGsnbF$b)p z%PnDkJrNZKOqE-U#*og#s~eGrNCX%Q2A920XSbs2;D(K15V$;b^j?fcb#FYWM`5Vn(GN#ul#D zO9;sQ9gl^Tlv{OWkkK#Pm#&E+&9S@`y_ctJP9p?pf^{}afz#Zo83^_+w$d+0})z~ zx|7sRzBTdBx53}7=S-m+(XILj?h8g&jnBuAZReGhJa?}4&*y!JYr;0qjo>ysTwHuB zCs%{)MHT%9yKKXo0VWDS%vXei z!V3v~b1T0b_9Y}TDox)hn_r{B=}lXE`*5wTA%H}yRn-|gnD2fa^2E7Q(^>09g9R;Bf z9JML8y8u!^t-pQ$?l2J@!xaqTr1;O&c^iu7w;==nsB%#m3`M1Iafzsu5-$|B-=7a< zsIXUkQHFh2h+5bQlaP6o$-XU#BXQ@k#xL3Uu78j2k%5j5iImsjSLL8!2%y{B`uh6z zq{Sr`CW^I&8=S4Pv$GRP;h_}Y(IBzKF)rtZ-gE*{vXOp9v%>}cL)VUp*Xo0RKu zT}fP`V=)6GjmBC(xt4&K@nIW^qvR7BUI=PJh?q?_iwNeDapmXHw3tNh)t7TkDdtYu zEh^RKDoon7m?9z~`D&$U0B8pPu-_b5_Q%)#)fGnEAAZ7D2qBlm*z;S4t)~Qd5wip* z-^VCQ!0P$_4vRyUPG7NuX`Id7&5&-gM)KA4-EXPdhrqfpeu3+|-d$DKvS`~_ zWP%T>4rkc`7kgOY1b?yLq1BiBZ%;7gwHyZxt@qoVmCj=oXxCUK_x5#OYxR}~42W3E z!M>tkBdWNP4-|AT*k>|M#@dfUSP7?Sx{*A_#M{IvwT07WNtpli54+hoIBr@g@cs8e zp+}Ngh;?@WxtEz!?4uM;+1b6?P^}f()V>qC=6V!OkaS%_n6uDbZ*j_soAVccHPE>~ zL=H5XQ(MfUr1To8MfXDUVczOPO5USlDwCQIjlXln?4|W^)3Y?%2Ep3?eH{r;F6F>; z`R-cdoANkrN^(7x4+6zxr0$!PvDV1uAH&&BsCK0CX34#j+;2l^f{%`mMd!|5sn=N* zPTM{hOjj5OhJ{JY*E{xyiz-v?&(*y|4}c}*bK>AbhWZ(sPM+pcMV;o^_!7`2U^^{s z-Ja;c>@|l*Hcvuy62YCCW*y$S2q|6;$v(+)fYvBp`+>HEUid*tj350@-cM|}vj0&S z0ChBtu5DRp|NIG{5v>0~j3TFn`I{0w@00SXsyBu{#GnhejpKoQjVxqdND&Ia5oDL& z;l7O@H)yTvn=Es?cPhGZN}0Cxy4*;yrh5Gv;r{lLiw_y=-nV`E*Y_7MSsizjE3?mO$n)rp0}aN^L{jusT$`8eLXk0LnmJr#El z$QLkjLZ%&`!3zo`7&wt%d5e3${$QwWY0mZ)rZrj3xBs}@f60HCg884%;e7si-{>c^ z4o4~t?_H(Rq1>WLz*Nd{}pIl$Lri-ky*h(O`Hw zY(l%06A6^?V447%?TUCuS64Erf8awWpdHK2hN(WJyz3t$Ik%YnHD)V@iM4`=|LC+4 z#1vHPwMq86Un@+<9iu)kkEwP2;}8I2CQUr3A`dy-XOG0tJ~T2=P-sNJ3aYg(%k1`F z_e7uNp-=>aGYyn!+^VcmHL$&ORPTtsbOef(4Z@mu%>_gxrt^bl;B^m-OR( z`}vcM(Rv}Z%bM&zO6N+4-to7!NXhG1ud_LlgW;@Oi@8~9I`7oKo1wH%Fcw-6xPf-? zEtAfM7uPHq!N0pXiWmvzbNN)6(V42=On|uzC1yt&#u8CfMnf}K z@sCJA3kE+tEGEI)NyN|v_x!G2^@rep9?baUrsCi4v={|KqlGLqHAsQv{|;hH{nMvZ zV&anMeT}ZCT6%fx1&WS$ve#5q4p6*RUjqa9-uXvB@Oxv?ePoqfj0oy}&><@-FE#8- zVO}l(%#ebD0_s!l2a!_UCQNK>Kz&m&P^hRxB_;-5UAZ*go%C^gKQwCHCcGgIzP1*M zNX%D!uY4iG;$!^-3!ci5%;yt-;{WaYfS);xZ-Wn`h;S>*h$+>rHt1Sw4>CC`AZA8I)6Fxkzi@0gqp&VKKBE1$ezh4o~ zfx#)X=^og!3CxZbgFPo$i4R>ib7}=l+9fNTM#eZY*!s@Uhb%Wl>80~)3mbTh8}c4x zmP9IyBkdY6P$D>=t9xt;er*60TBKv7nh(qSE_?d;!RTx>BGcRf4$wioHRh-x*{#bC zBBQkeC3Hs>8f@0nZhtgR!sKzqpj`&xOF~BqD4x+XFg@{kfF;Tbtio5fJXgnD%(0(F z9;x}0=-jX{(>lV*OclcG_w5cS-P-Su1+YVd5oEBVqLRK*mJYTBRlYFkZoSx_9j^NF zY3l1cfE`4M0OcycdC_ySSRjk4Z#l%(_NY9VAH*LaF5-g>9U`>o!;@ZYZ(+@1P42;J zi<3NApq=fd8%-mMBfbPdvrf{OPUJYW=l;R`b>4nz&&745Mgmry2ATz97lXXe2av|K zsU=i=iR##Zk7a|nhE}Iv)Q>Z%faUGd1&@vK-mK)j`!7%xsQ)Kug1>ET`Ya{U(~r)= z{#K=c2&_{>bpE?p6x1}w{`3x(s&)Ve3q6zdpzD>TJ5^B2*7T#=t!iPIDTF}OynOv+FcCZKr^RecZjVAhpst0?7K?iM)C$5g_@?e!PMgtH1c{hUd+a?@|5-3T6hoD>z^ zxmGXE>C>yPvTI_7f6i5|yBXxa4FGB7SWs%}>b$Y*&0Ti39F}lBl+k8`d^_*>aJ8kO zgVihnz?W_6aCD_dg(RP!?_mHCGpra8lGKh*ACY%}6 zLH1mG*AJj#-*!y09WS!><1iC-I6zCg( zIr2+;UQzzh|D-g$L8asUoJrw{i`z{R%%n@^rWk?XPj(pD>tEXrwwU4kAUdG3*XZ{) zs;J*}V&s~98P0@XaNB)TWxcpCMj~#MR;X5L091LGhwIJxiPJ*=mr7Y5dAM~*_I@*p zKpAOt4Txf^4Qk*t}s)Tn-f`GtN*a`gvP`F@8O#(Hp$%T za%`+&4s-`}c^Ji#|-ByQIEdGjM_}%w7?rk6A1A~!6#aa>oXH-P_y$AJ|dQFRp*0-epu#EULKDUXp zzG3Jia5Sl3d#7hstjmMVzDN?@-B2xJqexE|jI3)wt6)&6X|wkM<|f<~{}w%+z($4!%6v8fT~#Qw4bcs)Ej#t730QP`-(Z8Lq+VmA_rQo z{o!iVYX64=Em|?rq@P6m(!n7yk{^^c3!@cH-m3rOn_pmSNZT^gR03^qeX;wh?bVvZ z++x{lplaFVk9{*6QY`n-@Tj&;U_MtKM+l(4(xIUIf9v}vV>4UwRVbJqUxVk3A z`vwNb0}8}&bKnPPJe^Y?j(0(iTt2U_jI1**0)j^FQIB^TUt({u=q1pw)S1`NO7+5O zwvF+>9_gcJ8L9=>p{?v-ra|AyC8p9lf&pw^lC3Y|O25Kp3kV(`^0;00iqLV}p~g_5 zz1|OJ5IlqXcjCYNa?5#;KdUpAS;zZ!do*3p^K|1+MX(*Qut|nFvMP(m-GCWKu@;(B zz_;$K=x!`H=u8^@zJ(YUt2@+BZ$rrhh-BlLM1b2U`YPxN1M|&xM)NS5A0OQ3YHiyi zZwNJ}%@!NUjFQM-Z6?Sn4VO8oaHlep@VK^GdPbxRVpuPJ%-4B?98E{i9Htg8E?l8M zvS+M*+CGTj%;@GN=s*NH$j)?(nNh?!4X?=2`$B|?y%uqrP)hwUCPB(@1C8Vv@pm2k zC_(o$M`eIXLfL;%e7=uxcckn1tF9FO{UZ~bnYC=xMde(xgpN?hhl7yr&Q?Ch zqv@!>`|zjbsHRQ5wxWuaKlLDWFcsA2PUi+T!)3cqZvlV93b>uI=5S%*lC!a~CGt9g z_0JD;O*2%hg9C%BXA?3?3ylLn8L*FgO; zk17XpIy5jPY;TW=v=Cpxl==0FwkWnoco?kED!{a+uW#t?g6SqTchcrf1x_Y}Q^uLNDYhGIaaj*INd^lz^`21obzd>yLe}^Jh`_ z)2?%ZC5Dg+kH246Dz<~C3pQ}d#+Jo_n^VhTcxUxyFP{4^k#nW`$LQiPU%ocGT2CO~ zo%)J}Xtnro!xpfr{E}i8Q5sh9D#X^&LbY>u@Vt}yM{>JKTn62on@E}rwgk5}GynC9 z`&1pv!v6haiB1S)(TmvE*VpP$PP{XQsSgtlTF>LyKg08_9f{d&ksyr{Yn6g+_7@@} zEVJPy!JdjhSgFDK;>%^jJm}vjjuzr#@hDt4rj?qJc3h-cj}R#G(zhFlx&l>SMiFos zl!cX*aTt{IeSqSXOuDV$HFb=_ASFflnm4sOFIgNDK09ZjJ)$Av*D~Fo1i!zK17e_(h94Gmm<<3O2xbj;-vVRWg4+Ux|rN5zkXV#M2=_XpA2PMmL zwuXSui3vdZn>=s5dIx$B505hAK0J@JVX4gP??Rw&Ftmg9hY?e?qiVeRm?Dkc6LmO(cQQB78InPNgZ&;y(Nh@ya@7 z1SJPIrXR&o8@DTm47Tn1h5)MjzNfZq{d#;F;3%`9pU@kBlD_ryNC#$a#XqfCr{3X3 zwZ){Qs%m_OCkSH;MCr*Vh67I)rVHhFwEKB(W4`-npfRr2eR7JjOK9gp*rM_6l|CHe z_2a54lMD{!dn$1e;gvAHGEJkI_pXu5ma(PlGDw>$L?7jX8ekZily~+ z|K;`oYHDiO-@kuPHG4MPiavBh!u$&C$N=+BeY7iV0c4EOGhp5MRybHPjJHYY~WbX4r!;aD#>R(sekzk+5P zUD?~(+7t^_-$2f&sbHQWjEaGw_ejtJPhPnC{dyf?jn5M;e(OZS8=&@@MOYHlJnQ}_ z*FM9xHCzCH<7kbN(086UE3VX0aH@9PH(XgZ%@ml@++kUF#`<-Nl}WvfLNDTXPtPx) zmfM_dDK#E<5hJ|1HH~nz3JS_XY|A;STeI?`__geisdO3TpO1~Ol#74n^*pU6?%(zg zG7Sn=CVfumB3}r%6jQUsG5nPHcFXE?l;wk9Rq>Nb1V_Ticyp;BA$NH%#{zU=KAMY$ z$D$j$wPl6`BjiL$Wv|`rK^R8FDQag|L3u8rBuuYI{#E-e;e(f;B2F_I9bE|1@~@yi z7uOR}n!H-)R%Hhxg0aWL>QoA(o<9Q;Cpw-G{vXSn{r?iD zsGV`Gh57A2_cXM$1urAvD5M}W)rJmrUWi;UVNMR#?;DKG+L**#qdf!)-VXX|;&=bOZOy{) zf9aUNBwh*oJe?7x%OGg8)m~{Jpoy1&HncfpwLN23h~zDt1S^NENFQmU`*`n5d4Ldp#MRN@Otm<1@sp^SO~Py z?x(R8e_ZlLP_5GaFj$Gn&W_ZZM>V7;=6CdWYFd`h;;H2*d^0tc04GOr`-6uSW&33L zH$)7gnbm+|A;W11Uq(JjFe7S1yFZANamBy2=}-7arcfeIWaoo9dgU+$p?e&lxbwcc zu?~nx`<2P!^?km;hHjugRUV)0U@Y@jgqn)`)o>R3?KVNsUrVKOpH)1r?eg+Hi%!#x z9aE$+e5!xRWVI)IsK<%^pC7C^Ik2)K(KK`<-?OMBG2sIJd_(%}EEzPz7G+b5L&EDd zu*WR{1mfgSi?{c8e}CLsP^UpF`yl_f^}dAFg(i32+*?z`h_tpJXWAU4YNU8FfY){4 zpuynf_am0t^={OQ7=yj_LD|`8DNuW3LeC5X7fz`7`LK&2Gc(KHbaRbFJvIK~6HVl& ze9eqj=&jSEZ;9L+FZjpmq0N;Gd{VU$Inu)3OGHv20s0+KO6Vx69;RlcgzP3i&Bwu@ z3koWRA_O!d3Lv^$?oLAV1y&SNefwuI9KmYed+cS9|K!k_DK`*t_=ws1$3{l_K*J*7 zfPs}jLw%j8l8KOZwcGH3Y4nuMa0)ZCQA)kNa+zJSW4N-tT!!JF@!#4~+sVt>PXoKN zJ{yhM{NwK+gy_y>%iHCnW%E|yDH{qUgjmtZRKRct^J&Z+*!v|121U-WZ#K$CFZ`fF zB)Y0FT7Ko}5xF1Nd){7L9e0zX?Td(K=Lve=d_Lb92VJ-r{$bymJon-zaT2@5G4+GG zy1k~VU#HkAzlYF-goKDyn)Lsq>pd*BZgAXO&Oh*PF4zak1r>8aG^D&Vq!Y1dQDK?y5>ht>_uC>fM9J?&7#qU`D%>uNXStdr= zdKGtKYrYn^cZU*$szA}MG%(_>udxVC!&rzYdz-UtQ_l@2C6Pt}l}Wdf6-UgvS?LJ6 zuY69YiHq8ZwQMHJ*YOoQKE;XB54cvyh|0xy7A-(V)orRx-y7pr^ zDpwP&fFOLT$~Y3f=__*y(M4`z@p(%p?x6*{ke=D7D;M?mP5NzS2-5j%S zw-MF{ExYj#A_K9F-v#xe}%5{mGslv!CedQ^zhRa^NIefKp!Wj)C;lT#1m7K0H1|I7h8HxEP zkq!3t@~}IUko`o*dUv9DYo?kJ0hPc91^?vTRW_afVy`wPOUo(N$lD6a4O^QCWGNh< zqCJvI!{-?T^nZ=@8=bDc@5a^{Au*_&*~*Ir2IM-nCT zt(Gs9nbeuyT4ft8?ei3ttrhlzE<=KXT1RqZDf=pxn*swv%go0aPzhLn4Ut*A+xL|n zK56s~d0?QO^wqy_NG5G}V4hsGCPKx)=nll9R%~$EhZ)zYvwNjkW#)@W?t$rkc_3k8 zvLUnp`8r(zzmpN55ij1ILMAK(o4%fJYM4Xj zM$sv@zN~R^p8KrKq=rYtkw1qd)%m^Oymfdq;b>$`q0IhJ1ag+j=ge$iXgEI-64*l* z!GD4@GBQ%;{pcmOqt_VyeNUTDlM@WDqJp-qgzYlTbaYbjJfg)Wmn9iClp~wa(j*se ze06(k*q_V^5B?Ds=O2R4VsO0DIo0AV^!45B;zO8Tr3uvsBc}4h14`< zI1paq514R3g=Ko&$OF3Xv-SrY*+uK->#n0LgrLAV5lpy0 z$($&Ig11Hb0`Xo=gj_L)qBwQ0N`B%)SBFVXuD5jq@3=Zas$J_r>eti9(=|#FjO`(NjlWdR zWpjD3EnhG7Ot)Z`L4S_~G1$x^?a!mAUv@*kr(I(9X%Ql05Q_K04A^i43oG#en-f42 zT*jxPe!c&$L+%kLcqOf03@E;xvMfz&@w(#T2PZ>f7|UzFW4JwUswmGnr2#>7AVlUa z^C&;c@jU=xb!D8G+iOCgeKBogtl-nuR5^8KX6D1OU{X@jRHH_^;V8s%7L>$pN<~2d z<$kf(I#*|3ZoMd|V~($EQi4LNHRjKB9339Tfp&Cy45EO#jac($%*wsiMi{~0P5*B= zE$}2nkN)rUKN7C@!&(e-lW%CnFH)#Ff3Pb1Yh*rE1*!3#&$T${?Mla#K~!%m?1rq* z_!4=&aY@iGQPn-JmID$6+-tPlu(0X?eRp-UTZ&fLvbRfqv<})ox~L$W$f~uk*Ul#= zHgrP$1Z4Svo;CSfBP8>Qq5_LSfJd$5By7NT7xMiTp z)*am$7b3{BfBs@61JplCpG3!9+l`d+=7MJFEA-q@j>%_5%#C|%96#9mWjp%%F`5&& z3MNWwwbm&a6dS?i`q>*Vz)}L>!9}Wtvu@Z}b+feT9tP4nN;p_to-b++cwh?04WuJh zRXPa{P2t)9jmMhKIW9!Z_0Ocb=A{H-O9|NZ{iUtF0s6PMf(`YZYnwJi1xSt z`j3xOjfzJ|%kc0HS_!$6{~WX#l={@Qv^1kZN2-p@?B8yq?9mhb{i+MtT&eLA7dLS|YDH8kO?wbi1K;eHPgwWsgk7<#eU9Q8i_uHY6^Rx9lgd4_ zN0+-Zl7oVc{ct@s1pw6Q)$!_7jU{oK>joj$Yx{_5A=0(eZcF5PT|PwPUXNkPL7M-J zRA&8mTJ_d9T`wfW=k4xfvCV+!WJoAd=k01hrpoF}&!1jj@JXmLgCJAIcf-w6!@XJi zsMP3{n&v{)Vo^ZR&rd`I_Iy}gUf!C8lbFEsjpA@>SuNJ0AE2==EoIkR5#UBsoulk#|@`CY#qRL7D^yvOH2f{sstu z^_l44wES%duc^kFz=+6_gfm9{vV1{zhX)DZzO z9OsO;a`D3m@F)OKZs$AePaaMCDG`EKYqyTPvbu^^;C<@!wq&tBq(*L67_SrN@H4|x zPpA5Q6nDA}8h!~)5@|O_K|w)aL_{}$***Y)%QWZ=&i|Oxt9L+)1Oo_iWF?$(&s(QU zL{4GR6*Riwmv4wVMU|8*S8=qGb2CJ*kvuL(bpgq>aeIs|MU~9iClB0I+>X%kpW`$6 z|8V0=K3@69=e zx>_)QJXmnlS_IVaDv&gGT0&G*3c&W`KlQ%?Fo@avY>!Vk=VWBWc3)ScRDLfI|EPki zudlCOX&W%D#NSq|1t~M=M1~RuxPyN6gQLGLP*~Yqjy^xhqxoZ0+p7-v*cZ%UyquXl zIHo^;eOyqlH$ee19{I=&O+zCO*3LeHWtb2DKl|57{|#QfRdlGr)2!L6H`eo>-^#kb zl?s3+1Q?JG7Y8?HNN#9nZAKGCFcn7_pK88KxrQ+bw-+Icf^J|{6$j+vV5&Sz>lWY| z*dd*Mz)tB8{S*P6Uzv@2^w!i+glr z>i~G?s}>Uhcb-BZh;VQ}ZCAVURSNN%uU1gF@^P9dPv0@2D{j2U$ zT4CcS9Qgf|$<{TsfF#n+Ra6pgOyYN6uO@HL_NFU)Fgl=r?XPj{33wn^bo@Y+lxaxN zUFzQ0cugg6kF;3yjLU(C@z4Hsz`s^8-+?I9YbW^m_*vp!@r`z4NJND9FWK>C*u@~@ zie=I*4HbxoCUGM|tZ5sXyaAqi1d#i7lghd#F081$ouLfaB2~s3t9h{den++z68f1~ z@lM=NF!D;>5S;lPY#>~jmfNav8o9p+9?Z$Gy=t#_+*QnZkNe5(C6;SN z{2MJ%C7ivvx=)ugd>7YCSOF(Hzaiso!Rzdfg?lb9q;p^b>JdFObAB zsy)okTD~K0Y-)Ov_gu82YBf3{l{cJAhnr|#YLa>|a4s6+MK?}b(2Q45M}J`?D#*o% z;klPd`5h!UA%;^Zh#{VixM$%rdkL%NSh!fDLF#d_KmdqLv^u8%E5{)IAe!LXnE0^G z#XG3U7^~!H{pB`)v*ApC`lg`3V85q+t##9RJY{vuwLX4@y&Wa;oMXING6MIW)7jP# zDhh4HJHGI4*Ck&>3M3f$bV0O)K4T{mu~b24tZhO<%&SH=I7Em4^mp*P|25!*ZEPSi znd<9HP41>bqgAmOK2;3A9HElx&jHSZzTm#Eu{J|$Lm&K~eRRP#wb}$+#+2BlDeS0R zUq)z9NqNU&7sSOSey3PB2Z?+`*w%IKelT=#?Cp*;CNqoHa|(F*^oqeAM3Rz}C&vrD6Yog&xz)^F857L#7QSEqxIg{et(qep%6 zr9zK1^^gLLhIZ(IHYHn=>K<;FJra4nT7&nG!&y>>BiS;!XRoOkdSA<@2Fj(pqhw=K znygPRoeh0m%}8DEL4ZT1mdJvhhhqHAgY7ye@8}{GH&DoG;Ab7}?tBAe8p~l*QQYSB z^T^>=>6PwtPi0FlmeJY#;C%PZEiApSS?bTs#d4zZbef z69-xaO_CiGD})6b3wI7kkfWn^j9p!b<_DFp+GhwrVR0zc!B#hVF=@5fF8c{@`RaG2 zNjD`IH)Q{l(dJZtxKfdHW?+a~%+XO~5PT6P>aPZJ8_T%x^5|jd}9?S&|1&5{gbq*dX7qz`uqq1vX0EqP%G66S& zkC%IOr&o5X^6GE+=dvkMnc>$(VUKQ(x|Nt4i>7URK37O|{iq^A;^!N0=U(2#zfPN` z|L^(l-~Nm4dx^E7y}eJSP*Mqdd!=(Dw&$tG`Kkr{sqzV0H&{tB@voTfH)y}k)epu# z05w>$FaC|(ww$w2375Jxa>cJzj=_C!j}c~2#3k}T2lRk zqx69d!4`Rn*Nvqnct*Ltp-NMQ@87>CPNWCs*KUm!#85hN9rAu3eIZlU6HR$83)9dZ zgnl{M{ik->M2hm8XQeTD$@~Wpot=*|7tE3kuGP148jaz)O1z9u&q&!z`_B!~TeE76 zo;zb}F>0k3D2Npj!kmqpjAHJq(+i|nTbpQVlq|KFxVQjWQ)r$uG6yMTNhZxanUVh~ z4;_TTWwK;`)OSd^El(sKMXrw@JGw2pSrc|NP^%AE0;?k}{XO>!-JB%*4Yfw}(ROmN zKbTS`+2dp_Bz*_xIW|v%(qBKPOvcyF@j}LQ1?faAFqjbJY@yDF5b%z<%_m@%nvoA5 zoJ+V6)AJI^&u1)@M7tr*ToV*UEtNcx5}3~&92CS>bipOG=LaTweC5Bw#5L(VP`qon zR|frLM`yn}3`@%R9ziFF4*6<*XjpXIh8x>7}S9K71(5G?jw#X6jy zAFoW++2u7voPPwnf5gv3CFadx}CP!>JUM&lB41 ze()$mRbM{YCj*vz3O3j)KeYBNgP9OT&y95e=eC+)9k<2k9MAn+04#w8h-Q0yI!0^G zkpL*KY<54q#!~Ol$O-+w0F4g*+ay+ofj_TvvfSVNHIL|%0&-5dY8wqC9w#4XlxkbH z5nVOmX2@W|Bc!LNSCn%>=CGW>0obX%w;@%gfqXR0pLC(cvK!~ow@Zpp2Z4+vD&wE4 z0}0N|`1mKn*m*mL{nmG*oLFLraRma7hNbQ_{@eW||9{UmP%bSQM@C5zgg(-Wi?5M` zdJ9cZIZo5~6-n2l1|Qv8-Dly4)~{^`(d8}#hSnlH!b8t1pbipqnE7y8OeBr~@jw$8 z8p=_05mcFQw7>DAOx>v6Efxn1Zl!wR;yIP&;$=f#xf%&Q@Jc&??x+IeITIEMpG$I3 z#+P(!dD&Y#sz@_+j6#*JvIm{x?JE4^ujv64K~yC23HtYe!KflW2?_nN6MYFRQZ6pF zPi6SMA3$OR<9ZFQ7$fYJlt^h~LVoswH%gpn zsxlou2XBsB5&{xQ0~|(5Ef~3ZINtyFxPQX~3qKyu50Cr27`G&F+g&4(Tx`0xP-ey%yiSLx+u%1Ddp zU|R0kE2^7EohG;OJtV8;-Q5t^(+$Fz)vKhC9$WJz?$iey6^Y1n{H_QWlFow&C#bupW+jRN#CJ4ZxpCS;(i_}M}*@Nflj3_aY zfWvGE>T=$hysfRxW^0I&=GCht(qYzMgS)Od|GvpKlS+bxJerTnxY0Bjvb#4^Wo9s$ z)M4{iQa3@U7_HP8907gnZ~2h_HdQ10(VyQ=P zN53EC;7*kXROdJU7)k1bZz|k2SBcZ*TSBPBQ!g_qd=5YIznFaf^iiBzVyQi~*xHZr2P zKoEtro%+dWM=c2Jay>v zyDxD~b>E>h-#Jyz-aa+%wkC>G0H-Vc#>K}EkcoLssQP%ZKWjEuYnyf`WV7_Nou7e> z0vX@108G4_Yth3{-BSje&Gq0t|FJZp8Tchb0xO}UlCsOJ5$gUZmRj_|=Tp^za~B3H z*)x8>Nc!AdGGdG+k;>;Uea4ArPD4M-*b~OLcIO&})dPYJ_eJ=T$ij=h)xEFUTA%7STz0f9kb(J+%m4jrybDKfQ7Qr1Tc6wg{6>{n_Q$ zO4Grv-!ZiFX&IW;=4P`s#ro%Qi#4CoB2vOg8esh>2qr?HfHD^+@xd#DTvA}PdyiXO z0t7ap;^K<4e*GWO`Ot>;Um!dNG~I@WgBNDFA5y=_+5#Q(#SM%#lqnA50T)>b{numJE%gK_lT- zw1Q}b5pjN8Z1$vHfB-k_OqQk#-k*&IUR*o$OIki!mNFOXs0eyfWHz1fjiS=Gt`GI= zXfm?37I&NcspiARL=0W@hK7QIDuW&Ddb)O0wSE(uY4L84DO3~U*gINQA=}Q+?jd)Y^>&Qy6q ztcV}Q$J`e^PWzP(Ur<=jR+>h*oo!{{z0q7N(C3zM+ek8XSdUZN@kJz4q{9hTPwx!D zmny2Ex%OIIYjEh~0|MCKDeTVpEO-@e-)=zVWl?(V#{py=p^?KpTue14<@>DhPc<#45bffUfU zJ%*_Fb*KQI}f<87j(W^ zDR!RZ)J6pH2+Gj%u$Hy{^r^vg@!apJqx>YaCBvRb?ml2 z-j183F$nJa?^UPm)oP)gb@)TcCg;P2rtvcU_WVouNaw`d0$4=!eB-`&^NFIQH1`9Z z25O1^X3yKPazm+Vt9ebG2B-0^Fk;8MD_dD}d}eL+{h8{@>s@lJVX z`E?tG!g{Jq|C?kOQO-z?>~084a~WT_gpGE1vX}@wl}=+I-d-W6f3eo0IrzSz24EW$`y{P6A-L|1E+?yOT;nY_W8McJ#*zl zQU5=Yez}BEUcz3>c0AQ~=gvfI`jTVrY9-nlvk>cq7-%FY9*3PV`lm>l)V2?sS2CDs zbUhubvp0S9>XpAvJ8R}C_Sw?HK4-1-ZT?wX5(&B(2vshXS3&QwOs?UAtcvernrgWR z{dm5%ZbW#K3P`_a&8y4KDnT|xP&@C1!XMNINxKuy48v~0&-Czs#h+jPb-B-b##f8D zBh7(MuG>*jV4bGSV4M%pLYSduEEFwtiLv?MV(VbH#Q-ulX&@?;gRoy^E)WZQ^!4;8 z-d^mVPurBFsC8lexW>BqSIb4s0nKueb!nSqmpZ6i}3yHXM&Fg zqJA~|Q(1AlHCstZD0|_trf-tH(wUp{gDWaLzk)(A^V&0hxMSqE7heYGWSNhDvA(-I zJvzYaf_d^dEOP_wli@ur*e`d(*icuaii+-|sUR{d&C5;Wm12zk4mW1Bpk*ivZd9>b zbkYdT7GB4ld@YC-k&u_im>W!w*3+1B^_Nk}0Cds{zV~xa4YGJ94Jw(N^#na-fP}iUcuau{ zxn=Y$%pX5y(wg7f)cpLyK)^2`&0(U*6-GQGcA8F@r>VkH#-p)dV?SA=G+!ThRIB~U zyZEE=4nu?elk=_#pP?cXESI9#-y4^ZC(Dlw&5wPHLA_yP}_$DF6RuLV`~$VlfeM0Spc*I8DY?J z)#~X3h^ae|_jj{`{oc3iuKWl2=N;)N{-P&0cgS#lV71DM4FOKc{gT?b19jU$awO@w ziH=$v!me^i^G)y7^Z^ZEps-h$Fv(M`$baFV{ezEOuhRL@r!9~CSRz|t-yD~7- zD>JgOxd(L)`uayZYt`Wr)*HG-nbAKawu0>I-HN`f}UfU5-1H>YdjJB zCxHjGtKs%H3-+X`mAw@a6I= zjHCiLt#p4KNcz`-E8xQLu_9H=li_sl=3V}D7EUSwtEOem{&ctW_(pCKe-xTKTkV%n zyF5S8EoW-j8Jesbk0tB0OY+ZPBDorm+E4&IP8RZRo>w|40#sG+@=0H?$A#7^7a8c-W;}|g?wK4#% zUhLtx?OW!)*G7#3(2&z~yO%_7)1lt`jdty=UzU`0pfJOe)jX{r?x!o(cykkE=VJd8 z`u*MMy#x%j#k=I{6Lq| z2%!h=6#=LYh$3A!zOIXieBP&*wDLv-%)LOyXYQ7^=rXDnUG*K-9d{9DB}!{Pw!bUB z-f*we9>~Aw6k_j>M1K9s{9@I)U^}N8hz7NX$3gZOo2U&N?z3aCwY`f9+jx;{pPx=c zXjS0%|L}?WFKbBDZ4wRAf(V|Bm$nExHpe;k#WQ5!o|27|-t#e1vupVZE9QPVnZU$^ zM{if0iCWdHx;qWLBzkKU_@tSR1))|Z0haFwa02tArB(o0CZFC|ditKC+x_|E(Z}fuA1O@WpACC=NfNK#;qtu@^C?c0@;GPl8q zdkivB|`A94xuT$n$AXK!MaWL&9?`94OvUhO>XBSe()#{XBL-p z_6o|Cds9t%(+{KF9@H0reG(|O9F`+Uam+d+2i&$9n(KDv>X76=kzbr+`TN%$c48cb z7|xfXNOY43qxhfpzpecl0g&=Xl)$yeN6QMIvYBKVbf?d-n~sit?08wS$1y2=@D+~i zM-q-D1ZDhTD&1hZrenAVSRqy%;K-0K$@R-1Vh%tnJ!QY;Y>mnj800CCbDEFQ6%hf& zYAlturlh%j#6KPmoa|O}ljV84hBAagx(2@m-lRa6z zyd3v*fl{SgEScXd5W2JJmL()iVNSS^;Z57kge=ZU=rOsy?`JNi&l{!p_Tln@;=6_w z$sy~#U);C1y_|QJ%E9otI-bz7F7Ud)@ph%5wHw?#y+2;;48|Q*5W3F}VXmhu(rgEz z#Z2zruU>-m&ALJf>jn~Era%ry)E2E{TI&kf`ZqE1ZGZG8-=1-g7if$haI>xF67!lJ zpJHs?tx=)2OZZa$-bL9u8h*)BU-G#XMFl+et1U|AiQG_-Jco2oTyLBhi?qLL%cXAL z$j5lmj8AnXu5x_{$&Y91XuGqzo4Cvr=|Vp-H?v@B>NdFf+SYIssPdH}V_8bK8H zP;d6AD`|Of`@tPmNeRCe+P%uNdI^t=GXz#CjE#zB}krWb`{anN?r3 zTq<#Cct(0gG6W30Z&N1;Q~dL3J2w>{t*!T7g3QYxCw_-N?(6E^hP@u_a@M1TyFA% z^A5?u^_+~1jI)d}BHR?O2|yV!8qMAhk|^2$PM8n<6j64A4zzT?JQ$Z{Y3hjl8XHQ$ zwo=p`9TRij%UJqdrS!{auBm|2q>gieQkJCtILhQIdqU5utyDFw9Wy2>06{>$zeAl3 zbicb>5yJTa1$B3~>ISJZ`c82aS9L<4eh)_-c`%unyp(*mDGHsy{pKff@2^E6(oa{mJ@pTt+7yNJmGAcO=Yywqg8Oqp7+=zlTvaLo7q?*V2eLNW!7Eb*afMdolTE z$?q(a0ha>uL3oeXX2}QmKiC%*afbBOqI#WOPCSdA*TgCyHAc6Fv)aMe*PH3-$G6$p zGy;!zr~2c_lLa428+|dgR#t?EIM$u&I4ZpHn;!lMm=9-X%tvLGSYM*=xa-*SpdBy& zq_gKnwVZXN3sA$2TXW^Wc6~DXdxYrhc z!aD5r6HW#$|5x;(HjAXAHWp=lT|Xvg7io{5(9q1+6KfZmLNGfw7YyLLQ+Lng)0F(6;O$;$cQ8In2`;1RTJ6N% zbme(FhEVEp;^_8R*#A*=l~GZBUwZ%%X;BbSI;6WBN$DIqMWnkMK|+u&=?3ZUk`g4O zyQE_ny7Rp={Qe)_wREX#vApM=v-cDGoVySA(vOr7UKgH4>fmTsl)~d|0CzsuX_(03 zP7N)VjUH>{*SmMSTXJe?!RdOU9^`fPpzyL`15r8h=f|+7uS{pns7}s*ezTw%(Q7wBT}0Z7r=?G<)3V&redZg1M}h3rT#hhmPl%TMqr7V!rw0t_M2W0i3`X z5GK~H7`J7BhcP8|*Z!$Q#;8?A+3Q?qHJhDi;B)o8_pk7Sm-F5X>oh^MFJRv@&3Dx# z6SVc!r4ELZvLmch=7|Pg{ER2^;fy1)ON?)l&!k&oH8_azcNp?dZ#A3NYV z5crq_zD1&e@53mU>tlHTO%%F1>Xier<6&`YxVUgem!{F+cl#w1nHE7jfFOp=d&-tR zNyxkDDHfp_Y|MW+PN9gIyPv{s4w^4(7W zd>Z=`Ut*z1Sg;N)P5)gt$Xge(LQSsF-BF)C`_`CXoOppcmDFEqOJ{>lJACitCva&Aox z2XerQ_fMnoe0fvM_tfv+?d~@p)RC|9O7kbsN+}GBi4USZl@FxEgf1!!7+lrQ)mf3& z^WQ6!m1xz*NG>c$&+2CY;=b09^rvdlEN@Fc^`C(oD;PRrtbXHzO}4a3JY7~oPpG`X z{gUT2#`R7?;kW!o4V8UvTsZ=M5!K)4iCrsE%Ori?N+9Je7p;d)hqK+ujUzXPa&%H5 z=t86F-OWWk|I_>5cNfd$9%s9SK%^K=!x~HjZ|C~k7{K>5nBQ6W%}?#Pq)D8Jq6a4ct-IW9UNYqm3xc{C7z z>F-NzSb#reeU1Wq2bIF7?RV;H)i0^v)yGyj=ncgyiR3(WnZ_phs|MZ0i%;6vz$7MB zXw+kpPdTaEa6V`SsMr!Q!~n*d0J`r*eDSsW_X~khuZcs06Og#2)x>Z4T}oi3r{bn9 za>1_R?+h85FA^_+xK<_5+VzrWFZG7F>rI}%Xr@Suh0Jj%hdt%oz&`9CIpF60%HLP%AiGHWa&WP! zQ1)%$V5Wb^f^8C#AqfC0-%ev)dO=aafudxK?ptXty&`cXdd=!dNlB&x>Q$el&mhyx ztF8Dgtt#zM>G-aHCPyuFuQ|Xp9a(>jZ6@R8Kl;*?x%SfIax@xL#g4CxoG+i7cSX)S zdX<_#6+PKvH-a&IH~Ic80&HZ(tE7d;K`*Jf4CwC?7y`Kuk28!5Y|NHr$`zY6!tx_j zYh_GuF`mw%p>*>C)FW^gr;s{WQL_&q8AB-wX`A3t_e&Qk5nLem6r~~vc_Bxv#=ph$ z9t!0QA|k}aZ&8!;1#A*O3vlRm+3x1P0r$@n?J$Gs3{>*}2*##~qU}^WFGCX3R=ju^ zVo6|3BJ%wsoW=W0=W5a80YW>#j(Kq3>7yF!(49O%LDW9JMQZZ2bDbYm2DXl` zdt#koVMt=WbURtjWxL<#`*7droa-HY#tAjf0{}Sq?*@KSDL00X=pnr5-jGaJD_86_+4*Tsx5(z7bX1b=%eD&b+*f8@$?$$XKpewp-oOZFGiP8QBiS9BWKpIpQx36vd4suzrVnM zn7gJ5Kk?5OwF<5dH~K)Zs@MnB|kQ8H&RtC=*bpM=qg;2vZ2`WOYX^ufM4&$(Em+y*uMd$<^R^{8a~bkJ-Tc(05T}QTlZKKiO*$L-WjO7yim0O=H04+v7G}lWcTuD z%~Vi7PX-T|y7og9M1bUyS`?EmN{=a|KOX*C`t|vSvvX7`@6l^iWfI_pXVu6_; zjy_u;?snD6b4{r+rz_f~CGNU}%UjRBm2EpGzG^v1ib&_ldlJcSA?AJ+-wU0xJn$+r zAt^(v_7}^O!CWU{g8|9!M?UMWB$x1TVOIU@LGyZHwimKUzOzSB;7~M%Y%+OsU3_{u zlQOxzy4!z#J%fg_&JL`Tt#{MtSTc~M>PM?RjHRfgLe{fYJ^Rl>$Q(BZug15M0a>jE zXb0;LUvJ+%$LPnn zB~?^f2N#>0hbmZJ!3!XU@K6jHN<|GPJlWr)oY&Ge;vYlvh{Ff*AE0>PU@2@Fb(C^ozL06 zTj1}=ZE9XY<>9F4jmfVCpLhNwg~h97J{PmciTY;`8M^3N#GvL)%iD0lzow+8hghN; z!^=jXM`mqM-BBnUv%NX5wINTFt18-!^L%PCUr-I^%KK4O-TIN5Fv?eA^=?`rjZY$z z&d)72Ik{+KAaR}uiFI?)b@^_*cfQWLSjhWYoEP)BI7)#eYpz%fo$-fDMt?k`wQNMA ztnid~ShOTHQt; zsM(Mji=tzy`b?Aw;ib#RXn%gvzo?ffl2aOtU4BDDZwcucBi3TYaP@I8YCXCYZ#~_n z0hg*t`b0<}lm1zAG2h**XDHRmk;IgRAcPnIu~W^D_%X^nna}6;GQ$UOlKNo|Z$tpm z$yunOg&ol_T8B}+bg6_ba8^VZM3y*Ut`pJHxn>XfjT7sjoYgQk*0gM>MG7BK&*OlM zlesX{sHG)BYi{M}+QDqZLxT%yT^tu5`fGBf;zKu17upX-B*6WtOKA9?=n4JCF}k8e zr|#rn9UK8$ZlMJusq51n05HB^7c*+k&dw%W*z?RZ1o|dG&x*l0+D+BI`15Qn_vZy~ z_%}=dd@L5QNr(*`FnY~rM=ADa3-6Cf9=an;!-GWP9+{~-%3|{VZef2>5gPMCbY~|; zN5<14b?I56kyd0gitBVJFLtqH{PFRXqw6OOzm}e;I4C-e;JBsM&{&>qvDs*L!X&VI zGg!fPxD1*~ux(Y7GsG``u);GTmj0VwSUET79GanquEXups4aFq%Z*Dd-9?gG#@u!vEpKo1EReDw_Q4ju2lB{~hRr87 z{BDQPgS=Rcf`an!55b=?Eg(I?Qa`P}b>b9aliIRSA_q)iRbT?BIOYLb9lyW3skL1e zYBnZSsI{6^afVFQmMk$hpF_I;d~X-X$Gfy8lMWJXs=b-qJuNS`8i-DVj{mY(+$jzh zuB2r`Aq>h2kW$z#jbEN2f>DhK?juOf6a*G8fNTsxSbZjS=-LP)Qi{WY)GmifvsKB9pAd9b5tkf;N{ zXp^lOcR2CF_!PrkuRxaKl$Dx)ueD`F1E4}YTIZUe_|37fH3=bq+_!vt3Q1Jo?fyoP zk+k^@C2u0+Ea_hL4KTeRo7*Jg?9?r)Y;K4 zri^eB8Fg10>}~Cy?#IADmZk_yZ=D`@)M!pjZ;@QUP;Sup(Y^I{=Jn#j1|4sBls{oK z8fh@$E1MBJJ^~I9>6Mqz)!mdY2y`V2P$sA0FVMg)R8Fv@oXaLQ%(wXY({T*i(Y2`w zl;ENpXKSlJ|Lk5jLGO3oT#cOc_YHntTUoBy+_4sknU0Zx4TC(AA6DKYwV?B9G8v$1 z&0EW(3X8;K*KI1Cul2awX`XD*2P4bJmfC?F23aujOfMM#c7y|*tMq=6zb3^)m*g&sXI#L${bC4vesVwIXfDk~MFGY3DwUBk zcsvb4ClNZKwlk*D#PAGWmO*Rahi!R~mq^Eslx}4RU!u@f$Ja2E3#O-V$gKsPD}D5r zx)&iO7X+<)GbO6B>+9G^m;Mfa3#l4ls?L4ociEfiv$wn4-p*yS@RQSW%4~O{5VmEb zTlSD~Wj66M8W2u-D_y}-0t2dwf@k#x*iTD|^gV6%`T5d)RIs`_&wlo4$c@L5nY(59 z76M>ax54AF_cdtgB96;uxmY}MK0DmZJpd3Xof{cjO%YwnPLLk__Ty;eXgIYYJW`uD zxXpYhnT?r9=+=vfc4%&_OdNCHG0o@3p)Hxaq_m`jVae)g6nzkx^-|MfjP}mXPQnBN zXkEWtzm>!EZ>n%z+ua51*bl7aRivErdwB}hHEO>JQWmmV2kMkk{O+8W7#exG$HP&;5t4P7;|M^-ui_oq0s6TyEr_J~R%PCxo|4 z0#Bm2-4_~#Rb*lSfBRXQ2qd!4pj9Pa{dov>YRXa1vOkXYji5&ja^Za{5t4voLP^y8 z#&-{cb;kGOalIR3UB)O7|6>!YA-1bocMta!l;Z}yE1#+H9R~|&5aV3!fnnKhgRaR$ zPA~CzHr$D1`@u_Jzu0PJq?4O`AL7JRK7Qa+mY>^*Zb@+7cGt5MJ+0+9-M-<(h48+c^_5{H(ItfQ(aQt?=fo=xzCso!;`m70+yXptLYvov?kBxD?e3{ac^1iXqnDf4{?dNp5t=Fq%8w0`~N^=jbaco}0>8vqTCL5m{&`eY~Dl|M71%Ecb zF;G!0V5>Gs_7WlTb0)+JuDf>;NtzXs-92JQ`{i4`Ml*P81xrCe&$?u8TjJ#39LZ>Sh9I=@E(jTd@=-kuC=3?*|i zmP4?USGBlG*3Xcg%uCTcZreKObaO*WwS4A%b+7D~#y6aHhc4RsB#_0%u8K4($9E~D zUip4jhI>!t|GcqrJoUlS-O{gE>S?@~F^Z`?(=E%hv2}hhUmlOn3h)z$ksfEed6MC8 zB=Qn_*D6~!8@(>qvVw`LS`HTK+ms{|G$ege--vcU3CQ17XUr)eX^^K0fcu@~7T+zH8dw*twYb2JqVu9Q@uDDNdcET# zcI`aAc*jrI0gW=hKZ#Zb86pRFjg+;Tdu(5EGZt#JdN}hQcchep{>lShF+Mfb$`wP? zYN5eCVY)=G`JC6=0Cqyq1*$!8gB1PZ*;8Z}nExaqQ^gO(R zot*=C!)ge$E)LsQ<2_sV4w$U%0t5E7+AWX|%S{BreOK}%ay|hg`t$3cs#bl$`>_;< zug;%b{av6QUi-l$4h!6{)Ea)=%k-IUa{j4xw7U2XT*6}wtu(ei&(Cu%^j+=Nh*6Me zxrp*vbb1)EacIT}S^9}Y87*|d zz9jQ~mYk1z%eV{$Oq)_v5vnX9shYr8YZr$$+k` zvujMfKAxBNaNmE?oC5-_b|*0E0JKUdYv}@+V(gvfu$mdEx)+8D&=drOD}@LE8tXO3 zWUV#D*{)Z(HLt$*;TO?}7FVaDfsF}&S7Gd%>(kR#^J0xe@2SoYun}4Pg6I8lsZ6}2 zuzIFQfcIOj2_G&-Ymdp((_s}hcHi$7LEl_4C%gli={kB?3qje#EEw*sKBc-RX>#Zg zhfj2%b?ayzMD7JlYq21V%G?J_*`>tsq>DNeGOj>TGT!e|lBd=M`It;qR9(M^gdvM~ z2K~@}9Wi@_0x=Y<{6KH-MhBAeN)}kX0h9tq0Y9$-&x_@2P74lifPe?2Oh4N&P^48* z^->sL7dxg%vf*MtXz)ROj9u{E>>-2mZ+Xs;i9%yQ`-@nyVpwt)Iv*_Q4W)2nL*{gB z8hc_eP>Ca{oc$b4lF6v3sCIXb#GI5T(XIYea6@x%zqFjZe;RCLW-w=;M~t;a+@6_> zM(=XK1jJq=oLflXY}m(Lq=rhB$Z)m4ClSV!emAL6AAfXJCxbQOnrBHSLGuo5e zkFT)&^aN}YiQVSrC=TeG~{X+YSuo7^}?*_)L^0Yy(WyV^EW0GfAjx1%y!B1~JGnUI>j zmCv5;z^Y%=3-zfy7>0!kgjsBPvJ$lyr&{Q>{AW?Ae_M`RMrCbFFxKb_R8)SqTD!l7 z&3oOSx2|xRNt7N8^Q)eXeCLjj-iU+DlPX110&_}&AKIga} zW>B0Gke?%d=~hyXWO!8xyqZ@WuOpxsyolJ5xvQ%w>594iX0ok#s&xAM^b+i}fv$Z6 z?cWvnk;BECK1U-xgCaE)aPheuSs1)DR-t^mI13-oj{iX-leNcCp=t(x{1{cw@5)@f z{`jfjlMJ=O7d^Poo^F3`Xsm5A^CKA!d<)xHP}J zK1-Mk%Om4R9H+JaNN2Tqf-+HHOuxuql9;<~?UP!)t*5u--hf3c#8f{(5TCAY&zGis zv8XtAd$P|`c22_xou`_w3wIkhHiYBM9ir+&h!WGY{8UqAiAUIfA^Z zEqry-Uo3=vGb>I!XMn*v-QX6UB|-)nW@%M_mMDSs6`HKGo)4MC4vz1dIq<$O^?!vG zinMZkb-U|)hxcagqUk4gI99W7kqePPR_>F?RQoE%zp+udHyNo!o0CFGn>HG8n^>@^ z68|=^53dE;Ocb3htOa9Z6U4`#RW2(3br`nxc3O-N2Uqw757~h}Mv|ooB$55Gb$tQy z3w*_(nF-sm(Q9&2c5pZr_VHzTJuz+IdzUE29b`m9K_OPZ=#m1A@w2mT1K+Hp`m?w$BbuOB(_|!Q(#JPQZ${gT(O%J&^rokf)Gi6%HEBSv zBhA}So$nM^iH(sM_E<2+HC!K9Vyp5GjPFl_On{w~qh0vC-aMjXXS%nQq zUQ;!XYwhNM)Rm@UrfJ5-a^@5^;WD}W60gb1{_Wa@jBaK)ZaW6hCsjzLjK7pBE zb-1O9qo_5}>o6|?_^t2e_7!k~^uE7Hsspm6zo8oGYboj5k~(h6ts%%F!GrVh1Z#*` z{M?6KswD27ITqam1#72+k+--ULqG0u1z{9ahexk&2Do;Y-b*RlwyXSGAKw`y`>`EH zS9N!XDV6ZI4gp>QiBcHPq*Yilv%L9#N_T~wP5v(RIPO7K9%9)}H|03mf8SJgmgn%A zEUA(Y4?p1~E-A^QdXW~k+?tO^Zo1=_TCq!i2)A2N6e=0*#4XzYJv^KtvzR{qc!ku_ zF5rL$h)iL$Cx|XmpugX6(EfCwfxDxka!af-EWos-VN49gE{sg0Rd|-C`~A*yjTeS$ zYzx90$azF<@9+3()%@pa#|P;zn$yo>P8ge2VNb3|?}7*1ug2mUpZnVv8q#f@W6IJ( z%}94ENzxRPSZMnLc~iS03baZdrQA@mg2s85Nw32`UR1eV2oM6xf=d_{k@hk z*k5h~{gG1?K744{{t*XW-e-6yR{M5RvwbDqv|5$S7GM>G6xDvj{`{9g5|4fMBF^)i ze8mi=$X;XD@4{Y9oBYt3Rs$@lTkKm>TehL77X9|nS9F;X8r-A1+!<4u`VT5Y==9<( z7h#UCEbsXZ`t82@c2`bf1e2M*7OTxt%C?yD%9VXW4i~lv@LfyN1U*Wy4?BhN!JYoW z`AII4%NB2!$r)sKgEj};EMtxw@SgQ4B5AwqhYuC}h<>lZ+2W{^WqR}buS4FO^v6~5 zcWUvl;T`?L2wcBFQEM=a+23210O+L*y+2>PP8yTkDa zLj9ynL}VF@yX&c7iWjgQdp{^#EsDrB-Cu{3;L}f?dhXcan@3W%FGjE1H&aRvy`36W zy}+JC$HoK)ve6!2A#qV7`K7W`4n+QJhStr)HpLHU^jmmzR_$PI){DW#>Mp&Y)no!R zn2D1)I^lRo@|-9h=fpX1??oEk4zuMN*r{<@m&QOOrcd~%gk1B6UQhF zMX4Cuyxt#c;;cOlM42pkZ;kgsCT^HSiKd&Z5VRT#JNWZ=%6NDP7=WMG=gq;SBCYED zMb_s?Xn1tF`SK}qL`Z$A{`s_#10zuH@=3tykV0%hxr@>?NylfO+q?z9_>`n%G1-G+};DCOpEybe#i;? zGZa$Ait7e75Dz{OE~A*-3x=*3-F|;!sf(4eL=z^CD>qRu1I&ZgU3i@=r|Bt{AYsmL z^SwOt$k@(MGF-D7K9TGSIZxtl=}dI@{22;F3>}|M_9AH?RaRcl5I@7 znIdiD3y!z*MJW-urEiBq1%Z^=jt2v};5jmu4BIEJA@*y5d_f@w0{P=F_pLNjtx|N2ebDdmW zCqkbXV1YLobOr>TzKNALe$RU!;`;=6Pg#Z=b{3y1x# zfc3R|`2v$^_w}v2ZLrU5CHr^!#(LQFA0xrV;dAgn!kM;aw)obFqVS>$H^o}d@~}GU z%-daGC-Z5UgW=>{NSW17!;vQLT@a}{4`GllmgVp_v?m`Sro6BX2YifV876JbjF$5s z`@|D^8w2sRHErhU#7xZxe>7@MdcXX{?%{Rx(uEz=_q**hafQA6I`$a^g^!4b1)4N5 zanmnL;L>}g>TIb#x{aU*F5X3UXihu6BG?B-UGQLt6$UHNoE@UV4Ak>j0FVC6b=d!6 z0&-yspFTUKsTQ2FiMf7p^KiLl{eg{8q4nbGDdWvQcIZ;#EA_~Xx`!gv;lWV~W1C6j zyx5%c4z{jmTL*>1$M9{pkJuy`K%R

-k(ILn4XO8Ynr>{{A2gvYe`@OK-5PND%OC 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

`D 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

+#<= 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

1WHy`m1j2_TI?GnNe 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 &<HAMLBSY7&q+Dj{>SQ{ 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%0DL6&wKk~U8+xr>CbMX;F&cRBw3PR}4cN_( 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

qYg@Qjaw6-qHQCa<$R) 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

=%1Apk!7=G$Wq-Q{x``{8!v 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

jM` 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

?7Z$dp92E)l!?WGVqG&gm~ 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

*5#nfL1I$y7{(Y&$ng&FCW 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

i9@TA`+?NRF1;t_p6_Ml!+jT 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�%57*tSs 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%0AAMiLO3wd~ZeDZXVmG!#{Nm!!asEgj|QhyWL} z#2)-9vL>%6%CiaSJE�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�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%0A<|G^oGGbB`a(wNmJ;zA$G>VY;`Sc6 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

iwHQKq_C}sO^uW<(7vedO&!37 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

?a7V$CM`=G>>5lc%<|6e5R<$|j>I~r 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

>)KIA%3gV4XD=q>zpM%%s!4Q$mm9{FCoUr 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

U7eExfO?fzaf&n6T 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

  • hI# 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 z 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 M78F#{Ql|d@0K0nPBLDyZ diff --git a/doc/vtctlReference.md b/doc/vtctlReference.md deleted file mode 100644 index a679512f3dd..00000000000 --- a/doc/vtctlReference.md +++ /dev/null @@ -1,2573 +0,0 @@ -This reference guide explains the commands that the vtctl tool supports. **vtctl** is a command-line tool used to administer a Vitess cluster, and it allows a human or application to easily interact with a Vitess implementation. - -Commands are listed in the following groups: - -* [Cells](#cells) -* [Generic](#generic) -* [Keyspaces](#keyspaces) -* [Queries](#queries) -* [Replication Graph](#replication-graph) -* [Resharding Throttler](#resharding-throttler) -* [Schema, Version, Permissions](#schema-version-permissions) -* [Serving Graph](#serving-graph) -* [Shards](#shards) -* [Tablets](#tablets) -* [Topo](#topo) -* [Workflows](#workflows) - - -## Cells - -* [AddCellInfo](#addcellinfo) -* [DeleteCellInfo](#deletecellinfo) -* [GetCellInfo](#getcellinfo) -* [GetCellInfoNames](#getcellinfonames) -* [UpdateCellInfo](#updatecellinfo) - -### AddCellInfo - -Registers a local topology service in a new cell by creating the CellInfo with the provided parameters. The address will be used to connect to the topology service, and we'll put Vitess data starting at the provided root. - -#### Example - -
    AddCellInfo [-server_address <addr>] [-root <root>] <cell>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| root | string | The root path the topology server is using for that cell. | -| server_address | string | The address the topology server is using for that cell. | - - -#### Arguments - -* <addr> – Required. -* <cell> – Required. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. - -#### Errors - -* the <cell> argument is required for the <AddCellInfo> command This error occurs if the command is not called with exactly one argument. - - -### DeleteCellInfo - -Deletes the CellInfo for the provided cell. The cell cannot be referenced by any Shard record. - -#### Example - -
    DeleteCellInfo <cell>
    - -#### Errors - -* the <cell> argument is required for the <DeleteCellInfo> command This error occurs if the command is not called with exactly one argument. - - -### GetCellInfo - -Prints a JSON representation of the CellInfo for a cell. - -#### Example - -
    GetCellInfo <cell>
    - -#### Errors - -* the <cell> argument is required for the <GetCellInfo> command This error occurs if the command is not called with exactly one argument. - - -### GetCellInfoNames - -Lists all the cells for which we have a CellInfo object, meaning we have a local topology service registered. - -#### Example - -
    GetCellInfoNames 
    - -#### Errors - -* <GetCellInfoNames> command takes no parameter This error occurs if the command is not called with exactly 0 arguments. - - -### UpdateCellInfo - -Updates the content of a CellInfo with the provided parameters. If a value is empty, it is not updated. The CellInfo will be created if it doesn't exist. - -#### Example - -
    UpdateCellInfo [-server_address <addr>] [-root <root>] <cell>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| root | string | The root path the topology server is using for that cell. | -| server_address | string | The address the topology server is using for that cell. | - - -#### Arguments - -* <addr> – Required. -* <cell> – Required. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. - -#### Errors - -* the <cell> argument is required for the <UpdateCellInfo> command This error occurs if the command is not called with exactly one argument. - - -## Generic - -* [ListAllTablets](#listalltablets) -* [ListTablets](#listtablets) -* [Validate](#validate) - -### ListAllTablets - -Lists all tablets in an awk-friendly way. - -#### Example - -
    ListAllTablets <cell name>
    - -#### Arguments - -* <cell name> – Required. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. - -#### Errors - -* the <cell name> argument is required for the <ListAllTablets> command This error occurs if the command is not called with exactly one argument. - - -### ListTablets - -Lists specified tablets in an awk-friendly way. - -#### Example - -
    ListTablets <tablet alias> ...
    - -#### Arguments - -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. To specify multiple values for this argument, separate individual values with a space. - -#### Errors - -* the <tablet alias> argument is required for the <ListTablets> command This error occurs if the command is not called with at least one argument. - - -### Validate - -Validates that all nodes reachable from the global replication graph and that all tablets in all discoverable cells are consistent. - -#### Example - -
    Validate [-ping-tablets]
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| ping-tablets | Boolean | Indicates whether all tablets should be pinged during the validation process | - - - - -## Keyspaces - -* [CreateKeyspace](#createkeyspace) -* [DeleteKeyspace](#deletekeyspace) -* [FindAllShardsInKeyspace](#findallshardsinkeyspace) -* [GetKeyspace](#getkeyspace) -* [GetKeyspaces](#getkeyspaces) -* [MigrateServedFrom](#migrateservedfrom) -* [MigrateServedTypes](#migrateservedtypes) -* [CancelResharding](#cancelresharding) -* [ShowResharding](#showresharding) -* [RebuildKeyspaceGraph](#rebuildkeyspacegraph) -* [RemoveKeyspaceCell](#removekeyspacecell) -* [SetKeyspaceServedFrom](#setkeyspaceservedfrom) -* [SetKeyspaceShardingInfo](#setkeyspaceshardinginfo) -* [ValidateKeyspace](#validatekeyspace) -* [WaitForDrain](#waitfordrain) - -### CreateKeyspace - -Creates the specified keyspace. - -#### Example - -
    CreateKeyspace [-sharding_column_name=name] [-sharding_column_type=type] [-served_from=tablettype1:ks1,tablettype2,ks2,...] [-force] <keyspace name>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| force | Boolean | Proceeds even if the keyspace already exists | -| served_from | string | Specifies a comma-separated list of dbtype:keyspace pairs used to serve traffic | -| sharding_column_name | string | Specifies the column to use for sharding operations | -| sharding_column_type | string | Specifies the type of the column to use for sharding operations | - - -#### Arguments - -* <keyspace name> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. - -#### Errors - -* the <keyspace name> argument is required for the <CreateKeyspace> command This error occurs if the command is not called with exactly one argument. - - -### DeleteKeyspace - -Deletes the specified keyspace. In recursive mode, it also recursively deletes all shards in the keyspace. Otherwise, there must be no shards left in the keyspace. - -#### Example - -
    DeleteKeyspace [-recursive] <keyspace>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| recursive | Boolean | Also recursively delete all shards in the keyspace. | - - -#### Arguments - -* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. - -#### Errors - -* must specify the <keyspace> argument for <DeleteKeyspace> This error occurs if the command is not called with exactly one argument. - - -### FindAllShardsInKeyspace - -Displays all of the shards in the specified keyspace. - -#### Example - -
    FindAllShardsInKeyspace <keyspace>
    - -#### Arguments - -* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. - -#### Errors - -* the <keyspace> argument is required for the <FindAllShardsInKeyspace> command This error occurs if the command is not called with exactly one argument. - - -### GetKeyspace - -Outputs a JSON structure that contains information about the Keyspace. - -#### Example - -
    GetKeyspace <keyspace>
    - -#### Arguments - -* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. - -#### Errors - -* the <keyspace> argument is required for the <GetKeyspace> command This error occurs if the command is not called with exactly one argument. - - -### GetKeyspaces - -Outputs a sorted list of all keyspaces. - - -### MigrateServedFrom - -Makes the <destination keyspace/shard> serve the given type. This command also rebuilds the serving graph. - -#### Example - -
    MigrateServedFrom [-cells=c1,c2,...] [-reverse] <destination keyspace/shard> <served tablet type>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| cells | string | Specifies a comma-separated list of cells to update | -| filtered_replication_wait_time | Duration | Specifies the maximum time to wait, in seconds, for filtered replication to catch up on master migrations | -| reverse | Boolean | Moves the served tablet type backward instead of forward. Use in case of trouble | - - -#### Arguments - -* <destination keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. -* <served tablet type> – Required. The vttablet's role. Valid values are: - - * backup – A slaved copy of data that is offline to queries other than for backup purposes - * batch – A slaved copy of data for OLAP load patterns (typically for MapReduce jobs) - * drained – A tablet that is reserved for a background process. For example, a tablet used by a vtworker process, where the tablet is likely lagging in replication. - * experimental – A slaved copy of data that is ready but not serving query traffic. The value indicates a special characteristic of the tablet that indicates the tablet should not be considered a potential master. Vitess also does not worry about lag for experimental tablets when reparenting. - * master – A primary copy of data - * rdonly – A slaved copy of data for OLAP load patterns - * replica – A slaved copy of data ready to be promoted to master - * restore – A tablet that is restoring from a snapshot. Typically, this happens at tablet startup, then it goes to its right state. - * schema_apply – A slaved copy of data that had been serving query traffic but that is now applying a schema change. Following the change, the tablet will revert to its serving type. - * snapshot_source – A slaved copy of data where mysqld is not running and where Vitess is serving data files to clone slaves. Use this command to enter this mode:
    vtctl Snapshot -server-mode ...
    Use this command to exit this mode:
    vtctl SnapshotSourceEnd ...
    - * spare – A slaved copy of data that is ready but not serving query traffic. The data could be a potential master tablet. - - - - -#### Errors - -* the <destination keyspace/shard> and <served tablet type> arguments are both required for the <MigrateServedFrom> command This error occurs if the command is not called with exactly 2 arguments. - - -### MigrateServedTypes - -Migrates a serving type from the source shard to the shards that it replicates to. This command also rebuilds the serving graph. The <keyspace/shard> argument can specify any of the shards involved in the migration. - -#### Example - -
    MigrateServedTypes [-cells=c1,c2,...] [-reverse] [-skip-refresh-state] <keyspace/shard> <served tablet type>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| cells | string | Specifies a comma-separated list of cells to update | -| filtered\_replication\_wait\_time | Duration | Specifies the maximum time to wait, in seconds, for filtered replication to catch up on master migrations | -| reverse | Boolean | Moves the served tablet type backward instead of forward. Use in case of trouble | -| skip-refresh-state | Boolean | Skips refreshing the state of the source tablets after the migration, meaning that the refresh will need to be done manually, replica and rdonly only) | -| reverse\_replication | Boolean | For master migration, enabling this flag reverses replication which allows you to rollback | - - -#### Arguments - -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. -* <served tablet type> – Required. The vttablet's role. Valid values are: - - * backup – A slaved copy of data that is offline to queries other than for backup purposes - * batch – A slaved copy of data for OLAP load patterns (typically for MapReduce jobs) - * drained – A tablet that is reserved for a background process. For example, a tablet used by a vtworker process, where the tablet is likely lagging in replication. - * experimental – A slaved copy of data that is ready but not serving query traffic. The value indicates a special characteristic of the tablet that indicates the tablet should not be considered a potential master. Vitess also does not worry about lag for experimental tablets when reparenting. - * master – A primary copy of data - * rdonly – A slaved copy of data for OLAP load patterns - * replica – A slaved copy of data ready to be promoted to master - * restore – A tablet that is restoring from a snapshot. Typically, this happens at tablet startup, then it goes to its right state. - * schema_apply – A slaved copy of data that had been serving query traffic but that is now applying a schema change. Following the change, the tablet will revert to its serving type. - * snapshot_source – A slaved copy of data where mysqld is not running and where Vitess is serving data files to clone slaves. Use this command to enter this mode:
    vtctl Snapshot -server-mode ...
    Use this command to exit this mode:
    vtctl SnapshotSourceEnd ...
    - * spare – A slaved copy of data that is ready but not serving query traffic. The data could be a potential master tablet. - - - - -#### Errors - -* the <source keyspace/shard> and <served tablet type> arguments are both required for the <MigrateServedTypes> command This error occurs if the command is not called with exactly 2 arguments. -* the <skip-refresh-state> flag can only be specified for non-master migrations - - -### CancelResharding - -Permanently cancels a resharding in progress. All resharding related metadata will be deleted. - -#### Arguments - -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. - - -### ShowResharding - -"Displays all metadata about a resharding in progress. - -#### Arguments - -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. - - -### RebuildKeyspaceGraph - -Rebuilds the serving data for the keyspace. This command may trigger an update to all connected clients. - -#### Example - -
    RebuildKeyspaceGraph [-cells=c1,c2,...] <keyspace> ...
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| cells | string | Specifies a comma-separated list of cells to update | - - -#### Arguments - -* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. To specify multiple values for this argument, separate individual values with a space. - -#### Errors - -* the <keyspace> argument must be used to specify at least one keyspace when calling the <RebuildKeyspaceGraph> command This error occurs if the command is not called with at least one argument. - - -### RemoveKeyspaceCell - -Removes the cell from the Cells list for all shards in the keyspace, and the SrvKeyspace for that keyspace in that cell. - -#### Example - -
    RemoveKeyspaceCell [-force] [-recursive] <keyspace> <cell>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| force | Boolean | Proceeds even if the cell's topology server cannot be reached. The assumption is that you turned down the entire cell, and just need to update the global topo data. | -| recursive | Boolean | Also delete all tablets in that cell belonging to the specified keyspace. | - - -#### Arguments - -* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. -* <cell> – Required. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. - -#### Errors - -* the <keyspace> and <cell> arguments are required for the <RemoveKeyspaceCell> command This error occurs if the command is not called with exactly 2 arguments. - - -### SetKeyspaceServedFrom - -Changes the ServedFromMap manually. This command is intended for emergency fixes. This field is automatically set when you call the *MigrateServedFrom* command. This command does not rebuild the serving graph. - -#### Example - -
    SetKeyspaceServedFrom [-source=<source keyspace name>] [-remove] [-cells=c1,c2,...] <keyspace name> <tablet type>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| cells | string | Specifies a comma-separated list of cells to affect | -| remove | Boolean | Indicates whether to add (default) or remove the served from record | -| source | string | Specifies the source keyspace name | - - -#### Arguments - -* <keyspace name> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. -* <tablet type> – Required. The vttablet's role. Valid values are: - - * backup – A slaved copy of data that is offline to queries other than for backup purposes - * batch – A slaved copy of data for OLAP load patterns (typically for MapReduce jobs) - * drained – A tablet that is reserved for a background process. For example, a tablet used by a vtworker process, where the tablet is likely lagging in replication. - * experimental – A slaved copy of data that is ready but not serving query traffic. The value indicates a special characteristic of the tablet that indicates the tablet should not be considered a potential master. Vitess also does not worry about lag for experimental tablets when reparenting. - * master – A primary copy of data - * rdonly – A slaved copy of data for OLAP load patterns - * replica – A slaved copy of data ready to be promoted to master - * restore – A tablet that is restoring from a snapshot. Typically, this happens at tablet startup, then it goes to its right state. - * schema_apply – A slaved copy of data that had been serving query traffic but that is now applying a schema change. Following the change, the tablet will revert to its serving type. - * snapshot_source – A slaved copy of data where mysqld is not running and where Vitess is serving data files to clone slaves. Use this command to enter this mode:
    vtctl Snapshot -server-mode ...
    Use this command to exit this mode:
    vtctl SnapshotSourceEnd ...
    - * spare – A slaved copy of data that is ready but not serving query traffic. The data could be a potential master tablet. - - - - -#### Errors - -* the <keyspace name> and <tablet type> arguments are required for the <SetKeyspaceServedFrom> command This error occurs if the command is not called with exactly 2 arguments. - - -### SetKeyspaceShardingInfo - -Updates the sharding information for a keyspace. - -#### Example - -
    SetKeyspaceShardingInfo [-force] <keyspace name> [<column name>] [<column type>]
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| force | Boolean | Updates fields even if they are already set. Use caution before calling this command. | - - -#### Arguments - -* <keyspace name> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. -* <column name> – Optional. -* <column type> – Optional. - -#### Errors - -* the <keyspace name> argument is required for the <SetKeyspaceShardingInfo> command. The <column name> and <column type> arguments are both optional This error occurs if the command is not called with between 1 and 3 arguments. -* both <column name> and <column type> must be set, or both must be unset - - -### ValidateKeyspace - -Validates that all nodes reachable from the specified keyspace are consistent. - -#### Example - -
    ValidateKeyspace [-ping-tablets] <keyspace name>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| ping-tablets | Boolean | Specifies whether all tablets will be pinged during the validation process | - - -#### Arguments - -* <keyspace name> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. - -#### Errors - -* the <keyspace name> argument is required for the <ValidateKeyspace> command This error occurs if the command is not called with exactly one argument. - - -### WaitForDrain - -Blocks until no new queries were observed on all tablets with the given tablet type in the specified keyspace. This can be used as sanity check to ensure that the tablets were drained after running vtctl MigrateServedTypes and vtgate is no longer using them. If -timeout is set, it fails when the timeout is reached. - -#### Example - -
    WaitForDrain [-timeout <duration>] [-retry_delay <duration>] [-initial_wait <duration>] <keyspace/shard> <served tablet type>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| cells | string | Specifies a comma-separated list of cells to look for tablets | -| initial_wait | Duration | Time to wait for all tablets to check in | -| retry_delay | Duration | Time to wait between two checks | -| timeout | Duration | Timeout after which the command fails | - - -#### Arguments - -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. -* <served tablet type> – Required. The vttablet's role. Valid values are: - - * backup – A slaved copy of data that is offline to queries other than for backup purposes - * batch – A slaved copy of data for OLAP load patterns (typically for MapReduce jobs) - * drained – A tablet that is reserved for a background process. For example, a tablet used by a vtworker process, where the tablet is likely lagging in replication. - * experimental – A slaved copy of data that is ready but not serving query traffic. The value indicates a special characteristic of the tablet that indicates the tablet should not be considered a potential master. Vitess also does not worry about lag for experimental tablets when reparenting. - * master – A primary copy of data - * rdonly – A slaved copy of data for OLAP load patterns - * replica – A slaved copy of data ready to be promoted to master - * restore – A tablet that is restoring from a snapshot. Typically, this happens at tablet startup, then it goes to its right state. - * schema_apply – A slaved copy of data that had been serving query traffic but that is now applying a schema change. Following the change, the tablet will revert to its serving type. - * snapshot_source – A slaved copy of data where mysqld is not running and where Vitess is serving data files to clone slaves. Use this command to enter this mode:
    vtctl Snapshot -server-mode ...
    Use this command to exit this mode:
    vtctl SnapshotSourceEnd ...
    - * spare – A slaved copy of data that is ready but not serving query traffic. The data could be a potential master tablet. - - - - -#### Errors - -* the <keyspace/shard> and <tablet type> arguments are both required for the <WaitForDrain> command This error occurs if the command is not called with exactly 2 arguments. - - -## Queries - -* [VtGateExecute](#vtgateexecute) -* [VtGateExecuteKeyspaceIds](#vtgateexecutekeyspaceids) -* [VtGateExecuteShards](#vtgateexecuteshards) -* [VtGateSplitQuery](#vtgatesplitquery) -* [VtTabletBegin](#vttabletbegin) -* [VtTabletCommit](#vttabletcommit) -* [VtTabletExecute](#vttabletexecute) -* [VtTabletRollback](#vttabletrollback) -* [VtTabletStreamHealth](#vttabletstreamhealth) -* [VtTabletUpdateStream](#vttabletupdatestream) - -### VtGateExecute - -Executes the given SQL query with the provided bound variables against the vtgate server. - -#### Example - -
    VtGateExecute -server <vtgate> [-bind_variables <JSON map>] [-keyspace <default keyspace>] [-tablet_type <tablet type>] [-options <proto text options>] [-json] <sql>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| json | Boolean | Output JSON instead of human-readable table | -| options | string | execute options values as a text encoded proto of the ExecuteOptions structure | -| server | string | VtGate server to connect to | -| target | string | keyspace:shard@tablet_type | - - -#### Arguments - -* <vtgate> – Required. -* <sql> – Required. - -#### Errors - -* the <sql> argument is required for the <VtGateExecute> command This error occurs if the command is not called with exactly one argument. -* query commands are disabled (set the -enable_queries flag to enable) -* error connecting to vtgate '%v': %v -* Execute failed: %v - - -### VtGateExecuteKeyspaceIds - -Executes the given SQL query with the provided bound variables against the vtgate server. It is routed to the shards that contain the provided keyspace ids. - -#### Example - -
    VtGateExecuteKeyspaceIds -server <vtgate> -keyspace <keyspace> -keyspace_ids <ks1 in hex>,<k2 in hex>,... [-bind_variables <JSON map>] [-tablet_type <tablet type>] [-options <proto text options>] [-json] <sql>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| json | Boolean | Output JSON instead of human-readable table | -| keyspace | string | keyspace to send query to | -| keyspace_ids | string | comma-separated list of keyspace ids (in hex) that will map into shards to send query to | -| options | string | execute options values as a text encoded proto of the ExecuteOptions structure | -| server | string | VtGate server to connect to | -| tablet_type | string | tablet type to query | - - -#### Arguments - -* <vtgate> – Required. -* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. -* <ks1 in hex> – Required. To specify multiple values for this argument, separate individual values with a comma. -* <sql> – Required. - -#### Errors - -* the <sql> argument is required for the <VtGateExecuteKeyspaceIds> command This error occurs if the command is not called with exactly one argument. -* query commands are disabled (set the -enable_queries flag to enable) -* cannot hex-decode value %v '%v': %v -* error connecting to vtgate '%v': %v -* Execute failed: %v - - -### VtGateExecuteShards - -Executes the given SQL query with the provided bound variables against the vtgate server. It is routed to the provided shards. - -#### Example - -
    VtGateExecuteShards -server <vtgate> -keyspace <keyspace> -shards <shard0>,<shard1>,... [-bind_variables <JSON map>] [-tablet_type <tablet type>] [-options <proto text options>] [-json] <sql>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| json | Boolean | Output JSON instead of human-readable table | -| keyspace | string | keyspace to send query to | -| options | string | execute options values as a text encoded proto of the ExecuteOptions structure | -| server | string | VtGate server to connect to | -| shards | string | comma-separated list of shards to send query to | -| tablet_type | string | tablet type to query | - - -#### Arguments - -* <vtgate> – Required. -* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. -* <shard> – Required. The name of a shard. The argument value is typically in the format <range start>-<range end>. To specify multiple values for this argument, separate individual values with a comma. -* <sql> – Required. - -#### Errors - -* the <sql> argument is required for the <VtGateExecuteShards> command This error occurs if the command is not called with exactly one argument. -* query commands are disabled (set the -enable_queries flag to enable) -* error connecting to vtgate '%v': %v -* Execute failed: %v - - -### VtGateSplitQuery - -Executes the SplitQuery computation for the given SQL query with the provided bound variables against the vtgate server (this is the base query for Map-Reduce workloads, and is provided here for debug / test purposes). - -#### Example - -
    VtGateSplitQuery -server <vtgate> -keyspace <keyspace> [-split_column <split_column>] -split_count <split_count> [-bind_variables <JSON map>] <sql>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| algorithm | string | The algorithm to | -| keyspace | string | keyspace to send query to | -| server | string | VtGate server to connect to | -| split_count | Int64 | number of splits to generate. | - - -#### Arguments - -* <vtgate> – Required. -* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. -* <split_count> – Required. -* <sql> – Required. - -#### Errors - -* the <sql> argument is required for the <VtGateSplitQuery> command This error occurs if the command is not called with exactly one argument. -* query commands are disabled (set the -enable_queries flag to enable) -* Exactly one of <split_count> or num_rows_per_query_part -* Unknown split-query <algorithm>: %v -* error connecting to vtgate '%v': %v -* Execute failed: %v -* SplitQuery failed: %v - - -### VtTabletBegin - -Starts a transaction on the provided server. - -#### Example - -
    VtTabletBegin [-username <TableACL user>] <tablet alias>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| username | string | If set, value is set as immediate caller id in the request and used by vttablet for TableACL check | - - -#### Arguments - -* <TableACL user> – Required. -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. - -#### Errors - -* the <tablet_alias> argument is required for the <VtTabletBegin> command This error occurs if the command is not called with exactly one argument. -* query commands are disabled (set the -enable_queries flag to enable) -* cannot connect to tablet %v: %v -* Begin failed: %v - - -### VtTabletCommit - -Commits the given transaction on the provided server. - -#### Example - -
    VtTabletCommit [-username <TableACL user>] <transaction_id>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| username | string | If set, value is set as immediate caller id in the request and used by vttablet for TableACL check | - - -#### Arguments - -* <TableACL user> – Required. -* <transaction_id> – Required. - -#### Errors - -* the <tablet_alias> and <transaction_id> arguments are required for the <VtTabletCommit> command This error occurs if the command is not called with exactly 2 arguments. -* query commands are disabled (set the -enable_queries flag to enable) -* cannot connect to tablet %v: %v - - -### VtTabletExecute - -Executes the given query on the given tablet. -transaction_id is optional. Use VtTabletBegin to start a transaction. - -#### Example - -
    VtTabletExecute [-username <TableACL user>] [-transaction_id <transaction_id>] [-options <proto text options>] [-json] <tablet alias> <sql>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| json | Boolean | Output JSON instead of human-readable table | -| options | string | execute options values as a text encoded proto of the ExecuteOptions structure | -| transaction_id | Int | transaction id to use, if inside a transaction. | -| username | string | If set, value is set as immediate caller id in the request and used by vttablet for TableACL check | - - -#### Arguments - -* <TableACL user> – Required. -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. -* <sql> – Required. - -#### Errors - -* the <tablet_alias> and <sql> arguments are required for the <VtTabletExecute> command This error occurs if the command is not called with exactly 2 arguments. -* query commands are disabled (set the -enable_queries flag to enable) -* cannot connect to tablet %v: %v -* Execute failed: %v - - -### VtTabletRollback - -Rollbacks the given transaction on the provided server. - -#### Example - -
    VtTabletRollback [-username <TableACL user>] <tablet alias> <transaction_id>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| username | string | If set, value is set as immediate caller id in the request and used by vttablet for TableACL check | - - -#### Arguments - -* <TableACL user> – Required. -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. -* <transaction_id> – Required. - -#### Errors - -* the <tablet_alias> and <transaction_id> arguments are required for the <VtTabletRollback> command This error occurs if the command is not called with exactly 2 arguments. -* query commands are disabled (set the -enable_queries flag to enable) -* cannot connect to tablet %v: %v - - -### VtTabletStreamHealth - -Executes the StreamHealth streaming query to a vttablet process. Will stop after getting <count> answers. - -#### Example - -
    VtTabletStreamHealth [-count <count, default 1>] <tablet alias>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| count | Int | number of responses to wait for | - - -#### Arguments - -* <count default 1> – Required. -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. - -#### Errors - -* the <tablet alias> argument is required for the <VtTabletStreamHealth> command This error occurs if the command is not called with exactly one argument. -* query commands are disabled (set the -enable_queries flag to enable) -* cannot connect to tablet %v: %v - - -### VtTabletUpdateStream - -Executes the UpdateStream streaming query to a vttablet process. Will stop after getting <count> answers. - -#### Example - -
    VtTabletUpdateStream [-count <count, default 1>] [-position <position>] [-timestamp <timestamp>] <tablet alias>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| count | Int | number of responses to wait for | -| position | string | position to start the stream from | -| timestamp | Int | timestamp to start the stream from | - - -#### Arguments - -* <count default 1> – Required. -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. - -#### Errors - -* the <tablet alias> argument is required for the <VtTabletUpdateStream> command This error occurs if the command is not called with exactly one argument. -* query commands are disabled (set the -enable_queries flag to enable) -* cannot connect to tablet %v: %v - - -## Replication Graph - -* [GetShardReplication](#getshardreplication) - -### GetShardReplication - -Outputs a JSON structure that contains information about the ShardReplication. - -#### Example - -
    GetShardReplication <cell> <keyspace/shard>
    - -#### Arguments - -* <cell> – Required. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. - -#### Errors - -* the <cell> and <keyspace/shard> arguments are required for the <GetShardReplication> command This error occurs if the command is not called with exactly 2 arguments. - - -## Resharding Throttler - -* [GetThrottlerConfiguration](#getthrottlerconfiguration) -* [ResetThrottlerConfiguration](#resetthrottlerconfiguration) -* [ThrottlerMaxRates](#throttlermaxrates) -* [ThrottlerSetMaxRate](#throttlersetmaxrate) -* [UpdateThrottlerConfiguration](#updatethrottlerconfiguration) - -### GetThrottlerConfiguration - -Returns the current configuration of the MaxReplicationLag module. If no throttler name is specified, the configuration of all throttlers will be returned. - -#### Example - -
    GetThrottlerConfiguration -server <vtworker or vttablet> [<throttler name>]
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| server | string | vtworker or vttablet to connect to | - - -#### Arguments - -* <vtworker or vttablet> – Required. -* <throttler name> – Optional. - -#### Errors - -* the <GetThrottlerConfiguration> command accepts only <throttler name> as optional positional parameter This error occurs if the command is not called with more than 1 arguments. -* error creating a throttler client for <server> '%v': %v -* failed to get the throttler configuration from <server> '%v': %v - - -### ResetThrottlerConfiguration - -Resets the current configuration of the MaxReplicationLag module. If no throttler name is specified, the configuration of all throttlers will be reset. - -#### Example - -
    ResetThrottlerConfiguration -server <vtworker or vttablet> [<throttler name>]
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| server | string | vtworker or vttablet to connect to | - - -#### Arguments - -* <vtworker or vttablet> – Required. -* <throttler name> – Optional. - -#### Errors - -* the <ResetThrottlerConfiguration> command accepts only <throttler name> as optional positional parameter This error occurs if the command is not called with more than 1 arguments. -* error creating a throttler client for <server> '%v': %v -* failed to get the throttler configuration from <server> '%v': %v - - -### ThrottlerMaxRates - -Returns the current max rate of all active resharding throttlers on the server. - -#### Example - -
    ThrottlerMaxRates -server <vtworker or vttablet>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| server | string | vtworker or vttablet to connect to | - - -#### Arguments - -* <vtworker or vttablet> – Required. - -#### Errors - -* the ThrottlerSetMaxRate command does not accept any positional parameters This error occurs if the command is not called with exactly 0 arguments. -* error creating a throttler client for <server> '%v': %v -* failed to get the throttler rate from <server> '%v': %v - - -### ThrottlerSetMaxRate - -Sets the max rate for all active resharding throttlers on the server. - -#### Example - -
    ThrottlerSetMaxRate -server <vtworker or vttablet> <rate>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| server | string | vtworker or vttablet to connect to | - - -#### Arguments - -* <vtworker or vttablet> – Required. -* <rate> – Required. - -#### Errors - -* the <rate> argument is required for the <ThrottlerSetMaxRate> command This error occurs if the command is not called with exactly one argument. -* failed to parse rate '%v' as integer value: %v -* error creating a throttler client for <server> '%v': %v -* failed to set the throttler rate on <server> '%v': %v - - -### UpdateThrottlerConfiguration - -Updates the configuration of the MaxReplicationLag module. The configuration must be specified as protobuf text. If a field is omitted or has a zero value, it will be ignored unless -copy_zero_values is specified. If no throttler name is specified, all throttlers will be updated. - -#### Example - -
    UpdateThrottlerConfiguration `-server <vtworker or vttablet> [-copy_zero_values] "<configuration protobuf text>" [<throttler name>]`
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| copy_zero_values | Boolean | If true, fields with zero values will be copied as well | -| server | string | vtworker or vttablet to connect to | - - -#### Arguments - -* <vtworker or vttablet> – Required. -* <throttler name> – Optional. - -#### Errors - -* Failed to unmarshal the configuration protobuf text (%v) into a protobuf instance: %v -* error creating a throttler client for <server> '%v': %v -* failed to update the throttler configuration on <server> '%v': %v - - -## Schema, Version, Permissions - -* [ApplySchema](#applyschema) -* [ApplyVSchema](#applyvschema) -* [CopySchemaShard](#copyschemashard) -* [GetPermissions](#getpermissions) -* [GetSchema](#getschema) -* [GetVSchema](#getvschema) -* [RebuildVSchemaGraph](#rebuildvschemagraph) -* [ReloadSchema](#reloadschema) -* [ReloadSchemaKeyspace](#reloadschemakeyspace) -* [ReloadSchemaShard](#reloadschemashard) -* [ValidatePermissionsKeyspace](#validatepermissionskeyspace) -* [ValidatePermissionsShard](#validatepermissionsshard) -* [ValidateSchemaKeyspace](#validateschemakeyspace) -* [ValidateSchemaShard](#validateschemashard) -* [ValidateVersionKeyspace](#validateversionkeyspace) -* [ValidateVersionShard](#validateversionshard) - -### ApplySchema - -Applies the schema change to the specified keyspace on every master, running in parallel on all shards. The changes are then propagated to slaves via replication. If -allow_long_unavailability is set, schema changes affecting a large number of rows (and possibly incurring a longer period of unavailability) will not be rejected. - -#### Example - -
    ApplySchema [-allow_long_unavailability] [-wait_slave_timeout=10s] {-sql=<sql> || -sql-file=<filename>} <keyspace>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| allow_long_unavailability | Boolean | Allow large schema changes which incur a longer unavailability of the database. | -| sql | string | A list of semicolon-delimited SQL commands | -| sql-file | string | Identifies the file that contains the SQL commands | -| wait_slave_timeout | Duration | The amount of time to wait for slaves to receive the schema change via replication. | - - -#### Arguments - -* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. - -#### Errors - -* the <keyspace> argument is required for the command<ApplySchema> command This error occurs if the command is not called with exactly one argument. - - -### ApplyVSchema - -Applies the VTGate routing schema to the provided keyspace. Shows the result after application. - -#### Example - -
    ApplyVSchema {-vschema=<vschema> || -vschema_file=<vschema file>} [-cells=c1,c2,...] [-skip_rebuild] <keyspace>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| cells | string | If specified, limits the rebuild to the cells, after upload. Ignored if skipRebuild is set. | -| skip_rebuild | Boolean | If set, do no rebuild the SrvSchema objects. | -| dry-run | Boolean | Shows the proposed change without executing it | -| vschema | string | Identifies the VTGate routing schema | -| vschema_file | string | Identifies the VTGate routing schema file | -| sql | string | Identifies a VSchema DDL SQL statement | -| sql_file | string | Identifies a VSchema DDL SQL statement | - - -#### Arguments - -* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. - -#### Errors - -* the <keyspace> argument is required for the <ApplyVSchema> command This error occurs if the command is not called with exactly one argument. -* either the <vschema> or <vschema>File flag must be specified when calling the <ApplyVSchema> command - - -### CopySchemaShard - -Copies the schema from a source shard's master (or a specific tablet) to a destination shard. The schema is applied directly on the master of the destination shard, and it is propagated to the replicas through binlogs. - -#### Example - -
    CopySchemaShard [-tables=<table1>,<table2>,...] [-exclude_tables=<table1>,<table2>,...] [-include-views] [-wait_slave_timeout=10s] {<source keyspace/shard> || <source tablet alias>} <destination keyspace/shard>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| exclude_tables | string | Specifies a comma-separated list of tables to exclude. Each is either an exact match, or a regular expression of the form /regexp/ | -| include-views | Boolean | Includes views in the output | -| tables | string | Specifies a comma-separated list of tables to copy. Each is either an exact match, or a regular expression of the form /regexp/ | -| wait_slave_timeout | Duration | The amount of time to wait for slaves to receive the schema change via replication. | - - -#### Arguments - -* <source tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. -* <destination keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. - -#### Errors - -* the <source keyspace/shard> and <destination keyspace/shard> arguments are both required for the <CopySchemaShard> command. Instead of the <source keyspace/shard> argument, you can also specify <tablet alias> which refers to a specific tablet of the shard in the source keyspace This error occurs if the command is not called with exactly 2 arguments. - - -### GetPermissions - -Displays the permissions for a tablet. - -#### Example - -
    GetPermissions <tablet alias>
    - -#### Arguments - -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. - -#### Errors - -* the <tablet alias> argument is required for the <GetPermissions> command This error occurs if the command is not called with exactly one argument. - - -### GetSchema - -Displays the full schema for a tablet, or just the schema for the specified tables in that tablet. - -#### Example - -
    GetSchema [-tables=<table1>,<table2>,...] [-exclude_tables=<table1>,<table2>,...] [-include-views] <tablet alias>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| exclude_tables | string | Specifies a comma-separated list of tables to exclude. Each is either an exact match, or a regular expression of the form /regexp/ | -| include-views | Boolean | Includes views in the output | -| table_names_only | Boolean | Only displays table names that match | -| tables | string | Specifies a comma-separated list of tables for which we should gather information. Each is either an exact match, or a regular expression of the form /regexp/ | - - -#### Arguments - -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. - -#### Errors - -* the <tablet alias> argument is required for the <GetSchema> command This error occurs if the command is not called with exactly one argument. - - -### GetVSchema - -Displays the VTGate routing schema. - -#### Example - -
    GetVSchema <keyspace>
    - -#### Arguments - -* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. - -#### Errors - -* the <keyspace> argument is required for the <GetVSchema> command This error occurs if the command is not called with exactly one argument. - - -### RebuildVSchemaGraph - -Rebuilds the cell-specific SrvVSchema from the global VSchema objects in the provided cells (or all cells if none provided). - -#### Example - -
    RebuildVSchemaGraph [-cells=c1,c2,...]
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| cells | string | Specifies a comma-separated list of cells to look for tablets | - - -#### Errors - -* <RebuildVSchemaGraph> doesn't take any arguments This error occurs if the command is not called with exactly 0 arguments. - - -### ReloadSchema - -Reloads the schema on a remote tablet. - -#### Example - -
    ReloadSchema <tablet alias>
    - -#### Arguments - -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. - -#### Errors - -* the <tablet alias> argument is required for the <ReloadSchema> command This error occurs if the command is not called with exactly one argument. - - -### ReloadSchemaKeyspace - -Reloads the schema on all the tablets in a keyspace. - -#### Example - -
    ReloadSchemaKeyspace [-concurrency=10] [-include_master=false] <keyspace>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| concurrency | Int | How many tablets to reload in parallel | -| include_master | Boolean | Include the master tablet(s) | - - -#### Arguments - -* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. - -#### Errors - -* the <keyspace> argument is required for the <ReloadSchemaKeyspace> command This error occurs if the command is not called with exactly one argument. - - -### ReloadSchemaShard - -Reloads the schema on all the tablets in a shard. - -#### Example - -
    ReloadSchemaShard [-concurrency=10] [-include_master=false] <keyspace/shard>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| concurrency | Int | How many tablets to reload in parallel | -| include_master | Boolean | Include the master tablet | - - -#### Arguments - -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. - -#### Errors - -* the <keyspace/shard> argument is required for the <ReloadSchemaShard> command This error occurs if the command is not called with exactly one argument. - - -### ValidatePermissionsKeyspace - -Validates that the master permissions from shard 0 match those of all of the other tablets in the keyspace. - -#### Example - -
    ValidatePermissionsKeyspace <keyspace name>
    - -#### Arguments - -* <keyspace name> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. - -#### Errors - -* the <keyspace name> argument is required for the <ValidatePermissionsKeyspace> command This error occurs if the command is not called with exactly one argument. - - -### ValidatePermissionsShard - -Validates that the master permissions match all the slaves. - -#### Example - -
    ValidatePermissionsShard <keyspace/shard>
    - -#### Arguments - -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. - -#### Errors - -* the <keyspace/shard> argument is required for the <ValidatePermissionsShard> command This error occurs if the command is not called with exactly one argument. - - -### ValidateSchemaKeyspace - -Validates that the master schema from shard 0 matches the schema on all of the other tablets in the keyspace. - -#### Example - -
    ValidateSchemaKeyspace [-exclude_tables=''] [-include-views] <keyspace name>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| exclude_tables | string | Specifies a comma-separated list of tables to exclude. Each is either an exact match, or a regular expression of the form /regexp/ | -| include-views | Boolean | Includes views in the validation | - - -#### Arguments - -* <keyspace name> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. - -#### Errors - -* the <keyspace name> argument is required for the <ValidateSchemaKeyspace> command This error occurs if the command is not called with exactly one argument. - - -### ValidateSchemaShard - -Validates that the master schema matches all of the slaves. - -#### Example - -
    ValidateSchemaShard [-exclude_tables=''] [-include-views] <keyspace/shard>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| exclude_tables | string | Specifies a comma-separated list of tables to exclude. Each is either an exact match, or a regular expression of the form /regexp/ | -| include-views | Boolean | Includes views in the validation | - - -#### Arguments - -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. - -#### Errors - -* the <keyspace/shard> argument is required for the <ValidateSchemaShard> command This error occurs if the command is not called with exactly one argument. - - -### ValidateVersionKeyspace - -Validates that the master version from shard 0 matches all of the other tablets in the keyspace. - -#### Example - -
    ValidateVersionKeyspace <keyspace name>
    - -#### Arguments - -* <keyspace name> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. - -#### Errors - -* the <keyspace name> argument is required for the <ValidateVersionKeyspace> command This error occurs if the command is not called with exactly one argument. - - -### ValidateVersionShard - -Validates that the master version matches all of the slaves. - -#### Example - -
    ValidateVersionShard <keyspace/shard>
    - -#### Arguments - -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. - -#### Errors - -* the <keyspace/shard> argument is required for the <ValidateVersionShard> command This error occurs if the command is not called with exactly one argument. - - -## Serving Graph - -* [GetSrvKeyspace](#getsrvkeyspace) -* [GetSrvKeyspaceNames](#getsrvkeyspacenames) -* [GetSrvVSchema](#getsrvvschema) - -### GetSrvKeyspace - -Outputs a JSON structure that contains information about the SrvKeyspace. - -#### Example - -
    GetSrvKeyspace <cell> <keyspace>
    - -#### Arguments - -* <cell> – Required. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. -* <keyspace> – Required. The name of a sharded database that contains one or more tables. Vitess distributes keyspace shards into multiple machines and provides an SQL interface to query the data. The argument value must be a string that does not contain whitespace. - -#### Errors - -* the <cell> and <keyspace> arguments are required for the <GetSrvKeyspace> command This error occurs if the command is not called with exactly 2 arguments. - - -### GetSrvKeyspaceNames - -Outputs a list of keyspace names. - -#### Example - -
    GetSrvKeyspaceNames <cell>
    - -#### Arguments - -* <cell> – Required. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. - -#### Errors - -* the <cell> argument is required for the <GetSrvKeyspaceNames> command This error occurs if the command is not called with exactly one argument. - - -### GetSrvVSchema - -Outputs a JSON structure that contains information about the SrvVSchema. - -#### Example - -
    GetSrvVSchema <cell>
    - -#### Arguments - -* <cell> – Required. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. - -#### Errors - -* the <cell> argument is required for the <GetSrvVSchema> command This error occurs if the command is not called with exactly one argument. - - -## Shards - -* [CreateShard](#createshard) -* [DeleteShard](#deleteshard) -* [EmergencyReparentShard](#emergencyreparentshard) -* [GetShard](#getshard) -* [InitShardMaster](#initshardmaster) -* [ListBackups](#listbackups) -* [ListShardTablets](#listshardtablets) -* [PlannedReparentShard](#plannedreparentshard) -* [RemoveBackup](#removebackup) -* [RemoveShardCell](#removeshardcell) -* [SetShardIsMasterServing](#setshardismasterserving) -* [SetShardTabletControl](#setshardtabletcontrol) -* [ShardReplicationFix](#shardreplicationfix) -* [ShardReplicationPositions](#shardreplicationpositions) -* [SourceShardAdd](#sourceshardadd) -* [SourceShardDelete](#sourcesharddelete) -* [TabletExternallyReparented](#tabletexternallyreparented) -* [ValidateShard](#validateshard) -* [WaitForFilteredReplication](#waitforfilteredreplication) - -### CreateShard - -Creates the specified shard. - -#### Example - -
    CreateShard [-force] [-parent] <keyspace/shard>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| force | Boolean | Proceeds with the command even if the keyspace already exists | -| parent | Boolean | Creates the parent keyspace if it doesn't already exist | - - -#### Arguments - -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. - -#### Errors - -* the <keyspace/shard> argument is required for the <CreateShard> command This error occurs if the command is not called with exactly one argument. - - -### DeleteShard - -Deletes the specified shard(s). In recursive mode, it also deletes all tablets belonging to the shard. Otherwise, there must be no tablets left in the shard. - -#### Example - -
    DeleteShard [-recursive] [-even_if_serving] <keyspace/shard> ...
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| even_if_serving | Boolean | Remove the shard even if it is serving. Use with caution. | -| recursive | Boolean | Also delete all tablets belonging to the shard. | - - -#### Arguments - -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. To specify multiple values for this argument, separate individual values with a space. - -#### Errors - -* the <keyspace/shard> argument must be used to identify at least one keyspace and shard when calling the <DeleteShard> command This error occurs if the command is not called with at least one argument. - - -### EmergencyReparentShard - -Reparents the shard to the new master. Assumes the old master is dead and not responsding. - -#### Example - -
    EmergencyReparentShard -keyspace_shard=<keyspace/shard> -new_master=<tablet alias>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| keyspace_shard | string | keyspace/shard of the shard that needs to be reparented | -| new_master | string | alias of a tablet that should be the new master | -| wait_slave_timeout | Duration | time to wait for slaves to catch up in reparenting | - - -#### Errors - -* action <EmergencyReparentShard> requires -keyspace_shard=<keyspace/shard> -new_master=<tablet alias> This error occurs if the command is not called with exactly 0 arguments. -* active reparent commands disabled (unset the -disable_active_reparents flag to enable) -* cannot use legacy syntax and flag -<new_master> for action <EmergencyReparentShard> at the same time - - -### GetShard - -Outputs a JSON structure that contains information about the Shard. - -#### Example - -
    GetShard <keyspace/shard>
    - -#### Arguments - -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. - -#### Errors - -* the <keyspace/shard> argument is required for the <GetShard> command This error occurs if the command is not called with exactly one argument. - - -### InitShardMaster - -Sets the initial master for a shard. Will make all other tablets in the shard slaves of the provided master. WARNING: this could cause data loss on an already replicating shard. PlannedReparentShard or EmergencyReparentShard should be used instead. - -#### Example - -
    InitShardMaster [-force] [-wait_slave_timeout=<duration>] <keyspace/shard> <tablet alias>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| force | Boolean | will force the reparent even if the provided tablet is not a master or the shard master | -| wait_slave_timeout | Duration | time to wait for slaves to catch up in reparenting | - - -#### Arguments - -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. - -#### Errors - -* action <InitShardMaster> requires <keyspace/shard> <tablet alias> This error occurs if the command is not called with exactly 2 arguments. -* active reparent commands disabled (unset the -disable_active_reparents flag to enable) - - -### ListBackups - -Lists all the backups for a shard. - -#### Example - -
    ListBackups <keyspace/shard>
    - -#### Errors - -* action <ListBackups> requires <keyspace/shard> This error occurs if the command is not called with exactly one argument. - - -### ListShardTablets - -Lists all tablets in the specified shard. - -#### Example - -
    ListShardTablets <keyspace/shard>
    - -#### Arguments - -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. - -#### Errors - -* the <keyspace/shard> argument is required for the <ListShardTablets> command This error occurs if the command is not called with exactly one argument. - - -### PlannedReparentShard - -Reparents the shard to the new master, or away from old master. Both old and new master need to be up and running. - -#### Example - -
    PlannedReparentShard -keyspace_shard=<keyspace/shard> [-new_master=<tablet alias>] [-avoid_master=<tablet alias>]
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| avoid_master | string | alias of a tablet that should not be the master, i.e. reparent to any other tablet if this one is the master | -| keyspace_shard | string | keyspace/shard of the shard that needs to be reparented | -| new_master | string | alias of a tablet that should be the new master | -| wait_slave_timeout | Duration | time to wait for slaves to catch up in reparenting | - - -#### Errors - -* action <PlannedReparentShard> requires -keyspace_shard=<keyspace/shard> [-new_master=<tablet alias>] [-avoid_master=<tablet alias>] This error occurs if the command is not called with exactly 0 arguments. -* active reparent commands disabled (unset the -disable_active_reparents flag to enable) -* cannot use legacy syntax and flags -<keyspace_shard> and -<new_master> for action <PlannedReparentShard> at the same time - - -### RemoveBackup - -Removes a backup for the BackupStorage. - -#### Example - -
    RemoveBackup <keyspace/shard> <backup name>
    - -#### Arguments - -* <backup name> – Required. - -#### Errors - -* action <RemoveBackup> requires <keyspace/shard> <backup name> This error occurs if the command is not called with exactly 2 arguments. - - -### RemoveShardCell - -Removes the cell from the shard's Cells list. - -#### Example - -
    RemoveShardCell [-force] [-recursive] <keyspace/shard> <cell>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| force | Boolean | Proceeds even if the cell's topology server cannot be reached. The assumption is that you turned down the entire cell, and just need to update the global topo data. | -| recursive | Boolean | Also delete all tablets in that cell belonging to the specified shard. | - - -#### Arguments - -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. -* <cell> – Required. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. - -#### Errors - -* the <keyspace/shard> and <cell> arguments are required for the <RemoveShardCell> command This error occurs if the command is not called with exactly 2 arguments. - - -### SetShardIsMasterServing - -Add or remove a shard from serving. This is meant as an emergency function. It does not rebuild any serving graph i.e. does not run 'RebuildKeyspaceGraph'. - -#### Example - -
    SetShardServedTypes [--cells=c1,c2,...] [--remove] <keyspace/shard> <served tablet type>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| cells | string | Specifies a comma-separated list of cells to update | -| remove | Boolean | Removes the served tablet type | - - -#### Arguments - -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. -* <served tablet type> – Required. The vttablet's role. Valid values are: - - * backup – A slaved copy of data that is offline to queries other than for backup purposes - * batch – A slaved copy of data for OLAP load patterns (typically for MapReduce jobs) - * drained – A tablet that is reserved for a background process. For example, a tablet used by a vtworker process, where the tablet is likely lagging in replication. - * experimental – A slaved copy of data that is ready but not serving query traffic. The value indicates a special characteristic of the tablet that indicates the tablet should not be considered a potential master. Vitess also does not worry about lag for experimental tablets when reparenting. - * master – A primary copy of data - * rdonly – A slaved copy of data for OLAP load patterns - * replica – A slaved copy of data ready to be promoted to master - * restore – A tablet that is restoring from a snapshot. Typically, this happens at tablet startup, then it goes to its right state. - * schema_apply – A slaved copy of data that had been serving query traffic but that is now applying a schema change. Following the change, the tablet will revert to its serving type. - * snapshot_source – A slaved copy of data where mysqld is not running and where Vitess is serving data files to clone slaves. Use this command to enter this mode:
    vtctl Snapshot -server-mode ...
    Use this command to exit this mode:
    vtctl SnapshotSourceEnd ...
    - * spare – A slaved copy of data that is ready but not serving query traffic. The data could be a potential master tablet. - - - - -#### Errors - -* the <keyspace/shard> and <served tablet type> arguments are both required for the <SetShardServedTypes> command This error occurs if the command is not called with exactly 2 arguments. - - -### SetShardTabletControl - -Sets the TabletControl record for a shard and type. Only use this for an emergency fix or after a finished vertical split. The *MigrateServedFrom* and *MigrateServedType* commands set this field appropriately already. Always specify the blacklisted_tables flag for vertical splits, but never for horizontal splits.

    To set the DisableQueryServiceFlag, keep 'blacklisted_tables' empty, and set 'disable_query_service' to true or false. Useful to fix horizontal splits gone wrong.

    To change the blacklisted tables list, specify the 'blacklisted_tables' parameter with the new list. Useful to fix tables that are being blocked after a vertical split.

    To just remove the ShardTabletControl entirely, use the 'remove' flag, useful after a vertical split is finished to remove serving restrictions. - -#### Example - -
    SetShardTabletControl [--cells=c1,c2,...] [--blacklisted_tables=t1,t2,...] [--remove] [--disable_query_service] <keyspace/shard> <tablet type>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| blacklisted_tables | string | Specifies a comma-separated list of tables to blacklist (used for vertical split). Each is either an exact match, or a regular expression of the form '/regexp/'. | -| cells | string | Specifies a comma-separated list of cells to update | -| disable_query_service | Boolean | Disables query service on the provided nodes. This flag requires 'blacklisted_tables' and 'remove' to be unset, otherwise it's ignored. | -| remove | Boolean | Removes cells for vertical splits. | - - -#### Arguments - -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. -* <tablet type> – Required. The vttablet's role. Valid values are: - - * backup – A slaved copy of data that is offline to queries other than for backup purposes - * batch – A slaved copy of data for OLAP load patterns (typically for MapReduce jobs) - * drained – A tablet that is reserved for a background process. For example, a tablet used by a vtworker process, where the tablet is likely lagging in replication. - * experimental – A slaved copy of data that is ready but not serving query traffic. The value indicates a special characteristic of the tablet that indicates the tablet should not be considered a potential master. Vitess also does not worry about lag for experimental tablets when reparenting. - * master – A primary copy of data - * rdonly – A slaved copy of data for OLAP load patterns - * replica – A slaved copy of data ready to be promoted to master - * restore – A tablet that is restoring from a snapshot. Typically, this happens at tablet startup, then it goes to its right state. - * schema_apply – A slaved copy of data that had been serving query traffic but that is now applying a schema change. Following the change, the tablet will revert to its serving type. - * snapshot_source – A slaved copy of data where mysqld is not running and where Vitess is serving data files to clone slaves. Use this command to enter this mode:
    vtctl Snapshot -server-mode ...
    Use this command to exit this mode:
    vtctl SnapshotSourceEnd ...
    - * spare – A slaved copy of data that is ready but not serving query traffic. The data could be a potential master tablet. - - - - -#### Errors - -* the <keyspace/shard> and <tablet type> arguments are both required for the <SetShardTabletControl> command This error occurs if the command is not called with exactly 2 arguments. - - -### ShardReplicationFix - -Walks through a ShardReplication object and fixes the first error that it encounters. - -#### Example - -
    ShardReplicationFix <cell> <keyspace/shard>
    - -#### Arguments - -* <cell> – Required. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. - -#### Errors - -* the <cell> and <keyspace/shard> arguments are required for the ShardReplicationRemove command This error occurs if the command is not called with exactly 2 arguments. - - -### ShardReplicationPositions - -Shows the replication status of each slave machine in the shard graph. In this case, the status refers to the replication lag between the master vttablet and the slave vttablet. In Vitess, data is always written to the master vttablet first and then replicated to all slave vttablets. Output is sorted by tablet type, then replication position. Use ctrl-C to interrupt command and see partial result if needed. - -#### Example - -
    ShardReplicationPositions <keyspace/shard>
    - -#### Arguments - -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. - -#### Errors - -* the <keyspace/shard> argument is required for the <ShardReplicationPositions> command This error occurs if the command is not called with exactly one argument. - - -### SourceShardAdd - -Adds the SourceShard record with the provided index. This is meant as an emergency function. It does not call RefreshState for the shard master. - -#### Example - -
    SourceShardAdd [--key_range=<keyrange>] [--tables=<table1,table2,...>] <keyspace/shard> <uid> <source keyspace/shard>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| key_range | string | Identifies the key range to use for the SourceShard | -| tables | string | Specifies a comma-separated list of tables to replicate (used for vertical split). Each is either an exact match, or a regular expression of the form /regexp/ | - - -#### Arguments - -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. -* <uid> – Required. -* <source keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. - -#### Errors - -* the <keyspace/shard>, <uid>, and <source keyspace/shard> arguments are all required for the <SourceShardAdd> command This error occurs if the command is not called with exactly 3 arguments. - - -### SourceShardDelete - -Deletes the SourceShard record with the provided index. This is meant as an emergency cleanup function. It does not call RefreshState for the shard master. - -#### Example - -
    SourceShardDelete <keyspace/shard> <uid>
    - -#### Arguments - -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. -* <uid> – Required. - -#### Errors - -* the <keyspace/shard> and <uid> arguments are both required for the <SourceShardDelete> command This error occurs if the command is not called with at least 2 arguments. - - -### TabletExternallyReparented - -Changes metadata in the topology server to acknowledge a shard master change performed by an external tool. See the Reparenting guide for more information:https://github.com/vitessio/vitess/blob/master/doc/Reparenting.md#external-reparents. - -#### Example - -
    TabletExternallyReparented <tablet alias>
    - -#### Arguments - -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. - -#### Errors - -* the <tablet alias> argument is required for the <TabletExternallyReparented> command This error occurs if the command is not called with exactly one argument. - - -### ValidateShard - -Validates that all nodes that are reachable from this shard are consistent. - -#### Example - -
    ValidateShard [-ping-tablets] <keyspace/shard>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| ping-tablets | Boolean | Indicates whether all tablets should be pinged during the validation process | - - -#### Arguments - -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. - -#### Errors - -* the <keyspace/shard> argument is required for the <ValidateShard> command This error occurs if the command is not called with exactly one argument. - - -### WaitForFilteredReplication - -Blocks until the specified shard has caught up with the filtered replication of its source shard. - -#### Example - -
    WaitForFilteredReplication [-max_delay <max_delay, default 30s>] <keyspace/shard>
    - -#### Arguments - -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. - -#### Errors - -* the <keyspace/shard> argument is required for the <WaitForFilteredReplication> command This error occurs if the command is not called with exactly one argument. - - -## Tablets - -* [Backup](#backup) -* [ChangeSlaveType](#changeslavetype) -* [DeleteTablet](#deletetablet) -* [ExecuteFetchAsDba](#executefetchasdba) -* [ExecuteHook](#executehook) -* [GetTablet](#gettablet) -* [IgnoreHealthError](#ignorehealtherror) -* [InitTablet](#inittablet) -* [Ping](#ping) -* [RefreshState](#refreshstate) -* [RefreshStateByShard](#refreshstatebyshard) -* [ReparentTablet](#reparenttablet) -* [RestoreFromBackup](#restorefrombackup) -* [RunHealthCheck](#runhealthcheck) -* [SetReadOnly](#setreadonly) -* [SetReadWrite](#setreadwrite) -* [Sleep](#sleep) -* [StartSlave](#startslave) -* [StopSlave](#stopslave) -* [UpdateTabletAddrs](#updatetabletaddrs) - -### Backup - -Stops mysqld and uses the BackupStorage service to store a new backup. This function also remembers if the tablet was replicating so that it can restore the same state after the backup completes. - -#### Example - -
    Backup [-concurrency=4] <tablet alias>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| concurrency | Int | Specifies the number of compression/checksum jobs to run simultaneously | - - -#### Arguments - -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. - -#### Errors - -* the <Backup> command requires the <tablet alias> argument This error occurs if the command is not called with exactly one argument. - - -### ChangeSlaveType - -Changes the db type for the specified tablet, if possible. This command is used primarily to arrange replicas, and it will not convert a master.

    NOTE: This command automatically updates the serving graph.

    - -#### Example - -
    ChangeSlaveType [-dry-run] <tablet alias> <tablet type>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| dry-run | Boolean | Lists the proposed change without actually executing it | - - -#### Arguments - -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. -* <tablet type> – Required. The vttablet's role. Valid values are: - - * backup – A slaved copy of data that is offline to queries other than for backup purposes - * batch – A slaved copy of data for OLAP load patterns (typically for MapReduce jobs) - * drained – A tablet that is reserved for a background process. For example, a tablet used by a vtworker process, where the tablet is likely lagging in replication. - * experimental – A slaved copy of data that is ready but not serving query traffic. The value indicates a special characteristic of the tablet that indicates the tablet should not be considered a potential master. Vitess also does not worry about lag for experimental tablets when reparenting. - * master – A primary copy of data - * rdonly – A slaved copy of data for OLAP load patterns - * replica – A slaved copy of data ready to be promoted to master - * restore – A tablet that is restoring from a snapshot. Typically, this happens at tablet startup, then it goes to its right state. - * schema_apply – A slaved copy of data that had been serving query traffic but that is now applying a schema change. Following the change, the tablet will revert to its serving type. - * snapshot_source – A slaved copy of data where mysqld is not running and where Vitess is serving data files to clone slaves. Use this command to enter this mode:
    vtctl Snapshot -server-mode ...
    Use this command to exit this mode:
    vtctl SnapshotSourceEnd ...
    - * spare – A slaved copy of data that is ready but not serving query traffic. The data could be a potential master tablet. - - - - -#### Errors - -* the <tablet alias> and <db type> arguments are required for the <ChangeSlaveType> command This error occurs if the command is not called with exactly 2 arguments. -* failed reading tablet %v: %v -* invalid type transition %v: %v -> %v - - -### DeleteTablet - -Deletes tablet(s) from the topology. - -#### Example - -
    DeleteTablet [-allow_master] <tablet alias> ...
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| allow_master | Boolean | Allows for the master tablet of a shard to be deleted. Use with caution. | - - -#### Arguments - -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. To specify multiple values for this argument, separate individual values with a space. - -#### Errors - -* the <tablet alias> argument must be used to specify at least one tablet when calling the <DeleteTablet> command This error occurs if the command is not called with at least one argument. - - -### ExecuteFetchAsDba - -Runs the given SQL command as a DBA on the remote tablet. - -#### Example - -
    ExecuteFetchAsDba [-max_rows=10000] [-disable_binlogs] [-json] <tablet alias> <sql command>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| disable_binlogs | Boolean | Disables writing to binlogs during the query | -| json | Boolean | Output JSON instead of human-readable table | -| max_rows | Int | Specifies the maximum number of rows to allow in reset | -| reload_schema | Boolean | Indicates whether the tablet schema will be reloaded after executing the SQL command. The default value is false, which indicates that the tablet schema will not be reloaded. | - - -#### Arguments - -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. -* <sql command> – Required. - -#### Errors - -* the <tablet alias> and <sql command> arguments are required for the <ExecuteFetchAsDba> command This error occurs if the command is not called with exactly 2 arguments. - - -### ExecuteHook - -Runs the specified hook on the given tablet. A hook is a script that resides in the $VTROOT/vthook directory. You can put any script into that directory and use this command to run that script.

    For this command, the param=value arguments are parameters that the command passes to the specified hook. - -#### Example - -
    ExecuteHook <tablet alias> <hook name> [<param1=value1> <param2=value2> ...]
    - -#### Arguments - -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. -* <hook name> – Required. -* <param1=value1> <param2=value2> . – Optional. - -#### Errors - -* the <tablet alias> and <hook name> arguments are required for the <ExecuteHook> command This error occurs if the command is not called with at least 2 arguments. - - -### GetTablet - -Outputs a JSON structure that contains information about the Tablet. - -#### Example - -
    GetTablet <tablet alias>
    - -#### Arguments - -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. - -#### Errors - -* the <tablet alias> argument is required for the <GetTablet> command This error occurs if the command is not called with exactly one argument. - - -### IgnoreHealthError - -Sets the regexp for health check errors to ignore on the specified tablet. The pattern has implicit ^$ anchors. Set to empty string or restart vttablet to stop ignoring anything. - -#### Example - -
    IgnoreHealthError <tablet alias> <ignore regexp>
    - -#### Arguments - -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. -* <ignore regexp> – Required. - -#### Errors - -* the <tablet alias> and <ignore regexp> arguments are required for the <IgnoreHealthError> command This error occurs if the command is not called with exactly 2 arguments. - - -### InitTablet - -Initializes a tablet in the topology.

    - -#### Example - -
    InitTablet [-allow_update] [-allow_different_shard] [-allow_master_override] [-parent] [-db_name_override=<db name>] [-hostname=<hostname>] [-mysql_port=<port>] [-port=<port>] [-grpc_port=<port>] -keyspace=<keyspace> -shard=<shard> <tablet alias> <tablet type>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| allow_master_override | Boolean | Use this flag to force initialization if a tablet is created as master, and a master for the keyspace/shard already exists. Use with caution. | -| allow_update | Boolean | Use this flag to force initialization if a tablet with the same name already exists. Use with caution. | -| db_name_override | string | Overrides the name of the database that the vttablet uses | -| grpc_port | Int | The gRPC port for the vttablet process | -| hostname | string | The server on which the tablet is running | -| keyspace | string | The keyspace to which this tablet belongs | -| mysql_host | string | The mysql host for the mysql server | -| mysql_port | Int | The mysql port for the mysql server | -| parent | Boolean | Creates the parent shard and keyspace if they don't yet exist | -| port | Int | The main port for the vttablet process | -| shard | string | The shard to which this tablet belongs | -| tags | string | A comma-separated list of key:value pairs that are used to tag the tablet | - - -#### Arguments - -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. -* <tablet type> – Required. The vttablet's role. Valid values are: - - * backup – A slaved copy of data that is offline to queries other than for backup purposes - * batch – A slaved copy of data for OLAP load patterns (typically for MapReduce jobs) - * drained – A tablet that is reserved for a background process. For example, a tablet used by a vtworker process, where the tablet is likely lagging in replication. - * experimental – A slaved copy of data that is ready but not serving query traffic. The value indicates a special characteristic of the tablet that indicates the tablet should not be considered a potential master. Vitess also does not worry about lag for experimental tablets when reparenting. - * master – A primary copy of data - * rdonly – A slaved copy of data for OLAP load patterns - * replica – A slaved copy of data ready to be promoted to master - * restore – A tablet that is restoring from a snapshot. Typically, this happens at tablet startup, then it goes to its right state. - * schema_apply – A slaved copy of data that had been serving query traffic but that is now applying a schema change. Following the change, the tablet will revert to its serving type. - * snapshot_source – A slaved copy of data where mysqld is not running and where Vitess is serving data files to clone slaves. Use this command to enter this mode:
    vtctl Snapshot -server-mode ...
    Use this command to exit this mode:
    vtctl SnapshotSourceEnd ...
    - * spare – A slaved copy of data that is ready but not serving query traffic. The data could be a potential master tablet. - - - - -#### Errors - -* the <tablet alias> and <tablet type> arguments are both required for the <InitTablet> command This error occurs if the command is not called with exactly 2 arguments. - - -### Ping - -Checks that the specified tablet is awake and responding to RPCs. This command can be blocked by other in-flight operations. - -#### Example - -
    Ping <tablet alias>
    - -#### Arguments - -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. - -#### Errors - -* the <tablet alias> argument is required for the <Ping> command This error occurs if the command is not called with exactly one argument. - - -### RefreshState - -Reloads the tablet record on the specified tablet. - -#### Example - -
    RefreshState <tablet alias>
    - -#### Arguments - -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. - -#### Errors - -* the <tablet alias> argument is required for the <RefreshState> command This error occurs if the command is not called with exactly one argument. - - -### RefreshStateByShard - -Runs 'RefreshState' on all tablets in the given shard. - -#### Example - -
    RefreshStateByShard [-cells=c1,c2,...] <keyspace/shard>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| cells | string | Specifies a comma-separated list of cells whose tablets are included. If empty, all cells are considered. | - - -#### Arguments - -* <keyspace/shard> – Required. The name of a sharded database that contains one or more tables as well as the shard associated with the command. The keyspace must be identified by a string that does not contain whitepace, while the shard is typically identified by a string in the format <range start>-<range end>. - -#### Errors - -* the <keyspace/shard> argument is required for the <RefreshStateByShard> command This error occurs if the command is not called with exactly one argument. - - -### ReparentTablet - -Reparent a tablet to the current master in the shard. This only works if the current slave position matches the last known reparent action. - -#### Example - -
    ReparentTablet <tablet alias>
    - -#### Errors - -* action <ReparentTablet> requires <tablet alias> This error occurs if the command is not called with exactly one argument. -* active reparent commands disabled (unset the -disable_active_reparents flag to enable) - - -### RestoreFromBackup - -Stops mysqld and restores the data from the latest backup. - -#### Example - -
    RestoreFromBackup <tablet alias>
    - -#### Errors - -* the <RestoreFromBackup> command requires the <tablet alias> argument This error occurs if the command is not called with exactly one argument. - - -### RunHealthCheck - -Runs a health check on a remote tablet. - -#### Example - -
    RunHealthCheck <tablet alias>
    - -#### Arguments - -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. - -#### Errors - -* the <tablet alias> argument is required for the <RunHealthCheck> command This error occurs if the command is not called with exactly one argument. - - -### SetReadOnly - -Sets the tablet as read-only. - -#### Example - -
    SetReadOnly <tablet alias>
    - -#### Arguments - -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. - -#### Errors - -* the <tablet alias> argument is required for the <SetReadOnly> command This error occurs if the command is not called with exactly one argument. -* failed reading tablet %v: %v - - -### SetReadWrite - -Sets the tablet as read-write. - -#### Example - -
    SetReadWrite <tablet alias>
    - -#### Arguments - -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. - -#### Errors - -* the <tablet alias> argument is required for the <SetReadWrite> command This error occurs if the command is not called with exactly one argument. -* failed reading tablet %v: %v - - -### Sleep - -Blocks the action queue on the specified tablet for the specified amount of time. This is typically used for testing. - -#### Example - -
    Sleep <tablet alias> <duration>
    - -#### Arguments - -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. -* <duration> – Required. The amount of time that the action queue should be blocked. The value is a string that contains a possibly signed sequence of decimal numbers, each with optional fraction and a unit suffix, such as "300ms" or "1h45m". See the definition of the Go language's
    ParseDuration function for more details. Note that, in practice, the value should be a positively signed value. - -#### Errors - -* the <tablet alias> and <duration> arguments are required for the <Sleep> command This error occurs if the command is not called with exactly 2 arguments. - - -### StartSlave - -Starts replication on the specified slave. - -#### Example - -
    StartSlave <tablet alias>
    - -#### Arguments - -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. - -#### Errors - -* action <StartSlave> requires <tablet alias> This error occurs if the command is not called with exactly one argument. -* failed reading tablet %v: %v - - -### StopSlave - -Stops replication on the specified slave. - -#### Example - -
    StopSlave <tablet alias>
    - -#### Arguments - -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. - -#### Errors - -* action <StopSlave> requires <tablet alias> This error occurs if the command is not called with exactly one argument. -* failed reading tablet %v: %v - - -### UpdateTabletAddrs - -Updates the IP address and port numbers of a tablet. - -#### Example - -
    UpdateTabletAddrs [-hostname <hostname>] [-ip-addr <ip addr>] [-mysql-port <mysql port>] [-vt-port <vt port>] [-grpc-port <grpc port>] <tablet alias>
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| grpc-port | Int | The gRPC port for the vttablet process | -| hostname | string | The fully qualified host name of the server on which the tablet is running. | -| mysql-port | Int | The mysql port for the mysql daemon | -| mysql_host | string | The mysql host for the mysql server | -| vt-port | Int | The main port for the vttablet process | - - -#### Arguments - -* <tablet alias> – Required. A Tablet Alias uniquely identifies a vttablet. The argument value is in the format <cell name>-<uid>. - -#### Errors - -* the <tablet alias> argument is required for the <UpdateTabletAddrs> command This error occurs if the command is not called with exactly one argument. - - -## Topo - -* [TopoCat](#topocat) - -### TopoCat - -Retrieves the file(s) at <path> from the topo service, and displays it. It can resolve wildcards, and decode the proto-encoded data. - -#### Example - -
    TopoCat [-cell <cell>] [-decode_proto] [-long] <path> [<path>...]
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| cell | string | topology cell to cat the file from. Defaults to global cell. | -| decode_proto | Boolean | decode proto files and display them as text | -| long | Boolean | long listing. | - - -#### Arguments - -* <cell> – Required. A cell is a location for a service. Generally, a cell resides in only one cluster. In Vitess, the terms "cell" and "data center" are interchangeable. The argument value is a string that does not contain whitespace. -* <path> – Required. -* <path>. – Optional. - -#### Errors - -* <TopoCat>: no path specified This error occurs if the command is not called with at least one argument. -* <TopoCat>: invalid wildcards: %v -* <TopoCat>: some paths had errors - - -## Workflows - -* [WorkflowAction](#workflowaction) -* [WorkflowCreate](#workflowcreate) -* [WorkflowDelete](#workflowdelete) -* [WorkflowStart](#workflowstart) -* [WorkflowStop](#workflowstop) -* [WorkflowTree](#workflowtree) -* [WorkflowWait](#workflowwait) - -### WorkflowAction - -Sends the provided action name on the specified path. - -#### Example - -
    WorkflowAction <path> <name>
    - -#### Arguments - -* <name> – Required. - -#### Errors - -* the <path> and <name> arguments are required for the <WorkflowAction> command This error occurs if the command is not called with exactly 2 arguments. -* no workflow.Manager registered - - -### WorkflowCreate - -Creates the workflow with the provided parameters. The workflow is also started, unless -skip_start is specified. - -#### Example - -
    WorkflowCreate [-skip_start] <factoryName> [parameters...]
    - -#### Flags - -| Name | Type | Definition | -| :-------- | :--------- | :--------- | -| skip_start | Boolean | If set, the workflow will not be started. | - - -#### Arguments - -* <factoryName> – Required. - -#### Errors - -* the <factoryName> argument is required for the <WorkflowCreate> command This error occurs if the command is not called with at least one argument. -* no workflow.Manager registered - - -### WorkflowDelete - -Deletes the finished or not started workflow. - -#### Example - -
    WorkflowDelete <uuid>
    - -#### Errors - -* the <uuid> argument is required for the <WorkflowDelete> command This error occurs if the command is not called with exactly one argument. -* no workflow.Manager registered - - -### WorkflowStart - -Starts the workflow. - -#### Example - -
    WorkflowStart <uuid>
    - -#### Errors - -* the <uuid> argument is required for the <WorkflowStart> command This error occurs if the command is not called with exactly one argument. -* no workflow.Manager registered - - -### WorkflowStop - -Stops the workflow. - -#### Example - -
    WorkflowStop <uuid>
    - -#### Errors - -* the <uuid> argument is required for the <WorkflowStop> command This error occurs if the command is not called with exactly one argument. -* no workflow.Manager registered - - -### WorkflowTree - -Displays a JSON representation of the workflow tree. - -#### Example - -
    WorkflowTree 
    - -#### Errors - -* the <WorkflowTree> command takes no parameter This error occurs if the command is not called with exactly 0 arguments. -* no workflow.Manager registered - - -### WorkflowWait - -Waits for the workflow to finish. - -#### Example - -
    WorkflowWait <uuid>
    - -#### Errors - -* the <uuid> argument is required for the <WorkflowWait> command This error occurs if the command is not called with exactly one argument. -* no workflow.Manager registered - - diff --git a/docker/bootstrap/Dockerfile.common b/docker/bootstrap/Dockerfile.common index c1236160481..2dc72b8de40 100644 --- a/docker/bootstrap/Dockerfile.common +++ b/docker/bootstrap/Dockerfile.common @@ -1,4 +1,4 @@ -FROM golang:1.11 +FROM golang:1.11-stretch # Install Vitess build dependencies RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ diff --git a/docker/bootstrap/Dockerfile.mariadb103 b/docker/bootstrap/Dockerfile.mariadb103 index d2f7759fb48..c2828ddd25d 100644 --- a/docker/bootstrap/Dockerfile.mariadb103 +++ b/docker/bootstrap/Dockerfile.mariadb103 @@ -4,8 +4,8 @@ FROM vitess/bootstrap:common RUN apt-key adv --no-tty --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8 \ && add-apt-repository 'deb [arch=amd64] http://ftp.osuosl.org/pub/mariadb/repo/10.3/debian stretch main' \ && apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ - mariadb-server \ - libmariadbclient-dev \ + mariadb-server-10.3 \ + libmariadb-dev \ && rm -rf /var/lib/apt/lists/* # Bootstrap Vitess diff --git a/docker/k8s/Dockerfile b/docker/k8s/Dockerfile index 704f2a865be..4a037dfcbb0 100644 --- a/docker/k8s/Dockerfile +++ b/docker/k8s/Dockerfile @@ -41,25 +41,8 @@ COPY --from=base $VTTOP/web /vt/web/ # copy vitess config COPY --from=base $VTTOP/config/init_db.sql /vt/config/ -# mysql flavor files for db specific .cnf settings -COPY --from=base $VTTOP/config/mycnf/master_mysql56.cnf /vt/config/mycnf/ -COPY --from=base $VTTOP/config/mycnf/master_mysql80.cnf /vt/config/mycnf/ -COPY --from=base $VTTOP/config/mycnf/master_mariadb.cnf /vt/config/mycnf/ -COPY --from=base $VTTOP/config/mycnf/master_mariadb103.cnf /vt/config/mycnf/ - -# settings for different types of instances -COPY --from=base $VTTOP/config/mycnf/default.cnf /vt/config/mycnf/ -COPY --from=base $VTTOP/config/mycnf/default-fast.cnf /vt/config/mycnf/ -COPY --from=base $VTTOP/config/mycnf/master.cnf /vt/config/mycnf/ -COPY --from=base $VTTOP/config/mycnf/replica.cnf /vt/config/mycnf/ -COPY --from=base $VTTOP/config/mycnf/rdonly.cnf /vt/config/mycnf/ -COPY --from=base $VTTOP/config/mycnf/backup.cnf /vt/config/mycnf/ - -# settings to support rbr -COPY --from=base $VTTOP/config/mycnf/rbr.cnf /vt/config/mycnf/ - -# recommended production settings -COPY --from=base $VTTOP/config/mycnf/production.cnf /vt/config/mycnf/ +# my.cnf include files +COPY --from=base $VTTOP/config/mycnf /vt/config/mycnf # add vitess user and add permissions RUN groupadd -r --gid 2000 vitess && useradd -r -g vitess --uid 1000 vitess && \ diff --git a/docker/k8s/orchestrator/Dockerfile b/docker/k8s/orchestrator/Dockerfile index b41d38d82b6..f626fee34f8 100644 --- a/docker/k8s/orchestrator/Dockerfile +++ b/docker/k8s/orchestrator/Dockerfile @@ -5,9 +5,9 @@ FROM debian:stretch-slim RUN apt-get update && \ apt-get upgrade -qq && \ apt-get install wget ca-certificates jq -qq --no-install-recommends && \ - wget https://github.com/github/orchestrator/releases/download/v3.0.14/orchestrator_3.0.14_amd64.deb && \ - dpkg -i orchestrator_3.0.14_amd64.deb && \ - rm orchestrator_3.0.14_amd64.deb && \ + wget https://github.com/github/orchestrator/releases/download/v3.1.1/orchestrator_3.1.0_amd64.deb && \ + dpkg -i orchestrator_3.1.0_amd64.deb && \ + rm orchestrator_3.1.0_amd64.deb && \ apt-get purge wget -qq && \ apt-get autoremove -qq && \ apt-get clean && \ diff --git a/docker/lite/Dockerfile b/docker/lite/Dockerfile index 78318e5c652..aa1ff5b831c 100644 --- a/docker/lite/Dockerfile +++ b/docker/lite/Dockerfile @@ -22,7 +22,8 @@ RUN chown -R vitess:vitess /vt FROM debian:stretch-slim # Install dependencies -RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends gnupg dirmngr ca-certificates \ +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + gnupg dirmngr ca-certificates wget libdbd-mysql-perl rsync libaio1 libatomic1 libcurl3 libev4 \ && for i in $(seq 1 10); do apt-key adv --no-tty --recv-keys --keyserver keyserver.ubuntu.com 8C718D3B5072E1F5 && break; done \ && echo 'deb http://repo.mysql.com/apt/debian/ stretch mysql-5.7' > /etc/apt/sources.list.d/mysql.list \ && apt-get update \ @@ -32,8 +33,11 @@ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-ins libmysqlclient20 \ mysql-client \ mysql-server \ - && rm -rf /var/lib/apt/lists/* \ - && groupadd -r vitess && useradd -r -g vitess vitess + && wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.13/binary/debian/stretch/x86_64/percona-xtrabackup-24_2.4.13-1.stretch_amd64.deb \ + && dpkg -i percona-xtrabackup-24_2.4.13-1.stretch_amd64.deb \ + && rm -f percona-xtrabackup-24_2.4.13-1.stretch_amd64.deb \ + && rm -rf /var/lib/apt/lists/* \ + && groupadd -r vitess && useradd -r -g vitess vitess # Set up Vitess environment (just enough to run pre-built Go binaries) ENV VTTOP /vt/src/vitess.io/vitess diff --git a/docker/orchestrator/orchestrator.conf.json b/docker/orchestrator/orchestrator.conf.json index a06dcc39e67..73234cf20e8 100644 --- a/docker/orchestrator/orchestrator.conf.json +++ b/docker/orchestrator/orchestrator.conf.json @@ -1,145 +1,119 @@ { - "Debug": true, - "EnableSyslog": false, - "ListenAddress": ":3000", - "AgentsServerPort": ":3001", - "MySQLTopologyUser": "orc_client_user", - "MySQLTopologyPassword": "orc_client_user_password", - "MySQLTopologyCredentialsConfigFile": "", - "MySQLTopologySSLPrivateKeyFile": "", - "MySQLTopologySSLCertFile": "", - "MySQLTopologySSLCAFile": "", - "MySQLTopologySSLSkipVerify": true, - "MySQLTopologyUseMutualTLS": false, - "MySQLTopologyMaxPoolConnections": 3, - "DatabaselessMode__experimental": false, - "MySQLOrchestratorHost": "127.0.0.1", - "MySQLOrchestratorPort": 3306, - "MySQLOrchestratorDatabase": "orchestrator", - "MySQLOrchestratorUser": "orc_server_user", - "MySQLOrchestratorPassword": "orc_server_user_password", - "MySQLOrchestratorCredentialsConfigFile": "", - "MySQLOrchestratorSSLPrivateKeyFile": "", - "MySQLOrchestratorSSLCertFile": "", - "MySQLOrchestratorSSLCAFile": "", - "MySQLOrchestratorSSLSkipVerify": true, - "MySQLOrchestratorUseMutualTLS": false, - "MySQLConnectTimeoutSeconds": 1, - "DefaultInstancePort": 3306, - "SkipOrchestratorDatabaseUpdate": false, - "SlaveLagQuery": "", - "SlaveStartPostWaitMilliseconds": 1000, - "DiscoverByShowSlaveHosts": true, - "InstancePollSeconds": 12, - "ReadLongRunningQueries": true, - "UnseenInstanceForgetHours": 240, - "SnapshotTopologiesIntervalHours": 0, - "DiscoveryPollSeconds": 5, - "InstanceBulkOperationsWaitTimeoutSeconds": 10, - "ActiveNodeExpireSeconds": 12, - "HostnameResolveMethod": "none", - "MySQLHostnameResolveMethod": "none", - "SkipBinlogServerUnresolveCheck": true, - "ExpiryHostnameResolvesMinutes": 60, - "RejectHostnameResolvePattern": "", - "ReasonableReplicationLagSeconds": 10, - "ProblemIgnoreHostnameFilters": [], - "VerifyReplicationFilters": false, - "MaintenanceOwner": "orchestrator", - "ReasonableMaintenanceReplicationLagSeconds": 20, - "MaintenanceExpireMinutes": 10, - "MaintenancePurgeDays": 365, - "CandidateInstanceExpireMinutes": 60, - "AuditLogFile": "/tmp/orchestrator-audit.log", - "AuditToSyslog": false, - "AuditPageSize": 20, - "AuditPurgeDays": 365, - "RemoveTextFromHostnameDisplay": ".mydomain.com:3306", - "ReadOnly": false, - "AuthenticationMethod": "", - "HTTPAuthUser": "", - "HTTPAuthPassword": "", - "AuthUserHeader": "", - "PowerAuthUsers": [ - "*" - ], - "ClusterNameToAlias": { - "127.0.0.1": "test suite" - }, - "DetectClusterAliasQuery": "SELECT value FROM _vt.local_metadata WHERE name='ClusterAlias'", - "DetectClusterDomainQuery": "", - "DetectInstanceAliasQuery": "SELECT value FROM _vt.local_metadata WHERE name='Alias'", - "DetectPromotionRuleQuery": "SELECT value FROM _vt.local_metadata WHERE name='PromotionRule'", - "DataCenterPattern": "[.]([^.]+)[.][^.]+[.]mydomain[.]com", - "PhysicalEnvironmentPattern": "[.]([^.]+[.][^.]+)[.]mydomain[.]com", - "PromotionIgnoreHostnameFilters": [], - "DetectSemiSyncEnforcedQuery": "SELECT @@global.rpl_semi_sync_master_wait_no_slave AND @@global.rpl_semi_sync_master_timeout > 1000000", - "ServeAgentsHttp": false, - "AgentsUseSSL": false, - "AgentsUseMutualTLS": false, - "AgentSSLSkipVerify": false, - "AgentSSLPrivateKeyFile": "", - "AgentSSLCertFile": "", - "AgentSSLCAFile": "", - "AgentSSLValidOUs": [], - "UseSSL": false, - "UseMutualTLS": false, - "SSLSkipVerify": false, - "SSLPrivateKeyFile": "", - "SSLCertFile": "", - "SSLCAFile": "", - "SSLValidOUs": [], - "StatusEndpoint": "/api/status", - "StatusSimpleHealth": true, - "StatusOUVerify": false, - "HttpTimeoutSeconds": 60, - "AgentPollMinutes": 60, - "AgentAutoDiscover": false, - "UnseenAgentForgetHours": 6, - "StaleSeedFailMinutes": 60, - "SeedAcceptableBytesDiff": 8192, - "PseudoGTIDPattern": "drop view if exists .*?`_pseudo_gtid_hint__", - "PseudoGTIDMonotonicHint": "asc:", - "DetectPseudoGTIDQuery": "", - "BinlogEventsChunkSize": 10000, - "BufferBinlogEvents": true, - "SkipBinlogEventsContaining": [], - "ReduceReplicationAnalysisCount": true, - "FailureDetectionPeriodBlockMinutes": 60, - "RecoveryPollSeconds": 10, - "RecoveryPeriodBlockMinutes": 1, - "RecoveryPeriodBlockSeconds": 60, - "RecoveryIgnoreHostnameFilters": [], - "RecoverMasterClusterFilters": [ - ".*" - ], - "RecoverIntermediateMasterClusterFilters": [ - "_intermediate_master_pattern_" - ], - "OnFailureDetectionProcesses": [ - "echo 'Detected {failureType} on {failureCluster}. Affected replicas: {countSlaves}' >> /tmp/recovery.log" - ], - "PreFailoverProcesses": [ - "echo 'Will recover from {failureType} on {failureCluster}' >> /tmp/recovery.log" - ], - "PostFailoverProcesses": [ - "echo '(for all types) Recovered from {failureType} on {failureCluster}. Failed: {failedHost}:{failedPort}; Successor: {successorHost}:{successorPort}' >> /tmp/recovery.log" - ], - "PostUnsuccessfulFailoverProcesses": [], - "PostMasterFailoverProcesses": [ - "echo 'Recovered from {failureType} on {failureCluster}. Failed: {failedHost}:{failedPort}; Promoted: {successorHost}:{successorPort}' >> /tmp/recovery.log", - "vtctlclient -server vtctld:15999 TabletExternallyReparented {successorAlias}" - ], - "PostIntermediateMasterFailoverProcesses": [ - "echo 'Recovered from {failureType} on {failureCluster}. Failed: {failedHost}:{failedPort}; Successor: {successorHost}:{successorPort}' >> /tmp/recovery.log" - ], - "CoMasterRecoveryMustPromoteOtherCoMaster": true, - "DetachLostSlavesAfterMasterFailover": true, - "ApplyMySQLPromotionAfterMasterFailover": true, - "MasterFailoverLostInstancesDowntimeMinutes": 0, - "PostponeSlaveRecoveryOnLagMinutes": 0, - "OSCIgnoreHostnameFilters": [], - "GraphiteAddr": "", - "GraphitePath": "", - "GraphiteConvertHostnameDotsToUnderscores": true + "ActiveNodeExpireSeconds": 5, + "ApplyMySQLPromotionAfterMasterFailover": true, + "AuditLogFile": "/tmp/orchestrator-audit.log", + "AuditToSyslog": false, + "AuthenticationMethod": "", + "AuthUserHeader": "", + "AutoPseudoGTID": false, + "BackendDB": "sqlite", + "BinlogEventsChunkSize": 10000, + "CandidateInstanceExpireMinutes": 60, + "CoMasterRecoveryMustPromoteOtherCoMaster": false, + "DataCenterPattern": "[.]([^.]+)[.][^.]+[.]vitess[.]io", + "Debug": true, + "DefaultInstancePort": 3306, + "DetachLostSlavesAfterMasterFailover": true, + "DetectClusterAliasQuery": "SELECT value FROM _vt.local_metadata WHERE name='ClusterAlias'", + "DetectClusterDomainQuery": "", + "DetectInstanceAliasQuery": "SELECT value FROM _vt.local_metadata WHERE name='Alias'", + "DetectPromotionRuleQuery": "SELECT value FROM _vt.local_metadata WHERE name='PromotionRule'", + "DetectDataCenterQuery": "SELECT value FROM _vt.local_metadata WHERE name='DataCenter'", + "DetectPseudoGTIDQuery": "", + "DetectSemiSyncEnforcedQuery": "SELECT @@global.rpl_semi_sync_master_wait_no_slave AND @@global.rpl_semi_sync_master_timeout > 1000000", + "DiscoverByShowSlaveHosts": false, + "EnableSyslog": false, + "ExpiryHostnameResolvesMinutes": 60, + "DelayMasterPromotionIfSQLThreadNotUpToDate": true, + "FailureDetectionPeriodBlockMinutes": 10, + "GraphiteAddr": "", + "GraphiteConvertHostnameDotsToUnderscores": true, + "GraphitePath": "", + "HostnameResolveMethod": "none", + "HTTPAuthPassword": "", + "HTTPAuthUser": "", + "InstanceBulkOperationsWaitTimeoutSeconds": 10, + "InstancePollSeconds": 5, + "ListenAddress": ":3000", + "MasterFailoverLostInstancesDowntimeMinutes": 0, + "MySQLConnectTimeoutSeconds": 1, + "MySQLHostnameResolveMethod": "none", + "MySQLTopologyCredentialsConfigFile": "", + "MySQLTopologyMaxPoolConnections": 3, + "MySQLTopologyPassword": "orc_client_user_password", + "MySQLTopologyReadTimeoutSeconds": 3, + "MySQLTopologySSLCAFile": "", + "MySQLTopologySSLCertFile": "", + "MySQLTopologySSLPrivateKeyFile": "", + "MySQLTopologySSLSkipVerify": true, + "MySQLTopologyUseMutualTLS": false, + "MySQLTopologyUser": "orc_client_user", + "OnFailureDetectionProcesses": [ + "echo 'Detected {failureType} on {failureCluster}. Affected replicas: {countSlaves}' >> /tmp/recovery.log" + ], + "OSCIgnoreHostnameFilters": [ + ], + "PhysicalEnvironmentPattern": "[.]([^.]+[.][^.]+)[.]vitess[.]io", + "PostFailoverProcesses": [ + "echo '(for all types) Recovered from {failureType} on {failureCluster}. Failed: {failedHost}:{failedPort}; Successor: {successorHost}:{successorPort}' >> /tmp/recovery.log" + ], + "PostIntermediateMasterFailoverProcesses": [ + "echo 'Recovered from {failureType} on {failureCluster}. Failed: {failedHost}:{failedPort}; Successor: {successorHost}:{successorPort}' >> /tmp/recovery.log" + ], + "PostMasterFailoverProcesses": [ + "echo 'Recovered from {failureType} on {failureCluster}. Failed: {failedHost}:{failedPort}; Promoted: {successorHost}:{successorPort}' >> /tmp/recovery.log", + "n=0; until [ $n -ge 10 ]; do vtctlclient -server vtctld:15999 TabletExternallyReparented {successorAlias} && break; n=$[$n+1]; sleep 5; done" + ], + "PostponeSlaveRecoveryOnLagMinutes": 0, + "PostUnsuccessfulFailoverProcesses": [ + ], + "PowerAuthUsers": [ + "*" + ], + "PreFailoverProcesses": [ + "echo 'Will recover from {failureType} on {failureCluster}' >> /tmp/recovery.log" + ], + "ProblemIgnoreHostnameFilters": [ + ], + "PromotionIgnoreHostnameFilters": [ + ], + "PseudoGTIDMonotonicHint": "asc:", + "PseudoGTIDPattern": "drop view if exists .*?`_pseudo_gtid_hint__", + "ReadLongRunningQueries": false, + "ReadOnly": false, + "ReasonableMaintenanceReplicationLagSeconds": 20, + "ReasonableReplicationLagSeconds": 10, + "RecoverMasterClusterFilters": [ + ".*" + ], + "RecoveryIgnoreHostnameFilters": [ + ], + "RecoveryPeriodBlockSeconds": 60, + "ReduceReplicationAnalysisCount": true, + "RejectHostnameResolvePattern": "", + "RemoveTextFromHostnameDisplay": ".vitess.io:3306", + "ReplicationLagQuery": "", + "ServeAgentsHttp": false, + "SkipBinlogEventsContaining": [ + ], + "SkipBinlogServerUnresolveCheck": true, + "SkipMaxScaleCheck": true, + "SkipOrchestratorDatabaseUpdate": false, + "SlaveStartPostWaitMilliseconds": 1000, + "SnapshotTopologiesIntervalHours": 0, + "SQLite3DataFile": ":memory:", + "SSLCAFile": "", + "SSLCertFile": "", + "SSLPrivateKeyFile": "", + "SSLSkipVerify": false, + "SSLValidOUs": [ + ], + "StaleSeedFailMinutes": 60, + "StatusEndpoint": "/api/status", + "StatusOUVerify": false, + "UnseenAgentForgetHours": 6, + "UnseenInstanceForgetHours": 240, + "UseMutualTLS": false, + "UseSSL": false, + "VerifyReplicationFilters": false } diff --git a/docker/packaging/Dockerfile b/docker/packaging/Dockerfile new file mode 100644 index 00000000000..713aa67b72b --- /dev/null +++ b/docker/packaging/Dockerfile @@ -0,0 +1,23 @@ +FROM vitess/base + +USER root + +# Install gem and use gem to install fpm +RUN apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + build-essential \ + ruby-dev \ + rubygems \ + rpm \ + && rm -rf /var/lib/apt/lists/* \ + && gem install --no-ri --no-rdoc fpm + +RUN mkdir /vt/packaging + +COPY docker/packaging/* /vt/packaging/ + +RUN chown -R vitess:vitess /vt/packaging + +USER vitess + +ENTRYPOINT ["/bin/bash", "/vt/packaging/package_vitess.sh"] diff --git a/docker/packaging/package_vitess.sh b/docker/packaging/package_vitess.sh new file mode 100755 index 00000000000..a90a46d69c8 --- /dev/null +++ b/docker/packaging/package_vitess.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +if [ -z "${VERSION}" ]; then + echo "Set the env var VERSION with the release version" + exit 1 +fi + +set -eu + +PREFIX=${PREFIX:-/usr} + +inputs_file="/vt/packaging/inputs" +cat <> "${inputs_file}" +/vt/bin/mysqlctld=${PREFIX}/bin/mysqlctld +/vt/bin/vtbackup=${PREFIX}/bin/vtbackup +/vt/bin/vtctl=${PREFIX}/bin/vtctl +/vt/bin/vtctlclient=${PREFIX}/bin/vtctlclient +/vt/bin/vtctld=${PREFIX}/bin/vtctld +/vt/bin/vtgate=${PREFIX}/bin/vtgate +/vt/bin/vttablet=${PREFIX}/bin/vttablet +/vt/bin/vtworker=${PREFIX}/bin/vtworker +/vt/src/vitess.io/vitess/config/=/etc/vitess +/vt/src/vitess.io/vitess/web/vtctld2/app=${PREFIX}/lib/vitess/web/vtcld2 +/vt/src/vitess.io/vitess/web/vtctld=${PREFIX}/lib/vitess/web +/vt/src/vitess.io/vitess/examples/local/=${PREFIX}/share/vitess/examples +EOF + +description='A database clustering system for horizontal scaling of MySQL + +Vitess is a database solution for deploying, scaling and managing large +clusters of MySQL instances. It’s architected to run as effectively in a public +or private cloud architecture as it does on dedicated hardware. It combines and +extends many important MySQL features with the scalability of a NoSQL database.' + +exec /usr/local/bin/fpm \ + --force \ + --input-type dir \ + --name vitess \ + --version "${VERSION}" \ + --url "https://vitess.io/" \ + --description "${description}" \ + --license "Apache License - Version 2.0, January 2004" \ + --inputs "${inputs_file}" \ + --config-files "/etc/vitess" \ + --directories "${PREFIX}/lib/vitess" \ + --before-install "/vt/packaging/preinstall.sh" \ + "${@}" diff --git a/docker/packaging/preinstall.sh b/docker/packaging/preinstall.sh new file mode 100755 index 00000000000..1d9c80ca782 --- /dev/null +++ b/docker/packaging/preinstall.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +if ! /usr/bin/getent group vitess >/dev/null ; then + groupadd -r vitess +fi + +if ! /usr/bin/getent passwd vitess >/dev/null ; then + useradd -r -g vitess vitess +fi diff --git a/docker/test/run.sh b/docker/test/run.sh index 15b305d2206..dc59fad26f4 100755 --- a/docker/test/run.sh +++ b/docker/test/run.sh @@ -211,9 +211,9 @@ fi # Clean up host dir mounted VTDATAROOT if [[ -n "$hostdir" ]]; then # Use Docker user to clean up first, to avoid permission errors. - #docker run --name=rm_$testid -v $hostdir:/vt/vtdataroot $image bash -c 'rm -rf /vt/vtdataroot/*' + docker run --name=rm_$testid -v $hostdir:/vt/vtdataroot $image bash -c 'rm -rf /vt/vtdataroot/*' docker rm -f rm_$testid &>/dev/null - #rm -rf $hostdir + rm -rf $hostdir fi # If requested, create the cache image. diff --git a/examples/compose/.env b/examples/compose/.env index ce5676f6e9a..9b1914500c5 100644 --- a/examples/compose/.env +++ b/examples/compose/.env @@ -5,3 +5,11 @@ MYSQL_PORT=15306 CELL=test KEYSPACE=test_keyspace +DB=vt_test_keyspace + +EXTERNAL_DB=0 +DB_HOST=external_db_host +DB_PORT=3306 +DB_USER=external_db_user +DB_PASS=external_db_password +DB_CHARSET=CHARACTER SET utf8 COLLATE utf8_general_ci diff --git a/examples/compose/README.md b/examples/compose/README.md index 82a54e1acbc..82528bbde42 100644 --- a/examples/compose/README.md +++ b/examples/compose/README.md @@ -1,6 +1,6 @@ # Local Vitess cluster using docker-compose -This directory have a docker-compose sample application. +This directory has a docker-compose sample application. To understand it better, you can run it. First you will need to [install docker-compose](https://docs.docker.com/compose/install/). @@ -10,7 +10,13 @@ To start Consul(which saves the topology config), vtctld, vtgate and a few vttab ``` vitess/examples/compose$ docker-compose up -d ``` -Note that the vtgate container will likely fail to start. + +### Check the status of the containers +You can check the logs of the containers (vtgate, vttablet1, vttablet2, vttablet3) at any time. +For example to check vtgate logs, run the following; +``` +vitess/examples/compose$ docker-compose logs -f vtgate +``` ### Load the schema We need to create a few tables into our new cluster. To do that, we can run the `ApplySchema` command. @@ -18,14 +24,15 @@ We need to create a few tables into our new cluster. To do that, we can run the vitess/examples/compose$ ./lvtctl.sh ApplySchema -sql "$(cat create_test_table.sql)" test_keyspace ``` -### Complete starting the cluster -Now that schema has been loaded a second start will bring vtgate up as well. +### Create Vschema +Create Vschema ``` -vitess/examples/compose$ docker-compose up -d +vitess/examples/compose$ ./lvtctl.sh ApplyVschema -vschema '{"tables": {"messages": {} } }' test_keyspace ``` ### Run the client to insert and read some data This will build and run the `client.go` file. It will insert and read data from the master and from the replica. +[See Possible Errors.](#common-errors "Go to common errors") ``` vitess/examples/compose$ ./client.sh ``` @@ -33,7 +40,7 @@ vitess/examples/compose$ ./client.sh ### Connect to vgate and run queries vtgate responds to the MySQL protocol, so we can connect to it using the default MySQL client command line. ``` -$ mysql --port=15306 --host=127.0.0.1 +vitess/examples/compose$ ./lmysql.sh --port=15306 --host=127.0.0.1 ``` @@ -63,3 +70,127 @@ If the cluster gets in a bad state, you most likely will have to stop and kill t vitess/examples/compose$ docker-compose kill vitess/examples/compose$ docker-compose rm ``` + +## Advanced Usage + +### External mysql instance +The compose example has the capability to run against an external mysql instance. Kindly take care to secure your connection to the database. +To start vitess against unsharded external mysql, change the following variables in your .env file to match your external database; +``` +KEYSPACE=external_db_name +DB=external_db_name +EXTERNAL_DB=1 +DB_HOST=external_db_host +DB_PORT=external_db_port +DB_USER=external_db_user +DB_PASS=external_db_password +DB_CHARSET=CHARACTER SET utf8 COLLATE utf8_general_ci +``` + +Ensure you have log bin enabled on your external database. +You may add the following configs to your conf.d directory and reload mysqld on your server +``` +vitess/config/mycnf/master_mysql56.cnf +vitess/config/mycnf/rbr.cnf +``` + +### Start the cluster +``` +vitess/examples/compose$ docker-compose up -d +``` + +### Check replication status +Once vitess starts, check if replication is working +``` +vitess/examples/compose$ ./lfixrepl.sh status +``` + +### Fix replication +To fix replication, place a mysqldump of the database in vitess/examples/compose/script with filename 'database.sql' +You may then run the following command +``` +vitess/examples/compose$ ./lfixrepl.sh +``` + +### Apply Vschema +Apply Vschema for the unsharded keyspace +``` +vitess/examples/compose$ ./lvtctl.sh ApplyVschema -vschema '{"sharded":false, "tables": {"*": {} } }' external_db_name +``` + +### Connect to vgate and run queries +vtgate responds to the MySQL protocol, so we can connect to it using the default MySQL client command line. +```sh +vitess/examples/compose$ ./lmysql.sh --port=15306 --host= + +mysql> show databases; ++--------------------+ +| Databases | ++--------------------+ +| external_db_name | ++--------------------+ +1 row in set (0.00 sec) +mysql> use external_db_name@master or use external_db_name@replica or use external_db_name@rdonly; +Reading table information for completion of table and column names +You can turn off this feature to get a quicker startup with -A + +Database changed +mysql> use external_db_name@replica; +Reading table information for completion of table and column names +You can turn off this feature to get a quicker startup with -A + +Database changed +mysql> show tables; ++--------------------------------------------+ +| Tables_in_external_db_name | ++--------------------------------------------+ +| DATABASECHANGELOG | +| ...................... | +| table_name_1 | +| table_name_2 | +| ...................... | +| | ++--------------------------------------------+ +29 rows in set (0.00 sec) +``` + +## Helper Scripts +The following helper scripts are included to help you perform various actions easily +* vitess/examples/compose/lvtctl.sh +* vitess/examples/compose/lmysql.sh +* vitess/examples/compose/lfixrepl.sh + +You may run them as below +``` +vitess/examples/compose$ ./lvtctl.sh +``` + +To run against a specific compose service/container, use the environment variable **$CS** + +``` +vitess/examples/compose$ (export CS=vttablet2; ./lvtctl.sh ) +``` + +## Common Errors + +1. Running ./client.sh may generate the following error +```sh +vitess/examples/compose$ ./client.sh +Inserting into master... +exec failed: Code: FAILED_PRECONDITION +vtgate: ...vttablet: The MySQL server is running with the --read-only option so it cannot execute this statement (errno 1290) ... +exit status 1 +``` +To resolve use the [SetReadWrite](../../doc/Troubleshooting.md#master-starts-up-read-only) command on master. +```sh +vitess/examples/compose$ ./lvtctl.sh SetReadWrite test-1 + +``` + +2. Running ./lvtctl.sh ApplyVschema -vschema '{"sharded":false }' may result in an error referenced by this [issue](https://github.com/vitessio/vitess/issues/4013 ) + + +A quick fix for unsharded db is; +``` +vitess/examples/compose$ ./lvtctl.sh ApplyVschema -vschema '{"sharded":false, "tables": {"*": {} } }' external_db_name +``` diff --git a/examples/compose/backups/.gitignore b/examples/compose/backups/.gitignore new file mode 100644 index 00000000000..35bc8010eb9 --- /dev/null +++ b/examples/compose/backups/.gitignore @@ -0,0 +1,4 @@ +# ignore all files in this dir... +* +# ... except for this one. +!.gitignore diff --git a/examples/compose/client.sh b/examples/compose/client.sh index f56a0c85c66..eee18b4d2bf 100755 --- a/examples/compose/client.sh +++ b/examples/compose/client.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Copyright 2017 GitHub Inc. +# 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. @@ -17,4 +17,12 @@ set -e -exec docker-compose run -v$(pwd):/vt/client vtgate go run /vt/client/client.go -server=vtgate:15999 +# Enable tty for Windows users using git-bash or cygwin +if [[ "$OSTYPE" == "msys" ]]; then + # Lightweight shell and GNU utilities compiled for Windows (part of MinGW) + tty=winpty + script=//script//client.go +fi + +# This is a convenience script to run the client.go script +exec $tty docker-compose exec ${CS:-vtgate} go run ${script:-/script/client.go} -server=vtgate:15999 diff --git a/examples/compose/docker-compose.yml b/examples/compose/docker-compose.yml index e2be53fde98..561e6620cc7 100644 --- a/examples/compose/docker-compose.yml +++ b/examples/compose/docker-compose.yml @@ -1,4 +1,4 @@ -version: "3" +version: "2.3" services: consul1: image: consul:latest @@ -60,7 +60,7 @@ services: - "15099:$WEB_PORT" - "$GRPC_PORT" - "15306:$MYSQL_PORT" - command: ["sh", "-c", "$$VTROOT/bin/vtgate \ + command: ["sh", "-c", "vtctl $TOPOLOGY_FLAGS SetReadWrite ${CELL}-1 & $$VTROOT/bin/vtgate \ $TOPOLOGY_FLAGS \ -logtostderr=true \ -port $WEB_PORT \ @@ -74,8 +74,16 @@ services: -service_map 'grpc-vtgateservice' \ -pid_file $$VTDATAROOT/tmp/vtgate.pid \ "] + volumes: + - ".:/script" + environment: + - KEYSPACE + - DB depends_on: - vtctld + depends_on: + vttablet1: + condition: service_healthy vttablet1: image: vitess/base @@ -85,15 +93,28 @@ services: - "3306" volumes: - ".:/script" + - "./backups:/vt/vtdataroot/backups" environment: - TOPOLOGY_FLAGS - WEB_PORT - GRPC_PORT - CELL - KEYSPACE + - DB + - EXTERNAL_DB + - DB_PORT + - DB_HOST + - DB_USER + - DB_PASS + - DB_CHARSET command: ["sh", "-c", "/script/vttablet-up.sh 1"] depends_on: - vtctld + healthcheck: + test: ["CMD-SHELL","curl localhost:$$WEB_PORT/debug/health"] + interval: 30s + timeout: 10s + retries: 10 vttablet2: image: vitess/base ports: @@ -102,15 +123,22 @@ services: - "3306" volumes: - ".:/script" + - "./backups:/vt/vtdataroot/backups" environment: - TOPOLOGY_FLAGS - WEB_PORT - GRPC_PORT - CELL - KEYSPACE + - DB + - EXTERNAL_DB + - DB_USER + - DB_PASS + - DB_CHARSET command: ["sh", "-c", "/script/vttablet-up.sh 2"] depends_on: - vtctld + - vttablet1 vttablet3: image: vitess/base ports: @@ -119,12 +147,19 @@ services: - "3306" volumes: - ".:/script" + - "./backups:/vt/vtdataroot/backups" environment: - TOPOLOGY_FLAGS - WEB_PORT - GRPC_PORT - CELL - KEYSPACE + - DB + - EXTERNAL_DB + - DB_USER + - DB_PASS + - DB_CHARSET command: ["sh", "-c", "/script/vttablet-up.sh 3"] depends_on: - vtctld + - vttablet1 diff --git a/examples/compose/fix_replication.sh b/examples/compose/fix_replication.sh new file mode 100644 index 00000000000..9df86620725 --- /dev/null +++ b/examples/compose/fix_replication.sh @@ -0,0 +1,69 @@ +#!/bin/bash + +# This is a helper script to sync replicas for mysql. +# It handles the special case where the master has purged bin logs that the replica requires. +# To use it place a mysql dump of the database on the same directory as this script. +# The name of the dump must be $KEYSPACE.sql. The script can also download the mysqldump for you. +# Replication is fixed by restoring the mysqldump and resetting the slave. +# https://dev.mysql.com/doc/refman/5.7/en/replication-mode-change-online-disable-gtids.html +# https://www.percona.com/blog/2013/02/08/how-to-createrestore-a-slave-using-gtid-replication-in-mysql-5-6/ + +cd "$(dirname "${BASH_SOURCE[0]}")" + +function get_slave_status() { + # Get slave status + STATUS_LINE=$(mysql -u$DB_USER -p$DB_PASS -h 127.0.0.1 -e "SHOW SLAVE STATUS\G") + LAST_ERRNO=$(grep "Last_IO_Errno:" <<< "$STATUS_LINE" | awk '{ print $2 }') + SLAVE_SQL_RUNNING=$(grep "Slave_SQL_Running:" <<< "$STATUS_LINE" | awk '{ print $2 }') + SLAVE_IO_RUNNING=$(grep "Slave_IO_Running:" <<< "$STATUS_LINE" | awk '{ print $2 }') + MASTER_HOST=$(grep "Master_Host:" <<< "$STATUS_LINE" | awk '{ print $2 }') + MASTER_PORT=$(grep "Master_Port:" <<< "$STATUS_LINE" | awk '{ print $2 }') + + echo "Slave_SQL_Running: $SLAVE_SQL_RUNNING" + echo "Slave_IO_Running: $SLAVE_IO_RUNNING" + echo "Last_IO_Errno: $LAST_ERRNO" +} + +function reset_slave() { + # Necessary before sql file can be imported + echo "Importing MysqlDump: $KEYSPACE.sql" + mysql -u$DB_USER -p$DB_PASS -h 127.0.0.1 -e "RESET MASTER;STOP SLAVE;CHANGE MASTER TO MASTER_AUTO_POSITION = 0;source $KEYSPACE.sql;START SLAVE;" + # Restore Master Auto Position + echo "Restoring Master Auto Setting" + mysql -u$DB_USER -p$DB_PASS -h 127.0.0.1 -e "STOP SLAVE;CHANGE MASTER TO MASTER_AUTO_POSITION = 1;START SLAVE;" +} + +# Retrieve slave status +get_slave_status + +# Exit script if called with argument 'status' +[ ${1:-''} != 'status' ] || exit 0; + +# Check if SLAVE_IO is running +if [[ $SLAVE_IO_RUNNING = "No" && $LAST_ERRNO = 1236 ]]; then + + echo "Master has purged bin logs that slave requires. Sync will require restore from mysqldump" + if [[ -f $KEYSPACE.sql ]] ; then + echo "mysqldump file $KEYSPACE.sql exists, attempting to restore.." + echo "Resetting slave.." + reset_slave + else + echo "Starting mysqldump. This may take a while.." + # Modify flags to user's requirements + if mysqldump -h $MASTER_HOST -P $MASTER_PORT -u$DB_USER -p$DB_PASS --databases $KEYSPACE \ + --triggers --routines --events --hex-blob --master-data=1 --quick --order-by-primary \ + --no-autocommit --skip-comments --skip-add-drop-table --skip-add-locks \ + --skip-disable-keys --single-transaction --set-gtid-purged=on --verbose > $KEYSPACE.sql; then + echo "mysqldump complete for database $KEYSPACE" + echo "Resetting slave.." + reset_slave + else + echo "mysqldump failed for database $KEYSPACE" + fi + fi + +else + + echo "No Actions to perform" + +fi diff --git a/examples/compose/lfixrepl.sh b/examples/compose/lfixrepl.sh new file mode 100644 index 00000000000..bd3e5646019 --- /dev/null +++ b/examples/compose/lfixrepl.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# 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. + +# Enable tty for Windows users using git-bash or cygwin +if [[ "$OSTYPE" == "msys" ]]; then + # Lightweight shell and GNU utilities compiled for Windows (part of MinGW) + tty=winpty + script=//script//fix_replication.sh +fi + +# This is a convenience script to fix replication on replicas. +exec $tty docker-compose exec ${CS:-vttablet2} ${script:-/script/fix_replication.sh} "$@" \ No newline at end of file diff --git a/examples/compose/lmysql.sh b/examples/compose/lmysql.sh new file mode 100644 index 00000000000..fb67c619d95 --- /dev/null +++ b/examples/compose/lmysql.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# 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. + +# Enable tty for Windows users using git-bash or cygwin +if [[ "$OSTYPE" == "msys" ]]; then + # Lightweight shell and GNU utilities compiled for Windows (part of MinGW) + tty=winpty +fi + +# This is a convenience script to run mysql client against the local example. +exec $tty docker-compose exec ${CS:-vttablet1} mysql "$@" diff --git a/examples/compose/lvtctl.sh b/examples/compose/lvtctl.sh index 19bd52582bb..83d9a7c3c61 100755 --- a/examples/compose/lvtctl.sh +++ b/examples/compose/lvtctl.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Copyright 2017 GitHub Inc. +# 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. @@ -14,5 +14,11 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Enable tty for Windows users using git-bash or cygwin +if [[ "$OSTYPE" == "msys" ]]; then + # Lightweight shell and GNU utilities compiled for Windows (part of MinGW) + tty=winpty +fi + # This is a convenience script to run vtctlclient against the local example. -exec docker-compose run vttablet1 vtctlclient -server vtctld:15999 "$@" +exec $tty docker-compose exec ${CS:-vttablet1} vtctlclient -server vtctld:15999 "$@" diff --git a/examples/compose/vttablet-up.sh b/examples/compose/vttablet-up.sh index efdb0f4d498..568e28684b3 100755 --- a/examples/compose/vttablet-up.sh +++ b/examples/compose/vttablet-up.sh @@ -5,26 +5,56 @@ set -u keyspace=${KEYSPACE:-'test_keyspace'} shard=${SHARD:-'0'} uid=$1 +external=${EXTERNAL_DB:-0} +db_name=${DB:-"$keyspace"} +db_charset=${DB_CHARSET:-''} +tablet_hostname='' + +# Use IPs to simplify connections when testing in docker. +# Otherwise, blank hostname means the tablet auto-detects FQDN. +if [ $external = 1 ]; then + tablet_hostname=`hostname -i` +fi printf -v alias '%s-%010d' $CELL $uid printf -v tablet_dir 'vt_%010d' $uid tablet_role='replica' +tablet_type='replica' if [ "$uid" = "1" ]; then tablet_role='master' fi -init_db_sql_file="$VTROOT/init_db.sql" -echo "GRANT ALL ON *.* TO 'root'@'%';" > $init_db_sql_file -echo "GRANT ALL ON *.* TO 'vt_dba'@'%';" >> $init_db_sql_file -echo "GRANT ALL ON *.* TO 'vt_app'@'%';" >> $init_db_sql_file -echo "GRANT ALL ON *.* TO 'vt_repl'@'%';" >> $init_db_sql_file +if (( $uid % 3 == 0 )) ; then + tablet_type='rdonly' +fi + +init_db_sql_file="$VTROOT/config/init_db.sql" -if [ "$tablet_role" = "master" ]; then - echo "CREATE DATABASE vt_$keyspace;" >> $init_db_sql_file +# Create database on master +if [[ "$tablet_role" = "master" ]]; then + echo "Add create database statement for master tablet: $uid..." + echo "CREATE DATABASE IF NOT EXISTS $db_name;" >> $init_db_sql_file +fi +# Create database on replicas +if [[ "$tablet_role" != "master" ]]; then + echo "Add create database statement for replicas tablet: $uid..." + if [[ "$external" = "1" ]]; then + # Add master character set and collation to avoid replication errors + # Example:CREATE DATABASE IF NOT EXISTS $keyspace CHARACTER SET latin1 COLLATE latin1_swedish_ci + echo "CREATE DATABASE IF NOT EXISTS $db_name $db_charset;" >> $init_db_sql_file + echo "Creating matching user for replicas..." + echo "CREATE USER IF NOT EXISTS '$DB_USER'@'%' IDENTIFIED BY '$DB_PASS';" >> $init_db_sql_file + echo "GRANT ALL ON *.* TO '$DB_USER'@'%';FLUSH PRIVILEGES;" >> $init_db_sql_file + # Prevent replication failures in case external db server has multiple databases which have not been created here + echo "replicate-do-db=$keyspace" >> $VTROOT/config/mycnf/rbr.cnf + else + echo "CREATE DATABASE IF NOT EXISTS $db_name;" >> $init_db_sql_file + fi fi -export EXTRA_MY_CNF=$VTROOT/config/mycnf/master_mysql56.cnf +export EXTRA_MY_CNF=$VTROOT/config/mycnf/default-fast.cnf:$VTROOT/config/mycnf/rbr.cnf +export EXTRA_MY_CNF=$EXTRA_MY_CNF:$VTROOT/config/mycnf/master_mysql56.cnf mkdir -p $VTDATAROOT/backups @@ -42,14 +72,22 @@ export TABLET_ID=$alias export TABLET_DIR=$tablet_dir export MYSQL_PORT=3306 export TABLET_TYPE=$tablet_role - -$VTROOT/bin/mysqlctl \ - -log_dir $VTDATAROOT/tmp \ - -tablet_uid $uid \ - -mysql_port 3306 \ - $action & - -wait +export DB_PORT=${DB_PORT:-3306} +export DB_HOST=${DB_HOST:-""} +export DB_NAME=$db_name + +# Create mysql instances +# Do not create mysql instance for master if connecting to external mysql database +if [[ $uid -gt 1 || $external = 0 ]]; then + echo "Initing mysql for tablet: $uid.. " + $VTROOT/bin/mysqlctl \ + -log_dir $VTDATAROOT/tmp \ + -tablet_uid $uid \ + -mysql_port 3306 \ + $action & + + wait +fi $VTROOT/bin/vtctl $TOPOLOGY_FLAGS AddCellInfo -root vitess/$CELL -server_address consul1:8500 $CELL @@ -58,12 +96,48 @@ $VTROOT/bin/vtctl $TOPOLOGY_FLAGS CreateShard $keyspace/$shard $VTROOT/bin/vtctl $TOPOLOGY_FLAGS InitTablet -shard $shard -keyspace $keyspace -allow_master_override $alias $tablet_role + +#Populate external db conditional args +if [[ "$external" = "1" ]]; then + if [[ "$uid" = "1" ]]; then + echo "Setting external db args for master: $DB_NAME" + external_db_args="-db_host $DB_HOST \ + -db_port $DB_PORT \ + -init_db_name_override $DB_NAME \ + -mycnf_server_id $uid \ + -db_app_user $DB_USER \ + -db_app_password $DB_PASS \ + -db_allprivs_user $DB_USER \ + -db_allprivs_password $DB_PASS \ + -db_appdebug_user $DB_USER \ + -db_appdebug_password $DB_PASS \ + -db_dba_user $DB_USER \ + -db_dba_password $DB_PASS \ + -db_filtered_user $DB_USER \ + -db_filtered_password $DB_PASS \ + -db_repl_user $DB_USER \ + -db_repl_password $DB_PASS" + else + echo "Setting external db args for replicas" + external_db_args="-init_db_name_override $DB_NAME \ + -db_filtered_user $DB_USER \ + -db_filtered_password $DB_PASS \ + -db_repl_user $DB_USER \ + -db_repl_password $DB_PASS \ + -restore_from_backup" + fi +else + external_db_args="-init_db_name_override $DB_NAME \ + -restore_from_backup" +fi + + echo "Starting vttablet..." exec $VTROOT/bin/vttablet \ $TOPOLOGY_FLAGS \ -logtostderr=true \ -tablet-path $alias \ - -tablet_hostname "" \ + -tablet_hostname "$tablet_hostname" \ -health_check_interval 5s \ -enable_semi_sync \ -enable_replication_reporter \ @@ -71,4 +145,12 @@ exec $VTROOT/bin/vttablet \ -grpc_port $GRPC_PORT \ -service_map 'grpc-queryservice,grpc-tabletmanager,grpc-updatestream' \ -pid_file $VTDATAROOT/$tablet_dir/vttablet.pid \ - -vtctld_addr "http://vtctld:$WEB_PORT/" + -vtctld_addr "http://vtctld:$WEB_PORT/" \ + -init_keyspace $keyspace \ + -init_shard $shard \ + -init_tablet_type $tablet_type \ + -backup_storage_implementation file \ + -file_backup_storage_root $VTDATAROOT/backups \ + -queryserver-config-schema-reload-time 60 \ + $external_db_args + diff --git a/examples/kubernetes/etcd-service-template.yaml b/examples/kubernetes/etcd-service-template.yaml index 3af39443baa..9aceaec4b33 100644 --- a/examples/kubernetes/etcd-service-template.yaml +++ b/examples/kubernetes/etcd-service-template.yaml @@ -5,3 +5,10 @@ metadata: spec: size: {{replicas}} version: "3.1.8" + repository: "quay.io/coreos/etcd" + pod: + labels: + component: etcd + cell: {{cell}} + application: vitess + busyboxImage: "busybox:1.28.0-glibc" diff --git a/examples/local/101_initial_cluster.sh b/examples/local/101_initial_cluster.sh index a3f9793f290..8c254c5bf66 100755 --- a/examples/local/101_initial_cluster.sh +++ b/examples/local/101_initial_cluster.sh @@ -23,10 +23,10 @@ set -e script_root=$(dirname "${BASH_SOURCE}") # start topo server -if [ "${TOPO}" = "etcd2" ]; then - CELL=zone1 "$script_root/etcd-up.sh" -else +if [ "${TOPO}" = "zk2" ]; then CELL=zone1 "$script_root/zk-up.sh" +else + CELL=zone1 "$script_root/etcd-up.sh" fi # start vtctld diff --git a/examples/local/401_teardown.sh b/examples/local/401_teardown.sh index 90b781fdd0e..76431bd684e 100755 --- a/examples/local/401_teardown.sh +++ b/examples/local/401_teardown.sh @@ -30,10 +30,10 @@ CELL=zone1 UID_BASE=300 "$script_root/vttablet-down.sh" CELL=zone1 UID_BASE=400 "$script_root/vttablet-down.sh" ./vtctld-down.sh -if [ "${TOPO}" = "etcd2" ]; then - CELL=zone1 "$script_root/etcd-down.sh" -else +if [ "${TOPO}" = "zk2" ]; then CELL=zone1 "$script_root/zk-down.sh" +else + CELL=zone1 "$script_root/etcd-down.sh" fi rm -r $VTDATAROOT/* diff --git a/examples/local/env.sh b/examples/local/env.sh index 608725a2487..2c84798747f 100644 --- a/examples/local/env.sh +++ b/examples/local/env.sh @@ -29,32 +29,10 @@ if [ -z "$VT_MYSQL_ROOT" ]; then export VT_MYSQL_ROOT=$(dirname `dirname $mysql_path`) fi -# restore MYSQL_FLAVOR, saved by bootstrap.sh -if [ -r "$VTROOT/dist/MYSQL_FLAVOR" ]; then - MYSQL_FLAVOR=$(cat "$VTROOT/dist/MYSQL_FLAVOR") - export MYSQL_FLAVOR -fi - -if [ -z "$MYSQL_FLAVOR" ]; then - export MYSQL_FLAVOR=MySQL56 -fi - -if [ "${TOPO}" = "etcd2" ]; then - echo "enter etcd2 env" +# Previously the file specified MYSQL_FLAVOR +# it is now autodetected - case $(uname) in - Linux) etcd_platform=linux;; - Darwin) etcd_platform=darwin;; - esac - - ETCD_SERVER="localhost:2379" - ETCD_VERSION=$(cat "${VTROOT}/dist/etcd/.installed_version") - ETCD_BINDIR="${VTROOT}/dist/etcd/etcd-${ETCD_VERSION}-${etcd_platform}-amd64/" - TOPOLOGY_FLAGS="-topo_implementation etcd2 -topo_global_server_address $ETCD_SERVER -topo_global_root /vitess/global" - - mkdir -p "${VTDATAROOT}/tmp" - mkdir -p "${VTDATAROOT}/etcd" -else +if [ "${TOPO}" = "zk2" ]; then # Each ZooKeeper server needs a list of all servers in the quorum. # Since we're running them all locally, we need to give them unique ports. # In a real deployment, these should be on different machines, and their @@ -76,6 +54,19 @@ else TOPOLOGY_FLAGS="-topo_implementation zk2 -topo_global_server_address ${ZK_SERVER} -topo_global_root /vitess/global" mkdir -p $VTDATAROOT/tmp -fi +else + echo "enter etcd2 env" + + case $(uname) in + Linux) etcd_platform=linux;; + Darwin) etcd_platform=darwin;; + esac + ETCD_SERVER="localhost:2379" + ETCD_VERSION=$(cat "${VTROOT}/dist/etcd/.installed_version") + ETCD_BINDIR="${VTROOT}/dist/etcd/etcd-${ETCD_VERSION}-${etcd_platform}-amd64/" + TOPOLOGY_FLAGS="-topo_implementation etcd2 -topo_global_server_address $ETCD_SERVER -topo_global_root /vitess/global" + mkdir -p "${VTDATAROOT}/tmp" + mkdir -p "${VTDATAROOT}/etcd" +fi diff --git a/examples/local/vttablet-up.sh b/examples/local/vttablet-up.sh index 1af650a921d..75c3b191d04 100755 --- a/examples/local/vttablet-up.sh +++ b/examples/local/vttablet-up.sh @@ -38,20 +38,10 @@ source $script_root/env.sh init_db_sql_file="$VTROOT/config/init_db.sql" -export EXTRA_MY_CNF=$VTROOT/config/mycnf/default-fast.cnf:$VTROOT/config/mycnf/rbr.cnf +# Previously this file set EXTRA_MY_CNF based on MYSQL_FLAVOR +# It now relies on mysqlctl to autodetect -case "$MYSQL_FLAVOR" in - "MySQL56") - export EXTRA_MY_CNF=$EXTRA_MY_CNF:$VTROOT/config/mycnf/master_mysql56.cnf - ;; - "MariaDB") - export EXTRA_MY_CNF=$EXTRA_MY_CNF:$VTROOT/config/mycnf/master_mariadb.cnf - ;; - *) - echo "Please set MYSQL_FLAVOR to MySQL56 or MariaDB." - exit 1 - ;; -esac +export EXTRA_MY_CNF=$VTROOT/config/mycnf/default-fast.cnf:$VTROOT/config/mycnf/rbr.cnf mkdir -p $VTDATAROOT/backups diff --git a/go/cmd/vtbackup/vtbackup.go b/go/cmd/vtbackup/vtbackup.go index e2f0e3e1768..8d419fee83c 100644 --- a/go/cmd/vtbackup/vtbackup.go +++ b/go/cmd/vtbackup/vtbackup.go @@ -60,6 +60,7 @@ package main import ( "context" "crypto/rand" + "encoding/json" "flag" "fmt" "math" @@ -87,12 +88,17 @@ import ( const ( backupTimestampFormat = "2006-01-02.150405" + manifestFileName = "MANIFEST" ) var ( // vtbackup-specific flags - timeout = flag.Duration("timeout", 2*time.Hour, "Overall timeout for this whole vtbackup run, including restoring the previous backup, waiting for replication, and uploading files") - replicationTimeout = flag.Duration("replication_timeout", 1*time.Hour, "The timeout for the step of waiting for replication to catch up. If progress is made before this timeout is reached, the backup will be taken anyway to save partial progress, but vtbackup will return a non-zero exit code to indicate it should be retried since not all expected data was backed up") + // We used to have timeouts, but these did more harm than good. If a backup + // has been going for a while, giving up and starting over from scratch is + // pretty much never going to help. We should just keep trying and have a + // system that alerts a human if it's taking longer than expected. + _ = flag.Duration("timeout", 2*time.Hour, "DEPRECATED AND UNUSED") + _ = flag.Duration("replication_timeout", 1*time.Hour, "DEPRECATED AND UNUSED") minBackupInterval = flag.Duration("min_backup_interval", 0, "Only take a new backup if it's been at least this long since the most recent backup.") minRetentionTime = flag.Duration("min_retention_time", 0, "Keep each old backup for at least this long before removing it. Set to 0 to disable pruning of old backups.") @@ -128,8 +134,7 @@ func main() { exit.Return(1) } - ctx, cancel := context.WithTimeout(context.Background(), *timeout) - defer cancel() + ctx := context.Background() // Open connection backup storage. backupDir := fmt.Sprintf("%v/%v", *initKeyspace, *initShard) @@ -289,13 +294,6 @@ func takeBackup(ctx context.Context, topoServer *topo.Server, backupStorage back for { time.Sleep(time.Second) - // Check if the replication context is still good. - if time.Since(waitStartTime) > *replicationTimeout { - // If we time out on this step, we still might take the backup anyway. - log.Errorf("Timed out waiting for replication to catch up to %v.", masterPos) - break - } - status, statusErr := mysqld.SlaveStatus() if statusErr != nil { log.Warningf("Error getting replication status: %v", statusErr) @@ -522,13 +520,21 @@ func shouldBackup(ctx context.Context, topoServer *topo.Server, backupStorage ba if len(backups) == 0 && !*allowFirstBackup { return false, fmt.Errorf("no existing backups to restore from; backup is not possible since -initial_backup flag was not enabled") } + // Look for the most recent, complete backup. + lastBackup := lastCompleteBackup(ctx, backups) + if lastBackup == nil { + if *allowFirstBackup { + // There's no complete backup, but we were told to take one from scratch anyway. + return true, nil + } + return false, fmt.Errorf("no complete backups to restore from; backup is not possible since -initial_backup flag was not enabled") + } - // Has it been long enough since the last backup to need a new one? + // Has it been long enough since the last complete backup to need a new one? if *minBackupInterval == 0 { // No minimum interval is set, so always backup. return true, nil } - lastBackup := backups[len(backups)-1] lastBackupTime, err := parseBackupTime(lastBackup.Name()) if err != nil { return false, fmt.Errorf("can't check last backup time: %v", err) @@ -542,3 +548,47 @@ func shouldBackup(ctx context.Context, topoServer *topo.Server, backupStorage ba log.Infof("The last backup was taken at %v, which is older than the min_backup_interval of %v.", lastBackupTime, *minBackupInterval) return true, nil } + +func lastCompleteBackup(ctx context.Context, backups []backupstorage.BackupHandle) backupstorage.BackupHandle { + if len(backups) == 0 { + return nil + } + + // Backups are sorted in ascending order by start time. Start at the end. + for i := len(backups) - 1; i >= 0; i-- { + // Check if this backup is complete by looking for the MANIFEST file, + // which is written at the end after all files are uploaded. + backup := backups[i] + if err := checkBackupComplete(ctx, backup); err != nil { + log.Warningf("Ignoring backup %v because it's incomplete: %v", backup.Name(), err) + continue + } + return backup + } + + return nil +} + +// partialManifest is a struct into which we deserialize the MANIFEST file. +// This only contains the fields that are common to all Vitess backup engines. +// Other fields in the MANIFEST file will be ignored during deserialization. +type partialManifest struct { + // Position is the position at which the backup was taken + Position mysql.Position +} + +func checkBackupComplete(ctx context.Context, backup backupstorage.BackupHandle) error { + file, err := backup.ReadFile(ctx, manifestFileName) + if err != nil { + return fmt.Errorf("can't read MANIFEST: %v", err) + } + defer file.Close() + + manifest := partialManifest{} + if err := json.NewDecoder(file).Decode(&manifest); err != nil { + return fmt.Errorf("can't decode MANIFEST: %v", err) + } + + log.Infof("Found complete backup %v taken at position %v", backup.Name(), manifest.Position.String()) + return nil +} diff --git a/go/cmd/vtbench/vtbench.go b/go/cmd/vtbench/vtbench.go index eb18d9a2b22..3482995424e 100644 --- a/go/cmd/vtbench/vtbench.go +++ b/go/cmd/vtbench/vtbench.go @@ -29,7 +29,9 @@ import ( "vitess.io/vitess/go/vt/logutil" "vitess.io/vitess/go/vtbench" + // Import and register the gRPC vtgateconn client _ "vitess.io/vitess/go/vt/vtgate/grpcvtgateconn" + // Import and register the gRPC tabletconn client _ "vitess.io/vitess/go/vt/vttablet/grpctabletconn" ) diff --git a/go/cmd/vtgateclienttest/services/echo.go b/go/cmd/vtgateclienttest/services/echo.go index edb05ddcf9e..6435324ea82 100644 --- a/go/cmd/vtgateclienttest/services/echo.go +++ b/go/cmd/vtgateclienttest/services/echo.go @@ -29,6 +29,7 @@ import ( "vitess.io/vitess/go/vt/callerid" "vitess.io/vitess/go/vt/vtgate/vtgateservice" + binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" querypb "vitess.io/vitess/go/vt/proto/query" topodatapb "vitess.io/vitess/go/vt/proto/topodata" vtgatepb "vitess.io/vitess/go/vt/proto/vtgate" @@ -395,3 +396,33 @@ func (c *echoClient) UpdateStream(ctx context.Context, keyspace string, shard st } return c.fallbackClient.UpdateStream(ctx, keyspace, shard, keyRange, tabletType, timestamp, event, callback) } + +func (c *echoClient) VStream(ctx context.Context, tabletType topodatapb.TabletType, vgtid *binlogdatapb.VGtid, filter *binlogdatapb.Filter, callback func([]*binlogdatapb.VEvent) error) error { + if strings.HasPrefix(vgtid.ShardGtids[0].Shard, EchoPrefix) { + _ = callback([]*binlogdatapb.VEvent{ + { + Type: 1, + Timestamp: 1234, + Gtid: "echo-gtid-1", + Ddl: "echo-ddl-1", + Vgtid: vgtid, + RowEvent: &binlogdatapb.RowEvent{ + TableName: "echo-table-1", + }, + }, + { + Type: 2, + Timestamp: 4321, + Gtid: "echo-gtid-2", + Ddl: "echo-ddl-2", + Vgtid: vgtid, + FieldEvent: &binlogdatapb.FieldEvent{ + TableName: "echo-table-2", + }, + }, + }) + return nil + } + + return c.fallbackClient.VStream(ctx, tabletType, vgtid, filter, callback) +} diff --git a/go/cmd/vttestserver/data/schema/app_customer/v001__create_customer_table.sql b/go/cmd/vttestserver/data/schema/app_customer/v001__create_customer_table.sql new file mode 100644 index 00000000000..25eb226f006 --- /dev/null +++ b/go/cmd/vttestserver/data/schema/app_customer/v001__create_customer_table.sql @@ -0,0 +1,7 @@ +create table customers ( + id bigint, + name varchar(64), + age SMALLINT, + primary key (id) +) Engine=InnoDB; + diff --git a/go/cmd/vttestserver/data/schema/app_customer/v002__add_customer_vschema.sql b/go/cmd/vttestserver/data/schema/app_customer/v002__add_customer_vschema.sql new file mode 100644 index 00000000000..300e7e9e41e --- /dev/null +++ b/go/cmd/vttestserver/data/schema/app_customer/v002__add_customer_vschema.sql @@ -0,0 +1 @@ +alter vschema on customers add vindex hash (id); \ No newline at end of file diff --git a/go/cmd/vttestserver/data/schema/app_customer/vschema.json b/go/cmd/vttestserver/data/schema/app_customer/vschema.json new file mode 100644 index 00000000000..cdeb6545df9 --- /dev/null +++ b/go/cmd/vttestserver/data/schema/app_customer/vschema.json @@ -0,0 +1,10 @@ +{ + "sharded": true, + "vindexes": { + "hash": { + "type": "hash" + } + }, + "tables": { + } +} \ No newline at end of file diff --git a/go/cmd/vttestserver/data/schema/test_keyspace/v001__create_test_table.sql b/go/cmd/vttestserver/data/schema/test_keyspace/v001__create_test_table.sql new file mode 100644 index 00000000000..e0ef23320ee --- /dev/null +++ b/go/cmd/vttestserver/data/schema/test_keyspace/v001__create_test_table.sql @@ -0,0 +1,12 @@ +create table test_table ( + id bigint, + name varchar(64), + age SMALLINT, + percent DECIMAL(5,2), + datetime_col DATETIME, + timestamp_col TIMESTAMP, + date_col DATE, + time_col TIME, + primary key (id) +) Engine=InnoDB; + diff --git a/go/cmd/vttestserver/data/schema/test_keyspace/v002__create_hash_vindex.sql b/go/cmd/vttestserver/data/schema/test_keyspace/v002__create_hash_vindex.sql new file mode 100644 index 00000000000..f1333a384fa --- /dev/null +++ b/go/cmd/vttestserver/data/schema/test_keyspace/v002__create_hash_vindex.sql @@ -0,0 +1 @@ +alter vschema create vindex my_vdx using hash \ No newline at end of file diff --git a/go/cmd/vttestserver/data/schema/test_keyspace/v003__add_table_vschema.sql b/go/cmd/vttestserver/data/schema/test_keyspace/v003__add_table_vschema.sql new file mode 100644 index 00000000000..7cdccd02077 --- /dev/null +++ b/go/cmd/vttestserver/data/schema/test_keyspace/v003__add_table_vschema.sql @@ -0,0 +1 @@ +alter vschema on test_table add vindex my_vdx (id) \ No newline at end of file diff --git a/go/cmd/vttestserver/data/schema/test_keyspace/v004__create_test_table1.sql b/go/cmd/vttestserver/data/schema/test_keyspace/v004__create_test_table1.sql new file mode 100644 index 00000000000..79aea4379ab --- /dev/null +++ b/go/cmd/vttestserver/data/schema/test_keyspace/v004__create_test_table1.sql @@ -0,0 +1,11 @@ +create table test_table1 ( + id bigint, + name varchar(64), + age SMALLINT, + percent DECIMAL(5,2), + datetime_col DATETIME, + timestamp_col TIMESTAMP, + date_col DATE, + time_col TIME, + primary key (id) +) Engine=InnoDB; \ No newline at end of file diff --git a/go/cmd/vttestserver/main.go b/go/cmd/vttestserver/main.go index 65614d80ace..e6280af194e 100644 --- a/go/cmd/vttestserver/main.go +++ b/go/cmd/vttestserver/main.go @@ -152,6 +152,8 @@ func parseFlags() (config vttest.Config, env vttest.Environment, err error) { flag.StringVar(&config.TransactionMode, "transaction_mode", "MULTI", "Transaction mode MULTI (default), SINGLE or TWOPC ") flag.Float64Var(&config.TransactionTimeout, "queryserver-config-transaction-timeout", 0, "query server transaction timeout (in seconds), a transaction will be killed if it takes longer than this value") + flag.StringVar(&config.TabletHostName, "tablet_hostname", "localhost", "The hostname to use for the tablet otherwise it will be derived from OS' hostname") + flag.Parse() if basePort != 0 { @@ -197,32 +199,34 @@ func parseFlags() (config vttest.Config, env vttest.Environment, err error) { } func main() { + cluster := runCluster() + defer cluster.TearDown() + + kvconf := cluster.JSONConfig() + if err := json.NewEncoder(os.Stdout).Encode(kvconf); err != nil { + log.Fatal(err) + } + + select {} +} + +func runCluster() vttest.LocalCluster { config, env, err := parseFlags() if err != nil { log.Fatal(err) } - log.Infof("Starting local cluster...") log.Infof("config: %#v", config) - cluster := vttest.LocalCluster{ Config: config, Env: env, } - err = cluster.Setup() - defer cluster.TearDown() - if err != nil { log.Fatal(err) } - kvconf := cluster.JSONConfig() - if err := json.NewEncoder(os.Stdout).Encode(kvconf); err != nil { - log.Fatal(err) - } - log.Info("Local cluster started.") - select {} + return cluster } diff --git a/go/cmd/vttestserver/vttestserver_test.go b/go/cmd/vttestserver/vttestserver_test.go new file mode 100644 index 00000000000..79d246efbfa --- /dev/null +++ b/go/cmd/vttestserver/vttestserver_test.go @@ -0,0 +1,68 @@ +package main + +import ( + "context" + "fmt" + "os" + "testing" + + "vitess.io/vitess/go/vt/vttest" + + "github.com/golang/protobuf/jsonpb" + "vitess.io/vitess/go/vt/proto/logutil" + "vitess.io/vitess/go/vt/proto/vschema" + "vitess.io/vitess/go/vt/vtctl/vtctlclient" +) + +type columnVindex struct { + keyspace string + table string + vindex string + vindexType string + column string +} + +func TestRunsVschemaMigrations(t *testing.T) { + schemaDirArg := "-schema_dir=data/schema" + webDirArg := "-web_dir=web/vtctld/app" + webDir2Arg := "-web_dir2=web/vtctld2/app" + tabletHostname := "-tablet_hostname=localhost" + keyspaceArg := "-keyspaces=test_keyspace,app_customer" + numShardsArg := "-num_shards=2,2" + + os.Args = append(os.Args, []string{schemaDirArg, keyspaceArg, numShardsArg, webDirArg, webDir2Arg, tabletHostname}...) + + cluster := runCluster() + defer cluster.TearDown() + + assertColumnVindex(t, cluster, columnVindex{keyspace: "test_keyspace", table: "test_table", vindex: "my_vdx", vindexType: "hash", column: "id"}) + assertColumnVindex(t, cluster, columnVindex{keyspace: "app_customer", table: "customers", vindex: "hash", vindexType: "hash", column: "id"}) +} + +func assertColumnVindex(t *testing.T, cluster vttest.LocalCluster, expected columnVindex) { + server := fmt.Sprintf("localhost:%v", cluster.GrpcPort()) + args := []string{"GetVSchema", expected.keyspace} + ctx := context.Background() + + err := vtctlclient.RunCommandAndWait(ctx, server, args, func(e *logutil.Event) { + var keyspace vschema.Keyspace + if err := jsonpb.UnmarshalString(e.Value, &keyspace); err != nil { + t.Error(err) + } + + columnVindex := keyspace.Tables[expected.table].ColumnVindexes[0] + actualVindex := keyspace.Vindexes[expected.vindex] + assertEqual(t, actualVindex.Type, expected.vindexType, "Actual vindex type different from expected") + assertEqual(t, columnVindex.Name, expected.vindex, "Actual vindex name different from expected") + assertEqual(t, columnVindex.Columns[0], expected.column, "Actual vindex column different from expected") + }) + if err != nil { + t.Error(err) + } +} + +func assertEqual(t *testing.T, actual string, expected string, message string) { + if actual != expected { + t.Errorf("%s: actual %s, expected %s", message, actual, expected) + } +} diff --git a/go/cmd/zk/zkcmd.go b/go/cmd/zk/zkcmd.go index 6b57a666423..c6cf45e6b53 100644 --- a/go/cmd/zk/zkcmd.go +++ b/go/cmd/zk/zkcmd.go @@ -32,7 +32,7 @@ import ( "syscall" "time" - "github.com/samuel/go-zookeeper/zk" + "github.com/z-division/go-zookeeper/zk" "golang.org/x/crypto/ssh/terminal" "golang.org/x/net/context" diff --git a/go/mysql/binlog_event_json.go b/go/mysql/binlog_event_json.go index 5f662dad36f..a14e18188b7 100644 --- a/go/mysql/binlog_event_json.go +++ b/go/mysql/binlog_event_json.go @@ -335,7 +335,7 @@ func printJSONDouble(data []byte, toplevel bool, result *bytes.Buffer) { } func printJSONString(data []byte, toplevel bool, result *bytes.Buffer) { - size, pos := readVariableInt(data, 0) + size, pos := readVariableLength(data, 0) // A toplevel JSON string is printed as a JSON-escaped // string inside a string, as the value is parsed as JSON. @@ -356,7 +356,7 @@ func printJSONString(data []byte, toplevel bool, result *bytes.Buffer) { func printJSONOpaque(data []byte, toplevel bool, result *bytes.Buffer) error { typ := data[0] - size, pos := readVariableInt(data, 1) + size, pos := readVariableLength(data, 1) // A few types have special encoding. switch typ { @@ -483,16 +483,24 @@ func readOffsetOrSize(data []byte, pos int, large bool) (int, int) { int(data[pos+1])<<8, pos + 2 } -func readVariableInt(data []byte, pos int) (int, int) { - var b int8 - var result int +// readVariableLength implements the logic to decode the length +// of an arbitrarily long string as implemented by the mysql server +// https://github.com/mysql/mysql-server/blob/5.7/sql/json_binary.cc#L234 +// https://github.com/mysql/mysql-server/blob/8.0/sql/json_binary.cc#L283 +func readVariableLength(data []byte, pos int) (int, int) { + var bb byte + var res int + var idx byte for { - b = int8(data[pos]) + bb = data[pos] pos++ - result = (result << 7) + int(b&0x7f) - if b >= 0 { + res |= int(bb&0x7f) << (7 * idx) + // if the high bit is 1, the integer value of the byte will be negative + // high bit of 1 signifies that the next byte is part of the length encoding + if int8(bb) >= 0 { break } + idx++ } - return result, pos + return res, pos } diff --git a/go/mysql/binlog_event_json_test.go b/go/mysql/binlog_event_json_test.go index f49350324ef..d9bff262609 100644 --- a/go/mysql/binlog_event_json_test.go +++ b/go/mysql/binlog_event_json_test.go @@ -17,6 +17,8 @@ limitations under the License. package mysql import ( + "fmt" + "reflect" "strings" "testing" ) @@ -34,6 +36,9 @@ func TestJSON(t *testing.T) { }, { data: []byte{0, 1, 0, 12, 0, 11, 0, 1, 0, 5, 2, 0, 97}, expected: `JSON_OBJECT('a',2)`, + }, { + data: []byte{0, 1, 0, 29, 0, 11, 0, 4, 0, 0, 15, 0, 97, 115, 100, 102, 1, 0, 14, 0, 11, 0, 3, 0, 5, 123, 0, 102, 111, 111}, + expected: `JSON_OBJECT('asdf',JSON_OBJECT('foo',123))`, }, { data: []byte{2, 2, 0, 10, 0, 5, 1, 0, 5, 2, 0}, expected: `JSON_ARRAY(1,2)`, @@ -47,9 +52,12 @@ func TestJSON(t *testing.T) { data: []byte{12, 13, 115, 99, 97, 108, 97, 114, 32, 115, 116, 114, 105, 110, 103}, expected: `'"scalar string"'`, }, { - // repeat the same string 10 times, to test readVariableInt when length of string + data: []byte{0, 1, 0, 149, 0, 11, 0, 6, 0, 12, 17, 0, 115, 99, 111, 112, 101, 115, 130, 1, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 69, 65, 65, 65, 65, 65, 65, 69, 65, 65, 65, 65, 65, 65, 56, 65, 65, 65, 66, 103, 65, 65, 65, 65, 65, 65, 66, 65, 65, 65, 65, 67, 65, 65, 65, 65, 65, 65, 65, 65, 65, 84, 216, 142, 184}, + expected: `JSON_OBJECT('scopes','AAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAEAAAAAAEAAAAAA8AAABgAAAAAABAAAACAAAAAAAAA')`, + }, { + // repeat the same string 10 times, to test the case where length of string // requires 2 bytes to store - data: []byte{12, 129, 2, + data: []byte{12, 130, 1, 115, 99, 97, 108, 97, 114, 32, 115, 116, 114, 105, 110, 103, 115, 99, 97, 108, 97, 114, 32, 115, 116, 114, 105, 110, 103, 115, 99, 97, 108, 97, 114, 32, 115, 116, 114, 105, 110, 103, @@ -146,14 +154,65 @@ func TestJSON(t *testing.T) { r, err := printJSONData(tcase.data) if err != nil { if got := err.Error(); !strings.HasPrefix(got, tcase.expected) { - t.Errorf("unexpected output for %v: got [%v] expected [%v]", tcase.data, got, tcase.expected) + t.Errorf("unexpected output for %v: got \n[%v] \n expected \n[%v]", tcase.data, got, tcase.expected) } } else { if got := string(r); got != tcase.expected { - t.Errorf("unexpected output for %v: got [%v] expected [%v]", tcase.data, got, tcase.expected) + t.Errorf("unexpected output for %v: got \n[%v] \n expected \n[%v]", tcase.data, got, tcase.expected) } } }) } } + +func TestReadVariableLength(t *testing.T) { + testcases := []struct { + data []byte + expected []int + }{{ + // we are only providing a truncated form of data, + // when this is actually used data will have another + // 126 bytes + data: []byte{12, 127, 1}, + expected: []int{127, 2}, + }, { + data: []byte{12, 127, 2}, + expected: []int{127, 2}, + }, { + data: []byte{12, 129, 1}, + expected: []int{129, 3}, + }, { + data: []byte{12, 129, 2}, + expected: []int{257, 3}, + }, { + data: []byte{12, 130, 1}, + expected: []int{130, 3}, + }, { + data: []byte{12, 130, 2}, + expected: []int{258, 3}, + }, { + data: []byte{12, 132, 1}, + expected: []int{132, 3}, + }, { + data: []byte{12, 132, 2}, + expected: []int{260, 3}, + }, { + data: []byte{12, 130, 130, 1}, + expected: []int{16642, 4}, + }, { + data: []byte{12, 130, 130, 2}, + expected: []int{33026, 4}, + }} + for _, tcase := range testcases { + t.Run(fmt.Sprintf("%v", tcase.data[1:]), func(t *testing.T) { + // start from position 1 because position 0 has the JSON type + len, pos := readVariableLength(tcase.data, 1) + if got := []int{len, pos}; !reflect.DeepEqual(got, tcase.expected) { + t.Errorf("unexpected output for %v: got \n[%v] \n expected \n[%v]", tcase.data, got, tcase.expected) + } + + }) + } + +} diff --git a/go/mysql/conn.go b/go/mysql/conn.go index 8fdaa2d45e5..42b8215c86c 100644 --- a/go/mysql/conn.go +++ b/go/mysql/conn.go @@ -157,6 +157,22 @@ type Conn struct { // currentEphemeralBuffer for tracking allocated temporary buffer for writes and reads respectively. // It can be allocated from bufPool or heap and should be recycled in the same manner. currentEphemeralBuffer *[]byte + + // StatementID is the prepared statement ID. + StatementID uint32 + + // PrepareData is the map to use a prepared statement. + PrepareData map[uint32]*PrepareData +} + +// PrepareData is a buffer used for store prepare statement meta data +type PrepareData struct { + StatementID uint32 + PrepareStmt string + ParamsCount uint16 + ParamsType []int32 + ColumnNames []string + BindVars map[string]*querypb.BindVariable } // bufPool is used to allocate and free buffers in an efficient way. @@ -182,9 +198,10 @@ func newConn(conn net.Conn) *Conn { // size for reads. func newServerConn(conn net.Conn, listener *Listener) *Conn { c := &Conn{ - conn: conn, - listener: listener, - closed: sync2.NewAtomicBool(false), + conn: conn, + listener: listener, + closed: sync2.NewAtomicBool(false), + PrepareData: make(map[uint32]*PrepareData), } if listener.connReadBufferSize > 0 { c.bufferedReader = bufio.NewReaderSize(conn, listener.connReadBufferSize) @@ -801,6 +818,226 @@ func (c *Conn) handleNextCommand(handler Handler) error { return err } } + case ComPrepare: + query := c.parseComPrepare(data) + c.recycleReadPacket() + + var queries []string + if c.Capabilities&CapabilityClientMultiStatements != 0 { + queries, err = sqlparser.SplitStatementToPieces(query) + if err != nil { + log.Errorf("Conn %v: Error splitting query: %v", c, err) + if werr := c.writeErrorPacketFromError(err); werr != nil { + // If we can't even write the error, we're done. + log.Errorf("Conn %v: Error writing query error: %v", c, werr) + return werr + } + } + } else { + queries = []string{query} + } + + if len(queries) != 1 { + return fmt.Errorf("can not prepare multiple statements") + } + + // Popoulate PrepareData + c.StatementID++ + prepare := &PrepareData{ + StatementID: c.StatementID, + PrepareStmt: queries[0], + } + + statement, err := sqlparser.ParseStrictDDL(query) + if err != nil { + return err + } + + paramsCount := uint16(0) + _ = sqlparser.Walk(func(node sqlparser.SQLNode) (bool, error) { + switch node := node.(type) { + case *sqlparser.SQLVal: + if strings.HasPrefix(string(node.Val), ":v") { + paramsCount++ + } + } + return true, nil + }, statement) + + if paramsCount > 0 { + prepare.ParamsCount = paramsCount + prepare.ParamsType = make([]int32, paramsCount) + prepare.BindVars = make(map[string]*querypb.BindVariable, paramsCount) + } + + c.PrepareData[c.StatementID] = prepare + + fld, err := handler.ComPrepare(c, queries[0]) + + if err != nil { + if werr := c.writeErrorPacketFromError(err); werr != nil { + // If we can't even write the error, we're done. + log.Error("Error writing query error to client %v: %v", c.ConnectionID, werr) + return werr + } + return nil + } + + if err := c.writePrepare(fld, c.PrepareData[c.StatementID]); err != nil { + return err + } + + case ComStmtExecute: + queryStart := time.Now() + stmtID, _, err := c.parseComStmtExecute(c.PrepareData, data) + c.recycleReadPacket() + + if stmtID != uint32(0) { + defer func() { + prepare := c.PrepareData[stmtID] + if prepare.BindVars != nil { + for k := range prepare.BindVars { + prepare.BindVars[k] = nil + } + } + }() + } + + if err != nil { + if werr := c.writeErrorPacketFromError(err); werr != nil { + // If we can't even write the error, we're done. + log.Error("Error writing query error to client %v: %v", c.ConnectionID, werr) + return werr + } + return nil + } + + fieldSent := false + // sendFinished is set if the response should just be an OK packet. + sendFinished := false + prepare := c.PrepareData[stmtID] + err = handler.ComStmtExecute(c, prepare, func(qr *sqltypes.Result) error { + if sendFinished { + // Failsafe: Unreachable if server is well-behaved. + return io.EOF + } + + if !fieldSent { + fieldSent = true + + if len(qr.Fields) == 0 { + sendFinished = true + // We should not send any more packets after this. + return c.writeOKPacket(qr.RowsAffected, qr.InsertID, c.StatusFlags, 0) + } + if err := c.writeFields(qr); err != nil { + return err + } + } + + return c.writeBinaryRows(qr) + }) + + // If no field was sent, we expect an error. + if !fieldSent { + // This is just a failsafe. Should never happen. + if err == nil || err == io.EOF { + err = NewSQLErrorFromError(errors.New("unexpected: query ended without no results and no error")) + } + if werr := c.writeErrorPacketFromError(err); werr != nil { + // If we can't even write the error, we're done. + log.Errorf("Error writing query error to %s: %v", c, werr) + return werr + } + } else { + if err != nil { + // We can't send an error in the middle of a stream. + // All we can do is abort the send, which will cause a 2013. + log.Errorf("Error in the middle of a stream to %s: %v", c, err) + return err + } + + // Send the end packet only sendFinished is false (results were streamed). + // In this case the affectedRows and lastInsertID are always 0 since it + // was a read operation. + if !sendFinished { + if err := c.writeEndResult(false, 0, 0, handler.WarningCount(c)); err != nil { + log.Errorf("Error writing result to %s: %v", c, err) + return err + } + } + } + + timings.Record(queryTimingKey, queryStart) + case ComStmtSendLongData: + stmtID, paramID, chunkData, ok := c.parseComStmtSendLongData(data) + c.recycleReadPacket() + if !ok { + err := fmt.Errorf("error parsing statement send long data from client %v, returning error: %v", c.ConnectionID, data) + log.Error(err.Error()) + return err + } + + prepare, ok := c.PrepareData[stmtID] + if !ok { + err := fmt.Errorf("got wrong statement id from client %v, statement ID(%v) is not found from record", c.ConnectionID, stmtID) + log.Error(err.Error()) + return err + } + + if prepare.BindVars == nil || + prepare.ParamsCount == uint16(0) || + paramID >= prepare.ParamsCount { + err := fmt.Errorf("invalid parameter Number from client %v, statement: %v", c.ConnectionID, prepare.PrepareStmt) + log.Error(err.Error()) + return err + } + + chunk := make([]byte, len(chunkData)) + copy(chunk, chunkData) + + key := fmt.Sprintf("v%d", paramID+1) + if val, ok := prepare.BindVars[key]; ok { + val.Value = append(val.Value, chunk...) + } else { + prepare.BindVars[key] = sqltypes.BytesBindVariable(chunk) + } + case ComStmtClose: + stmtID, ok := c.parseComStmtClose(data) + c.recycleReadPacket() + if ok { + delete(c.PrepareData, stmtID) + } + case ComStmtReset: + stmtID, ok := c.parseComStmtReset(data) + c.recycleReadPacket() + if !ok { + log.Error("Got unhandled packet from client %v, returning error: %v", c.ConnectionID, data) + if err := c.writeErrorPacket(ERUnknownComError, SSUnknownComError, "error handling packet: %v", data); err != nil { + log.Error("Error writing error packet to client: %v", err) + return err + } + } + + prepare, ok := c.PrepareData[stmtID] + if !ok { + log.Error("Commands were executed in an improper order from client %v, packet: %v", c.ConnectionID, data) + if err := c.writeErrorPacket(CRCommandsOutOfSync, SSUnknownComError, "commands were executed in an improper order: %v", data); err != nil { + log.Error("Error writing error packet to client: %v", err) + return err + } + } + + if prepare.BindVars != nil { + for k := range prepare.BindVars { + prepare.BindVars[k] = nil + } + } + + if err := c.writeOKPacket(0, 0, c.StatusFlags, 0); err != nil { + log.Error("Error writing ComStmtReset OK packet to client %v: %v", c.ConnectionID, err) + return err + } default: log.Errorf("Got unhandled packet (default) from %s, returning error: %v", c, data) c.recycleReadPacket() @@ -987,8 +1224,9 @@ func ParseErrorPacket(data []byte) error { return NewSQLError(int(code), string(sqlState), "%v", msg) } -func (conn *Conn) GetTLSClientCerts() []*x509.Certificate { - if tlsConn, ok := conn.conn.(*tls.Conn); ok { +// GetTLSClientCerts gets TLS certificates. +func (c *Conn) GetTLSClientCerts() []*x509.Certificate { + if tlsConn, ok := c.conn.(*tls.Conn); ok { return tlsConn.ConnectionState().PeerCertificates } return nil diff --git a/go/mysql/constants.go b/go/mysql/constants.go index 4d1a530a861..b1d4491f637 100644 --- a/go/mysql/constants.go +++ b/go/mysql/constants.go @@ -153,6 +153,24 @@ const ( // ComBinlogDump is COM_BINLOG_DUMP. ComBinlogDump = 0x12 + // ComPrepare is COM_PREPARE. + ComPrepare = 0x16 + + // ComStmtExecute is COM_STMT_EXECUTE. + ComStmtExecute = 0x17 + + // ComStmtSendLongData is COM_STMT_SEND_LONG_DATA + ComStmtSendLongData = 0x18 + + // ComStmtClose is COM_STMT_CLOSE. + ComStmtClose = 0x19 + + // ComStmtReset is COM_STMT_RESET + ComStmtReset = 0x1a + + //ComStmtFetch is COM_STMT_FETCH + ComStmtFetch = 0x1c + // ComSetOption is COM_SET_OPTION ComSetOption = 0x1b diff --git a/go/mysql/fakesqldb/server.go b/go/mysql/fakesqldb/server.go index 60dbb0547ee..14d9869095b 100644 --- a/go/mysql/fakesqldb/server.go +++ b/go/mysql/fakesqldb/server.go @@ -31,6 +31,8 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/sqltypes" + + querypb "vitess.io/vitess/go/vt/proto/query" ) const appendEntry = -1 @@ -432,6 +434,16 @@ func (db *DB) comQueryOrdered(query string) (*sqltypes.Result, error) { return entry.QueryResult, nil } +// ComPrepare is part of the mysql.Handler interface. +func (db *DB) ComPrepare(c *mysql.Conn, query string) ([]*querypb.Field, error) { + return nil, nil +} + +// ComStmtExecute is part of the mysql.Handler interface. +func (db *DB) ComStmtExecute(c *mysql.Conn, prepare *mysql.PrepareData, callback func(*sqltypes.Result) error) error { + return nil +} + // // Methods to add expected queries and results. // diff --git a/go/mysql/query.go b/go/mysql/query.go index b92ece87b63..158ae3ea308 100644 --- a/go/mysql/query.go +++ b/go/mysql/query.go @@ -17,6 +17,11 @@ limitations under the License. package mysql import ( + "fmt" + "math" + "strconv" + "strings" + "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/vt/proto/vtrpc" "vitess.io/vitess/go/vt/vterrors" @@ -141,7 +146,6 @@ func (c *Conn) readColumnDefinition(field *querypb.Field, index int) error { if err != nil { return NewSQLError(CRMalformedPacket, SSUnknownSQLState, "MySQLToType(%v,%v) failed for column %v: %v", t, flags, index, err) } - // Decimals is a byte. decimals, _, ok := readByte(colDef, pos) if !ok { @@ -510,6 +514,347 @@ func (c *Conn) parseComSetOption(data []byte) (uint16, bool) { return val, ok } +func (c *Conn) parseComPrepare(data []byte) string { + return string(data[1:]) +} + +func (c *Conn) parseComStmtExecute(prepareData map[uint32]*PrepareData, data []byte) (uint32, byte, error) { + pos := 0 + payload := data[1:] + bitMap := make([]byte, 0) + + // statement ID + stmtID, pos, ok := readUint32(payload, 0) + if !ok { + return 0, 0, NewSQLError(CRMalformedPacket, SSUnknownSQLState, "reading statement ID failed") + } + prepare, ok := prepareData[stmtID] + if !ok { + return 0, 0, NewSQLError(CRCommandsOutOfSync, SSUnknownSQLState, "statement ID is not found from record") + } + + // cursor type flags + cursorType, pos, ok := readByte(payload, pos) + if !ok { + return stmtID, 0, NewSQLError(CRMalformedPacket, SSUnknownSQLState, "reading cursor type flags failed") + } + + // iteration count + iterCount, pos, ok := readUint32(payload, pos) + if !ok { + return stmtID, 0, NewSQLError(CRMalformedPacket, SSUnknownSQLState, "reading iteration count failed") + } + if iterCount != uint32(1) { + return stmtID, 0, NewSQLError(CRMalformedPacket, SSUnknownSQLState, "iteration count is not equal to 1") + } + + if prepare.ParamsCount > 0 { + bitMap, pos, ok = readBytes(payload, pos, int((prepare.ParamsCount+7)/8)) + if !ok { + return stmtID, 0, NewSQLError(CRMalformedPacket, SSUnknownSQLState, "reading NULL-bitmap failed") + } + } + + newParamsBoundFlag, pos, ok := readByte(payload, pos) + if newParamsBoundFlag == 0x01 { + var mysqlType, flags byte + for i := uint16(0); i < prepare.ParamsCount; i++ { + mysqlType, pos, ok = readByte(payload, pos) + if !ok { + return stmtID, 0, NewSQLError(CRMalformedPacket, SSUnknownSQLState, "reading parameter type failed") + } + + flags, pos, ok = readByte(payload, pos) + if !ok { + return stmtID, 0, NewSQLError(CRMalformedPacket, SSUnknownSQLState, "reading parameter flags failed") + } + + // convert MySQL type to internal type. + valType, err := sqltypes.MySQLToType(int64(mysqlType), int64(flags)) + if err != nil { + return stmtID, 0, NewSQLError(CRMalformedPacket, SSUnknownSQLState, "MySQLToType(%v,%v) failed: %v", mysqlType, flags, err) + } + + prepare.ParamsType[i] = int32(valType) + } + } + + for i := 0; i < len(prepare.ParamsType); i++ { + var val sqltypes.Value + parameterID := fmt.Sprintf("v%d", i+1) + if v, ok := prepare.BindVars[parameterID]; ok { + if v != nil { + continue + } + } + + if (bitMap[i/8] & (1 << uint(i%8))) > 0 { + val, pos, ok = c.parseStmtArgs(nil, sqltypes.Null, pos) + } else { + val, pos, ok = c.parseStmtArgs(payload, querypb.Type(prepare.ParamsType[i]), pos) + } + if !ok { + return stmtID, 0, NewSQLError(CRMalformedPacket, SSUnknownSQLState, "decoding parameter value failed: %v", prepare.ParamsType[i]) + } + + prepare.BindVars[parameterID] = sqltypes.ValueBindVariable(val) + } + + return stmtID, cursorType, nil +} + +func (c *Conn) parseStmtArgs(data []byte, typ querypb.Type, pos int) (sqltypes.Value, int, bool) { + switch typ { + case sqltypes.Null: + return sqltypes.NULL, pos, true + case sqltypes.Int8: + val, pos, ok := readByte(data, pos) + return sqltypes.NewInt64(int64(val)), pos, ok + case sqltypes.Uint8: + val, pos, ok := readByte(data, pos) + return sqltypes.NewUint64(uint64(val)), pos, ok + case sqltypes.Uint16: + val, pos, ok := readUint16(data, pos) + return sqltypes.NewUint64(uint64(val)), pos, ok + case sqltypes.Int16, sqltypes.Year: + val, pos, ok := readUint16(data, pos) + return sqltypes.NewInt64(int64(val)), pos, ok + case sqltypes.Uint24, sqltypes.Uint32: + val, pos, ok := readUint32(data, pos) + return sqltypes.NewUint64(uint64(val)), pos, ok + case sqltypes.Int24, sqltypes.Int32: + val, pos, ok := readUint32(data, pos) + return sqltypes.NewInt64(int64(val)), pos, ok + case sqltypes.Float32: + val, pos, ok := readUint32(data, pos) + return sqltypes.NewFloat64(float64(math.Float32frombits(uint32(val)))), pos, ok + case sqltypes.Uint64: + val, pos, ok := readUint64(data, pos) + return sqltypes.NewUint64(val), pos, ok + case sqltypes.Int64: + val, pos, ok := readUint64(data, pos) + return sqltypes.NewInt64(int64(val)), pos, ok + case sqltypes.Float64: + val, pos, ok := readUint64(data, pos) + return sqltypes.NewFloat64(math.Float64frombits(val)), pos, ok + case sqltypes.Timestamp, sqltypes.Date, sqltypes.Datetime: + size, pos, ok := readByte(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + switch size { + case 0x00: + return sqltypes.NewVarChar(" "), pos, ok + case 0x0b: + year, pos, ok := readUint16(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + month, pos, ok := readByte(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + day, pos, ok := readByte(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + hour, pos, ok := readByte(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + minute, pos, ok := readByte(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + second, pos, ok := readByte(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + microSecond, pos, ok := readUint32(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + val := strconv.Itoa(int(year)) + "-" + + strconv.Itoa(int(month)) + "-" + + strconv.Itoa(int(day)) + " " + + strconv.Itoa(int(hour)) + ":" + + strconv.Itoa(int(minute)) + ":" + + strconv.Itoa(int(second)) + "." + + strconv.Itoa(int(microSecond)) + + return sqltypes.NewVarChar(val), pos, ok + case 0x07: + year, pos, ok := readUint16(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + month, pos, ok := readByte(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + day, pos, ok := readByte(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + hour, pos, ok := readByte(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + minute, pos, ok := readByte(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + second, pos, ok := readByte(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + val := strconv.Itoa(int(year)) + "-" + + strconv.Itoa(int(month)) + "-" + + strconv.Itoa(int(day)) + " " + + strconv.Itoa(int(hour)) + ":" + + strconv.Itoa(int(minute)) + ":" + + strconv.Itoa(int(second)) + + return sqltypes.NewVarChar(val), pos, ok + case 0x04: + year, pos, ok := readUint16(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + month, pos, ok := readByte(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + day, pos, ok := readByte(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + val := strconv.Itoa(int(year)) + "-" + + strconv.Itoa(int(month)) + "-" + + strconv.Itoa(int(day)) + + return sqltypes.NewVarChar(val), pos, ok + default: + return sqltypes.NULL, 0, false + } + case sqltypes.Time: + size, pos, ok := readByte(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + switch size { + case 0x00: + return sqltypes.NewVarChar("00:00:00"), pos, ok + case 0x0c: + isNegative, pos, ok := readByte(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + days, pos, ok := readUint32(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + hour, pos, ok := readByte(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + + hours := uint32(hour) + days*uint32(24) + + minute, pos, ok := readByte(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + second, pos, ok := readByte(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + microSecond, pos, ok := readUint32(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + + val := "" + if isNegative == 0x01 { + val += "-" + } + val += strconv.Itoa(int(hours)) + ":" + + strconv.Itoa(int(minute)) + ":" + + strconv.Itoa(int(second)) + "." + + strconv.Itoa(int(microSecond)) + + return sqltypes.NewVarChar(val), pos, ok + case 0x08: + isNegative, pos, ok := readByte(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + days, pos, ok := readUint32(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + hour, pos, ok := readByte(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + + hours := uint32(hour) + days*uint32(24) + + minute, pos, ok := readByte(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + second, pos, ok := readByte(data, pos) + if !ok { + return sqltypes.NULL, 0, false + } + + val := "" + if isNegative == 0x01 { + val += "-" + } + val += strconv.Itoa(int(hours)) + ":" + + strconv.Itoa(int(minute)) + ":" + + strconv.Itoa(int(second)) + + return sqltypes.NewVarChar(val), pos, ok + default: + return sqltypes.NULL, 0, false + } + case sqltypes.Decimal, sqltypes.Text, sqltypes.Blob, sqltypes.VarChar, sqltypes.VarBinary, sqltypes.Char, + sqltypes.Bit, sqltypes.Enum, sqltypes.Set, sqltypes.Geometry, sqltypes.Binary, sqltypes.TypeJSON: + val, pos, ok := readLenEncStringAsBytes(data, pos) + return sqltypes.MakeTrusted(sqltypes.VarBinary, val), pos, ok + default: + return sqltypes.NULL, pos, false + } +} + +func (c *Conn) parseComStmtSendLongData(data []byte) (uint32, uint16, []byte, bool) { + pos := 1 + statementID, pos, ok := readUint32(data, pos) + if !ok { + return 0, 0, nil, false + } + + paramID, pos, ok := readUint16(data, pos) + if !ok { + return 0, 0, nil, false + } + + return statementID, paramID, data[pos:], true +} + +func (c *Conn) parseComStmtClose(data []byte) (uint32, bool) { + val, _, ok := readUint32(data, 1) + return val, ok +} + +func (c *Conn) parseComStmtReset(data []byte) (uint32, bool) { + val, _, ok := readUint32(data, 1) + return val, ok +} + func (c *Conn) parseComInitDB(data []byte) string { return string(data[1:]) } @@ -655,3 +1000,483 @@ func (c *Conn) writeEndResult(more bool, affectedRows, lastInsertID uint64, warn return nil } + +// writePrepare writes a prepare query response to the wire. +func (c *Conn) writePrepare(fld []*querypb.Field, prepare *PrepareData) error { + paramsCount := prepare.ParamsCount + columnCount := 0 + if len(fld) != 0 { + columnCount = len(fld) + } + if columnCount > 0 { + prepare.ColumnNames = make([]string, columnCount) + } + + data := c.startEphemeralPacket(12) + pos := 0 + + pos = writeByte(data, pos, 0x00) + pos = writeUint32(data, pos, uint32(prepare.StatementID)) + pos = writeUint16(data, pos, uint16(columnCount)) + pos = writeUint16(data, pos, uint16(paramsCount)) + pos = writeByte(data, pos, 0x00) + pos = writeUint16(data, pos, 0x0000) + + if err := c.writeEphemeralPacket(); err != nil { + return err + } + + if paramsCount > 0 { + for i := uint16(0); i < paramsCount; i++ { + if err := c.writeColumnDefinition(&querypb.Field{ + Name: "?", + Type: sqltypes.VarBinary, + Charset: 63}); err != nil { + return err + } + } + + // Now send an EOF packet. + if c.Capabilities&CapabilityClientDeprecateEOF == 0 { + // With CapabilityClientDeprecateEOF, we do not send this EOF. + if err := c.writeEOFPacket(c.StatusFlags, 0); err != nil { + return err + } + } + } + + for i, field := range fld { + field.Name = strings.Replace(field.Name, "'?'", "?", -1) + prepare.ColumnNames[i] = field.Name + if err := c.writeColumnDefinition(field); err != nil { + return err + } + } + + if columnCount > 0 { + // Now send an EOF packet. + if c.Capabilities&CapabilityClientDeprecateEOF == 0 { + // With CapabilityClientDeprecateEOF, we do not send this EOF. + if err := c.writeEOFPacket(c.StatusFlags, 0); err != nil { + return err + } + } + } + + return c.flush() +} + +func (c *Conn) writeBinaryRow(fields []*querypb.Field, row []sqltypes.Value) error { + length := 0 + nullBitMapLen := (len(fields) + 7 + 2) / 8 + for _, val := range row { + if !val.IsNull() { + l, err := val2MySQLLen(val) + if err != nil { + return fmt.Errorf("internal value %v get MySQL value length error: %v", val, err) + } + length += l + } + } + + length += nullBitMapLen + 1 + + data := c.startEphemeralPacket(length) + pos := 0 + + pos = writeByte(data, pos, 0x00) + + for i := 0; i < nullBitMapLen; i++ { + pos = writeByte(data, pos, 0x00) + } + + for i, val := range row { + if val.IsNull() { + bytePos := (i+2)/8 + 1 + bitPos := (i + 2) % 8 + data[bytePos] |= 1 << uint(bitPos) + } else { + v, err := val2MySQL(val) + if err != nil { + c.recycleWritePacket() + return fmt.Errorf("internal value %v to MySQL value error: %v", val, err) + } + pos += copy(data[pos:], v) + } + } + + if pos != length { + return fmt.Errorf("internal error packet row: got %v bytes but expected %v", pos, length) + } + + return c.writeEphemeralPacket() +} + +// writeBinaryRows sends the rows of a Result with binary form. +func (c *Conn) writeBinaryRows(result *sqltypes.Result) error { + for _, row := range result.Rows { + if err := c.writeBinaryRow(result.Fields, row); err != nil { + return err + } + } + return nil +} + +func val2MySQL(v sqltypes.Value) ([]byte, error) { + var out []byte + pos := 0 + switch v.Type() { + case sqltypes.Null: + // no-op + case sqltypes.Int8: + val, err := strconv.ParseInt(v.ToString(), 10, 8) + if err != nil { + return []byte{}, err + } + out = make([]byte, 1) + writeByte(out, pos, uint8(val)) + case sqltypes.Uint8: + val, err := strconv.ParseUint(v.ToString(), 10, 8) + if err != nil { + return []byte{}, err + } + out = make([]byte, 1) + writeByte(out, pos, uint8(val)) + case sqltypes.Uint16: + val, err := strconv.ParseUint(v.ToString(), 10, 16) + if err != nil { + return []byte{}, err + } + out = make([]byte, 2) + writeUint16(out, pos, uint16(val)) + case sqltypes.Int16, sqltypes.Year: + val, err := strconv.ParseInt(v.ToString(), 10, 16) + if err != nil { + return []byte{}, err + } + out = make([]byte, 2) + writeUint16(out, pos, uint16(val)) + case sqltypes.Uint24, sqltypes.Uint32: + val, err := strconv.ParseUint(v.ToString(), 10, 32) + if err != nil { + return []byte{}, err + } + out = make([]byte, 4) + writeUint32(out, pos, uint32(val)) + case sqltypes.Int24, sqltypes.Int32: + val, err := strconv.ParseInt(v.ToString(), 10, 32) + if err != nil { + return []byte{}, err + } + out = make([]byte, 4) + writeUint32(out, pos, uint32(val)) + case sqltypes.Float32: + val, err := strconv.ParseFloat(v.ToString(), 32) + if err != nil { + return []byte{}, err + } + bits := math.Float32bits(float32(val)) + out = make([]byte, 4) + writeUint32(out, pos, bits) + case sqltypes.Uint64: + val, err := strconv.ParseUint(v.ToString(), 10, 64) + if err != nil { + return []byte{}, err + } + out = make([]byte, 8) + writeUint64(out, pos, uint64(val)) + case sqltypes.Int64: + val, err := strconv.ParseInt(v.ToString(), 10, 64) + if err != nil { + return []byte{}, err + } + out = make([]byte, 8) + writeUint64(out, pos, uint64(val)) + case sqltypes.Float64: + val, err := strconv.ParseFloat(v.ToString(), 64) + if err != nil { + return []byte{}, err + } + bits := math.Float64bits(val) + out = make([]byte, 8) + writeUint64(out, pos, bits) + case sqltypes.Timestamp, sqltypes.Date, sqltypes.Datetime: + if len(v.Raw()) > 19 { + out = make([]byte, 1+11) + out[pos] = 0x0b + pos++ + year, err := strconv.ParseUint(string(v.Raw()[0:4]), 10, 16) + if err != nil { + return []byte{}, err + } + month, err := strconv.ParseUint(string(v.Raw()[5:7]), 10, 8) + if err != nil { + return []byte{}, err + } + day, err := strconv.ParseUint(string(v.Raw()[8:10]), 10, 8) + if err != nil { + return []byte{}, err + } + hour, err := strconv.ParseUint(string(v.Raw()[11:13]), 10, 8) + if err != nil { + return []byte{}, err + } + minute, err := strconv.ParseUint(string(v.Raw()[14:16]), 10, 8) + if err != nil { + return []byte{}, err + } + second, err := strconv.ParseUint(string(v.Raw()[17:19]), 10, 8) + if err != nil { + return []byte{}, err + } + val := make([]byte, 6) + count := copy(val, v.Raw()[20:]) + for i := 0; i < (6 - count); i++ { + val[count+i] = 0x30 + } + microSecond, err := strconv.ParseUint(string(val), 10, 32) + if err != nil { + return []byte{}, err + } + pos = writeUint16(out, pos, uint16(year)) + pos = writeByte(out, pos, byte(month)) + pos = writeByte(out, pos, byte(day)) + pos = writeByte(out, pos, byte(hour)) + pos = writeByte(out, pos, byte(minute)) + pos = writeByte(out, pos, byte(second)) + pos = writeUint32(out, pos, uint32(microSecond)) + } else if len(v.Raw()) > 10 { + out = make([]byte, 1+7) + out[pos] = 0x07 + pos++ + year, err := strconv.ParseUint(string(v.Raw()[0:4]), 10, 16) + if err != nil { + return []byte{}, err + } + month, err := strconv.ParseUint(string(v.Raw()[5:7]), 10, 8) + if err != nil { + return []byte{}, err + } + day, err := strconv.ParseUint(string(v.Raw()[8:10]), 10, 8) + if err != nil { + return []byte{}, err + } + hour, err := strconv.ParseUint(string(v.Raw()[11:13]), 10, 8) + if err != nil { + return []byte{}, err + } + minute, err := strconv.ParseUint(string(v.Raw()[14:16]), 10, 8) + if err != nil { + return []byte{}, err + } + second, err := strconv.ParseUint(string(v.Raw()[17:]), 10, 8) + if err != nil { + return []byte{}, err + } + pos = writeUint16(out, pos, uint16(year)) + pos = writeByte(out, pos, byte(month)) + pos = writeByte(out, pos, byte(day)) + pos = writeByte(out, pos, byte(hour)) + pos = writeByte(out, pos, byte(minute)) + pos = writeByte(out, pos, byte(second)) + } else if len(v.Raw()) > 0 { + out = make([]byte, 1+4) + out[pos] = 0x04 + pos++ + year, err := strconv.ParseUint(string(v.Raw()[0:4]), 10, 16) + if err != nil { + return []byte{}, err + } + month, err := strconv.ParseUint(string(v.Raw()[5:7]), 10, 8) + if err != nil { + return []byte{}, err + } + day, err := strconv.ParseUint(string(v.Raw()[8:]), 10, 8) + if err != nil { + return []byte{}, err + } + pos = writeUint16(out, pos, uint16(year)) + pos = writeByte(out, pos, byte(month)) + pos = writeByte(out, pos, byte(day)) + } else { + out = make([]byte, 1) + out[pos] = 0x00 + } + case sqltypes.Time: + if string(v.Raw()) == "00:00:00" { + out = make([]byte, 1) + out[pos] = 0x00 + } else if strings.Contains(string(v.Raw()), ".") { + out = make([]byte, 1+12) + out[pos] = 0x0c + pos++ + + sub1 := strings.Split(string(v.Raw()), ":") + if len(sub1) != 3 { + err := fmt.Errorf("incorrect time value, ':' is not found") + return []byte{}, err + } + sub2 := strings.Split(sub1[2], ".") + if len(sub2) != 2 { + err := fmt.Errorf("incorrect time value, '.' is not found") + return []byte{}, err + } + + var total []byte + if strings.HasPrefix(sub1[0], "-") { + out[pos] = 0x01 + total = []byte(sub1[0]) + total = total[1:] + } else { + out[pos] = 0x00 + total = []byte(sub1[0]) + } + pos++ + + h, err := strconv.ParseUint(string(total), 10, 32) + if err != nil { + return []byte{}, err + } + + days := uint32(h) / 24 + hours := uint32(h) % 24 + minute := sub1[1] + second := sub2[0] + microSecond := sub2[1] + + minutes, err := strconv.ParseUint(minute, 10, 8) + if err != nil { + return []byte{}, err + } + + seconds, err := strconv.ParseUint(second, 10, 8) + if err != nil { + return []byte{}, err + } + pos = writeUint32(out, pos, uint32(days)) + pos = writeByte(out, pos, byte(hours)) + pos = writeByte(out, pos, byte(minutes)) + pos = writeByte(out, pos, byte(seconds)) + + val := make([]byte, 6) + count := copy(val, microSecond) + for i := 0; i < (6 - count); i++ { + val[count+i] = 0x30 + } + microSeconds, err := strconv.ParseUint(string(val), 10, 32) + if err != nil { + return []byte{}, err + } + pos = writeUint32(out, pos, uint32(microSeconds)) + } else if len(v.Raw()) > 0 { + out = make([]byte, 1+8) + out[pos] = 0x08 + pos++ + + sub1 := strings.Split(string(v.Raw()), ":") + if len(sub1) != 3 { + err := fmt.Errorf("incorrect time value, ':' is not found") + return []byte{}, err + } + + var total []byte + if strings.HasPrefix(sub1[0], "-") { + out[pos] = 0x01 + total = []byte(sub1[0]) + total = total[1:] + } else { + out[pos] = 0x00 + total = []byte(sub1[0]) + } + pos++ + + h, err := strconv.ParseUint(string(total), 10, 32) + if err != nil { + return []byte{}, err + } + + days := uint32(h) / 24 + hours := uint32(h) % 24 + minute := sub1[1] + second := sub1[2] + + minutes, err := strconv.ParseUint(minute, 10, 8) + if err != nil { + return []byte{}, err + } + + seconds, err := strconv.ParseUint(second, 10, 8) + if err != nil { + return []byte{}, err + } + pos = writeUint32(out, pos, uint32(days)) + pos = writeByte(out, pos, byte(hours)) + pos = writeByte(out, pos, byte(minutes)) + pos = writeByte(out, pos, byte(seconds)) + } else { + err := fmt.Errorf("incorrect time value") + return []byte{}, err + } + case sqltypes.Decimal, sqltypes.Text, sqltypes.Blob, sqltypes.VarChar, + sqltypes.VarBinary, sqltypes.Char, sqltypes.Bit, sqltypes.Enum, + sqltypes.Set, sqltypes.Geometry, sqltypes.Binary, sqltypes.TypeJSON: + l := len(v.Raw()) + length := lenEncIntSize(uint64(l)) + l + out = make([]byte, length) + pos = writeLenEncInt(out, pos, uint64(l)) + copy(out[pos:], v.Raw()) + default: + out = make([]byte, len(v.Raw())) + copy(out, v.Raw()) + } + return out, nil +} + +func val2MySQLLen(v sqltypes.Value) (int, error) { + var length int + var err error + + switch v.Type() { + case sqltypes.Null: + length = 0 + case sqltypes.Int8, sqltypes.Uint8: + length = 1 + case sqltypes.Uint16, sqltypes.Int16, sqltypes.Year: + length = 2 + case sqltypes.Uint24, sqltypes.Uint32, sqltypes.Int24, sqltypes.Int32, sqltypes.Float32: + length = 4 + case sqltypes.Uint64, sqltypes.Int64, sqltypes.Float64: + length = 8 + case sqltypes.Timestamp, sqltypes.Date, sqltypes.Datetime: + if len(v.Raw()) > 19 { + length = 12 + } else if len(v.Raw()) > 10 { + length = 8 + } else if len(v.Raw()) > 0 { + length = 5 + } else { + length = 1 + } + case sqltypes.Time: + if string(v.Raw()) == "00:00:00" { + length = 1 + } else if strings.Contains(string(v.Raw()), ".") { + length = 13 + } else if len(v.Raw()) > 0 { + length = 9 + } else { + err = fmt.Errorf("incorrect time value") + } + case sqltypes.Decimal, sqltypes.Text, sqltypes.Blob, sqltypes.VarChar, + sqltypes.VarBinary, sqltypes.Char, sqltypes.Bit, sqltypes.Enum, + sqltypes.Set, sqltypes.Geometry, sqltypes.Binary, sqltypes.TypeJSON: + l := len(v.Raw()) + length = lenEncIntSize(uint64(l)) + l + default: + length = len(v.Raw()) + } + if err != nil { + return 0, err + } + return length, nil +} diff --git a/go/mysql/query_test.go b/go/mysql/query_test.go index 14625d1e30b..b41524fc237 100644 --- a/go/mysql/query_test.go +++ b/go/mysql/query_test.go @@ -29,6 +29,48 @@ import ( querypb "vitess.io/vitess/go/vt/proto/query" ) +// Utility function to write sql query as packets to test parseComPrepare +func MockQueryPackets(t *testing.T, query string) []byte { + data := make([]byte, len(query)+1) + // Not sure if it makes a difference + pos := 0 + pos = writeByte(data, pos, ComPrepare) + copy(data[pos:], query) + return data +} + +func MockPrepareData(t *testing.T) (*PrepareData, *sqltypes.Result) { + sql := "select * from test_table where id = ?" + + result := &sqltypes.Result{ + Fields: []*querypb.Field{ + { + Name: "id", + Type: querypb.Type_INT32, + }, + }, + Rows: [][]sqltypes.Value{ + { + sqltypes.MakeTrusted(querypb.Type_INT32, []byte("1")), + }, + }, + RowsAffected: 1, + } + + prepare := &PrepareData{ + StatementID: 18, + PrepareStmt: sql, + ParamsCount: 1, + ParamsType: []int32{263}, + ColumnNames: []string{"id"}, + BindVars: map[string]*querypb.BindVariable{ + "v1": sqltypes.Int32BindVariable(10), + }, + } + + return prepare, result +} + func TestComInitDB(t *testing.T) { listener, sConn, cConn := createSocketPair(t) defer func() { @@ -76,6 +118,139 @@ func TestComSetOption(t *testing.T) { } } +func TestComStmtPrepare(t *testing.T) { + listener, sConn, cConn := createSocketPair(t) + defer func() { + listener.Close() + sConn.Close() + cConn.Close() + }() + + sql := "select * from test_table where id = ?" + mockData := MockQueryPackets(t, sql) + + if err := cConn.writePacket(mockData); err != nil { + t.Fatalf("writePacket failed: %v", err) + } + + data, err := sConn.ReadPacket() + if err != nil { + t.Fatalf("sConn.ReadPacket - ComPrepare failed: %v", err) + } + + parsedQuery := sConn.parseComPrepare(data) + if parsedQuery != sql { + t.Fatalf("Received incorrect query, want: %v, got: %v", sql, parsedQuery) + } + + prepare, result := MockPrepareData(t) + sConn.PrepareData = make(map[uint32]*PrepareData) + sConn.PrepareData[prepare.StatementID] = prepare + + // write the response to the client + if err := sConn.writePrepare(result.Fields, prepare); err != nil { + t.Fatalf("sConn.writePrepare failed: %v", err) + } + + resp, err := cConn.ReadPacket() + if err != nil { + t.Fatalf("cConn.ReadPacket failed: %v", err) + } + if uint32(resp[1]) != prepare.StatementID { + t.Fatalf("Received incorrect Statement ID, want: %v, got: %v", prepare.StatementID, resp[1]) + } +} + +func TestComStmtSendLongData(t *testing.T) { + listener, sConn, cConn := createSocketPair(t) + defer func() { + listener.Close() + sConn.Close() + cConn.Close() + }() + + prepare, result := MockPrepareData(t) + cConn.PrepareData = make(map[uint32]*PrepareData) + cConn.PrepareData[prepare.StatementID] = prepare + if err := cConn.writePrepare(result.Fields, prepare); err != nil { + t.Fatalf("writePrepare failed: %v", err) + } + + // Since there's no writeComStmtSendLongData, we'll write a prepareStmt and check if we can read the StatementID + data, err := sConn.ReadPacket() + if err != nil || len(data) == 0 { + t.Fatalf("sConn.ReadPacket - ComStmtClose failed: %v %v", data, err) + } + stmtID, paramID, chunkData, ok := sConn.parseComStmtSendLongData(data) + if !ok { + t.Fatalf("parseComStmtSendLongData failed") + } + if paramID != 1 { + t.Fatalf("Recieved incorrect ParamID, want %v, got %v:", paramID, 1) + } + if stmtID != prepare.StatementID { + t.Fatalf("Received incorrect value, want: %v, got: %v", uint32(data[1]), prepare.StatementID) + } + // Check length of chunkData, Since its a subset of `data` and compare with it after we subtract the number of bytes that was read from it. + // sizeof(uint32) + sizeof(uint16) + 1 = 7 + if len(chunkData) != len(data)-7 { + t.Fatalf("Recieved bad chunkData") + } +} + +func TestComStmtExecute(t *testing.T) { + listener, sConn, cConn := createSocketPair(t) + defer func() { + listener.Close() + sConn.Close() + cConn.Close() + }() + + prepare, _ := MockPrepareData(t) + cConn.PrepareData = make(map[uint32]*PrepareData) + cConn.PrepareData[prepare.StatementID] = prepare + + // This is simulated packets for `select * from test_table where id = ?` + data := []byte{23, 18, 0, 0, 0, 128, 1, 0, 0, 0, 0, 1, 1, 128, 1} + + stmtID, _, err := sConn.parseComStmtExecute(cConn.PrepareData, data) + if err != nil { + t.Fatalf("parseComStmtExeute failed: %v", err) + } + if stmtID != 18 { + t.Fatalf("Parsed incorrect values") + } +} + +func TestComStmtClose(t *testing.T) { + listener, sConn, cConn := createSocketPair(t) + defer func() { + listener.Close() + sConn.Close() + cConn.Close() + }() + + prepare, result := MockPrepareData(t) + cConn.PrepareData = make(map[uint32]*PrepareData) + cConn.PrepareData[prepare.StatementID] = prepare + if err := cConn.writePrepare(result.Fields, prepare); err != nil { + t.Fatalf("writePrepare failed: %v", err) + } + + // Since there's no writeComStmtClose, we'll write a prepareStmt and check if we can read the StatementID + data, err := sConn.ReadPacket() + if err != nil || len(data) == 0 { + t.Fatalf("sConn.ReadPacket - ComStmtClose failed: %v %v", data, err) + } + stmtID, ok := sConn.parseComStmtClose(data) + if !ok { + t.Fatalf("parseComStmtClose failed") + } + if stmtID != prepare.StatementID { + t.Fatalf("Received incorrect value, want: %v, got: %v", uint32(data[1]), prepare.StatementID) + } +} + func TestQueries(t *testing.T) { listener, sConn, cConn := createSocketPair(t) defer func() { diff --git a/go/mysql/server.go b/go/mysql/server.go index 64642ea53d3..5de219ff476 100644 --- a/go/mysql/server.go +++ b/go/mysql/server.go @@ -29,6 +29,7 @@ import ( "vitess.io/vitess/go/sync2" "vitess.io/vitess/go/tb" "vitess.io/vitess/go/vt/log" + querypb "vitess.io/vitess/go/vt/proto/query" "vitess.io/vitess/go/vt/proto/vtrpc" "vitess.io/vitess/go/vt/vterrors" ) @@ -94,6 +95,14 @@ type Handler interface { // hang on to the byte slice. ComQuery(c *Conn, query string, callback func(*sqltypes.Result) error) error + // ComPrepare is called when a connection receives a prepared + // statement query. + ComPrepare(c *Conn, query string) ([]*querypb.Field, error) + + // ComStmtExecute is called when a connection receives a statement + // execute query. + ComStmtExecute(c *Conn, prepare *PrepareData, callback func(*sqltypes.Result) error) error + // WarningCount is called at the end of each query to obtain // the value to be returned to the client in the EOF packet. // Note that this will be called either in the context of the diff --git a/go/mysql/server_test.go b/go/mysql/server_test.go index 8895425a7cd..49456128c9f 100644 --- a/go/mysql/server_test.go +++ b/go/mysql/server_test.go @@ -75,6 +75,7 @@ func (th *testHandler) NewConnection(c *Conn) { } func (th *testHandler) ConnectionClosed(c *Conn) { + } func (th *testHandler) ComQuery(c *Conn, query string, callback func(*sqltypes.Result) error) error { @@ -171,6 +172,14 @@ func (th *testHandler) ComQuery(c *Conn, query string, callback func(*sqltypes.R return nil } +func (th *testHandler) ComPrepare(c *Conn, query string) ([]*querypb.Field, error) { + return nil, nil +} + +func (th *testHandler) ComStmtExecute(c *Conn, prepare *PrepareData, callback func(*sqltypes.Result) error) error { + return nil +} + func (th *testHandler) WarningCount(c *Conn) uint16 { return th.warnings } diff --git a/go/pools/resource_pool.go b/go/pools/resource_pool.go index a05ccfb0e33..8e92f0bf5ee 100644 --- a/go/pools/resource_pool.go +++ b/go/pools/resource_pool.go @@ -83,7 +83,7 @@ type resourceWrapper struct { // If a resource is unused beyond idleTimeout, it's replaced // with a new one. // An idleTimeout of 0 means that there is no timeout. -// A non-zero value of prefillParallism causes the pool to be pre-filled. +// A non-zero value of prefillParallelism causes the pool to be pre-filled. // The value specifies how many resources can be opened in parallel. func NewResourcePool(factory Factory, capacity, maxCap int, idleTimeout time.Duration, prefillParallelism int) *ResourcePool { if capacity <= 0 || maxCap <= 0 || capacity > maxCap { diff --git a/go/sqltypes/type.go b/go/sqltypes/type.go index cf1bed67a42..b123e882d72 100644 --- a/go/sqltypes/type.go +++ b/go/sqltypes/type.go @@ -167,6 +167,7 @@ var mysqlToType = map[int64]querypb.Type{ 11: Time, 12: Datetime, 13: Year, + 15: VarChar, 16: Bit, 245: TypeJSON, 246: Decimal, diff --git a/go/sqltypes/type_test.go b/go/sqltypes/type_test.go index 08aed75c81b..a4d5ed6f9b0 100644 --- a/go/sqltypes/type_test.go +++ b/go/sqltypes/type_test.go @@ -406,8 +406,8 @@ func TestMySQLToType(t *testing.T) { } func TestTypeError(t *testing.T) { - _, err := MySQLToType(15, 0) - want := "unsupported type: 15" + _, err := MySQLToType(17, 0) + want := "unsupported type: 17" if err == nil || err.Error() != want { t.Errorf("MySQLToType: %v, want %s", err, want) } diff --git a/go/vt/logutil/purge.go b/go/vt/logutil/purge.go index ad641e47e9c..c7825098a11 100644 --- a/go/vt/logutil/purge.go +++ b/go/vt/logutil/purge.go @@ -106,8 +106,8 @@ func PurgeLogs() { } logDir := f.Value.String() program := filepath.Base(os.Args[0]) - timer := time.NewTimer(*purgeLogsInterval) - for range timer.C { + ticker := time.NewTicker(*purgeLogsInterval) + for range ticker.C { purgeLogsOnce(time.Now(), logDir, program, *keepLogsByCtime, *keepLogsByMtime) } } diff --git a/go/vt/mysqlctl/builtinbackupengine.go b/go/vt/mysqlctl/builtinbackupengine.go index 82be765b542..7d97e251220 100644 --- a/go/vt/mysqlctl/builtinbackupengine.go +++ b/go/vt/mysqlctl/builtinbackupengine.go @@ -352,7 +352,7 @@ func (be *BuiltinBackupEngine) ExecuteBackup(ctx context.Context, cnf *Mycnf, my } // backupFiles finds the list of files to backup, and creates the backup. -func (be *BuiltinBackupEngine) backupFiles(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, bh backupstorage.BackupHandle, replicationPosition mysql.Position, backupConcurrency int, hookExtraEnv map[string]string, backupTime time.Time) (err error) { +func (be *BuiltinBackupEngine) backupFiles(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, bh backupstorage.BackupHandle, replicationPosition mysql.Position, backupConcurrency int, hookExtraEnv map[string]string, backupTime time.Time) (finalErr error) { // Get the files to backup. fes, err := findFilesToBackup(cnf) if err != nil { @@ -394,8 +394,8 @@ func (be *BuiltinBackupEngine) backupFiles(ctx context.Context, cnf *Mycnf, mysq return vterrors.Wrapf(err, "cannot add %v to backup", backupManifestFile) } defer func() { - if closeErr := wc.Close(); err == nil { - err = closeErr + if closeErr := wc.Close(); finalErr == nil { + finalErr = closeErr } }() @@ -419,10 +419,9 @@ func (be *BuiltinBackupEngine) backupFiles(ctx context.Context, cnf *Mycnf, mysq } // backupFile backs up an individual file. -func (be *BuiltinBackupEngine) backupFile(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, bh backupstorage.BackupHandle, fe *FileEntry, name string, hookExtraEnv map[string]string) (err error) { +func (be *BuiltinBackupEngine) backupFile(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, bh backupstorage.BackupHandle, fe *FileEntry, name string, hookExtraEnv map[string]string) (finalErr error) { // Open the source file for reading. - var source *os.File - source, err = fe.open(cnf, true) + source, err := fe.open(cnf, true) if err != nil { return err } @@ -441,11 +440,11 @@ func (be *BuiltinBackupEngine) backupFile(ctx context.Context, cnf *Mycnf, mysql } defer func(name, fileName string) { if rerr := wc.Close(); rerr != nil { - if err != nil { + if finalErr != nil { // We already have an error, just log this one. logger.Errorf2(rerr, "failed to close file %v,%v", name, fe.Name) } else { - err = rerr + finalErr = rerr } } }(name, fe.Name) @@ -553,7 +552,7 @@ func (be *BuiltinBackupEngine) ExecuteRestore( if err := be.restoreFiles(context.Background(), cnf, bh, bm.FileEntries, bm.TransformHook, !bm.SkipCompress, restoreConcurrency, hookExtraEnv, logger); err != nil { // don't delete the file here because that is how we detect an interrupted restore - return zeroPosition, s, err + return zeroPosition, s, vterrors.Wrap(err, "failed to restore files") } logger.Infof("Restore: returning replication position %v", bm.Position) @@ -582,7 +581,10 @@ func (be *BuiltinBackupEngine) restoreFiles(ctx context.Context, cnf *Mycnf, bh // And restore the file. name := fmt.Sprintf("%v", i) logger.Infof("Copying file %v: %v", name, fes[i].Name) - rec.RecordError(be.restoreFile(ctx, cnf, bh, &fes[i], transformHook, compress, name, hookExtraEnv)) + err := be.restoreFile(ctx, cnf, bh, &fes[i], transformHook, compress, name, hookExtraEnv) + if err != nil { + rec.RecordError(vterrors.Wrapf(err, "can't restore file %v to %v", name, fes[i].Name)) + } }(i) } wg.Wait() @@ -590,27 +592,26 @@ func (be *BuiltinBackupEngine) restoreFiles(ctx context.Context, cnf *Mycnf, bh } // restoreFile restores an individual file. -func (be *BuiltinBackupEngine) restoreFile(ctx context.Context, cnf *Mycnf, bh backupstorage.BackupHandle, fe *FileEntry, transformHook string, compress bool, name string, hookExtraEnv map[string]string) (err error) { +func (be *BuiltinBackupEngine) restoreFile(ctx context.Context, cnf *Mycnf, bh backupstorage.BackupHandle, fe *FileEntry, transformHook string, compress bool, name string, hookExtraEnv map[string]string) (finalErr error) { // Open the source file for reading. - var source io.ReadCloser - source, err = bh.ReadFile(ctx, name) + source, err := bh.ReadFile(ctx, name) if err != nil { - return err + return vterrors.Wrap(err, "can't open source file for reading") } defer source.Close() // Open the destination file for writing. dstFile, err := fe.open(cnf, false) if err != nil { - return err + return vterrors.Wrap(err, "can't open destination file for writing") } defer func() { if cerr := dstFile.Close(); cerr != nil { - if err != nil { + if finalErr != nil { // We already have an error, just log this one. log.Errorf("failed to close file %v: %v", name, cerr) } else { - err = cerr + finalErr = vterrors.Wrap(cerr, "failed to close destination file") } } }() @@ -640,15 +641,15 @@ func (be *BuiltinBackupEngine) restoreFile(ctx context.Context, cnf *Mycnf, bh b if compress { gz, err := pgzip.NewReader(reader) if err != nil { - return err + return vterrors.Wrap(err, "can't open gzip decompressor") } defer func() { if cerr := gz.Close(); cerr != nil { - if err != nil { + if finalErr != nil { // We already have an error, just log this one. - log.Errorf("failed to close gunziper %v: %v", name, cerr) + log.Errorf("failed to close gzip decompressor %v: %v", name, cerr) } else { - err = cerr + finalErr = vterrors.Wrap(err, "failed to close gzip decompressor") } } }() @@ -657,7 +658,7 @@ func (be *BuiltinBackupEngine) restoreFile(ctx context.Context, cnf *Mycnf, bh b // Copy the data. Will also write to the hasher. if _, err = io.Copy(dst, reader); err != nil { - return err + return vterrors.Wrap(err, "failed to copy file contents") } // Close the Pipe. @@ -678,7 +679,11 @@ func (be *BuiltinBackupEngine) restoreFile(ctx context.Context, cnf *Mycnf, bh b } // Flush the buffer. - return dst.Flush() + if err := dst.Flush(); err != nil { + return vterrors.Wrap(err, "failed to flush destination buffer") + } + + return nil } func init() { diff --git a/go/vt/mysqlctl/capabilityset.go b/go/vt/mysqlctl/capabilityset.go new file mode 100644 index 00000000000..568c75bd096 --- /dev/null +++ b/go/vt/mysqlctl/capabilityset.go @@ -0,0 +1,79 @@ +/* +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. +*/ + +/* + Detect server flavors and capabilities +*/ + +package mysqlctl + +type mysqlFlavor string + +const ( + flavorMySQL mysqlFlavor = "mysql" + flavorPercona mysqlFlavor = "percona" + flavorMariaDB mysqlFlavor = "mariadb" +) + +// Mysqld is the object that represents a mysqld daemon running on this server. +type CapabilitySet struct { + flavor mysqlFlavor + version serverVersion +} + +func NewCapabilitySet(f mysqlFlavor, v serverVersion) (c CapabilitySet) { + c.flavor = f + c.version = v + return +} + +func (c *CapabilitySet) HasMySQLUpgradeInServer() bool { + return c.IsMySQLLike() && c.version.atLeast(serverVersion{Major: 8, Minor: 0, Patch: 16}) +} +func (c *CapabilitySet) HasInitializeInServer() bool { + return c.IsMySQLLike() && c.version.atLeast(serverVersion{Major: 5, Minor: 7, Patch: 0}) +} +func (c *CapabilitySet) HasMySQLxEnabledByDefault() bool { + return c.IsMySQLLike() && c.version.atLeast(serverVersion{Major: 8, Minor: 0, Patch: 11}) +} +func (c *CapabilitySet) HasPersistConfig() bool { + return c.IsMySQLLike() && c.version.atLeast(serverVersion{Major: 8, Minor: 0, Patch: 0}) +} +func (c *CapabilitySet) HasShutdownCommand() bool { + return (c.IsMySQLLike() && c.version.atLeast(serverVersion{Major: 5, Minor: 7, Patch: 9})) || (c.IsMariaDB() && c.version.atLeast(serverVersion{Major: 10, Minor: 0, Patch: 4})) +} +func (c *CapabilitySet) HasBackupLocks() bool { + return c.IsMySQLLike() && c.version.atLeast(serverVersion{Major: 8, Minor: 0, Patch: 0}) +} +func (c *CapabilitySet) HasDefaultUft8mb4() bool { + return c.IsMySQLLike() && c.version.atLeast(serverVersion{Major: 8, Minor: 0, Patch: 0}) +} +func (c *CapabilitySet) HasSemiSyncEnabledByDefault() bool { + return c.IsMariaDB() && c.version.atLeast(serverVersion{Major: 10, Minor: 3, Patch: 3}) +} + +// IsMySQLLike tests if the server is either MySQL +// or Percona Server. At least currently, Vitess doesn't +// make use of any specific Percona Server features. +func (c *CapabilitySet) IsMySQLLike() bool { + return c.flavor == flavorMySQL || c.flavor == flavorPercona +} + +// IsMariaDB tests if the server is MariaDB. +// IsMySQLLike() and IsMariaDB() are mutually exclusive +func (c *CapabilitySet) IsMariaDB() bool { + return c.flavor == flavorMariaDB +} diff --git a/go/vt/mysqlctl/mysqld.go b/go/vt/mysqlctl/mysqld.go index 029586d1c15..5534a66e494 100644 --- a/go/vt/mysqlctl/mysqld.go +++ b/go/vt/mysqlctl/mysqld.go @@ -25,6 +25,7 @@ package mysqlctl import ( "bufio" + "bytes" "errors" "flag" "fmt" @@ -34,12 +35,12 @@ import ( "os/exec" "path" "path/filepath" + "regexp" + "strconv" "strings" "sync" "time" - "bytes" - "golang.org/x/net/context" "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/stats" @@ -78,6 +79,8 @@ var ( dbaMysqlStats = stats.NewTimings("MysqlDba", "MySQL DBA stats", "operation") allprivsMysqlStats = stats.NewTimings("MysqlAllPrivs", "MySQl Stats for all privs", "operation") appMysqlStats = stats.NewTimings("MysqlApp", "MySQL app stats", "operation") + + versionRegex = regexp.MustCompile(`Ver ([0-9]+)\.([0-9]+)\.([0-9]+)`) ) // Mysqld is the object that represents a mysqld daemon running on this server. @@ -86,6 +89,8 @@ type Mysqld struct { dbaPool *dbconnpool.ConnectionPool appPool *dbconnpool.ConnectionPool + capabilities CapabilitySet + // mutex protects the fields below. mutex sync.Mutex onTermFuncs []func() @@ -107,9 +112,95 @@ func NewMysqld(dbcfgs *dbconfigs.DBConfigs) *Mysqld { result.appPool = dbconnpool.NewConnectionPool("AppConnPool", *appPoolSize, *appIdleTimeout, *poolDynamicHostnameResolution) result.appPool.Open(dbcfgs.AppWithDB(), appMysqlStats) + version, getErr := getVersionString() + f, v, err := parseVersionString(version) + + // Fallback if required + if getErr != nil || err != nil { + f, v, err = getVersionFromEnv() + if err != nil { + panic("Could not detect version from mysqld --version or MYSQL_FLAVOR") + } + + } + + log.Infof("Using flavor: %v, version: %v", f, v) + result.capabilities = NewCapabilitySet(f, v) return result } +/* +getVersionFromEnv returns the flavor and an assumed version based on the legacy +MYSQL_FLAVOR environment variable. + +The assumed version may not be accurate since the legacy variable only specifies +broad families of compatible versions. However, the differences between those +versions should only matter if Vitess is managing the lifecycle of mysqld, in which +case we should have a local copy of the mysqld binary from which we can fetch +the accurate version instead of falling back to this function (see getVersionString). +*/ +func getVersionFromEnv() (flavor mysqlFlavor, ver serverVersion, err error) { + env := os.Getenv("MYSQL_FLAVOR") + switch env { + case "MariaDB": + return flavorMariaDB, serverVersion{10, 0, 10}, nil + case "MariaDB103": + return flavorMariaDB, serverVersion{10, 3, 7}, nil + case "MySQL80": + return flavorMySQL, serverVersion{8, 0, 11}, nil + case "MySQL56": + return flavorMySQL, serverVersion{5, 7, 10}, nil + } + return flavor, ver, fmt.Errorf("Could not determine version from MYSQL_FLAVOR: %s", env) +} + +func getVersionString() (string, error) { + mysqlRoot, err := vtenv.VtMysqlRoot() + if err != nil { + return "", err + } + mysqldPath, err := binaryPath(mysqlRoot, "mysqld") + if err != nil { + return "", err + } + _, version, err := execCmd(mysqldPath, []string{"--version"}, nil, mysqlRoot, nil) + if err != nil { + return "", err + } + return version, nil +} + +// parse the output of mysqld --version into a flavor and version +func parseVersionString(version string) (flavor mysqlFlavor, ver serverVersion, err error) { + if strings.Contains(version, "Percona") { + flavor = flavorPercona + } else if strings.Contains(version, "MariaDB") { + flavor = flavorMariaDB + } else { + // OS distributed MySQL releases have a version string like: + // mysqld Ver 5.7.27-0ubuntu0.19.04.1 for Linux on x86_64 ((Ubuntu)) + flavor = flavorMySQL + } + v := versionRegex.FindStringSubmatch(version) + if len(v) != 4 { + return flavor, ver, fmt.Errorf("Could not parse server version from: %s", version) + } + ver.Major, err = strconv.Atoi(string(v[1])) + if err != nil { + return flavor, ver, fmt.Errorf("Could not parse server version from: %s", version) + } + ver.Minor, err = strconv.Atoi(string(v[2])) + if err != nil { + return flavor, ver, fmt.Errorf("Could not parse server version from: %s", version) + } + ver.Patch, err = strconv.Atoi(string(v[3])) + if err != nil { + return flavor, ver, fmt.Errorf("Could not parse server version from: %s", version) + } + + return +} + // RunMysqlUpgrade will run the mysql_upgrade program on the current // install. Will be called only when mysqld is running with no // network and no grant tables. @@ -125,6 +216,11 @@ func (mysqld *Mysqld) RunMysqlUpgrade() error { return client.RunMysqlUpgrade(context.TODO()) } + if mysqld.capabilities.HasMySQLUpgradeInServer() { + log.Warningf("MySQL version has built-in upgrade, skipping RunMySQLUpgrade") + return nil + } + // Find mysql_upgrade. If not there, we do nothing. dir, err := vtenv.VtMysqlRoot() if err != nil { @@ -220,8 +316,14 @@ func (mysqld *Mysqld) startNoWait(ctx context.Context, cnf *Mycnf, mysqldArgs .. return err } } + mysqlBaseDir, err := vtenv.VtMysqlBaseDir() + if err != nil { + return err + } arg := []string{ - "--defaults-file=" + cnf.path} + "--defaults-file=" + cnf.path, + "--basedir=" + mysqlBaseDir, + } arg = append(arg, mysqldArgs...) env := []string{os.ExpandEnv("LD_LIBRARY_PATH=$VT_MYSQL_ROOT/lib/mysql")} @@ -453,7 +555,7 @@ func execCmd(name string, args, env []string, dir string, input io.Reader) (cmd // binaryPath does a limited path lookup for a command, // searching only within sbin and bin in the given root. func binaryPath(root, binary string) (string, error) { - subdirs := []string{"sbin", "bin", "libexec"} + subdirs := []string{"sbin", "bin", "libexec", "scripts"} for _, subdir := range subdirs { binPath := path.Join(root, subdir, binary) if _, err := os.Stat(binPath); err == nil { @@ -534,13 +636,6 @@ func (mysqld *Mysqld) Init(ctx context.Context, cnf *Mycnf, initDBSQLFile string return nil } -// MySQL 5.7 GA and up have deprecated mysql_install_db. -// Instead, initialization is built into mysqld. -func useMysqldInitialize(version string) bool { - return strings.Contains(version, "Ver 5.7.") || - strings.Contains(version, "Ver 8.0.") -} - func (mysqld *Mysqld) installDataDir(cnf *Mycnf) error { mysqlRoot, err := vtenv.VtMysqlRoot() if err != nil { @@ -555,16 +650,8 @@ func (mysqld *Mysqld) installDataDir(cnf *Mycnf) error { if err != nil { return err } - - // Check mysqld version. - _, version, err := execCmd(mysqldPath, []string{"--version"}, nil, mysqlRoot, nil) - if err != nil { - return err - } - - if useMysqldInitialize(version) { + if mysqld.capabilities.HasInitializeInServer() { log.Infof("Installing data dir with mysqld --initialize-insecure") - args := []string{ "--defaults-file=" + cnf.path, "--basedir=" + mysqlBaseDir, @@ -606,7 +693,7 @@ func (mysqld *Mysqld) initConfig(root string, cnf *Mycnf, outFile string) error switch hr := hook.NewHookWithEnv("make_mycnf", nil, env).Execute(); hr.ExitStatus { case hook.HOOK_DOES_NOT_EXIST: log.Infof("make_mycnf hook doesn't exist, reading template files") - configData, err = cnf.makeMycnf(getMycnfTemplates(root)) + configData, err = cnf.makeMycnf(mysqld.getMycnfTemplates(root)) case hook.HOOK_SUCCESS: configData, err = cnf.fillMycnfTemplate(hr.Stdout) default: @@ -628,7 +715,7 @@ func contains(haystack []string, needle string) bool { return false } -func getMycnfTemplates(root string) []string { +func (mysqld *Mysqld) getMycnfTemplates(root string) []string { if *mycnfTemplateFile != "" { return []string{*mycnfTemplateFile} } @@ -644,28 +731,26 @@ func getMycnfTemplates(root string) []string { cnfTemplatePaths = append(cnfTemplatePaths, parts...) } - switch mysqlFlavor := os.Getenv("MYSQL_FLAVOR"); mysqlFlavor { - case "MariaDB": - path := path.Join(root, "config/mycnf/master_mariadb.cnf") - if !contains(cnfTemplatePaths, path) { - cnfTemplatePaths = append(cnfTemplatePaths, path) - } - case "MariaDB103": - path := path.Join(root, "config/mycnf/master_mariadb103.cnf") - if !contains(cnfTemplatePaths, path) { - cnfTemplatePaths = append(cnfTemplatePaths, path) - } - case "MySQL80": - path := path.Join(root, "config/mycnf/master_mysql80.cnf") - if !contains(cnfTemplatePaths, path) { - cnfTemplatePaths = append(cnfTemplatePaths, path) - } - default: - path := path.Join(root, "config/mycnf/master_mysql56.cnf") - // By default we assume Mysql56 compatable - if !contains(cnfTemplatePaths, path) { - cnfTemplatePaths = append(cnfTemplatePaths, path) - } + // Only include these files if they exist. + // master_{flavor}.cnf + // Percona Server == MySQL in this context + + f := flavorMariaDB + if mysqld.capabilities.IsMySQLLike() { + f = flavorMySQL + } + + p := path.Join(root, fmt.Sprintf("config/mycnf/master_%s.cnf", f)) + _, err := os.Stat(p) + if err == nil && !contains(cnfTemplatePaths, p) { + cnfTemplatePaths = append(cnfTemplatePaths, p) + } + + // master_{flavor}{major}{minor}.cnf + p = path.Join(root, fmt.Sprintf("config/mycnf/master_%s%d%d.cnf", f, mysqld.capabilities.version.Major, mysqld.capabilities.version.Minor)) + _, err = os.Stat(p) + if err == nil && !contains(cnfTemplatePaths, p) { + cnfTemplatePaths = append(cnfTemplatePaths, p) } return cnfTemplatePaths diff --git a/go/vt/mysqlctl/mysqld_test.go b/go/vt/mysqlctl/mysqld_test.go new file mode 100644 index 00000000000..f3e45b87e18 --- /dev/null +++ b/go/vt/mysqlctl/mysqld_test.go @@ -0,0 +1,146 @@ +/* +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 mysqlctl + +import ( + "os" + "testing" +) + +type testcase struct { + versionString string + version serverVersion + flavor mysqlFlavor +} + +func TestParseVersionString(t *testing.T) { + + var testcases = []testcase{ + + { + versionString: "mysqld Ver 5.7.27-0ubuntu0.19.04.1 for Linux on x86_64 ((Ubuntu))", + version: serverVersion{5, 7, 27}, + flavor: flavorMySQL, + }, + { + versionString: "mysqld Ver 5.6.43 for linux-glibc2.12 on x86_64 (MySQL Community Server (GPL))", + version: serverVersion{5, 6, 43}, + flavor: flavorMySQL, + }, + { + versionString: "mysqld Ver 5.7.26 for linux-glibc2.12 on x86_64 (MySQL Community Server (GPL))", + version: serverVersion{5, 7, 26}, + flavor: flavorMySQL, + }, + { + versionString: "mysqld Ver 8.0.16 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL)", + version: serverVersion{8, 0, 16}, + flavor: flavorMySQL, + }, + { + versionString: "mysqld Ver 5.7.26-29 for Linux on x86_64 (Percona Server (GPL), Release 29, Revision 11ad961)", + version: serverVersion{5, 7, 26}, + flavor: flavorPercona, + }, + { + versionString: "mysqld Ver 10.0.38-MariaDB for Linux on x86_64 (MariaDB Server)", + version: serverVersion{10, 0, 38}, + flavor: flavorMariaDB, + }, + { + versionString: "mysqld Ver 10.1.40-MariaDB for Linux on x86_64 (MariaDB Server)", + version: serverVersion{10, 1, 40}, + flavor: flavorMariaDB, + }, + { + versionString: "mysqld Ver 10.2.25-MariaDB for Linux on x86_64 (MariaDB Server)", + version: serverVersion{10, 2, 25}, + flavor: flavorMariaDB, + }, + { + versionString: "mysqld Ver 10.3.16-MariaDB for Linux on x86_64 (MariaDB Server)", + version: serverVersion{10, 3, 16}, + flavor: flavorMariaDB, + }, + { + versionString: "mysqld Ver 10.4.6-MariaDB for Linux on x86_64 (MariaDB Server)", + version: serverVersion{10, 4, 6}, + flavor: flavorMariaDB, + }, + { + versionString: "mysqld Ver 5.6.42 for linux-glibc2.12 on x86_64 (MySQL Community Server (GPL))", + version: serverVersion{5, 6, 42}, + flavor: flavorMySQL, + }, + { + versionString: "mysqld Ver 5.6.44-86.0 for Linux on x86_64 (Percona Server (GPL), Release 86.0, Revision eba1b3f)", + version: serverVersion{5, 6, 44}, + flavor: flavorPercona, + }, + { + versionString: "mysqld Ver 8.0.15-6 for Linux on x86_64 (Percona Server (GPL), Release 6, Revision 63abd08)", + version: serverVersion{8, 0, 15}, + flavor: flavorPercona, + }, + } + + for _, testcase := range testcases { + f, v, err := parseVersionString(testcase.versionString) + if v != testcase.version || f != testcase.flavor || err != nil { + t.Errorf("parseVersionString failed for: %#v, Got: %#v, %#v Expected: %#v, %#v", testcase.versionString, v, f, testcase.version, testcase.flavor) + } + } + +} + +func TestAssumeVersionString(t *testing.T) { + + // In these cases, the versionstring is nonsensical or unspecified. + // MYSQL_FLAVOR is used instead. + + var testcases = []testcase{ + { + versionString: "MySQL80", + version: serverVersion{8, 0, 11}, + flavor: flavorMySQL, + }, + { + versionString: "MySQL56", + version: serverVersion{5, 7, 10}, // Yes, this has to lie! + flavor: flavorMySQL, // There was no MySQL57 option + }, + { + versionString: "MariaDB", + version: serverVersion{10, 0, 10}, + flavor: flavorMariaDB, + }, + { + versionString: "MariaDB103", + version: serverVersion{10, 3, 7}, + flavor: flavorMariaDB, + }, + } + + for _, testcase := range testcases { + os.Setenv("MYSQL_FLAVOR", testcase.versionString) + f, v, err := getVersionFromEnv() + if v != testcase.version || f != testcase.flavor || err != nil { + t.Errorf("getVersionFromEnv() failed for: %#v, Got: %#v, %#v Expected: %#v, %#v", testcase.versionString, v, f, testcase.version, testcase.flavor) + } + } + +} diff --git a/go/vt/mysqlctl/version.go b/go/vt/mysqlctl/version.go new file mode 100644 index 00000000000..05bb18c20ef --- /dev/null +++ b/go/vt/mysqlctl/version.go @@ -0,0 +1,38 @@ +/* +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. +*/ + +/* + Detect server flavors and capabilities +*/ + +package mysqlctl + +type serverVersion struct { + Major, Minor, Patch int +} + +func (v *serverVersion) atLeast(compare serverVersion) bool { + if v.Major > compare.Major { + return true + } + if v.Major == compare.Major && v.Minor > compare.Minor { + return true + } + if v.Major == compare.Major && v.Minor == compare.Minor && v.Patch >= compare.Patch { + return true + } + return false +} diff --git a/go/vt/mysqlctl/xtrabackupengine.go b/go/vt/mysqlctl/xtrabackupengine.go index 7e32130ff33..32689be1225 100644 --- a/go/vt/mysqlctl/xtrabackupengine.go +++ b/go/vt/mysqlctl/xtrabackupengine.go @@ -23,11 +23,12 @@ import ( "flag" "fmt" "io" - "io/ioutil" "os" "os/exec" "path" + "regexp" "strings" + "sync" "time" "github.com/klauspost/pgzip" @@ -55,6 +56,9 @@ var ( // streaming mode xtrabackupStreamMode = flag.String("xtrabackup_stream_mode", "tar", "which mode to use if streaming, valid values are tar and xbstream") xtrabackupUser = flag.String("xtrabackup_user", "", "User that xtrabackup will use to connect to the database server. This user must have all necessary privileges. For details, please refer to xtrabackup documentation.") + // striping mode + xtrabackupStripes = flag.Uint("xtrabackup_stripes", 0, "If greater than 0, use data striping across this many destination files to parallelize data transfer and decompression") + xtrabackupStripeBlockSize = flag.Uint("xtrabackup_stripe_block_size", 102400, "Size in bytes of each block that gets sent to a given stripe before rotating to the next stripe") ) const ( @@ -84,6 +88,12 @@ type xtraBackupManifest struct { // Params are the parameters that backup was run with Params string `json:"ExtraCommandLineParams"` + // StreamMode is the stream mode used to create this backup. + StreamMode string + // NumStripes is the number of stripes the file is split across, if any. + NumStripes int32 + // StripeBlockSize is the size in bytes of each stripe block. + StripeBlockSize int32 // BackupTime is when the backup was taken in UTC time // format: "2006-01-02T15:04:05Z00:00" @@ -112,7 +122,7 @@ func (be *XtrabackupEngine) backupFileName() string { // ExecuteBackup returns a boolean that indicates if the backup is usable, // and an overall error. -func (be *XtrabackupEngine) ExecuteBackup(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, bh backupstorage.BackupHandle, backupConcurrency int, hookExtraEnv map[string]string, backupTime time.Time) (bool, error) { +func (be *XtrabackupEngine) ExecuteBackup(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, logger logutil.Logger, bh backupstorage.BackupHandle, backupConcurrency int, hookExtraEnv map[string]string, backupTime time.Time) (complete bool, finalErr error) { if *xtrabackupUser == "" { return false, vterrors.New(vtrpc.Code_INVALID_ARGUMENT, "xtrabackupUser must be specified.") @@ -151,72 +161,127 @@ func (be *XtrabackupEngine) ExecuteBackup(ctx context.Context, cnf *Mycnf, mysql } backupFileName := be.backupFileName() + numStripes := int(*xtrabackupStripes) - wc, err := bh.AddFile(ctx, backupFileName, 0) + destFiles, err := addStripeFiles(ctx, bh, backupFileName, numStripes, logger) if err != nil { return false, vterrors.Wrapf(err, "cannot create backup file %v", backupFileName) } closeFile := func(wc io.WriteCloser, fileName string) { - if closeErr := wc.Close(); err == nil { - err = closeErr + if closeErr := wc.Close(); finalErr == nil { + finalErr = closeErr } else if closeErr != nil { // since we already have an error just log this - logger.Errorf("error closing file %v: %v", fileName, err) + logger.Errorf("error closing file %v: %v", fileName, closeErr) } } - defer closeFile(wc, backupFileName) + defer func() { + for _, file := range destFiles { + closeFile(file, backupFileName) + } + }() backupCmd := exec.CommandContext(ctx, backupProgram, flagsToExec...) - backupOut, _ := backupCmd.StdoutPipe() - backupErr, _ := backupCmd.StderrPipe() - dst := bufio.NewWriterSize(wc, writerBufferSize) - writer := io.MultiWriter(dst) - - // Create the gzip compression pipe, if necessary. - var gzip *pgzip.Writer - if *backupStorageCompress { - gzip, err = pgzip.NewWriterLevel(writer, pgzip.BestSpeed) - if err != nil { - return false, vterrors.Wrap(err, "cannot create gziper") + backupOut, err := backupCmd.StdoutPipe() + if err != nil { + return false, vterrors.Wrap(err, "cannot create stdout pipe") + } + backupErr, err := backupCmd.StderrPipe() + if err != nil { + return false, vterrors.Wrap(err, "cannot create stderr pipe") + } + + destWriters := []io.Writer{} + destBuffers := []*bufio.Writer{} + destCompressors := []*pgzip.Writer{} + for _, file := range destFiles { + buffer := bufio.NewWriterSize(file, writerBufferSize) + destBuffers = append(destBuffers, buffer) + writer := io.Writer(buffer) + + // Create the gzip compression pipe, if necessary. + if *backupStorageCompress { + compressor, err := pgzip.NewWriterLevel(writer, pgzip.BestSpeed) + if err != nil { + return false, vterrors.Wrap(err, "cannot create gzip compressor") + } + compressor.SetConcurrency(*backupCompressBlockSize, *backupCompressBlocks) + writer = compressor + destCompressors = append(destCompressors, compressor) } - gzip.SetConcurrency(*backupCompressBlockSize, *backupCompressBlocks) - writer = gzip + + destWriters = append(destWriters, writer) } if err = backupCmd.Start(); err != nil { return false, vterrors.Wrap(err, "unable to start backup") } + // Read stderr in the background, so we can log progress as xtrabackup runs. + // Also save important lines of the output so we can parse it later to find + // the replication position. Note that if we don't read stderr as we go, the + // xtrabackup process gets blocked when the write buffer fills up. + stderrBuilder := &strings.Builder{} + stderrDone := make(chan struct{}) + go func() { + defer close(stderrDone) + + scanner := bufio.NewScanner(backupErr) + capture := false + for scanner.Scan() { + line := scanner.Text() + logger.Infof("xtrabackup stderr: %s", line) + + // Wait until we see the first line of the binlog position. + // Then capture all subsequent lines. We need multiple lines since + // the value we're looking for has newlines in it. + if !capture { + if !strings.Contains(line, "MySQL binlog position") { + continue + } + capture = true + } + fmt.Fprintln(stderrBuilder, line) + } + if err := scanner.Err(); err != nil { + logger.Errorf("error reading from xtrabackup stderr: %v", err) + } + }() + // Copy from the stream output to destination file (optional gzip) - _, err = io.Copy(writer, backupOut) - if err != nil { + blockSize := int64(*xtrabackupStripeBlockSize) + if blockSize < 1024 { + // Enforce minimum block size. + blockSize = 1024 + } + if _, err := copyToStripes(destWriters, backupOut, blockSize); err != nil { return false, vterrors.Wrap(err, "cannot copy output from xtrabackup command") } - // Close gzip to flush it, after that all data is sent to writer. - if gzip != nil { - if err = gzip.Close(); err != nil { - return false, vterrors.Wrap(err, "cannot close gzip") + // Close compressor to flush it. After that all data is sent to the buffer. + for _, compressor := range destCompressors { + if err := compressor.Close(); err != nil { + return false, vterrors.Wrap(err, "cannot close gzip compressor") } } // Flush the buffer to finish writing on destination. - if err = dst.Flush(); err != nil { - return false, vterrors.Wrapf(err, "cannot flush destination: %v", backupFileName) + for _, buffer := range destBuffers { + if err = buffer.Flush(); err != nil { + return false, vterrors.Wrapf(err, "cannot flush destination: %v", backupFileName) + } } - stderrOutput, err := ioutil.ReadAll(backupErr) - if err != nil { - return false, vterrors.Wrap(err, "backup failed while reading command output") - } - err = backupCmd.Wait() - output := string(stderrOutput) - logger.Infof("Xtrabackup backup command output: %v", output) - if err != nil { + // Wait for stderr scanner to stop. + <-stderrDone + // Get the final (filtered) stderr output. + sterrOutput := stderrBuilder.String() + + if err := backupCmd.Wait(); err != nil { return false, vterrors.Wrap(err, "xtrabackup failed with error") } - replicationPosition, rerr := findReplicationPosition(output, flavor, logger) + replicationPosition, rerr := findReplicationPosition(sterrOutput, flavor, logger) if rerr != nil { return false, vterrors.Wrap(rerr, "backup failed trying to find replication position") } @@ -229,12 +294,14 @@ func (be *XtrabackupEngine) ExecuteBackup(ctx context.Context, cnf *Mycnf, mysql // JSON-encode and write the MANIFEST bm := &xtraBackupManifest{ - FileName: backupFileName, - BackupMethod: xtrabackupBackupMethod, - Position: replicationPosition, - SkipCompress: !*backupStorageCompress, - Params: *xtrabackupBackupFlags, - BackupTime: backupTime.Format(time.RFC3339), + FileName: backupFileName, + BackupMethod: xtrabackupBackupMethod, + Position: replicationPosition, + SkipCompress: !*backupStorageCompress, + Params: *xtrabackupBackupFlags, + NumStripes: int32(numStripes), + StripeBlockSize: int32(*xtrabackupStripeBlockSize), + BackupTime: backupTime.Format(time.RFC3339), } data, err := json.MarshalIndent(bm, "", " ") @@ -295,19 +362,19 @@ func (be *XtrabackupEngine) restoreFromBackup(ctx context.Context, cnf *Mycnf, b // first download the file into a tmp dir // and extract all the files - tempDir := fmt.Sprintf("%v/%v", cnf.TmpDir, time.Now().UTC().Format("2006-01-02.150405")) + tempDir := fmt.Sprintf("%v/%v", cnf.TmpDir, time.Now().UTC().Format("xtrabackup-2006-01-02.150405")) // create tempDir if err := os.MkdirAll(tempDir, os.ModePerm); err != nil { return err } - if err := be.extractFiles(ctx, logger, bh, !bm.SkipCompress, be.backupFileName(), tempDir); err != nil { - logger.Errorf("error restoring backup file %v:%v", be.backupFileName(), err) + if err := be.extractFiles(ctx, logger, bh, bm, tempDir); err != nil { + logger.Errorf("error extracting backup files: %v", err) return err } // copy / extract files - logger.Infof("Restore: Preparing the files") + logger.Infof("Restore: Preparing the extracted files") // prepare the backup restoreProgram := path.Join(*xtrabackupEnginePath, xtrabackupBinaryName) flagsToExec := []string{"--defaults-file=" + cnf.path, @@ -315,121 +382,148 @@ func (be *XtrabackupEngine) restoreFromBackup(ctx context.Context, cnf *Mycnf, b "--target-dir=" + tempDir, } prepareCmd := exec.CommandContext(ctx, restoreProgram, flagsToExec...) - prepareOut, _ := prepareCmd.StdoutPipe() - prepareErr, _ := prepareCmd.StderrPipe() - if err := prepareCmd.Start(); err != nil { - return vterrors.Wrap(err, "unable to start prepare") + prepareOut, err := prepareCmd.StdoutPipe() + if err != nil { + return vterrors.Wrap(err, "cannot create stdout pipe") } - - errOutput, _ := ioutil.ReadAll(prepareErr) - stdOutput, _ := ioutil.ReadAll(prepareOut) - err := prepareCmd.Wait() - if string(stdOutput) != "" { - logger.Infof("Prepare stdout %v", string(stdOutput)) + prepareErr, err := prepareCmd.StderrPipe() + if err != nil { + return vterrors.Wrap(err, "cannot create stderr pipe") } - output := string(errOutput) - if output != "" { - logger.Infof("Prepare stderr %v", output) + if err := prepareCmd.Start(); err != nil { + return vterrors.Wrap(err, "can't start prepare step") } - if err != nil { + // Read stdout/stderr in the background and send each line to the logger. + prepareWg := &sync.WaitGroup{} + prepareWg.Add(2) + go scanLinesToLogger("prepare stdout", prepareOut, logger, prepareWg.Done) + go scanLinesToLogger("prepare stderr", prepareErr, logger, prepareWg.Done) + prepareWg.Wait() + + // Get exit status. + if err := prepareCmd.Wait(); err != nil { return vterrors.Wrap(err, "prepare step failed") } - // then copy-back - logger.Infof("Restore: Copying the files") + // then move-back + logger.Infof("Restore: Move extracted and prepared files to final locations") flagsToExec = []string{"--defaults-file=" + cnf.path, - "--copy-back", + "--move-back", "--target-dir=" + tempDir, } - copybackCmd := exec.CommandContext(ctx, restoreProgram, flagsToExec...) - copybackErr, _ := copybackCmd.StderrPipe() - copybackOut, _ := copybackCmd.StdoutPipe() - - if err = copybackCmd.Start(); err != nil { - return vterrors.Wrap(err, "unable to start copy-back") + movebackCmd := exec.CommandContext(ctx, restoreProgram, flagsToExec...) + movebackOut, err := movebackCmd.StdoutPipe() + if err != nil { + return vterrors.Wrap(err, "cannot create stdout pipe") } - - errOutput, _ = ioutil.ReadAll(copybackErr) - stdOutput, _ = ioutil.ReadAll(copybackOut) - err = copybackCmd.Wait() - output = string(errOutput) - if output != "" { - logger.Infof("Copy-back stderr %v", string(output)) + movebackErr, err := movebackCmd.StderrPipe() + if err != nil { + return vterrors.Wrap(err, "cannot create stderr pipe") } - if string(stdOutput) != "" { - logger.Infof("Copy-back stdout %v", string(stdOutput)) + if err := movebackCmd.Start(); err != nil { + return vterrors.Wrap(err, "can't start move-back step") } - if err != nil { - return vterrors.Wrap(err, "copy-back step failed") + // Read stdout/stderr in the background and send each line to the logger. + movebackWg := &sync.WaitGroup{} + movebackWg.Add(2) + go scanLinesToLogger("move-back stdout", movebackOut, logger, movebackWg.Done) + go scanLinesToLogger("move-back stderr", movebackErr, logger, movebackWg.Done) + movebackWg.Wait() + + // Get exit status. + if err := movebackCmd.Wait(); err != nil { + return vterrors.Wrap(err, "move-back step failed") } + return nil } // extractFiles extracts all the files from the backup archive -func (be *XtrabackupEngine) extractFiles( - ctx context.Context, - logger logutil.Logger, - bh backupstorage.BackupHandle, - compress bool, - name string, - tempDir string) (err error) { - - streamMode := *xtrabackupStreamMode - // Open the source file for reading. - var source io.ReadCloser - source, err = bh.ReadFile(ctx, name) +func (be *XtrabackupEngine) extractFiles(ctx context.Context, logger logutil.Logger, bh backupstorage.BackupHandle, bm xtraBackupManifest, tempDir string) error { + // Pull details from the MANIFEST where available, so we can still restore + // backups taken with different flags. Some fields were not always present, + // so if necessary we default to the flag values. + compressed := !bm.SkipCompress + streamMode := bm.StreamMode + if streamMode == "" { + streamMode = *xtrabackupStreamMode + } + baseFileName := bm.FileName + if baseFileName == "" { + baseFileName = be.backupFileName() + } + + // Open the source files for reading. + srcFiles, err := readStripeFiles(ctx, bh, baseFileName, int(bm.NumStripes), logger) if err != nil { - return err + return vterrors.Wrapf(err, "cannot open backup file %v", baseFileName) } - defer source.Close() - - reader := io.MultiReader(source) - - // Create the uncompresser if needed. - if compress { - gz, err := pgzip.NewReader(reader) - if err != nil { - return err + defer func() { + for _, file := range srcFiles { + file.Close() } - defer func() { - if cerr := gz.Close(); cerr != nil { - if err != nil { - // We already have an error, just log this one. - logger.Errorf("failed to close gunziper %v: %v", name, cerr) - } else { - err = cerr - } + }() + + srcReaders := []io.Reader{} + srcDecompressors := []*pgzip.Reader{} + for _, file := range srcFiles { + reader := io.Reader(file) + + // Create the decompresser if needed. + if compressed { + decompressor, err := pgzip.NewReader(reader) + if err != nil { + return vterrors.Wrap(err, "can't create gzip decompressor") } - }() - reader = gz + srcDecompressors = append(srcDecompressors, decompressor) + reader = decompressor + } + + srcReaders = append(srcReaders, reader) } + defer func() { + for _, decompressor := range srcDecompressors { + if cerr := decompressor.Close(); cerr != nil { + logger.Errorf("failed to close gzip decompressor: %v", cerr) + } + } + }() + + reader := stripeReader(srcReaders, int64(bm.StripeBlockSize)) switch streamMode { case streamModeTar: // now extract the files by running tar // error if we can't find tar - flagsToExec := []string{"-C", tempDir, "-xi"} + flagsToExec := []string{"-C", tempDir, "-xiv"} tarCmd := exec.CommandContext(ctx, "tar", flagsToExec...) logger.Infof("Executing tar cmd with flags %v", flagsToExec) tarCmd.Stdin = reader - tarOut, _ := tarCmd.StdoutPipe() - tarErr, _ := tarCmd.StderrPipe() - tarCmd.Start() - output, _ := ioutil.ReadAll(tarOut) - errOutput, _ := ioutil.ReadAll(tarErr) - err := tarCmd.Wait() - - if string(output) != "" { - logger.Infof("output from tar: %v ", string(output)) - } - if string(errOutput) != "" { - logger.Infof("error from tar: %v ", string(errOutput)) + tarOut, err := tarCmd.StdoutPipe() + if err != nil { + return vterrors.Wrap(err, "cannot create stdout pipe") } + tarErr, err := tarCmd.StderrPipe() if err != nil { - return vterrors.Wrap(err, "error from tar") + return vterrors.Wrap(err, "cannot create stderr pipe") + } + if err := tarCmd.Start(); err != nil { + return vterrors.Wrap(err, "can't start tar") + } + + // Read stdout/stderr in the background and send each line to the logger. + tarWg := &sync.WaitGroup{} + tarWg.Add(2) + go scanLinesToLogger("tar stdout", tarOut, logger, tarWg.Done) + go scanLinesToLogger("tar stderr", tarErr, logger, tarWg.Done) + tarWg.Wait() + + // Get exit status. + if err := tarCmd.Wait(); err != nil { + return vterrors.Wrap(err, "tar failed") } case xbstream: @@ -439,25 +533,32 @@ func (be *XtrabackupEngine) extractFiles( if *xbstreamRestoreFlags != "" { flagsToExec = append(flagsToExec, strings.Fields(*xbstreamRestoreFlags)...) } - flagsToExec = append(flagsToExec, "-C", tempDir, "-x") + flagsToExec = append(flagsToExec, "-C", tempDir, "-xv") xbstreamCmd := exec.CommandContext(ctx, xbstreamProgram, flagsToExec...) logger.Infof("Executing xbstream cmd: %v %v", xbstreamProgram, flagsToExec) xbstreamCmd.Stdin = reader - xbstreamOut, _ := xbstreamCmd.StdoutPipe() - xbstreamErr, _ := xbstreamCmd.StderrPipe() - xbstreamCmd.Start() - output, _ := ioutil.ReadAll(xbstreamOut) - errOutput, _ := ioutil.ReadAll(xbstreamErr) - err := xbstreamCmd.Wait() - - if string(output) != "" { - logger.Infof("Output from xbstream: %v ", string(output)) - } - if string(errOutput) != "" { - logger.Infof("error from xbstream: %v", string(errOutput)) + xbstreamOut, err := xbstreamCmd.StdoutPipe() + if err != nil { + return vterrors.Wrap(err, "cannot create stdout pipe") } + xbstreamErr, err := xbstreamCmd.StderrPipe() if err != nil { - return vterrors.Wrap(err, "error from xbstream") + return vterrors.Wrap(err, "cannot create stderr pipe") + } + if err := xbstreamCmd.Start(); err != nil { + return vterrors.Wrap(err, "can't start xbstream") + } + + // Read stdout/stderr in the background and send each line to the logger. + xbstreamWg := &sync.WaitGroup{} + xbstreamWg.Add(2) + go scanLinesToLogger("xbstream stdout", xbstreamOut, logger, xbstreamWg.Done) + go scanLinesToLogger("xbstream stderr", xbstreamErr, logger, xbstreamWg.Done) + xbstreamWg.Wait() + + // Get exit status. + if err := xbstreamCmd.Wait(); err != nil { + return vterrors.Wrap(err, "xbstream failed") } default: return vterrors.Errorf(vtrpc.Code_INVALID_ARGUMENT, "%v is not a valid value for xtrabackup_stream_mode, supported modes are tar and xbstream", streamMode) @@ -465,32 +566,191 @@ func (be *XtrabackupEngine) extractFiles( return nil } +var xtrabackupReplicationPositionRegexp = regexp.MustCompile(`GTID of the last change '([^']*)'`) + func findReplicationPosition(input, flavor string, logger logutil.Logger) (mysql.Position, error) { - substrs := strings.Split(input, "'") - index := -1 - for i, str := range substrs { - if strings.Contains(str, "GTID of the last change") { - index = i + 1 - break - } - } - position := "" - // asserts that xtrabackup output comes with GTIDs in the format we expect - if index != -1 && index < len(substrs) { - // since we are extracting this from the log, it contains newlines - // replace them with a single space to match the SET GLOBAL gtid_purged command in xtrabackup_slave_info - position = strings.Replace(substrs[index], "\n", " ", -1) - } + match := xtrabackupReplicationPositionRegexp.FindStringSubmatch(input) + if match == nil || len(match) != 2 { + return mysql.Position{}, vterrors.Errorf(vtrpc.Code_INVALID_ARGUMENT, "couldn't find replication position in xtrabackup stderr output") + } + position := match[1] + // Remove all spaces, tabs, and newlines. + position = strings.Replace(position, " ", "", -1) + position = strings.Replace(position, "\t", "", -1) + position = strings.Replace(position, "\n", "", -1) logger.Infof("Found position: %v", position) + if position == "" { + return mysql.Position{}, vterrors.Errorf(vtrpc.Code_INVALID_ARGUMENT, "empty replication position from xtrabackup") + } // flavor is required to parse a string into a mysql.Position replicationPosition, err := mysql.ParsePosition(flavor, position) if err != nil { - return mysql.Position{}, err + return mysql.Position{}, vterrors.Wrapf(err, "can't parse replication position from xtrabackup: %v", position) } return replicationPosition, nil } +// scanLinesToLogger scans full lines from the given Reader and sends them to +// the given Logger until EOF. +func scanLinesToLogger(prefix string, reader io.Reader, logger logutil.Logger, doneFunc func()) { + defer doneFunc() + + scanner := bufio.NewScanner(reader) + for scanner.Scan() { + line := scanner.Text() + logger.Infof("%s: %s", prefix, line) + } + if err := scanner.Err(); err != nil { + // This is usually run in a background goroutine, so there's no point + // returning an error. Just log it. + logger.Warningf("error scanning lines from %s: %v", prefix, err) + } +} + +func stripeFileName(baseFileName string, index int) string { + return fmt.Sprintf("%s-%03d", baseFileName, index) +} + +func addStripeFiles(ctx context.Context, backupHandle backupstorage.BackupHandle, baseFileName string, numStripes int, logger logutil.Logger) ([]io.WriteCloser, error) { + if numStripes <= 1 { + // No striping. + file, err := backupHandle.AddFile(ctx, baseFileName, 0) + return []io.WriteCloser{file}, err + } + + files := []io.WriteCloser{} + for i := 0; i < numStripes; i++ { + file, err := backupHandle.AddFile(ctx, stripeFileName(baseFileName, i), 0) + if err != nil { + // Close any files we already opened and clear them from the result. + for _, file := range files { + if err := file.Close(); err != nil { + logger.Warningf("error closing backup stripe file: %v", err) + } + } + return nil, err + } + files = append(files, file) + } + + return files, nil +} + +func readStripeFiles(ctx context.Context, backupHandle backupstorage.BackupHandle, baseFileName string, numStripes int, logger logutil.Logger) ([]io.ReadCloser, error) { + if numStripes <= 1 { + // No striping. + file, err := backupHandle.ReadFile(ctx, baseFileName) + return []io.ReadCloser{file}, err + } + + files := []io.ReadCloser{} + for i := 0; i < numStripes; i++ { + file, err := backupHandle.ReadFile(ctx, stripeFileName(baseFileName, i)) + if err != nil { + // Close any files we already opened and clear them from the result. + for _, file := range files { + if err := file.Close(); err != nil { + logger.Warningf("error closing backup stripe file: %v", err) + } + } + return nil, err + } + files = append(files, file) + } + + return files, nil +} + +func copyToStripes(writers []io.Writer, reader io.Reader, blockSize int64) (written int64, err error) { + if len(writers) == 1 { + // Not striped. + return io.Copy(writers[0], reader) + } + + // Read blocks from source and round-robin them to destination writers. + // Since we put a buffer in front of the destination file, and pgzip has its + // own buffer as well, we are writing into a buffer either way (whether a + // compressor is in the chain or not). That means these writes should not + // block often, so we shouldn't need separate goroutines here. + destIndex := 0 + for { + // Copy blockSize bytes to this writer before rotating to the next one. + // The only acceptable reason for copying less than blockSize bytes is EOF. + n, err := io.CopyN(writers[destIndex], reader, blockSize) + written += n + if err == io.EOF { + // We're done. + return written, nil + } + if err != nil { + // If we failed to copy exactly blockSize bytes for any reason other + // than EOF, we must abort. + return written, err + } + + // Rotate to the next writer. + destIndex++ + if destIndex == len(writers) { + destIndex = 0 + } + } +} + +func stripeReader(readers []io.Reader, blockSize int64) io.Reader { + if len(readers) == 1 { + // No striping. + return readers[0] + } + + // Make a pipe to convert our overall Writer into a Reader. + // We will launch a goroutine to write to the write half of the pipe, + // and return the read half to the caller. + reader, writer := io.Pipe() + + go func() { + // Read blocks from each source in round-robin and send them to the pipe. + // When using pgzip, there is already a read-ahead goroutine for every + // source, so we don't need to launch one for each source. + // TODO: See if we need to add read-ahead goroutines for the case when + // compression is not enabled in order to get any benefit to restore + // parallelism from data striping. + srcIndex := 0 + for { + // Copy blockSize bytes from this reader before rotating to the next one. + // The only acceptable reason for copying less than blockSize bytes is EOF. + n, err := io.CopyN(writer, readers[srcIndex], blockSize) + if err != nil { + // If we failed to copy exactly blockSize bytes for any + // reason other than EOF, we must abort. + if err != io.EOF { + writer.CloseWithError(err) + return + } + + // If we hit EOF after copying less than the blockSize from + // this reader, we must be done. + if n < blockSize { + // Close the write half so the read half gets EOF. + writer.Close() + return + } + // If we hit EOF after copying exactly blockSize bytes, then we + // need to keep checking the rest of the stripes until one of + // them returns EOF with n < blockSize. + } + + // Rotate to the next writer. + srcIndex++ + if srcIndex == len(readers) { + srcIndex = 0 + } + } + }() + + return reader +} + func init() { BackupEngineMap[xtrabackupBackupMethod] = &XtrabackupEngine{} } diff --git a/go/vt/mysqlctl/xtrabackupengine_test.go b/go/vt/mysqlctl/xtrabackupengine_test.go new file mode 100644 index 00000000000..d8587176164 --- /dev/null +++ b/go/vt/mysqlctl/xtrabackupengine_test.go @@ -0,0 +1,101 @@ +package mysqlctl + +import ( + "bytes" + "io" + "math/rand" + "testing" + + "vitess.io/vitess/go/vt/logutil" +) + +func TestFindReplicationPosition(t *testing.T) { + input := `MySQL binlog position: filename 'vt-0476396352-bin.000005', position '310088991', GTID of the last change '145e508e-ae54-11e9-8ce6-46824dd1815e:1-3, + 1e51f8be-ae54-11e9-a7c6-4280a041109b:1-3, + 47b59de1-b368-11e9-b48b-624401d35560:1-152981, + 557def0a-b368-11e9-84ed-f6fffd91cc57:1-3, + 599ef589-ae55-11e9-9688-ca1f44501925:1-14857169, + b9ce485d-b36b-11e9-9b17-2a6e0a6011f4:1-371262' + MySQL slave binlog position: master host '10.128.0.43', purge list '145e508e-ae54-11e9-8ce6-46824dd1815e:1-3, 1e51f8be-ae54-11e9-a7c6-4280a041109b:1-3, 47b59de1-b368-11e9-b48b-624401d35560:1-152981, 557def0a-b368-11e9-84ed-f6fffd91cc57:1-3, 599ef589-ae55-11e9-9688-ca1f44501925:1-14857169, b9ce485d-b36b-11e9-9b17-2a6e0a6011f4:1-371262', channel name: '' + + 190809 00:15:44 [00] Streaming + 190809 00:15:44 [00] ...done + 190809 00:15:44 [00] Streaming + 190809 00:15:44 [00] ...done + xtrabackup: Transaction log of lsn (405344842034) to (406364859653) was copied. + 190809 00:16:14 completed OK!` + want := "145e508e-ae54-11e9-8ce6-46824dd1815e:1-3,1e51f8be-ae54-11e9-a7c6-4280a041109b:1-3,47b59de1-b368-11e9-b48b-624401d35560:1-152981,557def0a-b368-11e9-84ed-f6fffd91cc57:1-3,599ef589-ae55-11e9-9688-ca1f44501925:1-14857169,b9ce485d-b36b-11e9-9b17-2a6e0a6011f4:1-371262" + + pos, err := findReplicationPosition(input, "MySQL56", logutil.NewConsoleLogger()) + if err != nil { + t.Fatalf("findReplicationPosition error: %v", err) + } + if got := pos.String(); got != want { + t.Errorf("findReplicationPosition() = %v; want %v", got, want) + } +} + +func TestFindReplicationPositionNoMatch(t *testing.T) { + // Make sure failure to find a match triggers an error. + input := `nothing` + + _, err := findReplicationPosition(input, "MySQL56", logutil.NewConsoleLogger()) + if err == nil { + t.Fatalf("expected error from findReplicationPosition but got nil") + } +} + +func TestFindReplicationPositionEmptyMatch(t *testing.T) { + // Make sure failure to find a match triggers an error. + input := `GTID of the last change ' + + '` + + _, err := findReplicationPosition(input, "MySQL56", logutil.NewConsoleLogger()) + if err == nil { + t.Fatalf("expected error from findReplicationPosition but got nil") + } +} + +func TestStripeRoundTrip(t *testing.T) { + // Generate some deterministic input data. + dataSize := int64(1000000) + input := make([]byte, dataSize) + rng := rand.New(rand.NewSource(1)) + rng.Read(input) + + test := func(blockSize int64, stripes int) { + // Write it out striped across some buffers. + buffers := make([]bytes.Buffer, stripes) + readers := []io.Reader{} + writers := []io.Writer{} + for i := range buffers { + readers = append(readers, &buffers[i]) + writers = append(writers, &buffers[i]) + } + copyToStripes(writers, bytes.NewReader(input), blockSize) + + // Read it back and merge. + outBuf := &bytes.Buffer{} + written, err := io.Copy(outBuf, stripeReader(readers, blockSize)) + if err != nil { + t.Errorf("dataSize=%d, blockSize=%d, stripes=%d; copy error: %v", dataSize, blockSize, stripes, err) + } + if written != dataSize { + t.Errorf("dataSize=%d, blockSize=%d, stripes=%d; copy error: wrote %d total bytes instead of dataSize", dataSize, blockSize, stripes, written) + } + output := outBuf.Bytes() + if !bytes.Equal(input, output) { + t.Errorf("output bytes are not the same as input") + } + } + + // Test block size that evenly divides data size. + test(1000, 10) + // Test block size that doesn't evenly divide data size. + test(3000, 10) + // Test stripe count that doesn't evenly divide data size. + test(1000, 30) + // Test block size and stripe count that don't evenly divide data size. + test(6000, 7) +} diff --git a/go/vt/proto/binlogdata/binlogdata.pb.go b/go/vt/proto/binlogdata/binlogdata.pb.go index a0b4c05757a..24983945643 100644 --- a/go/vt/proto/binlogdata/binlogdata.pb.go +++ b/go/vt/proto/binlogdata/binlogdata.pb.go @@ -48,7 +48,7 @@ func (x OnDDLAction) String() string { return proto.EnumName(OnDDLAction_name, int32(x)) } func (OnDDLAction) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{0} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{0} } // VEventType enumerates the event types. @@ -73,6 +73,7 @@ const ( VEventType_FIELD VEventType = 13 VEventType_HEARTBEAT VEventType = 14 VEventType_VGTID VEventType = 15 + VEventType_JOURNAL VEventType = 16 ) var VEventType_name = map[int32]string{ @@ -92,6 +93,7 @@ var VEventType_name = map[int32]string{ 13: "FIELD", 14: "HEARTBEAT", 15: "VGTID", + 16: "JOURNAL", } var VEventType_value = map[string]int32{ "UNKNOWN": 0, @@ -110,13 +112,38 @@ var VEventType_value = map[string]int32{ "FIELD": 13, "HEARTBEAT": 14, "VGTID": 15, + "JOURNAL": 16, } func (x VEventType) String() string { return proto.EnumName(VEventType_name, int32(x)) } func (VEventType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{1} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{1} +} + +// MigrationType specifies the type of migration for the Journal. +type MigrationType int32 + +const ( + MigrationType_TABLES MigrationType = 0 + MigrationType_SHARDS MigrationType = 1 +) + +var MigrationType_name = map[int32]string{ + 0: "TABLES", + 1: "SHARDS", +} +var MigrationType_value = map[string]int32{ + "TABLES": 0, + "SHARDS": 1, +} + +func (x MigrationType) String() string { + return proto.EnumName(MigrationType_name, int32(x)) +} +func (MigrationType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{2} } type BinlogTransaction_Statement_Category int32 @@ -164,7 +191,7 @@ func (x BinlogTransaction_Statement_Category) String() string { return proto.EnumName(BinlogTransaction_Statement_Category_name, int32(x)) } func (BinlogTransaction_Statement_Category) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{1, 0, 0} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{1, 0, 0} } // Charset is the per-statement charset info from a QUERY_EVENT binlog entry. @@ -184,7 +211,7 @@ func (m *Charset) Reset() { *m = Charset{} } func (m *Charset) String() string { return proto.CompactTextString(m) } func (*Charset) ProtoMessage() {} func (*Charset) Descriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{0} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{0} } func (m *Charset) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Charset.Unmarshal(m, b) @@ -241,7 +268,7 @@ func (m *BinlogTransaction) Reset() { *m = BinlogTransaction{} } func (m *BinlogTransaction) String() string { return proto.CompactTextString(m) } func (*BinlogTransaction) ProtoMessage() {} func (*BinlogTransaction) Descriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{1} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{1} } func (m *BinlogTransaction) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BinlogTransaction.Unmarshal(m, b) @@ -291,7 +318,7 @@ func (m *BinlogTransaction_Statement) Reset() { *m = BinlogTransaction_S func (m *BinlogTransaction_Statement) String() string { return proto.CompactTextString(m) } func (*BinlogTransaction_Statement) ProtoMessage() {} func (*BinlogTransaction_Statement) Descriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{1, 0} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{1, 0} } func (m *BinlogTransaction_Statement) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BinlogTransaction_Statement.Unmarshal(m, b) @@ -349,7 +376,7 @@ func (m *StreamKeyRangeRequest) Reset() { *m = StreamKeyRangeRequest{} } func (m *StreamKeyRangeRequest) String() string { return proto.CompactTextString(m) } func (*StreamKeyRangeRequest) ProtoMessage() {} func (*StreamKeyRangeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{2} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{2} } func (m *StreamKeyRangeRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamKeyRangeRequest.Unmarshal(m, b) @@ -402,7 +429,7 @@ func (m *StreamKeyRangeResponse) Reset() { *m = StreamKeyRangeResponse{} func (m *StreamKeyRangeResponse) String() string { return proto.CompactTextString(m) } func (*StreamKeyRangeResponse) ProtoMessage() {} func (*StreamKeyRangeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{3} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{3} } func (m *StreamKeyRangeResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamKeyRangeResponse.Unmarshal(m, b) @@ -446,7 +473,7 @@ func (m *StreamTablesRequest) Reset() { *m = StreamTablesRequest{} } func (m *StreamTablesRequest) String() string { return proto.CompactTextString(m) } func (*StreamTablesRequest) ProtoMessage() {} func (*StreamTablesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{4} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{4} } func (m *StreamTablesRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamTablesRequest.Unmarshal(m, b) @@ -499,7 +526,7 @@ func (m *StreamTablesResponse) Reset() { *m = StreamTablesResponse{} } func (m *StreamTablesResponse) String() string { return proto.CompactTextString(m) } func (*StreamTablesResponse) ProtoMessage() {} func (*StreamTablesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{5} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{5} } func (m *StreamTablesResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamTablesResponse.Unmarshal(m, b) @@ -544,7 +571,7 @@ func (m *Rule) Reset() { *m = Rule{} } func (m *Rule) String() string { return proto.CompactTextString(m) } func (*Rule) ProtoMessage() {} func (*Rule) Descriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{6} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{6} } func (m *Rule) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Rule.Unmarshal(m, b) @@ -591,7 +618,7 @@ func (m *Filter) Reset() { *m = Filter{} } func (m *Filter) String() string { return proto.CompactTextString(m) } func (*Filter) ProtoMessage() {} func (*Filter) Descriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{7} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{7} } func (m *Filter) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Filter.Unmarshal(m, b) @@ -646,7 +673,7 @@ func (m *BinlogSource) Reset() { *m = BinlogSource{} } func (m *BinlogSource) String() string { return proto.CompactTextString(m) } func (*BinlogSource) ProtoMessage() {} func (*BinlogSource) Descriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{8} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{8} } func (m *BinlogSource) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BinlogSource.Unmarshal(m, b) @@ -728,7 +755,7 @@ func (m *RowChange) Reset() { *m = RowChange{} } func (m *RowChange) String() string { return proto.CompactTextString(m) } func (*RowChange) ProtoMessage() {} func (*RowChange) Descriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{9} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{9} } func (m *RowChange) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RowChange.Unmarshal(m, b) @@ -775,7 +802,7 @@ func (m *RowEvent) Reset() { *m = RowEvent{} } func (m *RowEvent) String() string { return proto.CompactTextString(m) } func (*RowEvent) ProtoMessage() {} func (*RowEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{10} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{10} } func (m *RowEvent) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RowEvent.Unmarshal(m, b) @@ -821,7 +848,7 @@ func (m *FieldEvent) Reset() { *m = FieldEvent{} } func (m *FieldEvent) String() string { return proto.CompactTextString(m) } func (*FieldEvent) ProtoMessage() {} func (*FieldEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{11} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{11} } func (m *FieldEvent) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FieldEvent.Unmarshal(m, b) @@ -868,7 +895,7 @@ func (m *ShardGtid) Reset() { *m = ShardGtid{} } func (m *ShardGtid) String() string { return proto.CompactTextString(m) } func (*ShardGtid) ProtoMessage() {} func (*ShardGtid) Descriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{12} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{12} } func (m *ShardGtid) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ShardGtid.Unmarshal(m, b) @@ -920,7 +947,7 @@ func (m *VGtid) Reset() { *m = VGtid{} } func (m *VGtid) String() string { return proto.CompactTextString(m) } func (*VGtid) ProtoMessage() {} func (*VGtid) Descriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{13} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{13} } func (m *VGtid) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VGtid.Unmarshal(m, b) @@ -947,6 +974,138 @@ func (m *VGtid) GetShardGtids() []*ShardGtid { return nil } +type KeyspaceShard struct { + Keyspace string `protobuf:"bytes,1,opt,name=keyspace,proto3" json:"keyspace,omitempty"` + Shard string `protobuf:"bytes,2,opt,name=shard,proto3" json:"shard,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *KeyspaceShard) Reset() { *m = KeyspaceShard{} } +func (m *KeyspaceShard) String() string { return proto.CompactTextString(m) } +func (*KeyspaceShard) ProtoMessage() {} +func (*KeyspaceShard) Descriptor() ([]byte, []int) { + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{14} +} +func (m *KeyspaceShard) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_KeyspaceShard.Unmarshal(m, b) +} +func (m *KeyspaceShard) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_KeyspaceShard.Marshal(b, m, deterministic) +} +func (dst *KeyspaceShard) XXX_Merge(src proto.Message) { + xxx_messageInfo_KeyspaceShard.Merge(dst, src) +} +func (m *KeyspaceShard) XXX_Size() int { + return xxx_messageInfo_KeyspaceShard.Size(m) +} +func (m *KeyspaceShard) XXX_DiscardUnknown() { + xxx_messageInfo_KeyspaceShard.DiscardUnknown(m) +} + +var xxx_messageInfo_KeyspaceShard proto.InternalMessageInfo + +func (m *KeyspaceShard) GetKeyspace() string { + if m != nil { + return m.Keyspace + } + return "" +} + +func (m *KeyspaceShard) GetShard() string { + if m != nil { + return m.Shard + } + return "" +} + +type Journal struct { + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + MigrationType MigrationType `protobuf:"varint,2,opt,name=migration_type,json=migrationType,proto3,enum=binlogdata.MigrationType" json:"migration_type,omitempty"` + Tables []string `protobuf:"bytes,3,rep,name=tables,proto3" json:"tables,omitempty"` + LocalPosition string `protobuf:"bytes,4,opt,name=local_position,json=localPosition,proto3" json:"local_position,omitempty"` + ShardGtids []*ShardGtid `protobuf:"bytes,5,rep,name=shard_gtids,json=shardGtids,proto3" json:"shard_gtids,omitempty"` + Participants []*KeyspaceShard `protobuf:"bytes,6,rep,name=participants,proto3" json:"participants,omitempty"` + ReversedIds []int64 `protobuf:"varint,7,rep,packed,name=reversed_ids,json=reversedIds,proto3" json:"reversed_ids,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Journal) Reset() { *m = Journal{} } +func (m *Journal) String() string { return proto.CompactTextString(m) } +func (*Journal) ProtoMessage() {} +func (*Journal) Descriptor() ([]byte, []int) { + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{15} +} +func (m *Journal) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Journal.Unmarshal(m, b) +} +func (m *Journal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Journal.Marshal(b, m, deterministic) +} +func (dst *Journal) XXX_Merge(src proto.Message) { + xxx_messageInfo_Journal.Merge(dst, src) +} +func (m *Journal) XXX_Size() int { + return xxx_messageInfo_Journal.Size(m) +} +func (m *Journal) XXX_DiscardUnknown() { + xxx_messageInfo_Journal.DiscardUnknown(m) +} + +var xxx_messageInfo_Journal proto.InternalMessageInfo + +func (m *Journal) GetId() int64 { + if m != nil { + return m.Id + } + return 0 +} + +func (m *Journal) GetMigrationType() MigrationType { + if m != nil { + return m.MigrationType + } + return MigrationType_TABLES +} + +func (m *Journal) GetTables() []string { + if m != nil { + return m.Tables + } + return nil +} + +func (m *Journal) GetLocalPosition() string { + if m != nil { + return m.LocalPosition + } + return "" +} + +func (m *Journal) GetShardGtids() []*ShardGtid { + if m != nil { + return m.ShardGtids + } + return nil +} + +func (m *Journal) GetParticipants() []*KeyspaceShard { + if m != nil { + return m.Participants + } + return nil +} + +func (m *Journal) GetReversedIds() []int64 { + if m != nil { + return m.ReversedIds + } + return nil +} + // VEvent represents a vstream event type VEvent struct { Type VEventType `protobuf:"varint,1,opt,name=type,proto3,enum=binlogdata.VEventType" json:"type,omitempty"` @@ -956,6 +1115,7 @@ type VEvent struct { RowEvent *RowEvent `protobuf:"bytes,5,opt,name=row_event,json=rowEvent,proto3" json:"row_event,omitempty"` 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"` // 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:"-"` @@ -967,7 +1127,7 @@ func (m *VEvent) Reset() { *m = VEvent{} } func (m *VEvent) String() string { return proto.CompactTextString(m) } func (*VEvent) ProtoMessage() {} func (*VEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{14} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{16} } func (m *VEvent) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VEvent.Unmarshal(m, b) @@ -1036,6 +1196,13 @@ func (m *VEvent) GetVgtid() *VGtid { return nil } +func (m *VEvent) GetJournal() *Journal { + if m != nil { + return m.Journal + } + return nil +} + func (m *VEvent) GetCurrentTime() int64 { if m != nil { return m.CurrentTime @@ -1059,7 +1226,7 @@ func (m *VStreamRequest) Reset() { *m = VStreamRequest{} } func (m *VStreamRequest) String() string { return proto.CompactTextString(m) } func (*VStreamRequest) ProtoMessage() {} func (*VStreamRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{15} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{17} } func (m *VStreamRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VStreamRequest.Unmarshal(m, b) @@ -1126,7 +1293,7 @@ func (m *VStreamResponse) Reset() { *m = VStreamResponse{} } func (m *VStreamResponse) String() string { return proto.CompactTextString(m) } func (*VStreamResponse) ProtoMessage() {} func (*VStreamResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{16} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{18} } func (m *VStreamResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VStreamResponse.Unmarshal(m, b) @@ -1169,7 +1336,7 @@ func (m *VStreamRowsRequest) Reset() { *m = VStreamRowsRequest{} } func (m *VStreamRowsRequest) String() string { return proto.CompactTextString(m) } func (*VStreamRowsRequest) ProtoMessage() {} func (*VStreamRowsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{17} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{19} } func (m *VStreamRowsRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VStreamRowsRequest.Unmarshal(m, b) @@ -1240,7 +1407,7 @@ func (m *VStreamRowsResponse) Reset() { *m = VStreamRowsResponse{} } func (m *VStreamRowsResponse) String() string { return proto.CompactTextString(m) } func (*VStreamRowsResponse) ProtoMessage() {} func (*VStreamRowsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_binlogdata_e3df2e837eaa5305, []int{18} + return fileDescriptor_binlogdata_db2d20dd0016de21, []int{20} } func (m *VStreamRowsResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VStreamRowsResponse.Unmarshal(m, b) @@ -1311,6 +1478,8 @@ func init() { proto.RegisterType((*FieldEvent)(nil), "binlogdata.FieldEvent") proto.RegisterType((*ShardGtid)(nil), "binlogdata.ShardGtid") proto.RegisterType((*VGtid)(nil), "binlogdata.VGtid") + proto.RegisterType((*KeyspaceShard)(nil), "binlogdata.KeyspaceShard") + proto.RegisterType((*Journal)(nil), "binlogdata.Journal") proto.RegisterType((*VEvent)(nil), "binlogdata.VEvent") proto.RegisterType((*VStreamRequest)(nil), "binlogdata.VStreamRequest") proto.RegisterType((*VStreamResponse)(nil), "binlogdata.VStreamResponse") @@ -1318,97 +1487,110 @@ func init() { proto.RegisterType((*VStreamRowsResponse)(nil), "binlogdata.VStreamRowsResponse") proto.RegisterEnum("binlogdata.OnDDLAction", OnDDLAction_name, OnDDLAction_value) proto.RegisterEnum("binlogdata.VEventType", VEventType_name, VEventType_value) + proto.RegisterEnum("binlogdata.MigrationType", MigrationType_name, MigrationType_value) proto.RegisterEnum("binlogdata.BinlogTransaction_Statement_Category", BinlogTransaction_Statement_Category_name, BinlogTransaction_Statement_Category_value) } -func init() { proto.RegisterFile("binlogdata.proto", fileDescriptor_binlogdata_e3df2e837eaa5305) } - -var fileDescriptor_binlogdata_e3df2e837eaa5305 = []byte{ - // 1372 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x57, 0xdd, 0x72, 0xdb, 0x54, - 0x10, 0xae, 0x6d, 0xf9, 0x6f, 0x95, 0x26, 0xca, 0xc9, 0x0f, 0x9e, 0x0c, 0x65, 0x82, 0x06, 0x68, - 0xc8, 0x0c, 0x4e, 0x31, 0x50, 0xae, 0xa0, 0xe3, 0x1f, 0xd5, 0x75, 0xab, 0xd8, 0xe9, 0xb1, 0x9a, - 0x32, 0xbd, 0xd1, 0x28, 0xd2, 0x71, 0xa2, 0x89, 0x2c, 0x39, 0xd2, 0xb1, 0x83, 0x1f, 0x80, 0xe1, - 0x01, 0xb8, 0xe5, 0x05, 0xb8, 0xe3, 0x05, 0xb8, 0x63, 0x78, 0x13, 0xde, 0x83, 0x39, 0x3f, 0x92, - 0xed, 0xb4, 0xb4, 0x81, 0x19, 0x2e, 0xb8, 0xc9, 0xec, 0xff, 0xd9, 0xfd, 0x76, 0xbd, 0xda, 0x80, - 0x76, 0xe6, 0x87, 0x41, 0x74, 0xee, 0x39, 0xd4, 0xa9, 0x4f, 0xe2, 0x88, 0x46, 0x08, 0x16, 0x92, - 0x3d, 0x75, 0x46, 0xe3, 0x89, 0x2b, 0x14, 0x7b, 0xea, 0xd5, 0x94, 0xc4, 0x73, 0xc9, 0xac, 0xd3, - 0x68, 0x12, 0x2d, 0xbc, 0xf4, 0x63, 0x28, 0xb7, 0x2f, 0x9c, 0x38, 0x21, 0x14, 0xed, 0x42, 0xc9, - 0x0d, 0x7c, 0x12, 0xd2, 0x5a, 0x6e, 0x3f, 0x77, 0x50, 0xc4, 0x92, 0x43, 0x08, 0x14, 0x37, 0x0a, - 0xc3, 0x5a, 0x9e, 0x4b, 0x39, 0xcd, 0x6c, 0x13, 0x12, 0xcf, 0x48, 0x5c, 0x2b, 0x08, 0x5b, 0xc1, - 0xe9, 0x7f, 0x16, 0x60, 0xb3, 0xc5, 0xf3, 0xb0, 0x62, 0x27, 0x4c, 0x1c, 0x97, 0xfa, 0x51, 0x88, - 0xba, 0x00, 0x09, 0x75, 0x28, 0x19, 0x93, 0x90, 0x26, 0xb5, 0xdc, 0x7e, 0xe1, 0x40, 0x6d, 0xdc, - 0xaf, 0x2f, 0x55, 0xf0, 0x9a, 0x4b, 0x7d, 0x98, 0xda, 0xe3, 0x25, 0x57, 0xd4, 0x00, 0x95, 0xcc, - 0x48, 0x48, 0x6d, 0x1a, 0x5d, 0x92, 0xb0, 0xa6, 0xec, 0xe7, 0x0e, 0xd4, 0xc6, 0x66, 0x5d, 0x14, - 0x68, 0x30, 0x8d, 0xc5, 0x14, 0x18, 0x48, 0x46, 0xef, 0xfd, 0x91, 0x87, 0x6a, 0x16, 0x0d, 0x99, - 0x50, 0x71, 0x1d, 0x4a, 0xce, 0xa3, 0x78, 0xce, 0xcb, 0x5c, 0x6f, 0x3c, 0xb8, 0x65, 0x22, 0xf5, - 0xb6, 0xf4, 0xc3, 0x59, 0x04, 0xf4, 0x19, 0x94, 0x5d, 0x81, 0x1e, 0x47, 0x47, 0x6d, 0x6c, 0x2d, - 0x07, 0x93, 0xc0, 0xe2, 0xd4, 0x06, 0x69, 0x50, 0x48, 0xae, 0x02, 0x0e, 0xd9, 0x1a, 0x66, 0xa4, - 0xfe, 0x4b, 0x0e, 0x2a, 0x69, 0x5c, 0xb4, 0x05, 0x1b, 0x2d, 0xd3, 0x7e, 0xd1, 0xc7, 0x46, 0x7b, - 0xd0, 0xed, 0xf7, 0x5e, 0x19, 0x1d, 0xed, 0x0e, 0x5a, 0x83, 0x4a, 0xcb, 0xb4, 0x5b, 0x46, 0xb7, - 0xd7, 0xd7, 0x72, 0xe8, 0x2e, 0x54, 0x5b, 0xa6, 0xdd, 0x1e, 0x1c, 0x1f, 0xf7, 0x2c, 0x2d, 0x8f, - 0x36, 0x40, 0x6d, 0x99, 0x36, 0x1e, 0x98, 0x66, 0xab, 0xd9, 0x7e, 0xa6, 0x15, 0xd0, 0x0e, 0x6c, - 0xb6, 0x4c, 0xbb, 0x73, 0x6c, 0xda, 0x1d, 0xe3, 0x04, 0x1b, 0xed, 0xa6, 0x65, 0x74, 0x34, 0x05, - 0x01, 0x94, 0x98, 0xb8, 0x63, 0x6a, 0x45, 0x49, 0x0f, 0x0d, 0x4b, 0x2b, 0xc9, 0x70, 0xbd, 0xfe, - 0xd0, 0xc0, 0x96, 0x56, 0x96, 0xec, 0x8b, 0x93, 0x4e, 0xd3, 0x32, 0xb4, 0x8a, 0x64, 0x3b, 0x86, - 0x69, 0x58, 0x86, 0x56, 0x7d, 0xaa, 0x54, 0xf2, 0x5a, 0xe1, 0xa9, 0x52, 0x29, 0x68, 0x8a, 0xfe, - 0x53, 0x0e, 0x76, 0x86, 0x34, 0x26, 0xce, 0xf8, 0x19, 0x99, 0x63, 0x27, 0x3c, 0x27, 0x98, 0x5c, - 0x4d, 0x49, 0x42, 0xd1, 0x1e, 0x54, 0x26, 0x51, 0xe2, 0x33, 0xec, 0x38, 0xc0, 0x55, 0x9c, 0xf1, - 0xe8, 0x08, 0xaa, 0x97, 0x64, 0x6e, 0xc7, 0xcc, 0x5e, 0x02, 0x86, 0xea, 0xd9, 0x40, 0x66, 0x91, - 0x2a, 0x97, 0x92, 0x5a, 0xc6, 0xb7, 0xf0, 0x6e, 0x7c, 0xf5, 0x11, 0xec, 0xde, 0x4c, 0x2a, 0x99, - 0x44, 0x61, 0x42, 0x90, 0x09, 0x48, 0x38, 0xda, 0x74, 0xd1, 0x5b, 0x9e, 0x9f, 0xda, 0xb8, 0xf7, - 0xd6, 0x01, 0xc0, 0x9b, 0x67, 0x37, 0x45, 0xfa, 0xf7, 0xb0, 0x25, 0xde, 0xb1, 0x9c, 0xb3, 0x80, - 0x24, 0xb7, 0x29, 0x7d, 0x17, 0x4a, 0x94, 0x1b, 0xd7, 0xf2, 0xfb, 0x85, 0x83, 0x2a, 0x96, 0xdc, - 0x3f, 0xad, 0xd0, 0x83, 0xed, 0xd5, 0x97, 0xff, 0x93, 0xfa, 0xbe, 0x04, 0x05, 0x4f, 0x03, 0x82, - 0xb6, 0xa1, 0x38, 0x76, 0xa8, 0x7b, 0x21, 0xab, 0x11, 0x0c, 0x2b, 0x65, 0xe4, 0x07, 0x94, 0xc4, - 0xbc, 0x85, 0x55, 0x2c, 0x39, 0xfd, 0x01, 0x94, 0x1e, 0x73, 0x0a, 0x7d, 0x02, 0xc5, 0x78, 0xca, - 0x6a, 0x15, 0x3f, 0x75, 0x6d, 0x39, 0x01, 0x16, 0x18, 0x0b, 0xb5, 0xfe, 0x73, 0x1e, 0xd6, 0x44, - 0x42, 0xc3, 0x68, 0x1a, 0xbb, 0x84, 0x21, 0x78, 0x49, 0xe6, 0xc9, 0xc4, 0x71, 0x49, 0x8a, 0x60, - 0xca, 0xb3, 0x64, 0x92, 0x0b, 0x27, 0xf6, 0xe4, 0xab, 0x82, 0x41, 0x5f, 0x81, 0xca, 0x91, 0xa4, - 0x36, 0x9d, 0x4f, 0x08, 0xc7, 0x70, 0xbd, 0xb1, 0xbd, 0x18, 0x2a, 0x8e, 0x13, 0xb5, 0xe6, 0x13, - 0x82, 0x81, 0x66, 0xf4, 0xea, 0x24, 0x2a, 0xb7, 0x98, 0xc4, 0x45, 0xff, 0x8a, 0x2b, 0xfd, 0x3b, - 0xcc, 0xc0, 0x28, 0xc9, 0x28, 0x4b, 0xb5, 0x0a, 0x38, 0x52, 0x80, 0x50, 0x1d, 0x4a, 0x51, 0x68, - 0x7b, 0x5e, 0x50, 0x2b, 0xf3, 0x34, 0xdf, 0x5b, 0xb6, 0x1d, 0x84, 0x9d, 0x8e, 0xd9, 0x14, 0x2d, - 0x29, 0x46, 0x61, 0xc7, 0x0b, 0xf4, 0xe7, 0x50, 0xc5, 0xd1, 0x75, 0xfb, 0x82, 0x27, 0xa0, 0x43, - 0xe9, 0x8c, 0x8c, 0xa2, 0x98, 0xc8, 0xae, 0x82, 0xdc, 0x7a, 0x38, 0xba, 0xc6, 0x52, 0x83, 0xf6, - 0xa1, 0xe8, 0x8c, 0xd2, 0xc6, 0xac, 0x9a, 0x08, 0x85, 0xee, 0x40, 0x05, 0x47, 0xd7, 0x7c, 0x53, - 0xa2, 0x7b, 0x20, 0x10, 0xb1, 0x43, 0x67, 0x9c, 0xc2, 0x5d, 0xe5, 0x92, 0xbe, 0x33, 0x26, 0xe8, - 0x21, 0xa8, 0x71, 0x74, 0x6d, 0xbb, 0xfc, 0x79, 0x31, 0xb6, 0x6a, 0x63, 0x67, 0xa5, 0x95, 0x69, - 0x72, 0x18, 0xe2, 0x94, 0x4c, 0xf4, 0xe7, 0x00, 0x8f, 0x7d, 0x12, 0x78, 0xb7, 0x7a, 0xe4, 0x23, - 0x06, 0x1f, 0x09, 0xbc, 0x34, 0xfe, 0x9a, 0x4c, 0x99, 0x47, 0xc0, 0x52, 0xc7, 0x80, 0x18, 0xb2, - 0x6e, 0x77, 0xa9, 0xef, 0xfd, 0x8b, 0x19, 0x41, 0xa0, 0x9c, 0x53, 0xdf, 0xe3, 0xc3, 0x51, 0xc5, - 0x9c, 0xd6, 0x1f, 0x41, 0xf1, 0x94, 0x87, 0x7b, 0x08, 0x2a, 0xb7, 0xb2, 0x99, 0x38, 0x9d, 0xd8, - 0x95, 0x32, 0xb3, 0xa7, 0x31, 0x24, 0x29, 0x99, 0xe8, 0xbf, 0xe6, 0xa1, 0x74, 0x2a, 0x6a, 0x3c, - 0x04, 0x85, 0x0f, 0x9f, 0xf8, 0x9e, 0xec, 0x2e, 0xfb, 0x0a, 0x0b, 0x3e, 0x7e, 0xdc, 0x06, 0xbd, - 0x0f, 0x55, 0xea, 0x8f, 0x49, 0x42, 0x9d, 0xf1, 0x84, 0x67, 0x59, 0xc0, 0x0b, 0xc1, 0x9b, 0x32, - 0x65, 0x1f, 0x0d, 0x36, 0x32, 0x0a, 0x17, 0x31, 0x12, 0x7d, 0x0e, 0x55, 0xd6, 0x19, 0xfe, 0x8d, - 0xab, 0x15, 0x79, 0xab, 0xb7, 0x6f, 0xf4, 0x85, 0x3f, 0x8b, 0x2b, 0x71, 0xda, 0xeb, 0xaf, 0x41, - 0xe5, 0x58, 0x4a, 0x27, 0x31, 0xab, 0xbb, 0xab, 0xb3, 0x9a, 0xf6, 0x0c, 0xc3, 0x68, 0xd1, 0xbf, - 0xfb, 0x50, 0x9c, 0xf1, 0x94, 0xca, 0xf2, 0x5b, 0xbb, 0x5c, 0x1c, 0x07, 0x45, 0xe8, 0xd1, 0x87, - 0xb0, 0xe6, 0x4e, 0xe3, 0x98, 0x7f, 0x9c, 0xfd, 0x31, 0xa9, 0x6d, 0xf3, 0xda, 0x54, 0x29, 0xb3, - 0xfc, 0x31, 0xd1, 0x7f, 0xcc, 0xc3, 0xfa, 0xa9, 0x58, 0x5f, 0xe9, 0xca, 0x7c, 0x04, 0x5b, 0x64, - 0x34, 0x22, 0x2e, 0xf5, 0x67, 0xc4, 0x76, 0x9d, 0x20, 0x20, 0xb1, 0xed, 0x7b, 0x72, 0xc4, 0x37, - 0xea, 0xe2, 0x8c, 0x69, 0x73, 0x79, 0xaf, 0x83, 0x37, 0x33, 0x5b, 0x29, 0xf2, 0x90, 0x01, 0x5b, - 0xfe, 0x78, 0x4c, 0x3c, 0xdf, 0xa1, 0xcb, 0x01, 0xc4, 0x0f, 0x60, 0x47, 0x4e, 0xd3, 0xa9, 0xd5, - 0x75, 0x28, 0x59, 0x84, 0xc9, 0x3c, 0xb2, 0x30, 0x1f, 0xb3, 0x9f, 0x77, 0x7c, 0x9e, 0x6d, 0xe1, - 0xbb, 0xd2, 0xd3, 0xe2, 0x42, 0x2c, 0x95, 0x2b, 0x1b, 0x5e, 0xb9, 0xb1, 0xe1, 0x17, 0x9b, 0xa0, - 0xf8, 0xae, 0x4d, 0xa0, 0x7f, 0x03, 0x1b, 0x19, 0x10, 0x72, 0x83, 0x1f, 0x42, 0x89, 0xf7, 0x26, - 0x1d, 0x41, 0xf4, 0xfa, 0x18, 0x61, 0x69, 0xa1, 0xff, 0x90, 0x07, 0x94, 0xfa, 0x47, 0xd7, 0xc9, - 0xff, 0x14, 0xcc, 0x6d, 0x28, 0x72, 0xb9, 0x44, 0x52, 0x30, 0x0c, 0x87, 0xc0, 0x49, 0xe8, 0xe4, - 0x32, 0x83, 0x51, 0x38, 0x3f, 0x67, 0x7f, 0x31, 0x49, 0xa6, 0x01, 0xc5, 0xd2, 0x42, 0xff, 0x2d, - 0x07, 0x5b, 0x2b, 0x38, 0x48, 0x2c, 0x17, 0x5b, 0x25, 0xf7, 0xf7, 0x5b, 0x05, 0x1d, 0x40, 0x65, - 0x72, 0xf9, 0x96, 0xed, 0x93, 0x69, 0xdf, 0xf8, 0xb3, 0xfc, 0x00, 0x94, 0x38, 0xba, 0x4e, 0x6a, - 0x0a, 0xf7, 0x5c, 0x5e, 0xb5, 0x5c, 0xce, 0xf6, 0xf5, 0x4a, 0x1d, 0x2b, 0xfb, 0x5a, 0x68, 0x0e, - 0xbf, 0x05, 0x75, 0x69, 0xed, 0xb3, 0xcb, 0xac, 0xd7, 0xed, 0x0f, 0xb0, 0xa1, 0xdd, 0x41, 0x15, - 0x50, 0x86, 0xd6, 0xe0, 0x44, 0xcb, 0x31, 0xca, 0xf8, 0xce, 0x68, 0x8b, 0x6b, 0x8f, 0x51, 0xb6, - 0x34, 0x2a, 0x1c, 0xfe, 0x9e, 0x03, 0x58, 0x6c, 0x18, 0xa4, 0x42, 0xf9, 0x45, 0xff, 0x59, 0x7f, - 0xf0, 0xb2, 0x2f, 0x02, 0x74, 0xad, 0x5e, 0x47, 0xcb, 0xa1, 0x2a, 0x14, 0xc5, 0xf9, 0x98, 0x67, - 0x2f, 0xc8, 0xdb, 0xb1, 0xc0, 0x0e, 0xcb, 0xec, 0x70, 0x54, 0x50, 0x19, 0x0a, 0xd9, 0x79, 0x28, - 0xef, 0xc1, 0x12, 0x0b, 0x88, 0x8d, 0x13, 0xb3, 0xd9, 0x36, 0xb4, 0x32, 0x53, 0x64, 0x97, 0x21, - 0x40, 0x29, 0x3d, 0x0b, 0x99, 0x27, 0x3b, 0x26, 0x81, 0xbd, 0x33, 0xb0, 0x9e, 0x18, 0x58, 0x53, - 0x99, 0x0c, 0x0f, 0x5e, 0x6a, 0x6b, 0x4c, 0xf6, 0xb8, 0x67, 0x98, 0x1d, 0xed, 0x2e, 0xbb, 0x26, - 0x9f, 0x18, 0x4d, 0x6c, 0xb5, 0x8c, 0xa6, 0xa5, 0xad, 0x33, 0xcd, 0x29, 0x4f, 0x70, 0xa3, 0xf5, - 0xe9, 0xab, 0xfb, 0x33, 0x9f, 0x92, 0x24, 0xa9, 0xfb, 0xd1, 0x91, 0xa0, 0x8e, 0xce, 0xa3, 0xa3, - 0x19, 0x3d, 0xe2, 0xff, 0xa3, 0x1c, 0x2d, 0x7e, 0x08, 0x67, 0x25, 0x2e, 0xf9, 0xe2, 0xaf, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x59, 0xa0, 0xff, 0x30, 0xff, 0x0c, 0x00, 0x00, +func init() { proto.RegisterFile("binlogdata.proto", fileDescriptor_binlogdata_db2d20dd0016de21) } + +var fileDescriptor_binlogdata_db2d20dd0016de21 = []byte{ + // 1558 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x57, 0xcb, 0x72, 0xdb, 0xca, + 0x11, 0x35, 0x09, 0xf0, 0xd5, 0x90, 0x28, 0x68, 0xf4, 0x08, 0xa3, 0x8a, 0x53, 0x0a, 0x2a, 0x8e, + 0x14, 0x55, 0x85, 0x72, 0x98, 0xc4, 0x59, 0x39, 0x0e, 0x1f, 0xb0, 0x4c, 0x09, 0x22, 0xe5, 0x21, + 0x24, 0xa7, 0xbc, 0x41, 0x41, 0xc4, 0x48, 0x42, 0x04, 0x02, 0x34, 0x30, 0xa4, 0xa2, 0x0f, 0x48, + 0xe5, 0x03, 0xb2, 0xcd, 0x0f, 0x64, 0x9f, 0x6d, 0xb6, 0xd9, 0xe7, 0x0b, 0xb2, 0xca, 0x7f, 0xdc, + 0x9a, 0x07, 0x40, 0x42, 0xf6, 0xb5, 0xe5, 0x5b, 0x75, 0x17, 0x77, 0xc3, 0xea, 0xe9, 0xe9, 0xe7, + 0x41, 0x4f, 0x77, 0x13, 0xf4, 0x4b, 0x3f, 0x0c, 0xa2, 0x6b, 0xcf, 0xa5, 0x6e, 0x73, 0x1a, 0x47, + 0x34, 0x42, 0xb0, 0xe0, 0xec, 0x68, 0x73, 0x1a, 0x4f, 0xc7, 0xe2, 0x62, 0x47, 0xfb, 0x30, 0x23, + 0xf1, 0xbd, 0x3c, 0xd4, 0x69, 0x34, 0x8d, 0x16, 0x5a, 0xc6, 0x29, 0x54, 0xba, 0x37, 0x6e, 0x9c, + 0x10, 0x8a, 0xb6, 0xa1, 0x3c, 0x0e, 0x7c, 0x12, 0xd2, 0x46, 0x61, 0xb7, 0xb0, 0x5f, 0xc2, 0xf2, + 0x84, 0x10, 0xa8, 0xe3, 0x28, 0x0c, 0x1b, 0x45, 0xce, 0xe5, 0x34, 0x93, 0x4d, 0x48, 0x3c, 0x27, + 0x71, 0x43, 0x11, 0xb2, 0xe2, 0x64, 0xfc, 0x5f, 0x81, 0xf5, 0x0e, 0x8f, 0xc3, 0x8e, 0xdd, 0x30, + 0x71, 0xc7, 0xd4, 0x8f, 0x42, 0x74, 0x04, 0x90, 0x50, 0x97, 0x92, 0x09, 0x09, 0x69, 0xd2, 0x28, + 0xec, 0x2a, 0xfb, 0x5a, 0x6b, 0xaf, 0xb9, 0x94, 0xc1, 0x47, 0x2a, 0xcd, 0x51, 0x2a, 0x8f, 0x97, + 0x54, 0x51, 0x0b, 0x34, 0x32, 0x27, 0x21, 0x75, 0x68, 0x74, 0x4b, 0xc2, 0x86, 0xba, 0x5b, 0xd8, + 0xd7, 0x5a, 0xeb, 0x4d, 0x91, 0xa0, 0xc9, 0x6e, 0x6c, 0x76, 0x81, 0x81, 0x64, 0xf4, 0xce, 0x7f, + 0x8a, 0x50, 0xcb, 0xac, 0x21, 0x0b, 0xaa, 0x63, 0x97, 0x92, 0xeb, 0x28, 0xbe, 0xe7, 0x69, 0xd6, + 0x5b, 0xcf, 0x1f, 0x19, 0x48, 0xb3, 0x2b, 0xf5, 0x70, 0x66, 0x01, 0xfd, 0x0a, 0x2a, 0x63, 0x81, + 0x1e, 0x47, 0x47, 0x6b, 0x6d, 0x2c, 0x1b, 0x93, 0xc0, 0xe2, 0x54, 0x06, 0xe9, 0xa0, 0x24, 0x1f, + 0x02, 0x0e, 0xd9, 0x0a, 0x66, 0xa4, 0xf1, 0xcf, 0x02, 0x54, 0x53, 0xbb, 0x68, 0x03, 0xd6, 0x3a, + 0x96, 0x73, 0x3e, 0xc0, 0x66, 0x77, 0x78, 0x34, 0xe8, 0xbf, 0x37, 0x7b, 0xfa, 0x13, 0xb4, 0x02, + 0xd5, 0x8e, 0xe5, 0x74, 0xcc, 0xa3, 0xfe, 0x40, 0x2f, 0xa0, 0x55, 0xa8, 0x75, 0x2c, 0xa7, 0x3b, + 0x3c, 0x3d, 0xed, 0xdb, 0x7a, 0x11, 0xad, 0x81, 0xd6, 0xb1, 0x1c, 0x3c, 0xb4, 0xac, 0x4e, 0xbb, + 0x7b, 0xa2, 0x2b, 0x68, 0x0b, 0xd6, 0x3b, 0x96, 0xd3, 0x3b, 0xb5, 0x9c, 0x9e, 0x79, 0x86, 0xcd, + 0x6e, 0xdb, 0x36, 0x7b, 0xba, 0x8a, 0x00, 0xca, 0x8c, 0xdd, 0xb3, 0xf4, 0x92, 0xa4, 0x47, 0xa6, + 0xad, 0x97, 0xa5, 0xb9, 0xfe, 0x60, 0x64, 0x62, 0x5b, 0xaf, 0xc8, 0xe3, 0xf9, 0x59, 0xaf, 0x6d, + 0x9b, 0x7a, 0x55, 0x1e, 0x7b, 0xa6, 0x65, 0xda, 0xa6, 0x5e, 0x3b, 0x56, 0xab, 0x45, 0x5d, 0x39, + 0x56, 0xab, 0x8a, 0xae, 0x1a, 0x7f, 0x2f, 0xc0, 0xd6, 0x88, 0xc6, 0xc4, 0x9d, 0x9c, 0x90, 0x7b, + 0xec, 0x86, 0xd7, 0x04, 0x93, 0x0f, 0x33, 0x92, 0x50, 0xb4, 0x03, 0xd5, 0x69, 0x94, 0xf8, 0x0c, + 0x3b, 0x0e, 0x70, 0x0d, 0x67, 0x67, 0x74, 0x08, 0xb5, 0x5b, 0x72, 0xef, 0xc4, 0x4c, 0x5e, 0x02, + 0x86, 0x9a, 0x59, 0x41, 0x66, 0x96, 0xaa, 0xb7, 0x92, 0x5a, 0xc6, 0x57, 0xf9, 0x32, 0xbe, 0xc6, + 0x15, 0x6c, 0x3f, 0x0c, 0x2a, 0x99, 0x46, 0x61, 0x42, 0x90, 0x05, 0x48, 0x28, 0x3a, 0x74, 0xf1, + 0x6d, 0x79, 0x7c, 0x5a, 0xeb, 0xe9, 0x67, 0x0b, 0x00, 0xaf, 0x5f, 0x3e, 0x64, 0x19, 0x7f, 0x81, + 0x0d, 0xe1, 0xc7, 0x76, 0x2f, 0x03, 0x92, 0x3c, 0x26, 0xf5, 0x6d, 0x28, 0x53, 0x2e, 0xdc, 0x28, + 0xee, 0x2a, 0xfb, 0x35, 0x2c, 0x4f, 0x5f, 0x9b, 0xa1, 0x07, 0x9b, 0x79, 0xcf, 0xdf, 0x4b, 0x7e, + 0xbf, 0x05, 0x15, 0xcf, 0x02, 0x82, 0x36, 0xa1, 0x34, 0x71, 0xe9, 0xf8, 0x46, 0x66, 0x23, 0x0e, + 0x2c, 0x95, 0x2b, 0x3f, 0xa0, 0x24, 0xe6, 0x9f, 0xb0, 0x86, 0xe5, 0xc9, 0x78, 0x0e, 0xe5, 0xd7, + 0x9c, 0x42, 0xbf, 0x80, 0x52, 0x3c, 0x63, 0xb9, 0x8a, 0xa7, 0xae, 0x2f, 0x07, 0xc0, 0x0c, 0x63, + 0x71, 0x6d, 0xfc, 0xa3, 0x08, 0x2b, 0x22, 0xa0, 0x51, 0x34, 0x8b, 0xc7, 0x84, 0x21, 0x78, 0x4b, + 0xee, 0x93, 0xa9, 0x3b, 0x26, 0x29, 0x82, 0xe9, 0x99, 0x05, 0x93, 0xdc, 0xb8, 0xb1, 0x27, 0xbd, + 0x8a, 0x03, 0xfa, 0x1d, 0x68, 0x1c, 0x49, 0xea, 0xd0, 0xfb, 0x29, 0xe1, 0x18, 0xd6, 0x5b, 0x9b, + 0x8b, 0xa2, 0xe2, 0x38, 0x51, 0xfb, 0x7e, 0x4a, 0x30, 0xd0, 0x8c, 0xce, 0x57, 0xa2, 0xfa, 0x88, + 0x4a, 0x5c, 0x7c, 0xbf, 0x52, 0xee, 0xfb, 0x1d, 0x64, 0x60, 0x94, 0xa5, 0x95, 0xa5, 0x5c, 0x05, + 0x1c, 0x29, 0x40, 0xa8, 0x09, 0xe5, 0x28, 0x74, 0x3c, 0x2f, 0x68, 0x54, 0x78, 0x98, 0x3f, 0x5a, + 0x96, 0x1d, 0x86, 0xbd, 0x9e, 0xd5, 0x16, 0x9f, 0xa4, 0x14, 0x85, 0x3d, 0x2f, 0x30, 0xde, 0x42, + 0x0d, 0x47, 0x77, 0xdd, 0x1b, 0x1e, 0x80, 0x01, 0xe5, 0x4b, 0x72, 0x15, 0xc5, 0x44, 0x7e, 0x55, + 0x90, 0x5d, 0x0f, 0x47, 0x77, 0x58, 0xde, 0xa0, 0x5d, 0x28, 0xb9, 0x57, 0xe9, 0x87, 0xc9, 0x8b, + 0x88, 0x0b, 0xc3, 0x85, 0x2a, 0x8e, 0xee, 0x78, 0xa7, 0x44, 0x4f, 0x41, 0x20, 0xe2, 0x84, 0xee, + 0x24, 0x85, 0xbb, 0xc6, 0x39, 0x03, 0x77, 0x42, 0xd0, 0x0b, 0xd0, 0xe2, 0xe8, 0xce, 0x19, 0x73, + 0xf7, 0xa2, 0x6c, 0xb5, 0xd6, 0x56, 0xee, 0x53, 0xa6, 0xc1, 0x61, 0x88, 0x53, 0x32, 0x31, 0xde, + 0x02, 0xbc, 0xf6, 0x49, 0xe0, 0x3d, 0xca, 0xc9, 0xcf, 0x19, 0x7c, 0x24, 0xf0, 0x52, 0xfb, 0x2b, + 0x32, 0x64, 0x6e, 0x01, 0xcb, 0x3b, 0x06, 0xc4, 0x88, 0x7d, 0xed, 0x23, 0xea, 0x7b, 0xdf, 0xa1, + 0x46, 0x10, 0xa8, 0xd7, 0xd4, 0xf7, 0x78, 0x71, 0xd4, 0x30, 0xa7, 0x8d, 0x57, 0x50, 0xba, 0xe0, + 0xe6, 0x5e, 0x80, 0xc6, 0xa5, 0x1c, 0xc6, 0x4e, 0x2b, 0x36, 0x97, 0x66, 0xe6, 0x1a, 0x43, 0x92, + 0x92, 0x89, 0xd1, 0x86, 0xd5, 0x13, 0xe9, 0x96, 0x0b, 0x7c, 0x7d, 0x5c, 0xc6, 0xbf, 0x8a, 0x50, + 0x39, 0x8e, 0x66, 0x71, 0xe8, 0x06, 0xa8, 0x0e, 0x45, 0xdf, 0xe3, 0x7a, 0x0a, 0x2e, 0xfa, 0x1e, + 0xfa, 0x23, 0xd4, 0x27, 0xfe, 0x75, 0xec, 0xb2, 0x7a, 0x10, 0xa5, 0x5d, 0xe4, 0x35, 0xf3, 0xe3, + 0xe5, 0xc8, 0x4e, 0x53, 0x09, 0x5e, 0xdf, 0xab, 0x93, 0xe5, 0xe3, 0x52, 0xc5, 0x2a, 0xb9, 0x8a, + 0x7d, 0x06, 0xf5, 0x20, 0x1a, 0xbb, 0x81, 0x93, 0xf5, 0x2a, 0x95, 0x07, 0xb5, 0xca, 0xb9, 0x67, + 0x69, 0xc3, 0x7a, 0x80, 0x4b, 0xe9, 0x91, 0xb8, 0xa0, 0x97, 0xb0, 0x32, 0x75, 0x63, 0xea, 0x8f, + 0xfd, 0xa9, 0xcb, 0xa6, 0x7d, 0x99, 0x2b, 0xe6, 0xc2, 0xce, 0xe1, 0x86, 0x73, 0xe2, 0xe8, 0x67, + 0xb0, 0x12, 0x93, 0x39, 0x89, 0x13, 0xe2, 0x39, 0xcc, 0x6f, 0x65, 0x57, 0xd9, 0x57, 0xb0, 0x96, + 0xf2, 0xfa, 0x5e, 0x62, 0xfc, 0xaf, 0x08, 0xe5, 0x0b, 0x51, 0x5d, 0x07, 0xa0, 0x72, 0x6c, 0xc4, + 0x24, 0xdf, 0x5e, 0x76, 0x22, 0x24, 0x38, 0x30, 0x5c, 0x06, 0xfd, 0x04, 0x6a, 0xd4, 0x9f, 0x90, + 0x84, 0xba, 0x93, 0x29, 0x07, 0x53, 0xc1, 0x0b, 0xc6, 0xa7, 0x6a, 0x84, 0x8d, 0x6b, 0xf6, 0x58, + 0x05, 0x3c, 0x8c, 0x44, 0xbf, 0x86, 0x1a, 0x7b, 0x13, 0x7c, 0xbb, 0x68, 0x94, 0xf8, 0x23, 0xdb, + 0x7c, 0xf0, 0x22, 0xb8, 0x5b, 0x5c, 0x8d, 0xd3, 0x57, 0xf6, 0x7b, 0xd0, 0x78, 0x15, 0x4b, 0x25, + 0xd1, 0x25, 0xb6, 0xf3, 0x5d, 0x22, 0x7d, 0x2d, 0x18, 0xae, 0x16, 0x2f, 0x67, 0x0f, 0x4a, 0x73, + 0x1e, 0x52, 0x45, 0x6e, 0x39, 0xcb, 0xc9, 0x71, 0xd8, 0xc5, 0x3d, 0x1b, 0x21, 0x7f, 0x16, 0x55, + 0xd4, 0xa8, 0x7e, 0x3c, 0x42, 0x64, 0x81, 0xe1, 0x54, 0x86, 0x21, 0x3c, 0x9e, 0xc5, 0x31, 0xdf, + 0xa2, 0xfc, 0x09, 0x69, 0x6c, 0x72, 0x28, 0x34, 0xc9, 0xb3, 0xfd, 0x09, 0x31, 0xfe, 0x56, 0x84, + 0xfa, 0x85, 0x98, 0x33, 0xe9, 0x6c, 0x7b, 0x05, 0x1b, 0xe4, 0xea, 0x8a, 0x8c, 0xa9, 0x3f, 0x27, + 0xce, 0xd8, 0x0d, 0x02, 0x12, 0x3b, 0xb2, 0x60, 0xb5, 0xd6, 0x5a, 0x53, 0xec, 0x9b, 0x5d, 0xce, + 0xef, 0xf7, 0xf0, 0x7a, 0x26, 0x2b, 0x59, 0x1e, 0x32, 0x61, 0xc3, 0x9f, 0x4c, 0x88, 0xe7, 0xbb, + 0x74, 0xd9, 0x80, 0xe8, 0x54, 0x5b, 0xf2, 0xd9, 0x5f, 0xd8, 0x47, 0x2e, 0x25, 0x0b, 0x33, 0x99, + 0x46, 0x66, 0xe6, 0x19, 0xab, 0xea, 0xf8, 0x3a, 0x1b, 0x97, 0xab, 0x52, 0xd3, 0xe6, 0x4c, 0x2c, + 0x2f, 0x73, 0xa3, 0x58, 0x7d, 0x30, 0x8a, 0x17, 0x2d, 0xbb, 0xf4, 0xa5, 0x96, 0x6d, 0xbc, 0x84, + 0xb5, 0x0c, 0x08, 0x39, 0x6a, 0x0f, 0xa0, 0xcc, 0x3f, 0x65, 0xda, 0x2b, 0xd0, 0xc7, 0x55, 0x87, + 0xa5, 0x84, 0xf1, 0xd7, 0x22, 0xa0, 0x54, 0x3f, 0xba, 0x4b, 0x7e, 0xa0, 0x60, 0x6e, 0x42, 0x89, + 0xf3, 0x25, 0x92, 0xe2, 0xc0, 0x70, 0x08, 0xdc, 0x84, 0x4e, 0x6f, 0x33, 0x18, 0x85, 0xf2, 0x5b, + 0xf6, 0x8b, 0x49, 0x32, 0x0b, 0x28, 0x96, 0x12, 0xc6, 0xbf, 0x0b, 0xb0, 0x91, 0xc3, 0x41, 0x62, + 0xb9, 0x68, 0xff, 0x85, 0x6f, 0x6f, 0xff, 0x68, 0x1f, 0xaa, 0xd3, 0xdb, 0xcf, 0x8c, 0x89, 0xec, + 0xf6, 0x93, 0xaf, 0xf8, 0xa7, 0xa0, 0xc6, 0xd1, 0x5d, 0xd2, 0x50, 0xb9, 0xe6, 0xf2, 0x4c, 0xe4, + 0x7c, 0x36, 0x58, 0x73, 0x79, 0xe4, 0x06, 0xab, 0xb8, 0x39, 0xf8, 0x03, 0x68, 0x4b, 0xf3, 0x99, + 0xad, 0xd0, 0xfd, 0xa3, 0xc1, 0x10, 0x9b, 0xfa, 0x13, 0x54, 0x05, 0x75, 0x64, 0x0f, 0xcf, 0xf4, + 0x02, 0xa3, 0xcc, 0x3f, 0x99, 0x5d, 0xb1, 0x96, 0x33, 0xca, 0x91, 0x42, 0xca, 0xc1, 0x7f, 0x0b, + 0x00, 0x8b, 0x86, 0x84, 0x34, 0xa8, 0x9c, 0x0f, 0x4e, 0x06, 0xc3, 0x77, 0x03, 0x61, 0xe0, 0xc8, + 0xee, 0xf7, 0xf4, 0x02, 0xaa, 0x41, 0x49, 0xec, 0xf9, 0x45, 0xe6, 0x41, 0x2e, 0xf9, 0x0a, 0xfb, + 0x07, 0x90, 0x6d, 0xf8, 0x2a, 0xaa, 0x80, 0x92, 0xed, 0xf1, 0x72, 0x71, 0x2f, 0x33, 0x83, 0xd8, + 0x3c, 0xb3, 0xda, 0x5d, 0x53, 0xaf, 0xb0, 0x8b, 0x6c, 0x85, 0x07, 0x28, 0xa7, 0xfb, 0x3b, 0xd3, + 0x64, 0x5b, 0x3f, 0x30, 0x3f, 0x43, 0xfb, 0x8d, 0x89, 0x75, 0x8d, 0xf1, 0xf0, 0xf0, 0x9d, 0xbe, + 0xc2, 0x78, 0xaf, 0xfb, 0xa6, 0xd5, 0xd3, 0x57, 0xd9, 0xda, 0xff, 0xc6, 0x6c, 0x63, 0xbb, 0x63, + 0xb6, 0x6d, 0xbd, 0xce, 0x6e, 0x2e, 0x78, 0x80, 0x6b, 0xcc, 0xcd, 0xf1, 0xf0, 0x1c, 0x0f, 0xda, + 0x96, 0xae, 0x1f, 0xec, 0xc1, 0x6a, 0x6e, 0xfe, 0x30, 0x5f, 0x76, 0xbb, 0x63, 0x99, 0x23, 0xfd, + 0x09, 0xa3, 0x47, 0x6f, 0xda, 0xb8, 0x37, 0xd2, 0x0b, 0x9d, 0x5f, 0xbe, 0xdf, 0x9b, 0xfb, 0x94, + 0x24, 0x49, 0xd3, 0x8f, 0x0e, 0x05, 0x75, 0x78, 0x1d, 0x1d, 0xce, 0xe9, 0x21, 0xff, 0x0b, 0x7a, + 0xb8, 0x78, 0x3e, 0x97, 0x65, 0xce, 0xf9, 0xcd, 0x37, 0x01, 0x00, 0x00, 0xff, 0xff, 0x2e, 0xb4, + 0x72, 0xde, 0xde, 0x0e, 0x00, 0x00, } diff --git a/go/vt/proto/vtgate/vtgate.pb.go b/go/vt/proto/vtgate/vtgate.pb.go index b56143a272c..fdfcd7e51ee 100644 --- a/go/vt/proto/vtgate/vtgate.pb.go +++ b/go/vt/proto/vtgate/vtgate.pb.go @@ -54,7 +54,7 @@ func (x TransactionMode) String() string { return proto.EnumName(TransactionMode_name, int32(x)) } func (TransactionMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{0} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{0} } // CommitOrder is used to designate which of the ShardSessions @@ -89,7 +89,7 @@ func (x CommitOrder) String() string { return proto.EnumName(CommitOrder_name, int32(x)) } func (CommitOrder) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{1} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{1} } // Session objects are exchanged like cookies through various @@ -138,7 +138,7 @@ func (m *Session) Reset() { *m = Session{} } func (m *Session) String() string { return proto.CompactTextString(m) } func (*Session) ProtoMessage() {} func (*Session) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{0} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{0} } func (m *Session) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Session.Unmarshal(m, b) @@ -240,7 +240,7 @@ func (m *Session_ShardSession) Reset() { *m = Session_ShardSession{} } func (m *Session_ShardSession) String() string { return proto.CompactTextString(m) } func (*Session_ShardSession) ProtoMessage() {} func (*Session_ShardSession) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{0, 0} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{0, 0} } func (m *Session_ShardSession) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Session_ShardSession.Unmarshal(m, b) @@ -298,7 +298,7 @@ func (m *ExecuteRequest) Reset() { *m = ExecuteRequest{} } func (m *ExecuteRequest) String() string { return proto.CompactTextString(m) } func (*ExecuteRequest) ProtoMessage() {} func (*ExecuteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{1} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{1} } func (m *ExecuteRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteRequest.Unmarshal(m, b) @@ -386,7 +386,7 @@ func (m *ExecuteResponse) Reset() { *m = ExecuteResponse{} } func (m *ExecuteResponse) String() string { return proto.CompactTextString(m) } func (*ExecuteResponse) ProtoMessage() {} func (*ExecuteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{2} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{2} } func (m *ExecuteResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteResponse.Unmarshal(m, b) @@ -456,7 +456,7 @@ func (m *ExecuteShardsRequest) Reset() { *m = ExecuteShardsRequest{} } func (m *ExecuteShardsRequest) String() string { return proto.CompactTextString(m) } func (*ExecuteShardsRequest) ProtoMessage() {} func (*ExecuteShardsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{3} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{3} } func (m *ExecuteShardsRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteShardsRequest.Unmarshal(m, b) @@ -551,7 +551,7 @@ func (m *ExecuteShardsResponse) Reset() { *m = ExecuteShardsResponse{} } func (m *ExecuteShardsResponse) String() string { return proto.CompactTextString(m) } func (*ExecuteShardsResponse) ProtoMessage() {} func (*ExecuteShardsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{4} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{4} } func (m *ExecuteShardsResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteShardsResponse.Unmarshal(m, b) @@ -622,7 +622,7 @@ func (m *ExecuteKeyspaceIdsRequest) Reset() { *m = ExecuteKeyspaceIdsReq func (m *ExecuteKeyspaceIdsRequest) String() string { return proto.CompactTextString(m) } func (*ExecuteKeyspaceIdsRequest) ProtoMessage() {} func (*ExecuteKeyspaceIdsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{5} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{5} } func (m *ExecuteKeyspaceIdsRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteKeyspaceIdsRequest.Unmarshal(m, b) @@ -717,7 +717,7 @@ func (m *ExecuteKeyspaceIdsResponse) Reset() { *m = ExecuteKeyspaceIdsRe func (m *ExecuteKeyspaceIdsResponse) String() string { return proto.CompactTextString(m) } func (*ExecuteKeyspaceIdsResponse) ProtoMessage() {} func (*ExecuteKeyspaceIdsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{6} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{6} } func (m *ExecuteKeyspaceIdsResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteKeyspaceIdsResponse.Unmarshal(m, b) @@ -788,7 +788,7 @@ func (m *ExecuteKeyRangesRequest) Reset() { *m = ExecuteKeyRangesRequest func (m *ExecuteKeyRangesRequest) String() string { return proto.CompactTextString(m) } func (*ExecuteKeyRangesRequest) ProtoMessage() {} func (*ExecuteKeyRangesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{7} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{7} } func (m *ExecuteKeyRangesRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteKeyRangesRequest.Unmarshal(m, b) @@ -883,7 +883,7 @@ func (m *ExecuteKeyRangesResponse) Reset() { *m = ExecuteKeyRangesRespon func (m *ExecuteKeyRangesResponse) String() string { return proto.CompactTextString(m) } func (*ExecuteKeyRangesResponse) ProtoMessage() {} func (*ExecuteKeyRangesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{8} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{8} } func (m *ExecuteKeyRangesResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteKeyRangesResponse.Unmarshal(m, b) @@ -956,7 +956,7 @@ func (m *ExecuteEntityIdsRequest) Reset() { *m = ExecuteEntityIdsRequest func (m *ExecuteEntityIdsRequest) String() string { return proto.CompactTextString(m) } func (*ExecuteEntityIdsRequest) ProtoMessage() {} func (*ExecuteEntityIdsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{9} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{9} } func (m *ExecuteEntityIdsRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteEntityIdsRequest.Unmarshal(m, b) @@ -1055,7 +1055,7 @@ func (m *ExecuteEntityIdsRequest_EntityId) Reset() { *m = ExecuteEntityI func (m *ExecuteEntityIdsRequest_EntityId) String() string { return proto.CompactTextString(m) } func (*ExecuteEntityIdsRequest_EntityId) ProtoMessage() {} func (*ExecuteEntityIdsRequest_EntityId) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{9, 0} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{9, 0} } func (m *ExecuteEntityIdsRequest_EntityId) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteEntityIdsRequest_EntityId.Unmarshal(m, b) @@ -1115,7 +1115,7 @@ func (m *ExecuteEntityIdsResponse) Reset() { *m = ExecuteEntityIdsRespon func (m *ExecuteEntityIdsResponse) String() string { return proto.CompactTextString(m) } func (*ExecuteEntityIdsResponse) ProtoMessage() {} func (*ExecuteEntityIdsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{10} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{10} } func (m *ExecuteEntityIdsResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteEntityIdsResponse.Unmarshal(m, b) @@ -1180,7 +1180,7 @@ func (m *ExecuteBatchRequest) Reset() { *m = ExecuteBatchRequest{} } func (m *ExecuteBatchRequest) String() string { return proto.CompactTextString(m) } func (*ExecuteBatchRequest) ProtoMessage() {} func (*ExecuteBatchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{11} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{11} } func (m *ExecuteBatchRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteBatchRequest.Unmarshal(m, b) @@ -1268,7 +1268,7 @@ func (m *ExecuteBatchResponse) Reset() { *m = ExecuteBatchResponse{} } func (m *ExecuteBatchResponse) String() string { return proto.CompactTextString(m) } func (*ExecuteBatchResponse) ProtoMessage() {} func (*ExecuteBatchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{12} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{12} } func (m *ExecuteBatchResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteBatchResponse.Unmarshal(m, b) @@ -1328,7 +1328,7 @@ func (m *BoundShardQuery) Reset() { *m = BoundShardQuery{} } func (m *BoundShardQuery) String() string { return proto.CompactTextString(m) } func (*BoundShardQuery) ProtoMessage() {} func (*BoundShardQuery) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{13} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{13} } func (m *BoundShardQuery) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BoundShardQuery.Unmarshal(m, b) @@ -1396,7 +1396,7 @@ func (m *ExecuteBatchShardsRequest) Reset() { *m = ExecuteBatchShardsReq func (m *ExecuteBatchShardsRequest) String() string { return proto.CompactTextString(m) } func (*ExecuteBatchShardsRequest) ProtoMessage() {} func (*ExecuteBatchShardsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{14} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{14} } func (m *ExecuteBatchShardsRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteBatchShardsRequest.Unmarshal(m, b) @@ -1477,7 +1477,7 @@ func (m *ExecuteBatchShardsResponse) Reset() { *m = ExecuteBatchShardsRe func (m *ExecuteBatchShardsResponse) String() string { return proto.CompactTextString(m) } func (*ExecuteBatchShardsResponse) ProtoMessage() {} func (*ExecuteBatchShardsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{15} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{15} } func (m *ExecuteBatchShardsResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteBatchShardsResponse.Unmarshal(m, b) @@ -1538,7 +1538,7 @@ func (m *BoundKeyspaceIdQuery) Reset() { *m = BoundKeyspaceIdQuery{} } func (m *BoundKeyspaceIdQuery) String() string { return proto.CompactTextString(m) } func (*BoundKeyspaceIdQuery) ProtoMessage() {} func (*BoundKeyspaceIdQuery) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{16} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{16} } func (m *BoundKeyspaceIdQuery) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BoundKeyspaceIdQuery.Unmarshal(m, b) @@ -1605,7 +1605,7 @@ func (m *ExecuteBatchKeyspaceIdsRequest) Reset() { *m = ExecuteBatchKeys func (m *ExecuteBatchKeyspaceIdsRequest) String() string { return proto.CompactTextString(m) } func (*ExecuteBatchKeyspaceIdsRequest) ProtoMessage() {} func (*ExecuteBatchKeyspaceIdsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{17} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{17} } func (m *ExecuteBatchKeyspaceIdsRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteBatchKeyspaceIdsRequest.Unmarshal(m, b) @@ -1686,7 +1686,7 @@ func (m *ExecuteBatchKeyspaceIdsResponse) Reset() { *m = ExecuteBatchKey func (m *ExecuteBatchKeyspaceIdsResponse) String() string { return proto.CompactTextString(m) } func (*ExecuteBatchKeyspaceIdsResponse) ProtoMessage() {} func (*ExecuteBatchKeyspaceIdsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{18} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{18} } func (m *ExecuteBatchKeyspaceIdsResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExecuteBatchKeyspaceIdsResponse.Unmarshal(m, b) @@ -1750,7 +1750,7 @@ func (m *StreamExecuteRequest) Reset() { *m = StreamExecuteRequest{} } func (m *StreamExecuteRequest) String() string { return proto.CompactTextString(m) } func (*StreamExecuteRequest) ProtoMessage() {} func (*StreamExecuteRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{19} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{19} } func (m *StreamExecuteRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamExecuteRequest.Unmarshal(m, b) @@ -1829,7 +1829,7 @@ func (m *StreamExecuteResponse) Reset() { *m = StreamExecuteResponse{} } func (m *StreamExecuteResponse) String() string { return proto.CompactTextString(m) } func (*StreamExecuteResponse) ProtoMessage() {} func (*StreamExecuteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{20} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{20} } func (m *StreamExecuteResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamExecuteResponse.Unmarshal(m, b) @@ -1880,7 +1880,7 @@ func (m *StreamExecuteShardsRequest) Reset() { *m = StreamExecuteShardsR func (m *StreamExecuteShardsRequest) String() string { return proto.CompactTextString(m) } func (*StreamExecuteShardsRequest) ProtoMessage() {} func (*StreamExecuteShardsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{21} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{21} } func (m *StreamExecuteShardsRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamExecuteShardsRequest.Unmarshal(m, b) @@ -1957,7 +1957,7 @@ func (m *StreamExecuteShardsResponse) Reset() { *m = StreamExecuteShards func (m *StreamExecuteShardsResponse) String() string { return proto.CompactTextString(m) } func (*StreamExecuteShardsResponse) ProtoMessage() {} func (*StreamExecuteShardsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{22} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{22} } func (m *StreamExecuteShardsResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamExecuteShardsResponse.Unmarshal(m, b) @@ -2009,7 +2009,7 @@ func (m *StreamExecuteKeyspaceIdsRequest) Reset() { *m = StreamExecuteKe func (m *StreamExecuteKeyspaceIdsRequest) String() string { return proto.CompactTextString(m) } func (*StreamExecuteKeyspaceIdsRequest) ProtoMessage() {} func (*StreamExecuteKeyspaceIdsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{23} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{23} } func (m *StreamExecuteKeyspaceIdsRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamExecuteKeyspaceIdsRequest.Unmarshal(m, b) @@ -2086,7 +2086,7 @@ func (m *StreamExecuteKeyspaceIdsResponse) Reset() { *m = StreamExecuteK func (m *StreamExecuteKeyspaceIdsResponse) String() string { return proto.CompactTextString(m) } func (*StreamExecuteKeyspaceIdsResponse) ProtoMessage() {} func (*StreamExecuteKeyspaceIdsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{24} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{24} } func (m *StreamExecuteKeyspaceIdsResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamExecuteKeyspaceIdsResponse.Unmarshal(m, b) @@ -2138,7 +2138,7 @@ func (m *StreamExecuteKeyRangesRequest) Reset() { *m = StreamExecuteKeyR func (m *StreamExecuteKeyRangesRequest) String() string { return proto.CompactTextString(m) } func (*StreamExecuteKeyRangesRequest) ProtoMessage() {} func (*StreamExecuteKeyRangesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{25} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{25} } func (m *StreamExecuteKeyRangesRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamExecuteKeyRangesRequest.Unmarshal(m, b) @@ -2215,7 +2215,7 @@ func (m *StreamExecuteKeyRangesResponse) Reset() { *m = StreamExecuteKey func (m *StreamExecuteKeyRangesResponse) String() string { return proto.CompactTextString(m) } func (*StreamExecuteKeyRangesResponse) ProtoMessage() {} func (*StreamExecuteKeyRangesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{26} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{26} } func (m *StreamExecuteKeyRangesResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamExecuteKeyRangesResponse.Unmarshal(m, b) @@ -2261,7 +2261,7 @@ func (m *BeginRequest) Reset() { *m = BeginRequest{} } func (m *BeginRequest) String() string { return proto.CompactTextString(m) } func (*BeginRequest) ProtoMessage() {} func (*BeginRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{27} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{27} } func (m *BeginRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BeginRequest.Unmarshal(m, b) @@ -2308,7 +2308,7 @@ func (m *BeginResponse) Reset() { *m = BeginResponse{} } func (m *BeginResponse) String() string { return proto.CompactTextString(m) } func (*BeginResponse) ProtoMessage() {} func (*BeginResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{28} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{28} } func (m *BeginResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BeginResponse.Unmarshal(m, b) @@ -2356,7 +2356,7 @@ func (m *CommitRequest) Reset() { *m = CommitRequest{} } func (m *CommitRequest) String() string { return proto.CompactTextString(m) } func (*CommitRequest) ProtoMessage() {} func (*CommitRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{29} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{29} } func (m *CommitRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommitRequest.Unmarshal(m, b) @@ -2408,7 +2408,7 @@ func (m *CommitResponse) Reset() { *m = CommitResponse{} } func (m *CommitResponse) String() string { return proto.CompactTextString(m) } func (*CommitResponse) ProtoMessage() {} func (*CommitResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{30} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{30} } func (m *CommitResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_CommitResponse.Unmarshal(m, b) @@ -2444,7 +2444,7 @@ func (m *RollbackRequest) Reset() { *m = RollbackRequest{} } func (m *RollbackRequest) String() string { return proto.CompactTextString(m) } func (*RollbackRequest) ProtoMessage() {} func (*RollbackRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{31} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{31} } func (m *RollbackRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RollbackRequest.Unmarshal(m, b) @@ -2489,7 +2489,7 @@ func (m *RollbackResponse) Reset() { *m = RollbackResponse{} } func (m *RollbackResponse) String() string { return proto.CompactTextString(m) } func (*RollbackResponse) ProtoMessage() {} func (*RollbackResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{32} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{32} } func (m *RollbackResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RollbackResponse.Unmarshal(m, b) @@ -2525,7 +2525,7 @@ func (m *ResolveTransactionRequest) Reset() { *m = ResolveTransactionReq func (m *ResolveTransactionRequest) String() string { return proto.CompactTextString(m) } func (*ResolveTransactionRequest) ProtoMessage() {} func (*ResolveTransactionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{33} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{33} } func (m *ResolveTransactionRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResolveTransactionRequest.Unmarshal(m, b) @@ -2581,7 +2581,7 @@ func (m *MessageStreamRequest) Reset() { *m = MessageStreamRequest{} } func (m *MessageStreamRequest) String() string { return proto.CompactTextString(m) } func (*MessageStreamRequest) ProtoMessage() {} func (*MessageStreamRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{34} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{34} } func (m *MessageStreamRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageStreamRequest.Unmarshal(m, b) @@ -2656,7 +2656,7 @@ func (m *MessageAckRequest) Reset() { *m = MessageAckRequest{} } func (m *MessageAckRequest) String() string { return proto.CompactTextString(m) } func (*MessageAckRequest) ProtoMessage() {} func (*MessageAckRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{35} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{35} } func (m *MessageAckRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageAckRequest.Unmarshal(m, b) @@ -2720,7 +2720,7 @@ func (m *IdKeyspaceId) Reset() { *m = IdKeyspaceId{} } func (m *IdKeyspaceId) String() string { return proto.CompactTextString(m) } func (*IdKeyspaceId) ProtoMessage() {} func (*IdKeyspaceId) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{36} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{36} } func (m *IdKeyspaceId) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_IdKeyspaceId.Unmarshal(m, b) @@ -2773,7 +2773,7 @@ func (m *MessageAckKeyspaceIdsRequest) Reset() { *m = MessageAckKeyspace func (m *MessageAckKeyspaceIdsRequest) String() string { return proto.CompactTextString(m) } func (*MessageAckKeyspaceIdsRequest) ProtoMessage() {} func (*MessageAckKeyspaceIdsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{37} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{37} } func (m *MessageAckKeyspaceIdsRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageAckKeyspaceIdsRequest.Unmarshal(m, b) @@ -2832,7 +2832,7 @@ func (m *ResolveTransactionResponse) Reset() { *m = ResolveTransactionRe func (m *ResolveTransactionResponse) String() string { return proto.CompactTextString(m) } func (*ResolveTransactionResponse) ProtoMessage() {} func (*ResolveTransactionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{38} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{38} } func (m *ResolveTransactionResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResolveTransactionResponse.Unmarshal(m, b) @@ -2880,7 +2880,7 @@ type SplitQueryRequest struct { // SELECT FROM
  • 38ZzD;~)L1r- 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

    yR-{kCQCwuvjg;LM)*-yPnzPjC*f+n%4 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

    WHERE . // It must not contain subqueries nor any of the keywords // JOIN, GROUP BY, ORDER BY, LIMIT, DISTINCT. - // Furthermore,
    must be a single “concrete” table. + // Furthermore,
    must be a single "concrete" table. // It cannot be a view. Query *query.BoundQuery `protobuf:"bytes,3,opt,name=query,proto3" json:"query,omitempty"` // Each generated query-part will be restricted to rows whose values @@ -2950,7 +2950,7 @@ func (m *SplitQueryRequest) Reset() { *m = SplitQueryRequest{} } func (m *SplitQueryRequest) String() string { return proto.CompactTextString(m) } func (*SplitQueryRequest) ProtoMessage() {} func (*SplitQueryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{39} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{39} } func (m *SplitQueryRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SplitQueryRequest.Unmarshal(m, b) @@ -3039,7 +3039,7 @@ func (m *SplitQueryResponse) Reset() { *m = SplitQueryResponse{} } func (m *SplitQueryResponse) String() string { return proto.CompactTextString(m) } func (*SplitQueryResponse) ProtoMessage() {} func (*SplitQueryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{40} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{40} } func (m *SplitQueryResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SplitQueryResponse.Unmarshal(m, b) @@ -3080,7 +3080,7 @@ func (m *SplitQueryResponse_KeyRangePart) Reset() { *m = SplitQueryRespo func (m *SplitQueryResponse_KeyRangePart) String() string { return proto.CompactTextString(m) } func (*SplitQueryResponse_KeyRangePart) ProtoMessage() {} func (*SplitQueryResponse_KeyRangePart) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{40, 0} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{40, 0} } func (m *SplitQueryResponse_KeyRangePart) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SplitQueryResponse_KeyRangePart.Unmarshal(m, b) @@ -3128,7 +3128,7 @@ func (m *SplitQueryResponse_ShardPart) Reset() { *m = SplitQueryResponse func (m *SplitQueryResponse_ShardPart) String() string { return proto.CompactTextString(m) } func (*SplitQueryResponse_ShardPart) ProtoMessage() {} func (*SplitQueryResponse_ShardPart) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{40, 1} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{40, 1} } func (m *SplitQueryResponse_ShardPart) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SplitQueryResponse_ShardPart.Unmarshal(m, b) @@ -3181,7 +3181,7 @@ func (m *SplitQueryResponse_Part) Reset() { *m = SplitQueryResponse_Part func (m *SplitQueryResponse_Part) String() string { return proto.CompactTextString(m) } func (*SplitQueryResponse_Part) ProtoMessage() {} func (*SplitQueryResponse_Part) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{40, 2} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{40, 2} } func (m *SplitQueryResponse_Part) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SplitQueryResponse_Part.Unmarshal(m, b) @@ -3242,7 +3242,7 @@ func (m *GetSrvKeyspaceRequest) Reset() { *m = GetSrvKeyspaceRequest{} } func (m *GetSrvKeyspaceRequest) String() string { return proto.CompactTextString(m) } func (*GetSrvKeyspaceRequest) ProtoMessage() {} func (*GetSrvKeyspaceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{41} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{41} } func (m *GetSrvKeyspaceRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetSrvKeyspaceRequest.Unmarshal(m, b) @@ -3282,7 +3282,7 @@ func (m *GetSrvKeyspaceResponse) Reset() { *m = GetSrvKeyspaceResponse{} func (m *GetSrvKeyspaceResponse) String() string { return proto.CompactTextString(m) } func (*GetSrvKeyspaceResponse) ProtoMessage() {} func (*GetSrvKeyspaceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{42} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{42} } func (m *GetSrvKeyspaceResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetSrvKeyspaceResponse.Unmarshal(m, b) @@ -3327,7 +3327,7 @@ func (m *VStreamRequest) Reset() { *m = VStreamRequest{} } func (m *VStreamRequest) String() string { return proto.CompactTextString(m) } func (*VStreamRequest) ProtoMessage() {} func (*VStreamRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{43} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{43} } func (m *VStreamRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VStreamRequest.Unmarshal(m, b) @@ -3387,7 +3387,7 @@ func (m *VStreamResponse) Reset() { *m = VStreamResponse{} } func (m *VStreamResponse) String() string { return proto.CompactTextString(m) } func (*VStreamResponse) ProtoMessage() {} func (*VStreamResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{44} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{44} } func (m *VStreamResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_VStreamResponse.Unmarshal(m, b) @@ -3445,7 +3445,7 @@ func (m *UpdateStreamRequest) Reset() { *m = UpdateStreamRequest{} } func (m *UpdateStreamRequest) String() string { return proto.CompactTextString(m) } func (*UpdateStreamRequest) ProtoMessage() {} func (*UpdateStreamRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{45} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{45} } func (m *UpdateStreamRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateStreamRequest.Unmarshal(m, b) @@ -3533,7 +3533,7 @@ func (m *UpdateStreamResponse) Reset() { *m = UpdateStreamResponse{} } func (m *UpdateStreamResponse) String() string { return proto.CompactTextString(m) } func (*UpdateStreamResponse) ProtoMessage() {} func (*UpdateStreamResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_vtgate_d9799c8e1157b676, []int{46} + return fileDescriptor_vtgate_339c92b13a08c8a7, []int{46} } func (m *UpdateStreamResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateStreamResponse.Unmarshal(m, b) @@ -3624,9 +3624,9 @@ func init() { proto.RegisterEnum("vtgate.CommitOrder", CommitOrder_name, CommitOrder_value) } -func init() { proto.RegisterFile("vtgate.proto", fileDescriptor_vtgate_d9799c8e1157b676) } +func init() { proto.RegisterFile("vtgate.proto", fileDescriptor_vtgate_339c92b13a08c8a7) } -var fileDescriptor_vtgate_d9799c8e1157b676 = []byte{ +var fileDescriptor_vtgate_339c92b13a08c8a7 = []byte{ // 2041 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5a, 0xcd, 0x8f, 0x23, 0x47, 0x15, 0x4f, 0x77, 0xfb, 0xf3, 0xf9, 0x73, 0x6b, 0xbc, 0x1b, 0xc7, 0x19, 0x76, 0x26, 0x1d, 0x46, diff --git a/go/vt/sqlparser/parse_test.go b/go/vt/sqlparser/parse_test.go index b3974e614cb..3be2d623163 100644 --- a/go/vt/sqlparser/parse_test.go +++ b/go/vt/sqlparser/parse_test.go @@ -1434,6 +1434,9 @@ var ( }, { input: "drop database if exists test_db", output: "drop database test_db", + }, { + input: "delete a.*, b.* from tbl_a a, tbl_b b where a.id = b.id and b.name = 'test'", + output: "delete a, b from tbl_a as a, tbl_b as b where a.id = b.id and b.name = 'test'", }} ) diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index 7cb6f6b74fc..d3a3a84a603 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -642,667 +642,770 @@ var yyExca = [...]int{ 5, 29, -2, 4, -1, 37, - 159, 296, - 160, 296, - -2, 286, + 159, 299, + 160, 299, + -2, 289, -1, 270, - 112, 635, - -2, 631, + 112, 639, + -2, 635, -1, 271, - 112, 636, - -2, 632, - -1, 336, - 82, 810, - -2, 60, - -1, 337, - 82, 766, - -2, 61, - -1, 342, - 82, 745, - -2, 597, - -1, 344, - 82, 787, - -2, 599, - -1, 614, - 1, 348, - 5, 348, - 12, 348, - 13, 348, - 14, 348, - 15, 348, - 17, 348, - 19, 348, - 30, 348, - 31, 348, - 42, 348, - 43, 348, - 44, 348, - 45, 348, - 46, 348, - 48, 348, - 49, 348, - 52, 348, - 53, 348, - 55, 348, - 56, 348, - 269, 348, - -2, 366, + 112, 640, + -2, 636, + -1, 339, + 82, 814, + -2, 63, + -1, 340, + 82, 770, + -2, 64, + -1, 345, + 82, 749, + -2, 601, + -1, 347, + 82, 791, + -2, 603, -1, 617, - 53, 43, - 55, 43, - -2, 45, - -1, 759, - 112, 638, - -2, 634, - -1, 982, + 1, 351, + 5, 351, + 12, 351, + 13, 351, + 14, 351, + 15, 351, + 17, 351, + 19, 351, + 30, 351, + 31, 351, + 42, 351, + 43, 351, + 44, 351, + 45, 351, + 46, 351, + 48, 351, + 49, 351, + 52, 351, + 53, 351, + 55, 351, + 56, 351, + 269, 351, + -2, 369, + -1, 620, + 53, 44, + 55, 44, + -2, 48, + -1, 765, + 112, 642, + -2, 638, + -1, 992, 5, 30, - -2, 432, - -1, 1012, + -2, 436, + -1, 1022, 5, 29, - -2, 571, - -1, 1252, + -2, 575, + -1, 1264, 5, 30, - -2, 572, - -1, 1304, + -2, 576, + -1, 1316, 5, 29, - -2, 574, - -1, 1381, + -2, 578, + -1, 1393, 5, 30, - -2, 575, + -2, 579, } const yyPrivate = 57344 -const yyLast = 12928 +const yyLast = 12703 var yyAct = [...]int{ - 271, 1415, 1405, 1215, 1369, 1104, 1015, 275, 570, 1285, - 868, 1316, 1155, 845, 1033, 1189, 57, 288, 1156, 1152, - 249, 301, 891, 1016, 947, 911, 1272, 1039, 877, 1058, - 1162, 867, 81, 864, 784, 1168, 210, 974, 341, 210, - 1127, 724, 794, 1084, 240, 1075, 812, 843, 881, 847, - 832, 502, 610, 761, 508, 627, 907, 442, 626, 335, - 825, 258, 611, 471, 817, 522, 273, 210, 81, 791, - 332, 330, 210, 277, 210, 584, 569, 3, 56, 897, - 1408, 1392, 1403, 1379, 514, 1400, 956, 1216, 1391, 241, - 242, 243, 244, 585, 1378, 247, 1144, 61, 1244, 447, - 628, 930, 629, 1184, 1185, 313, 262, 319, 320, 317, - 318, 316, 315, 314, 1183, 929, 475, 205, 201, 202, - 203, 321, 322, 63, 64, 65, 66, 67, 248, 1046, - 858, 793, 1045, 859, 860, 1047, 492, 197, 496, 199, - 246, 245, 1066, 934, 493, 490, 491, 890, 1275, 1291, - 898, 1235, 928, 1344, 535, 534, 544, 545, 537, 538, - 539, 540, 541, 542, 543, 536, 460, 239, 546, 1233, - 1402, 1128, 485, 486, 1107, 699, 1106, 697, 1399, 1370, - 1103, 826, 477, 1362, 479, 882, 1317, 199, 1419, 1423, - 461, 1034, 1036, 449, 1108, 703, 884, 495, 210, 1319, - 884, 210, 925, 922, 923, 1325, 921, 210, 1130, 698, - 690, 1178, 1177, 210, 476, 478, 81, 1100, 81, 81, - 884, 81, 81, 1102, 81, 1059, 81, 1176, 445, 443, - 700, 452, 212, 198, 200, 81, 1351, 932, 935, 204, - 991, 1132, 988, 1136, 1255, 1131, 1114, 1129, 941, 457, - 1001, 940, 1134, 537, 538, 539, 540, 541, 542, 543, - 536, 1133, 968, 546, 1091, 81, 733, 1318, 1035, 510, - 558, 559, 526, 927, 1135, 1137, 467, 536, 264, 898, - 546, 480, 481, 865, 482, 483, 546, 484, 473, 487, - 498, 499, 883, 1089, 1417, 926, 883, 1418, 497, 1416, - 725, 880, 878, 474, 879, 730, 1326, 1324, 1377, 876, - 882, 1201, 454, 500, 455, 521, 883, 456, 1146, 1101, - 1360, 1099, 70, 1334, 520, 519, 1345, 1166, 210, 210, - 210, 511, 949, 630, 81, 736, 737, 302, 51, 931, - 81, 521, 558, 559, 558, 559, 556, 539, 540, 541, - 542, 543, 536, 512, 933, 546, 338, 813, 71, 519, - 1090, 1064, 1202, 768, 692, 1095, 1092, 1085, 1093, 1088, - 463, 464, 465, 1086, 1087, 521, 609, 766, 767, 765, - 813, 726, 998, 520, 519, 1365, 516, 1094, 1383, 51, - 587, 589, 591, 593, 595, 597, 598, 254, 520, 519, - 521, 618, 614, 54, 624, 1148, 987, 448, 588, 590, - 948, 594, 596, 764, 599, 521, 535, 534, 544, 545, - 537, 538, 539, 540, 541, 542, 543, 536, 1424, 443, - 546, 534, 544, 545, 537, 538, 539, 540, 541, 542, - 543, 536, 210, 887, 546, 1281, 986, 81, 985, 888, - 196, 501, 210, 210, 81, 1385, 520, 519, 210, 1358, - 1280, 210, 441, 1079, 210, 520, 519, 1425, 210, 975, - 81, 81, 785, 521, 786, 81, 81, 81, 210, 81, - 81, 1078, 521, 1067, 450, 451, 81, 81, 535, 534, - 544, 545, 537, 538, 539, 540, 541, 542, 543, 536, - 1361, 1298, 546, 751, 753, 754, 712, 22, 1278, 752, - 689, 965, 966, 967, 81, 327, 328, 696, 210, 1048, - 1111, 1049, 1076, 732, 81, 1322, 1401, 1387, 501, 505, - 509, 738, 704, 713, 714, 1322, 1373, 501, 715, 716, - 717, 1218, 719, 720, 1322, 501, 527, 1322, 1352, 721, - 722, 762, 1059, 472, 710, 472, 472, 1054, 472, 472, - 731, 472, 1331, 472, 787, 759, 709, 253, 81, 1322, - 1321, 1330, 472, 708, 740, 693, 739, 520, 519, 1270, - 1269, 571, 1257, 501, 1198, 803, 806, 1254, 501, 755, - 582, 814, 51, 691, 521, 291, 290, 293, 294, 295, - 296, 81, 81, 763, 292, 297, 688, 555, 210, 469, - 557, 1208, 1207, 757, 1204, 1205, 210, 210, 1204, 1203, - 210, 210, 338, 462, 81, 788, 789, 980, 501, 829, - 501, 796, 501, 1153, 795, 797, 1165, 81, 568, 1040, - 572, 573, 574, 575, 576, 577, 578, 579, 580, 798, - 583, 586, 586, 586, 592, 586, 586, 592, 586, 600, - 601, 602, 603, 604, 605, 810, 615, 853, 24, 893, - 894, 895, 896, 822, 637, 636, 885, 621, 851, 1040, - 58, 1117, 829, 855, 856, 904, 905, 906, 1165, 614, - 24, 210, 81, 614, 81, 872, 1303, 796, 81, 81, - 210, 210, 1250, 210, 210, 799, 800, 210, 81, 805, - 808, 809, 1333, 913, 1010, 828, 54, 24, 1011, 622, - 980, 620, 1165, 829, 210, 980, 210, 210, 852, 210, - 620, 899, 900, 901, 821, 1206, 823, 824, 54, 1105, - 829, 909, 910, 1050, 544, 545, 537, 538, 539, 540, - 541, 542, 543, 536, 857, 917, 546, 919, 1004, 1003, - 300, 980, 620, 623, 734, 54, 915, 702, 54, 1393, - 255, 945, 759, 727, 1287, 834, 837, 838, 839, 835, - 892, 836, 840, 1262, 472, 1169, 1170, 762, 912, 957, - 958, 472, 79, 1194, 1169, 1170, 1410, 1053, 748, 749, - 908, 903, 902, 1406, 1196, 1172, 1153, 472, 472, 1080, - 728, 706, 472, 472, 472, 758, 472, 472, 54, 970, - 1027, 1025, 1175, 472, 472, 1028, 1026, 746, 340, 1174, - 210, 210, 210, 210, 210, 1029, 1017, 838, 839, 763, - 1024, 1023, 210, 259, 260, 210, 1397, 1390, 1113, 210, - 953, 571, 977, 210, 801, 802, 978, 515, 997, 1395, - 963, 962, 1071, 982, 983, 984, 1367, 635, 81, 470, - 990, 1063, 513, 993, 994, 1366, 1301, 964, 1051, 1000, - 503, 1042, 1018, 1002, 1061, 1021, 1005, 1006, 1007, 1008, - 1055, 1030, 504, 1019, 1020, 51, 1022, 1248, 1038, 1283, - 1041, 918, 1012, 614, 614, 614, 614, 614, 1032, 863, - 572, 1060, 338, 1043, 705, 842, 81, 81, 614, 256, - 257, 798, 515, 250, 979, 869, 614, 1338, 1056, 1057, - 251, 1070, 58, 1072, 1073, 1074, 1337, 834, 837, 838, - 839, 835, 995, 836, 840, 81, 961, 1289, 1040, 1077, - 494, 1412, 1411, 844, 960, 992, 989, 615, 723, 517, - 210, 1412, 1348, 1276, 729, 1083, 1096, 60, 62, 81, - 619, 55, 1, 1068, 1069, 1404, 340, 1217, 340, 340, - 1082, 340, 340, 1284, 340, 924, 340, 1368, 1110, 1315, - 1188, 875, 866, 69, 440, 340, 68, 1359, 874, 873, - 1323, 1274, 886, 1065, 889, 1195, 1062, 1364, 1109, 1121, - 954, 955, 1145, 509, 81, 81, 268, 1154, 1017, 643, - 641, 1138, 758, 1126, 642, 524, 640, 645, 1139, 472, - 644, 472, 639, 1157, 224, 333, 841, 631, 81, 1120, - 759, 914, 518, 1164, 1125, 472, 72, 1098, 1097, 920, - 488, 81, 489, 81, 81, 226, 1180, 1173, 554, 959, - 1044, 339, 1160, 1187, 735, 507, 1336, 1288, 1179, 1182, - 996, 581, 811, 276, 750, 981, 289, 286, 287, 741, - 1009, 210, 1186, 1191, 528, 274, 1192, 1193, 266, 613, - 1159, 606, 999, 833, 340, 831, 969, 830, 210, 1171, - 632, 1167, 1199, 1200, 81, 612, 1116, 81, 81, 210, - 1243, 1343, 745, 26, 59, 81, 261, 19, 210, 18, - 17, 20, 16, 15, 14, 458, 30, 21, 13, 1210, - 12, 11, 10, 9, 8, 1222, 7, 6, 5, 4, - 252, 1211, 23, 1213, 1223, 2, 0, 0, 0, 0, - 0, 1228, 1229, 0, 1230, 0, 869, 1232, 1231, 1234, - 0, 0, 0, 1013, 1014, 1224, 0, 615, 615, 615, - 615, 615, 0, 1017, 1249, 0, 0, 0, 0, 0, - 0, 1258, 844, 0, 1037, 1225, 0, 81, 0, 1259, - 615, 614, 1227, 0, 0, 81, 0, 1051, 0, 0, - 0, 1268, 0, 1236, 1237, 0, 0, 340, 0, 0, - 81, 0, 0, 1271, 340, 0, 0, 81, 0, 0, - 0, 0, 0, 1251, 1252, 1253, 0, 1256, 1112, 0, - 340, 340, 0, 0, 0, 340, 340, 340, 0, 340, - 340, 0, 0, 0, 1267, 0, 340, 340, 0, 0, - 0, 0, 0, 0, 472, 81, 81, 1119, 81, 0, - 0, 0, 0, 81, 0, 81, 81, 81, 210, 1302, - 0, 81, 1157, 1282, 742, 0, 0, 1147, 0, 1309, - 0, 1314, 472, 1277, 524, 1279, 1320, 340, 81, 1310, - 1149, 1311, 1312, 1313, 1327, 560, 561, 562, 563, 564, - 565, 566, 567, 0, 0, 0, 0, 0, 1297, 1290, - 0, 1328, 0, 1329, 1335, 0, 1349, 0, 0, 1181, - 0, 0, 0, 81, 0, 1157, 0, 1357, 790, 1356, - 1304, 0, 0, 0, 81, 81, 0, 0, 0, 869, - 0, 869, 0, 1371, 815, 1372, 0, 1375, 0, 1158, - 0, 51, 81, 0, 0, 1380, 1017, 1339, 1340, 1341, - 1342, 819, 820, 210, 1346, 1347, 0, 0, 0, 0, - 0, 81, 0, 0, 0, 0, 1353, 1354, 1355, 1389, - 0, 0, 1350, 0, 340, 0, 0, 0, 0, 0, - 0, 0, 1394, 1396, 81, 0, 0, 340, 0, 0, - 0, 0, 0, 1119, 0, 0, 0, 1409, 1376, 0, - 0, 0, 0, 0, 1420, 1381, 0, 0, 0, 0, - 1398, 0, 0, 0, 0, 0, 0, 1245, 0, 0, - 0, 0, 0, 1386, 0, 0, 0, 571, 0, 0, - 0, 0, 0, 0, 0, 1260, 0, 0, 1261, 0, - 0, 1263, 340, 0, 340, 615, 0, 0, 936, 937, - 0, 506, 0, 0, 0, 0, 0, 0, 340, 0, - 0, 0, 0, 0, 0, 869, 0, 0, 1421, 1422, - 0, 0, 1242, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 340, 0, 0, 208, 0, 0, - 238, 0, 0, 0, 0, 1286, 0, 0, 0, 0, - 0, 0, 0, 0, 1264, 1265, 1266, 0, 0, 0, - 0, 0, 0, 0, 0, 265, 1247, 0, 208, 0, - 0, 0, 0, 208, 0, 208, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 760, 660, 472, 769, 770, - 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, - 781, 782, 783, 0, 535, 534, 544, 545, 537, 538, - 539, 540, 541, 542, 543, 536, 0, 0, 546, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1158, 815, - 0, 1305, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 818, 0, 0, 1246, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1374, 571, 0, 0, - 0, 1332, 1286, 869, 648, 0, 0, 0, 340, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1158, 0, 51, 535, 534, 544, 545, 537, 538, - 539, 540, 541, 542, 543, 536, 0, 0, 546, 208, - 0, 661, 208, 0, 0, 0, 0, 1241, 208, 0, - 0, 0, 0, 0, 208, 0, 1081, 340, 0, 0, - 0, 0, 0, 674, 677, 678, 679, 680, 681, 682, - 0, 683, 684, 685, 686, 687, 662, 663, 664, 665, - 646, 647, 675, 0, 649, 340, 650, 651, 652, 653, - 654, 655, 656, 657, 658, 659, 666, 667, 668, 669, - 670, 671, 672, 673, 0, 0, 0, 0, 0, 340, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1407, 535, 534, 544, 545, 537, 538, 539, 540, 541, - 542, 543, 536, 0, 0, 546, 0, 0, 616, 0, - 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, - 0, 815, 0, 0, 1161, 1163, 0, 0, 0, 676, - 0, 0, 0, 971, 972, 973, 0, 0, 0, 208, - 208, 208, 0, 0, 207, 0, 0, 0, 1163, 221, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 340, 0, 340, 1190, 0, 0, 1240, 0, 0, - 0, 0, 0, 234, 0, 331, 530, 0, 533, 0, - 444, 0, 446, 0, 547, 548, 549, 550, 551, 552, - 553, 0, 531, 532, 529, 535, 534, 544, 545, 537, - 538, 539, 540, 541, 542, 543, 536, 0, 0, 546, - 0, 0, 0, 0, 1214, 0, 0, 1219, 1220, 0, - 0, 0, 0, 0, 213, 340, 0, 0, 0, 0, - 0, 216, 0, 0, 0, 0, 0, 0, 0, 225, - 220, 535, 534, 544, 545, 537, 538, 539, 540, 541, - 542, 543, 536, 208, 0, 546, 0, 0, 0, 0, - 0, 0, 0, 208, 208, 0, 0, 0, 0, 208, - 0, 223, 208, 0, 0, 208, 815, 233, 0, 711, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, - 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, - 0, 0, 0, 214, 0, 1273, 453, 0, 0, 459, - 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, - 340, 468, 0, 0, 0, 1239, 0, 340, 0, 208, - 227, 217, 218, 0, 228, 229, 230, 232, 711, 231, - 237, 0, 1123, 1124, 219, 222, 0, 215, 236, 235, - 0, 0, 0, 0, 0, 1140, 1141, 0, 1142, 1143, - 0, 0, 0, 0, 0, 1306, 1307, 0, 1308, 0, - 1150, 1151, 1238, 1273, 0, 1273, 1273, 1273, 0, 0, - 265, 1190, 0, 0, 0, 265, 265, 0, 0, 265, - 265, 265, 0, 0, 0, 816, 0, 0, 1273, 535, - 534, 544, 545, 537, 538, 539, 540, 541, 542, 543, - 536, 0, 0, 546, 265, 265, 265, 265, 0, 208, - 0, 0, 0, 0, 0, 0, 0, 208, 849, 0, - 1197, 208, 208, 1363, 0, 0, 608, 0, 617, 0, - 0, 0, 0, 1122, 340, 340, 535, 534, 544, 545, - 537, 538, 539, 540, 541, 542, 543, 536, 0, 815, - 546, 0, 1382, 535, 534, 544, 545, 537, 538, 539, - 540, 541, 542, 543, 536, 0, 0, 546, 0, 0, - 0, 1388, 0, 0, 0, 0, 0, 0, 0, 1226, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 976, - 0, 0, 208, 0, 1273, 0, 0, 0, 0, 0, - 0, 208, 208, 0, 208, 208, 0, 0, 208, 535, - 534, 544, 545, 537, 538, 539, 540, 541, 542, 543, - 536, 0, 0, 546, 0, 208, 0, 950, 951, 0, - 208, 0, 0, 0, 0, 711, 0, 0, 0, 0, - 638, 0, 0, 0, 0, 0, 0, 265, 0, 0, - 694, 695, 0, 0, 0, 0, 701, 0, 0, 331, - 0, 0, 707, 0, 0, 0, 0, 24, 25, 52, - 27, 28, 0, 0, 0, 0, 718, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, - 0, 29, 48, 49, 265, 1292, 1293, 1294, 1295, 1296, - 0, 0, 0, 1299, 1300, 0, 0, 0, 0, 0, - 0, 38, 265, 0, 0, 54, 747, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 816, 208, 208, 208, 208, 208, 0, 0, 0, 0, - 0, 0, 0, 1031, 0, 0, 208, 0, 0, 0, - 849, 0, 0, 0, 208, 535, 534, 544, 545, 537, - 538, 539, 540, 541, 542, 543, 536, 0, 0, 546, + 271, 1427, 1417, 1227, 1381, 1116, 878, 1284, 573, 1025, + 1297, 275, 1328, 288, 1043, 1201, 1167, 851, 301, 907, + 1164, 572, 3, 249, 1026, 1168, 877, 921, 887, 1174, + 1070, 57, 81, 874, 790, 1180, 210, 716, 344, 210, + 1139, 957, 800, 1096, 984, 838, 730, 849, 1087, 633, + 613, 474, 853, 818, 767, 511, 1049, 505, 445, 891, + 632, 797, 333, 799, 831, 338, 622, 210, 81, 917, + 273, 258, 210, 248, 210, 517, 525, 56, 588, 1420, + 1404, 313, 330, 319, 320, 317, 318, 316, 315, 314, + 1415, 614, 1391, 335, 940, 1412, 1228, 321, 322, 1403, + 302, 51, 901, 240, 1156, 1256, 262, 450, 939, 1390, + 478, 61, 205, 201, 202, 203, 1195, 587, 1356, 538, + 537, 547, 548, 540, 541, 542, 543, 544, 545, 546, + 539, 1196, 1197, 549, 869, 870, 944, 63, 64, 65, + 66, 67, 634, 499, 635, 938, 868, 246, 241, 242, + 243, 244, 51, 1058, 247, 495, 1057, 245, 1078, 1059, + 254, 900, 1287, 496, 493, 494, 197, 908, 199, 1303, + 1247, 1245, 239, 463, 488, 489, 480, 1119, 482, 823, + 538, 537, 547, 548, 540, 541, 542, 543, 544, 545, + 546, 539, 1118, 705, 549, 935, 932, 933, 210, 931, + 703, 210, 498, 1414, 1411, 1382, 1115, 210, 479, 481, + 832, 1140, 1374, 210, 892, 1329, 81, 1435, 81, 81, + 464, 81, 81, 1112, 81, 1431, 81, 704, 1331, 1114, + 942, 945, 452, 985, 204, 81, 199, 1337, 706, 1120, + 709, 696, 1190, 1044, 1046, 894, 894, 277, 1142, 1189, + 1188, 448, 455, 212, 200, 951, 1001, 1363, 950, 998, + 561, 562, 198, 1267, 1126, 81, 937, 1054, 1011, 483, + 484, 978, 485, 486, 1071, 487, 514, 490, 739, 1103, + 628, 1144, 529, 1148, 513, 1143, 500, 1141, 936, 460, + 470, 1357, 1146, 1213, 875, 539, 1330, 477, 549, 908, + 736, 1145, 542, 543, 544, 545, 546, 539, 1101, 549, + 549, 864, 959, 446, 1147, 1149, 475, 476, 475, 475, + 1045, 475, 475, 1389, 475, 1113, 475, 1111, 210, 210, + 210, 1429, 941, 70, 1430, 475, 1428, 81, 1338, 1336, + 522, 893, 893, 81, 1214, 1372, 444, 943, 524, 501, + 502, 1346, 457, 1178, 458, 51, 524, 459, 561, 562, + 731, 561, 562, 636, 1158, 819, 819, 515, 1008, 71, + 558, 698, 1076, 560, 1377, 1102, 612, 466, 467, 468, + 1107, 1104, 1097, 1105, 1100, 341, 897, 519, 1098, 1099, + 958, 1395, 898, 591, 593, 1293, 597, 599, 626, 602, + 1436, 571, 1106, 575, 576, 577, 578, 579, 580, 581, + 582, 583, 621, 586, 589, 589, 589, 595, 589, 589, + 595, 589, 603, 604, 605, 606, 607, 608, 503, 618, + 630, 300, 590, 592, 594, 596, 598, 600, 601, 1437, + 196, 732, 54, 894, 774, 210, 742, 743, 1397, 996, + 81, 995, 770, 523, 522, 210, 210, 81, 772, 773, + 771, 210, 1292, 79, 210, 997, 1091, 210, 523, 522, + 524, 210, 446, 81, 81, 975, 976, 977, 81, 81, + 81, 210, 81, 81, 1090, 524, 523, 522, 22, 81, + 81, 1079, 1373, 1160, 523, 522, 757, 759, 760, 343, + 1310, 695, 758, 524, 1290, 327, 328, 451, 702, 718, + 791, 524, 792, 1123, 1088, 523, 522, 81, 1334, 1413, + 559, 210, 1399, 504, 719, 720, 1060, 81, 1061, 721, + 722, 723, 524, 725, 726, 1334, 1385, 744, 1370, 893, + 727, 728, 1334, 504, 890, 888, 710, 889, 253, 1230, + 475, 768, 886, 892, 738, 1334, 1364, 475, 1071, 540, + 541, 542, 543, 544, 545, 546, 539, 763, 765, 549, + 1066, 81, 793, 475, 475, 715, 617, 714, 475, 475, + 475, 699, 475, 475, 453, 454, 697, 746, 694, 475, + 475, 737, 809, 812, 1334, 1333, 504, 804, 820, 1282, + 1281, 1269, 504, 761, 81, 81, 1266, 504, 523, 522, + 472, 210, 1220, 1219, 268, 1216, 1217, 1216, 1215, 210, + 210, 990, 504, 210, 210, 524, 465, 210, 210, 210, + 81, 624, 794, 795, 835, 504, 24, 802, 504, 624, + 805, 806, 1343, 81, 811, 814, 815, 343, 1342, 343, + 343, 1210, 343, 343, 341, 343, 895, 343, 1050, 816, + 1020, 51, 643, 642, 1021, 1177, 343, 718, 828, 827, + 859, 829, 830, 625, 861, 627, 575, 909, 910, 911, + 24, 625, 1050, 623, 54, 857, 1165, 834, 802, 1177, + 862, 58, 866, 1262, 745, 865, 527, 210, 81, 504, + 81, 835, 882, 1345, 81, 81, 210, 210, 1315, 210, + 210, 835, 835, 210, 81, 1129, 858, 1218, 623, 850, + 1062, 923, 24, 618, 867, 1177, 1014, 618, 54, 54, + 210, 990, 210, 210, 1013, 210, 538, 537, 547, 548, + 540, 541, 542, 543, 544, 545, 546, 539, 990, 927, + 549, 929, 801, 803, 623, 903, 904, 905, 906, 990, + 919, 920, 629, 740, 1405, 955, 708, 1299, 343, 902, + 54, 914, 915, 916, 638, 1274, 922, 966, 765, 1206, + 769, 1065, 291, 290, 293, 294, 295, 296, 1181, 1182, + 768, 292, 297, 255, 918, 913, 967, 912, 475, 1117, + 475, 925, 968, 537, 547, 548, 540, 541, 542, 543, + 544, 545, 546, 539, 475, 974, 549, 840, 843, 844, + 845, 841, 1422, 842, 846, 1418, 980, 1181, 1182, 1208, + 1184, 1165, 1092, 734, 712, 752, 210, 210, 210, 210, + 210, 54, 1187, 1186, 1037, 1035, 1027, 764, 210, 1038, + 1036, 210, 1034, 1022, 1039, 210, 844, 845, 1033, 210, + 259, 260, 989, 1409, 1402, 979, 617, 1125, 963, 1407, + 617, 1007, 804, 973, 617, 518, 972, 1083, 81, 506, + 1005, 343, 641, 473, 1063, 1075, 1028, 1379, 343, 1031, + 516, 507, 1040, 563, 564, 565, 566, 567, 568, 569, + 570, 1378, 1313, 1073, 343, 343, 1051, 1048, 1067, 343, + 343, 343, 1260, 343, 343, 1295, 1052, 1055, 1053, 928, + 343, 343, 1072, 1080, 1081, 711, 81, 81, 1029, 1030, + 264, 1032, 1023, 1024, 848, 518, 618, 618, 618, 618, + 618, 1082, 250, 1084, 1085, 1086, 971, 341, 748, 1068, + 1069, 850, 58, 1047, 970, 81, 256, 257, 527, 618, + 879, 343, 1089, 1350, 251, 840, 843, 844, 845, 841, + 210, 842, 846, 987, 1349, 1301, 1108, 988, 1094, 81, + 1050, 497, 1424, 1423, 992, 993, 994, 1002, 999, 729, + 520, 1000, 1424, 1360, 1003, 1004, 1288, 735, 60, 62, + 1010, 55, 796, 1122, 1012, 1, 1121, 1015, 1016, 1017, + 1018, 1416, 1229, 1296, 934, 1380, 1327, 1200, 821, 769, + 885, 876, 69, 443, 81, 81, 1133, 475, 68, 1042, + 1166, 1150, 1027, 1138, 1095, 825, 826, 1157, 1151, 1371, + 1169, 1132, 884, 883, 1335, 1171, 1286, 896, 81, 966, + 765, 1077, 899, 1207, 1074, 475, 1376, 764, 649, 647, + 648, 343, 646, 81, 651, 81, 81, 1185, 650, 645, + 224, 1199, 336, 847, 343, 637, 924, 1191, 521, 72, + 1110, 1192, 1176, 617, 617, 617, 617, 617, 1109, 1198, + 930, 491, 492, 210, 226, 1203, 557, 969, 617, 1204, + 1205, 1056, 342, 1172, 741, 510, 617, 1348, 1194, 1300, + 210, 1006, 584, 817, 1211, 1212, 81, 276, 756, 81, + 81, 210, 1170, 289, 51, 286, 287, 81, 747, 343, + 210, 343, 1019, 531, 274, 946, 947, 266, 616, 609, + 839, 837, 836, 331, 1183, 343, 766, 1179, 615, 775, + 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, + 786, 787, 788, 789, 1234, 1128, 1255, 1355, 751, 1137, + 26, 343, 1243, 59, 261, 19, 18, 1236, 17, 20, + 16, 508, 512, 15, 14, 1235, 461, 1261, 30, 1027, + 21, 13, 12, 11, 10, 879, 9, 8, 530, 81, + 1222, 7, 1271, 6, 824, 1063, 5, 81, 1270, 4, + 252, 23, 1223, 2, 1225, 0, 1280, 0, 0, 0, + 0, 0, 81, 0, 0, 0, 0, 0, 0, 81, + 618, 0, 0, 574, 0, 1289, 0, 1291, 0, 0, + 0, 0, 585, 1240, 1241, 0, 1242, 0, 0, 1244, + 0, 1246, 0, 0, 0, 0, 0, 1254, 0, 0, + 0, 1302, 0, 0, 0, 0, 821, 81, 81, 0, + 81, 0, 0, 1294, 0, 81, 0, 81, 81, 81, + 210, 1169, 1322, 81, 1323, 1324, 1325, 1316, 1314, 1276, + 1277, 1278, 0, 0, 1321, 0, 1131, 1326, 1332, 0, + 81, 0, 1339, 0, 0, 1283, 0, 1347, 0, 343, + 0, 0, 1237, 0, 0, 0, 0, 0, 0, 1239, + 0, 0, 475, 1340, 0, 1341, 509, 0, 0, 1161, + 1248, 1249, 1361, 0, 1169, 81, 0, 0, 0, 1362, + 1369, 1368, 0, 0, 0, 0, 81, 81, 0, 0, + 1263, 1264, 1265, 1384, 1268, 0, 1383, 1093, 343, 1387, + 0, 0, 208, 1170, 81, 238, 1317, 619, 0, 0, + 1392, 1279, 1027, 0, 0, 210, 0, 617, 0, 0, + 879, 0, 879, 81, 0, 0, 343, 981, 982, 983, + 265, 1401, 0, 334, 0, 0, 1344, 0, 208, 0, + 208, 0, 0, 207, 1406, 1408, 81, 0, 0, 0, + 343, 0, 0, 1410, 0, 0, 1170, 0, 51, 1421, + 1259, 0, 0, 0, 0, 0, 1432, 0, 733, 0, + 0, 0, 0, 0, 332, 1309, 0, 0, 0, 447, + 0, 449, 0, 343, 1131, 0, 0, 0, 0, 0, + 0, 0, 821, 754, 755, 1173, 1175, 0, 538, 537, + 547, 548, 540, 541, 542, 543, 544, 545, 546, 539, + 0, 0, 549, 0, 0, 0, 0, 0, 0, 1175, + 0, 0, 0, 0, 1351, 1352, 1353, 1354, 0, 0, + 0, 1358, 1359, 0, 343, 0, 343, 1202, 0, 0, + 0, 0, 0, 1365, 1366, 1367, 574, 0, 0, 807, + 808, 0, 0, 0, 0, 1419, 879, 0, 0, 0, + 0, 0, 0, 0, 208, 0, 0, 208, 0, 0, + 0, 0, 0, 208, 0, 1388, 0, 0, 0, 208, + 0, 0, 1393, 0, 1258, 0, 1298, 1226, 0, 0, + 1231, 1232, 0, 0, 0, 0, 0, 221, 343, 0, + 1398, 0, 0, 0, 0, 456, 0, 873, 462, 0, + 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, + 471, 234, 538, 537, 547, 548, 540, 541, 542, 543, + 544, 545, 546, 539, 0, 0, 549, 0, 0, 0, + 1135, 1136, 0, 0, 0, 1433, 1434, 0, 0, 821, + 0, 0, 0, 1152, 1153, 0, 1154, 1155, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1162, 1163, + 343, 0, 213, 0, 0, 0, 0, 0, 1285, 216, + 0, 1253, 0, 0, 0, 0, 0, 225, 220, 0, + 0, 0, 0, 343, 208, 208, 208, 0, 0, 0, + 343, 0, 0, 1298, 879, 0, 0, 0, 964, 965, + 0, 512, 0, 0, 0, 0, 0, 0, 0, 223, + 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, + 1209, 0, 0, 0, 0, 611, 0, 620, 1318, 1319, + 0, 1320, 0, 0, 0, 0, 1285, 0, 1285, 1285, + 1285, 214, 0, 0, 1202, 538, 537, 547, 548, 540, + 541, 542, 543, 544, 545, 546, 539, 0, 0, 549, + 0, 1285, 0, 991, 0, 0, 0, 0, 227, 217, + 218, 0, 228, 229, 230, 232, 0, 231, 237, 1238, + 1009, 0, 219, 222, 0, 215, 236, 235, 0, 0, + 0, 0, 0, 0, 0, 0, 1375, 0, 0, 0, + 0, 208, 0, 0, 0, 0, 0, 343, 343, 0, + 0, 208, 208, 0, 0, 0, 0, 208, 0, 0, + 208, 0, 821, 208, 0, 1394, 0, 717, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, + 0, 0, 644, 0, 1400, 0, 0, 0, 0, 0, + 0, 0, 700, 701, 0, 0, 0, 0, 707, 0, + 0, 332, 0, 0, 713, 0, 0, 1285, 0, 0, + 1252, 0, 0, 0, 0, 0, 0, 208, 724, 0, + 0, 0, 0, 0, 0, 0, 717, 24, 25, 52, + 27, 28, 0, 0, 0, 1304, 1305, 1306, 1307, 1308, + 0, 0, 0, 1311, 1312, 0, 43, 0, 0, 0, + 0, 29, 48, 49, 0, 0, 0, 0, 753, 0, + 1124, 0, 0, 0, 0, 0, 0, 0, 265, 0, + 0, 38, 0, 265, 265, 54, 0, 265, 265, 265, + 0, 0, 0, 822, 538, 537, 547, 548, 540, 541, + 542, 543, 544, 545, 546, 539, 0, 1251, 549, 0, + 0, 0, 265, 265, 265, 265, 0, 208, 0, 1159, + 0, 0, 0, 0, 0, 208, 855, 0, 0, 208, + 208, 0, 0, 208, 863, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 34, 33, - 36, 0, 50, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 37, 44, 45, 827, 0, 46, 47, - 35, 0, 0, 0, 0, 0, 0, 0, 0, 854, - 0, 0, 0, 39, 40, 0, 41, 42, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 208, 0, 0, 1413, 0, 0, 0, 0, 0, - 0, 265, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 265, 0, 0, 0, 0, 0, 0, 916, - 0, 0, 0, 0, 0, 0, 0, 0, 938, 939, - 0, 942, 943, 711, 0, 944, 0, 0, 0, 0, - 0, 0, 816, 53, 0, 0, 0, 0, 0, 0, - 0, 0, 946, 0, 0, 0, 0, 952, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 208, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 208, 0, 0, 0, 0, 0, 0, 0, 0, 208, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 816, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1115, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 849, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 816, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1209, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1212, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1221, 0, 428, - 417, 0, 388, 431, 366, 380, 439, 381, 382, 410, - 352, 396, 139, 378, 0, 369, 347, 375, 348, 367, - 390, 103, 393, 365, 419, 399, 430, 120, 437, 122, - 404, 0, 160, 131, 0, 0, 392, 421, 394, 415, - 387, 411, 357, 403, 432, 379, 408, 433, 0, 0, - 0, 80, 0, 870, 871, 0, 0, 0, 0, 0, - 96, 0, 406, 427, 377, 407, 409, 346, 405, 0, - 350, 353, 438, 423, 372, 373, 1052, 0, 0, 0, - 0, 0, 0, 391, 395, 412, 385, 0, 0, 0, - 0, 0, 0, 0, 0, 370, 0, 402, 0, 0, - 0, 354, 351, 0, 0, 389, 0, 0, 0, 356, - 0, 371, 413, 0, 345, 109, 416, 422, 386, 211, - 426, 384, 383, 429, 146, 0, 163, 111, 119, 83, - 90, 0, 110, 137, 151, 155, 420, 368, 376, 99, - 374, 153, 141, 176, 401, 142, 152, 123, 168, 147, + 36, 0, 50, 0, 0, 0, 0, 0, 833, 0, + 0, 1193, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 860, 0, 37, 44, 45, 0, 0, 46, 47, + 35, 538, 537, 547, 548, 540, 541, 542, 543, 544, + 545, 546, 539, 39, 40, 549, 41, 42, 0, 0, + 1134, 0, 0, 208, 0, 0, 0, 0, 0, 0, + 0, 0, 208, 208, 1425, 208, 208, 0, 0, 208, + 538, 537, 547, 548, 540, 541, 542, 543, 544, 545, + 546, 539, 666, 0, 549, 0, 208, 1250, 960, 961, + 0, 208, 0, 0, 926, 0, 717, 0, 0, 0, + 0, 0, 0, 948, 949, 0, 952, 953, 265, 0, + 954, 547, 548, 540, 541, 542, 543, 544, 545, 546, + 539, 1257, 0, 549, 0, 0, 0, 956, 0, 0, + 0, 574, 962, 53, 0, 0, 0, 0, 0, 1272, + 0, 0, 1273, 0, 0, 1275, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 265, 986, 0, 0, 0, + 654, 538, 537, 547, 548, 540, 541, 542, 543, 544, + 545, 546, 539, 265, 0, 549, 538, 537, 547, 548, + 540, 541, 542, 543, 544, 545, 546, 539, 0, 0, + 549, 822, 208, 208, 208, 208, 208, 667, 0, 0, + 0, 0, 0, 0, 1041, 0, 0, 208, 0, 0, + 0, 855, 0, 0, 0, 208, 0, 0, 0, 680, + 683, 684, 685, 686, 687, 688, 0, 689, 690, 691, + 692, 693, 668, 669, 670, 671, 652, 653, 681, 0, + 655, 0, 656, 657, 658, 659, 660, 661, 662, 663, + 664, 665, 672, 673, 674, 675, 676, 677, 678, 679, + 533, 0, 536, 0, 0, 0, 0, 0, 550, 551, + 552, 553, 554, 555, 556, 0, 534, 535, 532, 538, + 537, 547, 548, 540, 541, 542, 543, 544, 545, 546, + 539, 0, 0, 549, 538, 537, 547, 548, 540, 541, + 542, 543, 544, 545, 546, 539, 0, 0, 549, 0, + 1386, 574, 0, 0, 0, 682, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 208, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 265, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1127, 717, 0, + 0, 0, 0, 0, 0, 0, 0, 822, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, + 0, 0, 0, 526, 0, 0, 0, 0, 103, 0, + 0, 0, 0, 0, 120, 0, 122, 0, 0, 160, + 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 208, + 528, 0, 0, 0, 0, 0, 0, 96, 0, 0, + 0, 0, 0, 523, 522, 0, 208, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, + 524, 0, 0, 0, 0, 0, 208, 0, 0, 0, + 1221, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1224, 0, 0, + 0, 0, 109, 0, 0, 0, 211, 0, 1233, 0, + 0, 146, 0, 163, 111, 119, 83, 90, 0, 110, + 137, 151, 155, 0, 822, 0, 99, 0, 153, 141, + 176, 0, 142, 152, 123, 168, 147, 175, 183, 184, + 165, 182, 191, 84, 164, 174, 97, 156, 86, 172, + 162, 129, 115, 116, 85, 0, 150, 102, 107, 101, + 138, 169, 170, 100, 194, 91, 181, 88, 92, 180, + 136, 167, 173, 130, 127, 87, 171, 128, 126, 118, + 105, 112, 144, 125, 145, 113, 133, 132, 134, 0, + 0, 0, 161, 178, 195, 94, 0, 157, 166, 185, + 186, 187, 188, 189, 190, 0, 0, 95, 108, 104, + 143, 135, 93, 114, 158, 117, 124, 149, 193, 140, + 154, 98, 177, 159, 0, 0, 855, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 82, 89, 121, 192, 148, 106, 179, + 0, 431, 420, 0, 391, 434, 369, 383, 442, 384, + 385, 413, 355, 399, 139, 381, 0, 372, 350, 378, + 351, 370, 393, 103, 396, 368, 422, 402, 433, 120, + 440, 122, 407, 0, 160, 131, 0, 0, 395, 424, + 397, 418, 390, 414, 360, 406, 435, 382, 411, 436, + 0, 0, 0, 80, 0, 880, 881, 822, 0, 0, + 0, 0, 96, 0, 409, 430, 380, 410, 412, 349, + 408, 208, 353, 356, 441, 426, 375, 376, 1064, 0, + 0, 0, 0, 0, 0, 394, 398, 415, 388, 0, + 0, 0, 0, 0, 0, 0, 0, 373, 0, 405, + 0, 0, 0, 357, 354, 0, 0, 392, 0, 0, + 0, 359, 1396, 374, 416, 0, 348, 109, 419, 425, + 389, 211, 429, 387, 386, 432, 146, 0, 163, 111, + 119, 83, 90, 0, 110, 137, 151, 155, 423, 371, + 379, 99, 377, 153, 141, 176, 404, 142, 152, 123, + 168, 147, 175, 183, 184, 165, 182, 191, 84, 164, + 174, 97, 156, 86, 172, 162, 129, 115, 116, 85, + 0, 150, 102, 107, 101, 138, 169, 170, 100, 194, + 91, 181, 88, 92, 180, 136, 167, 173, 130, 127, + 87, 171, 128, 126, 118, 105, 112, 144, 125, 145, + 113, 133, 132, 134, 0, 352, 0, 161, 178, 195, + 94, 367, 157, 166, 185, 186, 187, 188, 189, 190, + 0, 0, 95, 108, 104, 143, 135, 93, 114, 158, + 117, 124, 149, 193, 140, 154, 98, 177, 159, 363, + 366, 361, 362, 400, 401, 437, 438, 439, 417, 358, + 0, 364, 365, 0, 421, 427, 428, 403, 82, 89, + 121, 192, 148, 106, 179, 431, 420, 0, 391, 434, + 369, 383, 442, 384, 385, 413, 355, 399, 139, 381, + 0, 372, 350, 378, 351, 370, 393, 103, 396, 368, + 422, 402, 433, 120, 440, 122, 407, 0, 160, 131, + 0, 0, 395, 424, 397, 418, 390, 414, 360, 406, + 435, 382, 411, 436, 0, 0, 0, 80, 0, 880, + 881, 0, 0, 0, 0, 0, 96, 0, 409, 430, + 380, 410, 412, 349, 408, 0, 353, 356, 441, 426, + 375, 376, 0, 0, 0, 0, 0, 0, 0, 394, + 398, 415, 388, 0, 0, 0, 0, 0, 0, 0, + 0, 373, 0, 405, 0, 0, 0, 357, 354, 0, + 0, 392, 0, 0, 0, 359, 0, 374, 416, 0, + 348, 109, 419, 425, 389, 211, 429, 387, 386, 432, + 146, 0, 163, 111, 119, 83, 90, 0, 110, 137, + 151, 155, 423, 371, 379, 99, 377, 153, 141, 176, + 404, 142, 152, 123, 168, 147, 175, 183, 184, 165, + 182, 191, 84, 164, 174, 97, 156, 86, 172, 162, + 129, 115, 116, 85, 0, 150, 102, 107, 101, 138, + 169, 170, 100, 194, 91, 181, 88, 92, 180, 136, + 167, 173, 130, 127, 87, 171, 128, 126, 118, 105, + 112, 144, 125, 145, 113, 133, 132, 134, 0, 352, + 0, 161, 178, 195, 94, 367, 157, 166, 185, 186, + 187, 188, 189, 190, 0, 0, 95, 108, 104, 143, + 135, 93, 114, 158, 117, 124, 149, 193, 140, 154, + 98, 177, 159, 363, 366, 361, 362, 400, 401, 437, + 438, 439, 417, 358, 0, 364, 365, 0, 421, 427, + 428, 403, 82, 89, 121, 192, 148, 106, 179, 431, + 420, 0, 391, 434, 369, 383, 442, 384, 385, 413, + 355, 399, 139, 381, 0, 372, 350, 378, 351, 370, + 393, 103, 396, 368, 422, 402, 433, 120, 440, 122, + 407, 0, 160, 131, 0, 0, 395, 424, 397, 418, + 390, 414, 360, 406, 435, 382, 411, 436, 54, 0, + 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 96, 0, 409, 430, 380, 410, 412, 349, 408, 0, + 353, 356, 441, 426, 375, 376, 0, 0, 0, 0, + 0, 0, 0, 394, 398, 415, 388, 0, 0, 0, + 0, 0, 0, 0, 0, 373, 0, 405, 0, 0, + 0, 357, 354, 0, 0, 392, 0, 0, 0, 359, + 0, 374, 416, 0, 348, 109, 419, 425, 389, 211, + 429, 387, 386, 432, 146, 0, 163, 111, 119, 83, + 90, 0, 110, 137, 151, 155, 423, 371, 379, 99, + 377, 153, 141, 176, 404, 142, 152, 123, 168, 147, 175, 183, 184, 165, 182, 191, 84, 164, 174, 97, 156, 86, 172, 162, 129, 115, 116, 85, 0, 150, 102, 107, 101, 138, 169, 170, 100, 194, 91, 181, 88, 92, 180, 136, 167, 173, 130, 127, 87, 171, 128, 126, 118, 105, 112, 144, 125, 145, 113, 133, - 132, 134, 0, 349, 0, 161, 178, 195, 94, 364, + 132, 134, 0, 352, 0, 161, 178, 195, 94, 367, 157, 166, 185, 186, 187, 188, 189, 190, 0, 0, 95, 108, 104, 143, 135, 93, 114, 158, 117, 124, - 149, 193, 140, 154, 98, 177, 159, 360, 363, 358, - 359, 397, 398, 434, 435, 436, 414, 355, 0, 361, - 362, 1384, 418, 424, 425, 400, 82, 89, 121, 192, - 148, 106, 179, 428, 417, 0, 388, 431, 366, 380, - 439, 381, 382, 410, 352, 396, 139, 378, 0, 369, - 347, 375, 348, 367, 390, 103, 393, 365, 419, 399, - 430, 120, 437, 122, 404, 0, 160, 131, 0, 0, - 392, 421, 394, 415, 387, 411, 357, 403, 432, 379, - 408, 433, 0, 0, 0, 80, 0, 870, 871, 0, - 0, 0, 0, 0, 96, 0, 406, 427, 377, 407, - 409, 346, 405, 0, 350, 353, 438, 423, 372, 373, - 0, 0, 0, 0, 0, 0, 0, 391, 395, 412, - 385, 0, 0, 0, 0, 0, 0, 0, 0, 370, - 0, 402, 0, 0, 0, 354, 351, 0, 0, 389, - 0, 0, 0, 356, 0, 371, 413, 0, 345, 109, - 416, 422, 386, 211, 426, 384, 383, 429, 146, 0, + 149, 193, 140, 154, 98, 177, 159, 363, 366, 361, + 362, 400, 401, 437, 438, 439, 417, 358, 0, 364, + 365, 0, 421, 427, 428, 403, 82, 89, 121, 192, + 148, 106, 179, 431, 420, 0, 391, 434, 369, 383, + 442, 384, 385, 413, 355, 399, 139, 381, 0, 372, + 350, 378, 351, 370, 393, 103, 396, 368, 422, 402, + 433, 120, 440, 122, 407, 0, 160, 131, 0, 0, + 395, 424, 397, 418, 390, 414, 360, 406, 435, 382, + 411, 436, 0, 0, 0, 80, 0, 0, 0, 0, + 0, 0, 0, 0, 96, 0, 409, 430, 380, 410, + 412, 349, 408, 0, 353, 356, 441, 426, 375, 376, + 0, 0, 0, 0, 0, 0, 0, 394, 398, 415, + 388, 0, 0, 0, 0, 0, 0, 1130, 0, 373, + 0, 405, 0, 0, 0, 357, 354, 0, 0, 392, + 0, 0, 0, 359, 0, 374, 416, 0, 348, 109, + 419, 425, 389, 211, 429, 387, 386, 432, 146, 0, 163, 111, 119, 83, 90, 0, 110, 137, 151, 155, - 420, 368, 376, 99, 374, 153, 141, 176, 401, 142, + 423, 371, 379, 99, 377, 153, 141, 176, 404, 142, 152, 123, 168, 147, 175, 183, 184, 165, 182, 191, 84, 164, 174, 97, 156, 86, 172, 162, 129, 115, 116, 85, 0, 150, 102, 107, 101, 138, 169, 170, 100, 194, 91, 181, 88, 92, 180, 136, 167, 173, 130, 127, 87, 171, 128, 126, 118, 105, 112, 144, - 125, 145, 113, 133, 132, 134, 0, 349, 0, 161, - 178, 195, 94, 364, 157, 166, 185, 186, 187, 188, + 125, 145, 113, 133, 132, 134, 0, 352, 0, 161, + 178, 195, 94, 367, 157, 166, 185, 186, 187, 188, 189, 190, 0, 0, 95, 108, 104, 143, 135, 93, 114, 158, 117, 124, 149, 193, 140, 154, 98, 177, - 159, 360, 363, 358, 359, 397, 398, 434, 435, 436, - 414, 355, 0, 361, 362, 0, 418, 424, 425, 400, - 82, 89, 121, 192, 148, 106, 179, 428, 417, 0, - 388, 431, 366, 380, 439, 381, 382, 410, 352, 396, - 139, 378, 0, 369, 347, 375, 348, 367, 390, 103, - 393, 365, 419, 399, 430, 120, 437, 122, 404, 0, - 160, 131, 0, 0, 392, 421, 394, 415, 387, 411, - 357, 403, 432, 379, 408, 433, 54, 0, 0, 80, + 159, 363, 366, 361, 362, 400, 401, 437, 438, 439, + 417, 358, 0, 364, 365, 0, 421, 427, 428, 403, + 82, 89, 121, 192, 148, 106, 179, 431, 420, 0, + 391, 434, 369, 383, 442, 384, 385, 413, 355, 399, + 139, 381, 0, 372, 350, 378, 351, 370, 393, 103, + 396, 368, 422, 402, 433, 120, 440, 122, 407, 0, + 160, 131, 0, 0, 395, 424, 397, 418, 390, 414, + 360, 406, 435, 382, 411, 436, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, - 406, 427, 377, 407, 409, 346, 405, 0, 350, 353, - 438, 423, 372, 373, 0, 0, 0, 0, 0, 0, - 0, 391, 395, 412, 385, 0, 0, 0, 0, 0, - 0, 0, 0, 370, 0, 402, 0, 0, 0, 354, - 351, 0, 0, 389, 0, 0, 0, 356, 0, 371, - 413, 0, 345, 109, 416, 422, 386, 211, 426, 384, - 383, 429, 146, 0, 163, 111, 119, 83, 90, 0, - 110, 137, 151, 155, 420, 368, 376, 99, 374, 153, - 141, 176, 401, 142, 152, 123, 168, 147, 175, 183, + 409, 430, 380, 410, 412, 349, 408, 0, 353, 356, + 441, 426, 375, 376, 0, 0, 0, 0, 0, 0, + 0, 394, 398, 415, 388, 0, 0, 0, 0, 0, + 0, 864, 0, 373, 0, 405, 0, 0, 0, 357, + 354, 0, 0, 392, 0, 0, 0, 359, 0, 374, + 416, 0, 348, 109, 419, 425, 389, 211, 429, 387, + 386, 432, 146, 0, 163, 111, 119, 83, 90, 0, + 110, 137, 151, 155, 423, 371, 379, 99, 377, 153, + 141, 176, 404, 142, 152, 123, 168, 147, 175, 183, 184, 165, 182, 191, 84, 164, 174, 97, 156, 86, 172, 162, 129, 115, 116, 85, 0, 150, 102, 107, 101, 138, 169, 170, 100, 194, 91, 181, 88, 92, 180, 136, 167, 173, 130, 127, 87, 171, 128, 126, 118, 105, 112, 144, 125, 145, 113, 133, 132, 134, - 0, 349, 0, 161, 178, 195, 94, 364, 157, 166, + 0, 352, 0, 161, 178, 195, 94, 367, 157, 166, 185, 186, 187, 188, 189, 190, 0, 0, 95, 108, 104, 143, 135, 93, 114, 158, 117, 124, 149, 193, - 140, 154, 98, 177, 159, 360, 363, 358, 359, 397, - 398, 434, 435, 436, 414, 355, 0, 361, 362, 0, - 418, 424, 425, 400, 82, 89, 121, 192, 148, 106, - 179, 428, 417, 0, 388, 431, 366, 380, 439, 381, - 382, 410, 352, 396, 139, 378, 0, 369, 347, 375, - 348, 367, 390, 103, 393, 365, 419, 399, 430, 120, - 437, 122, 404, 0, 160, 131, 0, 0, 392, 421, - 394, 415, 387, 411, 357, 403, 432, 379, 408, 433, - 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, - 0, 0, 96, 0, 406, 427, 377, 407, 409, 346, - 405, 0, 350, 353, 438, 423, 372, 373, 0, 0, - 0, 0, 0, 0, 0, 391, 395, 412, 385, 0, - 0, 0, 0, 0, 0, 1118, 0, 370, 0, 402, - 0, 0, 0, 354, 351, 0, 0, 389, 0, 0, - 0, 356, 0, 371, 413, 0, 345, 109, 416, 422, - 386, 211, 426, 384, 383, 429, 146, 0, 163, 111, - 119, 83, 90, 0, 110, 137, 151, 155, 420, 368, - 376, 99, 374, 153, 141, 176, 401, 142, 152, 123, + 140, 154, 98, 177, 159, 363, 366, 361, 362, 400, + 401, 437, 438, 439, 417, 358, 0, 364, 365, 0, + 421, 427, 428, 403, 82, 89, 121, 192, 148, 106, + 179, 431, 420, 0, 391, 434, 369, 383, 442, 384, + 385, 413, 355, 399, 139, 381, 0, 372, 350, 378, + 351, 370, 393, 103, 396, 368, 422, 402, 433, 120, + 440, 122, 407, 0, 160, 131, 0, 0, 395, 424, + 397, 418, 390, 414, 360, 406, 435, 382, 411, 436, + 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 0, 409, 430, 380, 410, 412, 349, + 408, 0, 353, 356, 441, 426, 375, 376, 0, 0, + 0, 0, 0, 0, 0, 394, 398, 415, 388, 0, + 0, 0, 0, 0, 0, 762, 0, 373, 0, 405, + 0, 0, 0, 357, 354, 0, 0, 392, 0, 0, + 0, 359, 0, 374, 416, 0, 348, 109, 419, 425, + 389, 211, 429, 387, 386, 432, 146, 0, 163, 111, + 119, 83, 90, 0, 110, 137, 151, 155, 423, 371, + 379, 99, 377, 153, 141, 176, 404, 142, 152, 123, 168, 147, 175, 183, 184, 165, 182, 191, 84, 164, 174, 97, 156, 86, 172, 162, 129, 115, 116, 85, 0, 150, 102, 107, 101, 138, 169, 170, 100, 194, 91, 181, 88, 92, 180, 136, 167, 173, 130, 127, 87, 171, 128, 126, 118, 105, 112, 144, 125, 145, - 113, 133, 132, 134, 0, 349, 0, 161, 178, 195, - 94, 364, 157, 166, 185, 186, 187, 188, 189, 190, + 113, 133, 132, 134, 0, 352, 0, 161, 178, 195, + 94, 367, 157, 166, 185, 186, 187, 188, 189, 190, 0, 0, 95, 108, 104, 143, 135, 93, 114, 158, - 117, 124, 149, 193, 140, 154, 98, 177, 159, 360, - 363, 358, 359, 397, 398, 434, 435, 436, 414, 355, - 0, 361, 362, 0, 418, 424, 425, 400, 82, 89, - 121, 192, 148, 106, 179, 428, 417, 0, 388, 431, - 366, 380, 439, 381, 382, 410, 352, 396, 139, 378, - 0, 369, 347, 375, 348, 367, 390, 103, 393, 365, - 419, 399, 430, 120, 437, 122, 404, 0, 160, 131, - 0, 0, 392, 421, 394, 415, 387, 411, 357, 403, - 432, 379, 408, 433, 0, 0, 0, 270, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 0, 406, 427, - 377, 407, 409, 346, 405, 0, 350, 353, 438, 423, - 372, 373, 0, 0, 0, 0, 0, 0, 0, 391, - 395, 412, 385, 0, 0, 0, 0, 0, 0, 756, - 0, 370, 0, 402, 0, 0, 0, 354, 351, 0, - 0, 389, 0, 0, 0, 356, 0, 371, 413, 0, - 345, 109, 416, 422, 386, 211, 426, 384, 383, 429, + 117, 124, 149, 193, 140, 154, 98, 177, 159, 363, + 366, 361, 362, 400, 401, 437, 438, 439, 417, 358, + 0, 364, 365, 0, 421, 427, 428, 403, 82, 89, + 121, 192, 148, 106, 179, 431, 420, 0, 391, 434, + 369, 383, 442, 384, 385, 413, 355, 399, 139, 381, + 0, 372, 350, 378, 351, 370, 393, 103, 396, 368, + 422, 402, 433, 120, 440, 122, 407, 0, 160, 131, + 0, 0, 395, 424, 397, 418, 390, 414, 360, 406, + 435, 382, 411, 436, 0, 0, 0, 80, 0, 0, + 0, 0, 0, 0, 0, 0, 96, 0, 409, 430, + 380, 410, 412, 349, 408, 0, 353, 356, 441, 426, + 375, 376, 0, 0, 0, 0, 0, 0, 0, 394, + 398, 415, 388, 0, 0, 0, 0, 0, 0, 0, + 0, 373, 0, 405, 0, 0, 0, 357, 354, 0, + 0, 392, 0, 0, 0, 359, 0, 374, 416, 0, + 348, 109, 419, 425, 389, 211, 429, 387, 386, 432, 146, 0, 163, 111, 119, 83, 90, 0, 110, 137, - 151, 155, 420, 368, 376, 99, 374, 153, 141, 176, - 401, 142, 152, 123, 168, 147, 175, 183, 184, 165, + 151, 155, 423, 371, 379, 99, 377, 153, 141, 176, + 404, 142, 152, 123, 168, 147, 175, 183, 184, 165, 182, 191, 84, 164, 174, 97, 156, 86, 172, 162, 129, 115, 116, 85, 0, 150, 102, 107, 101, 138, 169, 170, 100, 194, 91, 181, 88, 92, 180, 136, 167, 173, 130, 127, 87, 171, 128, 126, 118, 105, - 112, 144, 125, 145, 113, 133, 132, 134, 0, 349, - 0, 161, 178, 195, 94, 364, 157, 166, 185, 186, + 112, 144, 125, 145, 113, 133, 132, 134, 0, 352, + 0, 161, 178, 195, 94, 367, 157, 166, 185, 186, 187, 188, 189, 190, 0, 0, 95, 108, 104, 143, 135, 93, 114, 158, 117, 124, 149, 193, 140, 154, - 98, 177, 159, 360, 363, 358, 359, 397, 398, 434, - 435, 436, 414, 355, 0, 361, 362, 0, 418, 424, - 425, 400, 82, 89, 121, 192, 148, 106, 179, 428, - 417, 0, 388, 431, 366, 380, 439, 381, 382, 410, - 352, 396, 139, 378, 0, 369, 347, 375, 348, 367, - 390, 103, 393, 365, 419, 399, 430, 120, 437, 122, - 404, 0, 160, 131, 0, 0, 392, 421, 394, 415, - 387, 411, 357, 403, 432, 379, 408, 433, 0, 0, - 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 0, 406, 427, 377, 407, 409, 346, 405, 0, - 350, 353, 438, 423, 372, 373, 0, 0, 0, 0, - 0, 0, 0, 391, 395, 412, 385, 0, 0, 0, - 0, 0, 0, 0, 0, 370, 0, 402, 0, 0, - 0, 354, 351, 0, 0, 389, 0, 0, 0, 356, - 0, 371, 413, 0, 345, 109, 416, 422, 386, 211, - 426, 384, 383, 429, 146, 0, 163, 111, 119, 83, - 90, 0, 110, 137, 151, 155, 420, 368, 376, 99, - 374, 153, 141, 176, 401, 142, 152, 123, 168, 147, + 98, 177, 159, 363, 366, 361, 362, 400, 401, 437, + 438, 439, 417, 358, 0, 364, 365, 0, 421, 427, + 428, 403, 82, 89, 121, 192, 148, 106, 179, 431, + 420, 0, 391, 434, 369, 383, 442, 384, 385, 413, + 355, 399, 139, 381, 0, 372, 350, 378, 351, 370, + 393, 103, 396, 368, 422, 402, 433, 120, 440, 122, + 407, 0, 160, 131, 0, 0, 395, 424, 397, 418, + 390, 414, 360, 406, 435, 382, 411, 436, 0, 0, + 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, + 96, 0, 409, 430, 380, 410, 412, 349, 408, 0, + 353, 356, 441, 426, 375, 376, 0, 0, 0, 0, + 0, 0, 0, 394, 398, 415, 388, 0, 0, 0, + 0, 0, 0, 0, 0, 373, 0, 405, 0, 0, + 0, 357, 354, 0, 0, 392, 0, 0, 0, 359, + 0, 374, 416, 0, 348, 109, 419, 425, 389, 211, + 429, 387, 386, 432, 146, 0, 163, 111, 119, 83, + 90, 0, 110, 137, 151, 155, 423, 371, 379, 99, + 377, 153, 141, 176, 404, 142, 152, 123, 168, 147, 175, 183, 184, 165, 182, 191, 84, 164, 174, 97, 156, 86, 172, 162, 129, 115, 116, 85, 0, 150, 102, 107, 101, 138, 169, 170, 100, 194, 91, 181, 88, 92, 180, 136, 167, 173, 130, 127, 87, 171, 128, 126, 118, 105, 112, 144, 125, 145, 113, 133, - 132, 134, 0, 349, 0, 161, 178, 195, 94, 364, + 132, 134, 0, 352, 0, 161, 178, 195, 94, 367, 157, 166, 185, 186, 187, 188, 189, 190, 0, 0, 95, 108, 104, 143, 135, 93, 114, 158, 117, 124, - 149, 193, 140, 154, 98, 177, 159, 360, 363, 358, - 359, 397, 398, 434, 435, 436, 414, 355, 0, 361, - 362, 0, 418, 424, 425, 400, 82, 89, 121, 192, - 148, 106, 179, 428, 417, 0, 388, 431, 366, 380, - 439, 381, 382, 410, 352, 396, 139, 378, 0, 369, - 347, 375, 348, 367, 390, 103, 393, 365, 419, 399, - 430, 120, 437, 122, 404, 0, 160, 131, 0, 0, - 392, 421, 394, 415, 387, 411, 357, 403, 432, 379, - 408, 433, 0, 0, 0, 270, 0, 0, 0, 0, - 0, 0, 0, 0, 96, 0, 406, 427, 377, 407, - 409, 346, 405, 0, 350, 353, 438, 423, 372, 373, - 0, 0, 0, 0, 0, 0, 0, 391, 395, 412, - 385, 0, 0, 0, 0, 0, 0, 0, 0, 370, - 0, 402, 0, 0, 0, 354, 351, 0, 0, 389, - 0, 0, 0, 356, 0, 371, 413, 0, 345, 109, - 416, 422, 386, 211, 426, 384, 383, 429, 146, 0, + 149, 193, 140, 154, 98, 177, 159, 363, 366, 361, + 362, 400, 401, 437, 438, 439, 417, 358, 0, 364, + 365, 0, 421, 427, 428, 403, 82, 89, 121, 192, + 148, 106, 179, 431, 420, 0, 391, 434, 369, 383, + 442, 384, 385, 413, 355, 399, 139, 381, 0, 372, + 350, 378, 351, 370, 393, 103, 396, 368, 422, 402, + 433, 120, 440, 122, 407, 0, 160, 131, 0, 0, + 395, 424, 397, 418, 390, 414, 360, 406, 435, 382, + 411, 436, 0, 0, 0, 80, 0, 0, 0, 0, + 0, 0, 0, 0, 96, 0, 409, 430, 380, 410, + 412, 349, 408, 0, 353, 356, 441, 426, 375, 376, + 0, 0, 0, 0, 0, 0, 0, 394, 398, 415, + 388, 0, 0, 0, 0, 0, 0, 0, 0, 373, + 0, 405, 0, 0, 0, 357, 354, 0, 0, 392, + 0, 0, 0, 359, 0, 374, 416, 0, 348, 109, + 419, 425, 389, 211, 429, 387, 386, 432, 146, 0, 163, 111, 119, 83, 90, 0, 110, 137, 151, 155, - 420, 368, 376, 99, 374, 153, 141, 176, 401, 142, + 423, 371, 379, 99, 377, 153, 141, 176, 404, 142, 152, 123, 168, 147, 175, 183, 184, 165, 182, 191, 84, 164, 174, 97, 156, 86, 172, 162, 129, 115, 116, 85, 0, 150, 102, 107, 101, 138, 169, 170, - 100, 194, 91, 181, 88, 92, 180, 136, 167, 173, + 100, 194, 91, 181, 88, 346, 180, 136, 167, 173, 130, 127, 87, 171, 128, 126, 118, 105, 112, 144, - 125, 145, 113, 133, 132, 134, 0, 349, 0, 161, - 178, 195, 94, 364, 157, 166, 185, 186, 187, 188, - 189, 190, 0, 0, 95, 108, 104, 143, 135, 93, + 125, 145, 113, 133, 132, 134, 0, 352, 0, 161, + 178, 195, 94, 367, 157, 166, 185, 186, 187, 188, + 189, 190, 0, 0, 95, 108, 104, 143, 347, 345, 114, 158, 117, 124, 149, 193, 140, 154, 98, 177, - 159, 360, 363, 358, 359, 397, 398, 434, 435, 436, - 414, 355, 0, 361, 362, 0, 418, 424, 425, 400, - 82, 89, 121, 192, 148, 106, 179, 428, 417, 0, - 388, 431, 366, 380, 439, 381, 382, 410, 352, 396, - 139, 378, 0, 369, 347, 375, 348, 367, 390, 103, - 393, 365, 419, 399, 430, 120, 437, 122, 404, 0, - 160, 131, 0, 0, 392, 421, 394, 415, 387, 411, - 357, 403, 432, 379, 408, 433, 0, 0, 0, 80, + 159, 363, 366, 361, 362, 400, 401, 437, 438, 439, + 417, 358, 0, 364, 365, 0, 421, 427, 428, 403, + 82, 89, 121, 192, 148, 106, 179, 431, 420, 0, + 391, 434, 369, 383, 442, 384, 385, 413, 355, 399, + 139, 381, 0, 372, 350, 378, 351, 370, 393, 103, + 396, 368, 422, 402, 433, 120, 440, 122, 407, 0, + 160, 131, 0, 0, 395, 424, 397, 418, 390, 414, + 360, 406, 435, 382, 411, 436, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, - 406, 427, 377, 407, 409, 346, 405, 0, 350, 353, - 438, 423, 372, 373, 0, 0, 0, 0, 0, 0, - 0, 391, 395, 412, 385, 0, 0, 0, 0, 0, - 0, 0, 0, 370, 0, 402, 0, 0, 0, 354, - 351, 0, 0, 389, 0, 0, 0, 356, 0, 371, - 413, 0, 345, 109, 416, 422, 386, 211, 426, 384, - 383, 429, 146, 0, 163, 111, 119, 83, 90, 0, - 110, 137, 151, 155, 420, 368, 376, 99, 374, 153, - 141, 176, 401, 142, 152, 123, 168, 147, 175, 183, + 409, 430, 380, 410, 412, 349, 408, 0, 353, 356, + 441, 426, 375, 376, 0, 0, 0, 0, 0, 0, + 0, 394, 398, 415, 388, 0, 0, 0, 0, 0, + 0, 0, 0, 373, 0, 405, 0, 0, 0, 357, + 354, 0, 0, 392, 0, 0, 0, 359, 0, 374, + 416, 0, 348, 109, 419, 425, 389, 211, 429, 387, + 386, 432, 146, 0, 163, 111, 119, 83, 90, 0, + 110, 137, 151, 155, 423, 371, 379, 99, 377, 153, + 141, 176, 404, 142, 152, 123, 168, 147, 175, 183, 184, 165, 182, 191, 84, 164, 174, 97, 156, 86, 172, 162, 129, 115, 116, 85, 0, 150, 102, 107, - 101, 138, 169, 170, 100, 194, 91, 181, 88, 343, + 101, 138, 169, 170, 100, 194, 91, 181, 88, 92, 180, 136, 167, 173, 130, 127, 87, 171, 128, 126, 118, 105, 112, 144, 125, 145, 113, 133, 132, 134, - 0, 349, 0, 161, 178, 195, 94, 364, 157, 166, + 0, 352, 0, 161, 178, 195, 94, 367, 157, 166, 185, 186, 187, 188, 189, 190, 0, 0, 95, 108, - 104, 143, 344, 342, 114, 158, 117, 124, 149, 193, - 140, 154, 98, 177, 159, 360, 363, 358, 359, 397, - 398, 434, 435, 436, 414, 355, 0, 361, 362, 0, - 418, 424, 425, 400, 82, 89, 121, 192, 148, 106, - 179, 428, 417, 0, 388, 431, 366, 380, 439, 381, - 382, 410, 352, 396, 139, 378, 0, 369, 347, 375, - 348, 367, 390, 103, 393, 365, 419, 399, 430, 120, - 437, 122, 404, 0, 160, 131, 0, 0, 392, 421, - 394, 415, 387, 411, 357, 403, 432, 379, 408, 433, - 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, - 0, 0, 96, 0, 406, 427, 377, 407, 409, 346, - 405, 0, 350, 353, 438, 423, 372, 373, 0, 0, - 0, 0, 0, 0, 0, 391, 395, 412, 385, 0, - 0, 0, 0, 0, 0, 0, 0, 370, 0, 402, - 0, 0, 0, 354, 351, 0, 0, 389, 0, 0, - 0, 356, 0, 371, 413, 0, 345, 109, 416, 422, - 386, 211, 426, 384, 383, 429, 146, 0, 163, 111, - 119, 83, 90, 0, 110, 137, 151, 155, 420, 368, - 376, 99, 374, 153, 141, 176, 401, 142, 152, 123, + 104, 143, 135, 93, 114, 158, 117, 124, 149, 193, + 140, 154, 98, 177, 159, 363, 366, 361, 362, 400, + 401, 437, 438, 439, 417, 358, 0, 364, 365, 0, + 421, 427, 428, 403, 82, 89, 121, 192, 148, 106, + 179, 431, 420, 0, 391, 434, 369, 383, 442, 384, + 385, 413, 355, 399, 139, 381, 0, 372, 350, 378, + 351, 370, 393, 103, 396, 368, 422, 402, 433, 120, + 440, 122, 407, 0, 160, 131, 0, 0, 395, 424, + 397, 418, 390, 414, 360, 406, 435, 382, 411, 436, + 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 0, 409, 430, 380, 410, 412, 349, + 408, 0, 353, 356, 441, 426, 375, 376, 0, 0, + 0, 0, 0, 0, 0, 394, 398, 415, 388, 0, + 0, 0, 0, 0, 0, 0, 0, 373, 0, 405, + 0, 0, 0, 357, 354, 0, 0, 392, 0, 0, + 0, 359, 0, 374, 416, 0, 348, 109, 419, 425, + 389, 211, 429, 387, 386, 432, 146, 0, 163, 111, + 119, 83, 90, 0, 110, 137, 151, 155, 423, 371, + 379, 99, 377, 153, 141, 176, 404, 142, 152, 123, 168, 147, 175, 183, 184, 165, 182, 191, 84, 164, - 174, 97, 156, 86, 172, 162, 129, 115, 116, 85, + 631, 97, 156, 86, 172, 162, 129, 115, 116, 85, 0, 150, 102, 107, 101, 138, 169, 170, 100, 194, - 91, 181, 88, 92, 180, 136, 167, 173, 130, 127, + 91, 181, 88, 346, 180, 136, 167, 173, 130, 127, 87, 171, 128, 126, 118, 105, 112, 144, 125, 145, - 113, 133, 132, 134, 0, 349, 0, 161, 178, 195, - 94, 364, 157, 166, 185, 186, 187, 188, 189, 190, - 0, 0, 95, 108, 104, 143, 135, 93, 114, 158, - 117, 124, 149, 193, 140, 154, 98, 177, 159, 360, - 363, 358, 359, 397, 398, 434, 435, 436, 414, 355, - 0, 361, 362, 0, 418, 424, 425, 400, 82, 89, - 121, 192, 148, 106, 179, 428, 417, 0, 388, 431, - 366, 380, 439, 381, 382, 410, 352, 396, 139, 378, - 0, 369, 347, 375, 348, 367, 390, 103, 393, 365, - 419, 399, 430, 120, 437, 122, 404, 0, 160, 131, - 0, 0, 392, 421, 394, 415, 387, 411, 357, 403, - 432, 379, 408, 433, 0, 0, 0, 80, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 0, 406, 427, - 377, 407, 409, 346, 405, 0, 350, 353, 438, 423, - 372, 373, 0, 0, 0, 0, 0, 0, 0, 391, - 395, 412, 385, 0, 0, 0, 0, 0, 0, 0, - 0, 370, 0, 402, 0, 0, 0, 354, 351, 0, - 0, 389, 0, 0, 0, 356, 0, 371, 413, 0, - 345, 109, 416, 422, 386, 211, 426, 384, 383, 429, + 113, 133, 132, 134, 0, 352, 0, 161, 178, 195, + 94, 367, 157, 166, 185, 186, 187, 188, 189, 190, + 0, 0, 95, 108, 104, 143, 347, 345, 114, 158, + 117, 124, 149, 193, 140, 154, 98, 177, 159, 363, + 366, 361, 362, 400, 401, 437, 438, 439, 417, 358, + 0, 364, 365, 0, 421, 427, 428, 403, 82, 89, + 121, 192, 148, 106, 179, 431, 420, 0, 391, 434, + 369, 383, 442, 384, 385, 413, 355, 399, 139, 381, + 0, 372, 350, 378, 351, 370, 393, 103, 396, 368, + 422, 402, 433, 120, 440, 122, 407, 0, 160, 131, + 0, 0, 395, 424, 397, 418, 390, 414, 360, 406, + 435, 382, 411, 436, 0, 0, 0, 80, 0, 0, + 0, 0, 0, 0, 0, 0, 96, 0, 409, 430, + 380, 410, 412, 349, 408, 0, 353, 356, 441, 426, + 375, 376, 0, 0, 0, 0, 0, 0, 0, 394, + 398, 415, 388, 0, 0, 0, 0, 0, 0, 0, + 0, 373, 0, 405, 0, 0, 0, 357, 354, 0, + 0, 392, 0, 0, 0, 359, 0, 374, 416, 0, + 348, 109, 419, 425, 389, 211, 429, 387, 386, 432, 146, 0, 163, 111, 119, 83, 90, 0, 110, 137, - 151, 155, 420, 368, 376, 99, 374, 153, 141, 176, - 401, 142, 152, 123, 168, 147, 175, 183, 184, 165, - 182, 191, 84, 164, 625, 97, 156, 86, 172, 162, + 151, 155, 423, 371, 379, 99, 377, 153, 141, 176, + 404, 142, 152, 123, 168, 147, 175, 183, 184, 165, + 182, 191, 84, 164, 337, 97, 156, 86, 172, 162, 129, 115, 116, 85, 0, 150, 102, 107, 101, 138, - 169, 170, 100, 194, 91, 181, 88, 343, 180, 136, + 169, 170, 100, 194, 91, 181, 88, 346, 180, 136, 167, 173, 130, 127, 87, 171, 128, 126, 118, 105, - 112, 144, 125, 145, 113, 133, 132, 134, 0, 349, - 0, 161, 178, 195, 94, 364, 157, 166, 185, 186, + 112, 144, 125, 145, 113, 133, 132, 134, 0, 352, + 0, 161, 178, 195, 94, 367, 157, 166, 185, 186, 187, 188, 189, 190, 0, 0, 95, 108, 104, 143, - 344, 342, 114, 158, 117, 124, 149, 193, 140, 154, - 98, 177, 159, 360, 363, 358, 359, 397, 398, 434, - 435, 436, 414, 355, 0, 361, 362, 0, 418, 424, - 425, 400, 82, 89, 121, 192, 148, 106, 179, 428, - 417, 0, 388, 431, 366, 380, 439, 381, 382, 410, - 352, 396, 139, 378, 0, 369, 347, 375, 348, 367, - 390, 103, 393, 365, 419, 399, 430, 120, 437, 122, - 404, 0, 160, 131, 0, 0, 392, 421, 394, 415, - 387, 411, 357, 403, 432, 379, 408, 433, 0, 0, - 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 0, 406, 427, 377, 407, 409, 346, 405, 0, - 350, 353, 438, 423, 372, 373, 0, 0, 0, 0, - 0, 0, 0, 391, 395, 412, 385, 0, 0, 0, - 0, 0, 0, 0, 0, 370, 0, 402, 0, 0, - 0, 354, 351, 0, 0, 389, 0, 0, 0, 356, - 0, 371, 413, 0, 345, 109, 416, 422, 386, 211, - 426, 384, 383, 429, 146, 0, 163, 111, 119, 83, - 90, 0, 110, 137, 151, 155, 420, 368, 376, 99, - 374, 153, 141, 176, 401, 142, 152, 123, 168, 147, - 175, 183, 184, 165, 182, 191, 84, 164, 334, 97, + 347, 345, 340, 339, 117, 124, 149, 193, 140, 154, + 98, 177, 159, 363, 366, 361, 362, 400, 401, 437, + 438, 439, 417, 358, 0, 364, 365, 0, 421, 427, + 428, 403, 82, 89, 121, 192, 148, 106, 179, 139, + 0, 0, 0, 0, 272, 0, 0, 0, 103, 0, + 269, 0, 0, 0, 120, 312, 122, 0, 0, 160, + 131, 0, 0, 0, 0, 303, 304, 0, 0, 0, + 0, 0, 0, 871, 0, 54, 0, 0, 270, 291, + 290, 293, 294, 295, 296, 0, 0, 96, 292, 297, + 298, 299, 872, 0, 0, 267, 284, 0, 311, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 281, 282, + 0, 0, 0, 0, 325, 0, 283, 0, 0, 278, + 279, 280, 285, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 109, 0, 0, 0, 211, 0, 0, 323, + 0, 146, 0, 163, 111, 119, 83, 90, 0, 110, + 137, 151, 155, 0, 0, 0, 99, 0, 153, 141, + 176, 0, 142, 152, 123, 168, 147, 175, 183, 184, + 165, 182, 191, 84, 164, 174, 97, 156, 86, 172, + 162, 129, 115, 116, 85, 0, 150, 102, 107, 101, + 138, 169, 170, 100, 194, 91, 181, 88, 92, 180, + 136, 167, 173, 130, 127, 87, 171, 128, 126, 118, + 105, 112, 144, 125, 145, 113, 133, 132, 134, 0, + 0, 0, 161, 178, 195, 94, 0, 157, 166, 185, + 186, 187, 188, 189, 190, 0, 0, 95, 108, 104, + 143, 135, 93, 114, 158, 117, 124, 149, 193, 140, + 154, 98, 177, 159, 313, 324, 319, 320, 317, 318, + 316, 315, 314, 326, 305, 306, 307, 308, 310, 0, + 321, 322, 309, 82, 89, 121, 192, 148, 106, 179, + 139, 0, 0, 798, 0, 272, 0, 0, 0, 103, + 0, 269, 0, 0, 0, 120, 312, 122, 0, 0, + 160, 131, 0, 0, 0, 0, 303, 304, 0, 0, + 0, 0, 0, 0, 0, 0, 54, 0, 0, 270, + 291, 290, 293, 294, 295, 296, 0, 0, 96, 292, + 297, 298, 299, 0, 0, 0, 267, 284, 0, 311, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, + 282, 263, 0, 0, 0, 325, 0, 283, 0, 0, + 278, 279, 280, 285, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 109, 0, 0, 0, 211, 0, 0, + 323, 0, 146, 0, 163, 111, 119, 83, 90, 0, + 110, 137, 151, 155, 0, 0, 0, 99, 0, 153, + 141, 176, 0, 142, 152, 123, 168, 147, 175, 183, + 184, 165, 182, 191, 84, 164, 174, 97, 156, 86, + 172, 162, 129, 115, 116, 85, 0, 150, 102, 107, + 101, 138, 169, 170, 100, 194, 91, 181, 88, 92, + 180, 136, 167, 173, 130, 127, 87, 171, 128, 126, + 118, 105, 112, 144, 125, 145, 113, 133, 132, 134, + 0, 0, 0, 161, 178, 195, 94, 0, 157, 166, + 185, 186, 187, 188, 189, 190, 0, 0, 95, 108, + 104, 143, 135, 93, 114, 158, 117, 124, 149, 193, + 140, 154, 98, 177, 159, 313, 324, 319, 320, 317, + 318, 316, 315, 314, 326, 305, 306, 307, 308, 310, + 0, 321, 322, 309, 82, 89, 121, 192, 148, 106, + 179, 139, 0, 0, 0, 0, 272, 0, 0, 0, + 103, 0, 269, 0, 0, 0, 120, 312, 122, 0, + 0, 160, 131, 0, 0, 0, 0, 303, 304, 0, + 0, 0, 0, 0, 0, 0, 0, 54, 0, 504, + 270, 291, 290, 293, 294, 295, 296, 0, 0, 96, + 292, 297, 298, 299, 0, 0, 0, 267, 284, 0, + 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 281, 282, 0, 0, 0, 0, 325, 0, 283, 0, + 0, 278, 279, 280, 285, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 109, 0, 0, 0, 211, 0, + 0, 323, 0, 146, 0, 163, 111, 119, 83, 90, + 0, 110, 137, 151, 155, 0, 0, 0, 99, 0, + 153, 141, 176, 0, 142, 152, 123, 168, 147, 175, + 183, 184, 165, 182, 191, 84, 164, 174, 97, 156, + 86, 172, 162, 129, 115, 116, 85, 0, 150, 102, + 107, 101, 138, 169, 170, 100, 194, 91, 181, 88, + 92, 180, 136, 167, 173, 130, 127, 87, 171, 128, + 126, 118, 105, 112, 144, 125, 145, 113, 133, 132, + 134, 0, 0, 0, 161, 178, 195, 94, 0, 157, + 166, 185, 186, 187, 188, 189, 190, 0, 0, 95, + 108, 104, 143, 135, 93, 114, 158, 117, 124, 149, + 193, 140, 154, 98, 177, 159, 313, 324, 319, 320, + 317, 318, 316, 315, 314, 326, 305, 306, 307, 308, + 310, 0, 321, 322, 309, 82, 89, 121, 192, 148, + 106, 179, 139, 0, 0, 0, 0, 272, 0, 0, + 0, 103, 0, 269, 0, 0, 0, 120, 312, 122, + 0, 0, 160, 131, 0, 0, 0, 0, 303, 304, + 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, + 0, 270, 291, 290, 293, 294, 295, 296, 0, 0, + 96, 292, 297, 298, 299, 0, 0, 0, 267, 284, + 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 281, 282, 263, 0, 0, 0, 325, 0, 283, + 0, 0, 278, 279, 280, 285, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 109, 0, 0, 0, 211, + 0, 0, 323, 0, 146, 0, 163, 111, 119, 83, + 90, 0, 110, 137, 151, 155, 0, 0, 0, 99, + 0, 153, 141, 176, 0, 142, 152, 123, 168, 147, + 175, 183, 184, 165, 182, 191, 84, 164, 174, 97, 156, 86, 172, 162, 129, 115, 116, 85, 0, 150, 102, 107, 101, 138, 169, 170, 100, 194, 91, 181, - 88, 343, 180, 136, 167, 173, 130, 127, 87, 171, + 88, 92, 180, 136, 167, 173, 130, 127, 87, 171, 128, 126, 118, 105, 112, 144, 125, 145, 113, 133, - 132, 134, 0, 349, 0, 161, 178, 195, 94, 364, + 132, 134, 0, 0, 0, 161, 178, 195, 94, 0, 157, 166, 185, 186, 187, 188, 189, 190, 0, 0, - 95, 108, 104, 143, 344, 342, 337, 336, 117, 124, - 149, 193, 140, 154, 98, 177, 159, 360, 363, 358, - 359, 397, 398, 434, 435, 436, 414, 355, 0, 361, - 362, 0, 418, 424, 425, 400, 82, 89, 121, 192, + 95, 108, 104, 143, 135, 93, 114, 158, 117, 124, + 149, 193, 140, 154, 98, 177, 159, 313, 324, 319, + 320, 317, 318, 316, 315, 314, 326, 305, 306, 307, + 308, 310, 0, 321, 322, 309, 82, 89, 121, 192, 148, 106, 179, 139, 0, 0, 0, 0, 272, 0, 0, 0, 103, 0, 269, 0, 0, 0, 120, 312, 122, 0, 0, 160, 131, 0, 0, 0, 0, 303, - 304, 0, 0, 0, 0, 0, 0, 861, 0, 54, - 0, 0, 270, 291, 290, 293, 294, 295, 296, 0, - 0, 96, 292, 297, 298, 299, 862, 0, 0, 267, + 304, 0, 0, 0, 0, 0, 0, 0, 0, 54, + 0, 0, 270, 291, 813, 293, 294, 295, 296, 0, + 0, 96, 292, 297, 298, 299, 0, 0, 0, 267, 284, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 281, 282, 0, 0, 0, 0, 325, 0, + 0, 0, 281, 282, 263, 0, 0, 0, 325, 0, 283, 0, 0, 278, 279, 280, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 211, 0, 0, 323, 0, 146, 0, 163, 111, 119, @@ -1319,11 +1422,11 @@ var yyAct = [...]int{ 124, 149, 193, 140, 154, 98, 177, 159, 313, 324, 319, 320, 317, 318, 316, 315, 314, 326, 305, 306, 307, 308, 310, 0, 321, 322, 309, 82, 89, 121, - 192, 148, 106, 179, 139, 0, 0, 792, 0, 272, + 192, 148, 106, 179, 139, 0, 0, 0, 0, 272, 0, 0, 0, 103, 0, 269, 0, 0, 0, 120, 312, 122, 0, 0, 160, 131, 0, 0, 0, 0, 303, 304, 0, 0, 0, 0, 0, 0, 0, 0, - 54, 0, 0, 270, 291, 290, 293, 294, 295, 296, + 54, 0, 0, 270, 291, 810, 293, 294, 295, 296, 0, 0, 96, 292, 297, 298, 299, 0, 0, 0, 267, 284, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1343,33 +1446,8 @@ var yyAct = [...]int{ 0, 0, 95, 108, 104, 143, 135, 93, 114, 158, 117, 124, 149, 193, 140, 154, 98, 177, 159, 313, 324, 319, 320, 317, 318, 316, 315, 314, 326, 305, - 306, 307, 308, 310, 0, 321, 322, 309, 82, 89, - 121, 192, 148, 106, 179, 139, 0, 0, 0, 0, - 272, 0, 0, 0, 103, 0, 269, 0, 0, 0, - 120, 312, 122, 0, 0, 160, 131, 0, 0, 0, - 0, 303, 304, 0, 0, 0, 0, 0, 0, 0, - 0, 54, 0, 501, 270, 291, 290, 293, 294, 295, - 296, 0, 0, 96, 292, 297, 298, 299, 0, 0, - 0, 267, 284, 0, 311, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 281, 282, 0, 0, 0, 0, - 325, 0, 283, 0, 0, 278, 279, 280, 285, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, - 0, 0, 211, 0, 0, 323, 0, 146, 0, 163, - 111, 119, 83, 90, 0, 110, 137, 151, 155, 0, - 0, 0, 99, 0, 153, 141, 176, 0, 142, 152, - 123, 168, 147, 175, 183, 184, 165, 182, 191, 84, - 164, 174, 97, 156, 86, 172, 162, 129, 115, 116, - 85, 0, 150, 102, 107, 101, 138, 169, 170, 100, - 194, 91, 181, 88, 92, 180, 136, 167, 173, 130, - 127, 87, 171, 128, 126, 118, 105, 112, 144, 125, - 145, 113, 133, 132, 134, 0, 0, 0, 161, 178, - 195, 94, 0, 157, 166, 185, 186, 187, 188, 189, - 190, 0, 0, 95, 108, 104, 143, 135, 93, 114, - 158, 117, 124, 149, 193, 140, 154, 98, 177, 159, - 313, 324, 319, 320, 317, 318, 316, 315, 314, 326, - 305, 306, 307, 308, 310, 0, 321, 322, 309, 82, - 89, 121, 192, 148, 106, 179, 139, 0, 0, 0, + 306, 307, 308, 310, 24, 321, 322, 309, 82, 89, + 121, 192, 148, 106, 179, 0, 139, 0, 0, 0, 0, 272, 0, 0, 0, 103, 0, 269, 0, 0, 0, 120, 312, 122, 0, 0, 160, 131, 0, 0, 0, 0, 303, 304, 0, 0, 0, 0, 0, 0, @@ -1377,7 +1455,7 @@ var yyAct = [...]int{ 295, 296, 0, 0, 96, 292, 297, 298, 299, 0, 0, 0, 267, 284, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 281, 282, 263, 0, 0, + 0, 0, 0, 0, 0, 281, 282, 0, 0, 0, 0, 325, 0, 283, 0, 0, 278, 279, 280, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 211, 0, 0, 323, 0, 146, 0, @@ -1398,11 +1476,11 @@ var yyAct = [...]int{ 0, 0, 272, 0, 0, 0, 103, 0, 269, 0, 0, 0, 120, 312, 122, 0, 0, 160, 131, 0, 0, 0, 0, 303, 304, 0, 0, 0, 0, 0, - 0, 0, 0, 54, 0, 0, 270, 291, 807, 293, + 0, 0, 0, 54, 0, 0, 270, 291, 290, 293, 294, 295, 296, 0, 0, 96, 292, 297, 298, 299, 0, 0, 0, 267, 284, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 281, 282, 263, 0, + 0, 0, 0, 0, 0, 0, 281, 282, 0, 0, 0, 0, 325, 0, 283, 0, 0, 278, 279, 280, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 211, 0, 0, 323, 0, 146, @@ -1420,20 +1498,20 @@ var yyAct = [...]int{ 177, 159, 313, 324, 319, 320, 317, 318, 316, 315, 314, 326, 305, 306, 307, 308, 310, 0, 321, 322, 309, 82, 89, 121, 192, 148, 106, 179, 139, 0, - 0, 0, 0, 272, 0, 0, 0, 103, 0, 269, + 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 120, 312, 122, 0, 0, 160, 131, 0, 0, 0, 0, 303, 304, 0, 0, 0, 0, - 0, 0, 0, 0, 54, 0, 0, 270, 291, 804, + 0, 0, 0, 0, 54, 0, 0, 270, 291, 290, 293, 294, 295, 296, 0, 0, 96, 292, 297, 298, - 299, 0, 0, 0, 267, 284, 0, 311, 0, 0, + 299, 0, 0, 0, 0, 284, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 281, 282, 263, + 0, 0, 0, 0, 0, 0, 0, 281, 282, 0, 0, 0, 0, 325, 0, 283, 0, 0, 278, 279, 280, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 211, 0, 0, 323, 0, 146, 0, 163, 111, 119, 83, 90, 0, 110, 137, 151, 155, 0, 0, 0, 99, 0, 153, 141, 176, - 0, 142, 152, 123, 168, 147, 175, 183, 184, 165, + 1426, 142, 152, 123, 168, 147, 175, 183, 184, 165, 182, 191, 84, 164, 174, 97, 156, 86, 172, 162, 129, 115, 116, 85, 0, 150, 102, 107, 101, 138, 169, 170, 100, 194, 91, 181, 88, 92, 180, 136, @@ -1443,14 +1521,39 @@ var yyAct = [...]int{ 187, 188, 189, 190, 0, 0, 95, 108, 104, 143, 135, 93, 114, 158, 117, 124, 149, 193, 140, 154, 98, 177, 159, 313, 324, 319, 320, 317, 318, 316, - 315, 314, 326, 305, 306, 307, 308, 310, 24, 321, - 322, 309, 82, 89, 121, 192, 148, 106, 179, 0, - 139, 0, 0, 0, 0, 272, 0, 0, 0, 103, - 0, 269, 0, 0, 0, 120, 312, 122, 0, 0, + 315, 314, 326, 305, 306, 307, 308, 310, 0, 321, + 322, 309, 82, 89, 121, 192, 148, 106, 179, 139, + 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, + 0, 0, 0, 0, 120, 312, 122, 0, 0, 160, + 131, 0, 0, 0, 0, 303, 304, 0, 0, 0, + 0, 0, 0, 0, 0, 54, 0, 504, 270, 291, + 290, 293, 294, 295, 296, 0, 0, 96, 292, 297, + 298, 299, 0, 0, 0, 0, 284, 0, 311, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 281, 282, + 0, 0, 0, 0, 325, 0, 283, 0, 0, 278, + 279, 280, 285, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 109, 0, 0, 0, 211, 0, 0, 323, + 0, 146, 0, 163, 111, 119, 83, 90, 0, 110, + 137, 151, 155, 0, 0, 0, 99, 0, 153, 141, + 176, 0, 142, 152, 123, 168, 147, 175, 183, 184, + 165, 182, 191, 84, 164, 174, 97, 156, 86, 172, + 162, 129, 115, 116, 85, 0, 150, 102, 107, 101, + 138, 169, 170, 100, 194, 91, 181, 88, 92, 180, + 136, 167, 173, 130, 127, 87, 171, 128, 126, 118, + 105, 112, 144, 125, 145, 113, 133, 132, 134, 0, + 0, 0, 161, 178, 195, 94, 0, 157, 166, 185, + 186, 187, 188, 189, 190, 0, 0, 95, 108, 104, + 143, 135, 93, 114, 158, 117, 124, 149, 193, 140, + 154, 98, 177, 159, 313, 324, 319, 320, 317, 318, + 316, 315, 314, 326, 305, 306, 307, 308, 310, 0, + 321, 322, 309, 82, 89, 121, 192, 148, 106, 179, + 139, 0, 0, 0, 0, 0, 0, 0, 0, 103, + 0, 0, 0, 0, 0, 120, 312, 122, 0, 0, 160, 131, 0, 0, 0, 0, 303, 304, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 270, 291, 290, 293, 294, 295, 296, 0, 0, 96, 292, - 297, 298, 299, 0, 0, 0, 267, 284, 0, 311, + 297, 298, 299, 0, 0, 0, 0, 284, 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 282, 0, 0, 0, 0, 325, 0, 283, 0, 0, @@ -1470,18 +1573,18 @@ var yyAct = [...]int{ 140, 154, 98, 177, 159, 313, 324, 319, 320, 317, 318, 316, 315, 314, 326, 305, 306, 307, 308, 310, 0, 321, 322, 309, 82, 89, 121, 192, 148, 106, - 179, 139, 0, 0, 0, 0, 272, 0, 0, 0, - 103, 0, 269, 0, 0, 0, 120, 312, 122, 0, - 0, 160, 131, 0, 0, 0, 0, 303, 304, 0, - 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, - 270, 291, 290, 293, 294, 295, 296, 0, 0, 96, - 292, 297, 298, 299, 0, 0, 0, 267, 284, 0, - 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 179, 139, 0, 0, 0, 0, 0, 0, 0, 0, + 103, 0, 0, 0, 0, 0, 120, 0, 122, 0, + 0, 160, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 281, 282, 0, 0, 0, 0, 325, 0, 283, 0, - 0, 278, 279, 280, 285, 0, 0, 0, 0, 0, + 80, 0, 0, 0, 0, 0, 0, 0, 0, 96, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 538, 537, 547, 548, + 540, 541, 542, 543, 544, 545, 546, 539, 0, 0, + 549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 211, 0, - 0, 323, 0, 146, 0, 163, 111, 119, 83, 90, + 0, 0, 0, 146, 0, 163, 111, 119, 83, 90, 0, 110, 137, 151, 155, 0, 0, 0, 99, 0, 153, 141, 176, 0, 142, 152, 123, 168, 147, 175, 183, 184, 165, 182, 191, 84, 164, 174, 97, 156, @@ -1492,46 +1595,20 @@ var yyAct = [...]int{ 134, 0, 0, 0, 161, 178, 195, 94, 0, 157, 166, 185, 186, 187, 188, 189, 190, 0, 0, 95, 108, 104, 143, 135, 93, 114, 158, 117, 124, 149, - 193, 140, 154, 98, 177, 159, 313, 324, 319, 320, - 317, 318, 316, 315, 314, 326, 305, 306, 307, 308, - 310, 0, 321, 322, 309, 82, 89, 121, 192, 148, - 106, 179, 139, 0, 0, 0, 0, 0, 0, 0, - 0, 103, 0, 0, 0, 0, 0, 120, 312, 122, - 0, 0, 160, 131, 0, 0, 0, 0, 303, 304, - 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, - 0, 270, 291, 290, 293, 294, 295, 296, 0, 0, - 96, 292, 297, 298, 299, 0, 0, 0, 0, 284, - 0, 311, 0, 0, 0, 0, 0, 0, 0, 0, + 193, 140, 154, 98, 177, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 281, 282, 0, 0, 0, 0, 325, 0, 283, - 0, 0, 278, 279, 280, 285, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 109, 0, 0, 0, 211, - 0, 0, 323, 0, 146, 0, 163, 111, 119, 83, - 90, 0, 110, 137, 151, 155, 0, 0, 0, 99, - 0, 153, 141, 176, 1414, 142, 152, 123, 168, 147, - 175, 183, 184, 165, 182, 191, 84, 164, 174, 97, - 156, 86, 172, 162, 129, 115, 116, 85, 0, 150, - 102, 107, 101, 138, 169, 170, 100, 194, 91, 181, - 88, 92, 180, 136, 167, 173, 130, 127, 87, 171, - 128, 126, 118, 105, 112, 144, 125, 145, 113, 133, - 132, 134, 0, 0, 0, 161, 178, 195, 94, 0, - 157, 166, 185, 186, 187, 188, 189, 190, 0, 0, - 95, 108, 104, 143, 135, 93, 114, 158, 117, 124, - 149, 193, 140, 154, 98, 177, 159, 313, 324, 319, - 320, 317, 318, 316, 315, 314, 326, 305, 306, 307, - 308, 310, 0, 321, 322, 309, 82, 89, 121, 192, - 148, 106, 179, 139, 0, 0, 0, 0, 0, 0, - 0, 0, 103, 0, 0, 0, 0, 0, 120, 312, - 122, 0, 0, 160, 131, 0, 0, 0, 0, 303, - 304, 0, 0, 0, 0, 0, 0, 0, 0, 54, - 0, 501, 270, 291, 290, 293, 294, 295, 296, 0, - 0, 96, 292, 297, 298, 299, 0, 0, 0, 0, - 284, 0, 311, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 139, 0, 82, 89, 121, 192, 148, + 106, 179, 103, 0, 0, 0, 0, 0, 120, 0, + 122, 0, 0, 160, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 281, 282, 0, 0, 0, 0, 325, 0, - 283, 0, 0, 278, 279, 280, 285, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, - 211, 0, 0, 323, 0, 146, 0, 163, 111, 119, + 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, + 0, 96, 0, 0, 0, 0, 0, 74, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 109, 76, 77, 0, + 73, 0, 0, 0, 78, 146, 0, 163, 111, 119, 83, 90, 0, 110, 137, 151, 155, 0, 0, 0, 99, 0, 153, 141, 176, 0, 142, 152, 123, 168, 147, 175, 183, 184, 165, 182, 191, 84, 164, 174, @@ -1542,21 +1619,21 @@ var yyAct = [...]int{ 133, 132, 134, 0, 0, 0, 161, 178, 195, 94, 0, 157, 166, 185, 186, 187, 188, 189, 190, 0, 0, 95, 108, 104, 143, 135, 93, 114, 158, 117, - 124, 149, 193, 140, 154, 98, 177, 159, 313, 324, - 319, 320, 317, 318, 316, 315, 314, 326, 305, 306, - 307, 308, 310, 0, 321, 322, 309, 82, 89, 121, - 192, 148, 106, 179, 139, 0, 0, 0, 0, 0, + 124, 149, 193, 140, 154, 98, 177, 159, 0, 75, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 82, 89, 121, + 192, 148, 106, 179, 139, 0, 0, 0, 854, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 120, - 312, 122, 0, 0, 160, 131, 0, 0, 0, 0, - 303, 304, 0, 0, 0, 0, 0, 0, 0, 0, - 54, 0, 0, 270, 291, 290, 293, 294, 295, 296, - 0, 0, 96, 292, 297, 298, 299, 0, 0, 0, - 0, 284, 0, 311, 0, 0, 0, 0, 0, 0, + 0, 122, 0, 0, 160, 131, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 209, 0, 856, 0, 0, 0, 0, + 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 281, 282, 0, 0, 0, 0, 325, - 0, 283, 0, 0, 278, 279, 280, 285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, - 0, 211, 0, 0, 323, 0, 146, 0, 163, 111, + 0, 211, 0, 0, 0, 0, 146, 0, 163, 111, 119, 83, 90, 0, 110, 137, 151, 155, 0, 0, 0, 99, 0, 153, 141, 176, 0, 142, 152, 123, 168, 147, 175, 183, 184, 165, 182, 191, 84, 164, @@ -1567,42 +1644,16 @@ var yyAct = [...]int{ 113, 133, 132, 134, 0, 0, 0, 161, 178, 195, 94, 0, 157, 166, 185, 186, 187, 188, 189, 190, 0, 0, 95, 108, 104, 143, 135, 93, 114, 158, - 117, 124, 149, 193, 140, 154, 98, 177, 159, 313, - 324, 319, 320, 317, 318, 316, 315, 314, 326, 305, - 306, 307, 308, 310, 0, 321, 322, 309, 82, 89, - 121, 192, 148, 106, 179, 139, 0, 0, 0, 0, - 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, - 120, 0, 122, 0, 0, 160, 131, 0, 0, 0, + 117, 124, 149, 193, 140, 154, 98, 177, 159, 0, + 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 139, 0, 82, 89, + 121, 192, 148, 106, 179, 103, 0, 0, 0, 0, + 0, 120, 0, 122, 0, 0, 160, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, - 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 80, 0, 0, 0, 0, + 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 535, 534, 544, 545, 537, 538, 539, 540, 541, 542, - 543, 536, 0, 0, 546, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, - 0, 0, 211, 0, 0, 0, 0, 146, 0, 163, - 111, 119, 83, 90, 0, 110, 137, 151, 155, 0, - 0, 0, 99, 0, 153, 141, 176, 0, 142, 152, - 123, 168, 147, 175, 183, 184, 165, 182, 191, 84, - 164, 174, 97, 156, 86, 172, 162, 129, 115, 116, - 85, 0, 150, 102, 107, 101, 138, 169, 170, 100, - 194, 91, 181, 88, 92, 180, 136, 167, 173, 130, - 127, 87, 171, 128, 126, 118, 105, 112, 144, 125, - 145, 113, 133, 132, 134, 0, 0, 0, 161, 178, - 195, 94, 0, 157, 166, 185, 186, 187, 188, 189, - 190, 0, 0, 95, 108, 104, 143, 135, 93, 114, - 158, 117, 124, 149, 193, 140, 154, 98, 177, 159, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, - 89, 121, 192, 148, 106, 179, 139, 0, 0, 0, - 523, 0, 0, 0, 0, 103, 0, 0, 0, 0, - 0, 120, 0, 122, 0, 0, 160, 131, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 80, 0, 525, 0, 0, - 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, - 520, 519, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, @@ -1618,19 +1669,19 @@ var yyAct = [...]int{ 178, 195, 94, 0, 157, 166, 185, 186, 187, 188, 189, 190, 0, 0, 95, 108, 104, 143, 135, 93, 114, 158, 117, 124, 149, 193, 140, 154, 98, 177, - 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 159, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 82, 89, 121, 192, 148, 106, 179, 103, 0, 0, 0, 0, 0, 120, 0, 122, 0, 0, 160, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, + 0, 0, 0, 0, 54, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, - 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 109, 76, 77, 0, 73, 0, 0, 0, 78, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 109, 0, 0, 0, 211, 0, 0, 0, 0, 146, 0, 163, 111, 119, 83, 90, 0, 110, 137, 151, 155, 0, 0, 0, 99, 0, 153, 141, 176, 0, 142, 152, 123, 168, 147, 175, 183, 184, 165, @@ -1642,14 +1693,14 @@ var yyAct = [...]int{ 0, 161, 178, 195, 94, 0, 157, 166, 185, 186, 187, 188, 189, 190, 0, 0, 95, 108, 104, 143, 135, 93, 114, 158, 117, 124, 149, 193, 140, 154, - 98, 177, 159, 0, 75, 0, 0, 0, 0, 0, + 98, 177, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 89, 121, 192, 148, 106, 179, 139, - 0, 0, 0, 848, 0, 0, 0, 0, 103, 0, + 0, 0, 0, 854, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 120, 0, 122, 0, 0, 160, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, - 850, 0, 0, 0, 0, 0, 0, 96, 0, 0, + 856, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1658,7 +1709,7 @@ var yyAct = [...]int{ 0, 0, 109, 0, 0, 0, 211, 0, 0, 0, 0, 146, 0, 163, 111, 119, 83, 90, 0, 110, 137, 151, 155, 0, 0, 0, 99, 0, 153, 141, - 176, 0, 142, 152, 123, 168, 147, 175, 183, 184, + 176, 0, 852, 152, 123, 168, 147, 175, 183, 184, 165, 182, 191, 84, 164, 174, 97, 156, 86, 172, 162, 129, 115, 116, 85, 0, 150, 102, 107, 101, 138, 169, 170, 100, 194, 91, 181, 88, 92, 180, @@ -1667,13 +1718,13 @@ var yyAct = [...]int{ 0, 0, 161, 178, 195, 94, 0, 157, 166, 185, 186, 187, 188, 189, 190, 0, 0, 95, 108, 104, 143, 135, 93, 114, 158, 117, 124, 149, 193, 140, - 154, 98, 177, 159, 0, 0, 0, 0, 0, 24, + 154, 98, 177, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 82, 89, 121, 192, 148, 106, 179, 103, 0, 0, 0, 0, 0, 120, 0, 122, 0, 0, 160, 131, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, - 80, 0, 0, 0, 0, 0, 0, 0, 0, 96, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 0, 0, 749, 0, 0, 750, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1692,12 +1743,12 @@ var yyAct = [...]int{ 166, 185, 186, 187, 188, 189, 190, 0, 0, 95, 108, 104, 143, 135, 93, 114, 158, 117, 124, 149, 193, 140, 154, 98, 177, 159, 0, 0, 0, 0, - 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 82, 89, 121, 192, 148, - 106, 179, 103, 0, 0, 0, 0, 0, 120, 0, + 106, 179, 103, 0, 640, 0, 0, 0, 120, 0, 122, 0, 0, 160, 131, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, - 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 80, 0, 639, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1717,109 +1768,84 @@ var yyAct = [...]int{ 0, 95, 108, 104, 143, 135, 93, 114, 158, 117, 124, 149, 193, 140, 154, 98, 177, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 82, 89, 121, - 192, 148, 106, 179, 139, 0, 0, 0, 848, 0, - 0, 0, 0, 103, 0, 0, 0, 0, 0, 120, - 0, 122, 0, 0, 160, 131, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 209, 0, 850, 0, 0, 0, 0, - 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, - 0, 211, 0, 0, 0, 0, 146, 0, 163, 111, - 119, 83, 90, 0, 110, 137, 151, 155, 0, 0, - 0, 99, 0, 153, 141, 176, 0, 846, 152, 123, - 168, 147, 175, 183, 184, 165, 182, 191, 84, 164, - 174, 97, 156, 86, 172, 162, 129, 115, 116, 85, - 0, 150, 102, 107, 101, 138, 169, 170, 100, 194, - 91, 181, 88, 92, 180, 136, 167, 173, 130, 127, - 87, 171, 128, 126, 118, 105, 112, 144, 125, 145, - 113, 133, 132, 134, 0, 0, 0, 161, 178, 195, - 94, 0, 157, 166, 185, 186, 187, 188, 189, 190, - 0, 0, 95, 108, 104, 143, 135, 93, 114, 158, - 117, 124, 149, 193, 140, 154, 98, 177, 159, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 139, 0, 82, 89, - 121, 192, 148, 106, 179, 103, 0, 0, 0, 0, - 0, 120, 0, 122, 0, 0, 160, 131, 0, 0, + 0, 0, 0, 0, 0, 139, 0, 82, 89, 121, + 192, 148, 106, 179, 103, 0, 0, 0, 0, 0, + 120, 0, 122, 0, 0, 160, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 80, 0, 0, 743, 0, - 0, 744, 0, 0, 96, 0, 0, 0, 0, 0, + 0, 54, 0, 0, 209, 0, 0, 0, 0, 0, + 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, - 0, 0, 0, 211, 0, 0, 0, 0, 146, 0, - 163, 111, 119, 83, 90, 0, 110, 137, 151, 155, - 0, 0, 0, 99, 0, 153, 141, 176, 0, 142, - 152, 123, 168, 147, 175, 183, 184, 165, 182, 191, - 84, 164, 174, 97, 156, 86, 172, 162, 129, 115, - 116, 85, 0, 150, 102, 107, 101, 138, 169, 170, - 100, 194, 91, 181, 88, 92, 180, 136, 167, 173, - 130, 127, 87, 171, 128, 126, 118, 105, 112, 144, - 125, 145, 113, 133, 132, 134, 0, 0, 0, 161, - 178, 195, 94, 0, 157, 166, 185, 186, 187, 188, - 189, 190, 0, 0, 95, 108, 104, 143, 135, 93, - 114, 158, 117, 124, 149, 193, 140, 154, 98, 177, - 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, - 82, 89, 121, 192, 148, 106, 179, 103, 0, 634, - 0, 0, 0, 120, 0, 122, 0, 0, 160, 131, + 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, + 0, 0, 211, 0, 0, 0, 0, 146, 0, 163, + 111, 119, 83, 90, 0, 110, 137, 151, 155, 0, + 0, 0, 99, 0, 153, 141, 176, 0, 142, 152, + 123, 168, 147, 175, 183, 184, 165, 182, 191, 84, + 164, 174, 97, 156, 86, 172, 162, 129, 115, 116, + 85, 0, 150, 102, 107, 101, 138, 169, 170, 100, + 194, 91, 181, 88, 92, 180, 136, 167, 173, 130, + 127, 87, 171, 128, 126, 118, 105, 112, 144, 125, + 145, 113, 133, 132, 134, 0, 0, 0, 161, 178, + 195, 94, 0, 157, 166, 185, 186, 187, 188, 189, + 190, 0, 0, 95, 108, 104, 143, 135, 93, 114, + 158, 117, 124, 149, 193, 140, 154, 98, 177, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 80, 0, 633, - 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 139, 0, 82, + 89, 121, 192, 148, 106, 179, 103, 0, 0, 0, + 0, 0, 120, 0, 122, 0, 0, 160, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 209, 0, 856, 0, + 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 109, 0, 0, 0, 211, 0, 0, 0, 0, - 146, 0, 163, 111, 119, 83, 90, 0, 110, 137, - 151, 155, 0, 0, 0, 99, 0, 153, 141, 176, - 0, 142, 152, 123, 168, 147, 175, 183, 184, 165, - 182, 191, 84, 164, 174, 97, 156, 86, 172, 162, - 129, 115, 116, 85, 0, 150, 102, 107, 101, 138, - 169, 170, 100, 194, 91, 181, 88, 92, 180, 136, - 167, 173, 130, 127, 87, 171, 128, 126, 118, 105, - 112, 144, 125, 145, 113, 133, 132, 134, 0, 0, - 0, 161, 178, 195, 94, 0, 157, 166, 185, 186, - 187, 188, 189, 190, 0, 0, 95, 108, 104, 143, - 135, 93, 114, 158, 117, 124, 149, 193, 140, 154, - 98, 177, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 139, 0, 82, 89, 121, 192, 148, 106, 179, 103, - 0, 0, 0, 0, 0, 120, 0, 122, 0, 0, - 160, 131, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 54, 0, 0, 209, - 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, + 109, 0, 0, 0, 211, 0, 0, 0, 0, 146, + 0, 163, 111, 119, 83, 90, 0, 110, 137, 151, + 155, 0, 0, 0, 99, 0, 153, 141, 176, 0, + 142, 152, 123, 168, 147, 175, 183, 184, 165, 182, + 191, 84, 164, 174, 97, 156, 86, 172, 162, 129, + 115, 116, 85, 0, 150, 102, 107, 101, 138, 169, + 170, 100, 194, 91, 181, 88, 92, 180, 136, 167, + 173, 130, 127, 87, 171, 128, 126, 118, 105, 112, + 144, 125, 145, 113, 133, 132, 134, 0, 0, 0, + 161, 178, 195, 94, 0, 157, 166, 185, 186, 187, + 188, 189, 190, 0, 0, 95, 108, 104, 143, 135, + 93, 114, 158, 117, 124, 149, 193, 140, 154, 98, + 177, 159, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, + 0, 82, 89, 121, 192, 148, 106, 179, 103, 0, + 0, 0, 0, 0, 120, 0, 122, 0, 0, 160, + 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, + 528, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 109, 0, 0, 0, 211, 0, 0, - 0, 0, 146, 0, 163, 111, 119, 83, 90, 0, - 110, 137, 151, 155, 0, 0, 0, 99, 0, 153, - 141, 176, 0, 142, 152, 123, 168, 147, 175, 183, - 184, 165, 182, 191, 84, 164, 174, 97, 156, 86, - 172, 162, 129, 115, 116, 85, 0, 150, 102, 107, - 101, 138, 169, 170, 100, 194, 91, 181, 88, 92, - 180, 136, 167, 173, 130, 127, 87, 171, 128, 126, - 118, 105, 112, 144, 125, 145, 113, 133, 132, 134, - 0, 0, 0, 161, 178, 195, 94, 0, 157, 166, - 185, 186, 187, 188, 189, 190, 0, 0, 95, 108, - 104, 143, 135, 93, 114, 158, 117, 124, 149, 193, - 140, 154, 98, 177, 159, 0, 0, 0, 0, 0, + 0, 0, 109, 0, 0, 0, 211, 0, 0, 0, + 0, 146, 0, 163, 111, 119, 83, 90, 0, 110, + 137, 151, 155, 0, 0, 0, 99, 0, 153, 141, + 176, 0, 142, 152, 123, 168, 147, 175, 183, 184, + 165, 182, 191, 84, 164, 174, 97, 156, 86, 172, + 162, 129, 115, 116, 85, 0, 150, 102, 107, 101, + 138, 169, 170, 100, 194, 91, 181, 88, 92, 180, + 136, 167, 173, 130, 127, 87, 171, 128, 126, 118, + 105, 112, 144, 125, 145, 113, 133, 132, 134, 0, + 0, 0, 161, 178, 195, 94, 0, 157, 166, 185, + 186, 187, 188, 189, 190, 0, 0, 95, 108, 104, + 143, 135, 93, 114, 158, 117, 124, 149, 193, 140, + 154, 98, 177, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 139, 0, 82, 89, 121, 192, 148, 106, - 179, 103, 0, 0, 0, 0, 0, 120, 0, 122, + 0, 0, 139, 82, 89, 121, 192, 148, 106, 179, + 610, 103, 0, 0, 0, 0, 0, 120, 0, 122, 0, 0, 160, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 209, 0, 850, 0, 0, 0, 0, 0, 0, + 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1838,12 +1864,12 @@ var yyAct = [...]int{ 157, 166, 185, 186, 187, 188, 189, 190, 0, 0, 95, 108, 104, 143, 135, 93, 114, 158, 117, 124, 149, 193, 140, 154, 98, 177, 159, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 139, 0, 82, 89, 121, 192, 148, 106, 179, 103, 0, 0, 0, 0, 0, 120, 0, 122, 0, 0, 160, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 80, 0, 525, 0, 0, 0, 0, + 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1863,165 +1889,116 @@ var yyAct = [...]int{ 0, 0, 95, 108, 104, 143, 135, 93, 114, 158, 117, 124, 149, 193, 140, 154, 98, 177, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 139, 82, 89, - 121, 192, 148, 106, 179, 607, 103, 0, 0, 0, - 0, 0, 120, 0, 122, 0, 0, 160, 131, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, - 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 109, 0, 0, 0, 211, 0, 0, 0, 0, 146, - 0, 163, 111, 119, 83, 90, 0, 110, 137, 151, - 155, 0, 0, 0, 99, 0, 153, 141, 176, 0, - 142, 152, 123, 168, 147, 175, 183, 184, 165, 182, - 191, 84, 164, 174, 97, 156, 86, 172, 162, 129, - 115, 116, 85, 0, 150, 102, 107, 101, 138, 169, - 170, 100, 194, 91, 181, 88, 92, 180, 136, 167, - 173, 130, 127, 87, 171, 128, 126, 118, 105, 112, - 144, 125, 145, 113, 133, 132, 134, 0, 0, 0, - 161, 178, 195, 94, 0, 157, 166, 185, 186, 187, - 188, 189, 190, 0, 0, 95, 108, 104, 143, 135, - 93, 114, 158, 117, 124, 149, 193, 140, 154, 98, - 177, 159, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 329, 0, 0, 0, 0, 0, 0, 139, - 0, 82, 89, 121, 192, 148, 106, 179, 103, 0, - 0, 0, 0, 0, 120, 0, 122, 0, 0, 160, - 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 209, 0, - 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 109, 0, 0, 0, 211, 0, 0, 0, - 0, 146, 0, 163, 111, 119, 83, 90, 0, 110, - 137, 151, 155, 0, 0, 0, 99, 0, 153, 141, - 176, 0, 142, 152, 123, 168, 147, 175, 183, 184, - 165, 182, 191, 84, 164, 174, 97, 156, 86, 172, - 162, 129, 115, 116, 85, 0, 150, 102, 107, 101, - 138, 169, 170, 100, 194, 91, 181, 88, 92, 180, - 136, 167, 173, 130, 127, 87, 171, 128, 126, 118, - 105, 112, 144, 125, 145, 113, 133, 132, 134, 0, - 0, 0, 161, 178, 195, 94, 0, 157, 166, 185, - 186, 187, 188, 189, 190, 0, 0, 95, 108, 104, - 143, 135, 93, 114, 158, 117, 124, 149, 193, 140, - 154, 98, 177, 159, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 139, 0, 82, 89, 121, 192, 148, 106, 179, - 103, 0, 0, 0, 0, 0, 120, 0, 122, 0, - 0, 160, 131, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 209, 0, 0, 0, 0, 0, 0, 0, 0, 96, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 139, 0, 82, 89, + 121, 192, 148, 106, 179, 103, 0, 0, 0, 0, + 0, 120, 0, 122, 0, 0, 160, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, + 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 109, 0, 206, 0, 211, 0, - 0, 0, 0, 146, 0, 163, 111, 119, 83, 90, - 0, 110, 137, 151, 155, 0, 0, 0, 99, 0, - 153, 141, 176, 0, 142, 152, 123, 168, 147, 175, - 183, 184, 165, 182, 191, 84, 164, 174, 97, 156, - 86, 172, 162, 129, 115, 116, 85, 0, 150, 102, - 107, 101, 138, 169, 170, 100, 194, 91, 181, 88, - 92, 180, 136, 167, 173, 130, 127, 87, 171, 128, - 126, 118, 105, 112, 144, 125, 145, 113, 133, 132, - 134, 0, 0, 0, 161, 178, 195, 94, 0, 157, - 166, 185, 186, 187, 188, 189, 190, 0, 0, 95, - 108, 104, 143, 135, 93, 114, 158, 117, 124, 149, - 193, 140, 154, 98, 177, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 139, 0, 82, 89, 121, 192, 148, - 106, 179, 103, 0, 0, 0, 0, 0, 120, 0, - 122, 0, 0, 160, 131, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, + 0, 206, 0, 211, 0, 0, 0, 0, 146, 0, + 163, 111, 119, 83, 90, 0, 110, 137, 151, 155, + 0, 0, 0, 99, 0, 153, 141, 176, 0, 142, + 152, 123, 168, 147, 175, 183, 184, 165, 182, 191, + 84, 164, 174, 97, 156, 86, 172, 162, 129, 115, + 116, 85, 0, 150, 102, 107, 101, 138, 169, 170, + 100, 194, 91, 181, 88, 92, 180, 136, 167, 173, + 130, 127, 87, 171, 128, 126, 118, 105, 112, 144, + 125, 145, 113, 133, 132, 134, 0, 0, 0, 161, + 178, 195, 94, 0, 157, 166, 185, 186, 187, 188, + 189, 190, 0, 0, 95, 108, 104, 143, 135, 93, + 114, 158, 117, 124, 149, 193, 140, 154, 98, 177, + 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, + 82, 89, 121, 192, 148, 106, 179, 103, 0, 0, + 0, 0, 0, 120, 0, 122, 0, 0, 160, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, - 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, + 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, - 211, 0, 0, 0, 0, 146, 0, 163, 111, 119, - 83, 90, 0, 110, 137, 151, 155, 0, 0, 0, - 99, 0, 153, 141, 176, 0, 142, 152, 123, 168, - 147, 175, 183, 184, 165, 182, 191, 84, 164, 174, - 97, 156, 86, 172, 162, 129, 115, 116, 85, 0, - 150, 102, 107, 101, 138, 169, 170, 100, 194, 91, - 181, 88, 92, 180, 136, 167, 173, 130, 127, 87, - 171, 128, 126, 118, 105, 112, 144, 125, 145, 113, - 133, 132, 134, 0, 0, 0, 161, 178, 195, 94, - 0, 157, 166, 185, 186, 187, 188, 189, 190, 0, - 0, 95, 108, 104, 143, 135, 93, 114, 158, 117, - 124, 149, 193, 140, 154, 98, 177, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 139, 0, 82, 89, 121, - 192, 148, 106, 179, 103, 0, 0, 0, 0, 0, - 120, 0, 122, 0, 0, 160, 131, 0, 0, 0, + 0, 109, 0, 0, 0, 211, 0, 0, 0, 0, + 146, 0, 163, 111, 119, 83, 90, 0, 110, 137, + 151, 155, 0, 0, 0, 99, 0, 153, 141, 176, + 0, 142, 152, 123, 168, 147, 175, 183, 184, 165, + 182, 191, 84, 164, 174, 97, 156, 86, 172, 162, + 129, 115, 116, 85, 0, 150, 102, 107, 101, 138, + 169, 170, 100, 194, 91, 181, 88, 92, 180, 136, + 167, 173, 130, 127, 87, 171, 128, 126, 118, 105, + 112, 144, 125, 145, 113, 133, 132, 134, 0, 0, + 0, 161, 178, 195, 94, 0, 157, 166, 185, 186, + 187, 188, 189, 190, 0, 0, 95, 108, 104, 143, + 135, 93, 114, 158, 117, 124, 149, 193, 140, 154, + 98, 177, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, - 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, + 139, 0, 82, 89, 121, 192, 148, 106, 179, 103, + 0, 0, 0, 0, 0, 120, 0, 122, 0, 0, + 160, 131, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, + 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, - 0, 0, 211, 0, 0, 0, 0, 146, 0, 163, - 111, 119, 83, 90, 0, 110, 137, 151, 155, 0, - 0, 0, 99, 0, 153, 141, 176, 0, 142, 152, - 123, 168, 147, 175, 183, 184, 165, 182, 191, 84, - 164, 174, 97, 156, 86, 172, 162, 129, 115, 116, - 85, 0, 150, 102, 107, 101, 138, 169, 170, 100, - 194, 91, 181, 88, 92, 180, 136, 167, 173, 130, - 127, 87, 171, 128, 126, 118, 105, 112, 144, 125, - 145, 113, 133, 132, 134, 0, 0, 0, 161, 178, - 195, 94, 0, 157, 166, 185, 186, 187, 188, 189, - 190, 0, 0, 95, 108, 104, 143, 135, 93, 114, - 158, 117, 124, 149, 193, 140, 154, 98, 177, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 139, 0, 82, - 89, 121, 192, 148, 106, 179, 103, 0, 0, 0, - 0, 0, 120, 0, 122, 0, 0, 160, 131, 0, + 0, 0, 0, 109, 0, 0, 0, 211, 0, 0, + 0, 0, 146, 0, 163, 111, 119, 83, 90, 0, + 110, 137, 151, 155, 0, 0, 0, 99, 0, 153, + 141, 176, 0, 142, 152, 123, 168, 147, 175, 183, + 184, 165, 182, 191, 84, 164, 174, 97, 156, 86, + 172, 162, 129, 115, 116, 85, 0, 150, 102, 107, + 101, 138, 169, 170, 100, 194, 91, 181, 88, 92, + 180, 136, 167, 173, 130, 127, 87, 171, 128, 126, + 118, 105, 112, 144, 125, 145, 113, 133, 132, 134, + 0, 0, 0, 161, 178, 195, 94, 0, 157, 166, + 185, 186, 187, 188, 189, 190, 0, 0, 95, 108, + 104, 143, 135, 93, 114, 158, 117, 124, 149, 193, + 140, 154, 98, 177, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 270, 0, 0, 0, - 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, + 0, 0, 139, 0, 82, 89, 121, 192, 148, 106, + 179, 103, 0, 0, 0, 0, 0, 120, 0, 122, + 0, 0, 160, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, + 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 109, 0, 0, 0, 211, 0, 0, 0, 0, 146, - 0, 163, 111, 119, 83, 90, 0, 110, 137, 151, - 155, 0, 0, 0, 99, 0, 153, 141, 176, 0, - 142, 152, 123, 168, 147, 175, 183, 184, 165, 182, - 191, 84, 164, 174, 97, 156, 86, 172, 162, 129, - 115, 116, 85, 0, 150, 102, 107, 101, 138, 169, - 170, 100, 194, 91, 181, 88, 92, 180, 136, 167, - 173, 130, 127, 87, 171, 128, 126, 118, 105, 112, - 144, 125, 145, 113, 133, 132, 134, 0, 0, 0, - 161, 178, 195, 94, 0, 157, 166, 185, 186, 187, - 188, 189, 190, 0, 0, 95, 108, 104, 143, 135, - 93, 114, 158, 117, 124, 149, 193, 140, 154, 98, - 177, 159, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 109, 0, 0, 0, 211, + 0, 0, 0, 0, 146, 0, 163, 111, 119, 83, + 90, 0, 110, 137, 151, 155, 0, 0, 0, 99, + 0, 153, 141, 176, 0, 142, 152, 123, 168, 147, + 175, 183, 184, 165, 182, 191, 84, 164, 174, 97, + 156, 86, 172, 162, 129, 115, 116, 85, 0, 150, + 102, 107, 101, 138, 169, 170, 100, 194, 91, 181, + 88, 92, 180, 136, 167, 173, 130, 127, 87, 171, + 128, 126, 118, 105, 112, 144, 125, 145, 113, 133, + 132, 134, 0, 0, 0, 161, 178, 195, 94, 0, + 157, 166, 185, 186, 187, 188, 189, 190, 0, 0, + 95, 108, 104, 143, 135, 93, 114, 158, 117, 124, + 149, 193, 140, 154, 98, 177, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 82, 89, 121, 192, 148, 106, 179, + 0, 0, 0, 0, 0, 0, 82, 89, 121, 192, + 148, 106, 179, } var yyPact = [...]int{ - 2221, -1000, -191, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 917, 962, -1000, -1000, -1000, -1000, -1000, -1000, - 268, 9010, 12, 111, -5, 11933, 109, 1766, 12417, -1000, - 3, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -76, -77, - -1000, 711, -1000, -1000, -1000, -1000, -1000, 906, 914, 764, - 899, 803, -1000, 6508, 60, 60, 11691, 5504, -1000, -1000, - 372, 12417, 104, 12417, -153, 65, 65, 65, -1000, -1000, + 1851, -1000, -192, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 937, 993, -1000, -1000, -1000, -1000, -1000, -1000, + 279, 8785, 41, 131, -10, 11708, 130, 1524, 12192, -1000, + 8, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -60, -70, + -1000, 716, -1000, -1000, -1000, -1000, -1000, 925, 948, 787, + 936, 820, -1000, 6534, 109, 109, 11466, 5530, -1000, -1000, + 256, 12192, 127, 12192, -145, 104, 104, 104, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -2032,23 +2009,23 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 108, 12417, 197, -1000, - 12417, 62, 566, 62, 62, 62, 12417, -1000, 164, -1000, - -1000, -1000, 12417, 552, 839, 3392, 59, 3392, 3392, -1000, - 3392, 3392, -1000, 3392, 13, 3392, -81, 938, -1000, -1000, - -1000, -1000, -20, -1000, 3392, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 481, 861, - 7513, 7513, 917, -1000, 711, -1000, -1000, -1000, 836, -1000, - -1000, 321, 948, -1000, 8768, 160, -1000, 7513, 1752, 714, - -1000, -1000, 714, -1000, -1000, 157, -1000, -1000, 8266, 8266, - 8266, 8266, 8266, 8266, 8266, 8266, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 714, -1000, 7262, 714, 714, 714, 714, 714, 714, 714, - 714, 7513, 714, 714, 714, 714, 714, 714, 714, 714, - 714, 714, 714, 714, 714, 714, 714, 11449, 10722, 12417, - 666, -1000, 708, 5240, -134, -1000, -1000, -1000, 251, 10480, - -1000, -1000, -1000, 837, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 129, 12192, 237, -1000, + 12192, 92, 569, 92, 92, 92, 12192, -1000, 178, -1000, + -1000, -1000, 12192, 553, 853, 3154, 53, 3154, 3154, -1000, + 3154, 3154, -1000, 3154, 15, 3154, -62, 969, -1000, -1000, + -1000, -1000, -15, -1000, 3154, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 540, 860, + 7539, 7539, 937, -1000, 716, -1000, -1000, -1000, 854, -1000, + -1000, 322, 979, -1000, 2361, 170, -1000, 7539, 2156, 675, + -1000, -1000, 675, -1000, -1000, 147, -1000, -1000, 8292, 8292, + 8292, 8292, 8292, 8292, 8292, 8292, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 675, -1000, 7288, 675, 675, 675, 675, 675, 675, 675, + 675, 7539, 675, 675, 675, 675, 675, 675, 675, 675, + 675, 675, 675, 675, 675, 675, 675, 11224, 10497, 12192, + 628, 620, -1000, -1000, 168, 707, 5266, -92, -1000, -1000, + -1000, 281, 10255, -1000, -1000, -1000, 852, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -2057,217 +2034,219 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 619, 12417, -1000, 1516, -1000, 549, 3392, 85, 536, 290, - 518, 12417, 12417, 3392, 20, 52, 107, 12417, 712, 69, - 12417, 891, 759, 12417, 516, 509, -1000, 4976, -1000, 3392, - 3392, -1000, -1000, -1000, 3392, 3392, 3392, 12417, 3392, 3392, - -1000, -1000, -1000, -1000, -1000, 3392, 3392, -1000, 947, 289, - -1000, -1000, -1000, -1000, 7513, -1000, 758, -1000, -1000, -1000, - -1000, -1000, -1000, 955, 213, 505, 154, 709, -1000, 311, - 906, 481, 803, 10238, 784, -1000, -1000, 12417, -1000, 7513, - 7513, 435, -1000, 11206, -1000, -1000, 3920, 226, 8266, 349, - 287, 8266, 8266, 8266, 8266, 8266, 8266, 8266, 8266, 8266, - 8266, 8266, 8266, 8266, 8266, 8266, 415, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 507, -1000, 711, 537, 537, - 179, 179, 179, 179, 179, 179, 179, 8517, 6006, 481, - 576, 252, 7262, 6508, 6508, 7513, 7513, 7010, 6759, 6508, - 901, 279, 252, 12659, -1000, -1000, 8015, -1000, -1000, -1000, - -1000, -1000, 481, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 12175, 12175, 6508, 6508, 6508, 6508, 30, 12417, -1000, 685, - 895, -1000, -1000, -1000, 893, 9745, 9996, 30, 675, 10722, - 12417, -1000, -1000, 4712, 708, -134, 699, -1000, -105, -104, - 5755, 176, -1000, -1000, -1000, -1000, 3128, 172, 620, 375, - -65, -1000, -1000, -1000, 726, -1000, 726, 726, 726, 726, - -37, -37, -37, -37, -1000, -1000, -1000, -1000, -1000, 748, - 747, -1000, 726, 726, 726, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 746, 746, 746, 734, 734, 713, -1000, - 12417, 3392, 878, 3392, -1000, 86, -1000, 12175, 12175, 12417, - 12417, 131, 12417, 12417, 707, -1000, 12417, 3392, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 12417, 320, 12417, 12417, 252, 12417, -1000, - 812, 7513, 7513, 4448, 7513, -1000, -1000, -1000, 861, -1000, - 901, 935, -1000, 827, 826, 6508, -1000, -1000, 226, 286, - -1000, -1000, 443, -1000, -1000, -1000, -1000, 150, 714, -1000, - 2222, -1000, -1000, -1000, -1000, 349, 8266, 8266, 8266, 323, - 2222, 2076, 649, 337, 179, 248, 248, 173, 173, 173, - 173, 173, 156, 156, -1000, -1000, -1000, 481, -1000, -1000, - -1000, 481, 6508, 706, -1000, -1000, 7513, -1000, 481, 572, - 572, 393, 384, 231, 945, 572, 229, 944, 572, 572, - 6508, 302, -1000, 7513, 481, -1000, 138, -1000, 395, 704, - 703, 572, 481, 572, 572, 684, 714, -1000, 12659, 10722, - 10722, 10722, 10722, 10722, -1000, 799, 798, -1000, 779, 778, - 793, 12417, -1000, 574, 9745, 141, 714, -1000, 10964, -1000, - -1000, 936, 10722, 627, -1000, -1000, 699, -134, -107, -1000, - -1000, -1000, -1000, 252, -1000, 462, 688, 2864, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 743, 500, -1000, 862, 192, - 168, 495, 856, -1000, -1000, -1000, 842, -1000, 293, -71, - -1000, -1000, 423, -37, -37, -1000, -1000, 176, 832, 176, - 176, 176, 463, 463, -1000, -1000, -1000, -1000, 421, -1000, - -1000, -1000, 403, -1000, 757, 12175, 3392, -1000, -1000, -1000, - -1000, 236, 236, 195, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 29, 686, -1000, -1000, -1000, - 19, 17, 68, -1000, 3392, -1000, 289, -1000, 461, 7513, - -1000, -1000, -1000, 809, 252, 252, 134, -1000, -1000, 12417, - -1000, -1000, -1000, -1000, 670, -1000, -1000, -1000, 3656, 6508, - -1000, 323, 2222, 2020, -1000, 8266, 8266, -1000, -1000, 572, - 6508, 252, -1000, -1000, -1000, 63, 415, 63, 8266, 8266, - -1000, 8266, 8266, -1000, -166, 665, 237, -1000, 7513, 326, - -1000, 4448, -1000, 8266, 8266, -1000, -1000, -1000, -1000, 754, - 12659, 714, -1000, 9503, 12175, 667, -1000, 245, 895, 742, - 753, 733, -1000, -1000, -1000, -1000, 787, -1000, 780, -1000, - -1000, -1000, -1000, -1000, 103, 88, 87, 12175, -1000, 917, - 7513, 627, -1000, -1000, -1000, -122, -137, -1000, -1000, -1000, - 3128, -1000, 3128, 12175, 47, -1000, 495, 495, -1000, -1000, - -1000, 739, 752, 8266, -1000, -1000, -1000, 528, 176, 176, - -1000, 254, -1000, -1000, -1000, 563, -1000, 559, 680, 556, - 12417, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 12417, -1000, -1000, - -1000, -1000, -1000, 12175, -178, 484, 12175, 12175, 12417, -1000, - 320, -1000, 252, -1000, 4184, -1000, 936, 10722, -1000, -1000, - 481, -1000, 8266, 2222, 2222, -1000, -1000, 481, 726, 726, - -1000, 726, 734, -1000, 726, -3, 726, -21, 481, 481, - 2003, 1956, 1798, 1648, 714, -160, -1000, 252, 7513, -1000, - 1551, 1471, -1000, 870, 581, 647, -1000, -1000, 6257, 481, - 532, 132, 527, -1000, 917, 12659, 7513, -1000, -1000, 7513, - 729, -1000, 7513, -1000, -1000, -1000, 714, 714, 714, 527, - 906, 252, -1000, -1000, -1000, -1000, 2864, -1000, 524, -1000, - 726, -1000, -1000, -1000, 12175, -61, 954, 2222, -1000, -1000, - -1000, -1000, -1000, -37, 449, -37, 400, -1000, 385, 3392, - -1000, -1000, -1000, -1000, 873, -1000, 4184, -1000, -1000, 720, - -1000, -1000, -1000, 934, 668, -1000, 2222, -1000, -1000, 92, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 8266, 8266, - 8266, 8266, 8266, 481, 442, 252, 8266, 8266, 848, -1000, - 714, -1000, -1000, 662, 12175, 12175, -1000, 12175, 906, -1000, - 252, 252, 12175, 252, 12175, 12175, 12175, 9261, -1000, 133, - 12175, -1000, 514, -1000, 177, -1000, -138, 176, -1000, 176, - 515, 506, -1000, 714, 657, -1000, 241, 12175, 922, 911, - -1000, -1000, 395, 395, 395, 395, 61, -1000, -1000, 395, - 395, 953, -1000, 714, -1000, 711, 124, -1000, -1000, -1000, - 492, 489, 489, 489, 141, 133, -1000, 402, 238, 441, - -1000, 43, 12175, 319, 847, -1000, 838, -1000, -1000, -1000, - -1000, -1000, 28, 4184, 3128, 480, -1000, 7513, 7513, -1000, - -1000, -1000, -1000, 481, 45, -183, -1000, -1000, 12659, 647, - 481, 12175, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 328, - -1000, -1000, 12417, -1000, -1000, 396, -1000, -1000, 472, -1000, - 12175, -1000, -1000, 686, 252, 642, -1000, 808, -176, -186, - 633, -1000, -1000, -1000, 715, -1000, -1000, 28, 825, -178, - -1000, 807, -1000, 12175, -1000, 25, -1000, -180, 470, 16, - -184, 751, 714, -187, 744, -1000, 942, 7764, -1000, -1000, - 952, 158, 158, 395, 481, -1000, -1000, -1000, 54, 399, - -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 607, 12192, -1000, 2022, -1000, 531, 3154, + 116, 529, 297, 524, 12192, 12192, 3154, 43, 70, 115, + 12192, 711, 114, 12192, 902, 782, 12192, 520, 518, -1000, + 5002, -1000, 3154, 3154, -1000, -1000, -1000, 3154, 3154, 3154, + 12192, 3154, 3154, -1000, -1000, -1000, -1000, -1000, 3154, 3154, + -1000, 978, 349, -1000, -1000, -1000, -1000, 7539, -1000, 781, + -1000, -1000, -1000, -1000, -1000, -1000, 988, 208, 536, 166, + 708, -1000, 422, 925, 540, 820, 10013, 792, -1000, -1000, + 12192, -1000, 7539, 7539, 428, -1000, 10981, -1000, -1000, 3946, + 259, 8292, 388, 368, 8292, 8292, 8292, 8292, 8292, 8292, + 8292, 8292, 8292, 8292, 8292, 8292, 8292, 8292, 8292, 453, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 515, -1000, + 716, 724, 724, 202, 202, 202, 202, 202, 202, 202, + 8543, 6032, 540, 582, 381, 7288, 6534, 6534, 7539, 7539, + 7036, 6785, 6534, 914, 287, 381, 12434, -1000, -1000, 8041, + -1000, -1000, -1000, -1000, -1000, 540, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 11950, 11950, 6534, 6534, 6534, 6534, 59, + 12192, -1000, 657, 923, -1000, -1000, -1000, 912, 9520, 9771, + 59, 663, 10497, 12192, -1000, -1000, 10497, 12192, 3682, 4738, + 707, -92, 669, -1000, -89, -103, 5781, 187, -1000, -1000, + -1000, -1000, 2890, 415, 600, 318, -51, -1000, -1000, -1000, + 715, -1000, 715, 715, 715, 715, -20, -20, -20, -20, + -1000, -1000, -1000, -1000, -1000, 743, 741, -1000, 715, 715, + 715, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 740, + 740, 740, 722, 722, 748, -1000, 12192, 3154, 896, 3154, + -1000, 79, -1000, 11950, 11950, 12192, 12192, 138, 12192, 12192, + 699, -1000, 12192, 3154, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 12192, + 300, 12192, 12192, 381, 12192, -1000, 830, 7539, 7539, 4474, + 7539, -1000, -1000, -1000, 860, -1000, 914, 935, -1000, 842, + 839, 6534, -1000, -1000, 259, 267, -1000, -1000, 407, -1000, + -1000, -1000, -1000, 159, 675, -1000, 2171, -1000, -1000, -1000, + -1000, 388, 8292, 8292, 8292, 87, 2171, 2053, 1986, 709, + 202, 203, 203, 191, 191, 191, 191, 191, 462, 462, + -1000, -1000, -1000, 540, -1000, -1000, -1000, 540, 6534, 693, + -1000, -1000, 7539, -1000, 540, 566, 566, 396, 443, 248, + 977, 566, 245, 976, 566, 566, 6534, 288, -1000, 7539, + 540, -1000, 156, -1000, 643, 679, 671, 566, 540, 566, + 566, 630, 675, -1000, 12434, 10497, 10497, 10497, 10497, 10497, + -1000, 816, 810, -1000, 803, 802, 812, 12192, -1000, 579, + 9520, 193, 675, -1000, 10739, -1000, -1000, 968, 10497, 646, + -1000, 646, -1000, 155, -1000, -1000, 669, -92, -83, -1000, + -1000, -1000, -1000, 381, -1000, 469, 665, 2626, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 727, 513, -1000, 880, 218, + 217, 501, 875, -1000, -1000, -1000, 856, -1000, 304, -55, + -1000, -1000, 431, -20, -20, -1000, -1000, 187, 847, 187, + 187, 187, 455, 455, -1000, -1000, -1000, -1000, 424, -1000, + -1000, -1000, 406, -1000, 780, 11950, 3154, -1000, -1000, -1000, + -1000, 251, 251, 201, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 55, 746, -1000, -1000, -1000, + 35, 20, 113, -1000, 3154, -1000, 349, -1000, 454, 7539, + -1000, -1000, -1000, 828, 381, 381, 152, -1000, -1000, 12192, + -1000, -1000, -1000, -1000, 704, -1000, -1000, -1000, 3418, 6534, + -1000, 87, 2171, 1947, -1000, 8292, 8292, -1000, -1000, 566, + 6534, 381, -1000, -1000, -1000, 103, 453, 103, 8292, 8292, + -1000, 8292, 8292, -1000, -158, 676, 283, -1000, 7539, 414, + -1000, 4474, -1000, 8292, 8292, -1000, -1000, -1000, -1000, 779, + 12434, 675, -1000, 9278, 11950, 670, -1000, 271, 923, 736, + 778, 775, -1000, -1000, -1000, -1000, 801, -1000, 800, -1000, + -1000, -1000, -1000, -1000, 126, 125, 118, 11950, -1000, 937, + 7539, 646, -1000, -1000, 212, -1000, -1000, -120, -109, -1000, + -1000, -1000, 2890, -1000, 2890, 11950, 76, -1000, 501, 501, + -1000, -1000, -1000, 725, 777, 8292, -1000, -1000, -1000, 595, + 187, 187, -1000, 236, -1000, -1000, -1000, 562, -1000, 560, + 662, 557, 12192, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 12192, + -1000, -1000, -1000, -1000, -1000, 11950, -169, 492, 11950, 11950, + 12192, -1000, 300, -1000, 381, -1000, 4210, -1000, 968, 10497, + -1000, -1000, 540, -1000, 8292, 2171, 2171, -1000, -1000, 540, + 715, 715, -1000, 715, 722, -1000, 715, -1, 715, -2, + 540, 540, 2038, 1908, 1821, 1622, 675, -153, -1000, 381, + 7539, -1000, 1489, 1365, -1000, 885, 634, 638, -1000, -1000, + 6283, 540, 551, 151, 546, -1000, 937, 12434, 7539, -1000, + -1000, 7539, 721, -1000, 7539, -1000, -1000, -1000, 675, 675, + 675, 546, 925, 381, -1000, -1000, -1000, -1000, 2626, -1000, + 544, -1000, 715, -1000, -1000, -1000, 11950, -47, 987, 2171, + -1000, -1000, -1000, -1000, -1000, -20, 445, -20, 402, -1000, + 335, 3154, -1000, -1000, -1000, -1000, 889, -1000, 4210, -1000, + -1000, 713, -1000, -1000, -1000, 962, 656, -1000, 2171, -1000, + -1000, 112, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 8292, 8292, 8292, 8292, 8292, 540, 441, 381, 8292, 8292, + 874, -1000, 675, -1000, -1000, 674, 11950, 11950, -1000, 11950, + 925, -1000, 381, 381, 11950, 381, 11950, 11950, 11950, 9036, + -1000, 162, 11950, -1000, 539, -1000, 209, -1000, -162, 187, + -1000, 187, 592, 586, -1000, 675, 648, -1000, 269, 11950, + 960, 947, -1000, -1000, 643, 643, 643, 643, 26, -1000, + -1000, 643, 643, 984, -1000, 675, -1000, 716, 145, -1000, + -1000, -1000, 500, 487, 487, 487, 193, 162, -1000, 481, + 263, 433, -1000, 72, 11950, 308, 873, -1000, 859, -1000, + -1000, -1000, -1000, -1000, 54, 4210, 2890, 480, -1000, 7539, + 7539, -1000, -1000, -1000, -1000, 540, 60, -174, -1000, -1000, + 12434, 638, 540, 11950, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 331, -1000, -1000, 12192, -1000, -1000, 389, -1000, -1000, + 467, -1000, 11950, -1000, -1000, 746, 381, 633, -1000, 825, + -165, -187, 610, -1000, -1000, -1000, 710, -1000, -1000, 54, + 835, -169, -1000, 824, -1000, 11950, -1000, 51, -1000, -170, + 463, 49, -176, 773, 675, -188, 770, -1000, 973, 7790, + -1000, -1000, 983, 195, 195, 643, 540, -1000, -1000, -1000, + 82, 371, -1000, -1000, -1000, -1000, -1000, -1000, } var yyPgo = [...]int{ - 0, 1145, 76, 507, 1142, 1140, 1139, 1138, 1137, 1136, - 1134, 1133, 1132, 1131, 1130, 1128, 1127, 1126, 1125, 1124, - 1123, 1122, 1121, 1120, 1119, 1117, 97, 1116, 1114, 1113, - 84, 1112, 61, 1111, 1110, 37, 131, 69, 42, 278, - 1106, 47, 52, 62, 1105, 35, 1101, 1099, 71, 1097, - 50, 1095, 1093, 1758, 1091, 1089, 14, 27, 1088, 1085, - 1084, 1080, 66, 1016, 1079, 1078, 17, 1077, 1076, 93, - 1074, 53, 8, 12, 21, 18, 1073, 73, 7, 1072, - 46, 1071, 1070, 1067, 1066, 16, 1065, 54, 1064, 20, - 51, 1062, 26, 60, 30, 19, 6, 70, 58, 1061, - 23, 59, 55, 1060, 1059, 450, 1058, 1055, 41, 1052, - 1050, 24, 166, 407, 1049, 1048, 1047, 1046, 38, 0, - 760, 288, 65, 1042, 1041, 1037, 1461, 86, 49, 13, - 1036, 44, 63, 34, 1035, 1034, 40, 1032, 1030, 1027, - 1026, 1024, 1020, 1019, 22, 1007, 1006, 1005, 79, 33, - 1004, 1003, 56, 25, 1002, 1001, 1000, 45, 57, 999, - 998, 48, 29, 997, 996, 994, 993, 992, 31, 10, - 991, 15, 990, 11, 989, 28, 987, 4, 985, 9, - 983, 3, 977, 5, 43, 1, 975, 2, 972, 971, - 337, 64, 970, 968, 75, + 0, 1213, 21, 488, 1211, 1210, 1209, 1206, 1203, 1201, + 1197, 1196, 1194, 1193, 1192, 1191, 1190, 1188, 1186, 1184, + 1183, 1180, 1179, 1178, 1176, 1175, 111, 1174, 1173, 1170, + 75, 1168, 71, 1167, 1166, 44, 63, 61, 42, 930, + 1165, 47, 50, 91, 1148, 35, 1147, 1144, 82, 1143, + 1142, 45, 1141, 1140, 1367, 1139, 62, 1138, 14, 56, + 1137, 1134, 1133, 1132, 70, 614, 1128, 1126, 13, 1125, + 1123, 78, 1118, 54, 8, 16, 18, 25, 1117, 247, + 11, 1113, 53, 1112, 1111, 1109, 1107, 31, 1105, 55, + 1104, 23, 57, 1103, 7, 64, 29, 20, 9, 93, + 60, 1102, 24, 65, 49, 1101, 1097, 440, 1096, 1094, + 46, 1092, 1091, 41, 173, 507, 1090, 1088, 1080, 1079, + 38, 0, 431, 317, 76, 1078, 1076, 1075, 1326, 37, + 52, 17, 1073, 103, 51, 34, 1072, 1070, 40, 1069, + 1068, 1064, 1062, 1060, 1059, 1058, 102, 1056, 1054, 1053, + 19, 33, 1052, 1051, 69, 27, 1047, 1046, 1044, 48, + 58, 1043, 1042, 59, 30, 1039, 1028, 1023, 1022, 1021, + 26, 6, 1020, 15, 1017, 12, 1016, 28, 1015, 4, + 1014, 10, 1013, 3, 1012, 5, 43, 1, 1011, 2, + 1005, 1001, 100, 179, 66, 999, 117, } var yyR1 = [...]int{ - 0, 188, 189, 189, 1, 1, 1, 1, 1, 1, + 0, 190, 191, 191, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 6, 3, 4, 4, 5, 5, 7, 7, 29, 29, 8, 9, 9, - 9, 192, 192, 48, 48, 93, 93, 10, 10, 10, - 10, 98, 98, 102, 102, 102, 103, 103, 103, 103, - 134, 134, 11, 11, 11, 11, 11, 11, 11, 183, - 183, 182, 181, 181, 180, 180, 179, 17, 164, 166, - 166, 165, 165, 165, 165, 158, 137, 137, 137, 137, - 140, 140, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 139, 139, 139, 139, 139, 141, 141, 141, 141, - 141, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, - 143, 143, 143, 143, 157, 157, 144, 144, 152, 152, - 153, 153, 153, 150, 150, 151, 151, 154, 154, 154, - 146, 146, 147, 147, 155, 155, 148, 148, 148, 149, - 149, 149, 156, 156, 156, 156, 156, 145, 145, 159, - 159, 174, 174, 173, 173, 173, 163, 163, 170, 170, - 170, 170, 170, 161, 161, 162, 162, 172, 172, 171, - 160, 160, 175, 175, 175, 175, 186, 187, 185, 185, - 185, 185, 185, 167, 167, 167, 168, 168, 168, 169, - 169, 169, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 178, 176, 176, 177, - 177, 13, 18, 18, 14, 14, 14, 14, 14, 15, - 15, 19, 20, 20, 20, 20, 20, 20, 20, 20, + 9, 9, 194, 194, 48, 48, 49, 49, 95, 95, + 10, 10, 10, 10, 100, 100, 104, 104, 104, 105, + 105, 105, 105, 136, 136, 11, 11, 11, 11, 11, + 11, 11, 185, 185, 184, 183, 183, 182, 182, 181, + 17, 166, 168, 168, 167, 167, 167, 167, 160, 139, + 139, 139, 139, 142, 142, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 141, 141, 141, 141, 141, 143, + 143, 143, 143, 143, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, + 145, 145, 145, 145, 145, 145, 145, 159, 159, 146, + 146, 154, 154, 155, 155, 155, 152, 152, 153, 153, + 156, 156, 156, 148, 148, 149, 149, 157, 157, 150, + 150, 150, 151, 151, 151, 158, 158, 158, 158, 158, + 147, 147, 161, 161, 176, 176, 175, 175, 175, 165, + 165, 172, 172, 172, 172, 172, 163, 163, 164, 164, + 174, 174, 173, 162, 162, 177, 177, 177, 177, 188, + 189, 187, 187, 187, 187, 187, 169, 169, 169, 170, + 170, 170, 171, 171, 171, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 186, 186, + 186, 186, 186, 186, 186, 186, 186, 186, 186, 180, + 178, 178, 179, 179, 13, 18, 18, 14, 14, 14, + 14, 14, 15, 15, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 109, 109, 107, 107, 110, 110, - 108, 108, 108, 111, 111, 111, 135, 135, 135, 21, - 21, 23, 23, 24, 25, 22, 22, 22, 22, 22, - 22, 22, 16, 193, 26, 27, 27, 28, 28, 28, - 32, 32, 32, 30, 30, 31, 31, 37, 37, 36, - 36, 38, 38, 38, 38, 123, 123, 123, 122, 122, - 40, 40, 41, 41, 42, 42, 43, 43, 43, 43, - 55, 55, 92, 92, 94, 94, 44, 44, 44, 44, - 45, 45, 46, 46, 47, 47, 130, 130, 129, 129, - 129, 128, 128, 49, 49, 49, 51, 50, 50, 50, - 50, 52, 52, 54, 54, 53, 53, 56, 56, 56, - 56, 57, 57, 39, 39, 39, 39, 39, 39, 39, - 106, 106, 59, 59, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 70, 70, 70, 70, 70, 70, - 60, 60, 60, 60, 60, 60, 60, 35, 35, 71, - 71, 71, 77, 72, 72, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 67, 67, 67, + 20, 20, 20, 20, 20, 20, 20, 111, 111, 109, + 109, 112, 112, 110, 110, 110, 113, 113, 113, 137, + 137, 137, 21, 21, 23, 23, 24, 25, 22, 22, + 22, 22, 22, 22, 22, 16, 195, 26, 27, 27, + 28, 28, 28, 32, 32, 32, 30, 30, 31, 31, + 37, 37, 36, 36, 38, 38, 38, 38, 125, 125, + 125, 124, 124, 40, 40, 41, 41, 42, 42, 43, + 43, 43, 43, 57, 57, 94, 94, 96, 96, 44, + 44, 44, 44, 45, 45, 46, 46, 47, 47, 132, + 132, 131, 131, 131, 130, 130, 50, 50, 50, 52, + 51, 51, 51, 51, 53, 53, 55, 55, 54, 54, + 56, 58, 58, 58, 58, 59, 59, 39, 39, 39, + 39, 39, 39, 39, 108, 108, 61, 61, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 72, 72, + 72, 72, 72, 72, 62, 62, 62, 62, 62, 62, + 62, 35, 35, 73, 73, 73, 79, 74, 74, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 66, 194, - 194, 69, 68, 68, 68, 68, 68, 68, 33, 33, - 33, 33, 33, 133, 133, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 81, 81, - 34, 34, 79, 79, 80, 82, 82, 78, 78, 78, - 62, 62, 62, 62, 62, 62, 62, 62, 64, 64, - 64, 83, 83, 84, 84, 85, 85, 86, 86, 87, - 88, 88, 88, 89, 89, 89, 89, 90, 90, 90, - 61, 61, 61, 61, 61, 61, 91, 91, 91, 91, - 95, 95, 73, 73, 75, 75, 74, 76, 96, 96, - 100, 97, 97, 101, 101, 101, 101, 99, 99, 99, - 125, 125, 125, 104, 104, 112, 112, 113, 113, 105, - 105, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 115, 115, 115, 116, 116, 117, 117, 117, 124, - 124, 120, 120, 121, 121, 126, 126, 127, 127, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 190, - 191, 131, 132, 132, 132, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 69, 69, 69, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 196, 196, 71, 70, 70, 70, 70, + 70, 70, 33, 33, 33, 33, 33, 135, 135, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 83, 83, 34, 34, 81, 81, 82, 84, + 84, 80, 80, 80, 64, 64, 64, 64, 64, 64, + 64, 64, 66, 66, 66, 85, 85, 86, 86, 87, + 87, 88, 88, 89, 90, 90, 90, 91, 91, 91, + 91, 92, 92, 92, 63, 63, 63, 63, 63, 63, + 93, 93, 93, 93, 97, 97, 75, 75, 77, 77, + 76, 78, 98, 98, 102, 99, 99, 103, 103, 103, + 103, 101, 101, 101, 127, 127, 127, 106, 106, 114, + 114, 115, 115, 107, 107, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, + 119, 119, 119, 126, 126, 122, 122, 123, 123, 128, + 128, 129, 129, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 192, 193, 133, 134, 134, 134, } var yyR2 = [...]int{ @@ -2275,66 +2254,67 @@ var yyR2 = [...]int{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 6, 7, 5, 10, 1, 3, 1, 3, 7, 8, 1, 1, 9, 8, 7, - 6, 1, 1, 1, 3, 0, 4, 3, 4, 5, - 4, 1, 3, 3, 2, 2, 2, 2, 2, 1, - 1, 1, 2, 2, 8, 4, 6, 5, 5, 0, - 2, 1, 0, 2, 1, 3, 3, 4, 4, 2, - 4, 1, 3, 3, 3, 8, 3, 1, 1, 1, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, - 1, 4, 4, 2, 2, 3, 3, 3, 3, 1, - 1, 1, 1, 1, 6, 6, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 3, 0, 3, 0, 5, - 0, 3, 5, 0, 1, 0, 1, 0, 1, 2, - 0, 2, 0, 3, 0, 1, 0, 3, 3, 0, - 2, 2, 0, 2, 1, 2, 1, 0, 2, 5, - 4, 1, 2, 2, 3, 2, 0, 1, 2, 3, - 3, 2, 2, 1, 1, 0, 1, 1, 3, 2, - 3, 1, 10, 11, 11, 12, 3, 3, 1, 1, - 2, 2, 2, 0, 1, 3, 1, 2, 3, 1, - 1, 1, 6, 7, 7, 7, 7, 4, 5, 7, - 5, 5, 5, 12, 7, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 7, 1, 3, 8, - 8, 3, 3, 5, 4, 6, 5, 4, 4, 3, - 2, 3, 4, 4, 3, 4, 4, 4, 4, 4, - 4, 3, 3, 2, 3, 3, 2, 3, 4, 3, - 7, 5, 4, 2, 4, 2, 2, 2, 2, 3, - 3, 5, 2, 3, 1, 1, 0, 1, 1, 1, - 0, 2, 2, 0, 2, 2, 0, 1, 1, 2, - 1, 1, 2, 1, 1, 2, 2, 2, 2, 2, - 3, 3, 2, 0, 2, 0, 2, 1, 2, 2, - 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, - 3, 1, 2, 3, 5, 0, 1, 2, 1, 1, - 0, 2, 1, 3, 1, 1, 1, 3, 1, 3, - 3, 7, 1, 3, 1, 3, 4, 4, 4, 3, - 2, 4, 0, 1, 0, 2, 0, 1, 0, 1, - 2, 1, 1, 1, 2, 2, 1, 2, 3, 2, - 3, 2, 2, 2, 1, 1, 3, 0, 5, 5, - 5, 0, 2, 1, 3, 3, 2, 3, 1, 2, - 0, 3, 1, 1, 3, 3, 4, 4, 5, 3, - 4, 5, 6, 2, 1, 2, 1, 2, 1, 2, - 1, 1, 1, 1, 1, 1, 1, 0, 2, 1, - 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, - 2, 2, 3, 1, 1, 1, 1, 4, 5, 6, - 4, 4, 6, 6, 6, 8, 8, 8, 8, 9, - 7, 5, 4, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 8, 8, 0, - 2, 3, 4, 4, 4, 4, 4, 4, 0, 3, - 4, 7, 3, 1, 1, 2, 3, 3, 1, 2, - 2, 1, 2, 1, 2, 2, 1, 2, 0, 1, - 0, 2, 1, 2, 4, 0, 2, 1, 3, 5, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 0, 3, 0, 2, 0, 3, 1, 3, 2, - 0, 1, 1, 0, 2, 4, 4, 0, 2, 4, - 2, 1, 3, 5, 4, 6, 1, 3, 3, 5, - 0, 5, 1, 3, 1, 2, 3, 1, 1, 3, - 3, 1, 3, 3, 3, 3, 3, 1, 2, 1, - 1, 1, 1, 1, 1, 0, 2, 0, 3, 0, + 6, 6, 1, 1, 1, 3, 1, 3, 0, 4, + 3, 4, 5, 4, 1, 3, 3, 2, 2, 2, + 2, 2, 1, 1, 1, 2, 2, 8, 4, 6, + 5, 5, 0, 2, 1, 0, 2, 1, 3, 3, + 4, 4, 2, 4, 1, 3, 3, 3, 8, 3, + 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, + 2, 2, 2, 1, 4, 4, 2, 2, 3, 3, + 3, 3, 1, 1, 1, 1, 1, 6, 6, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 3, 0, + 3, 0, 5, 0, 3, 5, 0, 1, 0, 1, + 0, 1, 2, 0, 2, 0, 3, 0, 1, 0, + 3, 3, 0, 2, 2, 0, 2, 1, 2, 1, + 0, 2, 5, 4, 1, 2, 2, 3, 2, 0, + 1, 2, 3, 3, 2, 2, 1, 1, 0, 1, + 1, 3, 2, 3, 1, 10, 11, 11, 12, 3, + 3, 1, 1, 2, 2, 2, 0, 1, 3, 1, + 2, 3, 1, 1, 1, 6, 7, 7, 7, 7, + 4, 5, 7, 5, 5, 5, 12, 7, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, + 1, 3, 8, 8, 3, 3, 5, 4, 6, 5, + 4, 4, 3, 2, 3, 4, 4, 3, 4, 4, + 4, 4, 4, 4, 3, 3, 2, 3, 3, 2, + 3, 4, 3, 7, 5, 4, 2, 4, 2, 2, + 2, 2, 3, 3, 5, 2, 3, 1, 1, 0, + 1, 1, 1, 0, 2, 2, 0, 2, 2, 0, + 1, 1, 2, 1, 1, 2, 1, 1, 2, 2, + 2, 2, 2, 3, 3, 2, 0, 2, 0, 2, + 1, 2, 2, 0, 1, 1, 0, 1, 0, 1, + 0, 1, 1, 3, 1, 2, 3, 5, 0, 1, + 2, 1, 1, 0, 2, 1, 3, 1, 1, 1, + 3, 1, 3, 3, 7, 1, 3, 1, 3, 4, + 4, 4, 3, 2, 4, 0, 1, 0, 2, 0, + 1, 0, 1, 2, 1, 1, 1, 2, 2, 1, + 2, 3, 2, 3, 2, 2, 2, 1, 1, 3, + 3, 0, 5, 5, 5, 0, 2, 1, 3, 3, + 2, 3, 1, 2, 0, 3, 1, 1, 3, 3, + 4, 4, 5, 3, 4, 5, 6, 2, 1, 2, + 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, + 1, 0, 2, 1, 1, 1, 3, 1, 3, 1, + 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, + 2, 2, 2, 2, 2, 2, 3, 1, 1, 1, + 1, 4, 5, 6, 4, 4, 6, 6, 6, 8, + 8, 8, 8, 9, 7, 5, 4, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 8, 8, 0, 2, 3, 4, 4, 4, 4, + 4, 4, 0, 3, 4, 7, 3, 1, 1, 2, + 3, 3, 1, 2, 2, 1, 2, 1, 2, 2, + 1, 2, 0, 1, 0, 2, 1, 2, 4, 0, + 2, 1, 3, 5, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 0, 3, 0, 2, 0, + 3, 1, 3, 2, 0, 1, 1, 0, 2, 4, + 4, 0, 2, 4, 2, 1, 3, 5, 4, 6, + 1, 3, 3, 5, 0, 5, 1, 3, 1, 2, + 3, 1, 1, 3, 3, 1, 3, 3, 3, 3, + 3, 1, 2, 1, 1, 1, 1, 1, 1, 0, + 2, 0, 3, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, + 0, 1, 1, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2355,20 +2335,19 @@ var yyR2 = [...]int{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 0, 0, 1, 1, } var yyChk = [...]int{ - -1000, -188, -1, -2, -6, -7, -8, -9, -10, -11, + -1000, -190, -1, -2, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -19, -20, -21, -23, -24, -25, -22, -16, -3, -4, 6, 7, -29, 9, 10, 30, -17, 115, 116, 118, 117, 149, 119, 142, 50, 162, 163, 165, 166, 25, 143, 144, 147, 148, 31, 32, - 121, -190, 8, 252, 54, -189, 269, -85, 15, -28, - 5, -26, -193, -26, -26, -26, -26, -26, -164, -166, - 54, 90, -117, 125, 72, 244, 122, 123, 129, -120, - 57, -119, 262, 135, 162, 173, 167, 194, 186, 263, + 121, -192, 8, 252, 54, -191, 269, -87, 15, -28, + 5, -26, -195, -26, -26, -26, -26, -26, -166, -168, + 54, 90, -119, 125, 72, 244, 122, 123, 129, -122, + 57, -121, 262, 135, 162, 173, 167, 194, 186, 263, 136, 184, 187, 231, 214, 226, 66, 165, 240, 145, 182, 178, 176, 27, 228, 199, 267, 177, 227, 121, 138, 133, 200, 204, 232, 171, 172, 234, 198, 134, @@ -2379,276 +2358,278 @@ var yyChk = [...]int{ 38, 211, 169, 132, 163, 159, 217, 190, 154, 180, 181, 195, 168, 191, 164, 156, 149, 241, 212, 268, 188, 185, 160, 157, 158, 218, 219, 220, 221, 222, - 223, 161, 265, 237, 183, 213, -105, 125, 221, 127, - 123, 123, 124, 125, 244, 122, 123, -53, -126, 57, - -119, 125, 123, 108, 187, 231, 115, 215, 216, 228, - 124, 33, 229, 155, -135, 123, -107, 214, 218, 219, - 220, 223, 221, 161, 57, 233, 232, 224, -126, 164, - -131, -131, -131, -131, -131, 217, 217, -131, -2, -89, - 17, 16, -5, -3, -190, 6, 20, 21, -32, 40, - 41, -27, -38, 99, -39, -126, -58, 74, -63, 29, - 57, -119, 23, -62, -59, -78, -76, -77, 108, 109, - 110, 97, 98, 105, 75, 111, -67, -65, -66, -68, + 223, 161, 265, 237, 183, 213, -107, 125, 221, 127, + 123, 123, 124, 125, 244, 122, 123, -54, -128, 57, + -121, 125, 123, 108, 187, 231, 115, 215, 216, 228, + 124, 33, 229, 155, -137, 123, -109, 214, 218, 219, + 220, 223, 221, 161, 57, 233, 232, 224, -128, 164, + -133, -133, -133, -133, -133, 217, 217, -133, -2, -91, + 17, 16, -5, -3, -192, 6, 20, 21, -32, 40, + 41, -27, -38, 99, -39, -128, -60, 74, -65, 29, + 57, -121, 23, -64, -61, -80, -78, -79, 108, 109, + 110, 97, 98, 105, 75, 111, -69, -67, -68, -70, 59, 58, 67, 60, 61, 62, 63, 68, 69, 70, - -120, -74, -190, 44, 45, 253, 254, 255, 256, 261, + -122, -76, -192, 44, 45, 253, 254, 255, 256, 261, 257, 77, 34, 243, 251, 250, 249, 247, 248, 245, - 246, 259, 260, 128, 244, 103, 252, -105, -105, 11, - -48, -53, -97, -134, 164, -101, 233, 232, -121, -99, - -120, -118, 231, 187, 230, 120, 73, 22, 24, 209, - 76, 108, 16, 77, 107, 253, 115, 48, 245, 246, - 243, 255, 256, 244, 215, 29, 10, 25, 143, 21, - 101, 117, 80, 81, 146, 23, 144, 70, 19, 51, - 11, 13, 14, 128, 127, 92, 124, 46, 8, 111, - 26, 89, 42, 28, 44, 90, 17, 247, 248, 31, - 261, 150, 103, 49, 36, 74, 68, 71, 52, 72, - 15, 47, 91, 118, 252, 45, 122, 6, 258, 30, - 142, 43, 123, 79, 259, 260, 126, 69, 5, 129, - 32, 9, 50, 53, 249, 250, 251, 34, 78, 12, - -165, 90, -158, 57, -53, 124, -53, 252, -113, 128, - -113, -113, 123, -53, 115, 117, 120, 52, -18, -53, - -112, 128, 57, -112, -112, -112, -53, 112, -53, 57, - 30, -132, -190, -121, 244, 57, 155, 123, 156, 125, - -132, -132, -132, -132, -132, 159, 160, -132, -110, -109, - 226, 227, 217, 225, 12, 217, 158, -132, -131, -131, - -191, 56, -90, 19, 31, -39, -126, -86, -87, -39, - -85, -2, -26, 36, -30, 21, 65, 11, -123, 73, - 72, 89, -122, 22, -120, 59, 112, -39, -60, 92, - 74, 90, 91, 76, 94, 93, 104, 97, 98, 99, - 100, 101, 102, 103, 95, 96, 107, 82, 83, 84, - 85, 86, 87, 88, -106, -190, -77, -190, 113, 114, - -63, -63, -63, -63, -63, -63, -63, -63, -190, -2, - -72, -39, -190, -190, -190, -190, -190, -190, -190, -190, - -190, -81, -39, -190, -194, -69, -190, -194, -69, -194, - -69, -194, -190, -194, -69, -194, -69, -194, -194, -69, - -190, -190, -190, -190, -190, -190, -54, 26, -53, -41, - -42, -43, -44, -55, -77, -190, -53, -53, -48, -192, - 55, 11, 53, 55, -97, 164, -98, -102, 234, 236, - 82, -125, -120, 59, 29, 30, 56, 55, -53, -137, - -140, -142, -141, -143, -138, -139, 184, 185, 108, 188, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 30, 145, 180, 181, 182, 183, 200, 201, 202, 203, - 204, 205, 206, 207, 167, 186, 263, 168, 169, 170, - 171, 172, 173, 175, 176, 177, 178, 179, 57, -132, - 125, 57, 74, 57, -53, -53, -132, 157, 157, 123, - 123, -53, 55, 126, -48, 23, 52, -53, 57, 57, - -127, -126, -118, -132, -132, -132, -132, -132, -53, -132, - -132, -132, -132, 11, -108, 11, 92, -39, 52, 9, - 92, 55, 18, 112, 55, -88, 24, 25, -89, -191, - -32, -64, -120, 60, 63, -31, 43, -53, -39, -39, - -70, 68, 74, 69, 70, -122, 99, -127, -121, -118, - -63, -71, -74, -77, 64, 92, 90, 91, 76, -63, - -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, - -63, -63, -63, -63, -133, 57, 59, 57, -62, -62, - -120, -37, 21, -36, -38, -191, 55, -191, -2, -36, - -36, -39, -39, -78, 59, -36, -78, 59, -36, -36, - -30, -79, -80, 78, -78, -120, -126, -191, -63, -120, - -120, -36, -37, -36, -36, -93, 151, -53, 30, 55, - -49, -51, -50, -52, 42, 46, 48, 43, 44, 45, - 49, -130, 22, -41, -190, -129, 151, -128, 22, -126, - 59, -93, 53, -41, -53, -101, -98, 55, 235, 237, - 238, 52, 71, -39, -149, 107, -167, -168, -169, -121, - 59, 60, -158, -159, -160, -170, 137, -175, 130, 132, - 129, -161, 138, 124, 28, 56, -154, 68, 74, -150, - 212, -144, 54, -144, -144, -144, -144, -148, 187, -148, - -148, -148, 54, 54, -144, -144, -144, -152, 54, -152, - -152, -153, 54, -153, -124, 53, -53, -132, 23, -132, - -114, 120, 117, 118, -178, 116, 209, 187, 66, 29, - 15, 253, 151, 268, 57, 152, -120, -120, -53, -53, - 120, 117, -53, -53, -53, -132, -53, -111, 90, 12, - -126, -126, -53, 38, -39, -39, -127, -87, -90, -104, - 19, 11, 34, 34, -36, 68, 69, 70, 112, -190, - -71, -63, -63, -63, -35, 146, 73, -191, -191, -36, - 55, -39, -191, -191, -191, 55, 53, 22, 11, 11, - -191, 11, 11, -191, -191, -36, -82, -80, 80, -39, - -191, 112, -191, 55, 55, -191, -191, -191, -191, -61, - 30, 34, -2, -190, -190, -96, -100, -78, -42, -43, + 246, 259, 260, 128, 244, 103, 252, -107, -107, 11, + -48, -49, -54, -56, -128, -99, -136, 164, -103, 233, + 232, -123, -101, -122, -120, 231, 187, 230, 120, 73, + 22, 24, 209, 76, 108, 16, 77, 107, 253, 115, + 48, 245, 246, 243, 255, 256, 244, 215, 29, 10, + 25, 143, 21, 101, 117, 80, 81, 146, 23, 144, + 70, 19, 51, 11, 13, 14, 128, 127, 92, 124, + 46, 8, 111, 26, 89, 42, 28, 44, 90, 17, + 247, 248, 31, 261, 150, 103, 49, 36, 74, 68, + 71, 52, 72, 15, 47, 91, 118, 252, 45, 122, + 6, 258, 30, 142, 43, 123, 79, 259, 260, 126, + 69, 5, 129, 32, 9, 50, 53, 249, 250, 251, + 34, 78, 12, -167, 90, -160, 57, -54, 124, -54, + 252, -115, 128, -115, -115, 123, -54, 115, 117, 120, + 52, -18, -54, -114, 128, 57, -114, -114, -114, -54, + 112, -54, 57, 30, -134, -192, -123, 244, 57, 155, + 123, 156, 125, -134, -134, -134, -134, -134, 159, 160, + -134, -112, -111, 226, 227, 217, 225, 12, 217, 158, + -134, -133, -133, -193, 56, -92, 19, 31, -39, -128, + -88, -89, -39, -87, -2, -26, 36, -30, 21, 65, + 11, -125, 73, 72, 89, -124, 22, -122, 59, 112, + -39, -62, 92, 74, 90, 91, 76, 94, 93, 104, + 97, 98, 99, 100, 101, 102, 103, 95, 96, 107, + 82, 83, 84, 85, 86, 87, 88, -108, -192, -79, + -192, 113, 114, -65, -65, -65, -65, -65, -65, -65, + -65, -192, -2, -74, -39, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -83, -39, -192, -196, -71, -192, + -196, -71, -196, -71, -196, -192, -196, -71, -196, -71, + -196, -196, -71, -192, -192, -192, -192, -192, -192, -55, + 26, -54, -41, -42, -43, -44, -57, -79, -192, -54, + -54, -48, -194, 55, 11, 53, -194, 55, 112, 55, + -99, 164, -100, -104, 234, 236, 82, -127, -122, 59, + 29, 30, 56, 55, -54, -139, -142, -144, -143, -145, + -140, -141, 184, 185, 108, 188, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 30, 145, 180, 181, + 182, 183, 200, 201, 202, 203, 204, 205, 206, 207, + 167, 186, 263, 168, 169, 170, 171, 172, 173, 175, + 176, 177, 178, 179, 57, -134, 125, 57, 74, 57, + -54, -54, -134, 157, 157, 123, 123, -54, 55, 126, + -48, 23, 52, -54, 57, 57, -129, -128, -120, -134, + -134, -134, -134, -134, -54, -134, -134, -134, -134, 11, + -110, 11, 92, -39, 52, 9, 92, 55, 18, 112, + 55, -90, 24, 25, -91, -193, -32, -66, -122, 60, + 63, -31, 43, -54, -39, -39, -72, 68, 74, 69, + 70, -124, 99, -129, -123, -120, -65, -73, -76, -79, + 64, 92, 90, 91, 76, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -135, 57, 59, 57, -64, -64, -122, -37, 21, -36, + -38, -193, 55, -193, -2, -36, -36, -39, -39, -80, + 59, -36, -80, 59, -36, -36, -30, -81, -82, 78, + -80, -122, -128, -193, -65, -122, -122, -36, -37, -36, + -36, -95, 151, -54, 30, 55, -50, -52, -51, -53, + 42, 46, 48, 43, 44, 45, 49, -132, 22, -41, + -192, -131, 151, -130, 22, -128, 59, -95, 53, -41, + -54, -41, -56, -128, 99, -103, -100, 55, 235, 237, + 238, 52, 71, -39, -151, 107, -169, -170, -171, -123, + 59, 60, -160, -161, -162, -172, 137, -177, 130, 132, + 129, -163, 138, 124, 28, 56, -156, 68, 74, -152, + 212, -146, 54, -146, -146, -146, -146, -150, 187, -150, + -150, -150, 54, 54, -146, -146, -146, -154, 54, -154, + -154, -155, 54, -155, -126, 53, -54, -134, 23, -134, + -116, 120, 117, 118, -180, 116, 209, 187, 66, 29, + 15, 253, 151, 268, 57, 152, -122, -122, -54, -54, + 120, 117, -54, -54, -54, -134, -54, -113, 90, 12, + -128, -128, -54, 38, -39, -39, -129, -89, -92, -106, + 19, 11, 34, 34, -36, 68, 69, 70, 112, -192, + -73, -65, -65, -65, -35, 146, 73, -193, -193, -36, + 55, -39, -193, -193, -193, 55, 53, 22, 11, 11, + -193, 11, 11, -193, -193, -36, -84, -82, 80, -39, + -193, 112, -193, 55, 55, -193, -193, -193, -193, -63, + 30, 34, -2, -192, -192, -98, -102, -80, -42, -43, -43, -42, -43, 42, 42, 42, 47, 42, 47, 42, - -50, -126, -191, -56, 50, 127, 51, -190, -128, -57, - 12, -41, -57, -102, -103, 239, 236, 242, 57, 59, - 55, -169, 82, 54, 57, 28, -161, -161, -162, 57, - -162, 28, -146, 29, 68, -151, 213, 60, -148, -148, - -149, 30, -149, -149, -149, -157, 59, -157, 60, 60, - 52, -120, -132, -131, -184, 131, 137, 138, 133, 57, - 124, 28, 130, 132, 151, 129, -184, -115, -116, 126, - 22, 124, 28, 151, -183, 53, 157, 157, 126, -132, - -108, 59, -39, 39, 112, -53, -40, 11, 99, -121, - -37, -35, 73, -63, -63, -191, -38, -136, 108, 184, - 145, 182, 178, 198, 189, 211, 180, 212, -133, -136, - -63, -63, -63, -63, 262, -85, 81, -39, 79, -121, - -63, -63, -95, 52, -96, -73, -75, -74, -190, -2, - -91, -120, -94, -120, -57, 55, 82, -46, -45, 52, - 53, -47, 52, -45, 42, 42, 124, 124, 124, -94, - -85, -39, -57, 236, 240, 241, -168, -169, -172, -171, - -120, -175, -162, -162, 54, -147, 52, -63, 56, -149, - -149, 57, 108, 56, 55, 56, 55, 56, 55, -53, - -131, -131, -53, -131, -120, -181, 265, -182, 57, -120, - -120, -53, -111, -57, -41, -191, -63, -191, -144, -144, - -144, -153, -144, 172, -144, 172, -191, -191, 19, 19, - 19, 19, -190, -34, 258, -39, 55, 55, 27, -95, - 55, -191, -191, -191, 55, 112, -191, 55, -85, -100, - -39, -39, 54, -39, -190, -190, -190, -191, -89, 56, - 55, -144, -92, -120, -155, 209, 9, -148, 59, -148, - 60, 60, -132, 26, -180, -179, -121, 54, -83, 13, - -148, 57, -63, -63, -63, -63, -63, -191, 59, -63, - -63, 28, -75, 34, -2, -190, -120, -120, -120, -89, - -92, -92, -92, -92, -129, -174, -173, 53, 134, 66, - -171, 56, 55, -156, 130, 28, 129, -66, -149, -149, - 56, 56, -190, 55, 82, -92, -84, 14, 16, -191, - -191, -191, -191, -33, 92, 265, -191, -191, 9, -73, - -2, 112, 56, -191, -191, -191, -56, -173, 57, -163, - 82, 59, 140, -120, -145, 66, 28, 28, -176, -177, - 151, -179, -169, 56, -39, -72, -191, 263, 49, 266, - -96, -191, -120, 60, -53, 59, -191, 55, -120, -183, - 39, 264, 267, 54, -177, 34, -181, 39, -92, 153, - 265, 56, 154, 266, -186, -187, 52, -190, 267, -187, - 52, 10, 9, -63, 150, -185, 141, 136, 139, 30, - -185, -191, -191, 135, 29, 68, + -51, -128, -193, -58, 50, 127, 51, -192, -130, -59, + 12, -41, -59, -59, 112, -104, -105, 239, 236, 242, + 57, 59, 55, -171, 82, 54, 57, 28, -163, -163, + -164, 57, -164, 28, -148, 29, 68, -153, 213, 60, + -150, -150, -151, 30, -151, -151, -151, -159, 59, -159, + 60, 60, 52, -122, -134, -133, -186, 131, 137, 138, + 133, 57, 124, 28, 130, 132, 151, 129, -186, -117, + -118, 126, 22, 124, 28, 151, -185, 53, 157, 157, + 126, -134, -110, 59, -39, 39, 112, -54, -40, 11, + 99, -123, -37, -35, 73, -65, -65, -193, -38, -138, + 108, 184, 145, 182, 178, 198, 189, 211, 180, 212, + -135, -138, -65, -65, -65, -65, 262, -87, 81, -39, + 79, -123, -65, -65, -97, 52, -98, -75, -77, -76, + -192, -2, -93, -122, -96, -122, -59, 55, 82, -46, + -45, 52, 53, -47, 52, -45, 42, 42, 124, 124, + 124, -96, -87, -39, -59, 236, 240, 241, -170, -171, + -174, -173, -122, -177, -164, -164, 54, -149, 52, -65, + 56, -151, -151, 57, 108, 56, 55, 56, 55, 56, + 55, -54, -133, -133, -54, -133, -122, -183, 265, -184, + 57, -122, -122, -54, -113, -59, -41, -193, -65, -193, + -146, -146, -146, -155, -146, 172, -146, 172, -193, -193, + 19, 19, 19, 19, -192, -34, 258, -39, 55, 55, + 27, -97, 55, -193, -193, -193, 55, 112, -193, 55, + -87, -102, -39, -39, 54, -39, -192, -192, -192, -193, + -91, 56, 55, -146, -94, -122, -157, 209, 9, -150, + 59, -150, 60, 60, -134, 26, -182, -181, -123, 54, + -85, 13, -150, 57, -65, -65, -65, -65, -65, -193, + 59, -65, -65, 28, -77, 34, -2, -192, -122, -122, + -122, -91, -94, -94, -94, -94, -131, -176, -175, 53, + 134, 66, -173, 56, 55, -158, 130, 28, 129, -68, + -151, -151, 56, 56, -192, 55, 82, -94, -86, 14, + 16, -193, -193, -193, -193, -33, 92, 265, -193, -193, + 9, -75, -2, 112, 56, -193, -193, -193, -58, -175, + 57, -165, 82, 59, 140, -122, -147, 66, 28, 28, + -178, -179, 151, -181, -171, 56, -39, -74, -193, 263, + 49, 266, -98, -193, -122, 60, -54, 59, -193, 55, + -122, -185, 39, 264, 267, 54, -179, 34, -183, 39, + -94, 153, 265, 56, 154, 266, -188, -189, 52, -192, + 267, -189, 52, 10, 9, -65, 150, -187, 141, 136, + 139, 30, -187, -193, -193, 135, 29, 68, } var yyDef = [...]int{ 23, -2, 2, -2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 555, 0, 313, 313, 313, 313, 313, 313, - 0, 626, 609, 0, 0, 0, 0, -2, 300, 301, - 0, 303, 304, 851, 851, 851, 851, 851, 0, 0, - 851, 0, 35, 36, 849, 1, 3, 563, 0, 0, - 317, 320, 315, 0, 609, 609, 0, 0, 62, 63, - 0, 0, 0, 835, 0, 607, 607, 607, 627, 628, - 631, 632, 734, 735, 736, 737, 738, 739, 740, 741, - 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, - 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, - 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, - 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, - 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, - 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, - 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, - 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, - 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, - 832, 833, 834, 836, 837, 838, 839, 840, 841, 842, - 843, 844, 845, 846, 847, 848, 0, 0, 0, 610, - 0, 605, 0, 605, 605, 605, 0, 250, 385, 635, - 636, 835, 0, 0, 0, 852, 0, 852, 852, 263, - 852, 852, 266, 852, 0, 852, 0, 273, 275, 276, - 277, 278, 0, 282, 852, 297, 298, 287, 299, 302, - 305, 306, 307, 308, 309, 851, 851, 312, 29, 567, - 0, 0, 555, 31, 0, 313, 318, 319, 323, 321, - 322, 314, 0, 331, 335, 0, 393, 0, 398, 400, - -2, -2, 0, 435, 436, 437, 438, 439, 0, 0, - 0, 0, 0, 0, 0, 0, 463, 464, 465, 466, - 540, 541, 542, 543, 544, 545, 546, 547, 402, 403, - 537, 587, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 528, 0, 499, 499, 499, 499, 499, 499, 499, - 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 43, 47, 0, 826, 591, -2, -2, 0, 0, - 633, 634, -2, 744, -2, 639, 640, 641, 642, 643, - 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, - 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, - 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, - 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, - 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, - 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, - 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, - 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, - 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, - 0, 0, 81, 0, 79, 0, 852, 0, 0, 0, - 0, 0, 0, 852, 0, 0, 0, 0, 241, 0, - 0, 0, 0, 0, 0, 0, 249, 0, 251, 852, - 852, 254, 853, 854, 852, 852, 852, 0, 852, 852, - 261, 262, 264, 265, 267, 852, 852, 269, 0, 290, - 288, 289, 284, 285, 0, 279, 280, 283, 310, 311, - 30, 850, 24, 0, 0, 564, 0, 556, 557, 560, - 563, 29, 320, 0, 325, 324, 316, 0, 332, 0, - 0, 0, 336, 0, 338, 339, 0, 396, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 420, 421, 422, - 423, 424, 425, 426, 399, 0, 413, 0, 0, 0, - 455, 456, 457, 458, 459, 460, 461, 0, 327, 29, - 0, 433, 0, 0, 0, 0, 0, 0, 0, 0, - 323, 0, 529, 0, 483, 491, 0, 484, 492, 485, - 493, 486, 0, 487, 494, 488, 495, 489, 490, 496, - 0, 0, 0, 327, 0, 0, 45, 0, 384, 0, - 342, 344, 345, 346, -2, 0, 368, -2, 0, 0, - 0, 41, 42, 0, 48, 826, 50, 51, 0, 0, - 0, 159, 600, 601, 602, 598, 203, 0, 0, 147, - 143, 87, 88, 89, 136, 91, 136, 136, 136, 136, - 156, 156, 156, 156, 119, 120, 121, 122, 123, 0, - 0, 106, 136, 136, 136, 110, 126, 127, 128, 129, - 130, 131, 132, 133, 92, 93, 94, 95, 96, 97, - 98, 99, 100, 138, 138, 138, 140, 140, 629, 65, - 0, 852, 0, 852, 77, 0, 217, 0, 0, 0, - 0, 0, 0, 0, 244, 606, 0, 852, 247, 248, - 386, 637, 638, 252, 253, 255, 256, 257, 258, 259, - 260, 268, 272, 0, 293, 0, 0, 274, 0, 568, - 0, 0, 0, 0, 0, 559, 561, 562, 567, 32, - 323, 0, 548, 0, 0, 0, 326, 27, 394, 395, - 397, 414, 0, 416, 418, 337, 333, 0, 538, -2, - 404, 405, 429, 430, 431, 0, 0, 0, 0, 427, - 409, 0, 440, 441, 442, 443, 444, 445, 446, 447, - 448, 449, 450, 451, 454, 513, 514, 0, 452, 453, - 462, 0, 0, 328, 329, 432, 0, 586, 29, 0, - 0, 0, 0, 437, 540, 0, 437, 540, 0, 0, - 0, 535, 532, 0, 0, 537, 0, 500, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 383, 0, 0, - 0, 0, 0, 0, 373, 0, 0, 376, 0, 0, - 0, 0, 367, 0, 0, 387, 794, 369, 0, 371, - 372, 391, 0, 391, 44, 592, 49, 0, 0, 54, - 55, 593, 594, 595, 596, 0, 78, 204, 206, 209, - 210, 211, 82, 83, 84, 0, 0, 191, 0, 0, - 185, 185, 0, 183, 184, 80, 150, 148, 0, 145, - 144, 90, 0, 156, 156, 113, 114, 159, 0, 159, - 159, 159, 0, 0, 107, 108, 109, 101, 0, 102, - 103, 104, 0, 105, 0, 0, 852, 67, 608, 68, - 851, 0, 0, 621, 218, 611, 612, 613, 614, 615, - 616, 617, 618, 619, 620, 0, 69, 220, 222, 221, - 0, 0, 0, 242, 852, 246, 290, 271, 0, 0, - 291, 292, 281, 0, 565, 566, 0, 558, 25, 0, - 603, 604, 549, 550, 340, 415, 417, 419, 0, 327, - 406, 427, 410, 0, 407, 0, 0, 401, 467, 0, - 0, 434, -2, 470, 471, 0, 0, 0, 0, 0, - 506, 0, 0, 507, 0, 555, 0, 533, 0, 0, - 482, 0, 501, 0, 0, 502, 503, 504, 505, 580, - 0, 0, -2, 0, 0, 391, 588, 0, 343, 362, - 364, 0, 359, 374, 375, 377, 0, 379, 0, 381, - 382, 347, 349, 350, 0, 0, 0, 0, 370, 555, - 0, 391, 40, 52, 53, 0, 0, 59, 160, 161, - 0, 207, 0, 0, 0, 178, 185, 185, 181, 186, - 182, 0, 152, 0, 149, 86, 146, 0, 159, 159, - 115, 0, 116, 117, 118, 0, 134, 0, 0, 0, - 0, 630, 66, 212, 851, 225, 226, 227, 228, 229, - 230, 231, 232, 233, 234, 235, 851, 0, 851, 622, - 623, 624, 625, 0, 72, 0, 0, 0, 0, 245, - 293, 294, 295, 569, 0, 26, 391, 0, 334, 539, - 0, 408, 0, 428, 411, 468, 330, 0, 136, 136, - 518, 136, 140, 521, 136, 523, 136, 526, 0, 0, - 0, 0, 0, 0, 0, 530, 481, 536, 0, 538, - 0, 0, 33, 0, 580, 570, 582, 584, 0, 29, - 0, 576, 0, 354, 555, 0, 0, 356, 363, 0, - 0, 357, 0, 358, 378, 380, 0, 0, 0, 0, - 563, 392, 39, 56, 57, 58, 205, 208, 0, 187, - 136, 190, 179, 180, 0, 154, 0, 151, 137, 111, - 112, 157, 158, 156, 0, 156, 0, 141, 0, 852, - 213, 214, 215, 216, 0, 219, 0, 70, 71, 0, - 224, 243, 270, 551, 341, 469, 412, 472, 515, 156, - 519, 520, 522, 524, 525, 527, 474, 473, 0, 0, - 0, 0, 0, 0, 0, 534, 0, 0, 0, 34, - 0, 585, -2, 0, 0, 0, 46, 0, 563, 589, - 590, 360, 0, 365, 0, 0, 0, 368, 38, 170, - 0, 189, 0, 352, 162, 155, 0, 159, 135, 159, - 0, 0, 64, 0, 73, 74, 0, 0, 553, 0, - 516, 517, 0, 0, 0, 0, 508, 480, 531, 0, - 0, 0, 583, 0, -2, 0, 578, 577, 355, 37, - 0, 0, 0, 0, 387, 169, 171, 0, 176, 0, - 188, 0, 0, 167, 0, 164, 166, 153, 124, 125, - 139, 142, 0, 0, 0, 0, 28, 0, 0, 475, - 477, 476, 478, 0, 0, 0, 497, 498, 0, 573, - 29, 0, 361, 388, 389, 390, 351, 172, 173, 0, - 177, 175, 0, 353, 85, 0, 163, 165, 0, 237, - 0, 75, 76, 69, 554, 552, 479, 0, 0, 0, - 581, -2, 579, 174, 0, 168, 236, 0, 0, 72, - 509, 0, 512, 0, 238, 0, 223, 510, 0, 0, - 0, 192, 0, 0, 193, 194, 0, 0, 511, 195, - 0, 0, 0, 0, 0, 196, 198, 199, 0, 0, - 197, 239, 240, 200, 201, 202, + 21, 22, 559, 0, 316, 316, 316, 316, 316, 316, + 0, 630, 613, 0, 0, 0, 0, -2, 303, 304, + 0, 306, 307, 855, 855, 855, 855, 855, 0, 0, + 855, 0, 35, 36, 853, 1, 3, 567, 0, 0, + 320, 323, 318, 0, 613, 613, 0, 0, 65, 66, + 0, 0, 0, 839, 0, 611, 611, 611, 631, 632, + 635, 636, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, + 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, + 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, + 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, + 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, + 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, + 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, + 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, + 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, + 836, 837, 838, 840, 841, 842, 843, 844, 845, 846, + 847, 848, 849, 850, 851, 852, 0, 0, 0, 614, + 0, 609, 0, 609, 609, 609, 0, 253, 388, 639, + 640, 839, 0, 0, 0, 856, 0, 856, 856, 266, + 856, 856, 269, 856, 0, 856, 0, 276, 278, 279, + 280, 281, 0, 285, 856, 300, 301, 290, 302, 305, + 308, 309, 310, 311, 312, 855, 855, 315, 29, 571, + 0, 0, 559, 31, 0, 316, 321, 322, 326, 324, + 325, 317, 0, 334, 338, 0, 397, 0, 402, 404, + -2, -2, 0, 439, 440, 441, 442, 443, 0, 0, + 0, 0, 0, 0, 0, 0, 467, 468, 469, 470, + 544, 545, 546, 547, 548, 549, 550, 551, 406, 407, + 541, 591, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 532, 0, 503, 503, 503, 503, 503, 503, 503, + 503, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 44, 46, 388, 50, 0, 830, 595, -2, + -2, 0, 0, 637, 638, -2, 748, -2, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, + 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, + 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 735, 736, 737, 0, 0, 84, 0, 82, 0, 856, + 0, 0, 0, 0, 0, 0, 856, 0, 0, 0, + 0, 244, 0, 0, 0, 0, 0, 0, 0, 252, + 0, 254, 856, 856, 257, 857, 858, 856, 856, 856, + 0, 856, 856, 264, 265, 267, 268, 270, 856, 856, + 272, 0, 293, 291, 292, 287, 288, 0, 282, 283, + 286, 313, 314, 30, 854, 24, 0, 0, 568, 0, + 560, 561, 564, 567, 29, 323, 0, 328, 327, 319, + 0, 335, 0, 0, 0, 339, 0, 341, 342, 0, + 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 424, 425, 426, 427, 428, 429, 430, 403, 0, 417, + 0, 0, 0, 459, 460, 461, 462, 463, 464, 465, + 0, 330, 29, 0, 437, 0, 0, 0, 0, 0, + 0, 0, 0, 326, 0, 533, 0, 487, 495, 0, + 488, 496, 489, 497, 490, 0, 491, 498, 492, 499, + 493, 494, 500, 0, 0, 0, 330, 0, 0, 48, + 0, 387, 0, 345, 347, 348, 349, -2, 0, 371, + -2, 0, 0, 0, 42, 43, 0, 0, 0, 0, + 51, 830, 53, 54, 0, 0, 0, 162, 604, 605, + 606, 602, 206, 0, 0, 150, 146, 90, 91, 92, + 139, 94, 139, 139, 139, 139, 159, 159, 159, 159, + 122, 123, 124, 125, 126, 0, 0, 109, 139, 139, + 139, 113, 129, 130, 131, 132, 133, 134, 135, 136, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 141, + 141, 141, 143, 143, 633, 68, 0, 856, 0, 856, + 80, 0, 220, 0, 0, 0, 0, 0, 0, 0, + 247, 610, 0, 856, 250, 251, 389, 641, 642, 255, + 256, 258, 259, 260, 261, 262, 263, 271, 275, 0, + 296, 0, 0, 277, 0, 572, 0, 0, 0, 0, + 0, 563, 565, 566, 571, 32, 326, 0, 552, 0, + 0, 0, 329, 27, 398, 399, 401, 418, 0, 420, + 422, 340, 336, 0, 542, -2, 408, 409, 433, 434, + 435, 0, 0, 0, 0, 431, 413, 0, 444, 445, + 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 458, 517, 518, 0, 456, 457, 466, 0, 0, 331, + 332, 436, 0, 590, 29, 0, 0, 0, 0, 441, + 544, 0, 441, 544, 0, 0, 0, 539, 536, 0, + 0, 541, 0, 504, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, + 376, 0, 0, 379, 0, 0, 0, 0, 370, 0, + 0, 391, 798, 372, 0, 374, 375, 395, 0, 395, + 45, 395, 47, 0, 390, 596, 52, 0, 0, 57, + 58, 597, 598, 599, 600, 0, 81, 207, 209, 212, + 213, 214, 85, 86, 87, 0, 0, 194, 0, 0, + 188, 188, 0, 186, 187, 83, 153, 151, 0, 148, + 147, 93, 0, 159, 159, 116, 117, 162, 0, 162, + 162, 162, 0, 0, 110, 111, 112, 104, 0, 105, + 106, 107, 0, 108, 0, 0, 856, 70, 612, 71, + 855, 0, 0, 625, 221, 615, 616, 617, 618, 619, + 620, 621, 622, 623, 624, 0, 72, 223, 225, 224, + 0, 0, 0, 245, 856, 249, 293, 274, 0, 0, + 294, 295, 284, 0, 569, 570, 0, 562, 25, 0, + 607, 608, 553, 554, 343, 419, 421, 423, 0, 330, + 410, 431, 414, 0, 411, 0, 0, 405, 471, 0, + 0, 438, -2, 474, 475, 0, 0, 0, 0, 0, + 510, 0, 0, 511, 0, 559, 0, 537, 0, 0, + 486, 0, 505, 0, 0, 506, 507, 508, 509, 584, + 0, 0, -2, 0, 0, 395, 592, 0, 346, 365, + 367, 0, 362, 377, 378, 380, 0, 382, 0, 384, + 385, 350, 352, 353, 0, 0, 0, 0, 373, 559, + 0, 395, 40, 41, 0, 55, 56, 0, 0, 62, + 163, 164, 0, 210, 0, 0, 0, 181, 188, 188, + 184, 189, 185, 0, 155, 0, 152, 89, 149, 0, + 162, 162, 118, 0, 119, 120, 121, 0, 137, 0, + 0, 0, 0, 634, 69, 215, 855, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237, 238, 855, 0, + 855, 626, 627, 628, 629, 0, 75, 0, 0, 0, + 0, 248, 296, 297, 298, 573, 0, 26, 395, 0, + 337, 543, 0, 412, 0, 432, 415, 472, 333, 0, + 139, 139, 522, 139, 143, 525, 139, 527, 139, 530, + 0, 0, 0, 0, 0, 0, 0, 534, 485, 540, + 0, 542, 0, 0, 33, 0, 584, 574, 586, 588, + 0, 29, 0, 580, 0, 357, 559, 0, 0, 359, + 366, 0, 0, 360, 0, 361, 381, 383, 0, 0, + 0, 0, 567, 396, 39, 59, 60, 61, 208, 211, + 0, 190, 139, 193, 182, 183, 0, 157, 0, 154, + 140, 114, 115, 160, 161, 159, 0, 159, 0, 144, + 0, 856, 216, 217, 218, 219, 0, 222, 0, 73, + 74, 0, 227, 246, 273, 555, 344, 473, 416, 476, + 519, 159, 523, 524, 526, 528, 529, 531, 478, 477, + 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, + 0, 34, 0, 589, -2, 0, 0, 0, 49, 0, + 567, 593, 594, 363, 0, 368, 0, 0, 0, 371, + 38, 173, 0, 192, 0, 355, 165, 158, 0, 162, + 138, 162, 0, 0, 67, 0, 76, 77, 0, 0, + 557, 0, 520, 521, 0, 0, 0, 0, 512, 484, + 535, 0, 0, 0, 587, 0, -2, 0, 582, 581, + 358, 37, 0, 0, 0, 0, 391, 172, 174, 0, + 179, 0, 191, 0, 0, 170, 0, 167, 169, 156, + 127, 128, 142, 145, 0, 0, 0, 0, 28, 0, + 0, 479, 481, 480, 482, 0, 0, 0, 501, 502, + 0, 577, 29, 0, 364, 392, 393, 394, 354, 175, + 176, 0, 180, 178, 0, 356, 88, 0, 166, 168, + 0, 240, 0, 78, 79, 72, 558, 556, 483, 0, + 0, 0, 585, -2, 583, 177, 0, 171, 239, 0, + 0, 75, 513, 0, 516, 0, 241, 0, 226, 514, + 0, 0, 0, 195, 0, 0, 196, 197, 0, 0, + 515, 198, 0, 0, 0, 0, 0, 199, 201, 202, + 0, 0, 200, 242, 243, 203, 204, 205, } var yyTok1 = [...]int{ @@ -3184,279 +3165,297 @@ yydefault: yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), Targets: yyDollar[3].tableNames, TableExprs: yyDollar[5].tableExprs, Where: NewWhere(WhereStr, yyDollar[6].expr)} } case 41: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:459 + yyDollar = yyS[yypt-6 : yypt+1] +//line sql.y:458 { + yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), Targets: yyDollar[3].tableNames, TableExprs: yyDollar[5].tableExprs, Where: NewWhere(WhereStr, yyDollar[6].expr)} } case 42: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:460 +//line sql.y:463 { } case 43: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:464 { - yyVAL.tableNames = TableNames{yyDollar[1].tableName} } case 44: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:468 { - yyVAL.tableNames = append(yyVAL.tableNames, yyDollar[3].tableName) + yyVAL.tableNames = TableNames{yyDollar[1].tableName} } case 45: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:472 + { + yyVAL.tableNames = append(yyVAL.tableNames, yyDollar[3].tableName) + } + case 46: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:478 + { + yyVAL.tableNames = TableNames{yyDollar[1].tableName} + } + case 47: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:482 + { + yyVAL.tableNames = append(yyVAL.tableNames, yyDollar[3].tableName) + } + case 48: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:473 +//line sql.y:487 { yyVAL.partitions = nil } - case 46: + case 49: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:477 +//line sql.y:491 { yyVAL.partitions = yyDollar[3].partitions } - case 47: + case 50: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:483 +//line sql.y:497 { yyVAL.statement = &Set{Comments: Comments(yyDollar[2].bytes2), Exprs: yyDollar[3].setExprs} } - case 48: + case 51: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:487 +//line sql.y:501 { yyVAL.statement = &Set{Comments: Comments(yyDollar[2].bytes2), Scope: yyDollar[3].str, Exprs: yyDollar[4].setExprs} } - case 49: + case 52: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:491 +//line sql.y:505 { yyVAL.statement = &Set{Comments: Comments(yyDollar[2].bytes2), Scope: yyDollar[3].str, Exprs: yyDollar[5].setExprs} } - case 50: + case 53: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:495 +//line sql.y:509 { yyVAL.statement = &Set{Comments: Comments(yyDollar[2].bytes2), Exprs: yyDollar[4].setExprs} } - case 51: + case 54: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:501 +//line sql.y:515 { yyVAL.setExprs = SetExprs{yyDollar[1].setExpr} } - case 52: + case 55: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:505 +//line sql.y:519 { yyVAL.setExprs = append(yyVAL.setExprs, yyDollar[3].setExpr) } - case 53: + case 56: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:511 +//line sql.y:525 { yyVAL.setExpr = &SetExpr{Name: NewColIdent(TransactionStr), Expr: NewStrVal([]byte(yyDollar[3].str))} } - case 54: + case 57: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:515 +//line sql.y:529 { yyVAL.setExpr = &SetExpr{Name: NewColIdent(TransactionStr), Expr: NewStrVal([]byte(TxReadWrite))} } - case 55: + case 58: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:519 +//line sql.y:533 { yyVAL.setExpr = &SetExpr{Name: NewColIdent(TransactionStr), Expr: NewStrVal([]byte(TxReadOnly))} } - case 56: + case 59: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:525 +//line sql.y:539 { yyVAL.str = IsolationLevelRepeatableRead } - case 57: + case 60: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:529 +//line sql.y:543 { yyVAL.str = IsolationLevelReadCommitted } - case 58: + case 61: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:533 +//line sql.y:547 { yyVAL.str = IsolationLevelReadUncommitted } - case 59: + case 62: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:537 +//line sql.y:551 { yyVAL.str = IsolationLevelSerializable } - case 60: + case 63: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:543 +//line sql.y:557 { yyVAL.str = SessionStr } - case 61: + case 64: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:547 +//line sql.y:561 { yyVAL.str = GlobalStr } - case 62: + case 65: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:553 +//line sql.y:567 { yyDollar[1].ddl.TableSpec = yyDollar[2].TableSpec yyVAL.statement = yyDollar[1].ddl } - case 63: + case 66: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:558 +//line sql.y:572 { // Create table [name] like [name] yyDollar[1].ddl.OptLike = yyDollar[2].optLike yyVAL.statement = yyDollar[1].ddl } - case 64: + case 67: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:564 +//line sql.y:578 { // Change this to an alter statement yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[7].tableName} } - case 65: + case 68: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:569 +//line sql.y:583 { yyVAL.statement = &DDL{Action: CreateStr, Table: yyDollar[3].tableName.ToViewName()} } - case 66: + case 69: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:573 +//line sql.y:587 { yyVAL.statement = &DDL{Action: CreateStr, Table: yyDollar[5].tableName.ToViewName()} } - case 67: + case 70: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:577 +//line sql.y:591 { yyVAL.statement = &DBDDL{Action: CreateStr, DBName: string(yyDollar[4].bytes)} } - case 68: + case 71: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:581 +//line sql.y:595 { yyVAL.statement = &DBDDL{Action: CreateStr, DBName: string(yyDollar[4].bytes)} } - case 69: + case 72: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:586 +//line sql.y:600 { yyVAL.colIdent = NewColIdent("") } - case 70: + case 73: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:590 +//line sql.y:604 { yyVAL.colIdent = yyDollar[2].colIdent } - case 71: + case 74: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:596 +//line sql.y:610 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 72: + case 75: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:601 +//line sql.y:615 { var v []VindexParam yyVAL.vindexParams = v } - case 73: + case 76: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:606 +//line sql.y:620 { yyVAL.vindexParams = yyDollar[2].vindexParams } - case 74: + case 77: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:612 +//line sql.y:626 { yyVAL.vindexParams = make([]VindexParam, 0, 4) yyVAL.vindexParams = append(yyVAL.vindexParams, yyDollar[1].vindexParam) } - case 75: + case 78: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:617 +//line sql.y:631 { yyVAL.vindexParams = append(yyVAL.vindexParams, yyDollar[3].vindexParam) } - case 76: + case 79: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:623 +//line sql.y:637 { yyVAL.vindexParam = VindexParam{Key: yyDollar[1].colIdent, Val: yyDollar[3].str} } - case 77: + case 80: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:629 +//line sql.y:643 { yyVAL.ddl = &DDL{Action: CreateStr, Table: yyDollar[4].tableName} setDDL(yylex, yyVAL.ddl) } - case 78: + case 81: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:636 +//line sql.y:650 { yyVAL.TableSpec = yyDollar[2].TableSpec yyVAL.TableSpec.Options = yyDollar[4].str } - case 79: + case 82: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:643 +//line sql.y:657 { yyVAL.optLike = &OptLike{LikeTable: yyDollar[2].tableName} } - case 80: + case 83: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:647 +//line sql.y:661 { yyVAL.optLike = &OptLike{LikeTable: yyDollar[3].tableName} } - case 81: + case 84: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:653 +//line sql.y:667 { yyVAL.TableSpec = &TableSpec{} yyVAL.TableSpec.AddColumn(yyDollar[1].columnDefinition) } - case 82: + case 85: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:658 +//line sql.y:672 { yyVAL.TableSpec.AddColumn(yyDollar[3].columnDefinition) } - case 83: + case 86: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:662 +//line sql.y:676 { yyVAL.TableSpec.AddIndex(yyDollar[3].indexDefinition) } - case 84: + case 87: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:666 +//line sql.y:680 { yyVAL.TableSpec.AddConstraint(yyDollar[3].constraintDefinition) } - case 85: + case 88: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:672 +//line sql.y:686 { yyDollar[2].columnType.NotNull = yyDollar[3].boolVal yyDollar[2].columnType.Default = yyDollar[4].optVal @@ -3466,814 +3465,814 @@ yydefault: yyDollar[2].columnType.Comment = yyDollar[8].sqlVal yyVAL.columnDefinition = &ColumnDefinition{Name: NewColIdent(string(yyDollar[1].bytes)), Type: yyDollar[2].columnType} } - case 86: + case 89: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:683 +//line sql.y:697 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Unsigned = yyDollar[2].boolVal yyVAL.columnType.Zerofill = yyDollar[3].boolVal } - case 90: + case 93: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:694 +//line sql.y:708 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Length = yyDollar[2].sqlVal } - case 91: + case 94: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:699 +//line sql.y:713 { yyVAL.columnType = yyDollar[1].columnType } - case 92: + case 95: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:705 +//line sql.y:719 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 93: + case 96: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:709 +//line sql.y:723 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 94: + case 97: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:713 +//line sql.y:727 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 95: + case 98: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:717 +//line sql.y:731 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 96: + case 99: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:721 +//line sql.y:735 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 97: + case 100: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:725 +//line sql.y:739 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 98: + case 101: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:729 +//line sql.y:743 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 99: + case 102: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:733 +//line sql.y:747 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 100: + case 103: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:737 +//line sql.y:751 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 101: + case 104: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:743 +//line sql.y:757 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 102: + case 105: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:749 +//line sql.y:763 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 103: + case 106: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:755 +//line sql.y:769 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 104: + case 107: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:761 +//line sql.y:775 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 105: + case 108: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:767 +//line sql.y:781 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 106: + case 109: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:775 +//line sql.y:789 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 107: + case 110: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:779 +//line sql.y:793 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } - case 108: + case 111: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:783 +//line sql.y:797 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } - case 109: + case 112: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:787 +//line sql.y:801 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } - case 110: + case 113: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:791 +//line sql.y:805 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 111: + case 114: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:797 +//line sql.y:811 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal, Charset: yyDollar[3].str, Collate: yyDollar[4].str} } - case 112: + case 115: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:801 +//line sql.y:815 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal, Charset: yyDollar[3].str, Collate: yyDollar[4].str} } - case 113: + case 116: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:805 +//line sql.y:819 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } - case 114: + case 117: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:809 +//line sql.y:823 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } - case 115: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:813 - { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} - } - case 116: + case 118: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:817 +//line sql.y:827 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } - case 117: + case 119: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:821 +//line sql.y:831 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } - case 118: + case 120: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:825 +//line sql.y:835 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } - case 119: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:829 - { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} - } - case 120: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:833 - { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} - } case 121: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:837 + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:839 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } case 122: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:841 +//line sql.y:843 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 123: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:845 +//line sql.y:847 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 124: - yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:849 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:851 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].str, Collate: yyDollar[6].str} + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 125: - yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:854 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:855 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].str, Collate: yyDollar[6].str} + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 126: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:860 +//line sql.y:859 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 127: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:864 + yyDollar = yyS[yypt-6 : yypt+1] +//line sql.y:863 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].str, Collate: yyDollar[6].str} } case 128: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] //line sql.y:868 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].str, Collate: yyDollar[6].str} } case 129: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:872 +//line sql.y:874 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 130: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:876 +//line sql.y:878 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 131: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:880 +//line sql.y:882 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 132: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:884 +//line sql.y:886 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 133: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:888 +//line sql.y:890 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 134: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:894 + { + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + } + case 135: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:898 + { + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + } + case 136: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:902 + { + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + } + case 137: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:908 { yyVAL.strs = make([]string, 0, 4) yyVAL.strs = append(yyVAL.strs, "'"+string(yyDollar[1].bytes)+"'") } - case 135: + case 138: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:899 +//line sql.y:913 { yyVAL.strs = append(yyDollar[1].strs, "'"+string(yyDollar[3].bytes)+"'") } - case 136: + case 139: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:904 +//line sql.y:918 { yyVAL.sqlVal = nil } - case 137: + case 140: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:908 +//line sql.y:922 { yyVAL.sqlVal = NewIntVal(yyDollar[2].bytes) } - case 138: + case 141: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:913 +//line sql.y:927 { yyVAL.LengthScaleOption = LengthScaleOption{} } - case 139: + case 142: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:917 +//line sql.y:931 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), Scale: NewIntVal(yyDollar[4].bytes), } } - case 140: + case 143: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:925 +//line sql.y:939 { yyVAL.LengthScaleOption = LengthScaleOption{} } - case 141: + case 144: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:929 +//line sql.y:943 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), } } - case 142: + case 145: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:935 +//line sql.y:949 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), Scale: NewIntVal(yyDollar[4].bytes), } } - case 143: + case 146: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:943 +//line sql.y:957 { yyVAL.boolVal = BoolVal(false) } - case 144: + case 147: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:947 +//line sql.y:961 { yyVAL.boolVal = BoolVal(true) } - case 145: + case 148: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:952 +//line sql.y:966 { yyVAL.boolVal = BoolVal(false) } - case 146: + case 149: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:956 +//line sql.y:970 { yyVAL.boolVal = BoolVal(true) } - case 147: + case 150: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:962 +//line sql.y:976 { yyVAL.boolVal = BoolVal(false) } - case 148: + case 151: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:966 +//line sql.y:980 { yyVAL.boolVal = BoolVal(false) } - case 149: + case 152: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:970 +//line sql.y:984 { yyVAL.boolVal = BoolVal(true) } - case 150: + case 153: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:975 +//line sql.y:989 { yyVAL.optVal = nil } - case 151: + case 154: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:979 +//line sql.y:993 { yyVAL.optVal = yyDollar[2].expr } - case 152: + case 155: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:984 +//line sql.y:998 { yyVAL.optVal = nil } - case 153: + case 156: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:988 +//line sql.y:1002 { yyVAL.optVal = yyDollar[3].expr } - case 154: + case 157: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:993 +//line sql.y:1007 { yyVAL.boolVal = BoolVal(false) } - case 155: + case 158: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:997 +//line sql.y:1011 { yyVAL.boolVal = BoolVal(true) } - case 156: + case 159: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1002 +//line sql.y:1016 { yyVAL.str = "" } - case 157: + case 160: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1006 +//line sql.y:1020 { yyVAL.str = string(yyDollar[3].bytes) } - case 158: + case 161: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1010 +//line sql.y:1024 { yyVAL.str = string(yyDollar[3].bytes) } - case 159: + case 162: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1015 +//line sql.y:1029 { yyVAL.str = "" } - case 160: + case 163: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1019 +//line sql.y:1033 { yyVAL.str = string(yyDollar[2].bytes) } - case 161: + case 164: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1023 +//line sql.y:1037 { yyVAL.str = string(yyDollar[2].bytes) } - case 162: + case 165: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1028 +//line sql.y:1042 { yyVAL.colKeyOpt = colKeyNone } - case 163: + case 166: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1032 +//line sql.y:1046 { yyVAL.colKeyOpt = colKeyPrimary } - case 164: + case 167: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1036 +//line sql.y:1050 { yyVAL.colKeyOpt = colKey } - case 165: + case 168: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1040 +//line sql.y:1054 { yyVAL.colKeyOpt = colKeyUniqueKey } - case 166: + case 169: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1044 +//line sql.y:1058 { yyVAL.colKeyOpt = colKeyUnique } - case 167: + case 170: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1049 +//line sql.y:1063 { yyVAL.sqlVal = nil } - case 168: + case 171: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1053 +//line sql.y:1067 { yyVAL.sqlVal = NewStrVal(yyDollar[2].bytes) } - case 169: + case 172: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1059 +//line sql.y:1073 { yyVAL.indexDefinition = &IndexDefinition{Info: yyDollar[1].indexInfo, Columns: yyDollar[3].indexColumns, Options: yyDollar[5].indexOptions} } - case 170: + case 173: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1063 +//line sql.y:1077 { yyVAL.indexDefinition = &IndexDefinition{Info: yyDollar[1].indexInfo, Columns: yyDollar[3].indexColumns} } - case 171: + case 174: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1069 +//line sql.y:1083 { yyVAL.indexOptions = []*IndexOption{yyDollar[1].indexOption} } - case 172: + case 175: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1073 +//line sql.y:1087 { yyVAL.indexOptions = append(yyVAL.indexOptions, yyDollar[2].indexOption) } - case 173: + case 176: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1079 +//line sql.y:1093 { yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), Using: string(yyDollar[2].bytes)} } - case 174: + case 177: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1083 +//line sql.y:1097 { // should not be string yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), Value: NewIntVal(yyDollar[3].bytes)} } - case 175: + case 178: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1088 +//line sql.y:1102 { yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), Value: NewStrVal(yyDollar[2].bytes)} } - case 176: + case 179: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1094 +//line sql.y:1108 { yyVAL.str = "" } - case 177: + case 180: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1098 +//line sql.y:1112 { yyVAL.str = string(yyDollar[1].bytes) } - case 178: + case 181: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1104 +//line sql.y:1118 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].bytes), Name: NewColIdent("PRIMARY"), Primary: true, Unique: true} } - case 179: + case 182: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1108 +//line sql.y:1122 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].str), Name: NewColIdent(yyDollar[3].str), Spatial: true, Unique: false} } - case 180: + case 183: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1112 +//line sql.y:1126 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].str), Name: NewColIdent(yyDollar[3].str), Unique: true} } - case 181: + case 184: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1116 +//line sql.y:1130 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes), Name: NewColIdent(yyDollar[2].str), Unique: true} } - case 182: + case 185: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1120 +//line sql.y:1134 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].str), Name: NewColIdent(yyDollar[2].str), Unique: false} } - case 183: + case 186: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1126 +//line sql.y:1140 { yyVAL.str = string(yyDollar[1].bytes) } - case 184: + case 187: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1130 +//line sql.y:1144 { yyVAL.str = string(yyDollar[1].bytes) } - case 185: + case 188: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1135 +//line sql.y:1149 { yyVAL.str = "" } - case 186: + case 189: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1139 +//line sql.y:1153 { yyVAL.str = string(yyDollar[1].bytes) } - case 187: + case 190: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1145 +//line sql.y:1159 { yyVAL.indexColumns = []*IndexColumn{yyDollar[1].indexColumn} } - case 188: + case 191: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1149 +//line sql.y:1163 { yyVAL.indexColumns = append(yyVAL.indexColumns, yyDollar[3].indexColumn) } - case 189: + case 192: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1155 +//line sql.y:1169 { yyVAL.indexColumn = &IndexColumn{Column: yyDollar[1].colIdent, Length: yyDollar[2].sqlVal} } - case 190: + case 193: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1161 +//line sql.y:1175 { yyVAL.constraintDefinition = &ConstraintDefinition{Name: string(yyDollar[2].bytes), Details: yyDollar[3].constraintInfo} } - case 191: + case 194: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1165 +//line sql.y:1179 { yyVAL.constraintDefinition = &ConstraintDefinition{Details: yyDollar[1].constraintInfo} } - case 192: + case 195: yyDollar = yyS[yypt-10 : yypt+1] -//line sql.y:1172 +//line sql.y:1186 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns} } - case 193: + case 196: yyDollar = yyS[yypt-11 : yypt+1] -//line sql.y:1176 +//line sql.y:1190 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns, OnDelete: yyDollar[11].ReferenceAction} } - case 194: + case 197: yyDollar = yyS[yypt-11 : yypt+1] -//line sql.y:1180 +//line sql.y:1194 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns, OnUpdate: yyDollar[11].ReferenceAction} } - case 195: + case 198: yyDollar = yyS[yypt-12 : yypt+1] -//line sql.y:1184 +//line sql.y:1198 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns, OnDelete: yyDollar[11].ReferenceAction, OnUpdate: yyDollar[12].ReferenceAction} } - case 196: + case 199: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1190 +//line sql.y:1204 { yyVAL.ReferenceAction = yyDollar[3].ReferenceAction } - case 197: + case 200: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1196 +//line sql.y:1210 { yyVAL.ReferenceAction = yyDollar[3].ReferenceAction } - case 198: + case 201: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1202 +//line sql.y:1216 { yyVAL.ReferenceAction = Restrict } - case 199: + case 202: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1206 +//line sql.y:1220 { yyVAL.ReferenceAction = Cascade } - case 200: + case 203: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1210 +//line sql.y:1224 { yyVAL.ReferenceAction = NoAction } - case 201: + case 204: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1214 +//line sql.y:1228 { yyVAL.ReferenceAction = SetDefault } - case 202: + case 205: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1218 +//line sql.y:1232 { yyVAL.ReferenceAction = SetNull } - case 203: + case 206: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1223 +//line sql.y:1237 { yyVAL.str = "" } - case 204: + case 207: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1227 +//line sql.y:1241 { yyVAL.str = " " + string(yyDollar[1].str) } - case 205: + case 208: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1231 +//line sql.y:1245 { yyVAL.str = string(yyDollar[1].str) + ", " + string(yyDollar[3].str) } - case 206: + case 209: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1239 +//line sql.y:1253 { yyVAL.str = yyDollar[1].str } - case 207: + case 210: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1243 +//line sql.y:1257 { yyVAL.str = yyDollar[1].str + " " + yyDollar[2].str } - case 208: + case 211: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1247 +//line sql.y:1261 { yyVAL.str = yyDollar[1].str + "=" + yyDollar[3].str } - case 209: + case 212: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1253 +//line sql.y:1267 { yyVAL.str = yyDollar[1].colIdent.String() } - case 210: + case 213: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1257 +//line sql.y:1271 { yyVAL.str = "'" + string(yyDollar[1].bytes) + "'" } - case 211: + case 214: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1261 +//line sql.y:1275 { yyVAL.str = string(yyDollar[1].bytes) } - case 212: + case 215: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:1267 +//line sql.y:1281 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} } - case 213: + case 216: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1271 +//line sql.y:1285 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} } - case 214: + case 217: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1275 +//line sql.y:1289 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} } - case 215: + case 218: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1279 +//line sql.y:1293 { // Change this to a rename statement yyVAL.statement = &DDL{Action: RenameStr, FromTables: TableNames{yyDollar[4].tableName}, ToTables: TableNames{yyDollar[7].tableName}} } - case 216: + case 219: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1284 +//line sql.y:1298 { // Rename an index can just be an alter yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} } - case 217: + case 220: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1289 +//line sql.y:1303 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[3].tableName.ToViewName()} } - case 218: + case 221: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1293 +//line sql.y:1307 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName, PartitionSpec: yyDollar[5].partSpec} } - case 219: + case 222: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1297 +//line sql.y:1311 { yyVAL.statement = &DDL{Action: CreateVindexStr, VindexSpec: &VindexSpec{ Name: yyDollar[5].colIdent, @@ -4281,29 +4280,29 @@ yydefault: Params: yyDollar[7].vindexParams, }} } - case 220: + case 223: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1305 +//line sql.y:1319 { yyVAL.statement = &DDL{Action: DropVindexStr, VindexSpec: &VindexSpec{ Name: yyDollar[5].colIdent, }} } - case 221: + case 224: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1311 +//line sql.y:1325 { yyVAL.statement = &DDL{Action: AddVschemaTableStr, Table: yyDollar[5].tableName} } - case 222: + case 225: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1315 +//line sql.y:1329 { yyVAL.statement = &DDL{Action: DropVschemaTableStr, Table: yyDollar[5].tableName} } - case 223: + case 226: yyDollar = yyS[yypt-12 : yypt+1] -//line sql.y:1319 +//line sql.y:1333 { yyVAL.statement = &DDL{ Action: AddColVindexStr, @@ -4316,9 +4315,9 @@ yydefault: VindexCols: yyDollar[9].columns, } } - case 224: + case 227: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1332 +//line sql.y:1346 { yyVAL.statement = &DDL{ Action: DropColVindexStr, @@ -4328,59 +4327,59 @@ yydefault: }, } } - case 236: + case 239: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1357 +//line sql.y:1371 { yyVAL.partSpec = &PartitionSpec{Action: ReorganizeStr, Name: yyDollar[3].colIdent, Definitions: yyDollar[6].partDefs} } - case 237: + case 240: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1363 +//line sql.y:1377 { yyVAL.partDefs = []*PartitionDefinition{yyDollar[1].partDef} } - case 238: + case 241: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1367 +//line sql.y:1381 { yyVAL.partDefs = append(yyDollar[1].partDefs, yyDollar[3].partDef) } - case 239: + case 242: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:1373 +//line sql.y:1387 { yyVAL.partDef = &PartitionDefinition{Name: yyDollar[2].colIdent, Limit: yyDollar[7].expr} } - case 240: + case 243: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:1377 +//line sql.y:1391 { yyVAL.partDef = &PartitionDefinition{Name: yyDollar[2].colIdent, Maxvalue: true} } - case 241: + case 244: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1383 +//line sql.y:1397 { yyVAL.statement = yyDollar[3].ddl } - case 242: + case 245: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1389 +//line sql.y:1403 { yyVAL.ddl = &DDL{Action: RenameStr, FromTables: TableNames{yyDollar[1].tableName}, ToTables: TableNames{yyDollar[3].tableName}} } - case 243: + case 246: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1393 +//line sql.y:1407 { yyVAL.ddl = yyDollar[1].ddl yyVAL.ddl.FromTables = append(yyVAL.ddl.FromTables, yyDollar[3].tableName) yyVAL.ddl.ToTables = append(yyVAL.ddl.ToTables, yyDollar[5].tableName) } - case 244: + case 247: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1401 +//line sql.y:1415 { var exists bool if yyDollar[3].byt != 0 { @@ -4388,16 +4387,16 @@ yydefault: } yyVAL.statement = &DDL{Action: DropStr, FromTables: yyDollar[4].tableNames, IfExists: exists} } - case 245: + case 248: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:1409 +//line sql.y:1423 { // Change this to an alter statement yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[5].tableName} } - case 246: + case 249: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1414 +//line sql.y:1428 { var exists bool if yyDollar[3].byt != 0 { @@ -4405,154 +4404,154 @@ yydefault: } yyVAL.statement = &DDL{Action: DropStr, FromTables: TableNames{yyDollar[4].tableName.ToViewName()}, IfExists: exists} } - case 247: + case 250: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1422 +//line sql.y:1436 { yyVAL.statement = &DBDDL{Action: DropStr, DBName: string(yyDollar[4].bytes)} } - case 248: + case 251: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1426 +//line sql.y:1440 { yyVAL.statement = &DBDDL{Action: DropStr, DBName: string(yyDollar[4].bytes)} } - case 249: + case 252: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1432 +//line sql.y:1446 { yyVAL.statement = &DDL{Action: TruncateStr, Table: yyDollar[3].tableName} } - case 250: + case 253: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1436 +//line sql.y:1450 { yyVAL.statement = &DDL{Action: TruncateStr, Table: yyDollar[2].tableName} } - case 251: + case 254: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1441 +//line sql.y:1455 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[3].tableName} } - case 252: + case 255: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1447 +//line sql.y:1461 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } - case 253: + case 256: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1452 +//line sql.y:1466 { yyVAL.statement = &Show{Type: CharsetStr} } - case 254: + case 257: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1456 +//line sql.y:1470 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 255: + case 258: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1460 +//line sql.y:1474 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } - case 256: + case 259: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1465 +//line sql.y:1479 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } - case 257: + case 260: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1469 +//line sql.y:1483 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } - case 258: + case 261: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1473 +//line sql.y:1487 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), Table: yyDollar[4].tableName} } - case 259: + case 262: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1477 +//line sql.y:1491 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } - case 260: + case 263: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1481 +//line sql.y:1495 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } - case 261: + case 264: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1485 +//line sql.y:1499 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 262: + case 265: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1489 +//line sql.y:1503 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 263: + case 266: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1493 +//line sql.y:1507 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 264: + case 267: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1497 +//line sql.y:1511 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 265: + case 268: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1501 +//line sql.y:1515 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 266: + case 269: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1505 +//line sql.y:1519 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 267: + case 270: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1509 +//line sql.y:1523 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 268: + case 271: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1513 +//line sql.y:1527 { yyVAL.statement = &Show{Scope: yyDollar[2].str, Type: string(yyDollar[3].bytes)} } - case 269: + case 272: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1517 +//line sql.y:1531 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 270: + case 273: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1521 +//line sql.y:1535 { showTablesOpt := &ShowTablesOpt{Full: yyDollar[2].str, DbName: yyDollar[6].str, Filter: yyDollar[7].showFilter} yyVAL.statement = &Show{Type: string(yyDollar[3].str), ShowTablesOpt: showTablesOpt, OnTable: yyDollar[5].tableName} } - case 271: + case 274: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1526 +//line sql.y:1540 { // this is ugly, but I couldn't find a better way for now if yyDollar[3].str == "processlist" { @@ -4562,650 +4561,650 @@ yydefault: yyVAL.statement = &Show{Type: yyDollar[3].str, ShowTablesOpt: showTablesOpt} } } - case 272: + case 275: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1536 +//line sql.y:1550 { yyVAL.statement = &Show{Scope: yyDollar[2].str, Type: string(yyDollar[3].bytes)} } - case 273: + case 276: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1540 +//line sql.y:1554 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 274: + case 277: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1544 +//line sql.y:1558 { // Cannot dereference $4 directly, or else the parser stackcannot be pooled. See yyParsePooled showCollationFilterOpt := yyDollar[4].expr yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), ShowCollationFilterOpt: &showCollationFilterOpt} } - case 275: + case 278: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1550 +//line sql.y:1564 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 276: + case 279: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1554 +//line sql.y:1568 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 277: + case 280: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1558 +//line sql.y:1572 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 278: + case 281: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1562 +//line sql.y:1576 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 279: + case 282: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1566 +//line sql.y:1580 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } - case 280: + case 283: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1570 +//line sql.y:1584 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } - case 281: + case 284: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1574 +//line sql.y:1588 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), OnTable: yyDollar[5].tableName} } - case 282: + case 285: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1578 +//line sql.y:1592 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 283: + case 286: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1588 +//line sql.y:1602 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 284: + case 287: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1594 +//line sql.y:1608 { yyVAL.str = string(yyDollar[1].bytes) } - case 285: + case 288: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1598 +//line sql.y:1612 { yyVAL.str = string(yyDollar[1].bytes) } - case 286: + case 289: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1604 +//line sql.y:1618 { yyVAL.str = "" } - case 287: + case 290: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1608 +//line sql.y:1622 { yyVAL.str = "full " } - case 288: + case 291: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1614 +//line sql.y:1628 { yyVAL.str = string(yyDollar[1].bytes) } - case 289: + case 292: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1618 +//line sql.y:1632 { yyVAL.str = string(yyDollar[1].bytes) } - case 290: + case 293: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1624 +//line sql.y:1638 { yyVAL.str = "" } - case 291: + case 294: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1628 +//line sql.y:1642 { yyVAL.str = yyDollar[2].tableIdent.v } - case 292: + case 295: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1632 +//line sql.y:1646 { yyVAL.str = yyDollar[2].tableIdent.v } - case 293: + case 296: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1638 +//line sql.y:1652 { yyVAL.showFilter = nil } - case 294: + case 297: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1642 +//line sql.y:1656 { yyVAL.showFilter = &ShowFilter{Like: string(yyDollar[2].bytes)} } - case 295: + case 298: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1646 +//line sql.y:1660 { yyVAL.showFilter = &ShowFilter{Filter: yyDollar[2].expr} } - case 296: + case 299: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1652 +//line sql.y:1666 { yyVAL.str = "" } - case 297: + case 300: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1656 +//line sql.y:1670 { yyVAL.str = SessionStr } - case 298: + case 301: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1660 +//line sql.y:1674 { yyVAL.str = GlobalStr } - case 299: + case 302: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1666 +//line sql.y:1680 { yyVAL.statement = &Use{DBName: yyDollar[2].tableIdent} } - case 300: + case 303: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1670 +//line sql.y:1684 { yyVAL.statement = &Use{DBName: TableIdent{v: ""}} } - case 301: + case 304: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1676 +//line sql.y:1690 { yyVAL.statement = &Begin{} } - case 302: + case 305: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1680 +//line sql.y:1694 { yyVAL.statement = &Begin{} } - case 303: + case 306: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1686 +//line sql.y:1700 { yyVAL.statement = &Commit{} } - case 304: + case 307: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1692 +//line sql.y:1706 { yyVAL.statement = &Rollback{} } - case 305: + case 308: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1698 +//line sql.y:1712 { yyVAL.statement = &OtherRead{} } - case 306: + case 309: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1702 +//line sql.y:1716 { yyVAL.statement = &OtherRead{} } - case 307: + case 310: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1706 +//line sql.y:1720 { yyVAL.statement = &OtherRead{} } - case 308: + case 311: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1710 +//line sql.y:1724 { yyVAL.statement = &OtherAdmin{} } - case 309: + case 312: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1714 +//line sql.y:1728 { yyVAL.statement = &OtherAdmin{} } - case 310: + case 313: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1718 +//line sql.y:1732 { yyVAL.statement = &OtherAdmin{} } - case 311: + case 314: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1722 +//line sql.y:1736 { yyVAL.statement = &OtherAdmin{} } - case 312: + case 315: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1728 +//line sql.y:1742 { yyVAL.statement = &DDL{Action: FlushStr} } - case 313: + case 316: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1732 +//line sql.y:1746 { setAllowComments(yylex, true) } - case 314: + case 317: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1736 +//line sql.y:1750 { yyVAL.bytes2 = yyDollar[2].bytes2 setAllowComments(yylex, false) } - case 315: + case 318: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1742 +//line sql.y:1756 { yyVAL.bytes2 = nil } - case 316: + case 319: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1746 +//line sql.y:1760 { yyVAL.bytes2 = append(yyDollar[1].bytes2, yyDollar[2].bytes) } - case 317: + case 320: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1752 +//line sql.y:1766 { yyVAL.str = UnionStr } - case 318: + case 321: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1756 +//line sql.y:1770 { yyVAL.str = UnionAllStr } - case 319: + case 322: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1760 +//line sql.y:1774 { yyVAL.str = UnionDistinctStr } - case 320: + case 323: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1765 +//line sql.y:1779 { yyVAL.str = "" } - case 321: + case 324: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1769 +//line sql.y:1783 { yyVAL.str = SQLNoCacheStr } - case 322: + case 325: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1773 +//line sql.y:1787 { yyVAL.str = SQLCacheStr } - case 323: + case 326: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1778 +//line sql.y:1792 { yyVAL.str = "" } - case 324: + case 327: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1782 +//line sql.y:1796 { yyVAL.str = DistinctStr } - case 325: + case 328: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1787 +//line sql.y:1801 { yyVAL.str = "" } - case 326: + case 329: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1791 +//line sql.y:1805 { yyVAL.str = StraightJoinHint } - case 327: + case 330: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1796 +//line sql.y:1810 { yyVAL.selectExprs = nil } - case 328: + case 331: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1800 +//line sql.y:1814 { yyVAL.selectExprs = yyDollar[1].selectExprs } - case 329: + case 332: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1806 +//line sql.y:1820 { yyVAL.selectExprs = SelectExprs{yyDollar[1].selectExpr} } - case 330: + case 333: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1810 +//line sql.y:1824 { yyVAL.selectExprs = append(yyVAL.selectExprs, yyDollar[3].selectExpr) } - case 331: + case 334: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1816 +//line sql.y:1830 { yyVAL.selectExpr = &StarExpr{} } - case 332: + case 335: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1820 +//line sql.y:1834 { yyVAL.selectExpr = &AliasedExpr{Expr: yyDollar[1].expr, As: yyDollar[2].colIdent} } - case 333: + case 336: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1824 +//line sql.y:1838 { yyVAL.selectExpr = &StarExpr{TableName: TableName{Name: yyDollar[1].tableIdent}} } - case 334: + case 337: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1828 +//line sql.y:1842 { yyVAL.selectExpr = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}} } - case 335: + case 338: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1833 +//line sql.y:1847 { yyVAL.colIdent = ColIdent{} } - case 336: + case 339: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1837 +//line sql.y:1851 { yyVAL.colIdent = yyDollar[1].colIdent } - case 337: + case 340: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1841 +//line sql.y:1855 { yyVAL.colIdent = yyDollar[2].colIdent } - case 339: + case 342: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1848 +//line sql.y:1862 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 340: + case 343: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1853 +//line sql.y:1867 { yyVAL.tableExprs = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewTableIdent("dual")}}} } - case 341: + case 344: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1857 +//line sql.y:1871 { yyVAL.tableExprs = yyDollar[2].tableExprs } - case 342: + case 345: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1863 +//line sql.y:1877 { yyVAL.tableExprs = TableExprs{yyDollar[1].tableExpr} } - case 343: + case 346: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1867 +//line sql.y:1881 { yyVAL.tableExprs = append(yyVAL.tableExprs, yyDollar[3].tableExpr) } - case 346: + case 349: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1877 +//line sql.y:1891 { yyVAL.tableExpr = yyDollar[1].aliasedTableName } - case 347: + case 350: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1881 +//line sql.y:1895 { yyVAL.tableExpr = &AliasedTableExpr{Expr: yyDollar[1].subquery, As: yyDollar[3].tableIdent} } - case 348: + case 351: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1885 +//line sql.y:1899 { // missed alias for subquery yylex.Error("Every derived table must have its own alias") return 1 } - case 349: + case 352: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1891 +//line sql.y:1905 { yyVAL.tableExpr = &ParenTableExpr{Exprs: yyDollar[2].tableExprs} } - case 350: + case 353: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1897 +//line sql.y:1911 { yyVAL.aliasedTableName = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].tableIdent, Hints: yyDollar[3].indexHints} } - case 351: + case 354: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1901 +//line sql.y:1915 { yyVAL.aliasedTableName = &AliasedTableExpr{Expr: yyDollar[1].tableName, Partitions: yyDollar[4].partitions, As: yyDollar[6].tableIdent, Hints: yyDollar[7].indexHints} } - case 352: + case 355: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1907 +//line sql.y:1921 { yyVAL.columns = Columns{yyDollar[1].colIdent} } - case 353: + case 356: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1911 +//line sql.y:1925 { yyVAL.columns = append(yyVAL.columns, yyDollar[3].colIdent) } - case 354: + case 357: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1917 +//line sql.y:1931 { yyVAL.partitions = Partitions{yyDollar[1].colIdent} } - case 355: + case 358: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1921 +//line sql.y:1935 { yyVAL.partitions = append(yyVAL.partitions, yyDollar[3].colIdent) } - case 356: + case 359: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1934 +//line sql.y:1948 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } - case 357: + case 360: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1938 +//line sql.y:1952 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } - case 358: + case 361: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1942 +//line sql.y:1956 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } - case 359: + case 362: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1946 +//line sql.y:1960 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr} } - case 360: + case 363: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1952 +//line sql.y:1966 { yyVAL.joinCondition = JoinCondition{On: yyDollar[2].expr} } - case 361: + case 364: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1954 +//line sql.y:1968 { yyVAL.joinCondition = JoinCondition{Using: yyDollar[3].columns} } - case 362: + case 365: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1958 +//line sql.y:1972 { yyVAL.joinCondition = JoinCondition{} } - case 363: + case 366: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1960 +//line sql.y:1974 { yyVAL.joinCondition = yyDollar[1].joinCondition } - case 364: + case 367: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1964 +//line sql.y:1978 { yyVAL.joinCondition = JoinCondition{} } - case 365: + case 368: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1966 +//line sql.y:1980 { yyVAL.joinCondition = JoinCondition{On: yyDollar[2].expr} } - case 366: + case 369: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1969 +//line sql.y:1983 { yyVAL.empty = struct{}{} } - case 367: + case 370: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1971 +//line sql.y:1985 { yyVAL.empty = struct{}{} } - case 368: + case 371: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1974 +//line sql.y:1988 { yyVAL.tableIdent = NewTableIdent("") } - case 369: + case 372: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1978 +//line sql.y:1992 { yyVAL.tableIdent = yyDollar[1].tableIdent } - case 370: + case 373: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1982 +//line sql.y:1996 { yyVAL.tableIdent = yyDollar[2].tableIdent } - case 372: + case 375: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1989 +//line sql.y:2003 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 373: + case 376: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1995 +//line sql.y:2009 { yyVAL.str = JoinStr } - case 374: + case 377: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1999 +//line sql.y:2013 { yyVAL.str = JoinStr } - case 375: + case 378: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2003 +//line sql.y:2017 { yyVAL.str = JoinStr } - case 376: + case 379: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2009 +//line sql.y:2023 { yyVAL.str = StraightJoinStr } - case 377: + case 380: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2015 +//line sql.y:2029 { yyVAL.str = LeftJoinStr } - case 378: + case 381: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2019 +//line sql.y:2033 { yyVAL.str = LeftJoinStr } - case 379: + case 382: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2023 +//line sql.y:2037 { yyVAL.str = RightJoinStr } - case 380: + case 383: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2027 +//line sql.y:2041 { yyVAL.str = RightJoinStr } - case 381: + case 384: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2033 +//line sql.y:2047 { yyVAL.str = NaturalJoinStr } - case 382: + case 385: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2037 +//line sql.y:2051 { if yyDollar[2].str == LeftJoinStr { yyVAL.str = NaturalLeftJoinStr @@ -5213,459 +5212,465 @@ yydefault: yyVAL.str = NaturalRightJoinStr } } - case 383: + case 386: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2047 +//line sql.y:2061 { yyVAL.tableName = yyDollar[2].tableName } - case 384: + case 387: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2051 +//line sql.y:2065 { yyVAL.tableName = yyDollar[1].tableName } - case 385: + case 388: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2057 +//line sql.y:2071 { yyVAL.tableName = TableName{Name: yyDollar[1].tableIdent} } - case 386: + case 389: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2061 +//line sql.y:2075 { yyVAL.tableName = TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent} } - case 387: + case 390: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:2081 + { + yyVAL.tableName = TableName{Name: yyDollar[1].tableIdent} + } + case 391: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2066 +//line sql.y:2086 { yyVAL.indexHints = nil } - case 388: + case 392: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2070 +//line sql.y:2090 { yyVAL.indexHints = &IndexHints{Type: UseStr, Indexes: yyDollar[4].columns} } - case 389: + case 393: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2074 +//line sql.y:2094 { yyVAL.indexHints = &IndexHints{Type: IgnoreStr, Indexes: yyDollar[4].columns} } - case 390: + case 394: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2078 +//line sql.y:2098 { yyVAL.indexHints = &IndexHints{Type: ForceStr, Indexes: yyDollar[4].columns} } - case 391: + case 395: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2083 +//line sql.y:2103 { yyVAL.expr = nil } - case 392: + case 396: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2087 +//line sql.y:2107 { yyVAL.expr = yyDollar[2].expr } - case 393: + case 397: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2093 +//line sql.y:2113 { yyVAL.expr = yyDollar[1].expr } - case 394: + case 398: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2097 +//line sql.y:2117 { yyVAL.expr = &AndExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } - case 395: + case 399: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2101 +//line sql.y:2121 { yyVAL.expr = &OrExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } - case 396: + case 400: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2105 +//line sql.y:2125 { yyVAL.expr = &NotExpr{Expr: yyDollar[2].expr} } - case 397: + case 401: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2109 +//line sql.y:2129 { yyVAL.expr = &IsExpr{Operator: yyDollar[3].str, Expr: yyDollar[1].expr} } - case 398: + case 402: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2113 +//line sql.y:2133 { yyVAL.expr = yyDollar[1].expr } - case 399: + case 403: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2117 +//line sql.y:2137 { yyVAL.expr = &Default{ColName: yyDollar[2].str} } - case 400: + case 404: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2123 +//line sql.y:2143 { yyVAL.str = "" } - case 401: + case 405: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2127 +//line sql.y:2147 { yyVAL.str = string(yyDollar[2].bytes) } - case 402: + case 406: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2133 +//line sql.y:2153 { yyVAL.boolVal = BoolVal(true) } - case 403: + case 407: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2137 +//line sql.y:2157 { yyVAL.boolVal = BoolVal(false) } - case 404: + case 408: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2143 +//line sql.y:2163 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: yyDollar[2].str, Right: yyDollar[3].expr} } - case 405: + case 409: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2147 +//line sql.y:2167 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: InStr, Right: yyDollar[3].colTuple} } - case 406: + case 410: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2151 +//line sql.y:2171 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotInStr, Right: yyDollar[4].colTuple} } - case 407: + case 411: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2155 +//line sql.y:2175 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: LikeStr, Right: yyDollar[3].expr, Escape: yyDollar[4].expr} } - case 408: + case 412: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2159 +//line sql.y:2179 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotLikeStr, Right: yyDollar[4].expr, Escape: yyDollar[5].expr} } - case 409: + case 413: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2163 +//line sql.y:2183 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: RegexpStr, Right: yyDollar[3].expr} } - case 410: + case 414: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2167 +//line sql.y:2187 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotRegexpStr, Right: yyDollar[4].expr} } - case 411: + case 415: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2171 +//line sql.y:2191 { yyVAL.expr = &RangeCond{Left: yyDollar[1].expr, Operator: BetweenStr, From: yyDollar[3].expr, To: yyDollar[5].expr} } - case 412: + case 416: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2175 +//line sql.y:2195 { yyVAL.expr = &RangeCond{Left: yyDollar[1].expr, Operator: NotBetweenStr, From: yyDollar[4].expr, To: yyDollar[6].expr} } - case 413: + case 417: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2179 +//line sql.y:2199 { yyVAL.expr = &ExistsExpr{Subquery: yyDollar[2].subquery} } - case 414: + case 418: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2185 +//line sql.y:2205 { yyVAL.str = IsNullStr } - case 415: + case 419: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2189 +//line sql.y:2209 { yyVAL.str = IsNotNullStr } - case 416: + case 420: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2193 +//line sql.y:2213 { yyVAL.str = IsTrueStr } - case 417: + case 421: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2197 +//line sql.y:2217 { yyVAL.str = IsNotTrueStr } - case 418: + case 422: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2201 +//line sql.y:2221 { yyVAL.str = IsFalseStr } - case 419: + case 423: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2205 +//line sql.y:2225 { yyVAL.str = IsNotFalseStr } - case 420: + case 424: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2211 +//line sql.y:2231 { yyVAL.str = EqualStr } - case 421: + case 425: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2215 +//line sql.y:2235 { yyVAL.str = LessThanStr } - case 422: + case 426: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2219 +//line sql.y:2239 { yyVAL.str = GreaterThanStr } - case 423: + case 427: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2223 +//line sql.y:2243 { yyVAL.str = LessEqualStr } - case 424: + case 428: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2227 +//line sql.y:2247 { yyVAL.str = GreaterEqualStr } - case 425: + case 429: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2231 +//line sql.y:2251 { yyVAL.str = NotEqualStr } - case 426: + case 430: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2235 +//line sql.y:2255 { yyVAL.str = NullSafeEqualStr } - case 427: + case 431: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2240 +//line sql.y:2260 { yyVAL.expr = nil } - case 428: + case 432: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2244 +//line sql.y:2264 { yyVAL.expr = yyDollar[2].expr } - case 429: + case 433: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2250 +//line sql.y:2270 { yyVAL.colTuple = yyDollar[1].valTuple } - case 430: + case 434: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2254 +//line sql.y:2274 { yyVAL.colTuple = yyDollar[1].subquery } - case 431: + case 435: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2258 +//line sql.y:2278 { yyVAL.colTuple = ListArg(yyDollar[1].bytes) } - case 432: + case 436: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2264 +//line sql.y:2284 { yyVAL.subquery = &Subquery{yyDollar[2].selStmt} } - case 433: + case 437: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2270 +//line sql.y:2290 { yyVAL.exprs = Exprs{yyDollar[1].expr} } - case 434: + case 438: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2274 +//line sql.y:2294 { yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr) } - case 435: + case 439: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2280 +//line sql.y:2300 { yyVAL.expr = yyDollar[1].expr } - case 436: + case 440: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2284 +//line sql.y:2304 { yyVAL.expr = yyDollar[1].boolVal } - case 437: + case 441: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2288 +//line sql.y:2308 { yyVAL.expr = yyDollar[1].colName } - case 438: + case 442: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2292 +//line sql.y:2312 { yyVAL.expr = yyDollar[1].expr } - case 439: + case 443: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2296 +//line sql.y:2316 { yyVAL.expr = yyDollar[1].subquery } - case 440: + case 444: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2300 +//line sql.y:2320 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitAndStr, Right: yyDollar[3].expr} } - case 441: + case 445: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2304 +//line sql.y:2324 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitOrStr, Right: yyDollar[3].expr} } - case 442: + case 446: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2308 +//line sql.y:2328 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitXorStr, Right: yyDollar[3].expr} } - case 443: + case 447: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2312 +//line sql.y:2332 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: PlusStr, Right: yyDollar[3].expr} } - case 444: + case 448: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2316 +//line sql.y:2336 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MinusStr, Right: yyDollar[3].expr} } - case 445: + case 449: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2320 +//line sql.y:2340 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MultStr, Right: yyDollar[3].expr} } - case 446: + case 450: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2324 +//line sql.y:2344 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: DivStr, Right: yyDollar[3].expr} } - case 447: + case 451: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2328 +//line sql.y:2348 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: IntDivStr, Right: yyDollar[3].expr} } - case 448: + case 452: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2332 +//line sql.y:2352 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModStr, Right: yyDollar[3].expr} } - case 449: + case 453: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2336 +//line sql.y:2356 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModStr, Right: yyDollar[3].expr} } - case 450: + case 454: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2340 +//line sql.y:2360 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftLeftStr, Right: yyDollar[3].expr} } - case 451: + case 455: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2344 +//line sql.y:2364 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftRightStr, Right: yyDollar[3].expr} } - case 452: + case 456: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2348 +//line sql.y:2368 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONExtractOp, Right: yyDollar[3].expr} } - case 453: + case 457: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2352 +//line sql.y:2372 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONUnquoteExtractOp, Right: yyDollar[3].expr} } - case 454: + case 458: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2356 +//line sql.y:2376 { yyVAL.expr = &CollateExpr{Expr: yyDollar[1].expr, Charset: yyDollar[3].str} } - case 455: + case 459: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2360 +//line sql.y:2380 { yyVAL.expr = &UnaryExpr{Operator: BinaryStr, Expr: yyDollar[2].expr} } - case 456: + case 460: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2364 +//line sql.y:2384 { yyVAL.expr = &UnaryExpr{Operator: UBinaryStr, Expr: yyDollar[2].expr} } - case 457: + case 461: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2368 +//line sql.y:2388 { yyVAL.expr = &UnaryExpr{Operator: Utf8mb4Str, Expr: yyDollar[2].expr} } - case 458: + case 462: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2372 +//line sql.y:2392 { if num, ok := yyDollar[2].expr.(*SQLVal); ok && num.Type == IntVal { yyVAL.expr = num @@ -5673,9 +5678,9 @@ yydefault: yyVAL.expr = &UnaryExpr{Operator: UPlusStr, Expr: yyDollar[2].expr} } } - case 459: + case 463: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2380 +//line sql.y:2400 { if num, ok := yyDollar[2].expr.(*SQLVal); ok && num.Type == IntVal { // Handle double negative @@ -5689,21 +5694,21 @@ yydefault: yyVAL.expr = &UnaryExpr{Operator: UMinusStr, Expr: yyDollar[2].expr} } } - case 460: + case 464: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2394 +//line sql.y:2414 { yyVAL.expr = &UnaryExpr{Operator: TildaStr, Expr: yyDollar[2].expr} } - case 461: + case 465: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2398 +//line sql.y:2418 { yyVAL.expr = &UnaryExpr{Operator: BangStr, Expr: yyDollar[2].expr} } - case 462: + case 466: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2402 +//line sql.y:2422 { // This rule prevents the usage of INTERVAL // as a function. If support is needed for that, @@ -5711,485 +5716,485 @@ yydefault: // will be non-trivial because of grammar conflicts. yyVAL.expr = &IntervalExpr{Expr: yyDollar[2].expr, Unit: yyDollar[3].colIdent.String()} } - case 467: + case 471: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2420 +//line sql.y:2440 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Exprs: yyDollar[3].selectExprs} } - case 468: + case 472: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2424 +//line sql.y:2444 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Distinct: true, Exprs: yyDollar[4].selectExprs} } - case 469: + case 473: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2428 +//line sql.y:2448 { yyVAL.expr = &FuncExpr{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].colIdent, Exprs: yyDollar[5].selectExprs} } - case 470: + case 474: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2438 +//line sql.y:2458 { yyVAL.expr = &FuncExpr{Name: NewColIdent("left"), Exprs: yyDollar[3].selectExprs} } - case 471: + case 475: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2442 +//line sql.y:2462 { yyVAL.expr = &FuncExpr{Name: NewColIdent("right"), Exprs: yyDollar[3].selectExprs} } - case 472: + case 476: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2446 +//line sql.y:2466 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } - case 473: + case 477: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2450 +//line sql.y:2470 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } - case 474: + case 478: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2454 +//line sql.y:2474 { yyVAL.expr = &ConvertUsingExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].str} } - case 475: + case 479: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2458 +//line sql.y:2478 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 476: + case 480: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2462 +//line sql.y:2482 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 477: + case 481: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2466 +//line sql.y:2486 { yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 478: + case 482: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2470 +//line sql.y:2490 { yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 479: + case 483: yyDollar = yyS[yypt-9 : yypt+1] -//line sql.y:2474 +//line sql.y:2494 { yyVAL.expr = &MatchExpr{Columns: yyDollar[3].selectExprs, Expr: yyDollar[7].expr, Option: yyDollar[8].str} } - case 480: + case 484: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:2478 +//line sql.y:2498 { yyVAL.expr = &GroupConcatExpr{Distinct: yyDollar[3].str, Exprs: yyDollar[4].selectExprs, OrderBy: yyDollar[5].orderBy, Separator: yyDollar[6].str} } - case 481: + case 485: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2482 +//line sql.y:2502 { yyVAL.expr = &CaseExpr{Expr: yyDollar[2].expr, Whens: yyDollar[3].whens, Else: yyDollar[4].expr} } - case 482: + case 486: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2486 +//line sql.y:2506 { yyVAL.expr = &ValuesFuncExpr{Name: yyDollar[3].colName} } - case 483: + case 487: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2496 +//line sql.y:2516 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_timestamp")} } - case 484: + case 488: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2500 +//line sql.y:2520 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_timestamp")} } - case 485: + case 489: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2504 +//line sql.y:2524 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_time")} } - case 486: + case 490: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2509 +//line sql.y:2529 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_date")} } - case 487: + case 491: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2514 +//line sql.y:2534 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtime")} } - case 488: + case 492: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2519 +//line sql.y:2539 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtimestamp")} } - case 489: + case 493: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2525 +//line sql.y:2545 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_date")} } - case 490: + case 494: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2530 +//line sql.y:2550 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_time")} } - case 491: + case 495: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2535 +//line sql.y:2555 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("current_timestamp"), Fsp: yyDollar[2].expr} } - case 492: + case 496: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2539 +//line sql.y:2559 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("utc_timestamp"), Fsp: yyDollar[2].expr} } - case 493: + case 497: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2543 +//line sql.y:2563 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("utc_time"), Fsp: yyDollar[2].expr} } - case 494: + case 498: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2548 +//line sql.y:2568 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("localtime"), Fsp: yyDollar[2].expr} } - case 495: + case 499: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2553 +//line sql.y:2573 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("localtimestamp"), Fsp: yyDollar[2].expr} } - case 496: + case 500: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2558 +//line sql.y:2578 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("current_time"), Fsp: yyDollar[2].expr} } - case 497: + case 501: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2562 +//line sql.y:2582 { yyVAL.expr = &TimestampFuncExpr{Name: string("timestampadd"), Unit: yyDollar[3].colIdent.String(), Expr1: yyDollar[5].expr, Expr2: yyDollar[7].expr} } - case 498: + case 502: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2566 +//line sql.y:2586 { yyVAL.expr = &TimestampFuncExpr{Name: string("timestampdiff"), Unit: yyDollar[3].colIdent.String(), Expr1: yyDollar[5].expr, Expr2: yyDollar[7].expr} } - case 501: + case 505: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2576 +//line sql.y:2596 { yyVAL.expr = yyDollar[2].expr } - case 502: + case 506: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2586 +//line sql.y:2606 { yyVAL.expr = &FuncExpr{Name: NewColIdent("if"), Exprs: yyDollar[3].selectExprs} } - case 503: + case 507: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2590 +//line sql.y:2610 { yyVAL.expr = &FuncExpr{Name: NewColIdent("database"), Exprs: yyDollar[3].selectExprs} } - case 504: + case 508: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2594 +//line sql.y:2614 { yyVAL.expr = &FuncExpr{Name: NewColIdent("mod"), Exprs: yyDollar[3].selectExprs} } - case 505: + case 509: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2598 +//line sql.y:2618 { yyVAL.expr = &FuncExpr{Name: NewColIdent("replace"), Exprs: yyDollar[3].selectExprs} } - case 506: + case 510: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2602 +//line sql.y:2622 { yyVAL.expr = &FuncExpr{Name: NewColIdent("substr"), Exprs: yyDollar[3].selectExprs} } - case 507: + case 511: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2606 +//line sql.y:2626 { yyVAL.expr = &FuncExpr{Name: NewColIdent("substr"), Exprs: yyDollar[3].selectExprs} } - case 508: + case 512: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2612 +//line sql.y:2632 { yyVAL.str = "" } - case 509: + case 513: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2616 +//line sql.y:2636 { yyVAL.str = BooleanModeStr } - case 510: + case 514: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2620 +//line sql.y:2640 { yyVAL.str = NaturalLanguageModeStr } - case 511: + case 515: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:2624 +//line sql.y:2644 { yyVAL.str = NaturalLanguageModeWithQueryExpansionStr } - case 512: + case 516: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2628 +//line sql.y:2648 { yyVAL.str = QueryExpansionStr } - case 513: + case 517: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2634 +//line sql.y:2654 { yyVAL.str = string(yyDollar[1].bytes) } - case 514: + case 518: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2638 +//line sql.y:2658 { yyVAL.str = string(yyDollar[1].bytes) } - case 515: + case 519: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2644 +//line sql.y:2664 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } - case 516: + case 520: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2648 +//line sql.y:2668 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal, Charset: yyDollar[3].str, Operator: CharacterSetStr} } - case 517: + case 521: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2652 +//line sql.y:2672 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal, Charset: string(yyDollar[3].bytes)} } - case 518: + case 522: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2656 +//line sql.y:2676 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 519: + case 523: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2660 +//line sql.y:2680 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } - case 520: + case 524: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2664 +//line sql.y:2684 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} yyVAL.convertType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.convertType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 521: + case 525: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2670 +//line sql.y:2690 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 522: + case 526: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2674 +//line sql.y:2694 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } - case 523: + case 527: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2678 +//line sql.y:2698 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 524: + case 528: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2682 +//line sql.y:2702 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 525: + case 529: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2686 +//line sql.y:2706 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } - case 526: + case 530: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2690 +//line sql.y:2710 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 527: + case 531: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2694 +//line sql.y:2714 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 528: + case 532: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2699 +//line sql.y:2719 { yyVAL.expr = nil } - case 529: + case 533: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2703 +//line sql.y:2723 { yyVAL.expr = yyDollar[1].expr } - case 530: + case 534: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2708 +//line sql.y:2728 { yyVAL.str = string("") } - case 531: + case 535: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2712 +//line sql.y:2732 { yyVAL.str = " separator '" + string(yyDollar[2].bytes) + "'" } - case 532: + case 536: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2718 +//line sql.y:2738 { yyVAL.whens = []*When{yyDollar[1].when} } - case 533: + case 537: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2722 +//line sql.y:2742 { yyVAL.whens = append(yyDollar[1].whens, yyDollar[2].when) } - case 534: + case 538: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2728 +//line sql.y:2748 { yyVAL.when = &When{Cond: yyDollar[2].expr, Val: yyDollar[4].expr} } - case 535: + case 539: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2733 +//line sql.y:2753 { yyVAL.expr = nil } - case 536: + case 540: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2737 +//line sql.y:2757 { yyVAL.expr = yyDollar[2].expr } - case 537: + case 541: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2743 +//line sql.y:2763 { yyVAL.colName = &ColName{Name: yyDollar[1].colIdent} } - case 538: + case 542: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2747 +//line sql.y:2767 { yyVAL.colName = &ColName{Qualifier: TableName{Name: yyDollar[1].tableIdent}, Name: yyDollar[3].colIdent} } - case 539: + case 543: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2751 +//line sql.y:2771 { yyVAL.colName = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}, Name: yyDollar[5].colIdent} } - case 540: + case 544: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2757 +//line sql.y:2777 { yyVAL.expr = NewStrVal(yyDollar[1].bytes) } - case 541: + case 545: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2761 +//line sql.y:2781 { yyVAL.expr = NewHexVal(yyDollar[1].bytes) } - case 542: + case 546: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2765 +//line sql.y:2785 { yyVAL.expr = NewBitVal(yyDollar[1].bytes) } - case 543: + case 547: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2769 +//line sql.y:2789 { yyVAL.expr = NewIntVal(yyDollar[1].bytes) } - case 544: + case 548: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2773 +//line sql.y:2793 { yyVAL.expr = NewFloatVal(yyDollar[1].bytes) } - case 545: + case 549: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2777 +//line sql.y:2797 { yyVAL.expr = NewHexNum(yyDollar[1].bytes) } - case 546: + case 550: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2781 +//line sql.y:2801 { yyVAL.expr = NewValArg(yyDollar[1].bytes) } - case 547: + case 551: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2785 +//line sql.y:2805 { yyVAL.expr = &NullVal{} } - case 548: + case 552: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2791 +//line sql.y:2811 { // TODO(sougou): Deprecate this construct. if yyDollar[1].colIdent.Lowered() != "value" { @@ -6198,239 +6203,239 @@ yydefault: } yyVAL.expr = NewIntVal([]byte("1")) } - case 549: + case 553: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2800 +//line sql.y:2820 { yyVAL.expr = NewIntVal(yyDollar[1].bytes) } - case 550: + case 554: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2804 +//line sql.y:2824 { yyVAL.expr = NewValArg(yyDollar[1].bytes) } - case 551: + case 555: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2809 +//line sql.y:2829 { yyVAL.exprs = nil } - case 552: + case 556: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2813 +//line sql.y:2833 { yyVAL.exprs = yyDollar[3].exprs } - case 553: + case 557: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2818 +//line sql.y:2838 { yyVAL.expr = nil } - case 554: + case 558: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2822 +//line sql.y:2842 { yyVAL.expr = yyDollar[2].expr } - case 555: + case 559: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2827 +//line sql.y:2847 { yyVAL.orderBy = nil } - case 556: + case 560: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2831 +//line sql.y:2851 { yyVAL.orderBy = yyDollar[3].orderBy } - case 557: + case 561: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2837 +//line sql.y:2857 { yyVAL.orderBy = OrderBy{yyDollar[1].order} } - case 558: + case 562: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2841 +//line sql.y:2861 { yyVAL.orderBy = append(yyDollar[1].orderBy, yyDollar[3].order) } - case 559: + case 563: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2847 +//line sql.y:2867 { yyVAL.order = &Order{Expr: yyDollar[1].expr, Direction: yyDollar[2].str} } - case 560: + case 564: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2852 +//line sql.y:2872 { yyVAL.str = AscScr } - case 561: + case 565: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2856 +//line sql.y:2876 { yyVAL.str = AscScr } - case 562: + case 566: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2860 +//line sql.y:2880 { yyVAL.str = DescScr } - case 563: + case 567: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2865 +//line sql.y:2885 { yyVAL.limit = nil } - case 564: + case 568: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2869 +//line sql.y:2889 { yyVAL.limit = &Limit{Rowcount: yyDollar[2].expr} } - case 565: + case 569: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2873 +//line sql.y:2893 { yyVAL.limit = &Limit{Offset: yyDollar[2].expr, Rowcount: yyDollar[4].expr} } - case 566: + case 570: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2877 +//line sql.y:2897 { yyVAL.limit = &Limit{Offset: yyDollar[4].expr, Rowcount: yyDollar[2].expr} } - case 567: + case 571: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2882 +//line sql.y:2902 { yyVAL.str = "" } - case 568: + case 572: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2886 +//line sql.y:2906 { yyVAL.str = ForUpdateStr } - case 569: + case 573: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2890 +//line sql.y:2910 { yyVAL.str = ShareModeStr } - case 570: + case 574: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2903 +//line sql.y:2923 { yyVAL.ins = &Insert{Rows: yyDollar[2].values} } - case 571: + case 575: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2907 +//line sql.y:2927 { yyVAL.ins = &Insert{Rows: yyDollar[1].selStmt} } - case 572: + case 576: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2911 +//line sql.y:2931 { // Drop the redundant parenthesis. yyVAL.ins = &Insert{Rows: yyDollar[2].selStmt} } - case 573: + case 577: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2916 +//line sql.y:2936 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[5].values} } - case 574: + case 578: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2920 +//line sql.y:2940 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[4].selStmt} } - case 575: + case 579: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2924 +//line sql.y:2944 { // Drop the redundant parenthesis. yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[5].selStmt} } - case 576: + case 580: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2931 +//line sql.y:2951 { yyVAL.columns = Columns{yyDollar[1].colIdent} } - case 577: + case 581: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2935 +//line sql.y:2955 { yyVAL.columns = Columns{yyDollar[3].colIdent} } - case 578: + case 582: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2939 +//line sql.y:2959 { yyVAL.columns = append(yyVAL.columns, yyDollar[3].colIdent) } - case 579: + case 583: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2943 +//line sql.y:2963 { yyVAL.columns = append(yyVAL.columns, yyDollar[5].colIdent) } - case 580: + case 584: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2948 +//line sql.y:2968 { yyVAL.updateExprs = nil } - case 581: + case 585: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2952 +//line sql.y:2972 { yyVAL.updateExprs = yyDollar[5].updateExprs } - case 582: + case 586: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2958 +//line sql.y:2978 { yyVAL.values = Values{yyDollar[1].valTuple} } - case 583: + case 587: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2962 +//line sql.y:2982 { yyVAL.values = append(yyDollar[1].values, yyDollar[3].valTuple) } - case 584: + case 588: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2968 +//line sql.y:2988 { yyVAL.valTuple = yyDollar[1].valTuple } - case 585: + case 589: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2972 +//line sql.y:2992 { yyVAL.valTuple = ValTuple{} } - case 586: + case 590: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2978 +//line sql.y:2998 { yyVAL.valTuple = ValTuple(yyDollar[2].exprs) } - case 587: + case 591: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2984 +//line sql.y:3004 { if len(yyDollar[1].valTuple) == 1 { yyVAL.expr = &ParenExpr{yyDollar[1].valTuple[0]} @@ -6438,312 +6443,312 @@ yydefault: yyVAL.expr = yyDollar[1].valTuple } } - case 588: + case 592: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2994 +//line sql.y:3014 { yyVAL.updateExprs = UpdateExprs{yyDollar[1].updateExpr} } - case 589: + case 593: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2998 +//line sql.y:3018 { yyVAL.updateExprs = append(yyDollar[1].updateExprs, yyDollar[3].updateExpr) } - case 590: + case 594: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3004 +//line sql.y:3024 { yyVAL.updateExpr = &UpdateExpr{Name: yyDollar[1].colName, Expr: yyDollar[3].expr} } - case 591: + case 595: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3010 +//line sql.y:3030 { yyVAL.setExprs = SetExprs{yyDollar[1].setExpr} } - case 592: + case 596: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3014 +//line sql.y:3034 { yyVAL.setExprs = append(yyDollar[1].setExprs, yyDollar[3].setExpr) } - case 593: + case 597: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3020 +//line sql.y:3040 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: NewStrVal([]byte("on"))} } - case 594: + case 598: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3024 +//line sql.y:3044 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: NewStrVal([]byte("off"))} } - case 595: + case 599: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3028 +//line sql.y:3048 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: yyDollar[3].expr} } - case 596: + case 600: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3032 +//line sql.y:3052 { yyVAL.setExpr = &SetExpr{Name: NewColIdent(string(yyDollar[1].bytes)), Expr: yyDollar[2].expr} } - case 598: + case 602: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3039 +//line sql.y:3059 { yyVAL.bytes = []byte("charset") } - case 600: + case 604: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3046 +//line sql.y:3066 { yyVAL.expr = NewStrVal([]byte(yyDollar[1].colIdent.String())) } - case 601: + case 605: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3050 +//line sql.y:3070 { yyVAL.expr = NewStrVal(yyDollar[1].bytes) } - case 602: + case 606: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3054 +//line sql.y:3074 { yyVAL.expr = &Default{} } - case 605: + case 609: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3063 +//line sql.y:3083 { yyVAL.byt = 0 } - case 606: + case 610: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3065 +//line sql.y:3085 { yyVAL.byt = 1 } - case 607: + case 611: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3068 +//line sql.y:3088 { yyVAL.empty = struct{}{} } - case 608: + case 612: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3070 +//line sql.y:3090 { yyVAL.empty = struct{}{} } - case 609: + case 613: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3073 +//line sql.y:3093 { yyVAL.str = "" } - case 610: + case 614: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3075 +//line sql.y:3095 { yyVAL.str = IgnoreStr } - case 611: + case 615: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3079 +//line sql.y:3099 { yyVAL.empty = struct{}{} } - case 612: + case 616: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3081 +//line sql.y:3101 { yyVAL.empty = struct{}{} } - case 613: + case 617: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3083 +//line sql.y:3103 { yyVAL.empty = struct{}{} } - case 614: + case 618: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3085 +//line sql.y:3105 { yyVAL.empty = struct{}{} } - case 615: + case 619: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3087 +//line sql.y:3107 { yyVAL.empty = struct{}{} } - case 616: + case 620: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3089 +//line sql.y:3109 { yyVAL.empty = struct{}{} } - case 617: + case 621: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3091 +//line sql.y:3111 { yyVAL.empty = struct{}{} } - case 618: + case 622: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3093 +//line sql.y:3113 { yyVAL.empty = struct{}{} } - case 619: + case 623: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3095 +//line sql.y:3115 { yyVAL.empty = struct{}{} } - case 620: + case 624: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3097 +//line sql.y:3117 { yyVAL.empty = struct{}{} } - case 621: + case 625: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3100 +//line sql.y:3120 { yyVAL.empty = struct{}{} } - case 622: + case 626: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3102 +//line sql.y:3122 { yyVAL.empty = struct{}{} } - case 623: + case 627: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3104 +//line sql.y:3124 { yyVAL.empty = struct{}{} } - case 624: + case 628: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3108 +//line sql.y:3128 { yyVAL.empty = struct{}{} } - case 625: + case 629: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3110 +//line sql.y:3130 { yyVAL.empty = struct{}{} } - case 626: + case 630: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3113 +//line sql.y:3133 { yyVAL.empty = struct{}{} } - case 627: + case 631: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3115 +//line sql.y:3135 { yyVAL.empty = struct{}{} } - case 628: + case 632: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3117 +//line sql.y:3137 { yyVAL.empty = struct{}{} } - case 629: + case 633: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3120 +//line sql.y:3140 { yyVAL.colIdent = ColIdent{} } - case 630: + case 634: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3122 +//line sql.y:3142 { yyVAL.colIdent = yyDollar[2].colIdent } - case 631: + case 635: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3126 +//line sql.y:3146 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 632: + case 636: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3130 +//line sql.y:3150 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 634: + case 638: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3137 +//line sql.y:3157 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 635: + case 639: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3143 +//line sql.y:3163 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 636: + case 640: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3147 +//line sql.y:3167 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 638: + case 642: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3154 +//line sql.y:3174 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 849: + case 853: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3390 +//line sql.y:3410 { if incNesting(yylex) { yylex.Error("max nesting level reached") return 1 } } - case 850: + case 854: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3399 +//line sql.y:3419 { decNesting(yylex) } - case 851: + case 855: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3404 +//line sql.y:3424 { skipToEnd(yylex) } - case 852: + case 856: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3409 +//line sql.y:3429 { skipToEnd(yylex) } - case 853: + case 857: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3413 +//line sql.y:3433 { skipToEnd(yylex) } - case 854: + case 858: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3417 +//line sql.y:3437 { skipToEnd(yylex) } diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index bd367ff401e..422bbc234a5 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -219,9 +219,9 @@ func skipToEnd(yylex interface{}) { %type from_opt table_references %type table_reference table_factor join_table %type join_condition join_condition_opt on_expression_opt -%type table_name_list +%type table_name_list delete_table_list %type inner_join outer_join straight_join natural_join -%type table_name into_table_name +%type table_name into_table_name delete_table_name %type aliased_table_name %type index_hint_list %type where_expression_opt @@ -454,6 +454,10 @@ delete_statement: { $$ = &Delete{Comments: Comments($2), Targets: $3, TableExprs: $5, Where: NewWhere(WhereStr, $6)} } +|DELETE comment_opt delete_table_list from_or_using table_references where_expression_opt + { + $$ = &Delete{Comments: Comments($2), Targets: $3, TableExprs: $5, Where: NewWhere(WhereStr, $6)} + } from_or_using: FROM {} @@ -469,6 +473,16 @@ table_name_list: $$ = append($$, $3) } +delete_table_list: + delete_table_name + { + $$ = TableNames{$1} + } +| delete_table_list ',' delete_table_name + { + $$ = append($$, $3) + } + opt_partition_clause: { $$ = nil @@ -2062,6 +2076,12 @@ table_name: $$ = TableName{Qualifier: $1, Name: $3} } +delete_table_name: +table_id '.' '*' + { + $$ = TableName{Name: $1} + } + index_hint_list: { $$ = nil diff --git a/go/vt/tableacl/acl/acl.go b/go/vt/tableacl/acl/acl.go index 26e22a38433..cae56fa2c78 100644 --- a/go/vt/tableacl/acl/acl.go +++ b/go/vt/tableacl/acl/acl.go @@ -32,7 +32,7 @@ type Factory interface { New(entries []string) (ACL, error) } -// DenyAllACL implements ACL interface and alway deny access request. +// DenyAllACL implements ACL interface and always deny access request. type DenyAllACL struct{} // IsMember implements ACL.IsMember and always return false. @@ -40,7 +40,7 @@ func (acl DenyAllACL) IsMember(principal *querypb.VTGateCallerID) bool { return false } -// AcceptAllACL implements ACL interface and alway accept access request. +// AcceptAllACL implements ACL interface and always accept access request. type AcceptAllACL struct{} // IsMember implements ACL.IsMember and always return true. diff --git a/go/vt/topo/shard.go b/go/vt/topo/shard.go index ac510274013..2dcf4448ba4 100644 --- a/go/vt/topo/shard.go +++ b/go/vt/topo/shard.go @@ -331,6 +331,11 @@ func (ts *Server) GetOrCreateShard(ctx context.Context, keyspace, shard string) return nil, vterrors.Wrapf(err, "CreateKeyspace(%v) failed", keyspace) } + // make sure a valid vschema has been loaded + if err = ts.EnsureVSchema(ctx, keyspace); err != nil { + return nil, vterrors.Wrapf(err, "EnsureVSchema(%v) failed", keyspace) + } + // now try to create with the lock, may already exist if err = ts.CreateShard(ctx, keyspace, shard); err != nil && !IsErrType(err, NodeExists) { return nil, vterrors.Wrapf(err, "CreateShard(%v/%v) failed", keyspace, shard) diff --git a/go/vt/topo/srv_keyspace.go b/go/vt/topo/srv_keyspace.go index 5acd78064d1..4a43d87eeb5 100644 --- a/go/vt/topo/srv_keyspace.go +++ b/go/vt/topo/srv_keyspace.go @@ -353,7 +353,9 @@ func (ts *Server) DeleteSrvKeyspacePartitions(ctx context.Context, keyspace stri for _, si := range shards { found := false for _, shardReference := range partition.GetShardReferences() { - if key.KeyRangeEqual(shardReference.GetKeyRange(), si.GetKeyRange()) { + // Use shard name rather than key range so it works + // for both range-based and non-range-based shards. + if shardReference.GetName() == si.ShardName() { found = true } } @@ -361,7 +363,9 @@ func (ts *Server) DeleteSrvKeyspacePartitions(ctx context.Context, keyspace stri if found { shardReferences := make([]*topodatapb.ShardReference, 0) for _, shardReference := range partition.GetShardReferences() { - if !key.KeyRangeEqual(shardReference.GetKeyRange(), si.GetKeyRange()) { + // Use shard name rather than key range so it works + // for both range-based and non-range-based shards. + if shardReference.GetName() != si.ShardName() { shardReferences = append(shardReferences, shardReference) } } diff --git a/go/vt/topo/vschema.go b/go/vt/topo/vschema.go index f377f88d00f..d4c9e0b7192 100644 --- a/go/vt/topo/vschema.go +++ b/go/vt/topo/vschema.go @@ -20,6 +20,7 @@ import ( "path" "golang.org/x/net/context" + "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/vterrors" "github.com/golang/protobuf/proto" @@ -66,6 +67,29 @@ func (ts *Server) GetVSchema(ctx context.Context, keyspace string) (*vschemapb.K return &vs, nil } +// EnsureVschema makes sure that a vschema is present for this keyspace are creates a blank one if it is missing +func (ts *Server) EnsureVSchema(ctx context.Context, keyspace string) error { + vschema, err := ts.GetVSchema(ctx, keyspace) + if vschema == nil || IsErrType(err, NoNode) { + err = ts.SaveVSchema(ctx, keyspace, &vschemapb.Keyspace{ + Sharded: false, + Vindexes: make(map[string]*vschemapb.Vindex), + Tables: make(map[string]*vschemapb.Table), + }) + if err != nil { + log.Errorf("could not create blank vschema: %v", err) + return err + } + } + + err = ts.RebuildSrvVSchema(ctx, []string{} /* cells */) + if err != nil { + log.Errorf("could not rebuild SrvVschema after creating keyspace: %v", err) + return err + } + return nil +} + // SaveRoutingRules saves the routing rules into the topo. func (ts *Server) SaveRoutingRules(ctx context.Context, routingRules *vschemapb.RoutingRules) error { data, err := proto.Marshal(routingRules) diff --git a/go/vt/topo/zk2topo/election.go b/go/vt/topo/zk2topo/election.go index 7268341300e..15975a00f88 100644 --- a/go/vt/topo/zk2topo/election.go +++ b/go/vt/topo/zk2topo/election.go @@ -20,7 +20,7 @@ import ( "path" "sort" - "github.com/samuel/go-zookeeper/zk" + "github.com/z-division/go-zookeeper/zk" "golang.org/x/net/context" "vitess.io/vitess/go/vt/vterrors" diff --git a/go/vt/topo/zk2topo/error.go b/go/vt/topo/zk2topo/error.go index 40e7df5ef86..f1d2fe43a89 100644 --- a/go/vt/topo/zk2topo/error.go +++ b/go/vt/topo/zk2topo/error.go @@ -17,7 +17,7 @@ limitations under the License. package zk2topo import ( - "github.com/samuel/go-zookeeper/zk" + "github.com/z-division/go-zookeeper/zk" "golang.org/x/net/context" "vitess.io/vitess/go/vt/topo" diff --git a/go/vt/topo/zk2topo/file.go b/go/vt/topo/zk2topo/file.go index 876f2c23ea7..a177e8834bd 100644 --- a/go/vt/topo/zk2topo/file.go +++ b/go/vt/topo/zk2topo/file.go @@ -21,7 +21,7 @@ import ( "fmt" "path" - "github.com/samuel/go-zookeeper/zk" + "github.com/z-division/go-zookeeper/zk" "golang.org/x/net/context" "vitess.io/vitess/go/vt/topo" diff --git a/go/vt/topo/zk2topo/lock.go b/go/vt/topo/zk2topo/lock.go index 2d9316ab379..89b9ff9c8c3 100644 --- a/go/vt/topo/zk2topo/lock.go +++ b/go/vt/topo/zk2topo/lock.go @@ -19,7 +19,7 @@ package zk2topo import ( "path" - "github.com/samuel/go-zookeeper/zk" + "github.com/z-division/go-zookeeper/zk" "golang.org/x/net/context" "vitess.io/vitess/go/vt/vterrors" diff --git a/go/vt/topo/zk2topo/utils.go b/go/vt/topo/zk2topo/utils.go index c6f676245ce..1feb85fb5a7 100644 --- a/go/vt/topo/zk2topo/utils.go +++ b/go/vt/topo/zk2topo/utils.go @@ -23,7 +23,7 @@ import ( "strings" "sync" - "github.com/samuel/go-zookeeper/zk" + "github.com/z-division/go-zookeeper/zk" "golang.org/x/net/context" "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/vterrors" diff --git a/go/vt/topo/zk2topo/zk_conn.go b/go/vt/topo/zk2topo/zk_conn.go index e69980768bd..b6890273e7e 100644 --- a/go/vt/topo/zk2topo/zk_conn.go +++ b/go/vt/topo/zk2topo/zk_conn.go @@ -28,7 +28,7 @@ import ( "sync" "time" - "github.com/samuel/go-zookeeper/zk" + "github.com/z-division/go-zookeeper/zk" "golang.org/x/net/context" "vitess.io/vitess/go/sync2" diff --git a/go/vt/vtctl/vtctl.go b/go/vt/vtctl/vtctl.go index 90f8536572c..fc7314d764f 100644 --- a/go/vt/vtctl/vtctl.go +++ b/go/vt/vtctl/vtctl.go @@ -323,6 +323,12 @@ var commands = []commandGroup{ {"MigrateServedFrom", commandMigrateServedFrom, "[-cells=c1,c2,...] [-reverse] ", "Makes the serve the given type. This command also rebuilds the serving graph."}, + {"MigrateReads", commandMigrateReads, + "[-cells=c1,c2,...] [-reverse] -workflow=workflow ", + "Migrate read traffic for the specified workflow."}, + {"MigrateWrites", commandMigrateWrites, + "[-filtered_replication_wait_time=30s] -workflow=workflow ", + "Migrate write traffic for the specified workflow."}, {"CancelResharding", commandCancelResharding, "", "Permanently cancels a resharding in progress. All resharding related metadata will be deleted."}, @@ -409,7 +415,7 @@ var commands = []commandGroup{ "", "Displays the VSchema routing rules."}, {"ApplyRoutingRules", commandApplyRoutingRules, - "{-rules= || -rules_file=} [-cells=c1,c2,...] [-skip_rebuild] [-dry-run]", + "{-rules= || -rules_file=} [-cells=c1,c2,...] [-skip_rebuild] [-dry-run]", "Applies the VSchema routing rules."}, {"RebuildVSchemaGraph", commandRebuildVSchemaGraph, "[-cells=c1,c2,...]", @@ -1645,12 +1651,13 @@ func commandCreateKeyspace(ctx context.Context, wr *wrangler.Wrangler, subFlags } } } - err = wr.TopoServer().RebuildSrvVSchema(ctx, []string{} /* cells */) + if !*allowEmptyVSchema { + err = wr.TopoServer().EnsureVSchema(ctx, keyspace) + } if err != nil { wr.Logger().Errorf("could not rebuild SrvVschema after creating keyspace: %v", err) return err } - return nil } @@ -1827,9 +1834,9 @@ func commandVerticalSplitClone(ctx context.Context, wr *wrangler.Wrangler, subFl func commandMigrateServedTypes(ctx context.Context, wr *wrangler.Wrangler, subFlags *flag.FlagSet, args []string) error { cellsStr := subFlags.String("cells", "", "Specifies a comma-separated list of cells to update") - reverse := subFlags.Bool("reverse", false, "Moves the served tablet type backward instead of forward. Use in case of trouble") + reverse := subFlags.Bool("reverse", false, "Moves the served tablet type backward instead of forward.") skipReFreshState := subFlags.Bool("skip-refresh-state", false, "Skips refreshing the state of the source tablets after the migration, meaning that the refresh will need to be done manually, replica and rdonly only)") - filteredReplicationWaitTime := subFlags.Duration("filtered_replication_wait_time", 30*time.Second, "Specifies the maximum time to wait, in seconds, for filtered replication to catch up on master migrations") + filteredReplicationWaitTime := subFlags.Duration("filtered_replication_wait_time", 30*time.Second, "Specifies the maximum time to wait, in seconds, for filtered replication to catch up on master migrations. The migration will be aborted on timeout.") reverseReplication := subFlags.Bool("reverse_replication", false, "For master migration, enabling this flag reverses replication which allows you to rollback") if err := subFlags.Parse(args); err != nil { return err @@ -1857,9 +1864,9 @@ func commandMigrateServedTypes(ctx context.Context, wr *wrangler.Wrangler, subFl } func commandMigrateServedFrom(ctx context.Context, wr *wrangler.Wrangler, subFlags *flag.FlagSet, args []string) error { - reverse := subFlags.Bool("reverse", false, "Moves the served tablet type backward instead of forward. Use in case of trouble") + reverse := subFlags.Bool("reverse", false, "Moves the served tablet type backward instead of forward.") cellsStr := subFlags.String("cells", "", "Specifies a comma-separated list of cells to update") - filteredReplicationWaitTime := subFlags.Duration("filtered_replication_wait_time", 30*time.Second, "Specifies the maximum time to wait, in seconds, for filtered replication to catch up on master migrations") + filteredReplicationWaitTime := subFlags.Duration("filtered_replication_wait_time", 30*time.Second, "Specifies the maximum time to wait, in seconds, for filtered replication to catch up on master migrations. The migration will be aborted on timeout.") if err := subFlags.Parse(args); err != nil { return err } @@ -1882,6 +1889,58 @@ func commandMigrateServedFrom(ctx context.Context, wr *wrangler.Wrangler, subFla return wr.MigrateServedFrom(ctx, keyspace, shard, servedType, cells, *reverse, *filteredReplicationWaitTime) } +func commandMigrateReads(ctx context.Context, wr *wrangler.Wrangler, subFlags *flag.FlagSet, args []string) error { + reverse := subFlags.Bool("reverse", false, "Moves the served tablet type backward instead of forward.") + cellsStr := subFlags.String("cells", "", "Specifies a comma-separated list of cells to update") + workflow := subFlags.String("workflow", "", "Specifies the workflow name") + if err := subFlags.Parse(args); err != nil { + return err + } + if subFlags.NArg() != 2 { + return fmt.Errorf("the and arguments are required for the MigrateReads command") + } + + keyspace := subFlags.Arg(0) + servedType, err := parseTabletType(subFlags.Arg(2), []topodatapb.TabletType{topodatapb.TabletType_REPLICA, topodatapb.TabletType_RDONLY}) + if err != nil { + return err + } + var cells []string + if *cellsStr != "" { + cells = strings.Split(*cellsStr, ",") + } + direction := wrangler.DirectionForward + if *reverse { + direction = wrangler.DirectionBackward + } + if *workflow == "" { + return fmt.Errorf("a -workflow=workflow argument is required") + } + return wr.MigrateReads(ctx, keyspace, *workflow, servedType, cells, direction) +} + +func commandMigrateWrites(ctx context.Context, wr *wrangler.Wrangler, subFlags *flag.FlagSet, args []string) error { + filteredReplicationWaitTime := subFlags.Duration("filtered_replication_wait_time", 30*time.Second, "Specifies the maximum time to wait, in seconds, for filtered replication to catch up on master migrations. The migration will be aborted on timeout.") + workflow := subFlags.String("workflow", "", "Specifies the workflow name") + if err := subFlags.Parse(args); err != nil { + return err + } + if subFlags.NArg() != 1 { + return fmt.Errorf("the argument is required for the MigrateWrites command") + } + + keyspace := subFlags.Arg(0) + if *workflow == "" { + return fmt.Errorf("a -workflow=workflow argument is required") + } + journalID, err := wr.MigrateWrites(ctx, keyspace, *workflow, *filteredReplicationWaitTime) + if err != nil { + return err + } + wr.Logger().Infof("Migration Journal ID: %v", journalID) + return nil +} + func commandCancelResharding(ctx context.Context, wr *wrangler.Wrangler, subFlags *flag.FlagSet, args []string) error { if err := subFlags.Parse(args); err != nil { return err @@ -2400,7 +2459,7 @@ func commandApplyVSchema(ctx context.Context, wr *wrangler.Wrangler, subFlags *f func commandApplyRoutingRules(ctx context.Context, wr *wrangler.Wrangler, subFlags *flag.FlagSet, args []string) error { routingRules := subFlags.String("rules", "", "Specify rules as a string") - routingRulesFile := subFlags.String("vschema_file", "", "Specify rules in a file") + routingRulesFile := subFlags.String("rules_file", "", "Specify rules in a file") skipRebuild := subFlags.Bool("skip_rebuild", false, "If set, do no rebuild the SrvSchema objects.") var cells flagutil.StringListValue subFlags.Var(&cells, "cells", "If specified, limits the rebuild to the cells, after upload. Ignored if skipRebuild is set.") diff --git a/go/vt/vtgate/endtoend/aggr_test.go b/go/vt/vtgate/endtoend/aggr_test.go index 5925e4e5714..b37697a72f4 100644 --- a/go/vt/vtgate/endtoend/aggr_test.go +++ b/go/vt/vtgate/endtoend/aggr_test.go @@ -32,16 +32,26 @@ func TestAggregateTypes(t *testing.T) { } defer conn.Close() - exec(t, conn, "insert into aggr_test(id, val1, val2) values(1,'a',1), (2,'a',1), (3,'b',1), (4,'c',3), (5,'c',4)") - exec(t, conn, "insert into aggr_test(id, val1, val2) values(6,'d',null), (7,'e',null), (8,'e',1)") + exec(t, conn, "insert into aggr_test(id, val1, val2) values(1,'a',1), (2,'A',1), (3,'b',1), (4,'c',3), (5,'c',4)") + exec(t, conn, "insert into aggr_test(id, val1, val2) values(6,'d',null), (7,'e',null), (8,'E',1)") qr := exec(t, conn, "select val1, count(distinct val2), count(*) from aggr_test group by val1") - if got, want := fmt.Sprintf("%v", qr.Rows), `[[VARBINARY("a") INT64(1) INT64(2)] [VARBINARY("b") INT64(1) INT64(1)] [VARBINARY("c") INT64(2) INT64(2)] [VARBINARY("d") INT64(0) INT64(1)] [VARBINARY("e") INT64(1) INT64(2)]]`; got != want { + if got, want := fmt.Sprintf("%v", qr.Rows), `[[VARCHAR("a") INT64(1) INT64(2)] [VARCHAR("b") INT64(1) INT64(1)] [VARCHAR("c") INT64(2) INT64(2)] [VARCHAR("d") INT64(0) INT64(1)] [VARCHAR("e") INT64(1) INT64(2)]]`; got != want { t.Errorf("select:\n%v want\n%v", got, want) } qr = exec(t, conn, "select val1, sum(distinct val2), sum(val2) from aggr_test group by val1") - if got, want := fmt.Sprintf("%v", qr.Rows), `[[VARBINARY("a") DECIMAL(1) DECIMAL(2)] [VARBINARY("b") DECIMAL(1) DECIMAL(1)] [VARBINARY("c") DECIMAL(7) DECIMAL(7)] [VARBINARY("d") NULL NULL] [VARBINARY("e") DECIMAL(1) DECIMAL(1)]]`; got != want { + if got, want := fmt.Sprintf("%v", qr.Rows), `[[VARCHAR("a") DECIMAL(1) DECIMAL(2)] [VARCHAR("b") DECIMAL(1) DECIMAL(1)] [VARCHAR("c") DECIMAL(7) DECIMAL(7)] [VARCHAR("d") NULL NULL] [VARCHAR("e") DECIMAL(1) DECIMAL(1)]]`; got != want { + t.Errorf("select:\n%v want\n%v", got, want) + } + + qr = exec(t, conn, "select val1, count(distinct val2) k, count(*) from aggr_test group by val1 order by k desc, val1") + if got, want := fmt.Sprintf("%v", qr.Rows), `[[VARCHAR("c") INT64(2) INT64(2)] [VARCHAR("a") INT64(1) INT64(2)] [VARCHAR("b") INT64(1) INT64(1)] [VARCHAR("e") INT64(1) INT64(2)] [VARCHAR("d") INT64(0) INT64(1)]]`; got != want { + t.Errorf("select:\n%v want\n%v", got, want) + } + + qr = exec(t, conn, "select val1, count(distinct val2) k, count(*) from aggr_test group by val1 order by k desc, val1 limit 4") + if got, want := fmt.Sprintf("%v", qr.Rows), `[[VARCHAR("c") INT64(2) INT64(2)] [VARCHAR("a") INT64(1) INT64(2)] [VARCHAR("b") INT64(1) INT64(1)] [VARCHAR("e") INT64(1) INT64(2)]]`; got != want { t.Errorf("select:\n%v want\n%v", got, want) } } diff --git a/go/vt/vtgate/endtoend/deletetest/delete_test.go b/go/vt/vtgate/endtoend/deletetest/delete_test.go new file mode 100644 index 00000000000..9f0cb6ceb79 --- /dev/null +++ b/go/vt/vtgate/endtoend/deletetest/delete_test.go @@ -0,0 +1,191 @@ +/* +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 endtoend + +import ( + "context" + "flag" + "fmt" + "os" + "path" + "testing" + + "vitess.io/vitess/go/mysql" + "vitess.io/vitess/go/sqltypes" + vschemapb "vitess.io/vitess/go/vt/proto/vschema" + vttestpb "vitess.io/vitess/go/vt/proto/vttest" + "vitess.io/vitess/go/vt/vttest" +) + +var ( + cluster *vttest.LocalCluster + vtParams mysql.ConnParams + mysqlParams mysql.ConnParams + grpcAddress string + tabletHostName = flag.String("tablet_hostname", "", "the tablet hostname") + + schema = ` +create table t1( + id1 bigint, + id2 bigint, + primary key(id1) + ) Engine=InnoDB; + +create table t1_id2_idx( + id2 bigint, + keyspace_id varbinary(10), + primary key(id2) + ) Engine=InnoDB; + +create table del_test_a( + id bigint, + val1 varbinary(16), + val2 bigint, + primary key(id) +) Engine=InnoDB; + +create table del_test_b( + id bigint, + val1 varbinary(16), + val2 bigint, + primary key(id) +) Engine=InnoDB; +` + + vschema = &vschemapb.Keyspace{ + Sharded: false, + Vindexes: map[string]*vschemapb.Vindex{ + "hash": { + Type: "hash", + }, + "t1_id2_vdx": { + Type: "consistent_lookup_unique", + Params: map[string]string{ + "table": "t1_id2_idx", + "from": "id2", + "to": "keyspace_id", + }, + Owner: "t1", + }, + }, + Tables: map[string]*vschemapb.Table{ + "t1": { + ColumnVindexes: []*vschemapb.ColumnVindex{{ + Column: "id1", + Name: "hash", + }, { + Column: "id2", + Name: "t1_id2_vdx", + }}, + }, + "t1_id2_idx": { + ColumnVindexes: []*vschemapb.ColumnVindex{{ + Column: "id2", + Name: "hash", + }}, + }, + "del_test_a": { + ColumnVindexes: []*vschemapb.ColumnVindex{{ + Column: "id", + Name: "hash", + }}, + }, + "del_test_b": { + ColumnVindexes: []*vschemapb.ColumnVindex{{ + Column: "id", + Name: "hash", + }}, + }, + }, + } +) + +func TestMain(m *testing.M) { + flag.Parse() + + exitCode := func() int { + var cfg vttest.Config + cfg.Topology = &vttestpb.VTTestTopology{ + Keyspaces: []*vttestpb.Keyspace{{ + Name: "ks", + Shards: []*vttestpb.Shard{{ + Name: "80", + }}, + }}, + } + cfg.ExtraMyCnf = []string{path.Join(os.Getenv("VTTOP"), "config/mycnf/rbr.cnf")} + if err := cfg.InitSchemas("ks", schema, vschema); err != nil { + fmt.Fprintf(os.Stderr, "%v\n", err) + os.RemoveAll(cfg.SchemaDir) + return 1 + } + defer os.RemoveAll(cfg.SchemaDir) + + cfg.TabletHostName = *tabletHostName + + cluster = &vttest.LocalCluster{ + Config: cfg, + } + if err := cluster.Setup(); err != nil { + fmt.Fprintf(os.Stderr, "%v\n", err) + cluster.TearDown() + return 1 + } + defer cluster.TearDown() + + vtParams = mysql.ConnParams{ + Host: "localhost", + Port: cluster.Env.PortForProtocol("vtcombo_mysql_port", ""), + } + mysqlParams = cluster.MySQLConnParams() + grpcAddress = fmt.Sprintf("localhost:%d", cluster.Env.PortForProtocol("vtcombo", "grpc")) + + return m.Run() + }() + os.Exit(exitCode) +} + +func TestDelete(t *testing.T) { + ctx := context.Background() + conn, err := mysql.Connect(ctx, &vtParams) + if err != nil { + t.Fatal(err) + } + defer conn.Close() + + exec(t, conn, "insert into del_test_a(id, val1, val2) values(1,'a',1), (2,'a',1), (3,'b',1), (4,'c',3), (5,'c',4)") + exec(t, conn, "insert into del_test_b(id, val1, val2) values(1,'a',1), (2,'a',1), (3,'a',1), (4,'d',3), (5,'f',4)") + + qr := exec(t, conn, "delete a.*, b.* from del_test_a a, del_test_b b where a.id = b.id and b.val1 = 'a' and a.val1 = 'a'") + if got, want := fmt.Sprintf("%v", qr.Rows), `[]`; got != want { + t.Errorf("select:\n%v want\n%v", got, want) + } + + qr = exec(t, conn, "select * from del_test_a") + if got, want := fmt.Sprintf("%v", qr.Rows), `[[INT64(3) VARBINARY("b") INT64(1)] [INT64(4) VARBINARY("c") INT64(3)] [INT64(5) VARBINARY("c") INT64(4)]]`; got != want { + t.Errorf("select:\n%v want\n%v", got, want) + } +} + +func exec(t *testing.T, conn *mysql.Conn, query string) *sqltypes.Result { + t.Helper() + qr, err := conn.ExecuteFetch(query, 1000, true) + if err != nil { + t.Fatal(err) + } + return qr +} diff --git a/go/vt/vtgate/endtoend/main_test.go b/go/vt/vtgate/endtoend/main_test.go index f2fcef7c49d..da52636dcec 100644 --- a/go/vt/vtgate/endtoend/main_test.go +++ b/go/vt/vtgate/endtoend/main_test.go @@ -24,6 +24,7 @@ import ( "testing" "vitess.io/vitess/go/mysql" + "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/vt/vttest" vschemapb "vitess.io/vitess/go/vt/proto/vschema" @@ -31,10 +32,11 @@ import ( ) var ( - cluster *vttest.LocalCluster - vtParams mysql.ConnParams - mysqlParams mysql.ConnParams - grpcAddress string + cluster *vttest.LocalCluster + vtParams mysql.ConnParams + mysqlParams mysql.ConnParams + grpcAddress string + tabletHostName = flag.String("tablet_hostname", "", "the tablet hostname") schema = ` create table t1( @@ -57,7 +59,7 @@ create table vstream_test( create table aggr_test( id bigint, - val1 varbinary(16), + val1 varchar(16), val2 bigint, primary key(id) ) Engine=InnoDB; @@ -145,6 +147,10 @@ create table t2_id4_idx( Column: "id", Name: "hash", }}, + Columns: []*vschemapb.Column{{ + Name: "val1", + Type: sqltypes.VarChar, + }}, }, }, } @@ -173,6 +179,8 @@ func TestMain(m *testing.M) { } defer os.RemoveAll(cfg.SchemaDir) + cfg.TabletHostName = *tabletHostName + cluster = &vttest.LocalCluster{ Config: cfg, } diff --git a/go/vt/vtgate/engine/delete.go b/go/vt/vtgate/engine/delete.go index 52c2edb342d..b2260be4a1f 100644 --- a/go/vt/vtgate/engine/delete.go +++ b/go/vt/vtgate/engine/delete.go @@ -145,6 +145,19 @@ func (del *Delete) RouteType() string { return delName[del.Opcode] } +// GetKeyspaceName specifies the Keyspace that this primitive routes to. +func (del *Delete) GetKeyspaceName() string { + return del.Keyspace.Name +} + +// GetTableName specifies the table that this primitive routes to. +func (del *Delete) GetTableName() string { + if del.Table != nil { + return del.Table.Name.String() + } + return "" +} + // Execute performs a non-streaming exec. func (del *Delete) Execute(vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { if del.QueryTimeout != 0 { diff --git a/go/vt/vtgate/engine/fake_primitive_test.go b/go/vt/vtgate/engine/fake_primitive_test.go index 70c1f7210d1..250d1206029 100644 --- a/go/vt/vtgate/engine/fake_primitive_test.go +++ b/go/vt/vtgate/engine/fake_primitive_test.go @@ -49,6 +49,14 @@ func (f *fakePrimitive) RouteType() string { return "Fake" } +func (f *fakePrimitive) GetKeyspaceName() string { + return "fakeKs" +} + +func (f *fakePrimitive) GetTableName() string { + return "fakeTable" +} + func (f *fakePrimitive) Execute(vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { f.log = append(f.log, fmt.Sprintf("Execute %v %v", printBindVars(bindVars), wantfields)) if f.results == nil { diff --git a/go/vt/vtgate/engine/insert.go b/go/vt/vtgate/engine/insert.go index 82ba49b4302..ed00cc5c622 100644 --- a/go/vt/vtgate/engine/insert.go +++ b/go/vt/vtgate/engine/insert.go @@ -195,6 +195,19 @@ func (ins *Insert) RouteType() string { return insName[ins.Opcode] } +// GetKeyspaceName specifies the Keyspace that this primitive routes to. +func (ins *Insert) GetKeyspaceName() string { + return ins.Keyspace.Name +} + +// GetTableName specifies the table that this primitive routes to. +func (ins *Insert) GetTableName() string { + if ins.Table != nil { + return ins.Table.Name.String() + } + return "" +} + // Execute performs a non-streaming exec. func (ins *Insert) Execute(vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { if ins.QueryTimeout != 0 { diff --git a/go/vt/vtgate/engine/join.go b/go/vt/vtgate/engine/join.go index 6519050991b..b62e54a5960 100644 --- a/go/vt/vtgate/engine/join.go +++ b/go/vt/vtgate/engine/join.go @@ -226,6 +226,19 @@ func (jn *Join) RouteType() string { return "Join" } +// GetKeyspaceName specifies the Keyspace that this primitive routes to. +func (jn *Join) GetKeyspaceName() string { + if jn.Left.GetKeyspaceName() == jn.Right.GetKeyspaceName() { + return jn.Left.GetKeyspaceName() + } + return jn.Left.GetKeyspaceName() + "_" + jn.Right.GetKeyspaceName() +} + +// GetTableName specifies the table that this primitive routes to. +func (jn *Join) GetTableName() string { + return jn.Left.GetTableName() + "_" + jn.Right.GetTableName() +} + func combineVars(bv1, bv2 map[string]*querypb.BindVariable) map[string]*querypb.BindVariable { out := make(map[string]*querypb.BindVariable) for k, v := range bv1 { diff --git a/go/vt/vtgate/engine/limit.go b/go/vt/vtgate/engine/limit.go index f357c412a08..0d0570cd9c5 100644 --- a/go/vt/vtgate/engine/limit.go +++ b/go/vt/vtgate/engine/limit.go @@ -57,6 +57,16 @@ func (l *Limit) RouteType() string { return l.Input.RouteType() } +// GetKeyspaceName specifies the Keyspace that this primitive routes to. +func (l *Limit) GetKeyspaceName() string { + return l.Input.GetKeyspaceName() +} + +// GetTableName specifies the table that this primitive routes to. +func (l *Limit) GetTableName() string { + return l.Input.GetTableName() +} + // Execute satisfies the Primtive interface. func (l *Limit) Execute(vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { count, err := l.fetchCount(bindVars) diff --git a/go/vt/vtgate/engine/memory_sort.go b/go/vt/vtgate/engine/memory_sort.go index b81acd888cf..b9832b34e55 100644 --- a/go/vt/vtgate/engine/memory_sort.go +++ b/go/vt/vtgate/engine/memory_sort.go @@ -34,6 +34,11 @@ type MemorySort struct { UpperLimit sqltypes.PlanValue OrderBy []OrderbyParams Input Primitive + + // TruncateColumnCount specifies the number of columns to return + // in the final result. Rest of the columns are truncated + // from the result received. If 0, no truncation happens. + TruncateColumnCount int `json:",omitempty"` } // MarshalJSON serializes the MemorySort into a JSON representation. @@ -58,6 +63,21 @@ func (ms *MemorySort) RouteType() string { return ms.Input.RouteType() } +// GetKeyspaceName specifies the Keyspace that this primitive routes to. +func (ms *MemorySort) GetKeyspaceName() string { + return ms.Input.GetKeyspaceName() +} + +// GetTableName specifies the table that this primitive routes to. +func (ms *MemorySort) GetTableName() string { + return ms.Input.GetTableName() +} + +// SetTruncateColumnCount sets the truncate column count. +func (ms *MemorySort) SetTruncateColumnCount(count int) { + ms.TruncateColumnCount = count +} + // Execute satisfies the Primtive interface. func (ms *MemorySort) Execute(vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { count, err := ms.fetchCount(bindVars) @@ -82,7 +102,7 @@ func (ms *MemorySort) Execute(vcursor VCursor, bindVars map[string]*querypb.Bind result.Rows = result.Rows[:count] result.RowsAffected = uint64(count) } - return result, nil + return result.Truncate(ms.TruncateColumnCount), nil } // StreamExecute satisfies the Primtive interface. @@ -92,6 +112,10 @@ func (ms *MemorySort) StreamExecute(vcursor VCursor, bindVars map[string]*queryp return err } + cb := func(qr *sqltypes.Result) error { + return callback(qr.Truncate(ms.TruncateColumnCount)) + } + // You have to reverse the ordering because the highest values // must be dropped once the upper limit is reached. sh := &sortHeap{ @@ -100,7 +124,7 @@ func (ms *MemorySort) StreamExecute(vcursor VCursor, bindVars map[string]*queryp } err = ms.Input.StreamExecute(vcursor, bindVars, wantfields, func(qr *sqltypes.Result) error { if len(qr.Fields) != 0 { - if err := callback(&sqltypes.Result{Fields: qr.Fields}); err != nil { + if err := cb(&sqltypes.Result{Fields: qr.Fields}); err != nil { return err } } @@ -128,7 +152,7 @@ func (ms *MemorySort) StreamExecute(vcursor VCursor, bindVars map[string]*queryp // Unreachable. return sh.err } - return callback(&sqltypes.Result{Rows: sh.rows}) + return cb(&sqltypes.Result{Rows: sh.rows}) } // GetFields satisfies the Primtive interface. diff --git a/go/vt/vtgate/engine/memory_sort_test.go b/go/vt/vtgate/engine/memory_sort_test.go index 555c7704589..a9732f4e231 100644 --- a/go/vt/vtgate/engine/memory_sort_test.go +++ b/go/vt/vtgate/engine/memory_sort_test.go @@ -184,6 +184,94 @@ func TestMemorySortGetFields(t *testing.T) { } } +func TestMemorySortExecuteTruncate(t *testing.T) { + fields := sqltypes.MakeTestFields( + "c1|c2|c3", + "varbinary|decimal|int64", + ) + fp := &fakePrimitive{ + results: []*sqltypes.Result{sqltypes.MakeTestResult( + fields, + "a|1|1", + "b|2|1", + "a|1|1", + "c|4|1", + "c|3|1", + )}, + } + + ms := &MemorySort{ + OrderBy: []OrderbyParams{{ + Col: 1, + }}, + Input: fp, + TruncateColumnCount: 2, + } + + result, err := ms.Execute(nil, nil, false) + if err != nil { + t.Fatal(err) + } + + wantResult := sqltypes.MakeTestResult( + fields[:2], + "a|1", + "a|1", + "b|2", + "c|3", + "c|4", + ) + if !reflect.DeepEqual(result, wantResult) { + t.Errorf("oa.Execute:\n%v, want\n%v", result, wantResult) + } +} + +func TestMemorySortStreamExecuteTruncate(t *testing.T) { + fields := sqltypes.MakeTestFields( + "c1|c2|c3", + "varbinary|decimal|int64", + ) + fp := &fakePrimitive{ + results: []*sqltypes.Result{sqltypes.MakeTestResult( + fields, + "a|1|1", + "b|2|1", + "a|1|1", + "c|4|1", + "c|3|1", + )}, + } + + ms := &MemorySort{ + OrderBy: []OrderbyParams{{ + Col: 1, + }}, + Input: fp, + TruncateColumnCount: 2, + } + + var results []*sqltypes.Result + err := ms.StreamExecute(noopVCursor{}, nil, false, func(qr *sqltypes.Result) error { + results = append(results, qr) + return nil + }) + if err != nil { + t.Fatal(err) + } + + wantResults := sqltypes.MakeTestStreamingResults( + fields[:2], + "a|1", + "a|1", + "b|2", + "c|3", + "c|4", + ) + if !reflect.DeepEqual(results, wantResults) { + t.Errorf("oa.Execute:\n%v, want\n%v", results, wantResults) + } +} + func TestMemorySortMultiColumn(t *testing.T) { fields := sqltypes.MakeTestFields( "c1|c2", diff --git a/go/vt/vtgate/engine/ordered_aggregate.go b/go/vt/vtgate/engine/ordered_aggregate.go index e5b71ab11f0..93b013047cc 100644 --- a/go/vt/vtgate/engine/ordered_aggregate.go +++ b/go/vt/vtgate/engine/ordered_aggregate.go @@ -121,6 +121,21 @@ func (oa *OrderedAggregate) RouteType() string { return oa.Input.RouteType() } +// GetKeyspaceName specifies the Keyspace that this primitive routes to. +func (oa *OrderedAggregate) GetKeyspaceName() string { + return oa.Input.GetKeyspaceName() +} + +// GetTableName specifies the table that this primitive routes to. +func (oa *OrderedAggregate) GetTableName() string { + return oa.Input.GetTableName() +} + +// SetTruncateColumnCount sets the truncate column count. +func (oa *OrderedAggregate) SetTruncateColumnCount(count int) { + oa.TruncateColumnCount = count +} + // Execute is a Primitive function. func (oa *OrderedAggregate) Execute(vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { qr, err := oa.execute(vcursor, bindVars, wantfields) diff --git a/go/vt/vtgate/engine/primitive.go b/go/vt/vtgate/engine/primitive.go index 1c14dd402b1..c559d3bbaeb 100644 --- a/go/vt/vtgate/engine/primitive.go +++ b/go/vt/vtgate/engine/primitive.go @@ -130,6 +130,8 @@ func (p *Plan) Size() int { // all primitives of a plan. type Primitive interface { RouteType() string + GetKeyspaceName() string + GetTableName() string Execute(vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) StreamExecute(vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantields bool, callback func(*sqltypes.Result) error) error GetFields(vcursor VCursor, bindVars map[string]*querypb.BindVariable) (*sqltypes.Result, error) diff --git a/go/vt/vtgate/engine/pullout_subquery.go b/go/vt/vtgate/engine/pullout_subquery.go index 1ed44bfa19a..da5d3535c96 100644 --- a/go/vt/vtgate/engine/pullout_subquery.go +++ b/go/vt/vtgate/engine/pullout_subquery.go @@ -43,6 +43,16 @@ func (ps *PulloutSubquery) RouteType() string { return ps.Opcode.String() } +// GetKeyspaceName specifies the Keyspace that this primitive routes to. +func (ps *PulloutSubquery) GetKeyspaceName() string { + return ps.Underlying.GetKeyspaceName() +} + +// GetTableName specifies the table that this primitive routes to. +func (ps *PulloutSubquery) GetTableName() string { + return ps.Underlying.GetTableName() +} + // Execute satisfies the Primitive interface. func (ps *PulloutSubquery) Execute(vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { combinedVars, err := ps.execSubquery(vcursor, bindVars) diff --git a/go/vt/vtgate/engine/route.go b/go/vt/vtgate/engine/route.go index f24dd6f2e4b..1ba1ce859d6 100644 --- a/go/vt/vtgate/engine/route.go +++ b/go/vt/vtgate/engine/route.go @@ -58,6 +58,9 @@ type Route struct { // Query specifies the query to be executed. Query string + // TableName specifies the table to send the query to. + TableName string + // FieldQuery specifies the query to be executed for a GetFieldInfo request. FieldQuery string @@ -126,6 +129,7 @@ func (route *Route) MarshalJSON() ([]byte, error) { TruncateColumnCount int `json:",omitempty"` QueryTimeout int `json:",omitempty"` ScatterErrorsAsWarnings bool `json:",omitempty"` + Table string `json:",omitempty"` }{ Opcode: route.Opcode, Keyspace: route.Keyspace, @@ -137,6 +141,7 @@ func (route *Route) MarshalJSON() ([]byte, error) { TruncateColumnCount: route.TruncateColumnCount, QueryTimeout: route.QueryTimeout, ScatterErrorsAsWarnings: route.ScatterErrorsAsWarnings, + Table: route.TableName, } return jsonutil.MarshalNoEscape(marshalRoute) } @@ -201,6 +206,21 @@ func (route *Route) RouteType() string { return routeName[route.Opcode] } +// GetKeyspaceName specifies the Keyspace that this primitive routes to. +func (route *Route) GetKeyspaceName() string { + return route.Keyspace.Name +} + +// GetTableName specifies the table that this primitive routes to. +func (route *Route) GetTableName() string { + return route.TableName +} + +// SetTruncateColumnCount sets the truncate column count. +func (route *Route) SetTruncateColumnCount(count int) { + route.TruncateColumnCount = count +} + // Execute performs a non-streaming exec. func (route *Route) Execute(vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { if route.QueryTimeout != 0 { diff --git a/go/vt/vtgate/engine/subquery.go b/go/vt/vtgate/engine/subquery.go index 0bd7f2735e8..48073dae8dc 100644 --- a/go/vt/vtgate/engine/subquery.go +++ b/go/vt/vtgate/engine/subquery.go @@ -36,6 +36,16 @@ func (sq *Subquery) RouteType() string { return sq.Subquery.RouteType() } +// GetKeyspaceName specifies the Keyspace that this primitive routes to. +func (sq *Subquery) GetKeyspaceName() string { + return sq.Subquery.GetKeyspaceName() +} + +// GetTableName specifies the table that this primitive routes to. +func (sq *Subquery) GetTableName() string { + return sq.Subquery.GetTableName() +} + // Execute performs a non-streaming exec. func (sq *Subquery) Execute(vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { inner, err := sq.Subquery.Execute(vcursor, bindVars, wantfields) diff --git a/go/vt/vtgate/engine/update.go b/go/vt/vtgate/engine/update.go index d37f587d920..d71a6729396 100644 --- a/go/vt/vtgate/engine/update.go +++ b/go/vt/vtgate/engine/update.go @@ -149,6 +149,19 @@ func (upd *Update) RouteType() string { return updName[upd.Opcode] } +// GetKeyspaceName specifies the Keyspace that this primitive routes to. +func (upd *Update) GetKeyspaceName() string { + return upd.Keyspace.Name +} + +// GetTableName specifies the table that this primitive routes to. +func (upd *Update) GetTableName() string { + if upd.Table != nil { + return upd.Table.Name.String() + } + return "" +} + // Execute performs a non-streaming exec. func (upd *Update) Execute(vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { if upd.QueryTimeout != 0 { diff --git a/go/vt/vtgate/engine/vindex_func.go b/go/vt/vtgate/engine/vindex_func.go index fa7b19b22fe..5f88d93062c 100644 --- a/go/vt/vtgate/engine/vindex_func.go +++ b/go/vt/vtgate/engine/vindex_func.go @@ -84,6 +84,16 @@ func (vf *VindexFunc) RouteType() string { return vindexOpcodeName[vf.Opcode] } +// GetKeyspaceName specifies the Keyspace that this primitive routes to. +func (vf *VindexFunc) GetKeyspaceName() string { + return "" +} + +// GetTableName specifies the table that this primitive routes to. +func (vf *VindexFunc) GetTableName() string { + return "" +} + // Execute performs a non-streaming exec. func (vf *VindexFunc) Execute(vcursor VCursor, bindVars map[string]*querypb.BindVariable, wantfields bool) (*sqltypes.Result, error) { return vf.mapVindex(vcursor, bindVars) diff --git a/go/vt/vtgate/executor.go b/go/vt/vtgate/executor.go index 860d719d55b..5a4df07e611 100644 --- a/go/vt/vtgate/executor.go +++ b/go/vt/vtgate/executor.go @@ -59,8 +59,12 @@ var ( errNoKeyspace = vterrors.Errorf(vtrpcpb.Code_FAILED_PRECONDITION, "no keyspace in database name specified. Supported database name format (items in <> are optional): keyspace<:shard><@type> or keyspace<[range]><@type>") defaultTabletType topodatapb.TabletType + // TODO: @rafael - These two counters should be deprecated in favor of the ByTable ones. They are kept for now for backwards compatibility. queriesProcessed = stats.NewCountersWithSingleLabel("QueriesProcessed", "Queries processed at vtgate by plan type", "Plan") queriesRouted = stats.NewCountersWithSingleLabel("QueriesRouted", "Queries routed from vtgate to vttablet by plan type", "Plan") + + queriesProcessedByTable = stats.NewCountersWithMultiLabels("QueriesProcessedByTable", "Queries processed at vtgate by plan type, keyspace and table", []string{"Plan", "Keyspace", "Table"}) + queriesRoutedByTable = stats.NewCountersWithMultiLabels("QueriesRoutedByTable", "Queries routed from vtgate to vttablet by plan type, keyspace and table", []string{"Plan", "Keyspace", "Table"}) ) func init() { @@ -129,6 +133,9 @@ func (e *Executor) Execute(ctx context.Context, method string, safeSession *Safe logStats := NewLogStats(ctx, method, sql, bindVars) result, err = e.execute(ctx, safeSession, sql, bindVars, logStats) logStats.Error = err + if result != nil && len(result.Rows) > *warnMemoryRows { + warnings.Add("ResultsExceeded", 1) + } // The mysql plugin runs an implicit rollback whenever a connection closes. // To avoid spamming the log with no-op rollback records, ignore it if @@ -241,8 +248,6 @@ func (e *Executor) handleExec(ctx context.Context, safeSession *SafeSession, sql // TODO(sougou): change this flow to go through V3 functions // which will allow us to benefit from the autocommitable flag. - queriesProcessed.Add("ShardDirect", 1) - if destKeyspace == "" { return nil, errNoKeyspace } @@ -273,7 +278,7 @@ func (e *Executor) handleExec(ctx context.Context, safeSession *SafeSession, sql logStats.BindVariables = bindVars result, err := e.destinationExec(ctx, safeSession, sql, bindVars, dest, destKeyspace, destTabletType, logStats) logStats.ExecuteTime = time.Since(execStart) - queriesRouted.Add("ShardDirect", int64(logStats.ShardQueries)) + e.updateQueryCounts("ShardDirect", "", "", int64(logStats.ShardQueries)) return result, err } @@ -299,8 +304,8 @@ func (e *Executor) handleExec(ctx context.Context, safeSession *SafeSession, sql qr, err := plan.Instructions.Execute(vcursor, bindVars, true) logStats.ExecuteTime = time.Since(execStart) - queriesProcessed.Add(plan.Instructions.RouteType(), 1) - queriesRouted.Add(plan.Instructions.RouteType(), int64(logStats.ShardQueries)) + + e.updateQueryCounts(plan.Instructions.RouteType(), plan.Instructions.GetKeyspaceName(), plan.Instructions.GetTableName(), int64(logStats.ShardQueries)) var errCount uint64 if err != nil { @@ -362,8 +367,7 @@ func (e *Executor) handleDDL(ctx context.Context, safeSession *SafeSession, sql result, err := e.destinationExec(ctx, safeSession, sql, bindVars, dest, destKeyspace, destTabletType, logStats) logStats.ExecuteTime = time.Since(execStart) - queriesProcessed.Add("DDL", 1) - queriesRouted.Add("DDL", int64(logStats.ShardQueries)) + e.updateQueryCounts("DDL", "", "", int64(logStats.ShardQueries)) return result, err } @@ -413,7 +417,7 @@ func (e *Executor) handleBegin(ctx context.Context, safeSession *SafeSession, sq err := e.txConn.Begin(ctx, safeSession) logStats.ExecuteTime = time.Since(execStart) - queriesProcessed.Add("Begin", 1) + e.updateQueryCounts("Begin", "", "", 0) return &sqltypes.Result{}, err } @@ -422,8 +426,8 @@ func (e *Executor) handleCommit(ctx context.Context, safeSession *SafeSession, s execStart := time.Now() logStats.PlanTime = execStart.Sub(logStats.StartTime) logStats.ShardQueries = uint32(len(safeSession.ShardSessions)) - queriesProcessed.Add("Commit", 1) - queriesRouted.Add("Commit", int64(logStats.ShardQueries)) + e.updateQueryCounts("Commit", "", "", int64(logStats.ShardQueries)) + err := e.txConn.Commit(ctx, safeSession) logStats.CommitTime = time.Since(execStart) return &sqltypes.Result{}, err @@ -433,8 +437,7 @@ func (e *Executor) handleRollback(ctx context.Context, safeSession *SafeSession, execStart := time.Now() logStats.PlanTime = execStart.Sub(logStats.StartTime) logStats.ShardQueries = uint32(len(safeSession.ShardSessions)) - queriesProcessed.Add("Rollback", 1) - queriesRouted.Add("Rollback", int64(logStats.ShardQueries)) + e.updateQueryCounts("Rollback", "", "", int64(logStats.ShardQueries)) err := e.txConn.Rollback(ctx, safeSession) logStats.CommitTime = time.Since(execStart) return &sqltypes.Result{}, err @@ -1035,8 +1038,7 @@ func (e *Executor) handleOther(ctx context.Context, safeSession *SafeSession, sq execStart := time.Now() result, err := e.destinationExec(ctx, safeSession, sql, bindVars, dest, destKeyspace, destTabletType, logStats) - queriesProcessed.Add("Other", 1) - queriesRouted.Add("Other", int64(logStats.ShardQueries)) + e.updateQueryCounts("Other", "", "", int64(logStats.ShardQueries)) logStats.ExecuteTime = time.Since(execStart) return result, err @@ -1375,6 +1377,14 @@ func (e *Executor) Plans() *cache.LRUCache { return e.plans } +func (e *Executor) updateQueryCounts(planType, keyspace, tableName string, shardQueries int64) { + queriesProcessed.Add(planType, 1) + queriesRouted.Add(planType, shardQueries) + queriesProcessedByTable.Add([]string{planType, keyspace, tableName}, 1) + queriesRoutedByTable.Add([]string{planType, keyspace, tableName}, shardQueries) + return +} + // VSchemaStats returns the loaded vschema stats. func (e *Executor) VSchemaStats() *VSchemaStats { e.mu.Lock() @@ -1407,3 +1417,100 @@ func buildVarCharRow(values ...string) []sqltypes.Value { } return row } + +// Prepare executes a prepare statements. +func (e *Executor) Prepare(ctx context.Context, method string, safeSession *SafeSession, sql string, bindVars map[string]*querypb.BindVariable) (fld []*querypb.Field, err error) { + logStats := NewLogStats(ctx, method, sql, bindVars) + fld, err = e.prepare(ctx, safeSession, sql, bindVars, logStats) + logStats.Error = err + + // The mysql plugin runs an implicit rollback whenever a connection closes. + // To avoid spamming the log with no-op rollback records, ignore it if + // it was a no-op record (i.e. didn't issue any queries) + if !(logStats.StmtType == "ROLLBACK" && logStats.ShardQueries == 0) { + logStats.Send() + } + return fld, err +} + +func (e *Executor) prepare(ctx context.Context, safeSession *SafeSession, sql string, bindVars map[string]*querypb.BindVariable, logStats *LogStats) ([]*querypb.Field, error) { + // Start an implicit transaction if necessary. + if !safeSession.Autocommit && !safeSession.InTransaction() { + if err := e.txConn.Begin(ctx, safeSession); err != nil { + return nil, err + } + } + + destKeyspace, destTabletType, dest, err := e.ParseDestinationTarget(safeSession.TargetString) + if err != nil { + return nil, err + } + + if safeSession.InTransaction() && destTabletType != topodatapb.TabletType_MASTER { + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "transactions are supported only for master tablet types, current type: %v", destTabletType) + } + if bindVars == nil { + bindVars = make(map[string]*querypb.BindVariable) + } + + stmtType := sqlparser.Preview(sql) + logStats.StmtType = sqlparser.StmtType(stmtType) + + // Mysql warnings are scoped to the current session, but are + // cleared when a "non-diagnostic statement" is executed: + // https://dev.mysql.com/doc/refman/8.0/en/show-warnings.html + // + // To emulate this behavior, clear warnings from the session + // for all statements _except_ SHOW, so that SHOW WARNINGS + // can actually return them. + if stmtType != sqlparser.StmtShow { + safeSession.ClearWarnings() + } + + switch stmtType { + case sqlparser.StmtSelect: + return e.handlePrepare(ctx, safeSession, sql, bindVars, destKeyspace, destTabletType, logStats) + case sqlparser.StmtDDL, sqlparser.StmtBegin, sqlparser.StmtCommit, sqlparser.StmtRollback, sqlparser.StmtSet, sqlparser.StmtInsert, sqlparser.StmtReplace, sqlparser.StmtUpdate, sqlparser.StmtDelete, + sqlparser.StmtUse, sqlparser.StmtOther, sqlparser.StmtComment: + return nil, nil + case sqlparser.StmtShow: + res, err := e.handleShow(ctx, safeSession, sql, bindVars, dest, destKeyspace, destTabletType, logStats) + return res.Fields, err + } + return nil, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unrecognized statement: %s", sql) +} + +func (e *Executor) handlePrepare(ctx context.Context, safeSession *SafeSession, sql string, bindVars map[string]*querypb.BindVariable, destKeyspace string, destTabletType topodatapb.TabletType, logStats *LogStats) ([]*querypb.Field, error) { + // V3 mode. + query, comments := sqlparser.SplitMarginComments(sql) + vcursor := newVCursorImpl(ctx, safeSession, destKeyspace, destTabletType, comments, e, logStats) + plan, err := e.getPlan( + vcursor, + query, + comments, + bindVars, + skipQueryPlanCache(safeSession), + logStats, + ) + execStart := time.Now() + logStats.PlanTime = execStart.Sub(logStats.StartTime) + + if err != nil { + logStats.Error = err + return nil, err + } + + qr, err := plan.Instructions.GetFields(vcursor, bindVars) + logStats.ExecuteTime = time.Since(execStart) + var errCount uint64 + if err != nil { + logStats.Error = err + errCount = 1 + } else { + logStats.RowsAffected = qr.RowsAffected + } + + plan.AddStats(1, time.Since(logStats.StartTime), uint64(logStats.ShardQueries), logStats.RowsAffected, errCount) + + return qr.Fields, err +} diff --git a/go/vt/vtgate/executor_dml_test.go b/go/vt/vtgate/executor_dml_test.go index da3d5720aca..ad1bc7c6dc1 100644 --- a/go/vt/vtgate/executor_dml_test.go +++ b/go/vt/vtgate/executor_dml_test.go @@ -1755,3 +1755,81 @@ func TestKeyShardDestQuery(t *testing.T) { sbc2.Queries = nil masterSession.TargetString = "" } + +// Prepared statement tests +func TestUpdateEqualWithPrepare(t *testing.T) { + executor, sbc1, sbc2, sbclookup := createExecutorEnv() + + logChan := QueryLogger.Subscribe("Test") + defer QueryLogger.Unsubscribe(logChan) + + _, err := executorPrepare(executor, "update music set a = :a0 where id = :id0", map[string]*querypb.BindVariable{ + "a0": sqltypes.Int64BindVariable(3), + "id0": sqltypes.Int64BindVariable(2), + }) + if err != nil { + t.Error(err) + } + + wantQueries := []*querypb.BoundQuery{} + wantQueries = nil + + if !reflect.DeepEqual(sbclookup.Queries, wantQueries) { + t.Errorf("sbclookup.Queries: %+v, want %+v\n", sbclookup.Queries, wantQueries) + } + if sbc2.Queries != nil { + t.Errorf("sbc2.Queries: %+v, want nil\n", sbc2.Queries) + } + if sbc1.Queries != nil { + t.Errorf("sbc1.Queries: %+v, want nil\n", sbc1.Queries) + } +} +func TestInsertShardedWithPrepare(t *testing.T) { + executor, sbc1, sbc2, sbclookup := createExecutorEnv() + + logChan := QueryLogger.Subscribe("Test") + defer QueryLogger.Unsubscribe(logChan) + + _, err := executorPrepare(executor, "insert into user(id, v, name) values (:_Id0, 2, ':_name0')", map[string]*querypb.BindVariable{ + "_Id0": sqltypes.Int64BindVariable(1), + "_name0": sqltypes.BytesBindVariable([]byte("myname")), + "__seq0": sqltypes.Int64BindVariable(1), + }) + if err != nil { + t.Error(err) + } + + wantQueries := []*querypb.BoundQuery{} + wantQueries = nil + + if !reflect.DeepEqual(sbc1.Queries, wantQueries) { + t.Errorf("sbc1.Queries:\n%+v, want\n%+v\n", sbc1.Queries, wantQueries) + } + if sbc2.Queries != nil { + t.Errorf("sbc2.Queries: %+v, want nil\n", sbc2.Queries) + } + + if !reflect.DeepEqual(sbclookup.Queries, wantQueries) { + t.Errorf("sbclookup.Queries: \n%+v, want \n%+v", sbclookup.Queries, wantQueries) + } +} + +func TestDeleteEqualWithPrepare(t *testing.T) { + executor, sbc, _, sbclookup := createExecutorEnv() + _, err := executorPrepare(executor, "delete from user where id = :id0", map[string]*querypb.BindVariable{ + "id0": sqltypes.Int64BindVariable(1), + }) + if err != nil { + t.Error(err) + } + wantQueries := []*querypb.BoundQuery{} + wantQueries = nil + + if !reflect.DeepEqual(sbc.Queries, wantQueries) { + t.Errorf("sbc.Queries:\n%+v, want\n%+v\n", sbc.Queries, wantQueries) + } + + if !reflect.DeepEqual(sbclookup.Queries, wantQueries) { + t.Errorf("sbclookup.Queries:\n%+v, want\n%+v\n", sbclookup.Queries, wantQueries) + } +} diff --git a/go/vt/vtgate/executor_framework_test.go b/go/vt/vtgate/executor_framework_test.go index d2b3c3f1297..88073f32f69 100644 --- a/go/vt/vtgate/executor_framework_test.go +++ b/go/vt/vtgate/executor_framework_test.go @@ -392,6 +392,15 @@ func executorExec(executor *Executor, sql string, bv map[string]*querypb.BindVar bv) } +func executorPrepare(executor *Executor, sql string, bv map[string]*querypb.BindVariable) ([]*querypb.Field, error) { + return executor.Prepare( + context.Background(), + "TestExecute", + NewSafeSession(masterSession), + sql, + bv) +} + func executorStream(executor *Executor, sql string) (qr *sqltypes.Result, err error) { results := make(chan *sqltypes.Result, 100) err = executor.StreamExecute( diff --git a/go/vt/vtgate/executor_select_test.go b/go/vt/vtgate/executor_select_test.go index 00d7a637268..8edf443fee9 100644 --- a/go/vt/vtgate/executor_select_test.go +++ b/go/vt/vtgate/executor_select_test.go @@ -2034,3 +2034,28 @@ func TestCrossShardSubqueryGetFields(t *testing.T) { t.Errorf("result: %+v, want %+v", result, wantResult) } } + +func TestSelectBindvarswithPrepare(t *testing.T) { + executor, sbc1, sbc2, _ := createExecutorEnv() + logChan := QueryLogger.Subscribe("Test") + defer QueryLogger.Unsubscribe(logChan) + + sql := "select id from user where id = :id" + _, err := executorPrepare(executor, sql, map[string]*querypb.BindVariable{ + "id": sqltypes.Int64BindVariable(1), + }) + if err != nil { + t.Error(err) + } + + wantQueries := []*querypb.BoundQuery{{ + Sql: "select id from user where 1 != 1", + BindVariables: map[string]*querypb.BindVariable{"id": sqltypes.Int64BindVariable(1)}, + }} + if !reflect.DeepEqual(sbc1.Queries, wantQueries) { + t.Errorf("sbc1.Queries: %+v, want %+v\n", sbc1.Queries, wantQueries) + } + if sbc2.Queries != nil { + t.Errorf("sbc2.Queries: %+v, want nil\n", sbc2.Queries) + } +} diff --git a/go/vt/vtgate/executor_test.go b/go/vt/vtgate/executor_test.go index f64afa2080c..f0157b812fc 100644 --- a/go/vt/vtgate/executor_test.go +++ b/go/vt/vtgate/executor_test.go @@ -46,6 +46,37 @@ import ( vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" ) +func TestExecutorResultsExceeded(t *testing.T) { + save := *warnMemoryRows + *warnMemoryRows = 3 + defer func() { *warnMemoryRows = save }() + + executor, _, _, sbclookup := createExecutorEnv() + session := NewSafeSession(&vtgatepb.Session{TargetString: "@master"}) + + initial := warnings.Counts()["ResultsExceeded"] + + result1 := sqltypes.MakeTestResult(sqltypes.MakeTestFields("col", "int64"), "1") + result2 := sqltypes.MakeTestResult(sqltypes.MakeTestFields("col", "int64"), "1", "2", "3", "4") + sbclookup.SetResults([]*sqltypes.Result{result1, result2}) + + _, err := executor.Execute(context.Background(), "TestExecutorResultsExceeded", session, "select * from main1", nil) + if err != nil { + t.Fatal(err) + } + if got, want := warnings.Counts()["ResultsExceeded"], initial; got != want { + t.Errorf("warnings count: %v, want %v", got, want) + } + + _, err = executor.Execute(context.Background(), "TestExecutorResultsExceeded", session, "select * from main1", nil) + if err != nil { + t.Fatal(err) + } + if got, want := warnings.Counts()["ResultsExceeded"], initial+1; got != want { + t.Errorf("warnings count: %v, want %v", got, want) + } +} + func TestExecutorTransactionsNoAutoCommit(t *testing.T) { executor, _, _, sbclookup := createExecutorEnv() session := NewSafeSession(&vtgatepb.Session{TargetString: "@master"}) @@ -437,7 +468,6 @@ func TestExecutorSet(t *testing.T) { } } } - func TestExecutorAutocommit(t *testing.T) { executor, _, _, sbclookup := createExecutorEnv() session := NewSafeSession(&vtgatepb.Session{TargetString: "@master"}) diff --git a/go/vt/vtgate/planbuilder/builder.go b/go/vt/vtgate/planbuilder/builder.go index 8f7adb16e61..1a5aeaa6bf5 100644 --- a/go/vt/vtgate/planbuilder/builder.go +++ b/go/vt/vtgate/planbuilder/builder.go @@ -28,6 +28,8 @@ import ( topodatapb "vitess.io/vitess/go/vt/proto/topodata" ) +//------------------------------------------------------------------------- + // builder defines the interface that a primitive must // satisfy. type builder interface { @@ -61,7 +63,7 @@ type builder interface { // a resultColumn entry and return it. The top level caller // must accumulate these result columns and set the symtab // after analysis. - PushSelect(pb *primitiveBuilder, expr *sqlparser.AliasedExpr, origin builder) (rc *resultColumn, colnum int, err error) + PushSelect(pb *primitiveBuilder, expr *sqlparser.AliasedExpr, origin builder) (rc *resultColumn, colNumber int, err error) // MakeDistinct makes the primitive handle the distinct clause. MakeDistinct() error @@ -100,13 +102,19 @@ type builder interface { // is different from PushSelect because it may reuse an existing // resultColumn, whereas PushSelect guarantees the addition of a new // result column and returns a distinct symbol for it. - SupplyCol(col *sqlparser.ColName) (rc *resultColumn, colnum int) + SupplyCol(col *sqlparser.ColName) (rc *resultColumn, colNumber int) + + // SupplyWeightString must supply a weight_string expression of the + // specified column. + SupplyWeightString(colNumber int) (weightcolNumber int, err error) // Primitive returns the underlying primitive. // This function should only be called after Wireup is finished. Primitive() engine.Primitive } +//------------------------------------------------------------------------- + // ContextVSchema defines the interface for this package to fetch // info about tables. type ContextVSchema interface { @@ -116,6 +124,133 @@ type ContextVSchema interface { TargetString() string } +//------------------------------------------------------------------------- + +// builderCommon implements some common functionality of builders. +// Make sure to override in case behavior needs to be changed. +type builderCommon struct { + order int + input builder +} + +func newBuilderCommon(input builder) builderCommon { + return builderCommon{input: input} +} + +func (bc *builderCommon) Order() int { + return bc.order +} + +func (bc *builderCommon) Reorder(order int) { + bc.input.Reorder(order) + bc.order = bc.input.Order() + 1 +} + +func (bc *builderCommon) First() builder { + return bc.input.First() +} + +func (bc *builderCommon) ResultColumns() []*resultColumn { + return bc.input.ResultColumns() +} + +func (bc *builderCommon) SetUpperLimit(count *sqlparser.SQLVal) { + bc.input.SetUpperLimit(count) +} + +func (bc *builderCommon) PushMisc(sel *sqlparser.Select) { + bc.input.PushMisc(sel) +} + +func (bc *builderCommon) Wireup(bldr builder, jt *jointab) error { + return bc.input.Wireup(bldr, jt) +} + +func (bc *builderCommon) SupplyVar(from, to int, col *sqlparser.ColName, varname string) { + bc.input.SupplyVar(from, to, col, varname) +} + +func (bc *builderCommon) SupplyCol(col *sqlparser.ColName) (rc *resultColumn, colNumber int) { + return bc.input.SupplyCol(col) +} + +func (bc *builderCommon) SupplyWeightString(colNumber int) (weightcolNumber int, err error) { + return bc.input.SupplyWeightString(colNumber) +} + +//------------------------------------------------------------------------- + +type truncater interface { + SetTruncateColumnCount(int) +} + +// resultsBuilder is a superset of builderCommon. It also handles +// resultsColumn functionality. +type resultsBuilder struct { + builderCommon + resultColumns []*resultColumn + weightStrings map[*resultColumn]int + truncater truncater +} + +func newResultsBuilder(input builder, truncater truncater) resultsBuilder { + return resultsBuilder{ + builderCommon: newBuilderCommon(input), + resultColumns: input.ResultColumns(), + weightStrings: make(map[*resultColumn]int), + truncater: truncater, + } +} + +func (rsb *resultsBuilder) ResultColumns() []*resultColumn { + return rsb.resultColumns +} + +// SupplyCol is currently unreachable because the builders using resultsBuilder +// are currently above a join, which is the only builder that uses it for now. +// This can change if we start supporting correlated subqueries. +func (rsb *resultsBuilder) SupplyCol(col *sqlparser.ColName) (rc *resultColumn, colNumber int) { + c := col.Metadata.(*column) + for i, rc := range rsb.resultColumns { + if rc.column == c { + return rc, i + } + } + rc, colNumber = rsb.input.SupplyCol(col) + if colNumber < len(rsb.resultColumns) { + return rc, colNumber + } + // Add result columns from input until colNumber is reached. + for colNumber >= len(rsb.resultColumns) { + rsb.resultColumns = append(rsb.resultColumns, rsb.input.ResultColumns()[len(rsb.resultColumns)]) + } + rsb.truncater.SetTruncateColumnCount(len(rsb.resultColumns)) + return rc, colNumber +} + +func (rsb *resultsBuilder) SupplyWeightString(colNumber int) (weightcolNumber int, err error) { + rc := rsb.resultColumns[colNumber] + if weightcolNumber, ok := rsb.weightStrings[rc]; ok { + return weightcolNumber, nil + } + weightcolNumber, err = rsb.input.SupplyWeightString(colNumber) + if err != nil { + return 0, nil + } + rsb.weightStrings[rc] = weightcolNumber + if weightcolNumber < len(rsb.resultColumns) { + return weightcolNumber, nil + } + // Add result columns from input until weightcolNumber is reached. + for weightcolNumber >= len(rsb.resultColumns) { + rsb.resultColumns = append(rsb.resultColumns, rsb.input.ResultColumns()[len(rsb.resultColumns)]) + } + rsb.truncater.SetTruncateColumnCount(len(rsb.resultColumns)) + return weightcolNumber, nil +} + +//------------------------------------------------------------------------- + // Build builds a plan for a query based on the specified vschema. // It's the main entry point for this package. func Build(query string, vschema ContextVSchema) (*engine.Plan, error) { @@ -165,7 +300,7 @@ func BuildFromStmt(query string, stmt sqlparser.Statement, vschema ContextVSchem case *sqlparser.Rollback: return nil, errors.New("unsupported construct: rollback") default: - panic(fmt.Sprintf("BUG: unexpected statement type: %T", stmt)) + return nil, fmt.Errorf("BUG: unexpected statement type: %T", stmt) } if err != nil { return nil, err diff --git a/go/vt/vtgate/planbuilder/expr.go b/go/vt/vtgate/planbuilder/expr.go index d37cbec543c..0447fa9dde8 100644 --- a/go/vt/vtgate/planbuilder/expr.go +++ b/go/vt/vtgate/planbuilder/expr.go @@ -127,7 +127,7 @@ func (pb *primitiveBuilder) findOrigin(expr sqlparser.Expr) (pullouts []*pullout return false, err } default: - panic(fmt.Sprintf("BUG: unexpected SELECT type: %T", node)) + return false, fmt.Errorf("BUG: unexpected SELECT type: %T", node) } sqi := subqueryInfo{ ast: node, diff --git a/go/vt/vtgate/planbuilder/from.go b/go/vt/vtgate/planbuilder/from.go index 8a98b930bef..203146683ca 100644 --- a/go/vt/vtgate/planbuilder/from.go +++ b/go/vt/vtgate/planbuilder/from.go @@ -79,7 +79,7 @@ func (pb *primitiveBuilder) processTableExpr(tableExpr sqlparser.TableExpr) erro case *sqlparser.JoinTableExpr: return pb.processJoin(tableExpr) } - panic(fmt.Sprintf("BUG: unexpected table expression type: %T", tableExpr)) + return fmt.Errorf("BUG: unexpected table expression type: %T", tableExpr) } // processAliasedTable produces a builder subtree for the given AliasedTableExpr. @@ -105,7 +105,7 @@ func (pb *primitiveBuilder) processAliasedTable(tableExpr *sqlparser.AliasedTabl return err } default: - panic(fmt.Sprintf("BUG: unexpected SELECT type: %T", stmt)) + return fmt.Errorf("BUG: unexpected SELECT type: %T", stmt) } subroute, ok := spb.bldr.(*route) @@ -168,7 +168,7 @@ func (pb *primitiveBuilder) processAliasedTable(tableExpr *sqlparser.AliasedTabl pb.bldr, pb.st = rb, st return nil } - panic(fmt.Sprintf("BUG: unexpected table expression type: %T", tableExpr.Expr)) + return fmt.Errorf("BUG: unexpected table expression type: %T", tableExpr.Expr) } // buildTablePrimitive builds a primitive based on the table name. @@ -247,6 +247,9 @@ func (pb *primitiveBuilder) buildTablePrimitive(tableExpr *sqlparser.AliasedTabl eroute.Vindex, _ = vindexes.NewBinary("binary", nil) eroute.Values = []sqltypes.PlanValue{{Value: sqltypes.MakeTrusted(sqltypes.VarBinary, vst.Pinned)}} } + // set table name into route + eroute.TableName = vst.Name.String() + rb.routeOptions = append(rb.routeOptions, newRouteOption(rb, vst, sub, vindexMaps[i], eroute)) } return nil diff --git a/go/vt/vtgate/planbuilder/insert.go b/go/vt/vtgate/planbuilder/insert.go index f5a6d68e0b7..bc847bac866 100644 --- a/go/vt/vtgate/planbuilder/insert.go +++ b/go/vt/vtgate/planbuilder/insert.go @@ -70,7 +70,7 @@ func buildInsertUnshardedPlan(ins *sqlparser.Insert, table *vindexes.Table, vsch case sqlparser.Values: rows = insertValues default: - panic(fmt.Sprintf("BUG: unexpected construct in insert: %T", insertValues)) + return nil, fmt.Errorf("BUG: unexpected construct in insert: %T", insertValues) } if eins.Table.AutoIncrement == nil { eins.Query = generateQuery(ins) @@ -137,7 +137,7 @@ func buildInsertShardedPlan(ins *sqlparser.Insert, table *vindexes.Table) (*engi return nil, errors.New("unsupported: subquery in insert values") } default: - panic(fmt.Sprintf("BUG: unexpected construct in insert: %T", insertValues)) + return nil, fmt.Errorf("BUG: unexpected construct in insert: %T", insertValues) } for _, value := range rows { if len(ins.Columns) != len(value) { diff --git a/go/vt/vtgate/planbuilder/join.go b/go/vt/vtgate/planbuilder/join.go index 81fab0060ae..86a99d9357a 100644 --- a/go/vt/vtgate/planbuilder/join.go +++ b/go/vt/vtgate/planbuilder/join.go @@ -31,6 +31,7 @@ var _ builder = (*join)(nil) type join struct { order int resultColumns []*resultColumn + weightStrings map[*resultColumn]int // leftOrder stores the order number of the left node. This is // used for a b-tree style traversal towards the target route. @@ -98,8 +99,9 @@ func newJoin(lpb, rpb *primitiveBuilder, ajoin *sqlparser.JoinTableExpr) error { } } lpb.bldr = &join{ - Left: lpb.bldr, - Right: rpb.bldr, + weightStrings: make(map[*resultColumn]int), + Left: lpb.bldr, + Right: rpb.bldr, ejoin: &engine.Join{ Opcode: opcode, Vars: make(map[string]int), @@ -154,24 +156,24 @@ func (jb *join) PushFilter(pb *primitiveBuilder, filter sqlparser.Expr, whereTyp } // PushSelect satisfies the builder interface. -func (jb *join) PushSelect(pb *primitiveBuilder, expr *sqlparser.AliasedExpr, origin builder) (rc *resultColumn, colnum int, err error) { +func (jb *join) PushSelect(pb *primitiveBuilder, expr *sqlparser.AliasedExpr, origin builder) (rc *resultColumn, colNumber int, err error) { if jb.isOnLeft(origin.Order()) { - rc, colnum, err = jb.Left.PushSelect(pb, expr, origin) + rc, colNumber, err = jb.Left.PushSelect(pb, expr, origin) if err != nil { return nil, 0, err } - jb.ejoin.Cols = append(jb.ejoin.Cols, -colnum-1) + jb.ejoin.Cols = append(jb.ejoin.Cols, -colNumber-1) } else { // Pushing of non-trivial expressions not allowed for RHS of left joins. if _, ok := expr.Expr.(*sqlparser.ColName); !ok && jb.ejoin.Opcode == engine.LeftJoin { return nil, 0, errors.New("unsupported: cross-shard left join and column expressions") } - rc, colnum, err = jb.Right.PushSelect(pb, expr, origin) + rc, colNumber, err = jb.Right.PushSelect(pb, expr, origin) if err != nil { return nil, 0, err } - jb.ejoin.Cols = append(jb.ejoin.Cols, colnum+1) + jb.ejoin.Cols = append(jb.ejoin.Cols, colNumber+1) } jb.resultColumns = append(jb.resultColumns, rc) return rc, len(jb.resultColumns) - 1, nil @@ -228,7 +230,7 @@ func (jb *join) PushOrderBy(orderBy sqlparser.OrderBy) (builder, error) { return nil, err } if jb.ResultColumns()[num].column.Origin().Order() > jb.Left.Order() { - return nil, errors.New("unsupported: order by spans across shards") + return newMemorySort(jb, orderBy) } } else { // Analyze column references within the expression to make sure they all @@ -246,7 +248,7 @@ func (jb *join) PushOrderBy(orderBy sqlparser.OrderBy) (builder, error) { return true, nil }, order.Expr) if err != nil { - return nil, err + return newMemorySort(jb, orderBy) } } } @@ -316,7 +318,7 @@ func (jb *join) SupplyVar(from, to int, col *sqlparser.ColName, varname string) } // SupplyCol satisfies the builder interface. -func (jb *join) SupplyCol(col *sqlparser.ColName) (rc *resultColumn, colnum int) { +func (jb *join) SupplyCol(col *sqlparser.ColName) (rc *resultColumn, colNumber int) { c := col.Metadata.(*column) for i, rc := range jb.resultColumns { if rc.column == c { @@ -337,6 +339,31 @@ func (jb *join) SupplyCol(col *sqlparser.ColName) (rc *resultColumn, colnum int) return rc, len(jb.ejoin.Cols) - 1 } +// SupplyWeightString satisfies the builder interface. +func (jb *join) SupplyWeightString(colNumber int) (weightcolNumber int, err error) { + rc := jb.resultColumns[colNumber] + if weightcolNumber, ok := jb.weightStrings[rc]; ok { + return weightcolNumber, nil + } + routeNumber := rc.column.Origin().Order() + if jb.isOnLeft(routeNumber) { + sourceCol, err := jb.Left.SupplyWeightString(-jb.ejoin.Cols[colNumber] - 1) + if err != nil { + return 0, err + } + jb.ejoin.Cols = append(jb.ejoin.Cols, -sourceCol-1) + } else { + sourceCol, err := jb.Right.SupplyWeightString(jb.ejoin.Cols[colNumber] - 1) + if err != nil { + return 0, err + } + jb.ejoin.Cols = append(jb.ejoin.Cols, sourceCol+1) + } + jb.resultColumns = append(jb.resultColumns, rc) + jb.weightStrings[rc] = len(jb.ejoin.Cols) - 1 + return len(jb.ejoin.Cols) - 1, nil +} + // isOnLeft returns true if the specified route number // is on the left side of the join. If false, it means // the node is on the right. diff --git a/go/vt/vtgate/planbuilder/limit.go b/go/vt/vtgate/planbuilder/limit.go index 453635b99a4..5dbc9a967a5 100644 --- a/go/vt/vtgate/planbuilder/limit.go +++ b/go/vt/vtgate/planbuilder/limit.go @@ -32,55 +32,31 @@ var _ builder = (*limit)(nil) // operation. Since a limit is the final operation // of a SELECT, most pushes are not applicable. type limit struct { - order int - resultColumns []*resultColumn - input builder - elimit *engine.Limit + builderCommon + elimit *engine.Limit } // newLimit builds a new limit. func newLimit(bldr builder) *limit { return &limit{ - resultColumns: bldr.ResultColumns(), - input: bldr, + builderCommon: newBuilderCommon(bldr), elimit: &engine.Limit{}, } } -// Order satisfies the builder interface. -func (l *limit) Order() int { - return l.order -} - -// Reorder satisfies the builder interface. -func (l *limit) Reorder(order int) { - l.input.Reorder(order) - l.order = l.input.Order() + 1 -} - // Primitive satisfies the builder interface. func (l *limit) Primitive() engine.Primitive { l.elimit.Input = l.input.Primitive() return l.elimit } -// First satisfies the builder interface. -func (l *limit) First() builder { - return l.input.First() -} - -// ResultColumns satisfies the builder interface. -func (l *limit) ResultColumns() []*resultColumn { - return l.resultColumns -} - // PushFilter satisfies the builder interface. func (l *limit) PushFilter(_ *primitiveBuilder, _ sqlparser.Expr, whereType string, _ builder) error { return errors.New("limit.PushFilter: unreachable") } // PushSelect satisfies the builder interface. -func (l *limit) PushSelect(_ *primitiveBuilder, expr *sqlparser.AliasedExpr, origin builder) (rc *resultColumn, colnum int, err error) { +func (l *limit) PushSelect(_ *primitiveBuilder, expr *sqlparser.AliasedExpr, origin builder) (rc *resultColumn, colNumber int, err error) { return nil, 0, errors.New("limit.PushSelect: unreachable") } @@ -136,23 +112,3 @@ func (l *limit) SetLimit(limit *sqlparser.Limit) error { // In the future, we may have to honor this call for subqueries. func (l *limit) SetUpperLimit(count *sqlparser.SQLVal) { } - -// PushMisc satisfies the builder interface. -func (l *limit) PushMisc(sel *sqlparser.Select) { - l.input.PushMisc(sel) -} - -// Wireup satisfies the builder interface. -func (l *limit) Wireup(bldr builder, jt *jointab) error { - return l.input.Wireup(bldr, jt) -} - -// SupplyVar satisfies the builder interface. -func (l *limit) SupplyVar(from, to int, col *sqlparser.ColName, varname string) { - l.input.SupplyVar(from, to, col, varname) -} - -// SupplyCol satisfies the builder interface. -func (l *limit) SupplyCol(col *sqlparser.ColName) (rc *resultColumn, colnum int) { - panic("BUG: nothing should depend on LIMIT") -} diff --git a/go/vt/vtgate/planbuilder/memory_sort.go b/go/vt/vtgate/planbuilder/memory_sort.go index 96f5991ac8c..8fed34d0ba9 100644 --- a/go/vt/vtgate/planbuilder/memory_sort.go +++ b/go/vt/vtgate/planbuilder/memory_sort.go @@ -20,6 +20,7 @@ import ( "errors" "fmt" + "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/vtgate/engine" ) @@ -32,32 +33,30 @@ var _ builder = (*memorySort)(nil) // operation. Since a limit is the final operation // of a SELECT, most pushes are not applicable. type memorySort struct { - order int - resultColumns []*resultColumn - input builder - eMemorySort *engine.MemorySort + resultsBuilder + eMemorySort *engine.MemorySort } // newMemorySort builds a new memorySort. func newMemorySort(bldr builder, orderBy sqlparser.OrderBy) (*memorySort, error) { + eMemorySort := &engine.MemorySort{} ms := &memorySort{ - resultColumns: bldr.ResultColumns(), - input: bldr, - eMemorySort: &engine.MemorySort{}, + resultsBuilder: newResultsBuilder(bldr, eMemorySort), + eMemorySort: eMemorySort, } for _, order := range orderBy { - colnum := -1 + colNumber := -1 switch expr := order.Expr.(type) { case *sqlparser.SQLVal: var err error - if colnum, err = ResultFromNumber(ms.ResultColumns(), expr); err != nil { + if colNumber, err = ResultFromNumber(ms.ResultColumns(), expr); err != nil { return nil, err } case *sqlparser.ColName: c := expr.Metadata.(*column) for i, rc := range ms.ResultColumns() { if rc.column == c { - colnum = i + colNumber = i break } } @@ -66,11 +65,11 @@ func newMemorySort(bldr builder, orderBy sqlparser.OrderBy) (*memorySort, error) } // If column is not found, then the order by is referencing // a column that's not on the select list. - if colnum == -1 { + if colNumber == -1 { return nil, fmt.Errorf("unsupported: memory sort: order by must reference a column in the select list: %s", sqlparser.String(order)) } ob := engine.OrderbyParams{ - Col: colnum, + Col: colNumber, Desc: order.Direction == sqlparser.DescScr, } ms.eMemorySort.OrderBy = append(ms.eMemorySort.OrderBy, ob) @@ -78,40 +77,19 @@ func newMemorySort(bldr builder, orderBy sqlparser.OrderBy) (*memorySort, error) return ms, nil } -// Order satisfies the builder interface. -func (ms *memorySort) Order() int { - return ms.order -} - -// Reorder satisfies the builder interface. -func (ms *memorySort) Reorder(order int) { - ms.input.Reorder(order) - ms.order = ms.input.Order() + 1 -} - // Primitive satisfies the builder interface. func (ms *memorySort) Primitive() engine.Primitive { ms.eMemorySort.Input = ms.input.Primitive() return ms.eMemorySort } -// First satisfies the builder interface. -func (ms *memorySort) First() builder { - return ms.input.First() -} - -// ResultColumns satisfies the builder interface. -func (ms *memorySort) ResultColumns() []*resultColumn { - return ms.resultColumns -} - // PushFilter satisfies the builder interface. func (ms *memorySort) PushFilter(_ *primitiveBuilder, _ sqlparser.Expr, whereType string, _ builder) error { return errors.New("memorySort.PushFilter: unreachable") } // PushSelect satisfies the builder interface. -func (ms *memorySort) PushSelect(_ *primitiveBuilder, expr *sqlparser.AliasedExpr, origin builder) (rc *resultColumn, colnum int, err error) { +func (ms *memorySort) PushSelect(_ *primitiveBuilder, expr *sqlparser.AliasedExpr, origin builder) (rc *resultColumn, colNumber int, err error) { return nil, 0, errors.New("memorySort.PushSelect: unreachable") } @@ -135,29 +113,35 @@ func (ms *memorySort) SetLimit(limit *sqlparser.Limit) error { return errors.New("memorySort.Limit: unreachable") } -// SetUpperLimit satisfies the builder interface. -// This is a no-op because we actually call SetLimit for this primitive. -// In the future, we may have to honor this call for subqueries. -func (ms *memorySort) SetUpperLimit(count *sqlparser.SQLVal) { - ms.eMemorySort.UpperLimit, _ = sqlparser.NewPlanValue(count) -} - -// PushMisc satisfies the builder interface. -func (ms *memorySort) PushMisc(sel *sqlparser.Select) { - ms.input.PushMisc(sel) -} - // Wireup satisfies the builder interface. +// If text columns are detected in the keys, then the function modifies +// the primitive to pull a corresponding weight_string from mysql and +// compare those instead. This is because we currently don't have the +// ability to mimic mysql's collation behavior. func (ms *memorySort) Wireup(bldr builder, jt *jointab) error { + for i, orderby := range ms.eMemorySort.OrderBy { + rc := ms.resultColumns[orderby.Col] + if sqltypes.IsText(rc.column.typ) { + // If a weight string was previously requested, reuse it. + if weightcolNumber, ok := ms.weightStrings[rc]; ok { + ms.eMemorySort.OrderBy[i].Col = weightcolNumber + continue + } + weightcolNumber, err := ms.input.SupplyWeightString(orderby.Col) + if err != nil { + return err + } + ms.weightStrings[rc] = weightcolNumber + ms.eMemorySort.OrderBy[i].Col = weightcolNumber + ms.eMemorySort.TruncateColumnCount = len(ms.resultColumns) + } + } return ms.input.Wireup(bldr, jt) } -// SupplyVar satisfies the builder interface. -func (ms *memorySort) SupplyVar(from, to int, col *sqlparser.ColName, varname string) { - ms.input.SupplyVar(from, to, col, varname) -} - -// SupplyCol satisfies the builder interface. -func (ms *memorySort) SupplyCol(col *sqlparser.ColName) (rc *resultColumn, colnum int) { - panic("BUG: nothing should depend on ORDER BY") +// SetUpperLimit satisfies the builder interface. +// This is a no-op because we actually call SetLimit for this primitive. +// In the future, we may have to honor this call for subqueries. +func (ms *memorySort) SetUpperLimit(count *sqlparser.SQLVal) { + ms.eMemorySort.UpperLimit, _ = sqlparser.NewPlanValue(count) } diff --git a/go/vt/vtgate/planbuilder/merge_sort.go b/go/vt/vtgate/planbuilder/merge_sort.go index 0de7ed913f9..0b423321041 100644 --- a/go/vt/vtgate/planbuilder/merge_sort.go +++ b/go/vt/vtgate/planbuilder/merge_sort.go @@ -19,6 +19,7 @@ package planbuilder import ( "errors" + "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/vtgate/engine" ) @@ -33,26 +34,24 @@ var _ builder = (*mergeSort)(nil) // Since ORDER BY happens near the end of the SQL processing, // most functions of this primitive are unreachable. type mergeSort struct { - order int - input *route + resultsBuilder + truncateColumnCount int } // newMergeSort builds a new mergeSort. func newMergeSort(rb *route) *mergeSort { - return &mergeSort{ - input: rb, + ms := &mergeSort{ + resultsBuilder: newResultsBuilder(rb, nil), } + ms.truncater = ms + return ms } -// Order satisfies the builder interface. -func (ms *mergeSort) Order() int { - return ms.order -} - -// Reorder satisfies the builder interface. -func (ms *mergeSort) Reorder(order int) { - ms.input.Reorder(order) - ms.order = ms.input.Order() + 1 +// SetTruncateColumnCount satisfies the truncater interface. +// This function records the truncate column count and sets +// it later on the eroute during wire-up phase. +func (ms *mergeSort) SetTruncateColumnCount(count int) { + ms.truncateColumnCount = count } // Primitive satisfies the builder interface. @@ -60,23 +59,13 @@ func (ms *mergeSort) Primitive() engine.Primitive { return ms.input.Primitive() } -// First satisfies the builder interface. -func (ms *mergeSort) First() builder { - return ms.input.First() -} - -// ResultColumns satisfies the builder interface. -func (ms *mergeSort) ResultColumns() []*resultColumn { - return ms.input.ResultColumns() -} - // PushFilter satisfies the builder interface. func (ms *mergeSort) PushFilter(pb *primitiveBuilder, expr sqlparser.Expr, whereType string, origin builder) error { return ms.input.PushFilter(pb, expr, whereType, origin) } // PushSelect satisfies the builder interface. -func (ms *mergeSort) PushSelect(pb *primitiveBuilder, expr *sqlparser.AliasedExpr, origin builder) (rc *resultColumn, colnum int, err error) { +func (ms *mergeSort) PushSelect(pb *primitiveBuilder, expr *sqlparser.AliasedExpr, origin builder) (rc *resultColumn, colNumber int, err error) { return ms.input.PushSelect(pb, expr, origin) } @@ -97,27 +86,31 @@ func (ms *mergeSort) PushOrderBy(orderBy sqlparser.OrderBy) (builder, error) { return nil, errors.New("mergeSort.PushOrderBy: unreachable") } -// SetUpperLimit satisfies the builder interface. -func (ms *mergeSort) SetUpperLimit(count *sqlparser.SQLVal) { - ms.input.SetUpperLimit(count) -} - -// PushMisc satisfies the builder interface. -func (ms *mergeSort) PushMisc(sel *sqlparser.Select) { - ms.input.PushMisc(sel) -} - // Wireup satisfies the builder interface. func (ms *mergeSort) Wireup(bldr builder, jt *jointab) error { + // If the route has to do the ordering, and if any columns are Text, + // we have to request the corresponding weight_string from mysql + // and use that value instead. This is because we cannot mimic + // mysql's collation behavior yet. + rb := ms.input.(*route) + rb.finalizeOptions() + ro := rb.routeOptions[0] + for i, orderby := range ro.eroute.OrderBy { + rc := ms.resultColumns[orderby.Col] + if sqltypes.IsText(rc.column.typ) { + // If a weight string was previously requested, reuse it. + if colNumber, ok := ms.weightStrings[rc]; ok { + ro.eroute.OrderBy[i].Col = colNumber + continue + } + var err error + ro.eroute.OrderBy[i].Col, err = rb.SupplyWeightString(orderby.Col) + if err != nil { + return err + } + ms.truncateColumnCount = len(ms.resultColumns) + } + } + ro.eroute.TruncateColumnCount = ms.truncateColumnCount return ms.input.Wireup(bldr, jt) } - -// SupplyVar satisfies the builder interface. -func (ms *mergeSort) SupplyVar(from, to int, col *sqlparser.ColName, varname string) { - ms.input.SupplyVar(from, to, col, varname) -} - -// SupplyCol satisfies the builder interface. -func (ms *mergeSort) SupplyCol(col *sqlparser.ColName) (rc *resultColumn, colnum int) { - return ms.input.SupplyCol(col) -} diff --git a/go/vt/vtgate/planbuilder/ordered_aggregate.go b/go/vt/vtgate/planbuilder/ordered_aggregate.go index e85049d2ebd..b345298addb 100644 --- a/go/vt/vtgate/planbuilder/ordered_aggregate.go +++ b/go/vt/vtgate/planbuilder/ordered_aggregate.go @@ -54,10 +54,8 @@ var _ builder = (*orderedAggregate)(nil) // Input: (Scatter Route with the order by request), // } type orderedAggregate struct { - resultColumns []*resultColumn - order int + resultsBuilder extraDistinct *sqlparser.ColName - input *route eaggr *engine.OrderedAggregate } @@ -132,9 +130,10 @@ func (pb *primitiveBuilder) checkAggregates(sel *sqlparser.Select) error { } // We need an aggregator primitive. + eaggr := &engine.OrderedAggregate{} pb.bldr = &orderedAggregate{ - input: rb, - eaggr: &engine.OrderedAggregate{}, + resultsBuilder: newResultsBuilder(rb, eaggr), + eaggr: eaggr, } pb.bldr.Reorder(0) return nil @@ -238,33 +237,12 @@ func findAlias(colname *sqlparser.ColName, selects sqlparser.SelectExprs) sqlpar return nil } -// Order satisfies the builder interface. -func (oa *orderedAggregate) Order() int { - return oa.order -} - -// Reorder satisfies the builder interface. -func (oa *orderedAggregate) Reorder(order int) { - oa.input.Reorder(order) - oa.order = oa.input.Order() + 1 -} - // Primitive satisfies the builder interface. func (oa *orderedAggregate) Primitive() engine.Primitive { oa.eaggr.Input = oa.input.Primitive() return oa.eaggr } -// First satisfies the builder interface. -func (oa *orderedAggregate) First() builder { - return oa.input.First() -} - -// ResultColumns satisfies the builder interface. -func (oa *orderedAggregate) ResultColumns() []*resultColumn { - return oa.resultColumns -} - // PushFilter satisfies the builder interface. func (oa *orderedAggregate) PushFilter(_ *primitiveBuilder, _ sqlparser.Expr, whereType string, _ builder) error { return errors.New("unsupported: filtering on results of aggregates") @@ -282,7 +260,7 @@ func (oa *orderedAggregate) PushFilter(_ *primitiveBuilder, _ sqlparser.Expr, wh // MAX sent to the route will not be added to symtab and will not be reachable by // others. This functionality depends on the PushOrderBy to request that // the rows be correctly ordered. -func (oa *orderedAggregate) PushSelect(pb *primitiveBuilder, expr *sqlparser.AliasedExpr, origin builder) (rc *resultColumn, colnum int, err error) { +func (oa *orderedAggregate) PushSelect(pb *primitiveBuilder, expr *sqlparser.AliasedExpr, origin builder) (rc *resultColumn, colNumber int, err error) { if inner, ok := expr.Expr.(*sqlparser.FuncExpr); ok { if _, ok := engine.SupportedAggregates[inner.Name.Lowered()]; ok { return oa.pushAggr(pb, expr, origin) @@ -299,13 +277,12 @@ func (oa *orderedAggregate) PushSelect(pb *primitiveBuilder, expr *sqlparser.Ali return innerRC, len(oa.resultColumns) - 1, nil } -func (oa *orderedAggregate) pushAggr(pb *primitiveBuilder, expr *sqlparser.AliasedExpr, origin builder) (rc *resultColumn, colnum int, err error) { +func (oa *orderedAggregate) pushAggr(pb *primitiveBuilder, expr *sqlparser.AliasedExpr, origin builder) (rc *resultColumn, colNumber int, err error) { funcExpr := expr.Expr.(*sqlparser.FuncExpr) opcode := engine.SupportedAggregates[funcExpr.Name.Lowered()] if len(funcExpr.Exprs) != 1 { return nil, 0, fmt.Errorf("unsupported: only one expression allowed inside aggregates: %s", sqlparser.String(funcExpr)) } - var innerRC *resultColumn var innerCol int handleDistinct, innerAliased, err := oa.needDistinctHandling(pb, funcExpr, opcode) if err != nil { @@ -317,8 +294,8 @@ func (oa *orderedAggregate) pushAggr(pb *primitiveBuilder, expr *sqlparser.Alias } // Push the expression that's inside the aggregate. // The column will eventually get added to the group by and order by clauses. - innerRC, innerCol, _ = oa.input.PushSelect(pb, innerAliased, origin) - col, err := oa.input.BuildColName(innerCol) + _, innerCol, _ = oa.input.PushSelect(pb, innerAliased, origin) + col, err := BuildColName(oa.input.ResultColumns(), innerCol) if err != nil { return nil, 0, err } @@ -342,7 +319,7 @@ func (oa *orderedAggregate) pushAggr(pb *primitiveBuilder, expr *sqlparser.Alias Alias: alias, }) } else { - innerRC, innerCol, _ = oa.input.PushSelect(pb, expr, origin) + _, innerCol, _ = oa.input.PushSelect(pb, expr, origin) oa.eaggr.Aggregates = append(oa.eaggr.Aggregates, engine.AggregateParams{ Opcode: opcode, Col: innerCol, @@ -351,7 +328,7 @@ func (oa *orderedAggregate) pushAggr(pb *primitiveBuilder, expr *sqlparser.Alias // Build a new rc with oa as origin because it's semantically different // from the expression we pushed down. - rc = &resultColumn{alias: innerRC.alias, column: &column{origin: oa}} + rc = newResultColumn(expr, oa) oa.resultColumns = append(oa.resultColumns, rc) return rc, len(oa.resultColumns) - 1, nil } @@ -370,7 +347,12 @@ func (oa *orderedAggregate) needDistinctHandling(pb *primitiveBuilder, funcExpr if !ok { return false, nil, fmt.Errorf("syntax error: %s", sqlparser.String(funcExpr)) } - success := oa.input.removeOptions(func(ro *routeOption) bool { + rb, ok := oa.input.(*route) + if !ok { + // Unreachable + return true, innerAliased, nil + } + success := rb.removeOptions(func(ro *routeOption) bool { vindex := ro.FindVindex(pb, innerAliased.Expr) if vindex != nil && vindex.IsUnique() { return true @@ -396,7 +378,7 @@ func (oa *orderedAggregate) MakeDistinct() error { // PushGroupBy satisfies the builder interface. func (oa *orderedAggregate) PushGroupBy(groupBy sqlparser.GroupBy) error { - colnum := -1 + colNumber := -1 for _, expr := range groupBy { switch node := expr.(type) { case *sqlparser.ColName: @@ -406,11 +388,11 @@ func (oa *orderedAggregate) PushGroupBy(groupBy sqlparser.GroupBy) error { } for i, rc := range oa.resultColumns { if rc.column == c { - colnum = i + colNumber = i break } } - if colnum == -1 { + if colNumber == -1 { return errors.New("unsupported: in scatter query: group by column must reference column in SELECT list") } case *sqlparser.SQLVal: @@ -418,11 +400,11 @@ func (oa *orderedAggregate) PushGroupBy(groupBy sqlparser.GroupBy) error { if err != nil { return err } - colnum = num + colNumber = num default: return errors.New("unsupported: in scatter query: only simple references allowed") } - oa.eaggr.Keys = append(oa.eaggr.Keys, colnum) + oa.eaggr.Keys = append(oa.eaggr.Keys, colNumber) } // Append the distinct aggregate if any. if oa.extraDistinct != nil { @@ -497,7 +479,7 @@ func (oa *orderedAggregate) PushOrderBy(orderBy sqlparser.OrderBy) (builder, err continue } // Build a brand new reference for the key. - col, err := oa.input.BuildColName(key) + col, err := BuildColName(oa.input.ResultColumns(), key) if err != nil { return nil, fmt.Errorf("generating order by clause: %v", err) } @@ -513,12 +495,11 @@ func (oa *orderedAggregate) PushOrderBy(orderBy sqlparser.OrderBy) (builder, err // It's ok to push the original AST down because all references // should point to the route. Only aggregate functions are originated // by oa, and we currently don't allow the ORDER BY to reference them. - // TODO(sougou): PushOrderBy will return a mergeSort primitive, which - // we should ideally replace oa.input with. - _, err := oa.input.PushOrderBy(selOrderBy) + bldr, err := oa.input.PushOrderBy(selOrderBy) if err != nil { return nil, err } + oa.input = bldr if postSort { return newMemorySort(oa, orderBy) } @@ -541,22 +522,21 @@ func (oa *orderedAggregate) PushMisc(sel *sqlparser.Select) { // compare those instead. This is because we currently don't have the // ability to mimic mysql's collation behavior. func (oa *orderedAggregate) Wireup(bldr builder, jt *jointab) error { - for i, colnum := range oa.eaggr.Keys { - if sqltypes.IsText(oa.resultColumns[colnum].column.typ) { - // len(oa.resultColumns) does not change. No harm using the value multiple times. + for i, colNumber := range oa.eaggr.Keys { + rc := oa.resultColumns[colNumber] + if sqltypes.IsText(rc.column.typ) { + if weightcolNumber, ok := oa.weightStrings[rc]; ok { + oa.eaggr.Keys[i] = weightcolNumber + continue + } + weightcolNumber, err := oa.input.SupplyWeightString(colNumber) + if err != nil { + return err + } + oa.weightStrings[rc] = weightcolNumber + oa.eaggr.Keys[i] = weightcolNumber oa.eaggr.TruncateColumnCount = len(oa.resultColumns) - oa.eaggr.Keys[i] = oa.input.SupplyWeightString(colnum) } } return oa.input.Wireup(bldr, jt) } - -// SupplyVar satisfies the builder interface. -func (oa *orderedAggregate) SupplyVar(from, to int, col *sqlparser.ColName, varname string) { - panic("BUG: orderedAggregate should only have atomic nodes under it") -} - -// SupplyCol satisfies the builder interface. -func (oa *orderedAggregate) SupplyCol(col *sqlparser.ColName) (rc *resultColumn, colnum int) { - panic("BUG: nothing should depend on orderedAggregate") -} diff --git a/go/vt/vtgate/planbuilder/pullout_subquery.go b/go/vt/vtgate/planbuilder/pullout_subquery.go index 56f99256054..109b205c147 100644 --- a/go/vt/vtgate/planbuilder/pullout_subquery.go +++ b/go/vt/vtgate/planbuilder/pullout_subquery.go @@ -87,7 +87,7 @@ func (ps *pulloutSubquery) PushFilter(pb *primitiveBuilder, filter sqlparser.Exp } // PushSelect satisfies the builder interface. -func (ps *pulloutSubquery) PushSelect(pb *primitiveBuilder, expr *sqlparser.AliasedExpr, origin builder) (rc *resultColumn, colnum int, err error) { +func (ps *pulloutSubquery) PushSelect(pb *primitiveBuilder, expr *sqlparser.AliasedExpr, origin builder) (rc *resultColumn, colNumber int, err error) { return ps.underlying.PushSelect(pb, expr, origin) } @@ -142,6 +142,11 @@ func (ps *pulloutSubquery) SupplyVar(from, to int, col *sqlparser.ColName, varna } // SupplyCol satisfies the builder interface. -func (ps *pulloutSubquery) SupplyCol(col *sqlparser.ColName) (rc *resultColumn, colnum int) { - panic("BUG: unreachable") +func (ps *pulloutSubquery) SupplyCol(col *sqlparser.ColName) (rc *resultColumn, colNumber int) { + return ps.underlying.SupplyCol(col) +} + +// SupplyWeightString satisfies the builder interface. +func (ps *pulloutSubquery) SupplyWeightString(colNumber int) (weightcolNumber int, err error) { + return ps.underlying.SupplyWeightString(colNumber) } diff --git a/go/vt/vtgate/planbuilder/route.go b/go/vt/vtgate/planbuilder/route.go index 891fb845f18..c8e58cf6bdd 100644 --- a/go/vt/vtgate/planbuilder/route.go +++ b/go/vt/vtgate/planbuilder/route.go @@ -17,7 +17,6 @@ limitations under the License. package planbuilder import ( - "errors" "fmt" "strings" @@ -124,7 +123,7 @@ func (rb *route) UpdatePlans(pb *primitiveBuilder, filter sqlparser.Expr) { } // PushSelect satisfies the builder interface. -func (rb *route) PushSelect(_ *primitiveBuilder, expr *sqlparser.AliasedExpr, _ builder) (rc *resultColumn, colnum int, err error) { +func (rb *route) PushSelect(_ *primitiveBuilder, expr *sqlparser.AliasedExpr, _ builder) (rc *resultColumn, colNumber int, err error) { sel := rb.Select.(*sqlparser.Select) sel.SelectExprs = append(sel.SelectExprs, expr) @@ -190,18 +189,18 @@ func (rb *route) PushOrderBy(orderBy sqlparser.OrderBy) (builder, error) { // If it's a scatter, we have to populate the OrderBy field. for _, order := range orderBy { - colnum := -1 + colNumber := -1 switch expr := order.Expr.(type) { case *sqlparser.SQLVal: var err error - if colnum, err = ResultFromNumber(rb.resultColumns, expr); err != nil { + if colNumber, err = ResultFromNumber(rb.resultColumns, expr); err != nil { return nil, err } case *sqlparser.ColName: c := expr.Metadata.(*column) for i, rc := range rb.resultColumns { if rc.column == c { - colnum = i + colNumber = i break } } @@ -210,11 +209,11 @@ func (rb *route) PushOrderBy(orderBy sqlparser.OrderBy) (builder, error) { } // If column is not found, then the order by is referencing // a column that's not on the select list. - if colnum == -1 { + if colNumber == -1 { return nil, fmt.Errorf("unsupported: in scatter query: order by must reference a column in the select list: %s", sqlparser.String(order)) } ob := engine.OrderbyParams{ - Col: colnum, + Col: colNumber, Desc: order.Direction == sqlparser.DescScr, } for _, ro := range rb.routeOptions { @@ -273,43 +272,6 @@ func (rb *route) Wireup(bldr builder, jt *jointab) error { } } - // If rb has to do the ordering, and if any columns are Text, - // we have to request the corresponding weight_string from mysql - // and use that value instead. This is because we cannot mimic - // mysql's collation behavior yet. - for i, orderby := range ro.eroute.OrderBy { - rc := rb.resultColumns[orderby.Col] - if sqltypes.IsText(rc.column.typ) { - // If a weight string was previously requested (by OrderedAggregator), - // reuse it. - if colnum, ok := rb.weightStrings[rc]; ok { - ro.eroute.OrderBy[i].Col = colnum - continue - } - - // len(rb.resultColumns) does not change. No harm using the value multiple times. - ro.eroute.TruncateColumnCount = len(rb.resultColumns) - - // This code is partially duplicated from SupplyWeightString and PushSelect. - // We should not update resultColumns because it's not returned in the result. - // This is why we don't call PushSelect (or SupplyWeightString). - expr := &sqlparser.AliasedExpr{ - Expr: &sqlparser.FuncExpr{ - Name: sqlparser.NewColIdent("weight_string"), - Exprs: []sqlparser.SelectExpr{ - rb.Select.(*sqlparser.Select).SelectExprs[orderby.Col], - }, - }, - } - sel := rb.Select.(*sqlparser.Select) - sel.SelectExprs = append(sel.SelectExprs, expr) - ro.eroute.OrderBy[i].Col = len(sel.SelectExprs) - 1 - // We don't really have to update weightStrings, but we're doing it - // for good measure. - rb.weightStrings[rc] = len(sel.SelectExprs) - 1 - } - } - // Fix up the AST. _ = sqlparser.Walk(func(node sqlparser.SQLNode) (bool, error) { switch node := node.(type) { @@ -439,7 +401,7 @@ func (rb *route) SupplyVar(from, to int, col *sqlparser.ColName, varname string) } // SupplyCol satisfies the builder interface. -func (rb *route) SupplyCol(col *sqlparser.ColName) (rc *resultColumn, colnum int) { +func (rb *route) SupplyCol(col *sqlparser.ColName) (rc *resultColumn, colNumber int) { c := col.Metadata.(*column) for i, rc := range rb.resultColumns { if rc.column == c { @@ -455,45 +417,24 @@ func (rb *route) SupplyCol(col *sqlparser.ColName) (rc *resultColumn, colnum int return rc, len(rb.resultColumns) - 1 } -func (rb *route) SupplyWeightString(colnum int) (weightColnum int) { - rc := rb.resultColumns[colnum] - if weightColnum, ok := rb.weightStrings[rc]; ok { - return weightColnum +// SupplyWeightString satisfies the builder interface. +func (rb *route) SupplyWeightString(colNumber int) (weightcolNumber int, err error) { + rc := rb.resultColumns[colNumber] + if weightcolNumber, ok := rb.weightStrings[rc]; ok { + return weightcolNumber, nil } expr := &sqlparser.AliasedExpr{ Expr: &sqlparser.FuncExpr{ Name: sqlparser.NewColIdent("weight_string"), Exprs: []sqlparser.SelectExpr{ - rb.Select.(*sqlparser.Select).SelectExprs[colnum], + rb.Select.(*sqlparser.Select).SelectExprs[colNumber], }, }, } // It's ok to pass nil for pb and builder because PushSelect doesn't use them. - _, weightColnum, _ = rb.PushSelect(nil, expr, nil) - rb.weightStrings[rc] = weightColnum - return weightColnum -} - -// BuildColName builds a *sqlparser.ColName for the resultColumn specified -// by the index. The built ColName will correctly reference the resultColumn -// it was built from, which is safe to push down into the route. -func (rb *route) BuildColName(index int) (*sqlparser.ColName, error) { - alias := rb.resultColumns[index].alias - if alias.IsEmpty() { - return nil, errors.New("cannot reference a complex expression") - } - for i, rc := range rb.resultColumns { - if i == index { - continue - } - if rc.alias.Equal(alias) { - return nil, fmt.Errorf("ambiguous symbol reference: %v", alias) - } - } - return &sqlparser.ColName{ - Metadata: rb.resultColumns[index].column, - Name: alias, - }, nil + _, weightcolNumber, _ = rb.PushSelect(nil, expr, nil) + rb.weightStrings[rc] = weightcolNumber + return weightcolNumber, nil } // MergeSubquery returns true if the subquery route could successfully be merged diff --git a/go/vt/vtgate/planbuilder/select.go b/go/vt/vtgate/planbuilder/select.go index e9a0eab5933..e75685d6117 100644 --- a/go/vt/vtgate/planbuilder/select.go +++ b/go/vt/vtgate/planbuilder/select.go @@ -69,7 +69,7 @@ func buildSelectPlan(sel *sqlparser.Select, vschema ContextVSchema) (primitive e // route primitive. // // The LIMIT clause is the last construct of a query. If it cannot be -// pushed into a route, then a primitve is created on top of any +// pushed into a route, then a primitive is created on top of any // of the above trees to make it discard unwanted rows. func (pb *primitiveBuilder) processSelect(sel *sqlparser.Select, outer *symtab) error { if err := pb.processTableExprs(sel.From); err != nil { @@ -182,7 +182,7 @@ func (pb *primitiveBuilder) pushSelectExprs(sel *sqlparser.Select) error { return pb.pushGroupBy(sel) } -// pusheSelectRoutes is a convenience function that pushes all the select +// pushSelectRoutes is a convenience function that pushes all the select // expressions and returns the list of resultColumns generated for it. func (pb *primitiveBuilder) pushSelectRoutes(selectExprs sqlparser.SelectExprs) ([]*resultColumn, error) { resultColumns := make([]*resultColumn, 0, len(selectExprs)) @@ -236,7 +236,7 @@ func (pb *primitiveBuilder) pushSelectRoutes(selectExprs sqlparser.SelectExprs) } resultColumns = append(resultColumns, rb.PushAnonymous(node)) default: - panic(fmt.Sprintf("BUG: unexpceted select expression type: %T", node)) + return nil, fmt.Errorf("BUG: unexpected select expression type: %T", node) } } return resultColumns, nil diff --git a/go/vt/vtgate/planbuilder/subquery.go b/go/vt/vtgate/planbuilder/subquery.go index a878fd072ac..5aecd4aafe5 100644 --- a/go/vt/vtgate/planbuilder/subquery.go +++ b/go/vt/vtgate/planbuilder/subquery.go @@ -36,17 +36,16 @@ var _ builder = (*subquery)(nil) // clause, because a route is more versatile than // a subquery. type subquery struct { - order int + builderCommon resultColumns []*resultColumn - input builder esubquery *engine.Subquery } // newSubquery builds a new subquery. func newSubquery(alias sqlparser.TableIdent, bldr builder) (*subquery, *symtab, error) { sq := &subquery{ - input: bldr, - esubquery: &engine.Subquery{}, + builderCommon: newBuilderCommon(bldr), + esubquery: &engine.Subquery{}, } // Create a 'table' that represents the subquery. @@ -69,17 +68,6 @@ func newSubquery(alias sqlparser.TableIdent, bldr builder) (*subquery, *symtab, return sq, st, nil } -// Order satisfies the builder interface. -func (sq *subquery) Order() int { - return sq.order -} - -// Reorder satisfies the builder interface. -func (sq *subquery) Reorder(order int) { - sq.input.Reorder(order) - sq.order = sq.input.Order() + 1 -} - // Primitive satisfies the builder interface. func (sq *subquery) Primitive() engine.Primitive { sq.esubquery.Subquery = sq.input.Primitive() @@ -102,14 +90,14 @@ func (sq *subquery) PushFilter(_ *primitiveBuilder, _ sqlparser.Expr, whereType } // PushSelect satisfies the builder interface. -func (sq *subquery) PushSelect(_ *primitiveBuilder, expr *sqlparser.AliasedExpr, _ builder) (rc *resultColumn, colnum int, err error) { +func (sq *subquery) PushSelect(_ *primitiveBuilder, expr *sqlparser.AliasedExpr, _ builder) (rc *resultColumn, colNumber int, err error) { col, ok := expr.Expr.(*sqlparser.ColName) if !ok { return nil, 0, errors.New("unsupported: expression on results of a cross-shard subquery") } - // colnum should already be set for subquery columns. - inner := col.Metadata.(*column).colnum + // colNumber should already be set for subquery columns. + inner := col.Metadata.(*column).colNumber sq.esubquery.Cols = append(sq.esubquery.Cols, inner) // Build a new column reference to represent the result column. @@ -137,34 +125,11 @@ func (sq *subquery) PushOrderBy(orderBy sqlparser.OrderBy) (builder, error) { if len(orderBy) == 0 { return sq, nil } - return nil, errors.New("unsupported: order by on cross-shard subquery") -} - -// SetUpperLimit satisfies the builder interface. -// For now, the call is ignored because the -// repercussions of pushing this limit down -// into a subquery have not been studied yet. -// We can consider doing it in the future. -// TODO(sougou): this could be improved. -func (sq *subquery) SetUpperLimit(_ *sqlparser.SQLVal) { -} - -// PushMisc satisfies the builder interface. -func (sq *subquery) PushMisc(sel *sqlparser.Select) { -} - -// Wireup satisfies the builder interface. -func (sq *subquery) Wireup(bldr builder, jt *jointab) error { - return sq.input.Wireup(bldr, jt) -} - -// SupplyVar satisfies the builder interface. -func (sq *subquery) SupplyVar(from, to int, col *sqlparser.ColName, varname string) { - sq.input.SupplyVar(from, to, col, varname) + return newMemorySort(sq, orderBy) } // SupplyCol satisfies the builder interface. -func (sq *subquery) SupplyCol(col *sqlparser.ColName) (rc *resultColumn, colnum int) { +func (sq *subquery) SupplyCol(col *sqlparser.ColName) (rc *resultColumn, colNumber int) { c := col.Metadata.(*column) for i, rc := range sq.resultColumns { if rc.column == c { @@ -172,9 +137,9 @@ func (sq *subquery) SupplyCol(col *sqlparser.ColName) (rc *resultColumn, colnum } } - // columns that reference subqueries will have their colnum set. + // columns that reference subqueries will have their colNumber set. // Let's use it here. - sq.esubquery.Cols = append(sq.esubquery.Cols, c.colnum) + sq.esubquery.Cols = append(sq.esubquery.Cols, c.colNumber) sq.resultColumns = append(sq.resultColumns, &resultColumn{column: c}) return rc, len(sq.resultColumns) - 1 } diff --git a/go/vt/vtgate/planbuilder/symtab.go b/go/vt/vtgate/planbuilder/symtab.go index 9aeee1190a1..0127661ffbe 100644 --- a/go/vt/vtgate/planbuilder/symtab.go +++ b/go/vt/vtgate/planbuilder/symtab.go @@ -130,7 +130,9 @@ func (st *symtab) AddVSchemaTable(alias sqlparser.TableName, vschemaTables []*vi if vindexMap == nil { vindexMap = make(map[*column]vindexes.Vindex) } - vindexMap[col] = cv.Vindex + if vindexMap[col] == nil || vindexMap[col].Cost() > cv.Vindex.Cost() { + vindexMap[col] = cv.Vindex + } } } } @@ -400,6 +402,28 @@ func ResultFromNumber(rcs []*resultColumn, val *sqlparser.SQLVal) (int, error) { return int(num - 1), nil } +// BuildColName builds a *sqlparser.ColName for the resultColumn specified +// by the index. The built ColName will correctly reference the resultColumn +// it was built from. +func BuildColName(rcs []*resultColumn, index int) (*sqlparser.ColName, error) { + alias := rcs[index].alias + if alias.IsEmpty() { + return nil, errors.New("cannot reference a complex expression") + } + for i, rc := range rcs { + if i == index { + continue + } + if rc.alias.Equal(alias) { + return nil, fmt.Errorf("ambiguous symbol reference: %v", alias) + } + } + return &sqlparser.ColName{ + Metadata: rcs[index].column, + Name: alias, + }, nil +} + // ResolveSymbols resolves all column references against symtab. // This makes sure that they all have their Metadata initialized. // If a symbol cannot be resolved or if the expression contains @@ -436,7 +460,7 @@ func (t *table) addColumn(alias sqlparser.ColIdent, c *column) { lowered := alias.Lowered() // Dups are allowed, but first one wins if referenced. if _, ok := t.columns[lowered]; !ok { - c.colnum = len(t.columnNames) + c.colNumber = len(t.columnNames) t.columns[lowered] = c } t.columnNames = append(t.columnNames, alias) @@ -457,7 +481,7 @@ func (t *table) mergeColumn(alias sqlparser.ColIdent, c *column) (*column, error if t.isAuthoritative { return nil, fmt.Errorf("column %v not found in %v", sqlparser.String(alias), sqlparser.String(t.alias)) } - c.colnum = len(t.columnNames) + c.colNumber = len(t.columnNames) t.columns[lowered] = c t.columnNames = append(t.columnNames, alias) return c, nil @@ -478,13 +502,13 @@ func (t *table) Origin() builder { // // Two columns are equal if their pointer values match. // -// For subquery and vindexFunc, the colnum is also set because +// For subquery and vindexFunc, the colNumber is also set because // the column order is known and unchangeable. type column struct { - origin builder - st *symtab - typ querypb.Type - colnum int + origin builder + st *symtab + typ querypb.Type + colNumber int } // Origin returns the route that originates the column. diff --git a/go/vt/vtgate/planbuilder/testdata/aggr_cases.txt b/go/vt/vtgate/planbuilder/testdata/aggr_cases.txt index 11237d9880f..05a8e4254e9 100644 --- a/go/vt/vtgate/planbuilder/testdata/aggr_cases.txt +++ b/go/vt/vtgate/planbuilder/testdata/aggr_cases.txt @@ -11,7 +11,8 @@ "Sharded": false }, "Query": "select count(*), col from unsharded", - "FieldQuery": "select count(*), col from unsharded where 1 != 1" + "FieldQuery": "select count(*), col from unsharded where 1 != 1", + "Table": "unsharded" } } @@ -28,7 +29,8 @@ "Query": "select count(*), col from user where id = 1", "FieldQuery": "select count(*), col from user where 1 != 1", "Vindex": "user_index", - "Values": [1] + "Values": [1], + "Table": "user" } } @@ -43,7 +45,8 @@ "Sharded": true }, "Query": "select fun(1), col from user", - "FieldQuery": "select fun(1), col from user where 1 != 1" + "FieldQuery": "select fun(1), col from user where 1 != 1", + "Table": "user" } } @@ -58,7 +61,8 @@ "Sharded": true }, "Query": "select distinct col1, id from user", - "FieldQuery": "select col1, id from user where 1 != 1" + "FieldQuery": "select col1, id from user where 1 != 1", + "Table": "user" } } @@ -73,7 +77,8 @@ "Sharded": true }, "Query": "select distinct col1, id from user group by col1", - "FieldQuery": "select col1, id from user where 1 != 1 group by col1" + "FieldQuery": "select col1, id from user where 1 != 1 group by col1", + "Table": "user" } } @@ -115,7 +120,68 @@ "Col": 3, "Desc": false } - ] + ], + "TruncateColumnCount": 5, + "Table": "user" + } + } +} + +# scatter group by a text column, reuse existing weight_string +"select count(*) k, a, textcol1, b from user group by a, textcol1, b order by k, textcol1" +{ + "Original": "select count(*) k, a, textcol1, b from user group by a, textcol1, b order by k, textcol1", + "Instructions": { + "Opcode": "MemorySort", + "MaxRows": null, + "OrderBy": [ + { + "Col": 0, + "Desc": false + }, + { + "Col": 4, + "Desc": false + } + ], + "Input": { + "Aggregates": [ + { + "Opcode": "count", + "Col": 0 + } + ], + "Keys": [ + 1, + 4, + 3 + ], + "TruncateColumnCount": 5, + "Input": { + "Opcode": "SelectScatter", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "Query": "select count(*) as k, a, textcol1, b, weight_string(textcol1) from user group by a, textcol1, b order by textcol1 asc, a asc, b asc", + "FieldQuery": "select count(*) as k, a, textcol1, b, weight_string(textcol1) from user where 1 != 1 group by a, textcol1, b", + "OrderBy": [ + { + "Col": 4, + "Desc": false + }, + { + "Col": 1, + "Desc": false + }, + { + "Col": 3, + "Desc": false + } + ], + "TruncateColumnCount": 5, + "Table": "user" + } } } } @@ -139,7 +205,8 @@ "Sharded": true }, "Query": "select count(*) from user", - "FieldQuery": "select count(*) from user where 1 != 1" + "FieldQuery": "select count(*) from user where 1 != 1", + "Table": "user" } } } @@ -163,7 +230,8 @@ "Sharded": true }, "Query": "select sum(col) from user", - "FieldQuery": "select sum(col) from user where 1 != 1" + "FieldQuery": "select sum(col) from user where 1 != 1", + "Table": "user" } } } @@ -187,7 +255,8 @@ "Sharded": true }, "Query": "select min(col) from user", - "FieldQuery": "select min(col) from user where 1 != 1" + "FieldQuery": "select min(col) from user where 1 != 1", + "Table": "user" } } } @@ -211,7 +280,8 @@ "Sharded": true }, "Query": "select max(col) from user", - "FieldQuery": "select max(col) from user where 1 != 1" + "FieldQuery": "select max(col) from user where 1 != 1", + "Table": "user" } } } @@ -248,7 +318,8 @@ "Col": 0, "Desc": false } - ] + ], + "Table": "user" } } } @@ -266,7 +337,8 @@ "Sharded": true }, "Query": "select user.a from user", - "FieldQuery": "select user.a from user where 1 != 1" + "FieldQuery": "select user.a from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectUnsharded", @@ -275,7 +347,8 @@ "Sharded": false }, "Query": "select t.b from (select count(*) as b from unsharded) as t", - "FieldQuery": "select t.b from (select count(*) as b from unsharded where 1 != 1) as t where 1 != 1" + "FieldQuery": "select t.b from (select count(*) as b from unsharded where 1 != 1) as t where 1 != 1", + "Table": "unsharded" }, "Cols": [ -1, @@ -295,7 +368,8 @@ "Sharded": true }, "Query": "select id, count(*) from user group by id", - "FieldQuery": "select id, count(*) from user where 1 != 1 group by id" + "FieldQuery": "select id, count(*) from user where 1 != 1 group by id", + "Table": "user" } } @@ -310,7 +384,8 @@ "Sharded": true }, "Query": "select id, col, count(*) from user group by id, col", - "FieldQuery": "select id, col, count(*) from user where 1 != 1 group by id, col" + "FieldQuery": "select id, col, count(*) from user where 1 != 1 group by id, col", + "Table": "user" } } @@ -341,7 +416,8 @@ "Col": 0, "Desc": false } - ] + ], + "Table": "user" } } } @@ -373,7 +449,8 @@ "Col": 0, "Desc": false } - ] + ], + "Table": "user" } } } @@ -389,7 +466,8 @@ "Sharded": true }, "Query": "select id, 1 + count(*) from user group by id", - "FieldQuery": "select id, 1 + count(*) from user where 1 != 1 group by id" + "FieldQuery": "select id, 1 + count(*) from user where 1 != 1 group by id", + "Table": "user" } } @@ -404,7 +482,8 @@ "Sharded": true }, "Query": "select id as val, 1 + count(*) from user group by val", - "FieldQuery": "select id as val, 1 + count(*) from user where 1 != 1 group by val" + "FieldQuery": "select id as val, 1 + count(*) from user where 1 != 1 group by val", + "Table": "user" } } @@ -419,7 +498,8 @@ "Sharded": true }, "Query": "select val as id, 1 + count(*) from user group by user.id", - "FieldQuery": "select val as id, 1 + count(*) from user where 1 != 1 group by user.id" + "FieldQuery": "select val as id, 1 + count(*) from user where 1 != 1 group by user.id", + "Table": "user" } } @@ -434,7 +514,8 @@ "Sharded": true }, "Query": "select *, id, 1 + count(*) from user group by id", - "FieldQuery": "select *, id, 1 + count(*) from user where 1 != 1 group by id" + "FieldQuery": "select *, id, 1 + count(*) from user where 1 != 1 group by id", + "Table": "user" } } @@ -451,7 +532,8 @@ "Query": "select id, count(*) as c from user group by id having id = 1 and c = 10", "FieldQuery": "select id, count(*) as c from user where 1 != 1 group by id", "Vindex": "user_index", - "Values": [1] + "Values": [1], + "Table": "user" } } @@ -478,7 +560,8 @@ "Sharded": true }, "Query": "select count(*) as a from user", - "FieldQuery": "select count(*) as a from user where 1 != 1" + "FieldQuery": "select count(*) as a from user where 1 != 1", + "Table": "user" } } } @@ -503,7 +586,8 @@ "Sharded": true }, "Query": "select id, count(*) from user", - "FieldQuery": "select id, count(*) from user where 1 != 1" + "FieldQuery": "select id, count(*) from user where 1 != 1", + "Table": "user" } } } @@ -530,7 +614,8 @@ "Col": 0, "Desc": false } - ] + ], + "Table": "user" } } } @@ -557,7 +642,8 @@ "Col": 0, "Desc": false } - ] + ], + "Table": "user" } } } @@ -573,7 +659,8 @@ "Sharded": true }, "Query": "select id, count(distinct col) from user group by id", - "FieldQuery": "select id, count(distinct col) from user where 1 != 1 group by id" + "FieldQuery": "select id, count(distinct col) from user where 1 != 1 group by id", + "Table": "user" } } @@ -604,7 +691,8 @@ "Col": 0, "Desc": false } - ] + ], + "Table": "user" } } } @@ -642,7 +730,8 @@ "Col": 1, "Desc": false } - ] + ], + "Table": "user" } } } @@ -674,7 +763,8 @@ "Col": 0, "Desc": false } - ] + ], + "Table": "user" } } } @@ -712,7 +802,8 @@ "Col": 1, "Desc": false } - ] + ], + "Table": "user" } } } @@ -750,7 +841,8 @@ "Col": 1, "Desc": false } - ] + ], + "Table": "user" } } } @@ -782,7 +874,57 @@ "Col": 0, "Desc": false } - ] + ], + "Table": "user" + } + } +} + +# order by count distinct +"select col1, count(distinct col2) k from user group by col1 order by k" +{ + "Original": "select col1, count(distinct col2) k from user group by col1 order by k", + "Instructions": { + "Opcode": "MemorySort", + "MaxRows": null, + "OrderBy": [ + { + "Col": 1, + "Desc": false + } + ], + "Input": { + "HasDistinct": true, + "Aggregates": [ + { + "Opcode": "count_distinct", + "Col": 1, + "Alias": "k" + } + ], + "Keys": [ + 0 + ], + "Input": { + "Opcode": "SelectScatter", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "Query": "select col1, col2 from user group by col1, col2 order by col1 asc, col2 asc", + "FieldQuery": "select col1, col2 from user where 1 != 1 group by col1, col2", + "OrderBy": [ + { + "Col": 0, + "Desc": false + }, + { + "Col": 1, + "Desc": false + } + ], + "Table": "user" + } } } } @@ -823,7 +965,8 @@ "Col": 0, "Desc": false } - ] + ], + "Table": "user" } } } @@ -860,7 +1003,8 @@ "Col": 0, "Desc": false } - ] + ], + "Table": "user" } } } @@ -887,7 +1031,8 @@ "Col": 0, "Desc": false } - ] + ], + "Table": "user" } } } @@ -916,7 +1061,8 @@ "Sharded": true }, "Query": "select count(*) from user", - "FieldQuery": "select count(*) from user where 1 != 1" + "FieldQuery": "select count(*) from user where 1 != 1", + "Table": "user" } } } @@ -962,7 +1108,8 @@ "Col": 2, "Desc": false } - ] + ], + "Table": "user" } } } @@ -1004,7 +1151,8 @@ "Col": 2, "Desc": false } - ] + ], + "Table": "user" } } } @@ -1051,7 +1199,8 @@ "Col": 2, "Desc": false } - ] + ], + "Table": "user" } } } @@ -1098,7 +1247,8 @@ "Col": 2, "Desc": false } - ] + ], + "Table": "user" } } } @@ -1140,7 +1290,8 @@ "Col": 1, "Desc": false } - ] + ], + "Table": "user" } } } @@ -1180,7 +1331,8 @@ "Col": 0, "Desc": false } - ] + ], + "Table": "user" } } } @@ -1199,7 +1351,8 @@ "Query":"select user.col1 as a from user where user.id = 5 group by a collate utf8_general_ci", "FieldQuery":"select user.col1 as a from user where 1 != 1 group by a collate utf8_general_ci", "Vindex":"user_index", - "Values":[5] + "Values":[5], + "Table": "user" } } @@ -1214,7 +1367,8 @@ "Sharded": false }, "Query": "select id, count(*) from unsharded as route2 group by id", - "FieldQuery": "select id, count(*) from unsharded as route2 where 1 != 1 group by id" + "FieldQuery": "select id, count(*) from unsharded as route2 where 1 != 1 group by id", + "Table": "unsharded" } } @@ -1229,7 +1383,8 @@ "Sharded": false }, "Query": "select distinct id, a from unsharded as route2", - "FieldQuery": "select id, a from unsharded as route2 where 1 != 1" + "FieldQuery": "select id, a from unsharded as route2 where 1 != 1", + "Table": "unsharded" } } @@ -1244,7 +1399,8 @@ "Sharded": true }, "Query": "select col from ref order by col asc", - "FieldQuery": "select col from ref where 1 != 1" + "FieldQuery": "select col from ref where 1 != 1", + "Table": "ref" } } diff --git a/go/vt/vtgate/planbuilder/testdata/filter_cases.txt b/go/vt/vtgate/planbuilder/testdata/filter_cases.txt index 6a8eaaf80a2..0130fe08b72 100644 --- a/go/vt/vtgate/planbuilder/testdata/filter_cases.txt +++ b/go/vt/vtgate/planbuilder/testdata/filter_cases.txt @@ -9,7 +9,8 @@ "Sharded": true }, "Query": "select id from user", - "FieldQuery": "select id from user where 1 != 1" + "FieldQuery": "select id from user where 1 != 1", + "Table": "user" } } @@ -26,7 +27,8 @@ "Query": "select id from user where user.id = 5", "FieldQuery": "select id from user where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" } } @@ -41,7 +43,8 @@ "Sharded": true }, "Query": "select id from user where user.id = 5 + 5", - "FieldQuery": "select id from user where 1 != 1" + "FieldQuery": "select id from user where 1 != 1", + "Table": "user" } } @@ -58,7 +61,8 @@ "Query": "select id from music where id = 5 and user_id = 4", "FieldQuery": "select id from music where 1 != 1", "Vindex": "user_index", - "Values": [4] + "Values": [4], + "Table": "music" } } @@ -75,7 +79,8 @@ "Query": "select id from user where costly = 'aa' and name = 'bb'", "FieldQuery": "select id from user where 1 != 1", "Vindex": "name_user_map", - "Values": ["bb"] + "Values": ["bb"], + "Table": "user" } } @@ -94,7 +99,8 @@ "Vindex": "name_user_map", "Values": [ ["aa", "bb"] - ] + ], + "Table": "user" } } @@ -109,7 +115,8 @@ "Sharded": true }, "Query": "select id from user where name in (col, 'bb')", - "FieldQuery": "select id from user where 1 != 1" + "FieldQuery": "select id from user where 1 != 1", + "Table": "user" } } @@ -126,7 +133,8 @@ "Query": "select id from user where name = :a", "FieldQuery": "select id from user where 1 != 1", "Vindex": "name_user_map", - "Values": [":a"] + "Values": [":a"], + "Table": "user" } } @@ -143,7 +151,8 @@ "Query": "select id from user where name = 18446744073709551615", "FieldQuery": "select id from user where 1 != 1", "Vindex": "name_user_map", - "Values": [18446744073709551615] + "Values": [18446744073709551615], + "Table": "user" } } @@ -160,7 +169,8 @@ "Query": "select id from user where name in ::__vals", "FieldQuery": "select id from user where 1 != 1", "Vindex": "name_user_map", - "Values": ["::list"] + "Values": ["::list"], + "Table": "user" } } @@ -177,7 +187,8 @@ "Query": "select user_extra.id from user join user_extra on user.id = user_extra.user_id where user.id = 5", "FieldQuery": "select user_extra.id from user join user_extra on user.id = user_extra.user_id where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" } } @@ -194,7 +205,8 @@ "Query": "select user_extra.id from user join user_extra on user.id = user_extra.user_id where user_extra.user_id = 5", "FieldQuery": "select user_extra.id from user join user_extra on user.id = user_extra.user_id where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" } } @@ -211,7 +223,8 @@ "Query": "select user_extra.id from user left join user_extra on user.id = user_extra.user_id where user.id = 5", "FieldQuery": "select user_extra.id from user left join user_extra on user.id = user_extra.user_id where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" } } @@ -226,7 +239,8 @@ "Sharded": true }, "Query": "select user_extra.id from user left join user_extra on user.id = user_extra.user_id where user_extra.user_id = 5", - "FieldQuery": "select user_extra.id from user left join user_extra on user.id = user_extra.user_id where 1 != 1" + "FieldQuery": "select user_extra.id from user left join user_extra on user.id = user_extra.user_id where 1 != 1", + "Table": "user" } } @@ -245,7 +259,8 @@ "Query": "select user.col from user where user.id = 5", "FieldQuery": "select user.col from user where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -254,7 +269,8 @@ "Sharded": true }, "Query": "select user_extra.id from user_extra where user_extra.col = :user_col", - "FieldQuery": "select user_extra.id from user_extra where 1 != 1" + "FieldQuery": "select user_extra.id from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ 1 @@ -280,7 +296,8 @@ "Query": "select user.col from user where user.id = 5", "FieldQuery": "select user.col from user where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" }, "Right": { "Opcode": "SelectEqualUnique", @@ -291,7 +308,8 @@ "Query": "select user_extra.id from user_extra where user_extra.col = :user_col and user_extra.user_id = 5", "FieldQuery": "select user_extra.id from user_extra where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user_extra" }, "Cols": [ 1 @@ -315,7 +333,8 @@ "Sharded": true }, "Query": "select user.col from user", - "FieldQuery": "select user.col from user where 1 != 1" + "FieldQuery": "select user.col from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectEqualUnique", @@ -326,7 +345,8 @@ "Query": "select user_extra.id from user_extra where user_extra.col = :user_col and user_extra.user_id = :user_col", "FieldQuery": "select user_extra.id from user_extra where 1 != 1", "Vindex": "user_index", - "Values": [":user_col"] + "Values": [":user_col"], + "Table": "user_extra" }, "Cols": [ 1 @@ -350,7 +370,8 @@ "Sharded": true }, "Query": "select user.col from user where 1 = 1", - "FieldQuery": "select user.col from user where 1 != 1" + "FieldQuery": "select user.col from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -359,7 +380,8 @@ "Sharded": true }, "Query": "select user_extra.id from user_extra where user_extra.col = :user_col", - "FieldQuery": "select user_extra.id from user_extra where 1 != 1" + "FieldQuery": "select user_extra.id from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ 1 @@ -385,7 +407,8 @@ "Vindex": "user_index", "Values": [ [1, 2] - ] + ], + "Table": "user" } } @@ -404,7 +427,8 @@ "Vindex": "user_index", "Values": [ [1, 2] - ] + ], + "Table": "user" } } @@ -421,7 +445,8 @@ "Query": "select (id or col) as val from user where user.col = 5 and user.id in (1, 2) and user.name = 'aa'", "FieldQuery": "select (id or col) as val from user where 1 != 1", "Vindex": "name_user_map", - "Values": ["aa"] + "Values": ["aa"], + "Table": "user" } } @@ -438,7 +463,8 @@ "Query": "select id from user where user.col = false and user.id in (1, 2) and user.name = 'aa'", "FieldQuery": "select id from user where 1 != 1", "Vindex": "name_user_map", - "Values": ["aa"] + "Values": ["aa"], + "Table": "user" } } @@ -455,7 +481,8 @@ "Query": "select id from user where user.col = 5 and user.id in (1, 2) and user.name = 'aa' and user.id = 1", "FieldQuery": "select id from user where 1 != 1", "Vindex": "user_index", - "Values": [1] + "Values": [1], + "Table": "user" } } @@ -472,7 +499,8 @@ "Query": "select id from user where user.id = 1 and user.name = 'aa' and user.id in (1, 2) and user.col = 5", "FieldQuery": "select id from user where 1 != 1", "Vindex": "user_index", - "Values": [1] + "Values": [1], + "Table": "user" } } @@ -487,7 +515,8 @@ "Sharded": true }, "Query": "select id from user where (user.id = 1 or user.name = 'aa' and user.id in (1, 2))", - "FieldQuery": "select id from user where 1 != 1" + "FieldQuery": "select id from user where 1 != 1", + "Table": "user" } } @@ -504,7 +533,8 @@ "Sharded": true }, "Query": "select user.id from user", - "FieldQuery": "select user.id from user where 1 != 1" + "FieldQuery": "select user.id from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectUnsharded", @@ -513,7 +543,8 @@ "Sharded": false }, "Query": "select unsharded.id from unsharded where unsharded.id = :user_id", - "FieldQuery": "select unsharded.id from unsharded where 1 != 1" + "FieldQuery": "select unsharded.id from unsharded where 1 != 1", + "Table": "unsharded" }, "Cols": [ 1 @@ -539,7 +570,8 @@ "Vindex": "user_index", "Values": [ 1 - ] + ], + "Table": "user" } } @@ -558,7 +590,8 @@ "Vindex": "email_user_map", "Values": [ "aaa" - ] + ], + "Table": "user_metadata" } } @@ -590,7 +623,8 @@ "Sharded": true }, "Query": "select user_extra.col from user_extra", - "FieldQuery": "select user_extra.col from user_extra where 1 != 1" + "FieldQuery": "select user_extra.col from user_extra where 1 != 1", + "Table": "user_extra" }, "Right": { "Opcode": "SelectIN", @@ -603,7 +637,8 @@ "Vindex": "user_index", "Values": [ [":user_extra_col", 1] - ] + ], + "Table": "user" }, "Cols": [ 1 @@ -627,7 +662,8 @@ "Sharded": true }, "Query": "select 1 from user_extra", - "FieldQuery": "select 1 from user_extra where 1 != 1" + "FieldQuery": "select 1 from user_extra where 1 != 1", + "Table": "user_extra" }, "Right": { "Opcode": "SelectEqualUnique", @@ -638,7 +674,8 @@ "Query": "select u.m from user as u where u.id = 5 and u.id in (select m2 from user where user.id = 5)", "FieldQuery": "select u.m from user as u where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" }, "Cols": [ 1 @@ -659,7 +696,8 @@ "Sharded": true }, "Query": "select user_extra.col from user_extra", - "FieldQuery": "select user_extra.col from user_extra where 1 != 1" + "FieldQuery": "select user_extra.col from user_extra where 1 != 1", + "Table": "user_extra" }, "Right": { "Opcode": "SelectIN", @@ -672,7 +710,8 @@ "Vindex": "user_index", "Values": [ [":user_extra_col", 1] - ] + ], + "Table": "user" }, "Cols": [ 1 @@ -694,7 +733,8 @@ "Sharded": true }, "Query": "select id from user where user.col in (select user_extra.col from user_extra where user_extra.user_id = user.id)", - "FieldQuery": "select id from user where 1 != 1" + "FieldQuery": "select id from user where 1 != 1", + "Table": "user" } } @@ -711,7 +751,8 @@ "Query": "select id from user where id = 5 and user.col in (select user_extra.col from user_extra where user_extra.user_id = 5)", "FieldQuery": "select id from user where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" } } @@ -728,7 +769,8 @@ "Query": "select id from user where id = 'aa' and user.col in (select user_extra.col from user_extra where user_extra.user_id = 'aa')", "FieldQuery": "select id from user where 1 != 1", "Vindex": "user_index", - "Values": ["aa"] + "Values": ["aa"], + "Table": "user" } } @@ -745,7 +787,8 @@ "Query": "select id from user where id = :a and user.col in (select user_extra.col from user_extra where user_extra.user_id = :a)", "FieldQuery": "select id from user where 1 != 1", "Vindex": "user_index", - "Values": [":a"] + "Values": [":a"], + "Table": "user" } } @@ -764,7 +807,8 @@ "Sharded": true }, "Query": "select id2 from user as uu where id in (select id from user where id = uu.id and user.col in (select user_extra.col from user_extra where user_extra.user_id = uu.id))", - "FieldQuery": "select id2 from user as uu where 1 != 1" + "FieldQuery": "select id2 from user as uu where 1 != 1", + "Table": "user" } } @@ -784,7 +828,8 @@ "Sharded": true }, "Query": "select col from user", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" }, "Underlying": { "Opcode": "SelectIN", @@ -797,7 +842,8 @@ "Vindex": "user_index", "Values": [ "::__sq1" - ] + ], + "Table": "user" } } } @@ -817,7 +863,8 @@ "Sharded": true }, "Query": "select col from user", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" }, "Underlying": { "Opcode": "SelectScatter", @@ -826,7 +873,8 @@ "Sharded": true }, "Query": "select id from user where (:__sq_has_values1 = 0 or (id not in ::__sq1))", - "FieldQuery": "select id from user where 1 != 1" + "FieldQuery": "select id from user where 1 != 1", + "Table": "user" } } } @@ -846,7 +894,8 @@ "Sharded": true }, "Query": "select col from user", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" }, "Underlying": { "Opcode": "SelectScatter", @@ -855,7 +904,8 @@ "Sharded": true }, "Query": "select id from user where :__sq_has_values1", - "FieldQuery": "select id from user where 1 != 1" + "FieldQuery": "select id from user where 1 != 1", + "Table": "user" } } } @@ -875,7 +925,8 @@ "Sharded": true }, "Query": "select col from user", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" }, "Underlying": { "Opcode": "SelectEqualUnique", @@ -888,7 +939,8 @@ "Vindex": "user_index", "Values": [ ":__sq1" - ] + ], + "Table": "user" } } } @@ -912,7 +964,8 @@ "Sharded": true }, "Query": "select id3 from user", - "FieldQuery": "select id3 from user where 1 != 1" + "FieldQuery": "select id3 from user where 1 != 1", + "Table": "user" }, "Underlying": { "Opcode": "SelectScatter", @@ -921,7 +974,8 @@ "Sharded": true }, "Query": "select id2 from user where :__sq_has_values1 = 1 and (id2 in ::__sq1)", - "FieldQuery": "select id2 from user where 1 != 1" + "FieldQuery": "select id2 from user where 1 != 1", + "Table": "user" } }, "Underlying": { @@ -935,7 +989,8 @@ "Vindex": "user_index", "Values": [ ":__sq2" - ] + ], + "Table": "user" } } } @@ -951,7 +1006,8 @@ "Sharded": true }, "Query": "select col from user where id = (select id from user as route2 where route2.id = user.id)", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" } } @@ -970,7 +1026,8 @@ "Sharded": false }, "Query": "select id from unsharded as route2", - "FieldQuery": "select id from unsharded as route2 where 1 != 1" + "FieldQuery": "select id from unsharded as route2 where 1 != 1", + "Table": "unsharded" }, "Underlying": { "Opcode": "SelectEqualUnique", @@ -983,7 +1040,8 @@ "Vindex": "user_index", "Values": [ ":__sq1" - ] + ], + "Table": "user" } } } @@ -1001,7 +1059,8 @@ "Query": "select user_extra.Id from user join user_extra on user.iD = user_extra.User_Id where user.Id = 5", "FieldQuery": "select user_extra.Id from user join user_extra on user.iD = user_extra.User_Id where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" } } @@ -1016,7 +1075,8 @@ "Sharded": true }, "Query": "select id from user where database()", - "FieldQuery": "select id from user where 1 != 1" + "FieldQuery": "select id from user where 1 != 1", + "Table": "user" } } diff --git a/go/vt/vtgate/planbuilder/testdata/from_cases.txt b/go/vt/vtgate/planbuilder/testdata/from_cases.txt index 50eae5f2c8e..6428be6a65f 100644 --- a/go/vt/vtgate/planbuilder/testdata/from_cases.txt +++ b/go/vt/vtgate/planbuilder/testdata/from_cases.txt @@ -9,7 +9,8 @@ "Sharded": true }, "Query": "select col from user", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" } } @@ -24,7 +25,8 @@ "Sharded": false }, "Query": "select col from unsharded", - "FieldQuery": "select col from unsharded where 1 != 1" + "FieldQuery": "select col from unsharded where 1 != 1", + "Table": "unsharded" } } @@ -39,7 +41,8 @@ "Sharded": false }, "Query": "select next 2 values from seq", - "FieldQuery": "select next 2 values from seq where 1 != 1" + "FieldQuery": "select next 2 values from seq where 1 != 1", + "Table": "seq" } } @@ -54,7 +57,8 @@ "Sharded": true }, "Query": "select * from ref", - "FieldQuery": "select * from ref where 1 != 1" + "FieldQuery": "select * from ref where 1 != 1", + "Table": "ref" } } @@ -84,7 +88,8 @@ "Sharded": false }, "Query": "select m1.col from unsharded as m1 join unsharded as m2", - "FieldQuery": "select m1.col from unsharded as m1 join unsharded as m2 where 1 != 1" + "FieldQuery": "select m1.col from unsharded as m1 join unsharded as m2 where 1 != 1", + "Table": "unsharded" } } @@ -101,7 +106,8 @@ "Sharded": true }, "Query": "select 1 from user", - "FieldQuery": "select 1 from user where 1 != 1" + "FieldQuery": "select 1 from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -110,7 +116,8 @@ "Sharded": true }, "Query": "select music.col from music", - "FieldQuery": "select music.col from music where 1 != 1" + "FieldQuery": "select music.col from music where 1 != 1", + "Table": "music" }, "Cols": [ 1 @@ -129,7 +136,8 @@ "Sharded": true }, "Query": "select * from user", - "FieldQuery": "select * from user where 1 != 1" + "FieldQuery": "select * from user where 1 != 1", + "Table": "user" } } @@ -144,7 +152,8 @@ "Sharded": true }, "Query": "select * from user as a", - "FieldQuery": "select * from user as a where 1 != 1" + "FieldQuery": "select * from user as a where 1 != 1", + "Table": "user" } } @@ -159,7 +168,8 @@ "Sharded": true }, "Query": "select * from user as route1", - "FieldQuery": "select * from user as route1 where 1 != 1" + "FieldQuery": "select * from user as route1 where 1 != 1", + "Table": "user" } } @@ -174,7 +184,8 @@ "Sharded": true }, "Query": "select * from user as a", - "FieldQuery": "select * from user as a where 1 != 1" + "FieldQuery": "select * from user as a where 1 != 1", + "Table": "user" } } @@ -189,7 +200,8 @@ "Sharded": true }, "Query": "select * from user as master_redirect", - "FieldQuery": "select * from user as master_redirect where 1 != 1" + "FieldQuery": "select * from user as master_redirect where 1 != 1", + "Table": "user" } } @@ -214,7 +226,8 @@ "Sharded": true }, "Query": "select 1 from user", - "FieldQuery": "select 1 from user where 1 != 1" + "FieldQuery": "select 1 from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -223,7 +236,8 @@ "Sharded": true }, "Query": "select music.col from music", - "FieldQuery": "select music.col from music where 1 != 1" + "FieldQuery": "select music.col from music where 1 != 1", + "Table": "music" }, "Cols": [ 1 @@ -242,7 +256,8 @@ "Sharded": false }, "Query": "select u1.a, u2.a from unsharded as u1, unsharded as u2", - "FieldQuery": "select u1.a, u2.a from unsharded as u1, unsharded as u2 where 1 != 1" + "FieldQuery": "select u1.a, u2.a from unsharded as u1, unsharded as u2 where 1 != 1", + "Table": "unsharded" } } @@ -272,7 +287,8 @@ "Sharded": false }, "Query": "select u1.a, u2.a from unsharded as u1, unsharded as u2, unsharded as u3", - "FieldQuery": "select u1.a, u2.a from unsharded as u1, unsharded as u2, unsharded as u3 where 1 != 1" + "FieldQuery": "select u1.a, u2.a from unsharded as u1, unsharded as u2, unsharded as u3 where 1 != 1", + "Table": "unsharded" } } @@ -287,7 +303,8 @@ "Sharded": false }, "Query": "select m1.col from unsharded as m1 left join unsharded as m2 on m1.a = m2.b", - "FieldQuery": "select m1.col from unsharded as m1 left join unsharded as m2 on m1.a = m2.b where 1 != 1" + "FieldQuery": "select m1.col from unsharded as m1 left join unsharded as m2 on m1.a = m2.b where 1 != 1", + "Table": "unsharded" } } @@ -304,7 +321,8 @@ "Sharded": true }, "Query": "select u.col, u.a from user as u", - "FieldQuery": "select u.col, u.a from user as u where 1 != 1" + "FieldQuery": "select u.col, u.a from user as u where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectUnsharded", @@ -313,7 +331,8 @@ "Sharded": false }, "Query": "select 1 from unsharded as m where m.b = :u_a", - "FieldQuery": "select 1 from unsharded as m where 1 != 1" + "FieldQuery": "select 1 from unsharded as m where 1 != 1", + "Table": "unsharded" }, "Cols": [ -1 @@ -339,7 +358,8 @@ "Sharded": true }, "Query": "select user.col from user", - "FieldQuery": "select user.col from user where 1 != 1" + "FieldQuery": "select user.col from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectUnsharded", @@ -348,7 +368,8 @@ "Sharded": false }, "Query": "select m1.col from unsharded as m1 where m1.co = :user_col", - "FieldQuery": "select m1.col from unsharded as m1 where 1 != 1" + "FieldQuery": "select m1.col from unsharded as m1 where 1 != 1", + "Table": "unsharded" }, "Cols": [ -1, @@ -365,7 +386,8 @@ "Sharded": false }, "Query": "select 1 from unsharded as m2 where m2.col = :m1_col", - "FieldQuery": "select 1 from unsharded as m2 where 1 != 1" + "FieldQuery": "select 1 from unsharded as m2 where 1 != 1", + "Table": "unsharded" }, "Cols": [ -1 @@ -389,7 +411,8 @@ "Sharded": true }, "Query": "select user.col from user", - "FieldQuery": "select user.col from user where 1 != 1" + "FieldQuery": "select user.col from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "LeftJoin", @@ -400,7 +423,8 @@ "Sharded": true }, "Query": "select e.col from user_extra as e where e.col = :user_col", - "FieldQuery": "select e.col from user_extra as e where 1 != 1" + "FieldQuery": "select e.col from user_extra as e where 1 != 1", + "Table": "user_extra" }, "Right": { "Opcode": "SelectUnsharded", @@ -409,7 +433,8 @@ "Sharded": false }, "Query": "select 1 from unsharded as m1 where m1.col = :e_col", - "FieldQuery": "select 1 from unsharded as m1 where 1 != 1" + "FieldQuery": "select 1 from unsharded as m1 where 1 != 1", + "Table": "unsharded" }, "Vars": { "e_col": 0 @@ -435,7 +460,8 @@ "Sharded": false }, "Query": "select m1.col from unsharded as m2 left join unsharded as m1 on m1.a = m2.b", - "FieldQuery": "select m1.col from unsharded as m2 left join unsharded as m1 on m1.a = m2.b where 1 != 1" + "FieldQuery": "select m1.col from unsharded as m2 left join unsharded as m1 on m1.a = m2.b where 1 != 1", + "Table": "unsharded" } } @@ -450,7 +476,8 @@ "Sharded": false }, "Query": "select m1.col from unsharded as m3 left join (unsharded as m1 join unsharded as m2) on m1.a = m2.b", - "FieldQuery": "select m1.col from unsharded as m3 left join (unsharded as m1 join unsharded as m2) on m1.a = m2.b where 1 != 1" + "FieldQuery": "select m1.col from unsharded as m3 left join (unsharded as m1 join unsharded as m2) on m1.a = m2.b where 1 != 1", + "Table": "unsharded" } } @@ -465,7 +492,8 @@ "Sharded": false }, "Query": "select m1.col from unsharded as m1 straight_join unsharded as m2", - "FieldQuery": "select m1.col from unsharded as m1 straight_join unsharded as m2 where 1 != 1" + "FieldQuery": "select m1.col from unsharded as m1 straight_join unsharded as m2 where 1 != 1", + "Table": "unsharded" } } @@ -484,7 +512,8 @@ "Sharded": true }, "Query": "select user.col from user", - "FieldQuery": "select user.col from user where 1 != 1" + "FieldQuery": "select user.col from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectUnsharded", @@ -493,7 +522,8 @@ "Sharded": false }, "Query": "select 1 from unsharded as m1", - "FieldQuery": "select 1 from unsharded as m1 where 1 != 1" + "FieldQuery": "select 1 from unsharded as m1 where 1 != 1", + "Table": "unsharded" }, "Cols": [ -1 @@ -506,7 +536,8 @@ "Sharded": false }, "Query": "select 1 from unsharded as m2", - "FieldQuery": "select 1 from unsharded as m2 where 1 != 1" + "FieldQuery": "select 1 from unsharded as m2 where 1 != 1", + "Table": "unsharded" }, "Cols": [ -1 @@ -527,7 +558,8 @@ "Sharded": true }, "Query": "select user.col from user", - "FieldQuery": "select user.col from user where 1 != 1" + "FieldQuery": "select user.col from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectUnsharded", @@ -536,7 +568,8 @@ "Sharded": false }, "Query": "select 1 from (unsharded as m1 join unsharded as m2)", - "FieldQuery": "select 1 from (unsharded as m1 join unsharded as m2) where 1 != 1" + "FieldQuery": "select 1 from (unsharded as m1 join unsharded as m2) where 1 != 1", + "Table": "unsharded" }, "Cols": [ -1 @@ -557,7 +590,8 @@ "Sharded": true }, "Query": "select user.col from user", - "FieldQuery": "select user.col from user where 1 != 1" + "FieldQuery": "select user.col from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "Join", @@ -568,7 +602,8 @@ "Sharded": true }, "Query": "select 1 from user as u1", - "FieldQuery": "select 1 from user as u1 where 1 != 1" + "FieldQuery": "select 1 from user as u1 where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectUnsharded", @@ -577,7 +612,8 @@ "Sharded": false }, "Query": "select 1 from unsharded", - "FieldQuery": "select 1 from unsharded where 1 != 1" + "FieldQuery": "select 1 from unsharded where 1 != 1", + "Table": "unsharded" } }, "Cols": [ @@ -597,7 +633,8 @@ "Sharded": true }, "Query": "select user.col from user use index (a)", - "FieldQuery": "select user.col from user use index (a) where 1 != 1" + "FieldQuery": "select user.col from user use index (a) where 1 != 1", + "Table": "user" } } @@ -612,7 +649,8 @@ "Sharded": true }, "Query": "select user.col from user join user_extra on user.id = user_extra.user_id", - "FieldQuery": "select user.col from user join user_extra on user.id = user_extra.user_id where 1 != 1" + "FieldQuery": "select user.col from user join user_extra on user.id = user_extra.user_id where 1 != 1", + "Table": "user" } } @@ -627,7 +665,8 @@ "Sharded": true }, "Query": "select user.col from user join user_extra on (user.id = user_extra.user_id)", - "FieldQuery": "select user.col from user join user_extra on (user.id = user_extra.user_id) where 1 != 1" + "FieldQuery": "select user.col from user join user_extra on (user.id = user_extra.user_id) where 1 != 1", + "Table": "user" } } @@ -642,7 +681,8 @@ "Sharded": true }, "Query": "select user.col from user join user_extra on user.col between 1 and 2 and user.id = user_extra.user_id", - "FieldQuery": "select user.col from user join user_extra on user.col between 1 and 2 and user.id = user_extra.user_id where 1 != 1" + "FieldQuery": "select user.col from user join user_extra on user.col between 1 and 2 and user.id = user_extra.user_id where 1 != 1", + "Table": "user" } } @@ -657,7 +697,8 @@ "Sharded": true }, "Query": "select user.col from user join user_extra on user_extra.user_id = user.id", - "FieldQuery": "select user.col from user join user_extra on user_extra.user_id = user.id where 1 != 1" + "FieldQuery": "select user.col from user join user_extra on user_extra.user_id = user.id where 1 != 1", + "Table": "user" } } @@ -674,7 +715,8 @@ "Query": "select user.col from user join user_extra on user.id = 5 and user.id = user_extra.user_id", "FieldQuery": "select user.col from user join user_extra on user.id = 5 and user.id = user_extra.user_id where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" } } @@ -691,7 +733,8 @@ "Sharded": true }, "Query": "select user.col, user.id from user", - "FieldQuery": "select user.col, user.id from user where 1 != 1" + "FieldQuery": "select user.col, user.id from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -700,7 +743,8 @@ "Sharded": true }, "Query": "select 1 from user_extra where :user_id \u003c user_extra.user_id", - "FieldQuery": "select 1 from user_extra where 1 != 1" + "FieldQuery": "select 1 from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1 @@ -726,7 +770,8 @@ "Query": "select user.col from user where user.id = 5", "FieldQuery": "select user.col from user where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -735,7 +780,8 @@ "Sharded": true }, "Query": "select 1 from user_extra", - "FieldQuery": "select 1 from user_extra where 1 != 1" + "FieldQuery": "select 1 from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1 @@ -758,7 +804,8 @@ "Query": "select user.col from user where user.id = 5", "FieldQuery": "select user.col from user where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -767,7 +814,8 @@ "Sharded": true }, "Query": "select 1 from user_extra", - "FieldQuery": "select 1 from user_extra where 1 != 1" + "FieldQuery": "select 1 from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1 @@ -788,7 +836,8 @@ "Sharded": true }, "Query": "select user.col, user.id from user", - "FieldQuery": "select user.col, user.id from user where 1 != 1" + "FieldQuery": "select user.col, user.id from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -797,7 +846,8 @@ "Sharded": true }, "Query": "select 1 from user_extra where user_extra.col = :user_id", - "FieldQuery": "select 1 from user_extra where 1 != 1" + "FieldQuery": "select 1 from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1 @@ -821,7 +871,8 @@ "Sharded": true }, "Query": "select user_extra.user_id from user_extra", - "FieldQuery": "select user_extra.user_id from user_extra where 1 != 1" + "FieldQuery": "select user_extra.user_id from user_extra where 1 != 1", + "Table": "user_extra" }, "Right": { "Opcode": "SelectEqual", @@ -832,7 +883,8 @@ "Query": "select user.col from user where user.name = :user_extra_user_id", "FieldQuery": "select user.col from user where 1 != 1", "Vindex": "name_user_map", - "Values": [":user_extra_user_id"] + "Values": [":user_extra_user_id"], + "Table": "user" }, "Cols": [ 1 @@ -854,7 +906,8 @@ "Sharded": true }, "Query": "select user.col from user join ref", - "FieldQuery": "select user.col from user join ref where 1 != 1" + "FieldQuery": "select user.col from user join ref where 1 != 1", + "Table": "user" } } @@ -869,7 +922,8 @@ "Sharded": true }, "Query": "select r1.col from ref as r1 join ref", - "FieldQuery": "select r1.col from ref as r1 join ref where 1 != 1" + "FieldQuery": "select r1.col from ref as r1 join ref where 1 != 1", + "Table": "ref" } } @@ -886,7 +940,8 @@ "Sharded": true }, "Query": "select ref.col from ref", - "FieldQuery": "select ref.col from ref where 1 != 1" + "FieldQuery": "select ref.col from ref where 1 != 1", + "Table": "ref" }, "Right": { "Opcode": "SelectScatter", @@ -895,7 +950,8 @@ "Sharded": true }, "Query": "select 1 from user", - "FieldQuery": "select 1 from user where 1 != 1" + "FieldQuery": "select 1 from user where 1 != 1", + "Table": "user" }, "Cols": [ -1 @@ -914,7 +970,8 @@ "Sharded": true }, "Query": "select route2.col from user as route2 join user_extra on route2.id = user_extra.user_id", - "FieldQuery": "select route2.col from user as route2 join user_extra on route2.id = user_extra.user_id where 1 != 1" + "FieldQuery": "select route2.col from user as route2 join user_extra on route2.id = user_extra.user_id where 1 != 1", + "Table": "user" } } @@ -931,7 +988,8 @@ "Sharded": false }, "Query": "select route2.col from unsharded as route2", - "FieldQuery": "select route2.col from unsharded as route2 where 1 != 1" + "FieldQuery": "select route2.col from unsharded as route2 where 1 != 1", + "Table": "unsharded" }, "Right": { "Opcode": "SelectScatter", @@ -940,7 +998,8 @@ "Sharded": true }, "Query": "select 1 from user_extra", - "FieldQuery": "select 1 from user_extra where 1 != 1" + "FieldQuery": "select 1 from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1 @@ -961,7 +1020,8 @@ "Query": "select id from (select id, col from user where id = 5) as t", "FieldQuery": "select id from (select id, col from user where 1 != 1) as t where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" } } @@ -978,7 +1038,8 @@ "Query": "select t.id from (select id from user where id = 5) as t join user_extra on t.id = user_extra.user_id", "FieldQuery": "select t.id from (select id from user where 1 != 1) as t join user_extra on t.id = user_extra.user_id where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" } } @@ -995,7 +1056,8 @@ "Query": "select t.id from (select user.id from user where user.id = 5) as t join user_extra on t.id = user_extra.user_id", "FieldQuery": "select t.id from (select user.id from user where 1 != 1) as t join user_extra on t.id = user_extra.user_id where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" } } @@ -1014,7 +1076,8 @@ "Sharded": true }, "Query": "select t.id from user_extra join (select id from user where id = 5) as t on t.id = user_extra.user_id", - "FieldQuery": "select t.id from user_extra join (select id from user where 1 != 1) as t on t.id = user_extra.user_id where 1 != 1" + "FieldQuery": "select t.id from user_extra join (select id from user where 1 != 1) as t on t.id = user_extra.user_id where 1 != 1", + "Table": "user_extra" } } @@ -1033,7 +1096,8 @@ "Query": "select t.id from (select id from user where id = 5) as t", "FieldQuery": "select t.id from (select id from user where 1 != 1) as t where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -1042,7 +1106,8 @@ "Sharded": true }, "Query": "select 1 from user_extra where user_extra.col = :t_id", - "FieldQuery": "select 1 from user_extra where 1 != 1" + "FieldQuery": "select 1 from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1 @@ -1066,7 +1131,8 @@ "Query": "select id from (select id, col from user as route1 where id = 5) as t", "FieldQuery": "select id from (select id, col from user as route1 where 1 != 1) as t where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" } } @@ -1085,7 +1151,8 @@ "Vindex": "email_user_map", "Values": [ "aaa" - ] + ], + "Table": "user_metadata" } } @@ -1104,7 +1171,8 @@ "Vindex": "user_index", "Values": [ 5 - ] + ], + "Table": "user" } } @@ -1121,7 +1189,8 @@ "Query": "select u.col, e.col from (select col from user where id = 5) as u join (select col from user_extra where user_id = 5) as e", "FieldQuery": "select u.col, e.col from (select col from user where 1 != 1) as u join (select col from user_extra where 1 != 1) as e where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" } } @@ -1147,7 +1216,8 @@ "Sharded": false }, "Query": "select 1 from unsharded", - "FieldQuery": "select 1 from unsharded where 1 != 1" + "FieldQuery": "select 1 from unsharded where 1 != 1", + "Table": "unsharded" }, "Cols": [ -1 @@ -1168,7 +1238,8 @@ "Sharded": false }, "Query": "select foo from unsharded", - "FieldQuery": "select foo from unsharded where 1 != 1" + "FieldQuery": "select foo from unsharded where 1 != 1", + "Table": "unsharded" }, "Right": { "Opcode": "SelectDBA", @@ -1205,7 +1276,8 @@ "Sharded": true }, "Query": "select user.id, user.col1 from user", - "FieldQuery": "select user.id, user.col1 from user where 1 != 1" + "FieldQuery": "select user.id, user.col1 from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -1214,7 +1286,8 @@ "Sharded": true }, "Query": "select 1 from user_extra", - "FieldQuery": "select 1 from user_extra where 1 != 1" + "FieldQuery": "select 1 from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1, @@ -1229,7 +1302,8 @@ "Sharded": false }, "Query": "select 1 from unsharded where unsharded.col1 = :t_col1 and unsharded.id = :t_id", - "FieldQuery": "select 1 from unsharded where 1 != 1" + "FieldQuery": "select 1 from unsharded where 1 != 1", + "Table": "unsharded" }, "Cols": [ -1 @@ -1258,7 +1332,8 @@ "Sharded": true }, "Query": "select user.id, user.col1, user.col from user", - "FieldQuery": "select user.id, user.col1, user.col from user where 1 != 1" + "FieldQuery": "select user.id, user.col1, user.col from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -1267,7 +1342,8 @@ "Sharded": true }, "Query": "select 1 from user_extra where user_extra.col = :user_col", - "FieldQuery": "select 1 from user_extra where 1 != 1" + "FieldQuery": "select 1 from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1, @@ -1294,7 +1370,8 @@ "Sharded": false }, "Query": "select 1 from unsharded_a as ua", - "FieldQuery": "select 1 from unsharded_a as ua where 1 != 1" + "FieldQuery": "select 1 from unsharded_a as ua where 1 != 1", + "Table": "unsharded_a" }, "Right": { "Cols": [ @@ -1309,7 +1386,8 @@ "Sharded": true }, "Query": "select user.id, user.col1 from user", - "FieldQuery": "select user.id, user.col1 from user where 1 != 1" + "FieldQuery": "select user.id, user.col1 from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -1318,7 +1396,8 @@ "Sharded": true }, "Query": "select 1 from user_extra", - "FieldQuery": "select 1 from user_extra where 1 != 1" + "FieldQuery": "select 1 from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1, @@ -1347,7 +1426,8 @@ "Sharded": true }, "Query": "select col from user", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" }, "Underlying": { "Opcode": "SelectUnsharded", @@ -1356,7 +1436,8 @@ "Sharded": false }, "Query": "select unsharded_a.col from unsharded_a join unsharded_b on :__sq1", - "FieldQuery": "select unsharded_a.col from unsharded_a join unsharded_b on :__sq1 where 1 != 1" + "FieldQuery": "select unsharded_a.col from unsharded_a join unsharded_b on :__sq1 where 1 != 1", + "Table": "unsharded_a" } } } @@ -1376,7 +1457,8 @@ "Sharded": true }, "Query": "select col from user", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" }, "Underlying": { "Opcode": "SelectUnsharded", @@ -1385,7 +1467,8 @@ "Sharded": false }, "Query": "select unsharded_a.col from unsharded_a join unsharded_b on unsharded_a.col + :__sq1", - "FieldQuery": "select unsharded_a.col from unsharded_a join unsharded_b on unsharded_a.col + :__sq1 where 1 != 1" + "FieldQuery": "select unsharded_a.col from unsharded_a join unsharded_b on unsharded_a.col + :__sq1 where 1 != 1", + "Table": "unsharded_a" } } } @@ -1405,7 +1488,8 @@ "Sharded": true }, "Query": "select col from user", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" }, "Underlying": { "Opcode": "SelectUnsharded", @@ -1414,7 +1498,8 @@ "Sharded": false }, "Query": "select unsharded_a.col from unsharded_a join unsharded_b on (:__sq_has_values1 = 1 and (unsharded_a.col in ::__sq1))", - "FieldQuery": "select unsharded_a.col from unsharded_a join unsharded_b on (:__sq_has_values1 = 1 and (unsharded_a.col in ::__sq1)) where 1 != 1" + "FieldQuery": "select unsharded_a.col from unsharded_a join unsharded_b on (:__sq_has_values1 = 1 and (unsharded_a.col in ::__sq1)) where 1 != 1", + "Table": "unsharded_a" } } } @@ -1434,7 +1519,8 @@ "Sharded": true }, "Query": "select col from user", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" }, "Underlying": { "Opcode": "Join", @@ -1445,7 +1531,8 @@ "Sharded": false }, "Query": "select unsharded.col from unsharded", - "FieldQuery": "select unsharded.col from unsharded where 1 != 1" + "FieldQuery": "select unsharded.col from unsharded where 1 != 1", + "Table": "unsharded" }, "Right": { "Opcode": "SelectScatter", @@ -1454,7 +1541,8 @@ "Sharded": true }, "Query": "select 1 from user where :__sq_has_values1 = 1 and (user.col in ::__sq1)", - "FieldQuery": "select 1 from user where 1 != 1" + "FieldQuery": "select 1 from user where 1 != 1", + "Table": "user" }, "Cols": [ -1 @@ -1477,7 +1565,8 @@ "Sharded": false }, "Query": "select unsharded.col from unsharded", - "FieldQuery": "select unsharded.col from unsharded where 1 != 1" + "FieldQuery": "select unsharded.col from unsharded where 1 != 1", + "Table": "unsharded" }, "Right": { "Opcode": "PulloutIn", @@ -1490,7 +1579,8 @@ "Sharded": true }, "Query": "select col from user", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" }, "Underlying": { "Opcode": "SelectScatter", @@ -1499,7 +1589,8 @@ "Sharded": true }, "Query": "select 1 from user where :__sq_has_values1 = 1 and (user.col in ::__sq1)", - "FieldQuery": "select 1 from user where 1 != 1" + "FieldQuery": "select 1 from user where 1 != 1", + "Table": "user" } }, "Cols": [ @@ -1526,7 +1617,8 @@ "Sharded": true }, "Query": "select col from user", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" }, "Underlying": { "Opcode": "Join", @@ -1537,7 +1629,8 @@ "Sharded": false }, "Query": "select unsharded.col from unsharded", - "FieldQuery": "select unsharded.col from unsharded where 1 != 1" + "FieldQuery": "select unsharded.col from unsharded where 1 != 1", + "Table": "unsharded" }, "Right": { "Opcode": "SelectScatter", @@ -1546,7 +1639,8 @@ "Sharded": true }, "Query": "select 1 from user where :__sq_has_values1 = 1 and (user.col in ::__sq1)", - "FieldQuery": "select 1 from user where 1 != 1" + "FieldQuery": "select 1 from user where 1 != 1", + "Table": "user" }, "Cols": [ -1 @@ -1560,7 +1654,8 @@ "Sharded": false }, "Query": "select 1 from unsharded_a", - "FieldQuery": "select 1 from unsharded_a where 1 != 1" + "FieldQuery": "select 1 from unsharded_a where 1 != 1", + "Table": "unsharded_a" }, "Cols": [ -1 @@ -1581,7 +1676,8 @@ "Sharded": true }, "Query": "select user.col1, user.col2 from user", - "FieldQuery": "select user.col1, user.col2 from user where 1 != 1" + "FieldQuery": "select user.col1, user.col2 from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectUnsharded", @@ -1590,7 +1686,8 @@ "Sharded": false }, "Query": "select unsharded.col1 from unsharded where unsharded.col2 = :user_col2", - "FieldQuery": "select unsharded.col1 from unsharded where 1 != 1" + "FieldQuery": "select unsharded.col1 from unsharded where 1 != 1", + "Table": "unsharded" }, "Cols": [ -1, @@ -1613,7 +1710,8 @@ "Sharded": false }, "Query": "select foo.col from foo", - "FieldQuery": "select foo.col from foo where 1 != 1" + "FieldQuery": "select foo.col from foo where 1 != 1", + "Table": "foo" } } @@ -1628,7 +1726,8 @@ "Sharded": true }, "Query": "select user.col from user join user_extra on user.ID = user_extra.User_Id", - "FieldQuery": "select user.col from user join user_extra on user.ID = user_extra.User_Id where 1 != 1" + "FieldQuery": "select user.col from user join user_extra on user.ID = user_extra.User_Id where 1 != 1", + "Table": "user" } } @@ -1650,7 +1749,8 @@ "Sharded": true }, "Query": "select user.id from user", - "FieldQuery": "select user.id from user where 1 != 1" + "FieldQuery": "select user.id from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -1659,7 +1759,8 @@ "Sharded": true }, "Query": "select 1 from user_extra", - "FieldQuery": "select 1 from user_extra where 1 != 1" + "FieldQuery": "select 1 from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1 @@ -1680,7 +1781,8 @@ "Sharded": false }, "Query": "select u1.a from unsharded as u1 join unsharded as u2 on database()", - "FieldQuery": "select u1.a from unsharded as u1 join unsharded as u2 on database() where 1 != 1" + "FieldQuery": "select u1.a from unsharded as u1 join unsharded as u2 on database() where 1 != 1", + "Table": "unsharded" } } diff --git a/go/vt/vtgate/planbuilder/testdata/memory_sort_cases.txt b/go/vt/vtgate/planbuilder/testdata/memory_sort_cases.txt index 546eca2f617..cdc6a6909b3 100644 --- a/go/vt/vtgate/planbuilder/testdata/memory_sort_cases.txt +++ b/go/vt/vtgate/planbuilder/testdata/memory_sort_cases.txt @@ -36,7 +36,8 @@ "Col": 0, "Desc": false } - ] + ], + "Table": "user" } } } @@ -78,7 +79,8 @@ "Col": 0, "Desc": false } - ] + ], + "Table": "user" } } } @@ -128,7 +130,8 @@ "Col": 0, "Desc": false } - ] + ], + "Table": "user" } } } @@ -174,7 +177,8 @@ "Col": 0, "Desc": false } - ] + ], + "Table": "user" } } } @@ -221,8 +225,377 @@ "Col": 0, "Desc": false } + ], + "Table": "user" + } + } + } +} + +# scatter aggregate with memory sort and order by number, reuse weight_string +# we have to use a meaningless construct to test this. +"select textcol1, count(*) k from user group by textcol1 order by textcol1, k, textcol1" +{ + "Original": "select textcol1, count(*) k from user group by textcol1 order by textcol1, k, textcol1", + "Instructions": { + "Opcode": "MemorySort", + "MaxRows": null, + "OrderBy": [ + { + "Col": 2, + "Desc": false + }, + { + "Col": 1, + "Desc": false + }, + { + "Col": 2, + "Desc": false + } + ], + "Input": { + "Aggregates": [ + { + "Opcode": "count", + "Col": 1 + } + ], + "Keys": [ + 2 + ], + "TruncateColumnCount": 3, + "Input": { + "Opcode": "SelectScatter", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "Query": "select textcol1, count(*) as k, weight_string(textcol1) from user group by textcol1 order by textcol1 asc, textcol1 asc", + "FieldQuery": "select textcol1, count(*) as k, weight_string(textcol1) from user where 1 != 1 group by textcol1", + "OrderBy": [ + { + "Col": 2, + "Desc": false + }, + { + "Col": 2, + "Desc": false + } + ], + "TruncateColumnCount": 3, + "Table": "user" + } + } + } +} + +# order by on a cross-shard subquery +"select id from (select user.id, user.col from user join user_extra) as t order by id" +{ + "Original": "select id from (select user.id, user.col from user join user_extra) as t order by id", + "Instructions": { + "Opcode": "MemorySort", + "MaxRows": null, + "OrderBy": [ + { + "Col": 0, + "Desc": false + } + ], + "Input": { + "Cols": [ + 0 + ], + "Subquery": { + "Opcode": "Join", + "Left": { + "Opcode": "SelectScatter", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "Query": "select user.id, user.col from user", + "FieldQuery": "select user.id, user.col from user where 1 != 1", + "Table": "user" + }, + "Right": { + "Opcode": "SelectScatter", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "Query": "select 1 from user_extra", + "FieldQuery": "select 1 from user_extra where 1 != 1", + "Table": "user_extra" + }, + "Cols": [ + -1, + -2 ] } } } } + +# order by on a cross-shard query. Note: this happens only when an order by column is from the second table +"select user.col1 as a, user.col2 b, music.col3 c from user, music where user.id = music.id and user.id = 1 order by c" +{ + "Original": "select user.col1 as a, user.col2 b, music.col3 c from user, music where user.id = music.id and user.id = 1 order by c", + "Instructions": { + "Opcode": "MemorySort", + "MaxRows": null, + "OrderBy": [ + { + "Col": 2, + "Desc": false + } + ], + "Input": { + "Opcode": "Join", + "Left": { + "Opcode": "SelectEqualUnique", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "Query": "select user.col1 as a, user.col2 as b, user.id from user where user.id = 1", + "FieldQuery": "select user.col1 as a, user.col2 as b, user.id from user where 1 != 1", + "Vindex": "user_index", + "Values": [ + 1 + ], + "Table": "user" + }, + "Right": { + "Opcode": "SelectEqualUnique", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "Query": "select music.col3 as c from music where music.id = :user_id", + "FieldQuery": "select music.col3 as c from music where 1 != 1", + "Vindex": "music_user_map", + "Values": [ + ":user_id" + ], + "Table": "music" + }, + "Cols": [ + -1, + -2, + 1 + ], + "Vars": { + "user_id": 2 + } + } + } +} + +# Order by for join, with mixed cross-shard ordering +"select user.col1 as a, user.col2, music.col3 from user join music on user.id = music.id where user.id = 1 order by 1 asc, 3 desc, 2 asc" +{ + "Original": "select user.col1 as a, user.col2, music.col3 from user join music on user.id = music.id where user.id = 1 order by 1 asc, 3 desc, 2 asc", + "Instructions": { + "Opcode": "MemorySort", + "MaxRows": null, + "OrderBy": [ + { + "Col": 0, + "Desc": false + }, + { + "Col": 2, + "Desc": true + }, + { + "Col": 1, + "Desc": false + } + ], + "Input": { + "Opcode": "Join", + "Left": { + "Opcode": "SelectEqualUnique", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "Query": "select user.col1 as a, user.col2, user.id from user where user.id = 1", + "FieldQuery": "select user.col1 as a, user.col2, user.id from user where 1 != 1", + "Vindex": "user_index", + "Values": [ + 1 + ], + "Table": "user" + }, + "Right": { + "Opcode": "SelectEqualUnique", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "Query": "select music.col3 from music where music.id = :user_id", + "FieldQuery": "select music.col3 from music where 1 != 1", + "Vindex": "music_user_map", + "Values": [ + ":user_id" + ], + "Table": "music" + }, + "Cols": [ + -1, + -2, + 1 + ], + "Vars": { + "user_id": 2 + } + } + } +} + +# Order by for join, on text column in LHS. +"select u.a, u.textcol1, un.col2 from user u join unsharded un order by u.textcol1, un.col2" +{ + "Original": "select u.a, u.textcol1, un.col2 from user u join unsharded un order by u.textcol1, un.col2", + "Instructions": { + "Opcode": "MemorySort", + "MaxRows": null, + "OrderBy": [ + { + "Col": 3, + "Desc": false + }, + { + "Col": 2, + "Desc": false + } + ], + "Input": { + "Opcode": "Join", + "Left": { + "Opcode": "SelectScatter", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "Query": "select u.a, u.textcol1, weight_string(u.textcol1) from user as u", + "FieldQuery": "select u.a, u.textcol1, weight_string(u.textcol1) from user as u where 1 != 1", + "Table": "user" + }, + "Right": { + "Opcode": "SelectUnsharded", + "Keyspace": { + "Name": "main", + "Sharded": false + }, + "Query": "select un.col2 from unsharded as un", + "FieldQuery": "select un.col2 from unsharded as un where 1 != 1", + "Table": "unsharded" + }, + "Cols": [ + -1, + -2, + 1, + -3 + ] + } + } +} + +# Order by for join, on text column in RHS. +"select u.a, u.textcol1, un.col2 from unsharded un join user u order by u.textcol1, un.col2" +{ + "Original": "select u.a, u.textcol1, un.col2 from unsharded un join user u order by u.textcol1, un.col2", + "Instructions": { + "Opcode": "MemorySort", + "MaxRows": null, + "OrderBy": [ + { + "Col": 3, + "Desc": false + }, + { + "Col": 2, + "Desc": false + } + ], + "Input": { + "Opcode": "Join", + "Left": { + "Opcode": "SelectUnsharded", + "Keyspace": { + "Name": "main", + "Sharded": false + }, + "Query": "select un.col2 from unsharded as un", + "FieldQuery": "select un.col2 from unsharded as un where 1 != 1", + "Table": "unsharded" + + }, + "Right": { + "Opcode": "SelectScatter", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "Query": "select u.a, u.textcol1, weight_string(u.textcol1) from user as u", + "FieldQuery": "select u.a, u.textcol1, weight_string(u.textcol1) from user as u where 1 != 1", + "Table": "user" + }, + "Cols": [ + 1, + 2, + -1, + 3 + ] + } + } +} + +# order by for vindex func +"select id, keyspace_id, range_start, range_end from user_index where id = :id order by range_start" +{ + "Original": "select id, keyspace_id, range_start, range_end from user_index where id = :id order by range_start", + "Instructions": { + "Opcode": "MemorySort", + "MaxRows": null, + "OrderBy": [ + { + "Col": 2, + "Desc": false + } + ], + "Input": { + "Opcode": "VindexMap", + "Fields": [ + { + "name": "id", + "type": 10262 + }, + { + "name": "keyspace_id", + "type": 10262 + }, + { + "name": "range_start", + "type": 10262 + }, + { + "name": "range_end", + "type": 10262 + } + ], + "Cols": [ + 0, + 1, + 2, + 3 + ], + "Vindex": "user_index", + "Value": ":id" + } + } +} diff --git a/go/vt/vtgate/planbuilder/testdata/postprocess_cases.txt b/go/vt/vtgate/planbuilder/testdata/postprocess_cases.txt index a9f06580826..13263bf0bbc 100644 --- a/go/vt/vtgate/planbuilder/testdata/postprocess_cases.txt +++ b/go/vt/vtgate/planbuilder/testdata/postprocess_cases.txt @@ -9,7 +9,8 @@ "Sharded": true }, "Query": "select user.col1 from user having col2 = 2", - "FieldQuery": "select user.col1 from user where 1 != 1" + "FieldQuery": "select user.col1 from user where 1 != 1", + "Table": "user" } } @@ -30,7 +31,8 @@ "Sharded": true }, "Query": "select user.col1 from user", - "FieldQuery": "select user.col1 from user where 1 != 1" + "FieldQuery": "select user.col1 from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -39,7 +41,8 @@ "Sharded": true }, "Query": "select user_extra.col1 from user_extra having user_extra.col1 = 2", - "FieldQuery": "select user_extra.col1 from user_extra where 1 != 1" + "FieldQuery": "select user_extra.col1 from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1, @@ -61,7 +64,8 @@ "Sharded": true }, "Query": "select user.col1 as a, user.col2 from user having 1 = 1 and a = 1 and a = user.col2", - "FieldQuery": "select user.col1 as a, user.col2 from user where 1 != 1" + "FieldQuery": "select user.col1 as a, user.col2 from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -70,7 +74,8 @@ "Sharded": true }, "Query": "select user_extra.col3 from user_extra having user_extra.col3 = 1", - "FieldQuery": "select user_extra.col3 from user_extra where 1 != 1" + "FieldQuery": "select user_extra.col3 from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1, @@ -95,7 +100,8 @@ "Sharded": true }, "Query": "select col from user", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" }, "Underlying": { "Opcode": "SelectIN", @@ -108,7 +114,8 @@ "Vindex": "user_index", "Values": [ "::__sq1" - ] + ], + "Table": "user" } } } @@ -126,7 +133,8 @@ "Query": "select col from user where id = 5 order by aa asc", "FieldQuery": "select col from user where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" } } @@ -143,7 +151,8 @@ "Query": "select col from user where id = 1 order by 1 asc", "FieldQuery": "select col from user where 1 != 1", "Vindex": "user_index", - "Values": [1] + "Values": [1], + "Table": "user" } } @@ -164,7 +173,8 @@ "Col": 0, "Desc": false } - ] + ], + "Table": "user" } } @@ -185,7 +195,8 @@ "Col": 0, "Desc": false } - ] + ], + "Table": "authoritative" } } @@ -207,7 +218,8 @@ "Desc": false } ], - "TruncateColumnCount": 3 + "TruncateColumnCount": 3, + "Table": "authoritative" } } @@ -237,7 +249,8 @@ "Desc": false } ], - "TruncateColumnCount": 3 + "TruncateColumnCount": 3, + "Table": "user" } } @@ -267,7 +280,8 @@ "Desc": false } ], - "TruncateColumnCount": 3 + "TruncateColumnCount": 3, + "Table": "user" } } @@ -301,7 +315,8 @@ "Desc": false } ], - "TruncateColumnCount": 4 + "TruncateColumnCount": 4, + "Table": "user" } } @@ -320,7 +335,8 @@ "Sharded": true }, "Query": "select col from user order by null", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" } } @@ -339,7 +355,8 @@ "Sharded": true }, "Query": "select col2 from user", - "FieldQuery": "select col2 from user where 1 != 1" + "FieldQuery": "select col2 from user where 1 != 1", + "Table": "user" }, "Underlying": { "Opcode": "SelectScatter", @@ -354,7 +371,8 @@ "Col": 0, "Desc": false } - ] + ], + "Table": "user" } } } @@ -374,7 +392,10 @@ "Query": "select user.col1 as a, user.col2, user.id from user where user.id = 1 order by null", "FieldQuery": "select user.col1 as a, user.col2, user.id from user where 1 != 1", "Vindex": "user_index", - "Values": [1] + "Values": [ + 1 + ], + "Table": "user" }, "Right": { "Opcode": "SelectEqualUnique", @@ -385,7 +406,8 @@ "Query": "select music.col3 from music where music.id = :user_id order by null", "FieldQuery": "select music.col3 from music where 1 != 1", "Vindex": "music_user_map", - "Values": [":user_id"] + "Values": [":user_id"], + "Table": "music" }, "Cols": [ -1, @@ -413,7 +435,10 @@ "Query": "select user.col1 as a, user.col2, user.id from user where user.id = 1 order by a asc", "FieldQuery": "select user.col1 as a, user.col2, user.id from user where 1 != 1", "Vindex": "user_index", - "Values": [1] + "Values": [ + 1 + ], + "Table": "user" }, "Right": { "Opcode": "SelectEqualUnique", @@ -424,7 +449,10 @@ "Query": "select music.col3 from music where music.id = :user_id", "FieldQuery": "select music.col3 from music where 1 != 1", "Vindex": "music_user_map", - "Values": [":user_id"] + "Values": [ + ":user_id" + ], + "Table": "music" }, "Cols": [ -1, @@ -452,7 +480,10 @@ "Query": "select user.col1 as a, user.col2, user.id from user where user.id = 1 order by a asc", "FieldQuery": "select user.col1 as a, user.col2, user.id from user where 1 != 1", "Vindex": "user_index", - "Values": [1] + "Values": [ + 1 + ], + "Table": "user" }, "Right": { "Opcode": "SelectEqualUnique", @@ -463,7 +494,10 @@ "Query": "select music.col3 from music where music.id = :user_id", "FieldQuery": "select music.col3 from music where 1 != 1", "Vindex": "music_user_map", - "Values": [":user_id"] + "Values": [ + ":user_id" + ], + "Table": "music" }, "Cols": [ -1, @@ -491,7 +525,8 @@ "Sharded": true }, "Query": "select col2 from user", - "FieldQuery": "select col2 from user where 1 != 1" + "FieldQuery": "select col2 from user where 1 != 1", + "Table": "user" }, "Underlying": { "Opcode": "SelectScatter", @@ -500,7 +535,8 @@ "Sharded": true }, "Query": "select col from user where :__sq_has_values1 = 1 and (col in ::__sq1) order by null", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" } } } @@ -516,7 +552,8 @@ "Sharded": true }, "Query": "select col from user order by RAND()", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" } } @@ -535,7 +572,10 @@ "Query": "select user.col1 as a, user.col2, user.id from user where user.id = 1 order by RAND()", "FieldQuery": "select user.col1 as a, user.col2, user.id from user where 1 != 1", "Vindex": "user_index", - "Values": [1] + "Values": [ + 1 + ], + "Table": "user" }, "Right": { "Opcode": "SelectEqualUnique", @@ -546,7 +586,10 @@ "Query": "select music.col3 from music where music.id = :user_id order by RAND()", "FieldQuery": "select music.col3 from music where 1 != 1", "Vindex": "music_user_map", - "Values": [":user_id"] + "Values": [ + ":user_id" + ], + "Table": "music" }, "Cols": [ -1, @@ -574,7 +617,8 @@ "Sharded": true }, "Query": "select col2 from user", - "FieldQuery": "select col2 from user where 1 != 1" + "FieldQuery": "select col2 from user where 1 != 1", + "Table": "user" }, "Underlying": { "Opcode": "SelectScatter", @@ -583,7 +627,8 @@ "Sharded": true }, "Query": "select col from user where :__sq_has_values1 = 1 and (col in ::__sq1) order by rand()", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" } } } @@ -601,7 +646,8 @@ "Query": "select * from user where id = 5 order by col asc", "FieldQuery": "select * from user where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" } } @@ -618,7 +664,8 @@ "Query": "select user.* from user where id = 5 order by user.col asc", "FieldQuery": "select user.* from user where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" } } @@ -635,7 +682,8 @@ "Query": "select * from user where id = 5 order by user.col asc", "FieldQuery": "select * from user where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" } } @@ -652,7 +700,8 @@ "Sharded": true }, "Query": "select u.id, u.col from user as u where u.col in (select * from user where user.id = u.id order by col asc)", - "FieldQuery": "select u.id, u.col from user as u where 1 != 1" + "FieldQuery": "select u.id, u.col from user as u where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -661,7 +710,8 @@ "Sharded": true }, "Query": "select e.id from user_extra as e where e.col = :u_col", - "FieldQuery": "select e.id from user_extra as e where 1 != 1" + "FieldQuery": "select e.id from user_extra as e where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1, @@ -702,7 +752,8 @@ "Query": "select * from user where id = 5 order by user.col collate utf8_general_ci asc", "FieldQuery": "select * from user where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" } } @@ -719,7 +770,8 @@ "Query":"select * from user where id = 5 order by -col1 asc", "FieldQuery":"select * from user where 1 != 1", "Vindex":"user_index", - "Values":[5] + "Values":[5], + "Table": "user" } } @@ -736,7 +788,8 @@ "Query":"select * from user where id = 5 order by concat(col, col1) collate utf8_general_ci desc", "FieldQuery":"select * from user where 1 != 1", "Vindex":"user_index", - "Values":[5] + "Values":[5], + "Table": "user" } } @@ -753,7 +806,8 @@ "Query":"select * from user where id = 5 order by id + col collate utf8_general_ci desc", "FieldQuery":"select * from user where 1 != 1", "Vindex":"user_index", - "Values":[5] + "Values":[5], + "Table": "user" } } @@ -770,7 +824,8 @@ "Query":"select * from user as u join (select user_id from user_extra where user_id = 5) as eu on u.id = eu.user_id where u.id = 5 order by eu.user_id asc", "FieldQuery":"select * from user as u join (select user_id from user_extra where 1 != 1) as eu on u.id = eu.user_id where 1 != 1", "Vindex":"user_index", - "Values":[5] + "Values":[5], + "Table": "user" } } @@ -789,7 +844,8 @@ "Vindex": "user_index", "Values": [ 1 - ] + ], + "Table": "user" } } @@ -808,7 +864,8 @@ "Vindex": "email_user_map", "Values": [ "aaa" - ] + ], + "Table": "user_metadata" } } @@ -825,7 +882,8 @@ "Query": "select col1 from user where id = 1 limit 1", "FieldQuery": "select col1 from user where 1 != 1", "Vindex": "user_index", - "Values": [1] + "Values": [1], + "Table": "user" } } @@ -847,7 +905,8 @@ "Sharded": true }, "Query": "select user.col from user", - "FieldQuery": "select user.col from user where 1 != 1" + "FieldQuery": "select user.col from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -856,7 +915,8 @@ "Sharded": true }, "Query": "select 1 from user_extra", - "FieldQuery": "select 1 from user_extra where 1 != 1" + "FieldQuery": "select 1 from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1 @@ -880,7 +940,8 @@ "Sharded": true }, "Query": "select col from user limit :__upper_limit", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" } } } @@ -900,7 +961,8 @@ "Sharded": true }, "Query": "select col from user limit :__upper_limit", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" } } } @@ -920,7 +982,8 @@ "Sharded": true }, "Query": "select * from user where id1 = 4 and name1 = 'abc' limit :__upper_limit", - "FieldQuery": "select * from user where 1 != 1" + "FieldQuery": "select * from user where 1 != 1", + "Table": "user" } } } @@ -944,7 +1007,8 @@ "Sharded": true }, "Query": "select col1 from user", - "FieldQuery": "select col1 from user where 1 != 1" + "FieldQuery": "select col1 from user where 1 != 1", + "Table": "user" }, "Underlying": { "Opcode": "SelectScatter", @@ -953,7 +1017,8 @@ "Sharded": true }, "Query": "select col from user where :__sq_has_values1 = 1 and (col in ::__sq1) limit :__upper_limit", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" } } } @@ -970,7 +1035,8 @@ "Sharded": true }, "Query": "select col from ref limit 1", - "FieldQuery": "select col from ref where 1 != 1" + "FieldQuery": "select col from ref where 1 != 1", + "Table": "ref" } } diff --git a/go/vt/vtgate/planbuilder/testdata/schema_test.json b/go/vt/vtgate/planbuilder/testdata/schema_test.json index adae208d040..b3dac7176b0 100644 --- a/go/vt/vtgate/planbuilder/testdata/schema_test.json +++ b/go/vt/vtgate/planbuilder/testdata/schema_test.json @@ -66,6 +66,14 @@ "hash_dup": { "type": "hash_test", "owner": "user" + }, + "vindex1": { + "type": "hash_test", + "owner": "samecolvin" + }, + "vindex2": { + "type": "lookup_test", + "owner": "samecolvin" } }, "tables": { @@ -170,6 +178,24 @@ ], "column_list_authoritative": true }, + "samecolvin": { + "column_vindexes": [ + { + "column": "col", + "name": "vindex1" + }, + { + "column": "col", + "name": "vindex2" + } + ], + "columns": [ + { + "name": "col" + } + ], + "column_list_authoritative": true + }, "multicolvin": { "column_vindexes": [ { diff --git a/go/vt/vtgate/planbuilder/testdata/select_cases.txt b/go/vt/vtgate/planbuilder/testdata/select_cases.txt index 0f331bf423a..da728217844 100644 --- a/go/vt/vtgate/planbuilder/testdata/select_cases.txt +++ b/go/vt/vtgate/planbuilder/testdata/select_cases.txt @@ -9,7 +9,8 @@ "Sharded": true }, "Query": "select 1 from user", - "FieldQuery": "select 1 from user where 1 != 1" + "FieldQuery": "select 1 from user where 1 != 1", + "Table": "user" } } @@ -24,7 +25,8 @@ "Sharded": true }, "Query": "select user.* from user", - "FieldQuery": "select user.* from user where 1 != 1" + "FieldQuery": "select user.* from user where 1 != 1", + "Table": "user" } } @@ -39,7 +41,8 @@ "Sharded": true }, "Query": "select * from user", - "FieldQuery": "select * from user where 1 != 1" + "FieldQuery": "select * from user where 1 != 1", + "Table": "user" } } @@ -55,7 +58,8 @@ }, "Query": "select /*vt+ QUERY_TIMEOUT_MS=1000 */ * from user", "FieldQuery": "select * from user where 1 != 1", - "QueryTimeout": 1000 + "QueryTimeout": 1000, + "Table": "user" } } @@ -79,7 +83,8 @@ }, "Query": "select /*vt+ QUERY_TIMEOUT_MS=1000 */ count(*) from user", "FieldQuery": "select count(*) from user where 1 != 1", - "QueryTimeout": 1000 + "QueryTimeout": 1000, + "Table": "user" } } } @@ -100,7 +105,8 @@ }, "Query": "select /*vt+ QUERY_TIMEOUT_MS=1000 */ * from user limit :__upper_limit", "FieldQuery": "select * from user where 1 != 1", - "QueryTimeout": 1000 + "QueryTimeout": 1000, + "Table": "user" } } } @@ -117,7 +123,8 @@ }, "Query": "select /*vt+ SCATTER_ERRORS_AS_WARNINGS=1 */ * from user", "FieldQuery": "select * from user where 1 != 1", - "ScatterErrorsAsWarnings": true + "ScatterErrorsAsWarnings": true, + "Table": "user" } } @@ -141,7 +148,8 @@ }, "Query": "select /*vt+ SCATTER_ERRORS_AS_WARNINGS=1 */ count(*) from user", "FieldQuery": "select count(*) from user where 1 != 1", - "ScatterErrorsAsWarnings": true + "ScatterErrorsAsWarnings": true, + "Table": "user" } } } @@ -162,7 +170,8 @@ }, "Query": "select /*vt+ SCATTER_ERRORS_AS_WARNINGS=1 */ * from user limit :__upper_limit", "FieldQuery": "select * from user where 1 != 1", - "ScatterErrorsAsWarnings": true + "ScatterErrorsAsWarnings": true, + "Table": "user" } } } @@ -178,7 +187,8 @@ "Sharded": true }, "Query": "select user.* from user", - "FieldQuery": "select user.* from user where 1 != 1" + "FieldQuery": "select user.* from user where 1 != 1", + "Table": "user" } } @@ -193,7 +203,8 @@ "Sharded": true }, "Query": "select user.* from user", - "FieldQuery": "select user.* from user where 1 != 1" + "FieldQuery": "select user.* from user where 1 != 1", + "Table": "user" } } @@ -208,7 +219,8 @@ "Sharded": true }, "Query": "select user_id, col1, col2 from authoritative", - "FieldQuery": "select user_id, col1, col2 from authoritative where 1 != 1" + "FieldQuery": "select user_id, col1, col2 from authoritative where 1 != 1", + "Table": "authoritative" } } @@ -223,7 +235,8 @@ "Sharded": true }, "Query": "select a.user_id as user_id, a.col1 as col1, a.col2 as col2, b.user_id as user_id, b.col1 as col1, b.col2 as col2 from authoritative as a join authoritative as b on a.user_id = b.user_id", - "FieldQuery": "select a.user_id as user_id, a.col1 as col1, a.col2 as col2, b.user_id as user_id, b.col1 as col1, b.col2 as col2 from authoritative as a join authoritative as b on a.user_id = b.user_id where 1 != 1" + "FieldQuery": "select a.user_id as user_id, a.col1 as col1, a.col2 as col2, b.user_id as user_id, b.col1 as col1, b.col2 as col2 from authoritative as a join authoritative as b on a.user_id = b.user_id where 1 != 1", + "Table": "authoritative" } } @@ -242,7 +255,8 @@ "Sharded": true }, "Query": "select a.user_id, a.col1, a.col2 from authoritative as a", - "FieldQuery": "select a.user_id, a.col1, a.col2 from authoritative as a where 1 != 1" + "FieldQuery": "select a.user_id, a.col1, a.col2 from authoritative as a where 1 != 1", + "Table": "authoritative" } } @@ -257,7 +271,8 @@ "Sharded": true }, "Query": "select * from authoritative join user on authoritative.user_id = user.id", - "FieldQuery": "select * from authoritative join user on authoritative.user_id = user.id where 1 != 1" + "FieldQuery": "select * from authoritative join user on authoritative.user_id = user.id where 1 != 1", + "Table": "authoritative" } } @@ -272,7 +287,8 @@ "Sharded": true }, "Query": "select user.id, a.user_id, a.col1, a.col2, user.col1 from authoritative as a join user on a.user_id = user.id", - "FieldQuery": "select user.id, a.user_id, a.col1, a.col2, user.col1 from authoritative as a join user on a.user_id = user.id where 1 != 1" + "FieldQuery": "select user.id, a.user_id, a.col1, a.col2, user.col1 from authoritative as a join user on a.user_id = user.id where 1 != 1", + "Table": "authoritative" } } @@ -287,7 +303,8 @@ "Sharded": true }, "Query": "select col from user join user_extra on user.id = user_extra.user_id", - "FieldQuery": "select col from user join user_extra on user.id = user_extra.user_id where 1 != 1" + "FieldQuery": "select col from user join user_extra on user.id = user_extra.user_id where 1 != 1", + "Table": "user" } } @@ -308,7 +325,8 @@ "Sharded": true }, "Query": "select id from user", - "FieldQuery": "select id from user where 1 != 1" + "FieldQuery": "select id from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -317,7 +335,8 @@ "Sharded": true }, "Query": "select user_id from user_extra", - "FieldQuery": "select user_id from user_extra where 1 != 1" + "FieldQuery": "select user_id from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1, @@ -337,11 +356,11 @@ "Sharded": false }, "Query": "select database() from dual", - "FieldQuery": "select database() from dual where 1 != 1" + "FieldQuery": "select database() from dual where 1 != 1", + "Table": "dual" } } - # nextval for simple route "select next value from user" "NEXT used on a non-sequence table" @@ -357,7 +376,8 @@ "Sharded": false }, "Query": "select last_insert_id() from dual", - "FieldQuery": "select last_insert_id() from dual where 1 != 1" + "FieldQuery": "select last_insert_id() from dual where 1 != 1", + "Table": "dual" } } @@ -372,7 +392,8 @@ "Sharded": false }, "Query": "select @@session.auto_increment_increment from dual", - "FieldQuery": "select @@session.auto_increment_increment from dual where 1 != 1" + "FieldQuery": "select @@session.auto_increment_increment from dual where 1 != 1", + "Table": "dual" } } @@ -391,7 +412,8 @@ "Vindex": "binary", "Values": [ "\ufffd" - ] + ], + "Table": "pin_test" } } @@ -409,7 +431,8 @@ "Query": "select @@session.auto_increment_increment from dual", "FieldQuery": "select @@session.auto_increment_increment from dual where 1 != 1", "Vindex": "binary", - "Values": ["\u0000"] + "Values": ["\u0000"], + "Table": "dual" } } @@ -426,7 +449,8 @@ "Sharded": true }, "Query": "select 1 from user", - "FieldQuery": "select 1 from user where 1 != 1" + "FieldQuery": "select 1 from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -435,7 +459,8 @@ "Sharded": true }, "Query": "select user_extra.id from user_extra", - "FieldQuery": "select user_extra.id from user_extra where 1 != 1" + "FieldQuery": "select user_extra.id from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ 1 @@ -456,7 +481,8 @@ "Sharded": true }, "Query": "select user.col from user", - "FieldQuery": "select user.col from user where 1 != 1" + "FieldQuery": "select user.col from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -465,7 +491,8 @@ "Sharded": true }, "Query": "select user_extra.id from user_extra", - "FieldQuery": "select user_extra.id from user_extra where 1 != 1" + "FieldQuery": "select user_extra.id from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1, @@ -487,7 +514,8 @@ "Sharded": true }, "Query": "select user.col from user", - "FieldQuery": "select user.col from user where 1 != 1" + "FieldQuery": "select user.col from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -496,7 +524,8 @@ "Sharded": true }, "Query": "select user_extra.id + user_extra.col from user_extra", - "FieldQuery": "select user_extra.id + user_extra.col from user_extra where 1 != 1" + "FieldQuery": "select user_extra.id + user_extra.col from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1, @@ -518,7 +547,8 @@ "Sharded": true }, "Query": "select user.col, user.col2 from user", - "FieldQuery": "select user.col, user.col2 from user where 1 != 1" + "FieldQuery": "select user.col, user.col2 from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -527,7 +557,8 @@ "Sharded": true }, "Query": "select user_extra.id from user_extra", - "FieldQuery": "select user_extra.id from user_extra where 1 != 1" + "FieldQuery": "select user_extra.id from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1, @@ -550,7 +581,8 @@ "Sharded": true }, "Query": "select /* comment */ user.col from user", - "FieldQuery": "select user.col from user where 1 != 1" + "FieldQuery": "select user.col from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -559,7 +591,8 @@ "Sharded": true }, "Query": "select /* comment */ 1 from user_extra", - "FieldQuery": "select 1 from user_extra where 1 != 1" + "FieldQuery": "select 1 from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1 @@ -580,7 +613,8 @@ "Sharded": true }, "Query": "select user.col from user for update", - "FieldQuery": "select user.col from user where 1 != 1" + "FieldQuery": "select user.col from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -589,7 +623,8 @@ "Sharded": true }, "Query": "select 1 from user_extra for update", - "FieldQuery": "select 1 from user_extra where 1 != 1" + "FieldQuery": "select 1 from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1 @@ -610,7 +645,8 @@ "Sharded": true }, "Query": "select user.id from user", - "FieldQuery": "select user.id from user where 1 != 1" + "FieldQuery": "select user.id from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectUnsharded", @@ -619,7 +655,8 @@ "Sharded": false }, "Query": "select (select :user_id + outm.m + unsharded.m from unsharded) from unsharded as outm", - "FieldQuery": "select (select :user_id + outm.m + unsharded.m from unsharded where 1 != 1) from unsharded as outm where 1 != 1" + "FieldQuery": "select (select :user_id + outm.m + unsharded.m from unsharded where 1 != 1) from unsharded as outm where 1 != 1", + "Table": "unsharded" }, "Cols": [ -1, @@ -644,7 +681,8 @@ "Sharded": true }, "Query": "select user.Col from user", - "FieldQuery": "select user.Col from user where 1 != 1" + "FieldQuery": "select user.Col from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -653,7 +691,8 @@ "Sharded": true }, "Query": "select user_extra.Id from user_extra", - "FieldQuery": "select user_extra.Id from user_extra where 1 != 1" + "FieldQuery": "select user_extra.Id from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1, @@ -677,7 +716,8 @@ "Sharded": true }, "Query": "select * from user where id = 0x04", - "FieldQuery": "select * from user where 1 != 1" + "FieldQuery": "select * from user where 1 != 1", + "Table": "user" } } @@ -702,7 +742,8 @@ "Col": 0, "Desc": false } - ] + ], + "Table": "music" } } } @@ -720,7 +761,8 @@ "Query": "select * from user where name = 'abc' and (id = 4) limit 5", "FieldQuery": "select * from user where 1 != 1", "Vindex": "user_index", - "Values": [4] + "Values": [4], + "Table": "user" } } @@ -737,7 +779,8 @@ "Query": "select * from user where (id = 4) and (name = 'abc') limit 5", "FieldQuery": "select * from user where 1 != 1", "Vindex": "user_index", - "Values": [4] + "Values": [4], + "Table": "user" } } @@ -756,7 +799,8 @@ "Vindex": "user_index", "Values": [ 4 - ] + ], + "Table": "user" } } @@ -773,7 +817,8 @@ "Query": "select user0_.col as col0_ from user as user0_ where id = 1 order by user0_.col desc limit 2", "FieldQuery": "select user0_.col as col0_ from user as user0_ where 1 != 1", "Vindex": "user_index", - "Values": [1] + "Values": [1], + "Table": "user" } } @@ -790,7 +835,8 @@ "Query": "select user0_.col as col0_ from user as user0_ where id = 1 order by col0_ desc limit 3", "FieldQuery": "select user0_.col as col0_ from user as user0_ where 1 != 1", "Vindex": "user_index", - "Values": [1] + "Values": [1], + "Table": "user" } } @@ -807,7 +853,8 @@ "Query": "select * from user where (id = 1) and name = true limit 5", "FieldQuery": "select * from user where 1 != 1", "Vindex": "user_index", - "Values": [1] + "Values": [1], + "Table": "user" } } @@ -824,7 +871,8 @@ "Query": "select * from user where (id = 1) and name limit 5", "FieldQuery": "select * from user where 1 != 1", "Vindex": "user_index", - "Values": [1] + "Values": [1], + "Table": "user" } } @@ -841,7 +889,8 @@ "Query": "select * from user where (id = 5) and name = true limit 5", "FieldQuery": "select * from user where 1 != 1", "Vindex": "user_index", - "Values": [5] + "Values": [5], + "Table": "user" } } @@ -860,7 +909,8 @@ "Sharded": true }, "Query": "select col from user", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" }, "Underlying": { "Opcode": "SelectUnsharded", @@ -869,7 +919,8 @@ "Sharded": false }, "Query": "select a, :__sq1 from unsharded", - "FieldQuery": "select a, :__sq1 from unsharded where 1 != 1" + "FieldQuery": "select a, :__sq1 from unsharded where 1 != 1", + "Table": "unsharded" } } } @@ -889,7 +940,8 @@ "Sharded": true }, "Query": "select col from user", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" }, "Underlying": { "Opcode": "SelectUnsharded", @@ -898,7 +950,8 @@ "Sharded": false }, "Query": "select a, 1 + :__sq1 from unsharded", - "FieldQuery": "select a, 1 + :__sq1 from unsharded where 1 != 1" + "FieldQuery": "select a, 1 + :__sq1 from unsharded where 1 != 1", + "Table": "unsharded" } } } @@ -921,7 +974,8 @@ "Sharded": true }, "Query": "select user.id as id1 from user", - "FieldQuery": "select user.id as id1 from user where 1 != 1" + "FieldQuery": "select user.id as id1 from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -930,7 +984,8 @@ "Sharded": true }, "Query": "select user_extra.id as id2 from user_extra", - "FieldQuery": "select user_extra.id as id2 from user_extra where 1 != 1" + "FieldQuery": "select user_extra.id as id2 from user_extra where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1, @@ -976,7 +1031,8 @@ "Query": "select * from music where user_id = 1 union select * from user where id = 1", "FieldQuery": "select * from music where 1 != 1 union select * from user where 1 != 1", "Vindex": "user_index", - "Values": [1] + "Values": [1], + "Table": "music" } } @@ -990,7 +1046,8 @@ "Sharded": false }, "Query": "select * from (select col1, col2 from unsharded where id = 1 union select col1, col2 from unsharded where id = 3) as a", - "FieldQuery": "select * from (select col1, col2 from unsharded where 1 != 1 union select col1, col2 from unsharded where 1 != 1) as a where 1 != 1" + "FieldQuery": "select * from (select col1, col2 from unsharded where 1 != 1 union select col1, col2 from unsharded where 1 != 1) as a where 1 != 1", + "Table": "unsharded" } } @@ -1004,7 +1061,8 @@ "Sharded": false }, "Query": "select id, name from unsharded where id in (select id from unsharded where id = 1 union select id from unsharded where id = 3)", - "FieldQuery": "select id, name from unsharded where 1 != 1" + "FieldQuery": "select id, name from unsharded where 1 != 1", + "Table": "unsharded" } } @@ -1018,7 +1076,8 @@ "Sharded": false }, "Query": "(select id from unsharded) union (select id from unsharded_auto) order by id asc limit 5", - "FieldQuery": "(select id from unsharded where 1 != 1) union (select id from unsharded_auto where 1 != 1)" + "FieldQuery": "(select id from unsharded where 1 != 1) union (select id from unsharded_auto where 1 != 1)", + "Table": "unsharded" } } @@ -1032,7 +1091,8 @@ "Sharded": false }, "Query": "select id from unsharded union select id from unsharded_auto union select id from unsharded_auto where id in (132)", - "FieldQuery": "select id from unsharded where 1 != 1 union select id from unsharded_auto where 1 != 1 union select id from unsharded_auto where 1 != 1" + "FieldQuery": "select id from unsharded where 1 != 1 union select id from unsharded_auto where 1 != 1 union select id from unsharded_auto where 1 != 1", + "Table": "unsharded" } } @@ -1046,7 +1106,8 @@ "Sharded": false }, "Query": "(select id from unsharded union select id from unsharded_auto) union (select id from unsharded_auto union select name from unsharded)", - "FieldQuery": "(select id from unsharded where 1 != 1 union select id from unsharded_auto where 1 != 1) union (select id from unsharded_auto where 1 != 1 union select name from unsharded where 1 != 1)" + "FieldQuery": "(select id from unsharded where 1 != 1 union select id from unsharded_auto where 1 != 1) union (select id from unsharded_auto where 1 != 1 union select name from unsharded where 1 != 1)", + "Table": "unsharded" } } @@ -1060,7 +1121,8 @@ "Sharded": false }, "Query": "(select id from unsharded order by id asc limit 1) union (select id from unsharded order by id desc limit 1) order by id asc limit 1", - "FieldQuery": "(select id from unsharded where 1 != 1) union (select id from unsharded where 1 != 1)" + "FieldQuery": "(select id from unsharded where 1 != 1) union (select id from unsharded where 1 != 1)", + "Table": "unsharded" } } @@ -1079,7 +1141,8 @@ "Vindex": "email_user_map", "Values": [ "aaa" - ] + ], + "Table": "user_metadata" } } @@ -1095,6 +1158,7 @@ }, "Query": "select /*vt+ QUERY_TIMEOUT_MS=1000 */ * from unsharded as route2", "FieldQuery": "select * from unsharded as route2 where 1 != 1", - "QueryTimeout": 1000 + "QueryTimeout": 1000, + "Table": "unsharded" } } diff --git a/go/vt/vtgate/planbuilder/testdata/symtab_cases.txt b/go/vt/vtgate/planbuilder/testdata/symtab_cases.txt index 3e031497334..e9d4d3a78b4 100644 --- a/go/vt/vtgate/planbuilder/testdata/symtab_cases.txt +++ b/go/vt/vtgate/planbuilder/testdata/symtab_cases.txt @@ -13,7 +13,8 @@ "Sharded": true }, "Query": "select predef2 from user", - "FieldQuery": "select predef2 from user where 1 != 1" + "FieldQuery": "select predef2 from user where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectUnsharded", @@ -22,7 +23,8 @@ "Sharded": false }, "Query": "select predef3 from unsharded where predef3 = :predef2", - "FieldQuery": "select predef3 from unsharded where 1 != 1" + "FieldQuery": "select predef3 from unsharded where 1 != 1", + "Table": "unsharded" }, "Cols": [ -1, diff --git a/go/vt/vtgate/planbuilder/testdata/unsupported_cases.txt b/go/vt/vtgate/planbuilder/testdata/unsupported_cases.txt index 15e2b4b773b..c10604dfa72 100644 --- a/go/vt/vtgate/planbuilder/testdata/unsupported_cases.txt +++ b/go/vt/vtgate/planbuilder/testdata/unsupported_cases.txt @@ -51,18 +51,14 @@ "update `user[-]@replica`.user_metadata set id=2" "unsupported: UPDATE statement with a replica target" -# order by on a cross-shard subquery -"select id from (select user.id, user.col from user join user_extra) as t order by id" -"unsupported: order by on cross-shard subquery" - -# order by on a cross-shard query. Note: this is only a problem when an order by column is from the second table -"select user.col1 as a, user.col2 b, music.col3 c from user, music where user.id = music.id and user.id = 1 order by c" -"unsupported: order by spans across shards" - # scatter order by with * expression "select * from user order by id" "unsupported: in scatter query: order by must reference a column in the select list: id asc" +# order by rand on a cross-shard subquery +"select id from (select user.id, user.col from user join user_extra) as t order by rand()" +"unsupported: memory sort: complex order by expression: rand()" + # filtering on a cross-shard subquery "select id from (select user.id, user.col from user join user_extra) as t where id=5" "unsupported: filtering on results of cross-shard subquery" @@ -195,22 +191,10 @@ "select id from user order by id+1" "unsupported: in scatter query: complex order by expression: id + 1" -# Order by for join, but sequence is too cross-shard -"select user.col1 as a, user.col2, music.col3 from user join music on user.id = music.id where user.id = 1 order by 1 asc, 3 desc, 2 asc" -"unsupported: order by spans across shards" - -# Order by and left join -"select user.col1 as a, user_extra.col2 as b from user left join user_extra on user_extra.user_id = 5 where user.id = 5 order by 1, 2" -"unsupported: order by spans across shards" - # Order by column number with collate "select user.col1 as a from user order by 1 collate utf8_general_ci" "unsupported: in scatter query: complex order by expression: 1 collate utf8_general_ci" -# Order by for join, but order by is cross-shard -"select user.col1 as a, user_extra.col2 as b from user join user_extra on user_extra.user_id = 5 where user.id = 5 order by a+b" -"unsupported: order by spans across shards" - # Order by has subqueries "select id from unsharded order by (select id from unsharded)" "unsupported: subqueries disallowed in GROUP or ORDER BY" diff --git a/go/vt/vtgate/planbuilder/testdata/vindex_func_cases.txt b/go/vt/vtgate/planbuilder/testdata/vindex_func_cases.txt index a1af3ec9deb..5f91fd70352 100644 --- a/go/vt/vtgate/planbuilder/testdata/vindex_func_cases.txt +++ b/go/vt/vtgate/planbuilder/testdata/vindex_func_cases.txt @@ -154,7 +154,8 @@ "Sharded": false }, "Query": "select unsharded.id from unsharded", - "FieldQuery": "select unsharded.id from unsharded where 1 != 1" + "FieldQuery": "select unsharded.id from unsharded where 1 != 1", + "Table": "unsharded" }, "Cols": [-1, 1] } @@ -173,7 +174,8 @@ "Sharded": false }, "Query": "select unsharded.id from unsharded", - "FieldQuery": "select unsharded.id from unsharded where 1 != 1" + "FieldQuery": "select unsharded.id from unsharded where 1 != 1", + "Table": "unsharded" }, "Right": { "Opcode": "VindexMap", @@ -228,7 +230,8 @@ "Sharded": false }, "Query": "select unsharded.id from unsharded where unsharded.id = :user_index_id", - "FieldQuery": "select unsharded.id from unsharded where 1 != 1" + "FieldQuery": "select unsharded.id from unsharded where 1 != 1", + "Table": "unsharded" }, "Cols": [ -1, @@ -273,7 +276,8 @@ "Sharded": false }, "Query": "select unsharded.id from unsharded where unsharded.id = :user_index_id", - "FieldQuery": "select unsharded.id from unsharded where 1 != 1" + "FieldQuery": "select unsharded.id from unsharded where 1 != 1", + "Table": "unsharded" }, "Cols": [ -1, @@ -317,7 +321,8 @@ "Sharded": false }, "Query": "select unsharded.id from unsharded where unsharded.id = :ui_id", - "FieldQuery": "select unsharded.id from unsharded where 1 != 1" + "FieldQuery": "select unsharded.id from unsharded where 1 != 1", + "Table": "unsharded" }, "Cols": [ -1, @@ -331,3 +336,22 @@ "select none from user_index where id = :id" "symbol none not found in table or subquery" + +"select * from samecolvin where col = :col" +{ + "Original": "select * from samecolvin where col = :col", + "Instructions": { + "Opcode": "SelectEqualUnique", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "Query": "select col from samecolvin where col = :col", + "FieldQuery": "select col from samecolvin where 1 != 1", + "Vindex": "vindex1", + "Values": [ + ":col" + ], + "Table": "samecolvin" + } +} diff --git a/go/vt/vtgate/planbuilder/testdata/wireup_cases.txt b/go/vt/vtgate/planbuilder/testdata/wireup_cases.txt index 5d82b447ffb..6cda6f1750d 100644 --- a/go/vt/vtgate/planbuilder/testdata/wireup_cases.txt +++ b/go/vt/vtgate/planbuilder/testdata/wireup_cases.txt @@ -11,7 +11,8 @@ "Sharded": true }, "Query": "select u.id as uid from user as u", - "FieldQuery": "select u.id as uid from user as u where 1 != 1" + "FieldQuery": "select u.id as uid from user as u where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -20,7 +21,8 @@ "Sharded": true }, "Query": "select e.col, e.id as eid from user_extra as e having eid = :uid", - "FieldQuery": "select e.col, e.id as eid from user_extra as e where 1 != 1" + "FieldQuery": "select e.col, e.id as eid from user_extra as e where 1 != 1", + "Table": "user_extra" }, "Cols": [ 1, @@ -46,7 +48,8 @@ "Sharded": true }, "Query": "select u.id as uid from user as u", - "FieldQuery": "select u.id as uid from user as u where 1 != 1" + "FieldQuery": "select u.id as uid from user as u where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -55,7 +58,8 @@ "Sharded": true }, "Query": "select e.col, e.id as eid from user_extra as e having eid = :uid1 and e.col = :uid", - "FieldQuery": "select e.col, e.id as eid from user_extra as e where 1 != 1" + "FieldQuery": "select e.col, e.id as eid from user_extra as e where 1 != 1", + "Table": "user_extra" }, "Cols": [ 1, @@ -83,7 +87,8 @@ "Sharded": true }, "Query": "select u1.id, u1.col from user as u1", - "FieldQuery": "select u1.id, u1.col from user as u1 where 1 != 1" + "FieldQuery": "select u1.id, u1.col from user as u1 where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -92,7 +97,8 @@ "Sharded": true }, "Query": "select 1 from user as u2", - "FieldQuery": "select 1 from user as u2 where 1 != 1" + "FieldQuery": "select 1 from user as u2 where 1 != 1", + "Table": "user" }, "Cols": [ -1, @@ -106,7 +112,8 @@ "Sharded": true }, "Query": "select 1 from user as u3 where u3.col = :u1_col", - "FieldQuery": "select 1 from user as u3 where 1 != 1" + "FieldQuery": "select 1 from user as u3 where 1 != 1", + "Table": "user" }, "Cols": [ -1 @@ -132,7 +139,8 @@ "Sharded": true }, "Query": "select u1.id from user as u1", - "FieldQuery": "select u1.id from user as u1 where 1 != 1" + "FieldQuery": "select u1.id from user as u1 where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -141,7 +149,8 @@ "Sharded": true }, "Query": "select u2.col from user as u2", - "FieldQuery": "select u2.col from user as u2 where 1 != 1" + "FieldQuery": "select u2.col from user as u2 where 1 != 1", + "Table": "user" }, "Cols": [ -1, @@ -155,7 +164,8 @@ "Sharded": true }, "Query": "select 1 from user as u3 where u3.col = :u2_col", - "FieldQuery": "select 1 from user as u3 where 1 != 1" + "FieldQuery": "select 1 from user as u3 where 1 != 1", + "Table": "user" }, "Cols": [ -1 @@ -181,7 +191,8 @@ "Sharded": true }, "Query": "select u1.id, u1.col from user as u1", - "FieldQuery": "select u1.id, u1.col from user as u1 where 1 != 1" + "FieldQuery": "select u1.id, u1.col from user as u1 where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -190,7 +201,8 @@ "Sharded": true }, "Query": "select 1 from user as u2 where u2.col = :u1_col", - "FieldQuery": "select 1 from user as u2 where 1 != 1" + "FieldQuery": "select 1 from user as u2 where 1 != 1", + "Table": "user" }, "Cols": [ -1, @@ -207,7 +219,8 @@ "Sharded": true }, "Query": "select 1 from user as u3 where u3.col = :u1_col", - "FieldQuery": "select 1 from user as u3 where 1 != 1" + "FieldQuery": "select 1 from user as u3 where 1 != 1", + "Table": "user" }, "Cols": [ -1 @@ -238,7 +251,8 @@ "Sharded": true }, "Query": "select u1.id, u1.col from user as u1", - "FieldQuery": "select u1.id, u1.col from user as u1 where 1 != 1" + "FieldQuery": "select u1.id, u1.col from user as u1 where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -247,7 +261,8 @@ "Sharded": true }, "Query": "select 1 from user as u2", - "FieldQuery": "select 1 from user as u2 where 1 != 1" + "FieldQuery": "select 1 from user as u2 where 1 != 1", + "Table": "user" }, "Cols": [ -1, @@ -263,7 +278,10 @@ "Query": "select 1 from user as u3 where u3.id = :u1_col", "FieldQuery": "select 1 from user as u3 where 1 != 1", "Vindex": "user_index", - "Values": [":u1_col"] + "Values": [ + ":u1_col" + ], + "Table": "user" }, "Cols": [ -1, @@ -280,7 +298,8 @@ "Sharded": true }, "Query": "select 1 from user as u4 where u4.col = :u1_col", - "FieldQuery": "select 1 from user as u4 where 1 != 1" + "FieldQuery": "select 1 from user as u4 where 1 != 1", + "Table": "user" }, "Cols": [ -1 @@ -304,7 +323,8 @@ "Sharded": true }, "Query": "select u1.id, u1.col from user as u1", - "FieldQuery": "select u1.id, u1.col from user as u1 where 1 != 1" + "FieldQuery": "select u1.id, u1.col from user as u1 where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "Join", @@ -317,7 +337,10 @@ "Query": "select 1 from user as u2 where u2.id = :u1_col", "FieldQuery": "select 1 from user as u2 where 1 != 1", "Vindex": "user_index", - "Values": [":u1_col"] + "Values": [ + ":u1_col" + ], + "Table": "user" }, "Right": { "Opcode": "SelectEqualUnique", @@ -328,7 +351,10 @@ "Query": "select 1 from user as u3 where u3.id = :u1_col", "FieldQuery": "select 1 from user as u3 where 1 != 1", "Vindex": "user_index", - "Values": [":u1_col"] + "Values": [ + ":u1_col" + ], + "Table": "user" } }, "Cols": [ @@ -353,7 +379,8 @@ "Sharded": true }, "Query": "select `weird``name`.a, `weird``name`.`a``b*c` from `weird``name`", - "FieldQuery": "select `weird``name`.a, `weird``name`.`a``b*c` from `weird``name` where 1 != 1" + "FieldQuery": "select `weird``name`.a, `weird``name`.`a``b*c` from `weird``name` where 1 != 1", + "Table": "weird`name" }, "Right": { "Opcode": "SelectUnsharded", @@ -362,7 +389,8 @@ "Sharded": false }, "Query": "select unsharded.b from unsharded where unsharded.id = :weird_name_a_b_c", - "FieldQuery": "select unsharded.b from unsharded where 1 != 1" + "FieldQuery": "select unsharded.b from unsharded where 1 != 1", + "Table": "unsharded" }, "Cols": [ -1, @@ -387,7 +415,8 @@ "Sharded": true }, "Query": "select `weird``name`.`a``b*c` from `weird``name`", - "FieldQuery": "select `weird``name`.`a``b*c` from `weird``name` where 1 != 1" + "FieldQuery": "select `weird``name`.`a``b*c` from `weird``name` where 1 != 1", + "Table": "weird`name" }, "Right": { "Opcode": "SelectUnsharded", @@ -396,7 +425,8 @@ "Sharded": false }, "Query": "select unsharded.b from unsharded where unsharded.id = :weird_name_a_b_c", - "FieldQuery": "select unsharded.b from unsharded where 1 != 1" + "FieldQuery": "select unsharded.b from unsharded where 1 != 1", + "Table": "unsharded" }, "Cols": [ 1 @@ -424,7 +454,8 @@ "Sharded": true }, "Query": "select u.id, u.col from user as u", - "FieldQuery": "select u.id, u.col from user as u where 1 != 1" + "FieldQuery": "select u.id, u.col from user as u where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -433,7 +464,8 @@ "Sharded": true }, "Query": "select e.id from user_extra as e where e.id = :u_col", - "FieldQuery": "select e.id from user_extra as e where 1 != 1" + "FieldQuery": "select e.id from user_extra as e where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1, @@ -467,7 +499,8 @@ "Sharded": true }, "Query": "select u.id, u.col from user as u", - "FieldQuery": "select u.id, u.col from user as u where 1 != 1" + "FieldQuery": "select u.id, u.col from user as u where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -476,7 +509,8 @@ "Sharded": true }, "Query": "select e.id from user_extra as e where e.id = :u_col", - "FieldQuery": "select e.id from user_extra as e where 1 != 1" + "FieldQuery": "select e.id from user_extra as e where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1, @@ -498,7 +532,8 @@ "Vindex": "user_index", "Values": [ "::__sq1" - ] + ], + "Table": "user" } } } @@ -522,7 +557,8 @@ "Sharded": true }, "Query": "select col from user", - "FieldQuery": "select col from user where 1 != 1" + "FieldQuery": "select col from user where 1 != 1", + "Table": "user" }, "Underlying": { "Opcode": "Join", @@ -533,7 +569,8 @@ "Sharded": true }, "Query": "select u.id, :__sq1, u.col from user as u", - "FieldQuery": "select u.id, :__sq1, u.col from user as u where 1 != 1" + "FieldQuery": "select u.id, :__sq1, u.col from user as u where 1 != 1", + "Table": "user" }, "Right": { "Opcode": "SelectScatter", @@ -542,7 +579,8 @@ "Sharded": true }, "Query": "select e.id from user_extra as e where e.id = :u_col", - "FieldQuery": "select e.id from user_extra as e where 1 != 1" + "FieldQuery": "select e.id from user_extra as e where 1 != 1", + "Table": "user_extra" }, "Cols": [ -1, diff --git a/go/vt/vtgate/planbuilder/union.go b/go/vt/vtgate/planbuilder/union.go index e1945cc0846..e762f1d4a67 100644 --- a/go/vt/vtgate/planbuilder/union.go +++ b/go/vt/vtgate/planbuilder/union.go @@ -65,7 +65,7 @@ func (pb *primitiveBuilder) processPart(part sqlparser.SelectStatement, outer *s case *sqlparser.ParenSelect: return pb.processPart(part.Select, outer) } - panic(fmt.Sprintf("BUG: unexpected SELECT type: %T", part)) + return fmt.Errorf("BUG: unexpected SELECT type: %T", part) } func unionRouteMerge(union *sqlparser.Union, left, right builder) error { diff --git a/go/vt/vtgate/planbuilder/vindex_func.go b/go/vt/vtgate/planbuilder/vindex_func.go index f2d4f00173c..21f36d74000 100644 --- a/go/vt/vtgate/planbuilder/vindex_func.go +++ b/go/vt/vtgate/planbuilder/vindex_func.go @@ -130,7 +130,7 @@ func (vf *vindexFunc) PushFilter(pb *primitiveBuilder, filter sqlparser.Expr, wh } // PushSelect satisfies the builder interface. -func (vf *vindexFunc) PushSelect(_ *primitiveBuilder, expr *sqlparser.AliasedExpr, _ builder) (rc *resultColumn, colnum int, err error) { +func (vf *vindexFunc) PushSelect(_ *primitiveBuilder, expr *sqlparser.AliasedExpr, _ builder) (rc *resultColumn, colNumber int, err error) { // Catch the case where no where clause was specified. If so, the opcode // won't be set. if vf.eVindexFunc.Opcode == engine.VindexNone { @@ -146,7 +146,7 @@ func (vf *vindexFunc) PushSelect(_ *primitiveBuilder, expr *sqlparser.AliasedExp Name: rc.alias.String(), Type: querypb.Type_VARBINARY, }) - vf.eVindexFunc.Cols = append(vf.eVindexFunc.Cols, col.Metadata.(*column).colnum) + vf.eVindexFunc.Cols = append(vf.eVindexFunc.Cols, col.Metadata.(*column).colNumber) return rc, len(vf.resultColumns) - 1, nil } @@ -168,7 +168,7 @@ func (vf *vindexFunc) PushOrderBy(orderBy sqlparser.OrderBy) (builder, error) { if len(orderBy) == 0 { return vf, nil } - return nil, errors.New("unsupported: order by on vindex function") + return newMemorySort(vf, orderBy) } // SetUpperLimit satisfies the builder interface. @@ -192,7 +192,7 @@ func (vf *vindexFunc) SupplyVar(from, to int, col *sqlparser.ColName, varname st } // SupplyCol satisfies the builder interface. -func (vf *vindexFunc) SupplyCol(col *sqlparser.ColName) (rc *resultColumn, colnum int) { +func (vf *vindexFunc) SupplyCol(col *sqlparser.ColName) (rc *resultColumn, colNumber int) { c := col.Metadata.(*column) for i, rc := range vf.resultColumns { if rc.column == c { @@ -206,8 +206,13 @@ func (vf *vindexFunc) SupplyCol(col *sqlparser.ColName) (rc *resultColumn, colnu Type: querypb.Type_VARBINARY, }) - // columns that reference vindexFunc will have their colnum set. + // columns that reference vindexFunc will have their colNumber set. // Let's use it here. - vf.eVindexFunc.Cols = append(vf.eVindexFunc.Cols, c.colnum) + vf.eVindexFunc.Cols = append(vf.eVindexFunc.Cols, c.colNumber) return rc, len(vf.resultColumns) - 1 } + +// SupplyWeightString satisfies the builder interface. +func (vf *vindexFunc) SupplyWeightString(colNumber int) (weightcolNumber int, err error) { + return 0, errors.New("cannot do collation on vindex function") +} diff --git a/go/vt/vtgate/plugin_mysql_server.go b/go/vt/vtgate/plugin_mysql_server.go index 5f3df18dd8f..85240db4804 100644 --- a/go/vt/vtgate/plugin_mysql_server.go +++ b/go/vt/vtgate/plugin_mysql_server.go @@ -162,6 +162,128 @@ func (vh *vtgateHandler) ComQuery(c *mysql.Conn, query string, callback func(*sq return callback(result) } +// ComPrepare is the handler for command prepare. +func (vh *vtgateHandler) ComPrepare(c *mysql.Conn, query string) ([]*querypb.Field, error) { + var ctx context.Context + var cancel context.CancelFunc + if *mysqlQueryTimeout != 0 { + ctx, cancel = context.WithTimeout(context.Background(), *mysqlQueryTimeout) + defer cancel() + } else { + ctx = context.Background() + } + + ctx = callinfo.MysqlCallInfo(ctx, c) + + // Fill in the ImmediateCallerID with the UserData returned by + // the AuthServer plugin for that user. If nothing was + // returned, use the User. This lets the plugin map a MySQL + // user used for authentication to a Vitess User used for + // Table ACLs and Vitess authentication in general. + im := c.UserData.Get() + ef := callerid.NewEffectiveCallerID( + c.User, /* principal: who */ + c.RemoteAddr().String(), /* component: running client process */ + "VTGate MySQL Connector" /* subcomponent: part of the client */) + ctx = callerid.NewContext(ctx, ef, im) + + session, _ := c.ClientData.(*vtgatepb.Session) + if session == nil { + session = &vtgatepb.Session{ + Options: &querypb.ExecuteOptions{ + IncludedFields: querypb.ExecuteOptions_ALL, + }, + Autocommit: true, + } + if c.Capabilities&mysql.CapabilityClientFoundRows != 0 { + session.Options.ClientFoundRows = true + } + } + + if !session.InTransaction { + atomic.AddInt32(&busyConnections, 1) + } + defer func() { + if !session.InTransaction { + atomic.AddInt32(&busyConnections, -1) + } + }() + + if c.SchemaName != "" { + session.TargetString = c.SchemaName + } + + session, fld, err := vh.vtg.Prepare(ctx, session, query, make(map[string]*querypb.BindVariable)) + c.ClientData = session + err = mysql.NewSQLErrorFromError(err) + if err != nil { + return nil, err + } + return fld, nil +} + +func (vh *vtgateHandler) ComStmtExecute(c *mysql.Conn, prepare *mysql.PrepareData, callback func(*sqltypes.Result) error) error { + var ctx context.Context + var cancel context.CancelFunc + if *mysqlQueryTimeout != 0 { + ctx, cancel = context.WithTimeout(context.Background(), *mysqlQueryTimeout) + defer cancel() + } else { + ctx = context.Background() + } + + ctx = callinfo.MysqlCallInfo(ctx, c) + + // Fill in the ImmediateCallerID with the UserData returned by + // the AuthServer plugin for that user. If nothing was + // returned, use the User. This lets the plugin map a MySQL + // user used for authentication to a Vitess User used for + // Table ACLs and Vitess authentication in general. + im := c.UserData.Get() + ef := callerid.NewEffectiveCallerID( + c.User, /* principal: who */ + c.RemoteAddr().String(), /* component: running client process */ + "VTGate MySQL Connector" /* subcomponent: part of the client */) + ctx = callerid.NewContext(ctx, ef, im) + + session, _ := c.ClientData.(*vtgatepb.Session) + if session == nil { + session = &vtgatepb.Session{ + Options: &querypb.ExecuteOptions{ + IncludedFields: querypb.ExecuteOptions_ALL, + }, + Autocommit: true, + } + if c.Capabilities&mysql.CapabilityClientFoundRows != 0 { + session.Options.ClientFoundRows = true + } + } + + if !session.InTransaction { + atomic.AddInt32(&busyConnections, 1) + } + defer func() { + if !session.InTransaction { + atomic.AddInt32(&busyConnections, -1) + } + }() + + if c.SchemaName != "" { + session.TargetString = c.SchemaName + } + if session.Options.Workload == querypb.ExecuteOptions_OLAP { + err := vh.vtg.StreamExecute(ctx, session, prepare.PrepareStmt, prepare.BindVars, callback) + return mysql.NewSQLErrorFromError(err) + } + _, qr, err := vh.vtg.Execute(ctx, session, prepare.PrepareStmt, prepare.BindVars) + if err != nil { + err = mysql.NewSQLErrorFromError(err) + return err + } + + return callback(qr) +} + func (vh *vtgateHandler) WarningCount(c *mysql.Conn) uint16 { session, _ := c.ClientData.(*vtgatepb.Session) if session != nil { diff --git a/go/vt/vtgate/plugin_mysql_server_test.go b/go/vt/vtgate/plugin_mysql_server_test.go index c873206e6ad..c190f053e83 100644 --- a/go/vt/vtgate/plugin_mysql_server_test.go +++ b/go/vt/vtgate/plugin_mysql_server_test.go @@ -26,6 +26,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/sqltypes" + querypb "vitess.io/vitess/go/vt/proto/query" ) type testHandler struct { @@ -43,6 +44,14 @@ func (th *testHandler) ComQuery(c *mysql.Conn, q string, callback func(*sqltypes return nil } +func (th *testHandler) ComPrepare(c *mysql.Conn, q string) ([]*querypb.Field, error) { + return nil, nil +} + +func (th *testHandler) ComStmtExecute(c *mysql.Conn, prepare *mysql.PrepareData, callback func(*sqltypes.Result) error) error { + return nil +} + func (th *testHandler) WarningCount(c *mysql.Conn) uint16 { return 0 } diff --git a/go/vt/vtgate/resolver.go b/go/vt/vtgate/resolver.go index 9e2cd6119a1..be535df3897 100644 --- a/go/vt/vtgate/resolver.go +++ b/go/vt/vtgate/resolver.go @@ -449,6 +449,14 @@ func (res *Resolver) vstreamOneShard(ctx context.Context, keyspace, shard string return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "unexpected number or shards: %v", rss) } err = rss[0].QueryService.VStream(ctx, rss[0].Target, startPos, filter, func(events []*binlogdatapb.VEvent) error { + // Remove all heartbeat events for now. + // Otherwise they can accumulate indefinitely if there are no real events. + // TODO(sougou): figure out a model for this. + for i := 0; i < len(events); i++ { + if events[i].Type == binlogdatapb.VEventType_HEARTBEAT { + events = append(events[:i], events[i+1:]...) + } + } if len(events) == 0 { return nil } diff --git a/go/vt/vtgate/resolver_test.go b/go/vt/vtgate/resolver_test.go index 7b54ad9450b..e26a77e5eaa 100644 --- a/go/vt/vtgate/resolver_test.go +++ b/go/vt/vtgate/resolver_test.go @@ -784,6 +784,65 @@ func TestResolverVStreamRetry(t *testing.T) { } } +func TestResolverVStreamHeartbeat(t *testing.T) { + name := "TestResolverVStream" + _ = createSandbox(name) + hc := discovery.NewFakeHealthCheck() + res := newTestResolver(hc, new(sandboxTopo), "aa") + sbc0 := hc.AddTestTablet("aa", "1.1.1.1", 1001, name, "-20", topodatapb.TabletType_MASTER, true, 1, nil) + + send0 := []*binlogdatapb.VEvent{ + {Type: binlogdatapb.VEventType_HEARTBEAT}, + } + sbc0.AddVStreamEvents(send0, nil) + + send1 := []*binlogdatapb.VEvent{ + {Type: binlogdatapb.VEventType_HEARTBEAT}, + {Type: binlogdatapb.VEventType_GTID, Gtid: "gtid01"}, + {Type: binlogdatapb.VEventType_FIELD, FieldEvent: &binlogdatapb.FieldEvent{TableName: "f0"}}, + {Type: binlogdatapb.VEventType_HEARTBEAT}, + {Type: binlogdatapb.VEventType_ROW, RowEvent: &binlogdatapb.RowEvent{TableName: "t0"}}, + {Type: binlogdatapb.VEventType_COMMIT}, + } + wantvgtid := &binlogdatapb.VGtid{ + ShardGtids: []*binlogdatapb.ShardGtid{{ + Keyspace: name, + Shard: "-20", + Gtid: "gtid01", + }}, + } + want := &binlogdatapb.VStreamResponse{Events: []*binlogdatapb.VEvent{ + {Type: binlogdatapb.VEventType_VGTID, Vgtid: wantvgtid}, + {Type: binlogdatapb.VEventType_FIELD, FieldEvent: &binlogdatapb.FieldEvent{TableName: "TestResolverVStream.f0"}}, + {Type: binlogdatapb.VEventType_ROW, RowEvent: &binlogdatapb.RowEvent{TableName: "TestResolverVStream.t0"}}, + {Type: binlogdatapb.VEventType_COMMIT}, + }} + sbc0.AddVStreamEvents(send1, nil) + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + vgtid := &binlogdatapb.VGtid{ + ShardGtids: []*binlogdatapb.ShardGtid{{ + Keyspace: name, + Shard: "-20", + Gtid: "pos", + }}, + } + err := res.VStream(ctx, topodatapb.TabletType_MASTER, vgtid, nil, func(events []*binlogdatapb.VEvent) error { + got := &binlogdatapb.VStreamResponse{Events: events} + if !proto.Equal(got, want) { + t.Fatalf("vstream:\n%v, want\n%v", got, want) + } + cancel() + return nil + }) + wantErr := "context canceled" + if err == nil || !strings.Contains(err.Error(), wantErr) { + t.Errorf("vstream end: %v, must contain %v", err.Error(), wantErr) + } +} + func TestResolverInsertSqlClause(t *testing.T) { clause := "col in (:col1, :col2)" tests := [][]string{ diff --git a/go/vt/vtgate/vtgate.go b/go/vt/vtgate/vtgate.go index b52b8335f1e..5b5094d9626 100644 --- a/go/vt/vtgate/vtgate.go +++ b/go/vt/vtgate/vtgate.go @@ -60,7 +60,8 @@ var ( streamBufferSize = flag.Int("stream_buffer_size", 32*1024, "the number of bytes sent from vtgate for each stream call. It's recommended to keep this value in sync with vttablet's query-server-config-stream-buffer-size.") queryPlanCacheSize = flag.Int64("gate_query_cache_size", 10000, "gate server query cache size, maximum number of queries to be cached. vtgate analyzes every incoming query and generate a query plan, these plans are being cached in a lru cache. This config controls the capacity of the lru cache.") disableLocalGateway = flag.Bool("disable_local_gateway", false, "if specified, this process will not route any queries to local tablets in the local cell") - maxMemoryRows = flag.Int("max_memory_rows", 30000, "Maximum number of rows that will be held in memory for intermediate results as well as the final result.") + maxMemoryRows = flag.Int("max_memory_rows", 300000, "Maximum number of rows that will be held in memory for intermediate results as well as the final result.") + warnMemoryRows = flag.Int("warn_memory_rows", 30000, "Warning threshold for in-memory results. A row count higher than this amount will cause the VtGateWarnings.ResultsExceeded counter to be incremented.") ) func getTxMode() vtgatepb.TransactionMode { @@ -229,7 +230,7 @@ func Init(ctx context.Context, hc discovery.HealthCheck, serv srvtopo.Server, ce errorsByDbType = stats.NewRates("ErrorsByDbType", stats.CounterForDimension(errorCounts, "DbType"), 15, 1*time.Minute) errorsByCode = stats.NewRates("ErrorsByCode", stats.CounterForDimension(errorCounts, "Code"), 15, 1*time.Minute) - warnings = stats.NewCountersWithSingleLabel("VtGateWarnings", "Vtgate warnings", "type", "IgnoredSet") + warnings = stats.NewCountersWithSingleLabel("VtGateWarnings", "Vtgate warnings", "type", "IgnoredSet", "ResultsExceeded") servenv.OnRun(func() { for _, f := range RegisterVTGates { @@ -832,6 +833,34 @@ func (vtg *VTGate) ResolveTransaction(ctx context.Context, dtid string) error { return formatError(vtg.txConn.Resolve(ctx, dtid)) } +// Prepare supports non-streaming prepare statement query with multi shards +func (vtg *VTGate) Prepare(ctx context.Context, session *vtgatepb.Session, sql string, bindVariables map[string]*querypb.BindVariable) (newSession *vtgatepb.Session, fld []*querypb.Field, err error) { + // In this context, we don't care if we can't fully parse destination + destKeyspace, destTabletType, _, _ := vtg.executor.ParseDestinationTarget(session.TargetString) + statsKey := []string{"Execute", destKeyspace, topoproto.TabletTypeLString(destTabletType)} + defer vtg.timings.Record(statsKey, time.Now()) + + if bvErr := sqltypes.ValidateBindVariables(bindVariables); bvErr != nil { + err = vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "%v", bvErr) + goto handleError + } + + fld, err = vtg.executor.Prepare(ctx, "Prepare", NewSafeSession(session), sql, bindVariables) + if err == nil { + vtg.rowsReturned.Add(statsKey, int64(len(fld))) + return session, fld, nil + } + +handleError: + query := map[string]interface{}{ + "Sql": sql, + "BindVariables": bindVariables, + "Session": session, + } + err = recordAndAnnotateError(err, statsKey, query, vtg.logExecute) + return session, nil, err +} + // isKeyspaceRangeBasedSharded returns true if a keyspace is sharded // by range. This is true when there is a ShardingColumnType defined // in the SrvKeyspace (that is using the range-based sharding with the diff --git a/go/vt/vtqueryserver/plugin_mysql_server.go b/go/vt/vtqueryserver/plugin_mysql_server.go index 804cd207f8b..a900472d6bf 100644 --- a/go/vt/vtqueryserver/plugin_mysql_server.go +++ b/go/vt/vtqueryserver/plugin_mysql_server.go @@ -136,6 +136,14 @@ func (mh *proxyHandler) WarningCount(c *mysql.Conn) uint16 { return 0 } +func (mh *proxyHandler) ComPrepare(c *mysql.Conn, query string) ([]*querypb.Field, error) { + return nil, nil +} + +func (mh *proxyHandler) ComStmtExecute(c *mysql.Conn, prepare *mysql.PrepareData, callback func(*sqltypes.Result) error) error { + return nil +} + var mysqlListener *mysql.Listener var mysqlUnixListener *mysql.Listener diff --git a/go/vt/vtqueryserver/plugin_mysql_server_test.go b/go/vt/vtqueryserver/plugin_mysql_server_test.go index ca0f6b806cd..6c538b80a37 100644 --- a/go/vt/vtqueryserver/plugin_mysql_server_test.go +++ b/go/vt/vtqueryserver/plugin_mysql_server_test.go @@ -26,6 +26,7 @@ import ( "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/sqltypes" + querypb "vitess.io/vitess/go/vt/proto/query" ) type testHandler struct { @@ -43,6 +44,14 @@ func (th *testHandler) ComQuery(c *mysql.Conn, q string, callback func(*sqltypes return nil } +func (th *testHandler) ComPrepare(c *mysql.Conn, q string) ([]*querypb.Field, error) { + return nil, nil +} + +func (th *testHandler) ComStmtExecute(c *mysql.Conn, prepare *mysql.PrepareData, callback func(*sqltypes.Result) error) error { + return nil +} + func (th *testHandler) WarningCount(c *mysql.Conn) uint16 { return 0 } diff --git a/go/vt/vttablet/tabletmanager/vreplication/controller_plan.go b/go/vt/vttablet/tabletmanager/vreplication/controller_plan.go index 1a964e7b02a..e3c73415a1f 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/controller_plan.go +++ b/go/vt/vttablet/tabletmanager/vreplication/controller_plan.go @@ -27,7 +27,9 @@ import ( type controllerPlan struct { opcode int query string - id int + // delCopySate is set for deletes. + delCopyState string + id int } const ( @@ -35,6 +37,7 @@ const ( updateQuery deleteQuery selectQuery + reshardingJournalQuery ) // buildControllerPlan parses the input query and returns an appropriate plan. @@ -58,15 +61,23 @@ func buildControllerPlan(query string) (*controllerPlan, error) { } func buildInsertPlan(ins *sqlparser.Insert) (*controllerPlan, error) { + switch sqlparser.String(ins.Table) { + case reshardingJournalTableName: + return &controllerPlan{ + opcode: reshardingJournalQuery, + query: sqlparser.String(ins), + }, nil + case vreplicationTableName: + // no-op + default: + return nil, fmt.Errorf("invalid table name: %v", sqlparser.String(ins.Table)) + } if ins.Action != sqlparser.InsertStr { return nil, fmt.Errorf("unsupported construct: %v", sqlparser.String(ins)) } if ins.Ignore != "" { return nil, fmt.Errorf("unsupported construct: %v", sqlparser.String(ins)) } - if sqlparser.String(ins.Table) != "_vt.vreplication" { - return nil, fmt.Errorf("invalid table name: %v", sqlparser.String(ins.Table)) - } if ins.Partitions != nil { return nil, fmt.Errorf("unsupported construct: %v", sqlparser.String(ins)) } @@ -106,7 +117,15 @@ func buildInsertPlan(ins *sqlparser.Insert) (*controllerPlan, error) { } func buildUpdatePlan(upd *sqlparser.Update) (*controllerPlan, error) { - if sqlparser.String(upd.TableExprs) != "_vt.vreplication" { + switch sqlparser.String(upd.TableExprs) { + case reshardingJournalTableName: + return &controllerPlan{ + opcode: reshardingJournalQuery, + query: sqlparser.String(upd), + }, nil + case vreplicationTableName: + // no-op + default: return nil, fmt.Errorf("invalid table name: %v", sqlparser.String(upd.TableExprs)) } if upd.OrderBy != nil || upd.Limit != nil { @@ -131,12 +150,20 @@ func buildUpdatePlan(upd *sqlparser.Update) (*controllerPlan, error) { } func buildDeletePlan(del *sqlparser.Delete) (*controllerPlan, error) { + switch sqlparser.String(del.TableExprs) { + case reshardingJournalTableName: + return &controllerPlan{ + opcode: reshardingJournalQuery, + query: sqlparser.String(del), + }, nil + case vreplicationTableName: + // no-op + default: + return nil, fmt.Errorf("invalid table name: %v", sqlparser.String(del.TableExprs)) + } if del.Targets != nil { return nil, fmt.Errorf("unsupported construct: %v", sqlparser.String(del)) } - if sqlparser.String(del.TableExprs) != "_vt.vreplication" { - return nil, fmt.Errorf("invalid table name: %v", sqlparser.String(del.TableExprs)) - } if del.Partitions != nil { return nil, fmt.Errorf("unsupported construct: %v", sqlparser.String(del)) } @@ -150,20 +177,23 @@ func buildDeletePlan(del *sqlparser.Delete) (*controllerPlan, error) { } return &controllerPlan{ - opcode: deleteQuery, - query: sqlparser.String(del), - id: id, + opcode: deleteQuery, + query: sqlparser.String(del), + delCopyState: fmt.Sprintf("delete from %s where vrepl_id = %d", copySateTableName, id), + id: id, }, nil } func buildSelectPlan(sel *sqlparser.Select) (*controllerPlan, error) { - if sqlparser.String(sel.From) != "_vt.vreplication" { + switch sqlparser.String(sel.From) { + case vreplicationTableName, reshardingJournalTableName, copySateTableName: + return &controllerPlan{ + opcode: selectQuery, + query: sqlparser.String(sel), + }, nil + default: return nil, fmt.Errorf("invalid table name: %v", sqlparser.String(sel.From)) } - return &controllerPlan{ - opcode: selectQuery, - query: sqlparser.String(sel), - }, nil } func extractID(where *sqlparser.Where) (int, error) { diff --git a/go/vt/vttablet/tabletmanager/vreplication/controller_plan_test.go b/go/vt/vttablet/tabletmanager/vreplication/controller_plan_test.go index 533668a2955..ecdb32e6483 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/controller_plan_test.go +++ b/go/vt/vttablet/tabletmanager/vreplication/controller_plan_test.go @@ -45,6 +45,12 @@ func TestControllerPlan(t *testing.T) { opcode: insertQuery, query: "insert into _vt.vreplication(workflow, id) values ('', null)", }, + }, { + in: "insert into _vt.resharding_journal values (1)", + plan: &controllerPlan{ + opcode: reshardingJournalQuery, + query: "insert into _vt.resharding_journal values (1)", + }, }, { in: "replace into _vt.vreplication values(null)", err: "unsupported construct: replace into _vt.vreplication values (null)", @@ -84,6 +90,12 @@ func TestControllerPlan(t *testing.T) { query: "update _vt.vreplication set state = 'Running' where id = 1", id: 1, }, + }, { + in: "update _vt.resharding_journal set col = 1", + plan: &controllerPlan{ + opcode: reshardingJournalQuery, + query: "update _vt.resharding_journal set col = 1", + }, }, { in: "update a set state='Running' where id = 1", err: "invalid table name: a", @@ -116,16 +128,23 @@ func TestControllerPlan(t *testing.T) { }, { in: "delete from _vt.vreplication where id = 1", plan: &controllerPlan{ - opcode: deleteQuery, - query: "delete from _vt.vreplication where id = 1", - id: 1, + opcode: deleteQuery, + query: "delete from _vt.vreplication where id = 1", + delCopyState: "delete from _vt.copy_state where vrepl_id = 1", + id: 1, + }, + }, { + in: "delete from _vt.resharding_journal where id = 1", + plan: &controllerPlan{ + opcode: reshardingJournalQuery, + query: "delete from _vt.resharding_journal where id = 1", }, }, { in: "delete from a where id = 1", err: "invalid table name: a", }, { - in: "delete a, b from a where id = 1", - err: "unsupported construct: delete a, b from a where id = 1", + in: "delete a, b from _vt.vreplication where id = 1", + err: "unsupported construct: delete a, b from _vt.vreplication where id = 1", }, { in: "delete from _vt.vreplication where id = 1 order by id", err: "unsupported construct: delete from _vt.vreplication where id = 1 order by id asc", @@ -153,10 +172,22 @@ func TestControllerPlan(t *testing.T) { // Select }, { - in: "select * from _vt.vreplication where id = 1", + in: "select * from _vt.vreplication", + plan: &controllerPlan{ + opcode: selectQuery, + query: "select * from _vt.vreplication", + }, + }, { + in: "select * from _vt.resharding_journal", + plan: &controllerPlan{ + opcode: selectQuery, + query: "select * from _vt.resharding_journal", + }, + }, { + in: "select * from _vt.copy_state", plan: &controllerPlan{ opcode: selectQuery, - query: "select * from _vt.vreplication where id = 1", + query: "select * from _vt.copy_state", }, }, { in: "select * from a", diff --git a/go/vt/vttablet/tabletmanager/vreplication/engine.go b/go/vt/vttablet/tabletmanager/vreplication/engine.go index 7aa5c542ba8..9a08a974696 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/engine.go +++ b/go/vt/vttablet/tabletmanager/vreplication/engine.go @@ -32,6 +32,25 @@ import ( "vitess.io/vitess/go/vt/topo" ) +const ( + reshardingJournalTableName = "_vt.resharding_journal" + vreplicationTableName = "_vt.vreplication" + copySateTableName = "_vt.copy_state" + + createReshardingJournalTable = `create table if not exists _vt.resharding_journal( + id bigint, + db_name varbinary(255), + val blob, + primary key (id) +)` + + createCopyState = `create table if not exists _vt.copy_state ( + vrepl_id int, + table_name varbinary(128), + lastpk varbinary(2000), + primary key (vrepl_id, table_name))` +) + var tabletTypesStr = flag.String("vreplication_tablet_type", "REPLICA", "comma separated list of tablet types used as a source") // waitRetryTime can be changed to a smaller value for tests. @@ -102,7 +121,7 @@ func (vre *Engine) Open(ctx context.Context) error { // executeFetchMaybeCreateTable calls DBClient.ExecuteFetch and does one retry if // there's a failure due to mysql.ERNoSuchTable or mysql.ERBadDb which can be fixed -// by re-creating the _vt.vreplication table. +// by re-creating the vreplication tables. func (vre *Engine) executeFetchMaybeCreateTable(dbClient binlogplayer.DBClient, query string, maxrows int) (qr *sqltypes.Result, err error) { qr, err = dbClient.ExecuteFetch(query, maxrows) @@ -110,29 +129,33 @@ func (vre *Engine) executeFetchMaybeCreateTable(dbClient binlogplayer.DBClient, return } - // If it's a bad table or db, it could be because _vt.vreplication wasn't created. - // In that case we can try creating it again. + // If it's a bad table or db, it could be because the vreplication tables weren't created. + // In that case we can try creating them again. merr, isSQLErr := err.(*mysql.SQLError) if !isSQLErr || !(merr.Num == mysql.ERNoSuchTable || merr.Num == mysql.ERBadDb || merr.Num == mysql.ERBadFieldError) { return qr, err } - log.Info("Looks like _vt.vreplication table may not exist. Trying to recreate... ") + log.Info("Looks like the vreplication tables may not exist. Trying to recreate... ") if merr.Num == mysql.ERNoSuchTable || merr.Num == mysql.ERBadDb { for _, query := range binlogplayer.CreateVReplicationTable() { if _, merr := dbClient.ExecuteFetch(query, 0); merr != nil { - log.Warningf("Failed to ensure _vt.vreplication table exists: %v", merr) + log.Warningf("Failed to ensure %s exists: %v", vreplicationTableName, merr) return nil, err } } + if _, merr := dbClient.ExecuteFetch(createReshardingJournalTable, 0); merr != nil { + log.Warningf("Failed to ensure %s exists: %v", reshardingJournalTableName, merr) + return nil, err + } } if merr.Num == mysql.ERBadFieldError { - log.Info("Adding column to table _vt.vreplication") + log.Infof("Adding column to table %s", vreplicationTableName) for _, query := range binlogplayer.AlterVReplicationTable() { if _, merr := dbClient.ExecuteFetch(query, 0); merr != nil { merr, isSQLErr := err.(*mysql.SQLError) if !isSQLErr || !(merr.Num == mysql.ERDupFieldName) { - log.Warningf("Failed to alter _vt.vreplication table: %v", merr) + log.Warningf("Failed to alter %s table: %v", vreplicationTableName, merr) return nil, err } } @@ -286,9 +309,26 @@ func (vre *Engine) Exec(query string) (*sqltypes.Result, error) { ct.Stop() delete(vre.controllers, plan.id) } - return vre.executeFetchMaybeCreateTable(dbClient, plan.query, 1) - case selectQuery: - // select queries are passed through. + if err := dbClient.Begin(); err != nil { + return nil, err + } + qr, err := dbClient.ExecuteFetch(plan.query, 10000) + if err != nil { + return nil, err + } + if _, err := dbClient.ExecuteFetch(plan.delCopyState, 10000); err != nil { + // Legacy vreplication won't create this table. So, ignore table not found error. + merr, isSQLErr := err.(*mysql.SQLError) + if !isSQLErr || !(merr.Num == mysql.ERNoSuchTable) { + return nil, err + } + } + if err := dbClient.Commit(); err != nil { + return nil, err + } + return qr, nil + case selectQuery, reshardingJournalQuery: + // select and resharding journal queries are passed through. return vre.executeFetchMaybeCreateTable(dbClient, plan.query, 10000) } panic("unreachable") @@ -322,6 +362,8 @@ func (vre *Engine) WaitForPos(ctx context.Context, id int, pos string) error { } defer dbClient.Close() + tkr := time.NewTicker(waitRetryTime) + defer tkr.Stop() for { qr, err := dbClient.ExecuteFetch(binlogplayer.ReadVReplicationStatus(uint32(id)), 10) switch { @@ -350,7 +392,7 @@ func (vre *Engine) WaitForPos(ctx context.Context, id int, pos string) error { return ctx.Err() case <-vre.ctx.Done(): return fmt.Errorf("vreplication is closing: %v", vre.ctx.Err()) - case <-time.After(waitRetryTime): + case <-tkr.C: } } } diff --git a/go/vt/vttablet/tabletmanager/vreplication/engine_test.go b/go/vt/vttablet/tabletmanager/vreplication/engine_test.go index a4ac882dd10..5bba8d43940 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/engine_test.go +++ b/go/vt/vttablet/tabletmanager/vreplication/engine_test.go @@ -179,7 +179,10 @@ func TestEngineExec(t *testing.T) { dbClient.ExpectRequest("use _vt", &sqltypes.Result{}, nil) delQuery := "delete from _vt.vreplication where id = 1" + dbClient.ExpectRequest("begin", nil, nil) dbClient.ExpectRequest(delQuery, testDMLResponse, nil) + dbClient.ExpectRequest("delete from _vt.copy_state where vrepl_id = 1", nil, nil) + dbClient.ExpectRequest("commit", nil, nil) qr, err = vre.Exec(delQuery) if err != nil { @@ -412,6 +415,7 @@ func TestCreateDBAndTable(t *testing.T) { dbClient.ExpectRequest("CREATE DATABASE IF NOT EXISTS _vt", &sqltypes.Result{}, nil) dbClient.ExpectRequest("DROP TABLE IF EXISTS _vt.blp_checkpoint", &sqltypes.Result{}, nil) dbClient.ExpectRequestRE("CREATE TABLE IF NOT EXISTS _vt.vreplication.*", &sqltypes.Result{}, nil) + dbClient.ExpectRequestRE("create table if not exists _vt.resharding_journal.*", &sqltypes.Result{}, nil) dbClient.ExpectRequest("use _vt", &sqltypes.Result{}, nil) // Non-recoverable error. @@ -425,6 +429,7 @@ func TestCreateDBAndTable(t *testing.T) { dbClient.ExpectRequest("CREATE DATABASE IF NOT EXISTS _vt", &sqltypes.Result{}, nil) dbClient.ExpectRequest("DROP TABLE IF EXISTS _vt.blp_checkpoint", &sqltypes.Result{}, nil) dbClient.ExpectRequestRE("CREATE TABLE IF NOT EXISTS _vt.vreplication.*", &sqltypes.Result{}, nil) + dbClient.ExpectRequestRE("create table if not exists _vt.resharding_journal.*", &sqltypes.Result{}, nil) dbClient.ExpectRequest("insert into _vt.vreplication values (null)", &sqltypes.Result{InsertID: 1}, nil) diff --git a/go/vt/vttablet/tabletmanager/vreplication/framework_test.go b/go/vt/vttablet/tabletmanager/vreplication/framework_test.go index 97a2ee97884..353522d3554 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/framework_test.go +++ b/go/vt/vttablet/tabletmanager/vreplication/framework_test.go @@ -108,7 +108,7 @@ func TestMain(m *testing.M) { return 1 } - if err := env.Mysqld.ExecuteSuperQueryList(context.Background(), CreateCopyState); err != nil { + if err := env.Mysqld.ExecuteSuperQuery(context.Background(), createCopyState); err != nil { fmt.Fprintf(os.Stderr, "%v", err) return 1 } @@ -206,13 +206,16 @@ func (ftc *fakeTabletConn) VStream(ctx context.Context, target *querypb.Target, return streamerEngine.Stream(ctx, startPos, filter, send) } -// streamRowsHook allows you to do work just before VStreamRows is dispatched. -var streamRowsHook func(ctx context.Context) +// vstreamRowsHook allows you to do work just before calling VStreamRows. +var vstreamRowsHook func(ctx context.Context) + +// vstreamRowsSendHook allows you to do work just before VStreamRows calls send. +var vstreamRowsSendHook func(ctx context.Context) // VStreamRows directly calls into the pre-initialized engine. func (ftc *fakeTabletConn) VStreamRows(ctx context.Context, target *querypb.Target, query string, lastpk *querypb.QueryResult, send func(*binlogdatapb.VStreamRowsResponse) error) error { - if streamRowsHook != nil { - streamRowsHook(ctx) + if vstreamRowsHook != nil { + vstreamRowsHook(ctx) } var row []sqltypes.Value if lastpk != nil { @@ -222,7 +225,12 @@ func (ftc *fakeTabletConn) VStreamRows(ctx context.Context, target *querypb.Targ } row = r.Rows[0] } - return streamerEngine.StreamRows(ctx, query, row, send) + return streamerEngine.StreamRows(ctx, query, row, func(rows *binlogdatapb.VStreamRowsResponse) error { + if vstreamRowsSendHook != nil { + vstreamRowsSendHook(ctx) + } + return send(rows) + }) } //-------------------------------------- @@ -360,6 +368,16 @@ func (dbc *realDBClient) ExecuteFetch(query string, maxrows int) (*sqltypes.Resu return qr, err } +func expectDeleteQueries(t *testing.T) { + t.Helper() + expectDBClientQueries(t, []string{ + "begin", + "/delete from _vt.vreplication", + "/delete from _vt.copy_state", + "commit", + }) +} + func expectDBClientQueries(t *testing.T, queries []string) { t.Helper() failed := false diff --git a/go/vt/vttablet/tabletmanager/vreplication/replicator_plan.go b/go/vt/vttablet/tabletmanager/vreplication/replicator_plan.go index e028dcc74f5..a89f887f92b 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/replicator_plan.go +++ b/go/vt/vttablet/tabletmanager/vreplication/replicator_plan.go @@ -52,11 +52,19 @@ func (rp *ReplicatorPlan) buildExecutionPlan(fieldEvent *binlogdatapb.FieldEvent } if prelim.Insert != nil { tplanv := *prelim - tplanv.Fields = fieldEvent.Fields + // We know that we sent only column names, but they may be backticked. + // If so, we have to strip them out to allow them to match the expected + // bind var names. + tplanv.Fields = make([]*querypb.Field, 0, len(fieldEvent.Fields)) + for _, fld := range fieldEvent.Fields { + trimmed := *fld + trimmed.Name = strings.Trim(trimmed.Name, "`") + tplanv.Fields = append(tplanv.Fields, &trimmed) + } return &tplanv, nil } // select * construct was used. We need to use the field names. - tplan, err := rp.buildFromFields(prelim.TargetName, fieldEvent.Fields) + tplan, err := rp.buildFromFields(prelim.TargetName, prelim.Lastpk, fieldEvent.Fields) if err != nil { return nil, err } @@ -67,9 +75,10 @@ func (rp *ReplicatorPlan) buildExecutionPlan(fieldEvent *binlogdatapb.FieldEvent // buildFromFields builds a full TablePlan, but uses the field info as the // full column list. This happens when the query used was a 'select *', which // requires us to wait for the field info sent by the source. -func (rp *ReplicatorPlan) buildFromFields(tableName string, fields []*querypb.Field) (*TablePlan, error) { +func (rp *ReplicatorPlan) buildFromFields(tableName string, lastpk *sqltypes.Result, fields []*querypb.Field) (*TablePlan, error) { tpb := &tablePlanBuilder{ - name: sqlparser.NewTableIdent(tableName), + name: sqlparser.NewTableIdent(tableName), + lastpk: lastpk, } for _, field := range fields { colName := sqlparser.NewColIdent(field.Name) @@ -118,6 +127,8 @@ type TablePlan struct { TargetName string SendRule *binlogdatapb.Rule PKReferences []string + // Lastpk is used for delayed generation of replication queries. + Lastpk *sqltypes.Result // BulkInsertFront, BulkInsertValues and BulkInsertOnDup are used // by vcopier. BulkInsertFront *sqlparser.ParsedQuery diff --git a/go/vt/vttablet/tabletmanager/vreplication/replicator_plan_test.go b/go/vt/vttablet/tabletmanager/vreplication/replicator_plan_test.go index 39505b52915..4474b305129 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/replicator_plan_test.go +++ b/go/vt/vttablet/tabletmanager/vreplication/replicator_plan_test.go @@ -371,6 +371,56 @@ func TestBuildPlayerPlan(t *testing.T) { }, }, }, + }, { + // Keywords as names. + input: &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "t1", + Filter: "select c1, c2, `primary` from `primary`", + }}, + }, + plan: &TestReplicatorPlan{ + VStreamFilter: &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "primary", + Filter: "select c1, c2, `primary` from `primary`", + }}, + }, + TargetTables: []string{"t1"}, + TablePlans: map[string]*TestTablePlan{ + "primary": { + TargetName: "t1", + SendRule: "primary", + PKReferences: []string{"c1"}, + InsertFront: "insert into t1(c1,c2,`primary`)", + InsertValues: "(:a_c1,:a_c2,:a_primary)", + Insert: "insert into t1(c1,c2,`primary`) values (:a_c1,:a_c2,:a_primary)", + Update: "update t1 set c2=:a_c2, `primary`=:a_primary where c1=:b_c1", + Delete: "delete from t1 where c1=:b_c1", + }, + }, + }, + planpk: &TestReplicatorPlan{ + VStreamFilter: &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "primary", + Filter: "select c1, c2, `primary`, pk1, pk2 from `primary`", + }}, + }, + TargetTables: []string{"t1"}, + TablePlans: map[string]*TestTablePlan{ + "primary": { + TargetName: "t1", + SendRule: "primary", + PKReferences: []string{"c1", "pk1", "pk2"}, + InsertFront: "insert into t1(c1,c2,`primary`)", + InsertValues: "(:a_c1,:a_c2,:a_primary)", + Insert: "insert into t1(c1,c2,`primary`) select :a_c1, :a_c2, :a_primary from dual where (:a_pk1,:a_pk2) <= (1,'aaa')", + Update: "update t1 set c2=:a_c2, `primary`=:a_primary where c1=:b_c1 and (:b_pk1,:b_pk2) <= (1,'aaa')", + Delete: "delete from t1 where c1=:b_c1 and (:b_pk1,:b_pk2) <= (1,'aaa')", + }, + }, + }, }, { // syntax error input: &binlogdatapb.Filter{ @@ -448,7 +498,7 @@ func TestBuildPlayerPlan(t *testing.T) { input: &binlogdatapb.Filter{ Rules: []*binlogdatapb.Rule{{ Match: "t1", - Filter: "select hour(distinct c1) from t1", + Filter: "select hour(distinct c1) as a from t1", }}, }, err: "unexpected: hour(distinct c1)", diff --git a/go/vt/vttablet/tabletmanager/vreplication/table_plan_builder.go b/go/vt/vttablet/tabletmanager/vreplication/table_plan_builder.go index 699152ecbb6..3c8d3bc27a4 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/table_plan_builder.go +++ b/go/vt/vttablet/tabletmanager/vreplication/table_plan_builder.go @@ -114,6 +114,7 @@ nextTable: tablePlan := &TablePlan{ TargetName: tableName, SendRule: sendRule, + Lastpk: lastpk, } plan.TargetTables[tableName] = tablePlan plan.TablePlans[tableName] = tablePlan @@ -171,6 +172,7 @@ func buildTablePlan(rule *binlogdatapb.Rule, tableKeys map[string][]string, last tablePlan := &TablePlan{ TargetName: rule.Match, SendRule: sendRule, + Lastpk: lastpk, } return tablePlan, nil } @@ -228,6 +230,7 @@ func (tpb *tablePlanBuilder) generate(tableKeys map[string][]string) *TablePlan return &TablePlan{ TargetName: tpb.name.String(), + Lastpk: tpb.lastpk, PKReferences: pkrefs, BulkInsertFront: tpb.generateInsertPart(sqlparser.NewTrackedBuffer(bvf.formatter)), BulkInsertValues: tpb.generateValuesPart(sqlparser.NewTrackedBuffer(bvf.formatter), bvf), @@ -282,7 +285,12 @@ func (tpb *tablePlanBuilder) analyzeExpr(selExpr sqlparser.SelectExpr) (*colExpr } as := aliased.As if as.IsEmpty() { - as = sqlparser.NewColIdent(sqlparser.String(aliased.Expr)) + // Require all non-trivial expressions to have an alias. + if colAs, ok := aliased.Expr.(*sqlparser.ColName); ok && colAs.Qualifier.IsEmpty() { + as = colAs.Name + } else { + return nil, fmt.Errorf("expression needs an alias: %v", sqlparser.String(aliased)) + } } cexpr := &colExpr{ colName: as, @@ -292,9 +300,6 @@ func (tpb *tablePlanBuilder) analyzeExpr(selExpr sqlparser.SelectExpr) (*colExpr if expr.Distinct { return nil, fmt.Errorf("unexpected: %v", sqlparser.String(expr)) } - if aliased.As.IsEmpty() { - return nil, fmt.Errorf("expression needs an alias: %v", sqlparser.String(expr)) - } switch fname := expr.Name.Lowered(); fname { case "count": if _, ok := expr.Exprs[0].(*sqlparser.StarExpr); !ok { @@ -438,7 +443,7 @@ func (tpb *tablePlanBuilder) generateInsertPart(buf *sqlparser.TrackedBuffer) *s } separator := "" for _, cexpr := range tpb.colExprs { - buf.Myprintf("%s%s", separator, cexpr.colName.String()) + buf.Myprintf("%s%v", separator, cexpr.colName) separator = "," } buf.Myprintf(")", tpb.name) @@ -495,16 +500,17 @@ func (tpb *tablePlanBuilder) generateOnDupPart(buf *sqlparser.TrackedBuffer) *sq if cexpr.isGrouped || cexpr.isPK { continue } - buf.Myprintf("%s%s=", separator, cexpr.colName.String()) + buf.Myprintf("%s%v=", separator, cexpr.colName) separator = ", " + // TODO: What to do here? switch cexpr.operation { case opExpr: - buf.Myprintf("values(%s)", cexpr.colName.String()) + buf.Myprintf("values(%v)", cexpr.colName) case opCount: - buf.Myprintf("%s+1", cexpr.colName.String()) + buf.Myprintf("%v+1", cexpr.colName) case opSum: - buf.Myprintf("%s", cexpr.colName.String()) - buf.Myprintf("+ifnull(values(%s), 0)", cexpr.colName.String()) + buf.Myprintf("%v", cexpr.colName) + buf.Myprintf("+ifnull(values(%v), 0)", cexpr.colName) } } return buf.ParsedQuery() @@ -522,16 +528,16 @@ func (tpb *tablePlanBuilder) generateUpdateStatement() *sqlparser.ParsedQuery { if cexpr.isGrouped || cexpr.isPK { continue } - buf.Myprintf("%s%s=", separator, cexpr.colName.String()) + buf.Myprintf("%s%v=", separator, cexpr.colName) separator = ", " switch cexpr.operation { case opExpr: bvf.mode = bvAfter buf.Myprintf("%v", cexpr.expr) case opCount: - buf.Myprintf("%s", cexpr.colName.String()) + buf.Myprintf("%v", cexpr.colName) case opSum: - buf.Myprintf("%s", cexpr.colName.String()) + buf.Myprintf("%v", cexpr.colName) bvf.mode = bvBefore buf.Myprintf("-ifnull(%v, 0)", cexpr.expr) bvf.mode = bvAfter @@ -557,15 +563,15 @@ func (tpb *tablePlanBuilder) generateDeleteStatement() *sqlparser.ParsedQuery { if cexpr.isGrouped || cexpr.isPK { continue } - buf.Myprintf("%s%s=", separator, cexpr.colName.String()) + buf.Myprintf("%s%v=", separator, cexpr.colName) separator = ", " switch cexpr.operation { case opExpr: buf.WriteString("null") case opCount: - buf.Myprintf("%s-1", cexpr.colName.String()) + buf.Myprintf("%v-1", cexpr.colName) case opSum: - buf.Myprintf("%s-ifnull(%v, 0)", cexpr.colName.String(), cexpr.expr) + buf.Myprintf("%v-ifnull(%v, 0)", cexpr.colName, cexpr.expr) } } tpb.generateWhere(buf, bvf) @@ -581,10 +587,10 @@ func (tpb *tablePlanBuilder) generateWhere(buf *sqlparser.TrackedBuffer, bvf *bi separator := "" for _, cexpr := range tpb.pkCols { if _, ok := cexpr.expr.(*sqlparser.ColName); ok { - buf.Myprintf("%s%s=%v", separator, cexpr.colName.String(), cexpr.expr) + buf.Myprintf("%s%v=%v", separator, cexpr.colName, cexpr.expr) } else { // Parenthesize non-trivial expressions. - buf.Myprintf("%s%s=(%v)", separator, cexpr.colName.String(), cexpr.expr) + buf.Myprintf("%s%v=(%v)", separator, cexpr.colName, cexpr.expr) } separator = " and " } diff --git a/go/vt/vttablet/tabletmanager/vreplication/vcopier.go b/go/vt/vttablet/tabletmanager/vreplication/vcopier.go index cbf3a1bd480..37152f006e8 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/vcopier.go +++ b/go/vt/vttablet/tabletmanager/vreplication/vcopier.go @@ -135,9 +135,9 @@ func (vc *vcopier) catchup(ctx context.Context, copyState map[string]*sqltypes.R }() // Wait for catchup. - tmr := time.NewTimer(1 * time.Second) + tkr := time.NewTicker(waitRetryTime) + defer tkr.Stop() seconds := int64(replicaLagTolerance / time.Second) - defer tmr.Stop() for { sbm := vc.vr.stats.SecondsBehindMaster.Get() if sbm < seconds { @@ -156,7 +156,7 @@ func (vc *vcopier) catchup(ctx context.Context, copyState map[string]*sqltypes.R // Make sure vplayer returns before returning. <-errch return io.EOF - case <-tmr.C: + case <-tkr.C: } } } @@ -173,7 +173,7 @@ func (vc *vcopier) copyTable(ctx context.Context, tableName string, copyState ma initialPlan, ok := plan.TargetTables[tableName] if !ok { - return fmt.Errorf("plan not found for table: %s, curret plans are: %#v", tableName, plan.TargetTables) + 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)) diff --git a/go/vt/vttablet/tabletmanager/vreplication/vcopier_test.go b/go/vt/vttablet/tabletmanager/vreplication/vcopier_test.go index ae8b896118a..a22adca9590 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/vcopier_test.go +++ b/go/vt/vttablet/tabletmanager/vreplication/vcopier_test.go @@ -27,6 +27,7 @@ import ( "vitess.io/vitess/go/vt/binlog/binlogplayer" binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" topodatapb "vitess.io/vitess/go/vt/proto/topodata" + "vitess.io/vitess/go/vt/vttablet/tabletserver/vstreamer" ) func TestPlayerCopyTables(t *testing.T) { @@ -74,9 +75,7 @@ func TestPlayerCopyTables(t *testing.T) { if _, err := playerEngine.Exec(query); err != nil { t.Fatal(err) } - expectDBClientQueries(t, []string{ - "/delete", - }) + expectDeleteQueries(t) }() expectDBClientQueries(t, []string{ @@ -113,6 +112,267 @@ func TestPlayerCopyTables(t *testing.T) { expectData(t, "yes", [][]string{}) } +// TestPlayerCopyBigTable ensures the copy-catchup back-and-forth loop works correctly. +func TestPlayerCopyBigTable(t *testing.T) { + defer deleteTablet(addTablet(100, "0", topodatapb.TabletType_REPLICA, true, true)) + + savedPacketSize := *vstreamer.PacketSize + // PacketSize of 1 byte will send at most one row at a time. + *vstreamer.PacketSize = 1 + defer func() { *vstreamer.PacketSize = savedPacketSize }() + + savedCopyTimeout := copyTimeout + // copyTimeout should be low enough to have time to send one row. + copyTimeout = 500 * time.Millisecond + defer func() { copyTimeout = savedCopyTimeout }() + + savedWaitRetryTime := waitRetryTime + // waitRetry time shoulw be very low to cause the wait loop to execute multipel times. + waitRetryTime = 10 * time.Millisecond + defer func() { waitRetryTime = savedWaitRetryTime }() + + execStatements(t, []string{ + "create table src(id int, val varbinary(128), primary key(id))", + "insert into src values(1, 'aaa'), (2, 'bbb')", + fmt.Sprintf("create table %s.dst(id int, val varbinary(128), primary key(id))", vrepldb), + }) + defer execStatements(t, []string{ + "drop table src", + fmt.Sprintf("drop table %s.dst", vrepldb), + }) + env.SchemaEngine.Reload(context.Background()) + + count := 0 + vstreamRowsSendHook = func(ctx context.Context) { + defer func() { count++ }() + // Allow the first two calls to go through: field info and one row. + if count <= 1 { + return + } + // Insert a statement to test that catchup gets new events. + execStatements(t, []string{ + "insert into src values(3, 'ccc')", + }) + // Wait for context to expire and then send the row. + // This will cause the copier to abort and go back to catchup mode. + <-ctx.Done() + // Do this no more than once. + vstreamRowsSendHook = nil + } + + vstreamRowsHook = func(context.Context) { + // Sleeping 50ms guarantees that the catchup wait loop executes multiple times. + // This is because waitRetryTime is set to 10ms. + time.Sleep(50 * time.Millisecond) + // Do this no more than once. + vstreamRowsHook = nil + } + + filter := &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "dst", + Filter: "select * from src", + }}, + } + + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + query := binlogplayer.CreateVReplicationState("test", bls, "", binlogplayer.VReplicationInit, playerEngine.dbName) + qr, err := playerEngine.Exec(query) + if err != nil { + t.Fatal(err) + } + defer func() { + query := fmt.Sprintf("delete from _vt.vreplication where id = %d", qr.InsertID) + if _, err := playerEngine.Exec(query); err != nil { + t.Fatal(err) + } + expectDeleteQueries(t) + }() + + expectDBClientQueries(t, []string{ + "/insert into _vt.vreplication", + // Create the list of tables to copy and transition to Copying state. + "begin", + "/insert into _vt.copy_state", + "/update _vt.vreplication set state='Copying'", + "commit", + "rollback", + // The first fast-forward has no starting point. So, it just saves the current position. + "/update _vt.vreplication set pos=", + "begin", + "insert into dst(id,val) values (1,'aaa')", + `/update _vt.copy_state set lastpk='fields: rows: ' where vrepl_id=.*`, + "commit", + "rollback", + // The next catchup executes the new row insert, but will be a no-op. + "begin", + "insert into dst(id,val) select 3, 'ccc' from dual where (3) <= (1)", + "/update _vt.vreplication set pos=", + "commit", + // fastForward has nothing to add. Just saves position. + "begin", + "/update _vt.vreplication set pos=", + "commit", + // Second row gets copied. + "begin", + "insert into dst(id,val) values (2,'bbb')", + `/update _vt.copy_state set lastpk='fields: rows: ' where vrepl_id=.*`, + "commit", + // Third row copied without going back to catchup state. + "begin", + "insert into dst(id,val) values (3,'ccc')", + `/update _vt.copy_state set lastpk='fields: rows: ' where vrepl_id=.*`, + "commit", + "/delete from _vt.copy_state.*dst", + // rollback is a no-op because the delete is autocommitted. + "rollback", + // Copy is done. Go into running state. + "/update _vt.vreplication set state='Running'", + // All tables copied. Final catch up followed by Running state. + }) + expectData(t, "dst", [][]string{ + {"1", "aaa"}, + {"2", "bbb"}, + {"3", "ccc"}, + }) +} + +// TestPlayerCopyWildcardRule ensures the copy-catchup back-and-forth loop works correctly +// when the filter uses a wildcard rule +func TestPlayerCopyWildcardRule(t *testing.T) { + defer deleteTablet(addTablet(100, "0", topodatapb.TabletType_REPLICA, true, true)) + + savedPacketSize := *vstreamer.PacketSize + // PacketSize of 1 byte will send at most one row at a time. + *vstreamer.PacketSize = 1 + defer func() { *vstreamer.PacketSize = savedPacketSize }() + + savedCopyTimeout := copyTimeout + // copyTimeout should be low enough to have time to send one row. + copyTimeout = 500 * time.Millisecond + defer func() { copyTimeout = savedCopyTimeout }() + + savedWaitRetryTime := waitRetryTime + // waitRetry time shoulw be very low to cause the wait loop to execute multipel times. + waitRetryTime = 10 * time.Millisecond + defer func() { waitRetryTime = savedWaitRetryTime }() + + execStatements(t, []string{ + "create table src(id int, val varbinary(128), primary key(id))", + "insert into src values(1, 'aaa'), (2, 'bbb')", + fmt.Sprintf("create table %s.src(id int, val varbinary(128), primary key(id))", vrepldb), + }) + defer execStatements(t, []string{ + "drop table src", + fmt.Sprintf("drop table %s.src", vrepldb), + }) + env.SchemaEngine.Reload(context.Background()) + + count := 0 + vstreamRowsSendHook = func(ctx context.Context) { + defer func() { count++ }() + // Allow the first two calls to go through: field info and one row. + if count <= 1 { + return + } + // Insert a statement to test that catchup gets new events. + execStatements(t, []string{ + "insert into src values(3, 'ccc')", + }) + // Wait for context to expire and then send the row. + // This will cause the copier to abort and go back to catchup mode. + <-ctx.Done() + // Do this no more than once. + vstreamRowsSendHook = nil + } + + vstreamRowsHook = func(context.Context) { + // Sleeping 50ms guarantees that the catchup wait loop executes multiple times. + // This is because waitRetryTime is set to 10ms. + time.Sleep(50 * time.Millisecond) + // Do this no more than once. + vstreamRowsHook = nil + } + + filter := &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "/.*", + Filter: "", + }}, + } + + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + query := binlogplayer.CreateVReplicationState("test", bls, "", binlogplayer.VReplicationInit, playerEngine.dbName) + qr, err := playerEngine.Exec(query) + if err != nil { + t.Fatal(err) + } + defer func() { + query := fmt.Sprintf("delete from _vt.vreplication where id = %d", qr.InsertID) + if _, err := playerEngine.Exec(query); err != nil { + t.Fatal(err) + } + expectDeleteQueries(t) + }() + + expectDBClientQueries(t, []string{ + "/insert into _vt.vreplication", + // Create the list of tables to copy and transition to Copying state. + "begin", + "/insert into _vt.copy_state", + "/update _vt.vreplication set state='Copying'", + "commit", + "rollback", + // The first fast-forward has no starting point. So, it just saves the current position. + "/update _vt.vreplication set pos=", + "begin", + "insert into src(id,val) values (1,'aaa')", + `/update _vt.copy_state set lastpk='fields: rows: ' where vrepl_id=.*`, + "commit", + "rollback", + // The next catchup executes the new row insert, but will be a no-op. + "begin", + "insert into src(id,val) select 3, 'ccc' from dual where (3) <= (1)", + "/update _vt.vreplication set pos=", + "commit", + // fastForward has nothing to add. Just saves position. + "begin", + "/update _vt.vreplication set pos=", + "commit", + // Second row gets copied. + "begin", + "insert into src(id,val) values (2,'bbb')", + `/update _vt.copy_state set lastpk='fields: rows: ' where vrepl_id=.*`, + "commit", + // Third row copied without going back to catchup state. + "begin", + "insert into src(id,val) values (3,'ccc')", + `/update _vt.copy_state set lastpk='fields: rows: ' where vrepl_id=.*`, + "commit", + "/delete from _vt.copy_state.*src", + // rollback is a no-op because the delete is autocommitted. + "rollback", + // Copy is done. Go into running state. + "/update _vt.vreplication set state='Running'", + // All tables copied. Final catch up followed by Running state. + }) + expectData(t, "src", [][]string{ + {"1", "aaa"}, + {"2", "bbb"}, + {"3", "ccc"}, + }) +} + // TestPlayerCopyTableContinuation tests the copy workflow where tables have been partially copied. func TestPlayerCopyTableContinuation(t *testing.T) { defer deleteTablet(addTablet(100, "0", topodatapb.TabletType_REPLICA, true, true)) @@ -174,14 +434,13 @@ func TestPlayerCopyTableContinuation(t *testing.T) { }) // Set a hook to execute statements just before the copy begins from src1. - streamRowsHook = func(context.Context) { + vstreamRowsHook = func(context.Context) { execStatements(t, []string{ "update src1 set val='updated again' where id1 = 3", }) // Set it back to nil. Otherwise, this will get executed again when copying not_copied. - streamRowsHook = nil + vstreamRowsHook = nil } - defer func() { streamRowsHook = nil }() bls := &binlogdatapb.BinlogSource{ Keyspace: env.KeyspaceName, @@ -217,11 +476,7 @@ func TestPlayerCopyTableContinuation(t *testing.T) { if _, err := playerEngine.Exec(query); err != nil { t.Fatal(err) } - for q := range globalDBQueries { - if strings.HasPrefix(q, "delete from _vt.vreplication") { - break - } - } + expectDeleteQueries(t) }() for q := range globalDBQueries { @@ -258,6 +513,11 @@ func TestPlayerCopyTableContinuation(t *testing.T) { "/delete from _vt.copy_state.*not_copied", "rollback", }) + // Explicitly eat the Running state query. You cant' make expectNontxQueries + // wait for it because it ignores _vt.vreplication events. + expectDBClientQueries(t, []string{ + "/update _vt.vreplication set state='Running'", + }) expectData(t, "dst1", [][]string{ {"1", "insert in"}, {"2", "no change"}, @@ -277,6 +537,90 @@ func TestPlayerCopyTableContinuation(t *testing.T) { }) } +// TestPlayerCopyWildcardTableContinuation tests the copy workflow where tables have been partially copied. +func TestPlayerCopyWildcardTableContinuation(t *testing.T) { + defer deleteTablet(addTablet(100, "0", topodatapb.TabletType_REPLICA, true, true)) + + execStatements(t, []string{ + // src is initialized as partially copied. + // lastpk will be initialized at (6,6) later below. + "create table src(id int, val varbinary(128), primary key(id))", + "insert into src values(2,'copied'), (3,'uncopied')", + fmt.Sprintf("create table %s.dst(id int, val varbinary(128), primary key(id))", vrepldb), + fmt.Sprintf("insert into %s.dst values(2,'copied')", vrepldb), + }) + defer execStatements(t, []string{ + "drop table src", + fmt.Sprintf("drop table %s.dst", vrepldb), + }) + env.SchemaEngine.Reload(context.Background()) + + filter := &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "dst", + Filter: "select * from src", + }}, + } + pos := masterPosition(t) + execStatements(t, []string{ + "insert into src values(4,'new')", + }) + + bls := &binlogdatapb.BinlogSource{ + Keyspace: env.KeyspaceName, + Shard: env.ShardName, + Filter: filter, + OnDdl: binlogdatapb.OnDDLAction_IGNORE, + } + query := binlogplayer.CreateVReplicationState("test", bls, "", binlogplayer.BlpStopped, playerEngine.dbName) + qr, err := playerEngine.Exec(query) + if err != nil { + t.Fatal(err) + } + // As mentioned above. lastpk cut-off is set at (6,6) + lastpk := sqltypes.ResultToProto3(sqltypes.MakeTestResult(sqltypes.MakeTestFields( + "id", + "int32"), + "2", + )) + lastpk.RowsAffected = 0 + execStatements(t, []string{ + fmt.Sprintf("insert into _vt.copy_state values(%d, '%s', %s)", qr.InsertID, "dst", encodeString(fmt.Sprintf("%v", lastpk))), + }) + id := qr.InsertID + _, err = playerEngine.Exec(fmt.Sprintf("update _vt.vreplication set state='Copying', pos=%s where id=%d", encodeString(pos), id)) + if err != nil { + t.Fatal(err) + } + defer func() { + query := fmt.Sprintf("delete from _vt.vreplication where id = %d", id) + if _, err := playerEngine.Exec(query); err != nil { + t.Fatal(err) + } + expectDeleteQueries(t) + }() + + expectNontxQueries(t, []string{ + // Catchup + "insert into dst(id,val) select 4, 'new' from dual where (4) <= (2)", + // Copy + "insert into dst(id,val) values (3,'uncopied'), (4,'new')", + `/update _vt.copy_state set lastpk.*`, + "/delete from _vt.copy_state.*dst", + "rollback", + }) + // Explicitly eat the Running state query. You cant' make expectNontxQueries + // wait for it because it ignores _vt.vreplication events. + expectDBClientQueries(t, []string{ + "/update _vt.vreplication set state='Running'", + }) + expectData(t, "dst", [][]string{ + {"2", "copied"}, + {"3", "uncopied"}, + {"4", "new"}, + }) +} + func TestPlayerCopyTablesNone(t *testing.T) { defer deleteTablet(addTablet(100, "0", topodatapb.TabletType_REPLICA, true, true)) @@ -303,9 +647,7 @@ func TestPlayerCopyTablesNone(t *testing.T) { if _, err := playerEngine.Exec(query); err != nil { t.Fatal(err) } - expectDBClientQueries(t, []string{ - "/delete", - }) + expectDeleteQueries(t) }() expectDBClientQueries(t, []string{ @@ -336,12 +678,11 @@ func TestPlayerCopyTableCancel(t *testing.T) { defer func() { copyTimeout = saveTimeout }() // Set a hook to reset the copy timeout after first call. - streamRowsHook = func(ctx context.Context) { + vstreamRowsHook = func(ctx context.Context) { <-ctx.Done() copyTimeout = saveTimeout - streamRowsHook = nil + vstreamRowsHook = nil } - defer func() { streamRowsHook = nil }() filter := &binlogdatapb.Filter{ Rules: []*binlogdatapb.Rule{{ @@ -366,9 +707,7 @@ func TestPlayerCopyTableCancel(t *testing.T) { if _, err := playerEngine.Exec(query); err != nil { t.Fatal(err) } - expectDBClientQueries(t, []string{ - "/delete", - }) + expectDeleteQueries(t) }() // Make sure rows get copied in spite of the early context cancel. @@ -393,7 +732,7 @@ func TestPlayerCopyTableCancel(t *testing.T) { // copy of dst1 is done: delete from copy_state. "/delete from _vt.copy_state.*dst1", "rollback", - // All tables copied. Final catch up followed by Running state. + // All tables copied. Go into running state. "/update _vt.vreplication set state='Running'", }) expectData(t, "dst1", [][]string{ diff --git a/go/vt/vttablet/tabletmanager/vreplication/vplayer.go b/go/vt/vttablet/tabletmanager/vreplication/vplayer.go index 11e73b4647f..3a4bfd1fff4 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/vplayer.go +++ b/go/vt/vttablet/tabletmanager/vreplication/vplayer.go @@ -20,6 +20,7 @@ import ( "errors" "fmt" "io" + "math" "time" "golang.org/x/net/context" @@ -207,6 +208,10 @@ func (vp *vplayer) updatePos(ts int64) (posReached bool, err error) { } func (vp *vplayer) applyEvents(ctx context.Context, relay *relayLog) error { + // If we're not running, set SecondsBehindMaster to be very high. + // TODO(sougou): if we also stored the time of the last event, we + // can estimate this value more accurately. + defer vp.vr.stats.SecondsBehindMaster.Set(math.MaxInt64) for { items, err := relay.Fetch() if err != nil { diff --git a/go/vt/vttablet/tabletmanager/vreplication/vplayer_test.go b/go/vt/vttablet/tabletmanager/vreplication/vplayer_test.go index cdf5a1e1215..12896028cec 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/vplayer_test.go +++ b/go/vt/vttablet/tabletmanager/vreplication/vplayer_test.go @@ -280,6 +280,173 @@ func TestPlayerFilters(t *testing.T) { } } +func TestPlayerKeywordNames(t *testing.T) { + defer deleteTablet(addTablet(100, "0", topodatapb.TabletType_REPLICA, true, true)) + + execStatements(t, []string{ + "create table `begin`(`primary` int, `column` varbinary(128), primary key(`primary`))", + fmt.Sprintf("create table %s.`begin`(`primary` int, `column` varbinary(128), primary key(`primary`))", vrepldb), + "create table `rollback`(`primary` int, `column` varbinary(128), primary key(`primary`))", + fmt.Sprintf("create table %s.`rollback`(`primary` int, `column` varbinary(128), primary key(`primary`))", vrepldb), + "create table `commit`(`primary` int, `column` varbinary(128), primary key(`primary`))", + fmt.Sprintf("create table %s.`commit`(`primary` int, `column` varbinary(128), primary key(`primary`))", vrepldb), + }) + defer execStatements(t, []string{ + "drop table `begin`", + fmt.Sprintf("drop table %s.`begin`", vrepldb), + "drop table `rollback`", + fmt.Sprintf("drop table %s.`rollback`", vrepldb), + "drop table `commit`", + fmt.Sprintf("drop table %s.`commit`", vrepldb), + }) + env.SchemaEngine.Reload(context.Background()) + + filter := &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "begin", + Filter: "select * from `begin`", + }, { + Match: "rollback", + Filter: "select `primary`, `column` from `rollback`", + }, { + Match: "commit", + Filter: "select `primary`+1 as `primary`, concat(`column`, 'a') as `column` from `commit`", + }}, + } + cancel, _ := startVReplication(t, filter, binlogdatapb.OnDDLAction_IGNORE, "") + defer cancel() + + testcases := []struct { + input string + output []string + table string + data [][]string + }{{ + input: "insert into `begin` values(1, 'aaa')", + output: []string{ + "begin", + "insert into `begin`(`primary`,`column`) values (1,'aaa')", + "/update _vt.vreplication set pos=", + "commit", + }, + table: "begin", + data: [][]string{ + {"1", "aaa"}, + }, + }, { + input: "update `begin` set `column`='bbb'", + output: []string{ + "begin", + "update `begin` set `column`='bbb' where `primary`=1", + "/update _vt.vreplication set pos=", + "commit", + }, + table: "begin", + data: [][]string{ + {"1", "bbb"}, + }, + }, { + input: "delete from `begin` where `primary`=1", + output: []string{ + "begin", + "delete from `begin` where `primary`=1", + "/update _vt.vreplication set pos=", + "commit", + }, + table: "begin", + data: [][]string{}, + }, { + input: "insert into `rollback` values(1, 'aaa')", + output: []string{ + "begin", + "insert into `rollback`(`primary`,`column`) values (1,'aaa')", + "/update _vt.vreplication set pos=", + "commit", + }, + table: "rollback", + data: [][]string{ + {"1", "aaa"}, + }, + }, { + input: "update `rollback` set `column`='bbb'", + output: []string{ + "begin", + "update `rollback` set `column`='bbb' where `primary`=1", + "/update _vt.vreplication set pos=", + "commit", + }, + table: "rollback", + data: [][]string{ + {"1", "bbb"}, + }, + }, { + input: "delete from `rollback` where `primary`=1", + output: []string{ + "begin", + "delete from `rollback` where `primary`=1", + "/update _vt.vreplication set pos=", + "commit", + }, + table: "rollback", + data: [][]string{}, + }, { + input: "insert into `commit` values(1, 'aaa')", + output: []string{ + "begin", + "insert into `commit`(`primary`,`column`) values (1 + 1,concat('aaa', 'a'))", + "/update _vt.vreplication set pos=", + "commit", + }, + table: "commit", + data: [][]string{ + {"2", "aaaa"}, + }, + }, { + input: "update `commit` set `column`='bbb' where `primary`=1", + output: []string{ + "begin", + "update `commit` set `column`=concat('bbb', 'a') where `primary`=(1 + 1)", + "/update _vt.vreplication set pos=", + "commit", + }, + table: "commit", + data: [][]string{ + {"2", "bbba"}, + }, + }, { + input: "update `commit` set `primary`=2 where `primary`=1", + output: []string{ + "begin", + "delete from `commit` where `primary`=(1 + 1)", + "insert into `commit`(`primary`,`column`) values (2 + 1,concat('bbb', 'a'))", + "/update _vt.vreplication set pos=", + "commit", + }, + table: "commit", + data: [][]string{ + {"3", "bbba"}, + }, + }, { + input: "delete from `commit` where `primary`=2", + output: []string{ + "begin", + "delete from `commit` where `primary`=(2 + 1)", + "/update _vt.vreplication set pos=", + "commit", + }, + table: "commit", + data: [][]string{}, + }} + + for _, tcases := range testcases { + execStatements(t, []string{tcases.input}) + expectDBClientQueries(t, tcases.output) + if tcases.table != "" { + expectData(t, tcases.table, tcases.data) + } + } +} + func TestPlayerUpdates(t *testing.T) { defer deleteTablet(addTablet(100, "0", topodatapb.TabletType_REPLICA, true, true)) @@ -1304,9 +1471,7 @@ func startVReplication(t *testing.T, filter *binlogdatapb.Filter, onddl binlogda if _, err := playerEngine.Exec(query); err != nil { t.Fatal(err) } - expectDBClientQueries(t, []string{ - "/delete", - }) + expectDeleteQueries(t) }, int(qr.InsertID) } diff --git a/go/vt/vttablet/tabletmanager/vreplication/vreplicator.go b/go/vt/vttablet/tabletmanager/vreplication/vreplicator.go index b83ddde3060..d067191c279 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/vreplicator.go +++ b/go/vt/vttablet/tabletmanager/vreplication/vreplicator.go @@ -43,15 +43,6 @@ var ( relayLogMaxItems = 1000 copyTimeout = 1 * time.Hour replicaLagTolerance = 10 * time.Second - - // CreateCopyState is the list of statements to execute for creating - // the _vt.copy_state table - CreateCopyState = []string{ - `create table if not exists _vt.copy_state ( - vrepl_id int, - table_name varbinary(128), - lastpk varbinary(2000), - primary key (vrepl_id, table_name))`} ) type vreplicator struct { @@ -142,11 +133,9 @@ func (vr *vreplicator) readSettings(ctx context.Context) (settings binlogplayer. return settings, numTablesToCopy, err } log.Info("Looks like _vt.copy_state table may not exist. Trying to create... ") - for _, query := range CreateCopyState { - if _, merr := vr.dbClient.Execute(query); merr != nil { - log.Errorf("Failed to ensure _vt.copy_state table exists: %v", merr) - return settings, numTablesToCopy, err - } + if _, merr := vr.dbClient.Execute(createCopyState); merr != nil { + log.Errorf("Failed to ensure _vt.copy_state table exists: %v", merr) + return settings, numTablesToCopy, err } // Redo the read. qr, err = vr.dbClient.Execute(query) diff --git a/go/vt/vttablet/tabletserver/messager/engine.go b/go/vt/vttablet/tabletserver/messager/engine.go index 8305115f1be..f22d0243479 100644 --- a/go/vt/vttablet/tabletserver/messager/engine.go +++ b/go/vt/vttablet/tabletserver/messager/engine.go @@ -269,7 +269,7 @@ func (me *Engine) schemaChanged(tables map[string]*schema.Table, created, altere } if me.managers[name] != nil { tabletenv.InternalErrors.Add("Messages", 1) - log.Errorf("Newly created table alread exists in messages: %s", name) + log.Errorf("Newly created table already exists in messages: %s", name) continue } mm := newMessageManager(me.tsv, t, me.conns, me.postponeSema) diff --git a/go/vt/vttablet/tabletserver/txserializer/tx_serializer.go b/go/vt/vttablet/tabletserver/txserializer/tx_serializer.go index 466da683795..f0c5e2f49cb 100644 --- a/go/vt/vttablet/tabletserver/txserializer/tx_serializer.go +++ b/go/vt/vttablet/tabletserver/txserializer/tx_serializer.go @@ -62,7 +62,7 @@ var ( // been rejected due to exceeding the max queue size per row (range). queueExceededDryRun = stats.NewCountersWithSingleLabel( "TxSerializerQueueExceededDryRun", - "Dry-run Number of transactions that were rejcted because the max queue size was exceeded", + "Dry-run Number of transactions that were rejected because the max queue size was exceeded", "table_name") // globalQueueExceeded is the same as queueExceeded but for the global queue. diff --git a/go/vt/vttablet/tabletserver/vstreamer/rowstreamer.go b/go/vt/vttablet/tabletserver/vstreamer/rowstreamer.go index a0f1fc5f56e..61e27750df8 100644 --- a/go/vt/vttablet/tabletserver/vstreamer/rowstreamer.go +++ b/go/vt/vttablet/tabletserver/vstreamer/rowstreamer.go @@ -235,7 +235,7 @@ func (rs *rowStreamer) streamQuery(conn *mysql.Conn, send func(*binlogdatapb.VSt } } - if byteCount >= *packetSize { + if byteCount >= *PacketSize { response.Lastpk = sqltypes.RowToProto3(lastpk) err = send(response) if err != nil { diff --git a/go/vt/vttablet/tabletserver/vstreamer/rowstreamer_test.go b/go/vt/vttablet/tabletserver/vstreamer/rowstreamer_test.go index 5612673dcbb..b7f8db8022c 100644 --- a/go/vt/vttablet/tabletserver/vstreamer/rowstreamer_test.go +++ b/go/vt/vttablet/tabletserver/vstreamer/rowstreamer_test.go @@ -142,9 +142,9 @@ func TestStreamRowsMultiPacket(t *testing.T) { t.Skip() } - savedSize := *packetSize - *packetSize = 10 - defer func() { *packetSize = savedSize }() + savedSize := *PacketSize + *PacketSize = 10 + defer func() { *PacketSize = savedSize }() execStatements(t, []string{ "create table t1(id int, val varbinary(128), primary key(id))", @@ -170,9 +170,9 @@ func TestStreamRowsCancel(t *testing.T) { t.Skip() } - savedSize := *packetSize - *packetSize = 10 - defer func() { *packetSize = savedSize }() + savedSize := *PacketSize + *PacketSize = 10 + defer func() { *PacketSize = savedSize }() execStatements(t, []string{ "create table t1(id int, val varbinary(128), primary key(id))", diff --git a/go/vt/vttablet/tabletserver/vstreamer/vstreamer.go b/go/vt/vttablet/tabletserver/vstreamer/vstreamer.go index 010fe66df69..b0298a279d6 100644 --- a/go/vt/vttablet/tabletserver/vstreamer/vstreamer.go +++ b/go/vt/vttablet/tabletserver/vstreamer/vstreamer.go @@ -34,12 +34,13 @@ import ( binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" ) -var packetSize = flag.Int("vstream_packet_size", 30000, "Suggested packet size for VReplication streamer. This is used only as a recommendation. The actual packet size may be more or less than this amount.") +// PacketSize is the suggested packet size for VReplication streamer. +var PacketSize = flag.Int("vstream_packet_size", 30000, "Suggested packet size for VReplication streamer. This is used only as a recommendation. The actual packet size may be more or less than this amount.") -// heartbeatTime is set to slightly below 1s, compared to idleTimeout +// HeartbeatTime is set to slightly below 1s, compared to idleTimeout // set by VPlayer at slightly above 1s. This minimizes conflicts // between the two timeouts. -var heartbeatTime = 900 * time.Millisecond +var HeartbeatTime = 900 * time.Millisecond type vstreamer struct { ctx context.Context @@ -163,7 +164,7 @@ func (vs *vstreamer) parseEvents(ctx context.Context, events <-chan mysql.Binlog newSize += len(rowChange.After.Values) } } - if curSize+newSize > *packetSize { + if curSize+newSize > *PacketSize { vevents := bufferedEvents bufferedEvents = []*binlogdatapb.VEvent{vevent} curSize = newSize @@ -178,10 +179,10 @@ func (vs *vstreamer) parseEvents(ctx context.Context, events <-chan mysql.Binlog } // Main loop: calls bufferAndTransmit as events arrive. - timer := time.NewTimer(heartbeatTime) + timer := time.NewTimer(HeartbeatTime) defer timer.Stop() for { - timer.Reset(heartbeatTime) + timer.Reset(HeartbeatTime) // Drain event if timer fired before reset. select { case <-timer.C: diff --git a/go/vt/vttablet/tabletserver/vstreamer/vstreamer_test.go b/go/vt/vttablet/tabletserver/vstreamer/vstreamer_test.go index 21dde6b6bce..baa49af74e8 100644 --- a/go/vt/vttablet/tabletserver/vstreamer/vstreamer_test.go +++ b/go/vt/vttablet/tabletserver/vstreamer/vstreamer_test.go @@ -454,9 +454,9 @@ func TestBuffering(t *testing.T) { t.Skip() } - savedSize := *packetSize - *packetSize = 10 - defer func() { *packetSize = savedSize }() + savedSize := *PacketSize + *PacketSize = 10 + defer func() { *PacketSize = savedSize }() execStatement(t, "create table packet_test(id int, val varbinary(128), primary key(id))") defer execStatement(t, "drop table packet_test") diff --git a/go/vt/vttest/local_cluster.go b/go/vt/vttest/local_cluster.go index 7e3fa92a2dd..8532052dded 100644 --- a/go/vt/vttest/local_cluster.go +++ b/go/vt/vttest/local_cluster.go @@ -30,6 +30,12 @@ import ( "strings" "unicode" + "vitess.io/vitess/go/vt/proto/logutil" + // we need to import the grpcvtctlclient library so the gRPC + // vtctl client is registered and can be used. + _ "vitess.io/vitess/go/vt/vtctl/grpcvtctlclient" + "vitess.io/vitess/go/vt/vtctl/vtctlclient" + "vitess.io/vitess/go/mysql" "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/vt/log" @@ -101,6 +107,9 @@ type Config struct { TransactionMode string TransactionTimeout float64 + + // The host name to use for the table otherwise it will be resolved from the local hostname + TabletHostName string } // InitSchemas is a shortcut for tests that just want to setup a single @@ -235,6 +244,16 @@ func (db *LocalCluster) Setup() error { return err } + if !db.OnlyMySQL { + log.Infof("Starting vtcombo...") + db.vt = VtcomboProcess(db.Env, &db.Config, db.mysql) + if err := db.vt.WaitStart(); err != nil { + return err + } + log.Infof("vtcombo up: %s", db.vt.Address()) + } + + // Load schema will apply db and vschema migrations. Running after vtcombo starts to be able to apply vschema migrations if err := db.loadSchema(); err != nil { return err } @@ -245,15 +264,6 @@ func (db *LocalCluster) Setup() error { } } - if !db.OnlyMySQL { - log.Infof("Starting vtcombo...") - db.vt = VtcomboProcess(db.Env, &db.Config, db.mysql) - if err := db.vt.WaitStart(); err != nil { - return err - } - log.Infof("vtcombo up: %s", db.vt.Address()) - } - return nil } @@ -307,6 +317,7 @@ func isDir(path string) bool { return err == nil && info.IsDir() } +// loadSchema applies sql and vschema migrations respectively for each keyspace in the topology func (db *LocalCluster) loadSchema() error { if db.SchemaDir == "" { return nil @@ -342,12 +353,26 @@ func (db *LocalCluster) loadSchema() error { return err } + // One single vschema migration per file + if !db.OnlyMySQL && len(cmds) == 1 && strings.HasPrefix(strings.ToUpper(cmds[0]), "ALTER VSCHEMA") { + if err = db.applyVschema(keyspace, cmds[0]); err != nil { + return err + } + continue + } + for _, dbname := range db.shardNames(kpb) { if err := db.Execute(cmds, dbname); err != nil { return err } } } + + if !db.OnlyMySQL { + if err := db.reloadSchemaKeyspace(keyspace); err != nil { + return err + } + } } return nil @@ -432,6 +457,34 @@ func (db *LocalCluster) JSONConfig() interface{} { return config } +// GrpcPort returns the grpc port used by vtcombo +func (db *LocalCluster) GrpcPort() int { + return db.vt.PortGrpc +} + +func (db *LocalCluster) applyVschema(keyspace string, migration string) error { + server := fmt.Sprintf("localhost:%v", db.vt.PortGrpc) + args := []string{"ApplyVSchema", "-sql", migration, keyspace} + fmt.Printf("Applying vschema %v", args) + err := vtctlclient.RunCommandAndWait(context.Background(), server, args, func(e *logutil.Event) { + log.Info(e) + }) + + return err +} + +func (db *LocalCluster) reloadSchemaKeyspace(keyspace string) error { + server := fmt.Sprintf("localhost:%v", db.vt.PortGrpc) + args := []string{"ReloadSchemaKeyspace", "-include_master=true", keyspace} + fmt.Printf("Reloading keyspace schema %v", args) + + err := vtctlclient.RunCommandAndWait(context.Background(), server, args, func(e *logutil.Event) { + log.Info(e) + }) + + return err +} + // LoadSQLFile loads a parses a .sql file from disk, removing all the // different comments that mysql/mysqldump inserts in these, and returning // each individual SQL statement as its own string. diff --git a/go/vt/vttest/vtprocess.go b/go/vt/vttest/vtprocess.go index 91bf375a595..4a544798d4e 100644 --- a/go/vt/vttest/vtprocess.go +++ b/go/vt/vttest/vtprocess.go @@ -240,6 +240,9 @@ func VtcomboProcess(env Environment, args *Config, mysql MySQLManager) *VtProces if args.TransactionTimeout != 0 { vt.ExtraArgs = append(vt.ExtraArgs, "-queryserver-config-transaction-timeout", fmt.Sprintf("%f", args.TransactionTimeout)) } + if args.TabletHostName != "" { + vt.ExtraArgs = append(vt.ExtraArgs, []string{"-tablet_hostname", args.TabletHostName}...) + } if socket != "" { vt.ExtraArgs = append(vt.ExtraArgs, []string{ diff --git a/go/vt/worker/row_differ.go b/go/vt/worker/row_differ.go index c231ed020a6..4d575be8767 100644 --- a/go/vt/worker/row_differ.go +++ b/go/vt/worker/row_differ.go @@ -165,11 +165,11 @@ func (rd *RowDiffer2) Diff() (DiffReport, error) { } advanceRight = false } - dr.processedRows++ if left == nil && right == nil { // No more rows from either side. We're done. break } + dr.processedRows++ if left == nil { // No more rows on the left side. // We know we have at least one row on the right side left. diff --git a/go/vt/worker/split_clone_cmd.go b/go/vt/worker/split_clone_cmd.go index b5f19acbd1a..4cf6b8795fb 100644 --- a/go/vt/worker/split_clone_cmd.go +++ b/go/vt/worker/split_clone_cmd.go @@ -74,7 +74,7 @@ const splitCloneHTML2 = `

    - +

    diff --git a/go/vt/worker/vertical_split_clone_cmd.go b/go/vt/worker/vertical_split_clone_cmd.go index 4f201036458..7045fb3e620 100644 --- a/go/vt/worker/vertical_split_clone_cmd.go +++ b/go/vt/worker/vertical_split_clone_cmd.go @@ -72,7 +72,7 @@ const verticalSplitCloneHTML2 = `

    - +

    diff --git a/go/vt/workflow/resharding/tasks.go b/go/vt/workflow/resharding/tasks.go index c545a08ab7e..c5fc64aa357 100644 --- a/go/vt/workflow/resharding/tasks.go +++ b/go/vt/workflow/resharding/tasks.go @@ -71,6 +71,7 @@ func (hw *horizontalReshardingWorkflow) runSplitClone(ctx context.Context, t *wo worker := t.Attributes["vtworker"] minHealthyRdonlyTablets := t.Attributes["min_healthy_rdonly_tablets"] splitCmd := t.Attributes["split_cmd"] + useConsistentSnapshot := t.Attributes["use_consistent_snapshot"] sourceKeyspaceShard := topoproto.KeyspaceShardString(keyspace, sourceShard) // Reset the vtworker to avoid error if vtworker command has been called elsewhere. @@ -80,6 +81,9 @@ func (hw *horizontalReshardingWorkflow) runSplitClone(ctx context.Context, t *wo } args := []string{splitCmd, "--min_healthy_rdonly_tablets=" + minHealthyRdonlyTablets, sourceKeyspaceShard} + if useConsistentSnapshot != "" { + args = append(args, "--use_consistent_snapshot") + } _, err := automation.ExecuteVtworker(hw.ctx, worker, args) return err } @@ -95,11 +99,15 @@ func (hw *horizontalReshardingWorkflow) runSplitDiff(ctx context.Context, t *wor destShard := t.Attributes["destination_shard"] destinationTabletType := t.Attributes["dest_tablet_type"] worker := t.Attributes["vtworker"] + useConsistentSnapshot := t.Attributes["use_consistent_snapshot"] if _, err := automation.ExecuteVtworker(hw.ctx, worker, []string{"Reset"}); err != nil { return err } args := []string{"SplitDiff", "--min_healthy_rdonly_tablets=1", "--dest_tablet_type=" + destinationTabletType, topoproto.KeyspaceShardString(keyspace, destShard)} + if useConsistentSnapshot != "" { + args = append(args, "--use_consistent_snapshot") + } _, err := automation.ExecuteVtworker(ctx, worker, args) return err } diff --git a/go/vt/workflow/resharding/workflow.go b/go/vt/workflow/resharding/workflow.go index 50209eddc5f..0061bdcab92 100644 --- a/go/vt/workflow/resharding/workflow.go +++ b/go/vt/workflow/resharding/workflow.go @@ -75,6 +75,7 @@ func (*Factory) Init(m *workflow.Manager, w *workflowpb.Workflow, args []string) splitDiffDestTabletType := subFlags.String("split_diff_dest_tablet_type", "RDONLY", "Specifies tablet type to use in destination shards while performing SplitDiff operation") phaseEnaableApprovalsDesc := fmt.Sprintf("Comma separated phases that require explicit approval in the UI to execute. Phase names are: %v", strings.Join(WorkflowPhases(), ",")) phaseEnableApprovalsStr := subFlags.String("phase_enable_approvals", strings.Join(WorkflowPhases(), ","), phaseEnaableApprovalsDesc) + useConsistentSnapshot := subFlags.Bool("use_consistent_snapshot", false, "Instead of pausing replication on the source, uses transactions with consistent snapshot to have a stable view of the data.") if err := subFlags.Parse(args); err != nil { return err @@ -98,6 +99,10 @@ func (*Factory) Init(m *workflow.Manager, w *workflowpb.Workflow, args []string) return fmt.Errorf("invalid phase in phase_enable_approvals: %v", phase) } } + useConsistentSnapshotArg := "" + if *useConsistentSnapshot { + useConsistentSnapshotArg = "true" + } err := validateWorkflow(m, *keyspace, vtworkers, sourceShards, destinationShards, *minHealthyRdonlyTablets) if err != nil { @@ -105,7 +110,7 @@ func (*Factory) Init(m *workflow.Manager, w *workflowpb.Workflow, args []string) } w.Name = fmt.Sprintf("Reshard shards %v into shards %v of keyspace %v.", *keyspace, *sourceShardsStr, *destinationShardsStr) - checkpoint, err := initCheckpoint(*keyspace, vtworkers, sourceShards, destinationShards, *minHealthyRdonlyTablets, *splitCmd, *splitDiffDestTabletType) + checkpoint, err := initCheckpoint(*keyspace, vtworkers, sourceShards, destinationShards, *minHealthyRdonlyTablets, *splitCmd, *splitDiffDestTabletType, useConsistentSnapshotArg) if err != nil { return err } @@ -264,7 +269,7 @@ func validateWorkflow(m *workflow.Manager, keyspace string, vtworkers, sourceSha } // initCheckpoint initialize the checkpoint for the horizontal workflow. -func initCheckpoint(keyspace string, vtworkers, sourceShards, destinationShards []string, minHealthyRdonlyTablets, splitCmd, splitDiffDestTabletType string) (*workflowpb.WorkflowCheckpoint, error) { +func initCheckpoint(keyspace string, vtworkers, sourceShards, destinationShards []string, minHealthyRdonlyTablets, splitCmd, splitDiffDestTabletType string, useConsistentSnapshot string) (*workflowpb.WorkflowCheckpoint, error) { tasks := make(map[string]*workflowpb.Task) initTasks(tasks, phaseCopySchema, destinationShards, func(i int, shard string) map[string]string { return map[string]string{ @@ -280,6 +285,7 @@ func initCheckpoint(keyspace string, vtworkers, sourceShards, destinationShards "min_healthy_rdonly_tablets": minHealthyRdonlyTablets, "split_cmd": splitCmd, "vtworker": vtworkers[i], + "use_consistent_snapshot": useConsistentSnapshot, } }) initTasks(tasks, phaseWaitForFilteredReplication, destinationShards, func(i int, shard string) map[string]string { @@ -290,10 +296,11 @@ func initCheckpoint(keyspace string, vtworkers, sourceShards, destinationShards }) initTasks(tasks, phaseDiff, destinationShards, func(i int, shard string) map[string]string { return map[string]string{ - "keyspace": keyspace, - "destination_shard": shard, - "dest_tablet_type": splitDiffDestTabletType, - "vtworker": vtworkers[i], + "keyspace": keyspace, + "destination_shard": shard, + "dest_tablet_type": splitDiffDestTabletType, + "vtworker": vtworkers[i], + "use_consistent_snapshot": useConsistentSnapshot, } }) initTasks(tasks, phaseMigrateRdonly, sourceShards, func(i int, shard string) map[string]string { diff --git a/go/vt/workflow/resharding/workflow_test.go b/go/vt/workflow/resharding/workflow_test.go index 631adc975b6..bc3d7478240 100644 --- a/go/vt/workflow/resharding/workflow_test.go +++ b/go/vt/workflow/resharding/workflow_test.go @@ -55,7 +55,7 @@ func TestSourceDestShards(t *testing.T) { defer ctrl.Finish() // Set up the fakeworkerclient. It is used at SplitClone and SplitDiff phase. - fakeVtworkerClient := setupFakeVtworker(testKeyspace, testVtworkers) + fakeVtworkerClient := setupFakeVtworker(testKeyspace, testVtworkers, false) vtworkerclient.RegisterFactory("fake", fakeVtworkerClient.FakeVtworkerClientFactory) defer vtworkerclient.UnregisterFactoryForTest("fake") @@ -90,19 +90,25 @@ func TestSourceDestShards(t *testing.T) { // TestHorizontalResharding runs the happy path of HorizontalReshardingWorkflow. func TestHorizontalResharding(t *testing.T) { - ctx := context.Background() + testHorizontalReshardingWorkflow(t, false) +} +// TestHorizontalReshardingWithConsistentSnapshot runs the happy path of HorizontalReshardingWorkflow with consistent snapshot. +func TestHorizontalReshardingWithConsistentSnapshot(t *testing.T) { + testHorizontalReshardingWorkflow(t, true) +} + +func testHorizontalReshardingWorkflow(t *testing.T, useConsistentSnapshot bool) { + ctx := context.Background() // Set up the mock wrangler. It is used for the CopySchema, // WaitforFilteredReplication and Migrate phase. ctrl := gomock.NewController(t) defer ctrl.Finish() mockWranglerInterface := setupMockWrangler(ctrl, testKeyspace) - // Set up the fakeworkerclient. It is used at SplitClone and SplitDiff phase. - fakeVtworkerClient := setupFakeVtworker(testKeyspace, testVtworkers) + fakeVtworkerClient := setupFakeVtworker(testKeyspace, testVtworkers, useConsistentSnapshot) vtworkerclient.RegisterFactory("fake", fakeVtworkerClient.FakeVtworkerClientFactory) defer vtworkerclient.UnregisterFactoryForTest("fake") - // Initialize the topology. ts := setupTopology(ctx, t, testKeyspace) m := workflow.NewManager(ts) @@ -110,7 +116,11 @@ func TestHorizontalResharding(t *testing.T) { wg, _, cancel := workflow.StartManager(m) // Create the workflow. vtworkersParameter := testVtworkers + "," + testVtworkers - uuid, err := m.Create(ctx, horizontalReshardingFactoryName, []string{"-keyspace=" + testKeyspace, "-vtworkers=" + vtworkersParameter, "-phase_enable_approvals=", "-min_healthy_rdonly_tablets=2", "-source_shards=0", "-destination_shards=-80,80-"}) + args := []string{"-keyspace=" + testKeyspace, "-vtworkers=" + vtworkersParameter, "-phase_enable_approvals=", "-min_healthy_rdonly_tablets=2", "-source_shards=0", "-destination_shards=-80,80-"} + if useConsistentSnapshot { + args = append(args, "-use_consistent_snapshot") + } + uuid, err := m.Create(ctx, horizontalReshardingFactoryName, args) if err != nil { t.Fatalf("cannot create resharding workflow: %v", err) } @@ -121,18 +131,15 @@ func TestHorizontalResharding(t *testing.T) { } hw := w.(*horizontalReshardingWorkflow) hw.wr = mockWranglerInterface - // Start the job. if err := m.Start(ctx, uuid); err != nil { t.Fatalf("cannot start resharding workflow: %v", err) } - // Wait for the workflow to end. m.Wait(ctx, uuid) if err := workflow.VerifyAllTasksDone(ctx, ts, uuid); err != nil { t.Fatal(err) } - // Stop the manager. if err := m.Stop(ctx, uuid); err != nil { t.Fatalf("cannot stop resharding workflow: %v", err) @@ -141,18 +148,38 @@ func TestHorizontalResharding(t *testing.T) { wg.Wait() } -func setupFakeVtworker(keyspace, vtworkers string) *fakevtworkerclient.FakeVtworkerClient { +func setupFakeVtworker(keyspace, vtworkers string, useConsistentSnapshot bool) *fakevtworkerclient.FakeVtworkerClient { flag.Set("vtworker_client_protocol", "fake") fakeVtworkerClient := fakevtworkerclient.NewFakeVtworkerClient() - fakeVtworkerClient.RegisterResultForAddr(vtworkers, []string{"Reset"}, "", nil) - fakeVtworkerClient.RegisterResultForAddr(vtworkers, []string{"SplitClone", "--min_healthy_rdonly_tablets=2", keyspace + "/0"}, "", nil) - fakeVtworkerClient.RegisterResultForAddr(vtworkers, []string{"Reset"}, "", nil) - fakeVtworkerClient.RegisterResultForAddr(vtworkers, []string{"SplitDiff", "--min_healthy_rdonly_tablets=1", "--dest_tablet_type=RDONLY", keyspace + "/-80"}, "", nil) - fakeVtworkerClient.RegisterResultForAddr(vtworkers, []string{"Reset"}, "", nil) - fakeVtworkerClient.RegisterResultForAddr(vtworkers, []string{"SplitDiff", "--min_healthy_rdonly_tablets=1", "--dest_tablet_type=RDONLY", keyspace + "/80-"}, "", nil) + fakeVtworkerClient.RegisterResultForAddr(vtworkers, resetCommand(), "", nil) + fakeVtworkerClient.RegisterResultForAddr(vtworkers, splitCloneCommand(keyspace, useConsistentSnapshot), "", nil) + fakeVtworkerClient.RegisterResultForAddr(vtworkers, resetCommand(), "", nil) + fakeVtworkerClient.RegisterResultForAddr(vtworkers, splitDiffCommand(keyspace, "-80", useConsistentSnapshot), "", nil) + fakeVtworkerClient.RegisterResultForAddr(vtworkers, resetCommand(), "", nil) + fakeVtworkerClient.RegisterResultForAddr(vtworkers, splitDiffCommand(keyspace, "80-", useConsistentSnapshot), "", nil) return fakeVtworkerClient } +func resetCommand() []string { + return []string{"Reset"} +} + +func splitCloneCommand(keyspace string, useConsistentSnapshot bool) []string { + args := []string{"SplitClone", "--min_healthy_rdonly_tablets=2", keyspace + "/0"} + if useConsistentSnapshot { + args = append(args, "--use_consistent_snapshot") + } + return args +} + +func splitDiffCommand(keyspace string, shardId string, useConsistentSnapshot bool) []string { + args := []string{"SplitDiff", "--min_healthy_rdonly_tablets=1", "--dest_tablet_type=RDONLY", keyspace + "/" + shardId} + if useConsistentSnapshot { + args = append(args, "--use_consistent_snapshot") + } + return args +} + func setupMockWrangler(ctrl *gomock.Controller, keyspace string) *MockReshardingWrangler { mockWranglerInterface := NewMockReshardingWrangler(ctrl) // Set the expected behaviors for mock wrangler. diff --git a/go/vt/wrangler/fake_dbclient_test.go b/go/vt/wrangler/fake_dbclient_test.go new file mode 100644 index 00000000000..1f2ca1f54a7 --- /dev/null +++ b/go/vt/wrangler/fake_dbclient_test.go @@ -0,0 +1,120 @@ +/* +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 wrangler + +import ( + "fmt" + "regexp" + "testing" + + "vitess.io/vitess/go/sqltypes" +) + +func verifyQueries(t *testing.T, dcs []*fakeDBClient) { + for _, dc := range dcs { + dc.verifyQueries(t) + } +} + +type dbResult struct { + result *sqltypes.Result + err error + called bool +} + +// fakeDBClient fakes a binlog_player.DBClient. +type fakeDBClient struct { + queries map[string]*dbResult + queriesRE map[string]*dbResult +} + +// NewfakeDBClient returns a new DBClientMock. +func newFakeDBClient() *fakeDBClient { + return &fakeDBClient{ + queries: map[string]*dbResult{ + "use _vt": {result: &sqltypes.Result{}, called: true}, + "select * from _vt.vreplication where db_name='db'": {result: &sqltypes.Result{}}, + }, + queriesRE: make(map[string]*dbResult), + } +} + +func (dc *fakeDBClient) addQuery(query string, result *sqltypes.Result, err error) { + dc.queries[query] = &dbResult{result: result, err: err} +} + +func (dc *fakeDBClient) addQueryRE(query string, result *sqltypes.Result, err error) { + dc.queriesRE[query] = &dbResult{result: result, err: err} +} + +// DBName is part of the DBClient interface +func (dc *fakeDBClient) DBName() string { + return "db" +} + +// Connect is part of the DBClient interface +func (dc *fakeDBClient) Connect() error { + return nil +} + +// Begin is part of the DBClient interface +func (dc *fakeDBClient) Begin() error { + return nil +} + +// Commit is part of the DBClient interface +func (dc *fakeDBClient) Commit() error { + return nil +} + +// Rollback is part of the DBClient interface +func (dc *fakeDBClient) Rollback() error { + return nil +} + +// Close is part of the DBClient interface +func (dc *fakeDBClient) Close() { +} + +// ExecuteFetch is part of the DBClient interface +func (dc *fakeDBClient) ExecuteFetch(query string, maxrows int) (qr *sqltypes.Result, err error) { + if dbr := dc.queries[query]; dbr != nil { + dbr.called = true + return dbr.result, dbr.err + } + for re, dbr := range dc.queriesRE { + if regexp.MustCompile(re).MatchString(query) { + dbr.called = true + return dbr.result, dbr.err + } + } + return nil, fmt.Errorf("unexpected query: %s", query) +} + +func (dc *fakeDBClient) verifyQueries(t *testing.T) { + t.Helper() + for query, dbr := range dc.queries { + if !dbr.called { + t.Errorf("query: %v was not called", query) + } + } + for query, dbr := range dc.queriesRE { + if !dbr.called { + t.Errorf("query: %v was not called", query) + } + } +} diff --git a/go/vt/wrangler/fake_tablet_test.go b/go/vt/wrangler/fake_tablet_test.go new file mode 100644 index 00000000000..85adabf6cb1 --- /dev/null +++ b/go/vt/wrangler/fake_tablet_test.go @@ -0,0 +1,228 @@ +/* +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 wrangler + +import ( + "fmt" + "net" + "net/http" + "testing" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc" + "vitess.io/vitess/go/mysql/fakesqldb" + "vitess.io/vitess/go/vt/mysqlctl/fakemysqldaemon" + querypb "vitess.io/vitess/go/vt/proto/query" + topodatapb "vitess.io/vitess/go/vt/proto/topodata" + "vitess.io/vitess/go/vt/topo" + "vitess.io/vitess/go/vt/topo/topoproto" + "vitess.io/vitess/go/vt/vttablet/grpctmserver" + "vitess.io/vitess/go/vt/vttablet/tabletconn" + "vitess.io/vitess/go/vt/vttablet/tabletmanager" + "vitess.io/vitess/go/vt/vttablet/tmclient" + + // import the gRPC client implementation for tablet manager + _ "vitess.io/vitess/go/vt/vttablet/grpctmclient" + + // import the gRPC client implementation for query service + _ "vitess.io/vitess/go/vt/vttablet/grpctabletconn" +) + +// This file was copied from testlib. All tests from testlib should be moved +// to the current directory. In order to move tests from there, we have to +// remove the circular dependency it causes (through vtctl dependence). +// The tests in this directory call wrangler functions directly. So, there's +// no circular dependency. + +// This file contains utility methods for unit tests. +// We allow the creation of fake tablets, and running their event loop based +// on a FakeMysqlDaemon. + +// fakeTablet keeps track of a fake tablet in memory. It has: +// - a Tablet record (used for creating the tablet, kept for user's information) +// - a FakeMysqlDaemon (used by the fake event loop) +// - a 'done' channel (used to terminate the fake event loop) +type fakeTablet struct { + // Tablet and FakeMysqlDaemon are populated at NewFakeTablet time. + // We also create the RPCServer, so users can register more services + // before calling StartActionLoop(). + Tablet *topodatapb.Tablet + FakeMysqlDaemon *fakemysqldaemon.FakeMysqlDaemon + RPCServer *grpc.Server + + // The following fields are created when we start the event loop for + // the tablet, and closed / cleared when we stop it. + // The Listener is used by the gRPC server. + Agent *tabletmanager.ActionAgent + Listener net.Listener + + // These optional fields are used if the tablet also needs to + // listen on the 'vt' port. + StartHTTPServer bool + HTTPListener net.Listener + HTTPServer *http.Server +} + +// TabletOption is an interface for changing tablet parameters. +// It's a way to pass multiple parameters to NewFakeTablet without +// making it too cumbersome. +type TabletOption func(tablet *topodatapb.Tablet) + +// TabletKeyspaceShard is the option to set the tablet keyspace and shard +func TabletKeyspaceShard(t *testing.T, keyspace, shard string) TabletOption { + return func(tablet *topodatapb.Tablet) { + tablet.Keyspace = keyspace + shard, kr, err := topo.ValidateShardName(shard) + if err != nil { + t.Fatalf("cannot ValidateShardName value %v", shard) + } + tablet.Shard = shard + tablet.KeyRange = kr + } +} + +// newFakeTablet creates the test tablet in the topology. 'uid' +// has to be between 0 and 99. All the tablet info will be derived +// from that. Look at the implementation if you need values. +// Use TabletOption implementations if you need to change values at creation. +// 'db' can be nil if the test doesn't use a database at all. +func newFakeTablet(t *testing.T, wr *Wrangler, cell string, uid uint32, tabletType topodatapb.TabletType, db *fakesqldb.DB, options ...TabletOption) *fakeTablet { + if uid > 99 { + t.Fatalf("uid has to be between 0 and 99: %v", uid) + } + mysqlPort := int32(3300 + uid) + hostname := fmt.Sprintf("%v.%d", cell, uid) + tablet := &topodatapb.Tablet{ + Alias: &topodatapb.TabletAlias{Cell: cell, Uid: uid}, + Hostname: hostname, + MysqlHostname: hostname, + PortMap: map[string]int32{ + "vt": int32(8100 + uid), + "grpc": int32(8200 + uid), + }, + Keyspace: "test_keyspace", + Shard: "0", + Type: tabletType, + } + topoproto.SetMysqlPort(tablet, mysqlPort) + for _, option := range options { + option(tablet) + } + if err := wr.InitTablet(context.Background(), tablet, false /* allowMasterOverride */, true /* createShardAndKeyspace */, false /* allowUpdate */); err != nil { + t.Fatalf("cannot create tablet %v: %v", uid, err) + } + + // create a FakeMysqlDaemon with the right information by default + fakeMysqlDaemon := fakemysqldaemon.NewFakeMysqlDaemon(db) + fakeMysqlDaemon.MysqlPort = mysqlPort + + return &fakeTablet{ + Tablet: tablet, + FakeMysqlDaemon: fakeMysqlDaemon, + RPCServer: grpc.NewServer(), + } +} + +// StartActionLoop will start the action loop for a fake tablet, +// using ft.FakeMysqlDaemon as the backing mysqld. +func (ft *fakeTablet) StartActionLoop(t *testing.T, wr *Wrangler) { + if ft.Agent != nil { + t.Fatalf("Agent for %v is already running", ft.Tablet.Alias) + } + + // Listen on a random port for gRPC. + var err error + ft.Listener, err = net.Listen("tcp", ":0") + if err != nil { + t.Fatalf("Cannot listen: %v", err) + } + gRPCPort := int32(ft.Listener.Addr().(*net.TCPAddr).Port) + + // If needed, listen on a random port for HTTP. + vtPort := ft.Tablet.PortMap["vt"] + if ft.StartHTTPServer { + ft.HTTPListener, err = net.Listen("tcp", ":0") + if err != nil { + t.Fatalf("Cannot listen on http port: %v", err) + } + handler := http.NewServeMux() + ft.HTTPServer = &http.Server{ + Handler: handler, + } + go ft.HTTPServer.Serve(ft.HTTPListener) + vtPort = int32(ft.HTTPListener.Addr().(*net.TCPAddr).Port) + } + + // Create a test agent on that port, and re-read the record + // (it has new ports and IP). + ft.Agent = tabletmanager.NewTestActionAgent(context.Background(), wr.TopoServer(), ft.Tablet.Alias, vtPort, gRPCPort, ft.FakeMysqlDaemon, nil) + ft.Tablet = ft.Agent.Tablet() + + // Register the gRPC server, and starts listening. + grpctmserver.RegisterForTest(ft.RPCServer, ft.Agent) + go ft.RPCServer.Serve(ft.Listener) + + // And wait for it to serve, so we don't start using it before it's + // ready. + timeout := 5 * time.Second + step := 10 * time.Millisecond + c := tmclient.NewTabletManagerClient() + for timeout >= 0 { + ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) + err := c.Ping(ctx, ft.Agent.Tablet()) + cancel() + if err == nil { + break + } + time.Sleep(step) + timeout -= step + } + if timeout < 0 { + panic("StartActionLoop failed.") + } +} + +// StopActionLoop will stop the Action Loop for the given FakeTablet +func (ft *fakeTablet) StopActionLoop(t *testing.T) { + if ft.Agent == nil { + t.Fatalf("Agent for %v is not running", ft.Tablet.Alias) + } + if ft.StartHTTPServer { + ft.HTTPListener.Close() + } + ft.Listener.Close() + ft.Agent.Stop() + ft.Agent = nil + ft.Listener = nil + ft.HTTPListener = nil +} + +// Target returns the keyspace/shard/type info of this tablet as Target. +func (ft *fakeTablet) Target() querypb.Target { + return querypb.Target{ + Keyspace: ft.Tablet.Keyspace, + Shard: ft.Tablet.Shard, + TabletType: ft.Tablet.Type, + } +} + +func init() { + // enforce we will use the right protocol (gRPC) in all unit tests + *tmclient.TabletManagerProtocol = "grpc" + *tabletconn.TabletProtocol = "grpc" +} diff --git a/go/vt/wrangler/migrater.go b/go/vt/wrangler/migrater.go new file mode 100644 index 00000000000..4832d85965f --- /dev/null +++ b/go/vt/wrangler/migrater.go @@ -0,0 +1,857 @@ +/* +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 wrangler + +import ( + "fmt" + "hash/fnv" + "math" + "reflect" + "sort" + "strings" + "sync" + "time" + + "github.com/golang/protobuf/proto" + "golang.org/x/net/context" + "vitess.io/vitess/go/sqltypes" + "vitess.io/vitess/go/sync2" + "vitess.io/vitess/go/vt/binlog/binlogplayer" + "vitess.io/vitess/go/vt/concurrency" + "vitess.io/vitess/go/vt/key" + binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" + topodatapb "vitess.io/vitess/go/vt/proto/topodata" + vschemapb "vitess.io/vitess/go/vt/proto/vschema" + "vitess.io/vitess/go/vt/sqlparser" + "vitess.io/vitess/go/vt/topo" + "vitess.io/vitess/go/vt/vterrors" + "vitess.io/vitess/go/vt/vtgate/vindexes" +) + +// MigrateDirection specifies the migration direction. +type MigrateDirection int + +// The following constants define the migration direction. +const ( + DirectionForward = MigrateDirection(iota) + DirectionBackward +) + +// accessType specifies the type of access for a shard (allow/disallow writes). +type accessType int + +const ( + allowWrites = accessType(iota) + disallowWrites +) + +// migrater contains the metadata for migrating read and write traffic +// for vreplication streams. +type migrater struct { + migrationType binlogdatapb.MigrationType + wr *Wrangler + id int64 + sources map[string]*miSource + targets map[string]*miTarget + sourceKeyspace string + targetKeyspace string + tables []string +} + +// miTarget contains the metadata for each migration target. +type miTarget struct { + si *topo.ShardInfo + master *topo.TabletInfo + sources map[uint32]*binlogdatapb.BinlogSource + position string +} + +// miSource contains the metadata for each migration source. +type miSource struct { + si *topo.ShardInfo + master *topo.TabletInfo + position string + journaled bool +} + +// MigrateReads is a generic way of migrating read traffic for a resharding workflow. +func (wr *Wrangler) MigrateReads(ctx context.Context, targetKeyspace, workflow string, servedType topodatapb.TabletType, cells []string, direction MigrateDirection) error { + if servedType != topodatapb.TabletType_REPLICA && servedType != topodatapb.TabletType_RDONLY { + return fmt.Errorf("tablet type must be REPLICA or RDONLY: %v", servedType) + } + mi, err := wr.buildMigrater(ctx, targetKeyspace, workflow) + if err != nil { + return err + } + if err := mi.validate(ctx, false /* isWrite */); err != nil { + return err + } + + // For reads, locking the source keyspace is sufficient. + ctx, unlock, lockErr := wr.ts.LockKeyspace(ctx, mi.sourceKeyspace, "MigrateReads") + if lockErr != nil { + return lockErr + } + defer unlock(&err) + + if mi.migrationType == binlogdatapb.MigrationType_TABLES { + return mi.migrateTableReads(ctx, cells, servedType, direction) + } + return mi.migrateShardReads(ctx, cells, servedType, direction) +} + +// MigrateWrites is a generic way of migrating write traffic for a resharding workflow. +func (wr *Wrangler) MigrateWrites(ctx context.Context, targetKeyspace, workflow string, filteredReplicationWaitTime time.Duration) (journalID int64, err error) { + mi, err := wr.buildMigrater(ctx, targetKeyspace, workflow) + if err != nil { + return 0, err + } + mi.wr.Logger().Infof("Built migration metadata: %+v", mi) + if err := mi.validate(ctx, true /* isWrite */); err != nil { + return 0, err + } + + // Need to lock both source and target keyspaces. + ctx, sourceUnlock, lockErr := wr.ts.LockKeyspace(ctx, mi.sourceKeyspace, "MigrateWrites") + if lockErr != nil { + return 0, lockErr + } + defer sourceUnlock(&err) + if mi.targetKeyspace != mi.sourceKeyspace { + tctx, targetUnlock, lockErr := wr.ts.LockKeyspace(ctx, mi.targetKeyspace, "MigrateWrites") + if lockErr != nil { + return 0, lockErr + } + ctx = tctx + defer targetUnlock(&err) + } + + journalsExist, err := mi.checkJournals(ctx) + if err != nil { + return 0, err + } + if !journalsExist { + mi.wr.Logger().Infof("No previous journals were found. Proceeding normally.") + if err := mi.stopSourceWrites(ctx); err != nil { + mi.cancelMigration(ctx) + return 0, err + } + if err := mi.waitForCatchup(ctx, filteredReplicationWaitTime); err != nil { + mi.cancelMigration(ctx) + return 0, err + } + } else { + mi.wr.Logger().Infof("Journals were found. Completing the left over steps.") + // Need to gather positions in case all journals were not created. + if err := mi.gatherPositions(ctx); err != nil { + return 0, err + } + } + // This is the point of no return. Once a journal is created, + // traffic can be redirected to target shards. + if err := mi.createJournals(ctx); err != nil { + return 0, err + } + if err := mi.createReverseReplication(ctx); err != nil { + return 0, err + } + if err := mi.allowTargetWrites(ctx); err != nil { + return 0, err + } + if err := mi.changeRouting(ctx); err != nil { + return 0, err + } + mi.deleteTargetVReplication(ctx) + return mi.id, nil +} + +func (wr *Wrangler) buildMigrater(ctx context.Context, targetKeyspace, workflow string) (*migrater, error) { + targets, err := wr.buildMigrationTargets(ctx, targetKeyspace, workflow) + if err != nil { + return nil, err + } + + mi := &migrater{ + wr: wr, + id: hashStreams(targetKeyspace, targets), + targets: targets, + sources: make(map[string]*miSource), + targetKeyspace: targetKeyspace, + } + mi.wr.Logger().Infof("Migration ID for workflow %s: %d", workflow, mi.id) + + // Build the sources + for _, target := range targets { + for _, bls := range target.sources { + if mi.sourceKeyspace == "" { + mi.sourceKeyspace = bls.Keyspace + } else if mi.sourceKeyspace != bls.Keyspace { + return nil, fmt.Errorf("source keyspaces are mismatched across streams: %v vs %v", mi.sourceKeyspace, bls.Keyspace) + } + if _, ok := mi.sources[bls.Shard]; ok { + continue + } + + sourcesi, err := mi.wr.ts.GetShard(ctx, bls.Keyspace, bls.Shard) + if err != nil { + return nil, err + } + sourceMaster, err := mi.wr.ts.GetTablet(ctx, sourcesi.MasterAlias) + if err != nil { + return nil, err + } + mi.sources[bls.Shard] = &miSource{ + si: sourcesi, + master: sourceMaster, + } + + if mi.tables == nil { + for _, rule := range bls.Filter.Rules { + mi.tables = append(mi.tables, rule.Match) + } + sort.Strings(mi.tables) + } else { + var tables []string + for _, rule := range bls.Filter.Rules { + tables = append(tables, rule.Match) + } + sort.Strings(tables) + if !reflect.DeepEqual(mi.tables, tables) { + return nil, fmt.Errorf("table lists are mismatched across streams: %v vs %v", mi.tables, tables) + } + } + } + } + if mi.sourceKeyspace != mi.targetKeyspace { + mi.migrationType = binlogdatapb.MigrationType_TABLES + } else { + mi.migrationType = binlogdatapb.MigrationType_SHARDS + } + return mi, nil +} + +func (wr *Wrangler) buildMigrationTargets(ctx context.Context, targetKeyspace, workflow string) (targets map[string]*miTarget, err error) { + targets = make(map[string]*miTarget) + targetShards, err := wr.ts.GetShardNames(ctx, targetKeyspace) + if err != nil { + return nil, err + } + // We check all target shards. All of them may not have a stream. + // For example, if we're splitting -80 to -40,40-80, only those + // two target shards will have vreplication streams. + for _, targetShard := range targetShards { + targetsi, err := wr.ts.GetShard(ctx, targetKeyspace, targetShard) + if err != nil { + return nil, err + } + targetMaster, err := wr.ts.GetTablet(ctx, targetsi.MasterAlias) + if err != nil { + return nil, err + } + p3qr, err := wr.tmc.VReplicationExec(ctx, targetMaster.Tablet, fmt.Sprintf("select id, source from _vt.vreplication where workflow='%s' and db_name='%s'", workflow, targetMaster.DbName())) + if err != nil { + return nil, err + } + // If there's no vreplication stream, check the next target. + if len(p3qr.Rows) < 1 { + continue + } + + targets[targetShard] = &miTarget{ + si: targetsi, + master: targetMaster, + sources: make(map[uint32]*binlogdatapb.BinlogSource), + } + qr := sqltypes.Proto3ToResult(p3qr) + for _, row := range qr.Rows { + id, err := sqltypes.ToInt64(row[0]) + if err != nil { + return nil, err + } + var bls binlogdatapb.BinlogSource + if err := proto.UnmarshalText(row[1].ToString(), &bls); err != nil { + return nil, err + } + targets[targetShard].sources[uint32(id)] = &bls + } + } + if len(targets) == 0 { + return nil, fmt.Errorf("no streams found in keyspace %s for: %s", targetKeyspace, workflow) + } + return targets, nil +} + +// hashStreams produces a reproducible hash based on the input parameters. +func hashStreams(targetKeyspace string, targets map[string]*miTarget) int64 { + var expanded []string + for shard, target := range targets { + for uid := range target.sources { + expanded = append(expanded, fmt.Sprintf("%s:%d", shard, uid)) + } + } + sort.Strings(expanded) + hasher := fnv.New64() + hasher.Write([]byte(targetKeyspace)) + for _, str := range expanded { + hasher.Write([]byte(str)) + } + // Convert to int64 after dropping the highest bit. + return int64(hasher.Sum64() & math.MaxInt64) +} + +func (mi *migrater) validate(ctx context.Context, isWrite bool) error { + if mi.migrationType == binlogdatapb.MigrationType_TABLES { + // All shards must be present. + if err := mi.compareShards(ctx, mi.sourceKeyspace, mi.sourceShards()); err != nil { + return err + } + if err := mi.compareShards(ctx, mi.targetKeyspace, mi.targetShards()); err != nil { + return err + } + // Wildcard table names not allowed. + for _, table := range mi.tables { + if strings.HasPrefix(table, "/") { + return fmt.Errorf("cannot migrate streams with wild card table names: %v", table) + } + } + if isWrite { + return mi.validateTableForWrite(ctx) + } + } else { // binlogdatapb.MigrationType_SHARDS + // Source and target shards must not match. + for sourceShard := range mi.sources { + if _, ok := mi.targets[sourceShard]; ok { + return fmt.Errorf("target shard matches a source shard: %v", sourceShard) + } + } + if isWrite { + return mi.validateShardForWrite(ctx) + } + } + return nil +} + +func (mi *migrater) validateTableForWrite(ctx context.Context) error { + rules, err := mi.wr.getRoutingRules(ctx) + if err != nil { + return err + } + for _, table := range mi.tables { + for _, tabletType := range []topodatapb.TabletType{topodatapb.TabletType_REPLICA, topodatapb.TabletType_RDONLY} { + tt := strings.ToLower(tabletType.String()) + if rules[table+"@"+tt] == nil || rules[mi.targetKeyspace+"."+table+"@"+tt] == nil { + return fmt.Errorf("missing tablet type specific routing, read-only traffic must be migrated before migrating writes: %v", table) + } + } + } + return nil +} + +func (mi *migrater) validateShardForWrite(ctx context.Context) error { + srvKeyspaces, err := mi.wr.ts.GetSrvKeyspaceAllCells(ctx, mi.sourceKeyspace) + if err != nil { + return err + } + + // Checking one shard is enough. + var si *topo.ShardInfo + for _, source := range mi.sources { + si = source.si + break + } + + for _, srvKeyspace := range srvKeyspaces { + var shardServedTypes []string + for _, partition := range srvKeyspace.GetPartitions() { + if partition.GetServedType() == topodatapb.TabletType_MASTER { + continue + } + for _, shardReference := range partition.GetShardReferences() { + if key.KeyRangeEqual(shardReference.GetKeyRange(), si.GetKeyRange()) { + shardServedTypes = append(shardServedTypes, partition.GetServedType().String()) + } + } + } + if len(shardServedTypes) > 0 { + return fmt.Errorf("cannot migrate MASTER away from %v/%v until everything else is migrated. Make sure that the following types are migrated first: %v", si.Keyspace(), si.ShardName(), strings.Join(shardServedTypes, ", ")) + } + } + return nil +} + +func (mi *migrater) compareShards(ctx context.Context, keyspace string, sis []*topo.ShardInfo) error { + var shards []string + for _, si := range sis { + shards = append(shards, si.ShardName()) + } + topoShards, err := mi.wr.ts.GetShardNames(ctx, keyspace) + if err != nil { + return err + } + sort.Strings(topoShards) + sort.Strings(shards) + if !reflect.DeepEqual(topoShards, shards) { + return fmt.Errorf("mismatched shards for keyspace %s: topo: %v vs migrate command: %v", keyspace, topoShards, shards) + } + return nil +} + +func (mi *migrater) migrateTableReads(ctx context.Context, cells []string, servedType topodatapb.TabletType, direction MigrateDirection) error { + rules, err := mi.wr.getRoutingRules(ctx) + if err != nil { + return err + } + // We assume that the following rules were setup when the targets were created: + // table -> sourceKeyspace.table + // targetKeyspace.table -> sourceKeyspace.table + // For forward migration, we add tablet type specific rules to redirect traffic to the target. + // For backward, we delete them. + tt := strings.ToLower(servedType.String()) + for _, table := range mi.tables { + if direction == DirectionForward { + rules[table+"@"+tt] = []string{mi.targetKeyspace + "." + table} + rules[mi.targetKeyspace+"."+table+"@"+tt] = []string{mi.targetKeyspace + "." + table} + rules[mi.sourceKeyspace+"."+table+"@"+tt] = []string{mi.targetKeyspace + "." + table} + } else { + delete(rules, table+"@"+tt) + delete(rules, mi.targetKeyspace+"."+table+"@"+tt) + delete(rules, mi.sourceKeyspace+"."+table+"@"+tt) + } + } + if err := mi.wr.saveRoutingRules(ctx, rules); err != nil { + return err + } + return mi.wr.ts.RebuildSrvVSchema(ctx, cells) +} + +func (mi *migrater) migrateShardReads(ctx context.Context, cells []string, servedType topodatapb.TabletType, direction MigrateDirection) error { + var fromShards, toShards []*topo.ShardInfo + if direction == DirectionForward { + fromShards, toShards = mi.sourceShards(), mi.targetShards() + } else { + fromShards, toShards = mi.targetShards(), mi.sourceShards() + } + + if err := mi.wr.updateShardRecords(ctx, mi.sourceKeyspace, fromShards, cells, servedType, true /* isFrom */, false /* clearSourceShards */); err != nil { + return err + } + if err := mi.wr.updateShardRecords(ctx, mi.sourceKeyspace, toShards, cells, servedType, false, false); err != nil { + return err + } + return mi.wr.ts.MigrateServedType(ctx, mi.sourceKeyspace, toShards, fromShards, servedType, cells) +} + +func (mi *migrater) checkJournals(ctx context.Context) (journalsExist bool, err error) { + var exist sync2.AtomicBool + err = mi.forAllSources(func(source *miSource) error { + statement := fmt.Sprintf("select 1 from _vt.resharding_journal where id=%v", mi.id) + p3qr, err := mi.wr.tmc.VReplicationExec(ctx, source.master.Tablet, statement) + if err != nil { + return err + } + if len(p3qr.Rows) >= 1 { + exist.Set(true) + source.journaled = true + } + return nil + }) + return exist.Get(), err +} + +func (mi *migrater) stopSourceWrites(ctx context.Context) error { + var err error + if mi.migrationType == binlogdatapb.MigrationType_TABLES { + err = mi.changeTableSourceWrites(ctx, disallowWrites) + } else { + err = mi.changeShardsAccess(ctx, mi.sourceKeyspace, mi.sourceShards(), disallowWrites) + } + if err != nil { + return err + } + return mi.forAllSources(func(source *miSource) error { + var err error + source.position, err = mi.wr.tmc.MasterPosition(ctx, source.master.Tablet) + mi.wr.Logger().Infof("Position for source %v:%v: %v", mi.sourceKeyspace, source.si.ShardName(), source.position) + return err + }) +} + +func (mi *migrater) changeTableSourceWrites(ctx context.Context, access accessType) error { + return mi.forAllSources(func(source *miSource) error { + if _, err := mi.wr.ts.UpdateShardFields(ctx, mi.sourceKeyspace, source.si.ShardName(), func(si *topo.ShardInfo) error { + return si.UpdateSourceBlacklistedTables(ctx, topodatapb.TabletType_MASTER, nil, access == allowWrites /* remove */, mi.tables) + }); err != nil { + return err + } + return mi.wr.tmc.RefreshState(ctx, source.master.Tablet) + }) +} + +func (mi *migrater) waitForCatchup(ctx context.Context, filteredReplicationWaitTime time.Duration) error { + ctx, cancel := context.WithTimeout(ctx, filteredReplicationWaitTime) + defer cancel() + + var mu sync.Mutex + return mi.forAllUids(func(target *miTarget, uid uint32) error { + bls := target.sources[uid] + source := mi.sources[bls.Shard] + if err := mi.wr.tmc.VReplicationWaitForPos(ctx, target.master.Tablet, int(uid), source.position); err != nil { + return err + } + if _, err := mi.wr.tmc.VReplicationExec(ctx, target.master.Tablet, binlogplayer.StopVReplication(uid, "stopped for cutover")); err != nil { + return err + } + + // Need lock because a target can have multiple uids. + mu.Lock() + defer mu.Unlock() + if target.position != "" { + return nil + } + var err error + target.position, err = mi.wr.tmc.MasterPosition(ctx, target.master.Tablet) + mi.wr.Logger().Infof("Position for uid %v: %v", uid, target.position) + return err + }) +} + +func (mi *migrater) cancelMigration(ctx context.Context) { + var err error + if mi.migrationType == binlogdatapb.MigrationType_TABLES { + err = mi.changeTableSourceWrites(ctx, allowWrites) + } else { + err = mi.changeShardsAccess(ctx, mi.sourceKeyspace, mi.sourceShards(), allowWrites) + } + if err != nil { + mi.wr.Logger().Errorf("Cancel migration failed:", err) + } + + err = mi.forAllUids(func(target *miTarget, uid uint32) error { + if _, err := mi.wr.tmc.VReplicationExec(ctx, target.master.Tablet, binlogplayer.StartVReplication(uid)); err != nil { + return err + } + return nil + }) + if err != nil { + mi.wr.Logger().Errorf("Cancel migration failed: could not restart vreplication: %v", err) + } +} + +func (mi *migrater) gatherPositions(ctx context.Context) error { + err := mi.forAllSources(func(source *miSource) error { + var err error + source.position, err = mi.wr.tmc.MasterPosition(ctx, source.master.Tablet) + mi.wr.Logger().Infof("Position for source %v:%v: %v", mi.sourceKeyspace, source.si.ShardName(), source.position) + return err + }) + if err != nil { + return err + } + return mi.forAllTargets(func(target *miTarget) error { + var err error + target.position, err = mi.wr.tmc.MasterPosition(ctx, target.master.Tablet) + mi.wr.Logger().Infof("Position for target %v:%v: %v", mi.targetKeyspace, target.si.ShardName(), target.position) + return err + }) +} + +func (mi *migrater) createJournals(ctx context.Context) error { + var participants []*binlogdatapb.KeyspaceShard + for sourceShard := range mi.sources { + participants = append(participants, &binlogdatapb.KeyspaceShard{ + Keyspace: mi.sourceKeyspace, + Shard: sourceShard, + }) + } + return mi.forAllSources(func(source *miSource) error { + if source.journaled { + return nil + } + journal := &binlogdatapb.Journal{ + Id: mi.id, + MigrationType: mi.migrationType, + Tables: mi.tables, + LocalPosition: source.position, + Participants: participants, + } + for targetShard, target := range mi.targets { + found := false + for _, tsource := range target.sources { + if source.si.ShardName() == tsource.Shard { + found = true + break + } + } + if !found { + continue + } + journal.ShardGtids = append(journal.ShardGtids, &binlogdatapb.ShardGtid{ + Keyspace: mi.targetKeyspace, + Shard: targetShard, + Gtid: target.position, + }) + } + mi.wr.Logger().Infof("Creating journal: %v", journal) + statement := fmt.Sprintf("insert into _vt.resharding_journal "+ + "(id, db_name, val) "+ + "values (%v, %v, %v)", + mi.id, encodeString(source.master.DbName()), encodeString(journal.String())) + if _, err := mi.wr.tmc.VReplicationExec(ctx, source.master.Tablet, statement); err != nil { + return err + } + return nil + }) +} + +func (mi *migrater) createReverseReplication(ctx context.Context) error { + vs, err := mi.wr.ts.GetVSchema(ctx, mi.sourceKeyspace) + if err != nil { + return err + } + ksschema, err := vindexes.BuildKeyspaceSchema(vs, mi.sourceKeyspace) + if err != nil { + return err + } + return mi.forAllUids(func(target *miTarget, uid uint32) error { + bls := target.sources[uid] + source := mi.sources[bls.Shard] + reverseBls := &binlogdatapb.BinlogSource{ + Keyspace: mi.targetKeyspace, + Shard: target.si.ShardName(), + TabletType: bls.TabletType, + Filter: &binlogdatapb.Filter{}, + } + for _, rule := range bls.Filter.Rules { + var filter string + if strings.HasPrefix(rule.Match, "/") { + if ksschema.Keyspace.Sharded { + filter = bls.Shard + } + } else { + var inKeyrange string + if ksschema.Keyspace.Sharded { + vtable, ok := ksschema.Tables[rule.Match] + if !ok { + return fmt.Errorf("table %s not found in vschema", rule.Match) + } + // TODO(sougou): handle degenerate cases like sequence, etc. + // We currently assume the primary vindex is the best way to filter, which may not be true. + inKeyrange = fmt.Sprintf(" where in_keyrange(%s, '%s', '%s')", sqlparser.String(vtable.ColumnVindexes[0].Columns[0]), vs.Vindexes[vtable.ColumnVindexes[0].Name].Type, bls.Shard) + } + filter = fmt.Sprintf("select * from %s%s", rule.Match, inKeyrange) + } + reverseBls.Filter.Rules = append(reverseBls.Filter.Rules, &binlogdatapb.Rule{ + Match: rule.Match, + Filter: filter, + }) + } + + _, err := mi.wr.VReplicationExec(ctx, source.master.Alias, binlogplayer.CreateVReplicationState("ReversedResharding", reverseBls, target.position, binlogplayer.BlpStopped, source.master.DbName())) + return err + }) +} + +func (mi *migrater) allowTargetWrites(ctx context.Context) error { + if mi.migrationType == binlogdatapb.MigrationType_TABLES { + return mi.allowTableTargetWrites(ctx) + } + return mi.changeShardsAccess(ctx, mi.targetKeyspace, mi.targetShards(), allowWrites) +} + +func (mi *migrater) allowTableTargetWrites(ctx context.Context) error { + return mi.forAllTargets(func(target *miTarget) error { + if _, err := mi.wr.ts.UpdateShardFields(ctx, mi.targetKeyspace, target.si.ShardName(), func(si *topo.ShardInfo) error { + return si.UpdateSourceBlacklistedTables(ctx, topodatapb.TabletType_MASTER, nil, true, mi.tables) + }); err != nil { + return err + } + return mi.wr.tmc.RefreshState(ctx, target.master.Tablet) + }) +} + +func (mi *migrater) changeRouting(ctx context.Context) error { + if mi.migrationType == binlogdatapb.MigrationType_TABLES { + return mi.changeTableRouting(ctx) + } + return mi.changeShardRouting(ctx) +} + +func (mi *migrater) changeTableRouting(ctx context.Context) error { + rules, err := mi.wr.getRoutingRules(ctx) + if err != nil { + return err + } + // We assume that the following rules were setup when the targets were created: + // table -> sourceKeyspace.table + // targetKeyspace.table -> sourceKeyspace.table + // Additionally, MigrateReads would have added rules like this: + // table@replica -> targetKeyspace.table + // targetKeyspace.table@replica -> targetKeyspace.table + // After this step, only the following rules will be left: + // table -> targetKeyspace.table + // sourceKeyspace.table -> targetKeyspace.table + for _, table := range mi.tables { + for _, tabletType := range []topodatapb.TabletType{topodatapb.TabletType_REPLICA, topodatapb.TabletType_RDONLY} { + tt := strings.ToLower(tabletType.String()) + delete(rules, table+"@"+tt) + delete(rules, mi.targetKeyspace+"."+table+"@"+tt) + delete(rules, mi.sourceKeyspace+"."+table+"@"+tt) + mi.wr.Logger().Infof("Delete routing: %v %v %v", table+"@"+tt, mi.targetKeyspace+"."+table+"@"+tt, mi.sourceKeyspace+"."+table+"@"+tt) + } + delete(rules, mi.targetKeyspace+"."+table) + mi.wr.Logger().Infof("Delete routing: %v", mi.targetKeyspace+"."+table) + rules[table] = []string{mi.targetKeyspace + "." + table} + rules[mi.sourceKeyspace+"."+table] = []string{mi.targetKeyspace + "." + table} + mi.wr.Logger().Infof("Add routing: %v %v", table, mi.sourceKeyspace+"."+table) + } + if err := mi.wr.saveRoutingRules(ctx, rules); err != nil { + return err + } + return mi.wr.ts.RebuildSrvVSchema(ctx, nil) +} + +func (mi *migrater) changeShardRouting(ctx context.Context) error { + err := mi.forAllSources(func(source *miSource) error { + _, err := mi.wr.ts.UpdateShardFields(ctx, mi.sourceKeyspace, source.si.ShardName(), func(si *topo.ShardInfo) error { + si.IsMasterServing = false + return nil + }) + return err + }) + if err != nil { + return err + } + err = mi.forAllTargets(func(target *miTarget) error { + _, err := mi.wr.ts.UpdateShardFields(ctx, mi.targetKeyspace, target.si.ShardName(), func(si *topo.ShardInfo) error { + si.IsMasterServing = true + return nil + }) + return err + }) + if err != nil { + return err + } + return mi.wr.ts.MigrateServedType(ctx, mi.targetKeyspace, mi.targetShards(), mi.sourceShards(), topodatapb.TabletType_MASTER, nil) +} + +func (mi *migrater) deleteTargetVReplication(ctx context.Context) { + _ = mi.forAllUids(func(target *miTarget, uid uint32) error { + if _, err := mi.wr.tmc.VReplicationExec(ctx, target.master.Tablet, binlogplayer.DeleteVReplication(uid)); err != nil { + mi.wr.Logger().Errorf("Final cleanup: could not delete vreplication, please delete stopped streams manually: %v", err) + } + return nil + }) +} + +func (mi *migrater) changeShardsAccess(ctx context.Context, keyspace string, shards []*topo.ShardInfo, access accessType) error { + if err := mi.wr.ts.UpdateDisableQueryService(ctx, mi.sourceKeyspace, shards, topodatapb.TabletType_MASTER, nil, access == disallowWrites /* disable */); err != nil { + return err + } + return mi.wr.refreshMasters(ctx, shards) +} + +func (mi *migrater) forAllSources(f func(*miSource) error) error { + var wg sync.WaitGroup + allErrors := &concurrency.AllErrorRecorder{} + for _, source := range mi.sources { + wg.Add(1) + go func(source *miSource) { + defer wg.Done() + + if err := f(source); err != nil { + allErrors.RecordError(err) + } + }(source) + } + wg.Wait() + return allErrors.AggrError(vterrors.Aggregate) +} + +func (mi *migrater) forAllTargets(f func(*miTarget) error) error { + var wg sync.WaitGroup + allErrors := &concurrency.AllErrorRecorder{} + for _, target := range mi.targets { + wg.Add(1) + go func(target *miTarget) { + defer wg.Done() + + if err := f(target); err != nil { + allErrors.RecordError(err) + } + }(target) + } + wg.Wait() + return allErrors.AggrError(vterrors.Aggregate) +} + +func (mi *migrater) forAllUids(f func(target *miTarget, uid uint32) error) error { + var wg sync.WaitGroup + allErrors := &concurrency.AllErrorRecorder{} + for _, target := range mi.targets { + for uid := range target.sources { + wg.Add(1) + go func(target *miTarget, uid uint32) { + defer wg.Done() + + if err := f(target, uid); err != nil { + allErrors.RecordError(err) + } + }(target, uid) + } + } + wg.Wait() + return allErrors.AggrError(vterrors.Aggregate) +} + +func (mi *migrater) sourceShards() []*topo.ShardInfo { + shards := make([]*topo.ShardInfo, 0, len(mi.sources)) + for _, source := range mi.sources { + shards = append(shards, source.si) + } + return shards +} + +func (mi *migrater) targetShards() []*topo.ShardInfo { + shards := make([]*topo.ShardInfo, 0, len(mi.targets)) + for _, target := range mi.targets { + shards = append(shards, target.si) + } + return shards +} + +func (wr *Wrangler) getRoutingRules(ctx context.Context) (map[string][]string, error) { + rrs, err := wr.ts.GetRoutingRules(ctx) + if err != nil { + return nil, err + } + rules := make(map[string][]string, len(rrs.Rules)) + for _, rr := range rrs.Rules { + rules[rr.FromTable] = rr.ToTables + } + return rules, nil +} + +func (wr *Wrangler) saveRoutingRules(ctx context.Context, rules map[string][]string) error { + rrs := &vschemapb.RoutingRules{Rules: make([]*vschemapb.RoutingRule, 0, len(rules))} + for from, to := range rules { + rrs.Rules = append(rrs.Rules, &vschemapb.RoutingRule{ + FromTable: from, + ToTables: to, + }) + } + return wr.ts.SaveRoutingRules(ctx, rrs) +} diff --git a/go/vt/wrangler/migrater_env_test.go b/go/vt/wrangler/migrater_env_test.go new file mode 100644 index 00000000000..5384591ba48 --- /dev/null +++ b/go/vt/wrangler/migrater_env_test.go @@ -0,0 +1,397 @@ +/* +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 wrangler + +import ( + "fmt" + "testing" + + "golang.org/x/net/context" + "vitess.io/vitess/go/mysql" + "vitess.io/vitess/go/sqltypes" + "vitess.io/vitess/go/vt/binlog/binlogplayer" + "vitess.io/vitess/go/vt/logutil" + binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" + topodatapb "vitess.io/vitess/go/vt/proto/topodata" + vschemapb "vitess.io/vitess/go/vt/proto/vschema" + "vitess.io/vitess/go/vt/topo" + "vitess.io/vitess/go/vt/topo/memorytopo" + "vitess.io/vitess/go/vt/topotools" + "vitess.io/vitess/go/vt/vttablet/tabletmanager/vreplication" + "vitess.io/vitess/go/vt/vttablet/tmclient" +) + +const vreplQueryks = "select id, source from _vt.vreplication where workflow = 'test' and db_name = 'vt_ks'" +const vreplQueryks2 = "select id, source from _vt.vreplication where workflow = 'test' and db_name = 'vt_ks2'" + +type testMigraterEnv struct { + ts *topo.Server + wr *Wrangler + source1Master, source1Replica, source1Rdonly *fakeTablet + source2Master, source2Replica, source2Rdonly *fakeTablet + dest1Master, dest1Replica, dest1Rdonly *fakeTablet + dest2Master, dest2Replica, dest2Rdonly *fakeTablet + dbSource1Client, dbSource2Client *fakeDBClient + dbDest1Client, dbDest2Client *fakeDBClient + allDBClients []*fakeDBClient + targetKeyspace string + streams map[string][]uint32 +} + +func newTestTableMigrater(ctx context.Context, t *testing.T) *testMigraterEnv { + tme := &testMigraterEnv{} + tme.ts = memorytopo.NewServer("cell1", "cell2") + tme.wr = New(logutil.NewConsoleLogger(), tme.ts, tmclient.NewTabletManagerClient()) + + // Create cluster: ks1:-40,40- and ks2:-80,80-. + tme.source1Master = newFakeTablet(t, tme.wr, "cell1", 10, topodatapb.TabletType_MASTER, nil, TabletKeyspaceShard(t, "ks1", "-40")) + tme.source1Replica = newFakeTablet(t, tme.wr, "cell1", 11, topodatapb.TabletType_REPLICA, nil, TabletKeyspaceShard(t, "ks1", "-40")) + tme.source1Rdonly = newFakeTablet(t, tme.wr, "cell1", 12, topodatapb.TabletType_RDONLY, nil, TabletKeyspaceShard(t, "ks1", "-40")) + + tme.source2Master = newFakeTablet(t, tme.wr, "cell1", 20, topodatapb.TabletType_MASTER, nil, TabletKeyspaceShard(t, "ks1", "40-")) + tme.source2Replica = newFakeTablet(t, tme.wr, "cell1", 21, topodatapb.TabletType_REPLICA, nil, TabletKeyspaceShard(t, "ks1", "40-")) + tme.source2Rdonly = newFakeTablet(t, tme.wr, "cell1", 22, topodatapb.TabletType_RDONLY, nil, TabletKeyspaceShard(t, "ks1", "40-")) + + tme.dest1Master = newFakeTablet(t, tme.wr, "cell1", 30, topodatapb.TabletType_MASTER, nil, TabletKeyspaceShard(t, "ks2", "-80")) + tme.dest1Replica = newFakeTablet(t, tme.wr, "cell1", 31, topodatapb.TabletType_REPLICA, nil, TabletKeyspaceShard(t, "ks2", "-80")) + tme.dest1Rdonly = newFakeTablet(t, tme.wr, "cell1", 32, topodatapb.TabletType_RDONLY, nil, TabletKeyspaceShard(t, "ks2", "-80")) + + tme.dest2Master = newFakeTablet(t, tme.wr, "cell1", 40, topodatapb.TabletType_MASTER, nil, TabletKeyspaceShard(t, "ks2", "80-")) + tme.dest2Replica = newFakeTablet(t, tme.wr, "cell1", 41, topodatapb.TabletType_REPLICA, nil, TabletKeyspaceShard(t, "ks2", "80-")) + tme.dest2Rdonly = newFakeTablet(t, tme.wr, "cell1", 42, topodatapb.TabletType_RDONLY, nil, TabletKeyspaceShard(t, "ks2", "80-")) + + vs := &vschemapb.Keyspace{ + Sharded: true, + Vindexes: map[string]*vschemapb.Vindex{ + "hash": { + Type: "hash", + }, + }, + Tables: map[string]*vschemapb.Table{ + "t1": { + ColumnVindexes: []*vschemapb.ColumnVindex{{ + Column: "c1", + Name: "hash", + }}, + }, + "t2": { + ColumnVindexes: []*vschemapb.ColumnVindex{{ + Column: "c1", + Name: "hash", + }}, + }, + }, + } + if err := tme.ts.SaveVSchema(ctx, "ks1", vs); err != nil { + t.Fatal(err) + } + if err := tme.ts.SaveVSchema(ctx, "ks2", vs); err != nil { + t.Fatal(err) + } + if err := tme.ts.RebuildSrvVSchema(ctx, nil); err != nil { + t.Fatal(err) + } + err := topotools.RebuildKeyspace(ctx, logutil.NewConsoleLogger(), tme.ts, "ks1", []string{"cell1"}) + if err != nil { + t.Fatal(err) + } + err = topotools.RebuildKeyspace(ctx, logutil.NewConsoleLogger(), tme.ts, "ks2", []string{"cell1"}) + if err != nil { + t.Fatal(err) + } + + tme.startTablets(t) + tme.createDBClients(ctx, t) + tme.setMasterPositions() + + // Emulate the following replication streams (many-to-many table migration): + // -40 -> -80 + // 40- -> -80 + // 40- -> 80- + // -40 will only have one target, and 80- will have only one source. + bls1 := &binlogdatapb.BinlogSource{ + Keyspace: "ks1", + Shard: "-40", + Filter: &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "t1", + Filter: "select * from t1 where in_keyrange('-80')", + }, { + Match: "t2", + Filter: "select * from t2 where in_keyrange('-80')", + }}, + }, + } + bls2 := &binlogdatapb.BinlogSource{ + Keyspace: "ks1", + Shard: "40-", + Filter: &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "t1", + Filter: "select * from t1 where in_keyrange('-80')", + }, { + Match: "t2", + Filter: "select * from t2 where in_keyrange('-80')", + }}, + }, + } + tme.dbDest1Client.addQuery(vreplQueryks2, sqltypes.MakeTestResult(sqltypes.MakeTestFields( + "id|source", + "int64|varchar"), + fmt.Sprintf("1|%v", bls1), + fmt.Sprintf("2|%v", bls2), + ), nil) + bls3 := &binlogdatapb.BinlogSource{ + Keyspace: "ks1", + Shard: "40-", + Filter: &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "t1", + Filter: "select * from t1 where in_keyrange('80-')", + }, { + Match: "t2", + Filter: "select * from t2 where in_keyrange('80-')", + }}, + }, + } + tme.dbDest2Client.addQuery(vreplQueryks2, sqltypes.MakeTestResult(sqltypes.MakeTestFields( + "id|source", + "int64|varchar"), + fmt.Sprintf("1|%v", bls3), + ), nil) + + if err := tme.wr.saveRoutingRules(ctx, map[string][]string{ + "t1": {"ks1.t1"}, + "ks2.t1": {"ks1.t1"}, + "t2": {"ks1.t2"}, + "ks2.t2": {"ks1.t2"}, + }); err != nil { + t.Fatal(err) + } + if err := tme.ts.RebuildSrvVSchema(ctx, nil); err != nil { + t.Fatal(err) + } + + tme.targetKeyspace = "ks2" + tme.streams = map[string][]uint32{ + "-80": {1, 2}, + "80-": {1}, + } + return tme +} + +func newTestShardMigrater(ctx context.Context, t *testing.T) *testMigraterEnv { + tme := &testMigraterEnv{} + tme.ts = memorytopo.NewServer("cell1", "cell2") + tme.wr = New(logutil.NewConsoleLogger(), tme.ts, tmclient.NewTabletManagerClient()) + + // Create cluster with "ks" as keyspace. -40,40- as serving, -80,80- as non-serving. + tme.source1Master = newFakeTablet(t, tme.wr, "cell1", 10, topodatapb.TabletType_MASTER, nil, TabletKeyspaceShard(t, "ks", "-40")) + tme.source1Replica = newFakeTablet(t, tme.wr, "cell1", 11, topodatapb.TabletType_REPLICA, nil, TabletKeyspaceShard(t, "ks", "-40")) + tme.source1Rdonly = newFakeTablet(t, tme.wr, "cell1", 12, topodatapb.TabletType_RDONLY, nil, TabletKeyspaceShard(t, "ks", "-40")) + + tme.source2Master = newFakeTablet(t, tme.wr, "cell1", 20, topodatapb.TabletType_MASTER, nil, TabletKeyspaceShard(t, "ks", "40-")) + tme.source2Replica = newFakeTablet(t, tme.wr, "cell1", 21, topodatapb.TabletType_REPLICA, nil, TabletKeyspaceShard(t, "ks", "40-")) + tme.source2Rdonly = newFakeTablet(t, tme.wr, "cell1", 22, topodatapb.TabletType_RDONLY, nil, TabletKeyspaceShard(t, "ks", "40-")) + + tme.dest1Master = newFakeTablet(t, tme.wr, "cell1", 30, topodatapb.TabletType_MASTER, nil, TabletKeyspaceShard(t, "ks", "-80")) + tme.dest1Replica = newFakeTablet(t, tme.wr, "cell1", 31, topodatapb.TabletType_REPLICA, nil, TabletKeyspaceShard(t, "ks", "-80")) + tme.dest1Rdonly = newFakeTablet(t, tme.wr, "cell1", 32, topodatapb.TabletType_RDONLY, nil, TabletKeyspaceShard(t, "ks", "-80")) + + tme.dest2Master = newFakeTablet(t, tme.wr, "cell1", 40, topodatapb.TabletType_MASTER, nil, TabletKeyspaceShard(t, "ks", "80-")) + tme.dest2Replica = newFakeTablet(t, tme.wr, "cell1", 41, topodatapb.TabletType_REPLICA, nil, TabletKeyspaceShard(t, "ks", "80-")) + tme.dest2Rdonly = newFakeTablet(t, tme.wr, "cell1", 42, topodatapb.TabletType_RDONLY, nil, TabletKeyspaceShard(t, "ks", "80-")) + + vs := &vschemapb.Keyspace{Sharded: true} + if err := tme.ts.SaveVSchema(ctx, "ks", vs); err != nil { + t.Fatal(err) + } + if err := tme.ts.RebuildSrvVSchema(ctx, nil); err != nil { + t.Fatal(err) + } + err := topotools.RebuildKeyspace(ctx, logutil.NewConsoleLogger(), tme.ts, "ks", nil) + if err != nil { + t.Fatal(err) + } + + tme.startTablets(t) + tme.createDBClients(ctx, t) + tme.setMasterPositions() + + // Emulate the following replication streams (simultaneous split and merge): + // -40 -> -80 + // 40- -> -80 + // 40- -> 80- + // -40 will only have one target, and 80- will have only one source. + bls1 := &binlogdatapb.BinlogSource{ + Keyspace: "ks", + Shard: "-40", + Filter: &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "/.*", + Filter: "-80", + }}, + }, + } + bls2 := &binlogdatapb.BinlogSource{ + Keyspace: "ks", + Shard: "40-", + Filter: &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "/.*", + Filter: "-80", + }}, + }, + } + tme.dbDest1Client.addQuery(vreplQueryks, sqltypes.MakeTestResult(sqltypes.MakeTestFields( + "id|source", + "int64|varchar"), + fmt.Sprintf("1|%v", bls1), + fmt.Sprintf("2|%v", bls2), + ), nil) + bls3 := &binlogdatapb.BinlogSource{ + Keyspace: "ks", + Shard: "40-", + Filter: &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "/.*", + Filter: "80-", + }}, + }, + } + tme.dbDest2Client.addQuery(vreplQueryks, sqltypes.MakeTestResult(sqltypes.MakeTestFields( + "id|source", + "int64|varchar"), + fmt.Sprintf("1|%v", bls3), + ), nil) + + tme.targetKeyspace = "ks" + tme.streams = map[string][]uint32{ + "-80": {1, 2}, + "80-": {1}, + } + tme.dbSource1Client.addQuery(vreplQueryks, &sqltypes.Result{}, nil) + tme.dbSource2Client.addQuery(vreplQueryks, &sqltypes.Result{}, nil) + return tme +} + +func (tme *testMigraterEnv) startTablets(t *testing.T) { + tme.source1Replica.StartActionLoop(t, tme.wr) + tme.source1Rdonly.StartActionLoop(t, tme.wr) + tme.source1Master.StartActionLoop(t, tme.wr) + + tme.source2Replica.StartActionLoop(t, tme.wr) + tme.source2Rdonly.StartActionLoop(t, tme.wr) + tme.source2Master.StartActionLoop(t, tme.wr) + + tme.dest1Replica.StartActionLoop(t, tme.wr) + tme.dest1Rdonly.StartActionLoop(t, tme.wr) + tme.dest1Master.StartActionLoop(t, tme.wr) + + tme.dest2Replica.StartActionLoop(t, tme.wr) + tme.dest2Rdonly.StartActionLoop(t, tme.wr) + tme.dest2Master.StartActionLoop(t, tme.wr) +} + +func (tme *testMigraterEnv) stopTablets(t *testing.T) { + tme.source1Replica.StopActionLoop(t) + tme.source1Rdonly.StopActionLoop(t) + tme.source1Master.StopActionLoop(t) + + tme.source2Replica.StopActionLoop(t) + tme.source2Rdonly.StopActionLoop(t) + tme.source2Master.StopActionLoop(t) + + tme.dest1Replica.StopActionLoop(t) + tme.dest1Rdonly.StopActionLoop(t) + tme.dest1Master.StopActionLoop(t) + + tme.dest2Replica.StopActionLoop(t) + tme.dest2Rdonly.StopActionLoop(t) + tme.dest2Master.StopActionLoop(t) +} + +func (tme *testMigraterEnv) createDBClients(ctx context.Context, t *testing.T) { + tme.dbDest1Client = newFakeDBClient() + dbClientFactory1 := func() binlogplayer.DBClient { return tme.dbDest1Client } + tme.dest1Master.Agent.VREngine = vreplication.NewEngine(tme.ts, "", tme.dest1Master.FakeMysqlDaemon, dbClientFactory1, tme.dbDest1Client.DBName()) + if err := tme.dest1Master.Agent.VREngine.Open(ctx); err != nil { + t.Fatal(err) + } + + tme.dbDest2Client = newFakeDBClient() + dbClientFactory2 := func() binlogplayer.DBClient { return tme.dbDest2Client } + tme.dest2Master.Agent.VREngine = vreplication.NewEngine(tme.ts, "", tme.dest2Master.FakeMysqlDaemon, dbClientFactory2, tme.dbDest2Client.DBName()) + if err := tme.dest2Master.Agent.VREngine.Open(ctx); err != nil { + t.Fatal(err) + } + + tme.dbSource1Client = newFakeDBClient() + dbClientFactory3 := func() binlogplayer.DBClient { return tme.dbSource1Client } + tme.source1Master.Agent.VREngine = vreplication.NewEngine(tme.ts, "", tme.source1Master.FakeMysqlDaemon, dbClientFactory3, tme.dbSource1Client.DBName()) + if err := tme.source1Master.Agent.VREngine.Open(ctx); err != nil { + t.Fatal(err) + } + + tme.dbSource2Client = newFakeDBClient() + dbClientFactory4 := func() binlogplayer.DBClient { return tme.dbSource2Client } + tme.source2Master.Agent.VREngine = vreplication.NewEngine(tme.ts, "", tme.source2Master.FakeMysqlDaemon, dbClientFactory4, tme.dbSource2Client.DBName()) + if err := tme.source2Master.Agent.VREngine.Open(ctx); err != nil { + t.Fatal(err) + } + + tme.allDBClients = []*fakeDBClient{tme.dbDest1Client, tme.dbDest2Client, tme.dbSource1Client, tme.dbSource2Client} +} + +func (tme *testMigraterEnv) setMasterPositions() { + tme.source1Master.FakeMysqlDaemon.CurrentMasterPosition = mysql.Position{ + GTIDSet: mysql.MariadbGTIDSet{ + mysql.MariadbGTID{ + Domain: 5, + Server: 456, + Sequence: 892, + }, + }, + } + tme.source2Master.FakeMysqlDaemon.CurrentMasterPosition = mysql.Position{ + GTIDSet: mysql.MariadbGTIDSet{ + mysql.MariadbGTID{ + Domain: 5, + Server: 456, + Sequence: 892, + }, + }, + } + tme.dest1Master.FakeMysqlDaemon.CurrentMasterPosition = mysql.Position{ + GTIDSet: mysql.MariadbGTIDSet{ + mysql.MariadbGTID{ + Domain: 5, + Server: 456, + Sequence: 893, + }, + }, + } + tme.dest2Master.FakeMysqlDaemon.CurrentMasterPosition = mysql.Position{ + GTIDSet: mysql.MariadbGTIDSet{ + mysql.MariadbGTID{ + Domain: 5, + Server: 456, + Sequence: 893, + }, + }, + } +} diff --git a/go/vt/wrangler/migrater_test.go b/go/vt/wrangler/migrater_test.go new file mode 100644 index 00000000000..0e9f25995de --- /dev/null +++ b/go/vt/wrangler/migrater_test.go @@ -0,0 +1,1039 @@ +/* +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 wrangler + +import ( + "errors" + "fmt" + "reflect" + "strings" + "testing" + "time" + + "golang.org/x/net/context" + "vitess.io/vitess/go/sqltypes" + binlogdatapb "vitess.io/vitess/go/vt/proto/binlogdata" + topodatapb "vitess.io/vitess/go/vt/proto/topodata" + "vitess.io/vitess/go/vt/topo" +) + +// TestTableMigrate tests table mode migrations. +// This has to be kept in sync with TestShardMigrate. +func TestTableMigrate(t *testing.T) { + ctx := context.Background() + tme := newTestTableMigrater(ctx, t) + defer tme.stopTablets(t) + + checkCellRouting(t, tme.wr, "cell1", map[string][]string{ + "t1": {"ks1.t1"}, + "ks2.t1": {"ks1.t1"}, + "t2": {"ks1.t2"}, + "ks2.t2": {"ks1.t2"}, + }) + + //------------------------------------------------------------------------------------------------------------------- + // Single cell RDONLY migration. + err := tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_RDONLY, []string{"cell1"}, DirectionForward) + if err != nil { + t.Fatal(err) + } + checkCellRouting(t, tme.wr, "cell1", map[string][]string{ + "t1": {"ks1.t1"}, + "ks2.t1": {"ks1.t1"}, + "t2": {"ks1.t2"}, + "ks2.t2": {"ks1.t2"}, + "t1@rdonly": {"ks2.t1"}, + "ks2.t1@rdonly": {"ks2.t1"}, + "ks1.t1@rdonly": {"ks2.t1"}, + "t2@rdonly": {"ks2.t2"}, + "ks2.t2@rdonly": {"ks2.t2"}, + "ks1.t2@rdonly": {"ks2.t2"}, + }) + checkCellRouting(t, tme.wr, "cell2", map[string][]string{ + "t1": {"ks1.t1"}, + "ks2.t1": {"ks1.t1"}, + "t2": {"ks1.t2"}, + "ks2.t2": {"ks1.t2"}, + }) + verifyQueries(t, tme.allDBClients) + + //------------------------------------------------------------------------------------------------------------------- + // Other cell REPLICA migration. + // The global routing already contains redirections for rdonly. + // So, adding routes for replica and deploying to cell2 will also cause + // cell2 to migrate rdonly. This is a quirk that can be fixed later if necessary. + // TODO(sougou): check if it's worth fixing, or clearly document the quirk. + err = tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_REPLICA, []string{"cell2"}, DirectionForward) + if err != nil { + t.Fatal(err) + } + checkCellRouting(t, tme.wr, "cell1", map[string][]string{ + "t1": {"ks1.t1"}, + "ks2.t1": {"ks1.t1"}, + "t2": {"ks1.t2"}, + "ks2.t2": {"ks1.t2"}, + "t1@rdonly": {"ks2.t1"}, + "ks2.t1@rdonly": {"ks2.t1"}, + "ks1.t1@rdonly": {"ks2.t1"}, + "t2@rdonly": {"ks2.t2"}, + "ks2.t2@rdonly": {"ks2.t2"}, + "ks1.t2@rdonly": {"ks2.t2"}, + }) + checkCellRouting(t, tme.wr, "cell2", map[string][]string{ + "t1": {"ks1.t1"}, + "ks2.t1": {"ks1.t1"}, + "t2": {"ks1.t2"}, + "ks2.t2": {"ks1.t2"}, + "t1@rdonly": {"ks2.t1"}, + "ks2.t1@rdonly": {"ks2.t1"}, + "ks1.t1@rdonly": {"ks2.t1"}, + "t2@rdonly": {"ks2.t2"}, + "ks2.t2@rdonly": {"ks2.t2"}, + "ks1.t2@rdonly": {"ks2.t2"}, + "t1@replica": {"ks2.t1"}, + "ks2.t1@replica": {"ks2.t1"}, + "ks1.t1@replica": {"ks2.t1"}, + "t2@replica": {"ks2.t2"}, + "ks2.t2@replica": {"ks2.t2"}, + "ks1.t2@replica": {"ks2.t2"}, + }) + verifyQueries(t, tme.allDBClients) + + //------------------------------------------------------------------------------------------------------------------- + // Single cell backward REPLICA migration. + err = tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_REPLICA, []string{"cell2"}, DirectionBackward) + if err != nil { + t.Fatal(err) + } + checkRouting(t, tme.wr, map[string][]string{ + "t1": {"ks1.t1"}, + "ks2.t1": {"ks1.t1"}, + "t2": {"ks1.t2"}, + "ks2.t2": {"ks1.t2"}, + "t1@rdonly": {"ks2.t1"}, + "ks2.t1@rdonly": {"ks2.t1"}, + "ks1.t1@rdonly": {"ks2.t1"}, + "t2@rdonly": {"ks2.t2"}, + "ks2.t2@rdonly": {"ks2.t2"}, + "ks1.t2@rdonly": {"ks2.t2"}, + }) + verifyQueries(t, tme.allDBClients) + + //------------------------------------------------------------------------------------------------------------------- + // Migrate all REPLICA. + err = tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_REPLICA, nil, DirectionForward) + if err != nil { + t.Fatal(err) + } + checkRouting(t, tme.wr, map[string][]string{ + "t1": {"ks1.t1"}, + "ks2.t1": {"ks1.t1"}, + "t2": {"ks1.t2"}, + "ks2.t2": {"ks1.t2"}, + "t1@rdonly": {"ks2.t1"}, + "ks2.t1@rdonly": {"ks2.t1"}, + "ks1.t1@rdonly": {"ks2.t1"}, + "t2@rdonly": {"ks2.t2"}, + "ks2.t2@rdonly": {"ks2.t2"}, + "ks1.t2@rdonly": {"ks2.t2"}, + "t1@replica": {"ks2.t1"}, + "ks2.t1@replica": {"ks2.t1"}, + "ks1.t1@replica": {"ks2.t1"}, + "t2@replica": {"ks2.t2"}, + "ks2.t2@replica": {"ks2.t2"}, + "ks1.t2@replica": {"ks2.t2"}, + }) + verifyQueries(t, tme.allDBClients) + + //------------------------------------------------------------------------------------------------------------------- + // All cells RDONLY backward migration. + err = tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_RDONLY, nil, DirectionBackward) + if err != nil { + t.Fatal(err) + } + checkRouting(t, tme.wr, map[string][]string{ + "t1": {"ks1.t1"}, + "ks2.t1": {"ks1.t1"}, + "t2": {"ks1.t2"}, + "ks2.t2": {"ks1.t2"}, + "t1@replica": {"ks2.t1"}, + "ks2.t1@replica": {"ks2.t1"}, + "ks1.t1@replica": {"ks2.t1"}, + "t2@replica": {"ks2.t2"}, + "ks2.t2@replica": {"ks2.t2"}, + "ks1.t2@replica": {"ks2.t2"}, + }) + verifyQueries(t, tme.allDBClients) + + //------------------------------------------------------------------------------------------------------------------- + // All cells RDONLY backward migration. + err = tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_REPLICA, nil, DirectionBackward) + if err != nil { + t.Fatal(err) + } + checkRouting(t, tme.wr, map[string][]string{ + "t1": {"ks1.t1"}, + "ks2.t1": {"ks1.t1"}, + "t2": {"ks1.t2"}, + "ks2.t2": {"ks1.t2"}, + }) + verifyQueries(t, tme.allDBClients) + + //------------------------------------------------------------------------------------------------------------------- + // Can't migrate master with MigrateReads. + err = tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_MASTER, nil, DirectionForward) + want := "tablet type must be REPLICA or RDONLY: MASTER" + if err == nil || err.Error() != want { + t.Errorf("MigrateReads(master) err: %v, want %v", err, want) + } + verifyQueries(t, tme.allDBClients) + + //------------------------------------------------------------------------------------------------------------------- + // Can't migrate writes if REPLICA and RDONLY have not fully migrated yet. + _, err = tme.wr.MigrateWrites(ctx, tme.targetKeyspace, "test", 1*time.Second) + want = "missing tablet type specific routing, read-only traffic must be migrated before migrating writes" + if err == nil || !strings.Contains(err.Error(), want) { + t.Errorf("MigrateWrites err: %v, want %v", err, want) + } + verifyQueries(t, tme.allDBClients) + + //------------------------------------------------------------------------------------------------------------------- + // Test MigrateWrites cancelation on failure. + + // Migrate all the reads first. + err = tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_RDONLY, nil, DirectionForward) + if err != nil { + t.Fatal(err) + } + err = tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_REPLICA, nil, DirectionForward) + if err != nil { + t.Fatal(err) + } + checkRouting(t, tme.wr, map[string][]string{ + "t1": {"ks1.t1"}, + "ks2.t1": {"ks1.t1"}, + "t2": {"ks1.t2"}, + "ks2.t2": {"ks1.t2"}, + "t1@replica": {"ks2.t1"}, + "ks2.t1@replica": {"ks2.t1"}, + "ks1.t1@replica": {"ks2.t1"}, + "t2@replica": {"ks2.t2"}, + "ks2.t2@replica": {"ks2.t2"}, + "ks1.t2@replica": {"ks2.t2"}, + "t1@rdonly": {"ks2.t1"}, + "ks2.t1@rdonly": {"ks2.t1"}, + "ks1.t1@rdonly": {"ks2.t1"}, + "t2@rdonly": {"ks2.t2"}, + "ks2.t2@rdonly": {"ks2.t2"}, + "ks1.t2@rdonly": {"ks2.t2"}, + }) + + // Check for journals. + tme.dbSource1Client.addQuery("select 1 from _vt.resharding_journal where id = 9113431017721636330", &sqltypes.Result{}, nil) + tme.dbSource2Client.addQuery("select 1 from _vt.resharding_journal where id = 9113431017721636330", &sqltypes.Result{}, nil) + + // Wait for position: Reads current state, updates to Stopped, and re-reads. + state := sqltypes.MakeTestResult(sqltypes.MakeTestFields( + "pos|state|message", + "varchar|varchar|varchar"), + "MariaDB/5-456-892|Running|", + ) + tme.dbDest1Client.addQuery("select pos, state, message from _vt.vreplication where id=1", state, nil) + tme.dbDest2Client.addQuery("select pos, state, message from _vt.vreplication where id=1", state, nil) + tme.dbDest1Client.addQuery("select pos, state, message from _vt.vreplication where id=2", state, nil) + tme.dbDest1Client.addQuery("update _vt.vreplication set state = 'Stopped', message = 'stopped for cutover' where id = 1", &sqltypes.Result{}, nil) + tme.dbDest2Client.addQuery("update _vt.vreplication set state = 'Stopped', message = 'stopped for cutover' where id = 1", &sqltypes.Result{}, nil) + tme.dbDest1Client.addQuery("update _vt.vreplication set state = 'Stopped', message = 'stopped for cutover' where id = 2", &sqltypes.Result{}, nil) + stopped := sqltypes.MakeTestResult(sqltypes.MakeTestFields( + "id|state", + "int64|varchar"), + "1|Stopped", + ) + tme.dbDest1Client.addQuery("select * from _vt.vreplication where id = 1", stopped, nil) + tme.dbDest2Client.addQuery("select * from _vt.vreplication where id = 1", stopped, nil) + tme.dbDest1Client.addQuery("select * from _vt.vreplication where id = 2", stopped, nil) + + // Cancel Migration + cancel1 := "update _vt.vreplication set state = 'Running', stop_pos = null where id = 1" + cancel2 := "update _vt.vreplication set state = 'Running', stop_pos = null where id = 2" + tme.dbDest1Client.addQuery(cancel1, &sqltypes.Result{}, nil) + tme.dbDest2Client.addQuery(cancel1, &sqltypes.Result{}, nil) + tme.dbDest1Client.addQuery(cancel2, &sqltypes.Result{}, nil) + + _, err = tme.wr.MigrateWrites(ctx, tme.targetKeyspace, "test", 0*time.Second) + want = "DeadlineExceeded" + if err == nil || !strings.Contains(err.Error(), want) { + t.Errorf("MigrateWrites(0 timeout) err: %v, must contain %v", err, want) + } + checkRouting(t, tme.wr, map[string][]string{ + "t1": {"ks1.t1"}, + "ks2.t1": {"ks1.t1"}, + "t2": {"ks1.t2"}, + "ks2.t2": {"ks1.t2"}, + "t1@replica": {"ks2.t1"}, + "ks2.t1@replica": {"ks2.t1"}, + "ks1.t1@replica": {"ks2.t1"}, + "t2@replica": {"ks2.t2"}, + "ks2.t2@replica": {"ks2.t2"}, + "ks1.t2@replica": {"ks2.t2"}, + "t1@rdonly": {"ks2.t1"}, + "ks2.t1@rdonly": {"ks2.t1"}, + "ks1.t1@rdonly": {"ks2.t1"}, + "t2@rdonly": {"ks2.t2"}, + "ks2.t2@rdonly": {"ks2.t2"}, + "ks1.t2@rdonly": {"ks2.t2"}, + }) + checkBlacklist(t, tme.ts, "ks1:-40", nil) + checkBlacklist(t, tme.ts, "ks1:40-", nil) + checkBlacklist(t, tme.ts, "ks2:-80", nil) + checkBlacklist(t, tme.ts, "ks2:80-", nil) + + //------------------------------------------------------------------------------------------------------------------- + // Test successful MigrateWrites. + + // Create journals. + journal1 := "insert into _vt.resharding_journal.*9113431017721636330.*tables.*t1.*t2.*local_position.*MariaDB/5-456-892.*shard_gtids.*-80.*MariaDB/5-456-893.*participants.*40.*40" + tme.dbSource1Client.addQueryRE(journal1, &sqltypes.Result{}, nil) + journal2 := "insert into _vt.resharding_journal.*9113431017721636330.*tables.*t1.*t2.*local_position.*MariaDB/5-456-892.*shard_gtids.*80.*MariaDB/5-456-893.*80.*participants.*40.*40" + tme.dbSource2Client.addQueryRE(journal2, &sqltypes.Result{}, nil) + + // Create backward replicaions. + tme.dbSource1Client.addQueryRE("insert into _vt.vreplication.*ks2.*-80.*t1.*in_keyrange.*c1.*hash.*-40.*t2.*-40.*MariaDB/5-456-893.*Stopped", &sqltypes.Result{InsertID: 1}, nil) + tme.dbSource2Client.addQueryRE("insert into _vt.vreplication.*ks2.*-80.*t1.*in_keyrange.*c1.*hash.*40-.*t2.*40-.*MariaDB/5-456-893.*Stopped", &sqltypes.Result{InsertID: 1}, nil) + tme.dbSource2Client.addQueryRE("insert into _vt.vreplication.*ks2.*80-.*t1.*in_keyrange.*c1.*hash.*40-.*t2.*40-.*MariaDB/5-456-893.*Stopped", &sqltypes.Result{InsertID: 2}, nil) + tme.dbSource1Client.addQuery("select * from _vt.vreplication where id = 1", stopped, nil) + tme.dbSource2Client.addQuery("select * from _vt.vreplication where id = 1", stopped, nil) + tme.dbSource2Client.addQuery("select * from _vt.vreplication where id = 2", stopped, nil) + + // Delete the target replications. + tme.dbDest1Client.addQuery("delete from _vt.vreplication where id = 1", &sqltypes.Result{}, nil) + tme.dbDest2Client.addQuery("delete from _vt.vreplication where id = 1", &sqltypes.Result{}, nil) + tme.dbDest1Client.addQuery("delete from _vt.vreplication where id = 2", &sqltypes.Result{}, nil) + + journalID, err := tme.wr.MigrateWrites(ctx, tme.targetKeyspace, "test", 1*time.Second) + if err != nil { + t.Fatal(err) + } + if journalID != 9113431017721636330 { + t.Errorf("journal id: %d, want 9113431017721636330", journalID) + } + + checkRouting(t, tme.wr, map[string][]string{ + "t1": {"ks2.t1"}, + "ks1.t1": {"ks2.t1"}, + "t2": {"ks2.t2"}, + "ks1.t2": {"ks2.t2"}, + }) + checkBlacklist(t, tme.ts, "ks1:-40", []string{"t1", "t2"}) + checkBlacklist(t, tme.ts, "ks1:40-", []string{"t1", "t2"}) + checkBlacklist(t, tme.ts, "ks2:-80", nil) + checkBlacklist(t, tme.ts, "ks2:80-", nil) + + verifyQueries(t, tme.allDBClients) +} + +// TestShardMigrate tests table mode migrations. +// This has to be kept in sync with TestTableMigrate. +func TestShardMigrate(t *testing.T) { + ctx := context.Background() + tme := newTestShardMigrater(ctx, t) + defer tme.stopTablets(t) + + // Initial check + checkServedTypes(t, tme.ts, "ks:-40", 3) + checkServedTypes(t, tme.ts, "ks:40-", 3) + checkServedTypes(t, tme.ts, "ks:-80", 0) + checkServedTypes(t, tme.ts, "ks:80-", 0) + + //------------------------------------------------------------------------------------------------------------------- + // Single cell RDONLY migration. + err := tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_RDONLY, []string{"cell1"}, DirectionForward) + if err != nil { + t.Fatal(err) + } + checkCellServedTypes(t, tme.ts, "ks:-40", "cell1", 2) + checkCellServedTypes(t, tme.ts, "ks:40-", "cell1", 2) + checkCellServedTypes(t, tme.ts, "ks:-80", "cell1", 1) + checkCellServedTypes(t, tme.ts, "ks:80-", "cell1", 1) + checkCellServedTypes(t, tme.ts, "ks:-40", "cell2", 3) + checkCellServedTypes(t, tme.ts, "ks:40-", "cell2", 3) + checkCellServedTypes(t, tme.ts, "ks:-80", "cell2", 0) + checkCellServedTypes(t, tme.ts, "ks:80-", "cell2", 0) + verifyQueries(t, tme.allDBClients) + + //------------------------------------------------------------------------------------------------------------------- + // Other cell REPLICA migration. + err = tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_REPLICA, []string{"cell2"}, DirectionForward) + if err != nil { + t.Fatal(err) + } + checkCellServedTypes(t, tme.ts, "ks:-40", "cell1", 2) + checkCellServedTypes(t, tme.ts, "ks:40-", "cell1", 2) + checkCellServedTypes(t, tme.ts, "ks:-80", "cell1", 1) + checkCellServedTypes(t, tme.ts, "ks:80-", "cell1", 1) + checkCellServedTypes(t, tme.ts, "ks:-40", "cell2", 2) + checkCellServedTypes(t, tme.ts, "ks:40-", "cell2", 2) + checkCellServedTypes(t, tme.ts, "ks:-80", "cell2", 1) + checkCellServedTypes(t, tme.ts, "ks:80-", "cell2", 1) + verifyQueries(t, tme.allDBClients) + + //------------------------------------------------------------------------------------------------------------------- + // Single cell backward REPLICA migration. + err = tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_REPLICA, []string{"cell2"}, DirectionBackward) + if err != nil { + t.Fatal(err) + } + checkCellServedTypes(t, tme.ts, "ks:-40", "cell1", 2) + checkCellServedTypes(t, tme.ts, "ks:40-", "cell1", 2) + checkCellServedTypes(t, tme.ts, "ks:-80", "cell1", 1) + checkCellServedTypes(t, tme.ts, "ks:80-", "cell1", 1) + checkCellServedTypes(t, tme.ts, "ks:-40", "cell2", 3) + checkCellServedTypes(t, tme.ts, "ks:40-", "cell2", 3) + checkCellServedTypes(t, tme.ts, "ks:-80", "cell2", 0) + checkCellServedTypes(t, tme.ts, "ks:80-", "cell2", 0) + verifyQueries(t, tme.allDBClients) + + //------------------------------------------------------------------------------------------------------------------- + // Migrate all RDONLY. + // This is an extra step that does not exist in the tables test. + // The per-cell migration mechanism is different for tables. So, this + // extra step is needed to bring things in sync. + err = tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_RDONLY, nil, DirectionForward) + if err != nil { + t.Fatal(err) + } + checkServedTypes(t, tme.ts, "ks:-40", 2) + checkServedTypes(t, tme.ts, "ks:40-", 2) + checkServedTypes(t, tme.ts, "ks:-80", 1) + checkServedTypes(t, tme.ts, "ks:80-", 1) + verifyQueries(t, tme.allDBClients) + + //------------------------------------------------------------------------------------------------------------------- + // Migrate all REPLICA. + err = tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_REPLICA, nil, DirectionForward) + if err != nil { + t.Fatal(err) + } + checkServedTypes(t, tme.ts, "ks:-40", 1) + checkServedTypes(t, tme.ts, "ks:40-", 1) + checkServedTypes(t, tme.ts, "ks:-80", 2) + checkServedTypes(t, tme.ts, "ks:80-", 2) + verifyQueries(t, tme.allDBClients) + + //------------------------------------------------------------------------------------------------------------------- + // All cells RDONLY backward migration. + err = tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_RDONLY, nil, DirectionBackward) + if err != nil { + t.Fatal(err) + } + checkServedTypes(t, tme.ts, "ks:-40", 2) + checkServedTypes(t, tme.ts, "ks:40-", 2) + checkServedTypes(t, tme.ts, "ks:-80", 1) + checkServedTypes(t, tme.ts, "ks:80-", 1) + verifyQueries(t, tme.allDBClients) + + //------------------------------------------------------------------------------------------------------------------- + // Can't migrate master with MigrateReads. + err = tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_MASTER, nil, DirectionForward) + want := "tablet type must be REPLICA or RDONLY: MASTER" + if err == nil || err.Error() != want { + t.Errorf("MigrateReads(master) err: %v, want %v", err, want) + } + verifyQueries(t, tme.allDBClients) + + //------------------------------------------------------------------------------------------------------------------- + // Can't migrate writes if REPLICA and RDONLY have not fully migrated yet. + _, err = tme.wr.MigrateWrites(ctx, tme.targetKeyspace, "test", 1*time.Second) + want = "cannot migrate MASTER away" + if err == nil || !strings.Contains(err.Error(), want) { + t.Errorf("MigrateWrites err: %v, want %v", err, want) + } + verifyQueries(t, tme.allDBClients) + + //------------------------------------------------------------------------------------------------------------------- + // Test MigrateWrites cancelation on failure. + + // Migrate all the reads first. + err = tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_RDONLY, nil, DirectionForward) + if err != nil { + t.Fatal(err) + } + checkServedTypes(t, tme.ts, "ks:-40", 1) + checkServedTypes(t, tme.ts, "ks:40-", 1) + checkServedTypes(t, tme.ts, "ks:-80", 2) + checkServedTypes(t, tme.ts, "ks:80-", 2) + checkIsMasterServing(t, tme.ts, "ks:-40", true) + checkIsMasterServing(t, tme.ts, "ks:40-", true) + checkIsMasterServing(t, tme.ts, "ks:-80", false) + checkIsMasterServing(t, tme.ts, "ks:80-", false) + + // Check for journals. + tme.dbSource1Client.addQuery("select 1 from _vt.resharding_journal where id = 6432976123657117098", &sqltypes.Result{}, nil) + tme.dbSource2Client.addQuery("select 1 from _vt.resharding_journal where id = 6432976123657117098", &sqltypes.Result{}, nil) + + // Wait for position: Reads current state, updates to Stopped, and re-reads. + state := sqltypes.MakeTestResult(sqltypes.MakeTestFields( + "pos|state|message", + "varchar|varchar|varchar"), + "MariaDB/5-456-892|Running|", + ) + tme.dbDest1Client.addQuery("select pos, state, message from _vt.vreplication where id=1", state, nil) + tme.dbDest2Client.addQuery("select pos, state, message from _vt.vreplication where id=1", state, nil) + tme.dbDest1Client.addQuery("select pos, state, message from _vt.vreplication where id=2", state, nil) + tme.dbDest1Client.addQuery("update _vt.vreplication set state = 'Stopped', message = 'stopped for cutover' where id = 1", &sqltypes.Result{}, nil) + tme.dbDest2Client.addQuery("update _vt.vreplication set state = 'Stopped', message = 'stopped for cutover' where id = 1", &sqltypes.Result{}, nil) + tme.dbDest1Client.addQuery("update _vt.vreplication set state = 'Stopped', message = 'stopped for cutover' where id = 2", &sqltypes.Result{}, nil) + stopped := sqltypes.MakeTestResult(sqltypes.MakeTestFields( + "id|state", + "int64|varchar"), + "1|Stopped", + ) + tme.dbDest1Client.addQuery("select * from _vt.vreplication where id = 1", stopped, nil) + tme.dbDest2Client.addQuery("select * from _vt.vreplication where id = 1", stopped, nil) + tme.dbDest1Client.addQuery("select * from _vt.vreplication where id = 2", stopped, nil) + + // Cancel Migration + cancel1 := "update _vt.vreplication set state = 'Running', stop_pos = null where id = 1" + cancel2 := "update _vt.vreplication set state = 'Running', stop_pos = null where id = 2" + tme.dbDest1Client.addQuery(cancel1, &sqltypes.Result{}, nil) + tme.dbDest2Client.addQuery(cancel1, &sqltypes.Result{}, nil) + tme.dbDest1Client.addQuery(cancel2, &sqltypes.Result{}, nil) + + _, err = tme.wr.MigrateWrites(ctx, tme.targetKeyspace, "test", 0*time.Second) + want = "DeadlineExceeded" + if err == nil || !strings.Contains(err.Error(), want) { + t.Errorf("MigrateWrites(0 timeout) err: %v, must contain %v", err, want) + } + checkServedTypes(t, tme.ts, "ks:-40", 1) + checkServedTypes(t, tme.ts, "ks:40-", 1) + checkServedTypes(t, tme.ts, "ks:-80", 2) + checkServedTypes(t, tme.ts, "ks:80-", 2) + checkIsMasterServing(t, tme.ts, "ks:-40", true) + checkIsMasterServing(t, tme.ts, "ks:40-", true) + checkIsMasterServing(t, tme.ts, "ks:-80", false) + checkIsMasterServing(t, tme.ts, "ks:80-", false) + + //------------------------------------------------------------------------------------------------------------------- + // Test successful MigrateWrites. + + // Create journals. + journal1 := "insert into _vt.resharding_journal.*6432976123657117098.*migration_type:SHARDS.*local_position.*MariaDB/5-456-892.*shard_gtids.*-80.*MariaDB/5-456-893.*participants.*40.*40" + tme.dbSource1Client.addQueryRE(journal1, &sqltypes.Result{}, nil) + journal2 := "insert into _vt.resharding_journal.*6432976123657117098.*migration_type:SHARDS.*local_position.*MariaDB/5-456-892.*shard_gtids.*80.*MariaDB/5-456-893.*shard_gtids.*80.*MariaDB/5-456-893.*participants.*40.*40" + tme.dbSource2Client.addQueryRE(journal2, &sqltypes.Result{}, nil) + + // Create backward replicaions. + tme.dbSource1Client.addQueryRE("insert into _vt.vreplication.*-80.*-40.*MariaDB/5-456-893.*Stopped", &sqltypes.Result{InsertID: 1}, nil) + tme.dbSource2Client.addQueryRE("insert into _vt.vreplication.*-80.*40-.*MariaDB/5-456-893.*Stopped", &sqltypes.Result{InsertID: 1}, nil) + tme.dbSource2Client.addQueryRE("insert into _vt.vreplication.*80-.*40-.*MariaDB/5-456-893.*Stopped", &sqltypes.Result{InsertID: 2}, nil) + tme.dbSource1Client.addQuery("select * from _vt.vreplication where id = 1", stopped, nil) + tme.dbSource2Client.addQuery("select * from _vt.vreplication where id = 1", stopped, nil) + tme.dbSource2Client.addQuery("select * from _vt.vreplication where id = 2", stopped, nil) + + // Delete the target replications. + tme.dbDest1Client.addQuery("delete from _vt.vreplication where id = 1", &sqltypes.Result{}, nil) + tme.dbDest2Client.addQuery("delete from _vt.vreplication where id = 1", &sqltypes.Result{}, nil) + tme.dbDest1Client.addQuery("delete from _vt.vreplication where id = 2", &sqltypes.Result{}, nil) + + journalID, err := tme.wr.MigrateWrites(ctx, tme.targetKeyspace, "test", 1*time.Second) + if err != nil { + t.Fatal(err) + } + if journalID != 6432976123657117098 { + t.Errorf("journal id: %d, want 6432976123657117098", journalID) + } + + checkServedTypes(t, tme.ts, "ks:-40", 0) + checkServedTypes(t, tme.ts, "ks:40-", 0) + checkServedTypes(t, tme.ts, "ks:-80", 3) + checkServedTypes(t, tme.ts, "ks:80-", 3) + + checkIsMasterServing(t, tme.ts, "ks:-40", false) + checkIsMasterServing(t, tme.ts, "ks:40-", false) + checkIsMasterServing(t, tme.ts, "ks:-80", true) + checkIsMasterServing(t, tme.ts, "ks:80-", true) + + verifyQueries(t, tme.allDBClients) +} + +// TestMigrateFailJournal tests that cancel doesn't get called after point of no return. +// No need to test this for shard migrate because code paths are the same. +func TestMigrateFailJournal(t *testing.T) { + ctx := context.Background() + tme := newTestTableMigrater(ctx, t) + defer tme.stopTablets(t) + + err := tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_RDONLY, nil, DirectionForward) + if err != nil { + t.Fatal(err) + } + err = tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_REPLICA, nil, DirectionForward) + if err != nil { + t.Fatal(err) + } + + // Check for journals. + tme.dbSource1Client.addQuery("select 1 from _vt.resharding_journal where id = 9113431017721636330", &sqltypes.Result{}, nil) + tme.dbSource2Client.addQuery("select 1 from _vt.resharding_journal where id = 9113431017721636330", &sqltypes.Result{}, nil) + + // Wait for position: Reads current state, updates to Stopped, and re-reads. + state := sqltypes.MakeTestResult(sqltypes.MakeTestFields( + "pos|state|message", + "varchar|varchar|varchar"), + "MariaDB/5-456-892|Running|", + ) + tme.dbDest1Client.addQuery("select pos, state, message from _vt.vreplication where id=1", state, nil) + tme.dbDest2Client.addQuery("select pos, state, message from _vt.vreplication where id=1", state, nil) + tme.dbDest1Client.addQuery("select pos, state, message from _vt.vreplication where id=2", state, nil) + tme.dbDest1Client.addQuery("update _vt.vreplication set state = 'Stopped', message = 'stopped for cutover' where id = 1", &sqltypes.Result{}, nil) + tme.dbDest2Client.addQuery("update _vt.vreplication set state = 'Stopped', message = 'stopped for cutover' where id = 1", &sqltypes.Result{}, nil) + tme.dbDest1Client.addQuery("update _vt.vreplication set state = 'Stopped', message = 'stopped for cutover' where id = 2", &sqltypes.Result{}, nil) + stopped := sqltypes.MakeTestResult(sqltypes.MakeTestFields( + "id|state", + "int64|varchar"), + "1|Stopped", + ) + tme.dbDest1Client.addQuery("select * from _vt.vreplication where id = 1", stopped, nil) + tme.dbDest2Client.addQuery("select * from _vt.vreplication where id = 1", stopped, nil) + tme.dbDest1Client.addQuery("select * from _vt.vreplication where id = 2", stopped, nil) + + // Cancel Migration: these must not get called. + cancel1 := "update _vt.vreplication set state = 'Running', stop_pos = null where id = 1" + cancel2 := "update _vt.vreplication set state = 'Running', stop_pos = null where id = 2" + tme.dbDest1Client.addQuery(cancel1, &sqltypes.Result{}, nil) + tme.dbDest2Client.addQuery(cancel1, &sqltypes.Result{}, nil) + tme.dbDest1Client.addQuery(cancel2, &sqltypes.Result{}, nil) + + // Make the journal call fail. + tme.dbSource1Client.addQueryRE("insert into _vt.resharding_journal", nil, errors.New("journaling intentionally failed")) + tme.dbSource2Client.addQueryRE("insert into _vt.resharding_journal", nil, errors.New("journaling intentionally failed")) + + _, err = tme.wr.MigrateWrites(ctx, tme.targetKeyspace, "test", 1*time.Second) + want := "journaling intentionally failed" + if err == nil || !strings.Contains(err.Error(), want) { + t.Errorf("MigrateWrites(0 timeout) err: %v, must contain %v", err, want) + } + + // Verify that cancel didn't happen. + if tme.dbDest1Client.queries[cancel1].called { + t.Errorf("tme.dbDest1Client.queries[cancel1].called: %v, want false", tme.dbDest1Client.queries[cancel1]) + } + if tme.dbDest2Client.queries[cancel1].called { + t.Errorf("tme.dbDest1Client.queries[cancel1].called: %v, want false", tme.dbDest1Client.queries[cancel1]) + } + if tme.dbDest1Client.queries[cancel2].called { + t.Errorf("tme.dbDest1Client.queries[cancel1].called: %v, want false", tme.dbDest1Client.queries[cancel1]) + } +} + +func TestTableMigrateJournalExists(t *testing.T) { + ctx := context.Background() + tme := newTestTableMigrater(ctx, t) + defer tme.stopTablets(t) + + err := tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_RDONLY, nil, DirectionForward) + if err != nil { + t.Fatal(err) + } + err = tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_REPLICA, nil, DirectionForward) + if err != nil { + t.Fatal(err) + } + + // Show one journal as created. + tme.dbSource1Client.addQuery("select 1 from _vt.resharding_journal where id = 9113431017721636330", sqltypes.MakeTestResult(sqltypes.MakeTestFields("1", "int64"), "1"), nil) + tme.dbSource2Client.addQuery("select 1 from _vt.resharding_journal where id = 9113431017721636330", &sqltypes.Result{}, nil) + + // Create the missing journal. + journal2 := "insert into _vt.resharding_journal.*9113431017721636330.*tables.*t1.*t2.*local_position.*MariaDB/5-456-892.*shard_gtids.*80.*MariaDB/5-456-893.*80.*participants.*40.*40" + tme.dbSource2Client.addQueryRE(journal2, &sqltypes.Result{}, nil) + + // Create backward replicaions. + tme.dbSource1Client.addQueryRE("insert into _vt.vreplication.*ks2.*-80.*t1.*in_keyrange.*c1.*hash.*-40.*t2.*-40.*MariaDB/5-456-893.*Stopped", &sqltypes.Result{InsertID: 1}, nil) + tme.dbSource2Client.addQueryRE("insert into _vt.vreplication.*ks2.*-80.*t1.*in_keyrange.*c1.*hash.*40-.*t2.*40-.*MariaDB/5-456-893.*Stopped", &sqltypes.Result{InsertID: 1}, nil) + tme.dbSource2Client.addQueryRE("insert into _vt.vreplication.*ks2.*80-.*t1.*in_keyrange.*c1.*hash.*40-.*t2.*40-.*MariaDB/5-456-893.*Stopped", &sqltypes.Result{InsertID: 2}, nil) + stopped := sqltypes.MakeTestResult(sqltypes.MakeTestFields( + "id|state", + "int64|varchar"), + "1|Stopped", + ) + tme.dbSource1Client.addQuery("select * from _vt.vreplication where id = 1", stopped, nil) + tme.dbSource2Client.addQuery("select * from _vt.vreplication where id = 1", stopped, nil) + tme.dbSource2Client.addQuery("select * from _vt.vreplication where id = 2", stopped, nil) + + // Delete the target replications. + tme.dbDest1Client.addQuery("delete from _vt.vreplication where id = 1", &sqltypes.Result{}, nil) + tme.dbDest2Client.addQuery("delete from _vt.vreplication where id = 1", &sqltypes.Result{}, nil) + tme.dbDest1Client.addQuery("delete from _vt.vreplication where id = 2", &sqltypes.Result{}, nil) + + _, err = tme.wr.MigrateWrites(ctx, tme.targetKeyspace, "test", 1*time.Second) + if err != nil { + t.Fatal(err) + } + + // Routes will be redone. + checkRouting(t, tme.wr, map[string][]string{ + "t1": {"ks2.t1"}, + "ks1.t1": {"ks2.t1"}, + "t2": {"ks2.t2"}, + "ks1.t2": {"ks2.t2"}, + }) + // We're showing that there are no blacklisted tables. But in real life, + // tables on ks1 should be blacklisted from the previous failed attempt. + checkBlacklist(t, tme.ts, "ks1:-40", nil) + checkBlacklist(t, tme.ts, "ks1:40-", nil) + checkBlacklist(t, tme.ts, "ks2:-80", nil) + checkBlacklist(t, tme.ts, "ks2:80-", nil) + + verifyQueries(t, tme.allDBClients) +} + +func TestShardMigrateJournalExists(t *testing.T) { + ctx := context.Background() + tme := newTestShardMigrater(ctx, t) + defer tme.stopTablets(t) + + err := tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_RDONLY, nil, DirectionForward) + if err != nil { + t.Fatal(err) + } + err = tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_REPLICA, nil, DirectionForward) + if err != nil { + t.Fatal(err) + } + + // Show one journal as created. + tme.dbSource1Client.addQuery("select 1 from _vt.resharding_journal where id = 6432976123657117098", sqltypes.MakeTestResult(sqltypes.MakeTestFields("1", "int64"), "1"), nil) + tme.dbSource2Client.addQuery("select 1 from _vt.resharding_journal where id = 6432976123657117098", &sqltypes.Result{}, nil) + + // Create the missing journal. + journal2 := "insert into _vt.resharding_journal.*6432976123657117098.*migration_type:SHARDS.*local_position.*MariaDB/5-456-892.*shard_gtids.*80.*MariaDB/5-456-893.*shard_gtids.*80.*MariaDB/5-456-893.*participants.*40.*40" + tme.dbSource2Client.addQueryRE(journal2, &sqltypes.Result{}, nil) + + // Create backward replicaions. + tme.dbSource1Client.addQueryRE("insert into _vt.vreplication.*-80.*-40.*MariaDB/5-456-893.*Stopped", &sqltypes.Result{InsertID: 1}, nil) + tme.dbSource2Client.addQueryRE("insert into _vt.vreplication.*-80.*40-.*MariaDB/5-456-893.*Stopped", &sqltypes.Result{InsertID: 1}, nil) + tme.dbSource2Client.addQueryRE("insert into _vt.vreplication.*80-.*40-.*MariaDB/5-456-893.*Stopped", &sqltypes.Result{InsertID: 2}, nil) + stopped := sqltypes.MakeTestResult(sqltypes.MakeTestFields( + "id|state", + "int64|varchar"), + "1|Stopped", + ) + tme.dbSource1Client.addQuery("select * from _vt.vreplication where id = 1", stopped, nil) + tme.dbSource2Client.addQuery("select * from _vt.vreplication where id = 1", stopped, nil) + tme.dbSource2Client.addQuery("select * from _vt.vreplication where id = 2", stopped, nil) + + // Delete the target replications. + tme.dbDest1Client.addQuery("delete from _vt.vreplication where id = 1", &sqltypes.Result{}, nil) + tme.dbDest2Client.addQuery("delete from _vt.vreplication where id = 1", &sqltypes.Result{}, nil) + tme.dbDest1Client.addQuery("delete from _vt.vreplication where id = 2", &sqltypes.Result{}, nil) + + _, err = tme.wr.MigrateWrites(ctx, tme.targetKeyspace, "test", 1*time.Second) + if err != nil { + t.Fatal(err) + } + + checkServedTypes(t, tme.ts, "ks:-40", 0) + checkServedTypes(t, tme.ts, "ks:40-", 0) + checkServedTypes(t, tme.ts, "ks:-80", 3) + checkServedTypes(t, tme.ts, "ks:80-", 3) + + checkIsMasterServing(t, tme.ts, "ks:-40", false) + checkIsMasterServing(t, tme.ts, "ks:40-", false) + checkIsMasterServing(t, tme.ts, "ks:-80", true) + checkIsMasterServing(t, tme.ts, "ks:80-", true) + + verifyQueries(t, tme.allDBClients) +} + +func TestMigrateNoStreamsFound(t *testing.T) { + ctx := context.Background() + tme := newTestTableMigrater(ctx, t) + defer tme.stopTablets(t) + + tme.dbDest1Client.addQuery(vreplQueryks2, &sqltypes.Result{}, nil) + tme.dbDest2Client.addQuery(vreplQueryks2, &sqltypes.Result{}, nil) + + err := tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_RDONLY, nil, DirectionForward) + want := "no streams found in keyspace ks2 for: test" + if err == nil || !strings.Contains(err.Error(), want) { + t.Errorf("MigrateReads: %v, must contain %v", err, want) + } +} + +func TestMigrateDistinctSources(t *testing.T) { + ctx := context.Background() + tme := newTestTableMigrater(ctx, t) + defer tme.stopTablets(t) + + bls := &binlogdatapb.BinlogSource{ + Keyspace: "ks2", + Shard: "-80", + Filter: &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "t1", + Filter: "select * from t1 where in_keyrange('-80')", + }, { + Match: "t2", + Filter: "select * from t2 where in_keyrange('-80')", + }}, + }, + } + tme.dbDest1Client.addQuery(vreplQueryks2, sqltypes.MakeTestResult(sqltypes.MakeTestFields( + "id|source", + "int64|varchar"), + fmt.Sprintf("1|%v", bls), + ), nil) + + err := tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_RDONLY, nil, DirectionForward) + want := "source keyspaces are mismatched across streams" + if err == nil || !strings.Contains(err.Error(), want) { + t.Errorf("MigrateReads: %v, must contain %v", err, want) + } +} + +func TestMigrateMismatchedTables(t *testing.T) { + ctx := context.Background() + tme := newTestTableMigrater(ctx, t) + defer tme.stopTablets(t) + + bls := &binlogdatapb.BinlogSource{ + Keyspace: "ks1", + Shard: "-40", + Filter: &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "t1", + Filter: "select * from t1 where in_keyrange('-80')", + }}, + }, + } + tme.dbDest1Client.addQuery(vreplQueryks2, sqltypes.MakeTestResult(sqltypes.MakeTestFields( + "id|source", + "int64|varchar"), + fmt.Sprintf("1|%v", bls), + ), nil) + + err := tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_RDONLY, nil, DirectionForward) + want := "table lists are mismatched across streams" + if err == nil || !strings.Contains(err.Error(), want) { + t.Errorf("MigrateReads: %v, must contain %v", err, want) + } +} + +func TestTableMigrateAllShardsNotPresent(t *testing.T) { + ctx := context.Background() + tme := newTestTableMigrater(ctx, t) + defer tme.stopTablets(t) + + tme.dbDest1Client.addQuery(vreplQueryks2, &sqltypes.Result{}, nil) + + err := tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_RDONLY, nil, DirectionForward) + want := "mismatched shards for keyspace" + if err == nil || !strings.Contains(err.Error(), want) { + t.Errorf("MigrateReads: %v, must contain %v", err, want) + } +} + +func TestMigrateNoTableWildcards(t *testing.T) { + ctx := context.Background() + tme := newTestTableMigrater(ctx, t) + defer tme.stopTablets(t) + + bls1 := &binlogdatapb.BinlogSource{ + Keyspace: "ks1", + Shard: "-40", + Filter: &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "/.*", + Filter: "", + }}, + }, + } + bls2 := &binlogdatapb.BinlogSource{ + Keyspace: "ks1", + Shard: "40-", + Filter: &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "/.*", + Filter: "", + }}, + }, + } + tme.dbDest1Client.addQuery(vreplQueryks2, sqltypes.MakeTestResult(sqltypes.MakeTestFields( + "id|source", + "int64|varchar"), + fmt.Sprintf("1|%v", bls1), + fmt.Sprintf("2|%v", bls2), + ), nil) + bls3 := &binlogdatapb.BinlogSource{ + Keyspace: "ks1", + Shard: "40-", + Filter: &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "/.*", + Filter: "", + }}, + }, + } + tme.dbDest2Client.addQuery(vreplQueryks2, sqltypes.MakeTestResult(sqltypes.MakeTestFields( + "id|source", + "int64|varchar"), + fmt.Sprintf("1|%v", bls3), + ), nil) + + err := tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_RDONLY, nil, DirectionForward) + want := "cannot migrate streams with wild card table names" + if err == nil || !strings.Contains(err.Error(), want) { + t.Errorf("MigrateReads: %v, must contain %v", err, want) + } +} + +func TestShardMigrateTargetMatchesSource(t *testing.T) { + ctx := context.Background() + tme := newTestShardMigrater(ctx, t) + defer tme.stopTablets(t) + + bls := &binlogdatapb.BinlogSource{ + Keyspace: "ks", + Shard: "-80", + Filter: &binlogdatapb.Filter{ + Rules: []*binlogdatapb.Rule{{ + Match: "/.*", + Filter: "-80", + }}, + }, + } + tme.dbDest1Client.addQuery(vreplQueryks, sqltypes.MakeTestResult(sqltypes.MakeTestFields( + "id|source", + "int64|varchar"), + fmt.Sprintf("1|%v", bls), + ), nil) + + err := tme.wr.MigrateReads(ctx, tme.targetKeyspace, "test", topodatapb.TabletType_RDONLY, nil, DirectionForward) + want := "target shard matches a source shard" + if err == nil || !strings.Contains(err.Error(), want) { + t.Errorf("MigrateReads: %v, must contain %v", err, want) + } +} + +func checkRouting(t *testing.T, wr *Wrangler, want map[string][]string) { + t.Helper() + ctx := context.Background() + got, err := wr.getRoutingRules(ctx) + if err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(got, want) { + t.Errorf("rules:\n%v, want\n%v", got, want) + } + cells, err := wr.ts.GetCellInfoNames(ctx) + if err != nil { + t.Fatal(err) + } + for _, cell := range cells { + checkCellRouting(t, wr, cell, want) + } +} + +func checkCellRouting(t *testing.T, wr *Wrangler, cell string, want map[string][]string) { + t.Helper() + ctx := context.Background() + svs, err := wr.ts.GetSrvVSchema(ctx, cell) + if err != nil { + t.Fatal(err) + } + got := make(map[string][]string) + for _, rr := range svs.RoutingRules.Rules { + got[rr.FromTable] = append(got[rr.FromTable], rr.ToTables...) + } + if !reflect.DeepEqual(got, want) { + t.Errorf("srv rules for cell %s:\n%v, want\n%v", cell, got, want) + } +} + +func checkBlacklist(t *testing.T, ts *topo.Server, keyspaceShard string, want []string) { + t.Helper() + ctx := context.Background() + splits := strings.Split(keyspaceShard, ":") + si, err := ts.GetShard(ctx, splits[0], splits[1]) + if err != nil { + t.Fatal(err) + } + tc := si.GetTabletControl(topodatapb.TabletType_MASTER) + var got []string + if tc != nil { + got = tc.BlacklistedTables + } + if !reflect.DeepEqual(got, want) { + t.Errorf("Blacklisted tables for %v: %v, want %v", keyspaceShard, got, want) + } +} + +func checkServedTypes(t *testing.T, ts *topo.Server, keyspaceShard string, want int) { + t.Helper() + ctx := context.Background() + splits := strings.Split(keyspaceShard, ":") + si, err := ts.GetShard(ctx, splits[0], splits[1]) + if err != nil { + t.Fatal(err) + } + + servedTypes, err := ts.GetShardServingTypes(ctx, si) + if err != nil { + t.Fatal(err) + } + + if len(servedTypes) != want { + t.Errorf("shard %v has wrong served types: got: %v, want: %v", keyspaceShard, len(servedTypes), want) + } +} + +func checkCellServedTypes(t *testing.T, ts *topo.Server, keyspaceShard, cell string, want int) { + t.Helper() + ctx := context.Background() + splits := strings.Split(keyspaceShard, ":") + srvKeyspace, err := ts.GetSrvKeyspace(ctx, cell, splits[0]) + if err != nil { + t.Fatal(err) + } + count := 0 +outer: + for _, partition := range srvKeyspace.GetPartitions() { + for _, ref := range partition.ShardReferences { + if ref.Name == splits[1] { + count++ + continue outer + } + } + } + if count != want { + t.Errorf("serving types for keyspaceShard %s, cell %s: %d, want %d", keyspaceShard, cell, count, want) + } +} + +func checkIsMasterServing(t *testing.T, ts *topo.Server, keyspaceShard string, want bool) { + t.Helper() + ctx := context.Background() + splits := strings.Split(keyspaceShard, ":") + si, err := ts.GetShard(ctx, splits[0], splits[1]) + if err != nil { + t.Fatal(err) + } + if want != si.IsMasterServing { + t.Errorf("IsMasterServing(%v): %v, want %v", keyspaceShard, si.IsMasterServing, want) + } +} diff --git a/go/vt/wrangler/shard.go b/go/vt/wrangler/shard.go index 226f9e94f1e..e58ae3618db 100644 --- a/go/vt/wrangler/shard.go +++ b/go/vt/wrangler/shard.go @@ -330,14 +330,14 @@ func (wr *Wrangler) RemoveShardCell(ctx context.Context, keyspace, shard, cell s } defer unlock(&err) - if err = wr.ts.DeleteSrvKeyspacePartitions(ctx, keyspace, []*topo.ShardInfo{shardInfo}, topodatapb.TabletType_RDONLY, shardServingCells); err != nil { + if err = wr.ts.DeleteSrvKeyspacePartitions(ctx, keyspace, []*topo.ShardInfo{shardInfo}, topodatapb.TabletType_RDONLY, []string{cell}); err != nil { return err } - if err = wr.ts.DeleteSrvKeyspacePartitions(ctx, keyspace, []*topo.ShardInfo{shardInfo}, topodatapb.TabletType_REPLICA, shardServingCells); err != nil { + if err = wr.ts.DeleteSrvKeyspacePartitions(ctx, keyspace, []*topo.ShardInfo{shardInfo}, topodatapb.TabletType_REPLICA, []string{cell}); err != nil { return err } - return wr.ts.DeleteSrvKeyspacePartitions(ctx, keyspace, []*topo.ShardInfo{shardInfo}, topodatapb.TabletType_MASTER, shardServingCells) + return wr.ts.DeleteSrvKeyspacePartitions(ctx, keyspace, []*topo.ShardInfo{shardInfo}, topodatapb.TabletType_MASTER, []string{cell}) } // SourceShardDelete will delete a SourceShard inside a shard, by index. diff --git a/go/vt/wrangler/testlib/migrate_served_from_test.go b/go/vt/wrangler/testlib/migrate_served_from_test.go index 19d8f4ef69c..9b804ed7c16 100644 --- a/go/vt/wrangler/testlib/migrate_served_from_test.go +++ b/go/vt/wrangler/testlib/migrate_served_from_test.go @@ -117,8 +117,7 @@ func TestMigrateServedFrom(t *testing.T) { sqltypes.NewVarBinary("Running"), sqltypes.NewVarBinary(""), }}}, nil) - dbClient.ExpectRequest("use _vt", &sqltypes.Result{}, nil) - dbClient.ExpectRequest("delete from _vt.vreplication where id = 1", &sqltypes.Result{RowsAffected: 1}, nil) + expectDeleteVRepl(dbClient) // simulate the clone, by fixing the dest shard record if err := vp.Run([]string{"SourceShardAdd", "--tables", "gone1,gone2", "dest/0", "1", "source/0"}); err != nil { diff --git a/go/vt/wrangler/testlib/migrate_served_types_test.go b/go/vt/wrangler/testlib/migrate_served_types_test.go index 5cb170c5c8c..3db2caa496e 100644 --- a/go/vt/wrangler/testlib/migrate_served_types_test.go +++ b/go/vt/wrangler/testlib/migrate_served_types_test.go @@ -165,8 +165,7 @@ func TestMigrateServedTypes(t *testing.T) { sqltypes.NewVarBinary("Running"), sqltypes.NewVarBinary(""), }}}, nil) - dbClient1.ExpectRequest("use _vt", &sqltypes.Result{}, nil) - dbClient1.ExpectRequest("delete from _vt.vreplication where id = 1", &sqltypes.Result{RowsAffected: 1}, nil) + expectDeleteVRepl(dbClient1) // dest2Rdonly will see the refresh dest2Rdonly.StartActionLoop(t, wr) @@ -194,8 +193,7 @@ func TestMigrateServedTypes(t *testing.T) { sqltypes.NewVarBinary("Running"), sqltypes.NewVarBinary(""), }}}, nil) - dbClient2.ExpectRequest("use _vt", &sqltypes.Result{}, nil) - dbClient2.ExpectRequest("delete from _vt.vreplication where id = 1", &sqltypes.Result{RowsAffected: 1}, nil) + expectDeleteVRepl(dbClient2) // migrate will error if the overlapping shards have no "SourceShard" entry // and we cannot decide which shard is the source or the destination. @@ -431,8 +429,7 @@ func TestMultiShardMigrateServedTypes(t *testing.T) { sqltypes.NewVarBinary("Running"), sqltypes.NewVarBinary(""), }}}, nil) - dbClient1.ExpectRequest("use _vt", &sqltypes.Result{}, nil) - dbClient1.ExpectRequest("delete from _vt.vreplication where id = 1", &sqltypes.Result{RowsAffected: 1}, nil) + expectDeleteVRepl(dbClient1) // Override with a fake VREngine after Agent is initialized in action loop. dbClient2 := binlogplayer.NewMockDBClient(t) @@ -450,8 +447,7 @@ func TestMultiShardMigrateServedTypes(t *testing.T) { sqltypes.NewVarBinary("Running"), sqltypes.NewVarBinary(""), }}}, nil) - dbClient2.ExpectRequest("use _vt", &sqltypes.Result{}, nil) - dbClient2.ExpectRequest("delete from _vt.vreplication where id = 1", &sqltypes.Result{RowsAffected: 1}, nil) + expectDeleteVRepl(dbClient2) // migrate will error if the overlapping shards have no "SourceShard" entry // and we cannot decide which shard is the source or the destination. @@ -521,8 +517,7 @@ func TestMultiShardMigrateServedTypes(t *testing.T) { sqltypes.NewVarBinary("Running"), sqltypes.NewVarBinary(""), }}}, nil) - dbClient1.ExpectRequest("use _vt", &sqltypes.Result{}, nil) - dbClient1.ExpectRequest("delete from _vt.vreplication where id = 1", &sqltypes.Result{RowsAffected: 1}, nil) + expectDeleteVRepl(dbClient1) // Override with a fake VREngine after Agent is initialized in action loop. dbClient2 = binlogplayer.NewMockDBClient(t) @@ -540,8 +535,7 @@ func TestMultiShardMigrateServedTypes(t *testing.T) { sqltypes.NewVarBinary("Running"), sqltypes.NewVarBinary(""), }}}, nil) - dbClient2.ExpectRequest("use _vt", &sqltypes.Result{}, nil) - dbClient2.ExpectRequest("delete from _vt.vreplication where id = 1", &sqltypes.Result{RowsAffected: 1}, nil) + expectDeleteVRepl(dbClient2) // // simulate the clone, by fixing the dest shard record checkShardSourceShards(t, ts, "80-c0", 0) @@ -588,3 +582,11 @@ func TestMultiShardMigrateServedTypes(t *testing.T) { checkShardSourceShards(t, ts, "80-c0", 0) checkShardSourceShards(t, ts, "c0-", 0) } + +func expectDeleteVRepl(dbClient *binlogplayer.MockDBClient) { + dbClient.ExpectRequest("use _vt", &sqltypes.Result{}, nil) + dbClient.ExpectRequest("begin", nil, nil) + dbClient.ExpectRequest("delete from _vt.vreplication where id = 1", &sqltypes.Result{RowsAffected: 1}, nil) + dbClient.ExpectRequest("delete from _vt.copy_state where vrepl_id = 1", nil, nil) + dbClient.ExpectRequest("commit", nil, nil) +} diff --git a/go/vt/zkctl/zkctl.go b/go/vt/zkctl/zkctl.go index 4275e32b61e..686eed07b43 100644 --- a/go/vt/zkctl/zkctl.go +++ b/go/vt/zkctl/zkctl.go @@ -32,7 +32,7 @@ import ( "syscall" "time" - zookeeper "github.com/samuel/go-zookeeper/zk" + zookeeper "github.com/z-division/go-zookeeper/zk" "vitess.io/vitess/go/vt/env" "vitess.io/vitess/go/vt/log" diff --git a/helm/vitess/templates/_orchestrator-conf.tpl b/helm/vitess/templates/_orchestrator-conf.tpl index bdcc7d3cd63..93d8183e00f 100644 --- a/helm/vitess/templates/_orchestrator-conf.tpl +++ b/helm/vitess/templates/_orchestrator-conf.tpl @@ -14,7 +14,7 @@ metadata: name: orchestrator-cm data: orchestrator.conf.json: |- - { + { "ActiveNodeExpireSeconds": 5, "ApplyMySQLPromotionAfterMasterFailover": true, "AuditLogFile": "/tmp/orchestrator-audit.log", @@ -25,8 +25,8 @@ data: "BackendDB": "sqlite", "BinlogEventsChunkSize": 10000, "CandidateInstanceExpireMinutes": 60, - "CoMasterRecoveryMustPromoteOtherCoMaster": true, - "DataCenterPattern": "[.]([^.]+)[.][^.]+[.]mydomain[.]com", + "CoMasterRecoveryMustPromoteOtherCoMaster": false, + "DataCenterPattern": "[.]([^.]+)[.][^.]+[.]vitess[.]io", "Debug": true, "DefaultInstancePort": 3306, "DefaultRaftPort": 10008, @@ -35,13 +35,14 @@ data: "DetectClusterDomainQuery": "", "DetectInstanceAliasQuery": "SELECT value FROM _vt.local_metadata WHERE name='Alias'", "DetectPromotionRuleQuery": "SELECT value FROM _vt.local_metadata WHERE name='PromotionRule'", + "DetectDataCenterQuery": "SELECT value FROM _vt.local_metadata WHERE name='DataCenter'", "DetectPseudoGTIDQuery": "", "DetectSemiSyncEnforcedQuery": "SELECT @@global.rpl_semi_sync_master_wait_no_slave AND @@global.rpl_semi_sync_master_timeout > 1000000", - "DiscoverByShowSlaveHosts": true, + "DiscoverByShowSlaveHosts": false, "EnableSyslog": false, "ExpiryHostnameResolvesMinutes": 60, - "FailMasterPromotionIfSQLThreadNotUpToDate": true, - "FailureDetectionPeriodBlockMinutes": 60, + "DelayMasterPromotionIfSQLThreadNotUpToDate": true, + "FailureDetectionPeriodBlockMinutes": 10, "GraphiteAddr": "", "GraphiteConvertHostnameDotsToUnderscores": true, "GraphitePath": "", @@ -70,7 +71,7 @@ data: ], "OSCIgnoreHostnameFilters": [ ], - "PhysicalEnvironmentPattern": "[.]([^.]+[.][^.]+)[.]mydomain[.]com", + "PhysicalEnvironmentPattern": "[.]([^.]+[.][^.]+)[.]vitess[.]io", "PostFailoverProcesses": [ "echo '(for all types) Recovered from {failureType} on {failureCluster}. Failed: {failedHost}:{failedPort}; Successor: {successorHost}:{successorPort}' >> /tmp/recovery.log" ], @@ -79,7 +80,7 @@ data: ], "PostMasterFailoverProcesses": [ "echo 'Recovered from {failureType} on {failureCluster}. Failed: {failedHost}:{failedPort}; Promoted: {successorHost}:{successorPort}' >> /tmp/recovery.log", - "vtctlclient {{ include "format-flags-inline" $defaultVtctlclient.extraFlags | toJson | trimAll "\"" }} -server vtctld.{{ $namespace }}:15999 TabletExternallyReparented {successorAlias}" + "n=0; until [ $n -ge 10 ]; do vtctlclient {{ include "format-flags-inline" $defaultVtctlclient.extraFlags | toJson | trimAll "\"" }} -server vtctld.{{ $namespace }}:15999 TabletExternallyReparented {successorAlias} && break; n=$[$n+1]; sleep 5; done" ], "PostponeSlaveRecoveryOnLagMinutes": 0, "PostUnsuccessfulFailoverProcesses": [ @@ -109,9 +110,6 @@ data: "ReadOnly": false, "ReasonableMaintenanceReplicationLagSeconds": 20, "ReasonableReplicationLagSeconds": 10, - "RecoverIntermediateMasterClusterFilters": [ - "*" - ], "RecoverMasterClusterFilters": [ ".*" ], @@ -120,7 +118,7 @@ data: "RecoveryPeriodBlockSeconds": 60, "ReduceReplicationAnalysisCount": true, "RejectHostnameResolvePattern": "", - "RemoveTextFromHostnameDisplay": ".mydomain.com:3306", + "RemoveTextFromHostnameDisplay": ".vitess.io:3306", {{ if $enableHeartbeat }} "ReplicationLagQuery": "SELECT unix_timestamp() - floor(ts/1000000000) FROM `_vt`.heartbeat ORDER BY ts DESC LIMIT 1;", {{ else }} diff --git a/helm/vitess/values.yaml b/helm/vitess/values.yaml index e82d5e02573..7bd53706d03 100644 --- a/helm/vitess/values.yaml +++ b/helm/vitess/values.yaml @@ -379,7 +379,7 @@ pmm: # Default values for orchestrator resources orchestrator: enabled: false - image: vitess/orchestrator:3.0.14 + image: vitess/orchestrator:3.1.1 replicas: 3 resources: requests: diff --git a/java/client/src/main/java/io/vitess/client/RpcClient.java b/java/client/src/main/java/io/vitess/client/RpcClient.java index 31bd7e51689..4c83df8ec4b 100644 --- a/java/client/src/main/java/io/vitess/client/RpcClient.java +++ b/java/client/src/main/java/io/vitess/client/RpcClient.java @@ -48,6 +48,8 @@ import io.vitess.proto.Vtgate.StreamExecuteKeyspaceIdsRequest; import io.vitess.proto.Vtgate.StreamExecuteRequest; import io.vitess.proto.Vtgate.StreamExecuteShardsRequest; +import io.vitess.proto.Vtgate.VStreamRequest; +import io.vitess.proto.Vtgate.VStreamResponse; import java.io.Closeable; import java.sql.SQLException; @@ -245,4 +247,16 @@ ListenableFuture splitQuery(Context ctx, SplitQueryRequest r */ ListenableFuture getSrvKeyspace( Context ctx, GetSrvKeyspaceRequest request) throws SQLException; + + /** + * Starts streaming the vstream binlog events. + * + * Stream begins at the specified VGTID. + * + *

    See the + * proto + * definition for canonical documentation on this VTGate API. + */ + StreamIterator getVStream( + Context ctx, VStreamRequest vstreamRequest) throws SQLException; } diff --git a/java/client/src/main/java/io/vitess/client/VTGateConnection.java b/java/client/src/main/java/io/vitess/client/VTGateConnection.java index d22f01f5dc2..480de673a57 100644 --- a/java/client/src/main/java/io/vitess/client/VTGateConnection.java +++ b/java/client/src/main/java/io/vitess/client/VTGateConnection.java @@ -36,6 +36,8 @@ import io.vitess.proto.Vtgate.SplitQueryRequest; import io.vitess.proto.Vtgate.SplitQueryResponse; import io.vitess.proto.Vtgate.StreamExecuteRequest; +import io.vitess.proto.Vtgate.VStreamRequest; +import io.vitess.proto.Vtgate.VStreamResponse; import java.io.Closeable; import java.io.IOException; @@ -252,6 +254,26 @@ public ListenableFuture> apply( }, directExecutor())); } + /** + * Starts streaming the vstream binlog events. + * + * @param ctx Context on user and execution deadline if any. + * @param vstreamRequest VStreamRequest containing starting VGtid positions + * in binlog and optional Filters + * @return Streaming iterator over VStream events + * @throws SQLException If anything fails on query execution. + */ + StreamIterator getVStream(Context ctx, VStreamRequest vstreamRequest) + throws SQLException { + VStreamRequest request = vstreamRequest; + + if (ctx.getCallerId() != null) { + request = request.toBuilder().setCallerId(ctx.getCallerId()).build(); + } + + return client.getVStream(ctx, request); + } + /** * @inheritDoc */ diff --git a/java/client/src/test/java/io/vitess/client/RpcClientTest.java b/java/client/src/test/java/io/vitess/client/RpcClientTest.java index 67e69c93552..750cebff67f 100644 --- a/java/client/src/test/java/io/vitess/client/RpcClientTest.java +++ b/java/client/src/test/java/io/vitess/client/RpcClientTest.java @@ -21,6 +21,12 @@ import com.google.common.collect.ImmutableMap; import com.google.protobuf.ByteString; +import binlogdata.Binlogdata.FieldEvent; +import binlogdata.Binlogdata.RowEvent; +import binlogdata.Binlogdata.ShardGtid; +import binlogdata.Binlogdata.VEvent; +import binlogdata.Binlogdata.VEventType; +import binlogdata.Binlogdata.VGtid; import io.vitess.client.cursor.Cursor; import io.vitess.client.cursor.Row; import io.vitess.proto.Query; @@ -33,6 +39,8 @@ import io.vitess.proto.Topodata.SrvKeyspace.KeyspacePartition; import io.vitess.proto.Topodata.TabletType; import io.vitess.proto.Vtgate.SplitQueryResponse; +import io.vitess.proto.Vtgate.VStreamRequest; +import io.vitess.proto.Vtgate.VStreamResponse; import io.vitess.proto.Vtrpc.CallerID; import java.nio.charset.StandardCharsets; @@ -730,4 +738,51 @@ void execute(VTGateBlockingTx tx, String query) throws Exception { } }); } + + @Test + public void testVStream() throws Exception { + VGtid vgtid = VGtid.newBuilder() + .addShardGtids(ShardGtid.newBuilder() + .setGtid("gtid") + .setShard(ECHO_PREFIX + System.currentTimeMillis()) + .setKeyspace("keyspace: " + System.currentTimeMillis()) + .build()) + .build(); + + VStreamRequest vstreamRequest = VStreamRequest.newBuilder() + .setCallerId(CALLER_ID) + .setVgtid(vgtid) + .setTabletType(TABLET_TYPE) + .build(); + + StreamIterator vstream = client.getVStream(ctx, vstreamRequest); + VStreamResponse actual = vstream.next(); + Assert.assertFalse(vstream.hasNext()); + + VStreamResponse expected = VStreamResponse.newBuilder() + .addEvents(VEvent.newBuilder() + .setType(VEventType.forNumber(1)) + .setTimestamp(1234) + .setGtid("echo-gtid-1") + .setDdl("echo-ddl-1") + .setVgtid(vgtid) + .setRowEvent(RowEvent.newBuilder() + .setTableName("echo-table-1") + .build()) + .build()) + .addEvents(VEvent.newBuilder() + .setType(VEventType.forNumber(2)) + .setTimestamp(4321) + .setGtid("echo-gtid-2") + .setDdl("echo-ddl-2") + .setVgtid(vgtid) + .setFieldEvent(FieldEvent.newBuilder() + .setTableName("echo-table-2") + .build()) + .build()) + .build(); + + Assert.assertEquals(expected, actual); + } + } diff --git a/java/grpc-client/src/main/java/io/vitess/client/grpc/GrpcClient.java b/java/grpc-client/src/main/java/io/vitess/client/grpc/GrpcClient.java index cf8f8cdc94f..2f2587fbd3f 100644 --- a/java/grpc-client/src/main/java/io/vitess/client/grpc/GrpcClient.java +++ b/java/grpc-client/src/main/java/io/vitess/client/grpc/GrpcClient.java @@ -63,6 +63,7 @@ import io.vitess.proto.Vtgate.StreamExecuteResponse; import io.vitess.proto.Vtgate.StreamExecuteShardsRequest; import io.vitess.proto.Vtgate.StreamExecuteShardsResponse; +import io.vitess.proto.Vtgate.VStreamResponse; import io.vitess.proto.grpc.VitessGrpc; import io.vitess.proto.grpc.VitessGrpc.VitessFutureStub; import io.vitess.proto.grpc.VitessGrpc.VitessStub; @@ -283,6 +284,21 @@ public ListenableFuture getSrvKeyspace(Context ctx, new ExceptionConverter(), MoreExecutors.directExecutor()); } + @Override + public StreamIterator getVStream(Context ctx, + Vtgate.VStreamRequest vstreamRequest) { + GrpcStreamAdapter adapter = + new GrpcStreamAdapter() { + @Override + VStreamResponse getResult(VStreamResponse response) { + return response; + } + }; + + getAsyncStub(ctx).vStream(vstreamRequest, adapter); + return adapter; + } + /** * Converts an exception from the gRPC framework into the appropriate {@link SQLException}. */ diff --git a/proto/binlogdata.proto b/proto/binlogdata.proto index 021f1fbf189..b28dbc5356f 100644 --- a/proto/binlogdata.proto +++ b/proto/binlogdata.proto @@ -187,6 +187,7 @@ enum VEventType { FIELD = 13; HEARTBEAT = 14; VGTID = 15; + JOURNAL = 16; } // RowChange represents one row change @@ -216,6 +217,27 @@ message VGtid { repeated ShardGtid shard_gtids = 1; } +message KeyspaceShard { + string keyspace = 1; + string shard = 2; +} + +// MigrationType specifies the type of migration for the Journal. +enum MigrationType { + TABLES = 0; + SHARDS = 1; +} + +message Journal { + int64 id = 1; + MigrationType migration_type = 2; + repeated string tables = 3; + string local_position = 4; + repeated ShardGtid shard_gtids = 5; + repeated KeyspaceShard participants = 6; + repeated int64 reversed_ids = 7; +} + // VEvent represents a vstream event message VEvent { VEventType type = 1; @@ -225,6 +247,7 @@ message VEvent { RowEvent row_event = 5; FieldEvent field_event = 6; VGtid vgtid = 7; + Journal journal = 8; // current_time specifies the current time to handle clock skew. int64 current_time = 20; } diff --git a/py/vtproto/binlogdata_pb2.py b/py/vtproto/binlogdata_pb2.py index c744f3b7280..53eda7da5b1 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\")\n\x06\x46ilter\x12\x1f\n\x05rules\x18\x01 \x03(\x0b\x32\x10.binlogdata.Rule\"\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\"\xea\x01\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\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*>\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*\xc4\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\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\")\n\x06\x46ilter\x12\x1f\n\x05rules\x18\x01 \x03(\x0b\x32\x10.binlogdata.Rule\"\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\"\xe3\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\x14\n\x0creversed_ids\x18\x07 \x03(\x03\"\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*>\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=2433, - serialized_end=2495, + serialized_start=2751, + serialized_end=2813, ) _sym_db.RegisterEnumDescriptor(_ONDDLACTION) @@ -128,15 +128,42 @@ name='VGTID', index=15, number=15, serialized_options=None, type=None), + _descriptor.EnumValueDescriptor( + name='JOURNAL', index=16, number=16, + serialized_options=None, + type=None), ], containing_type=None, serialized_options=None, - serialized_start=2498, - serialized_end=2694, + serialized_start=2816, + serialized_end=3025, ) _sym_db.RegisterEnumDescriptor(_VEVENTTYPE) VEventType = enum_type_wrapper.EnumTypeWrapper(_VEVENTTYPE) +_MIGRATIONTYPE = _descriptor.EnumDescriptor( + name='MigrationType', + full_name='binlogdata.MigrationType', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='TABLES', index=0, number=0, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SHARDS', index=1, number=1, + serialized_options=None, + type=None), + ], + containing_type=None, + serialized_options=None, + serialized_start=3027, + serialized_end=3066, +) +_sym_db.RegisterEnumDescriptor(_MIGRATIONTYPE) + +MigrationType = enum_type_wrapper.EnumTypeWrapper(_MIGRATIONTYPE) IGNORE = 0 STOP = 1 EXEC = 2 @@ -157,6 +184,9 @@ FIELD = 13 HEARTBEAT = 14 VGTID = 15 +JOURNAL = 16 +TABLES = 0 +SHARDS = 1 _BINLOGTRANSACTION_STATEMENT_CATEGORY = _descriptor.EnumDescriptor( @@ -826,6 +856,117 @@ ) +_KEYSPACESHARD = _descriptor.Descriptor( + name='KeyspaceShard', + full_name='binlogdata.KeyspaceShard', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='keyspace', full_name='binlogdata.KeyspaceShard.keyspace', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='shard', full_name='binlogdata.KeyspaceShard.shard', 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, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1582, + serialized_end=1630, +) + + +_JOURNAL = _descriptor.Descriptor( + name='Journal', + full_name='binlogdata.Journal', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='id', full_name='binlogdata.Journal.id', index=0, + number=1, 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, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='migration_type', full_name='binlogdata.Journal.migration_type', 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, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='tables', full_name='binlogdata.Journal.tables', 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, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='local_position', full_name='binlogdata.Journal.local_position', 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, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='shard_gtids', full_name='binlogdata.Journal.shard_gtids', index=4, + number=5, 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, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='participants', full_name='binlogdata.Journal.participants', index=5, + number=6, 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, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='reversed_ids', full_name='binlogdata.Journal.reversed_ids', index=6, + number=7, type=3, cpp_type=2, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1633, + serialized_end=1860, +) + + _VEVENT = _descriptor.Descriptor( name='VEvent', full_name='binlogdata.VEvent', @@ -883,7 +1024,14 @@ is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='current_time', full_name='binlogdata.VEvent.current_time', index=7, + name='journal', full_name='binlogdata.VEvent.journal', index=7, + number=8, 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, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='current_time', full_name='binlogdata.VEvent.current_time', index=8, 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, @@ -901,8 +1049,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1583, - serialized_end=1817, + serialized_start=1863, + serialized_end=2135, ) @@ -960,8 +1108,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1820, - serialized_end=2019, + serialized_start=2138, + serialized_end=2337, ) @@ -991,8 +1139,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2021, - serialized_end=2074, + serialized_start=2339, + serialized_end=2392, ) @@ -1050,8 +1198,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2077, - serialized_end=2277, + serialized_start=2395, + serialized_end=2595, ) @@ -1109,8 +1257,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2280, - serialized_end=2431, + serialized_start=2598, + serialized_end=2749, ) _BINLOGTRANSACTION_STATEMENT.fields_by_name['category'].enum_type = _BINLOGTRANSACTION_STATEMENT_CATEGORY @@ -1134,10 +1282,14 @@ _ROWEVENT.fields_by_name['row_changes'].message_type = _ROWCHANGE _FIELDEVENT.fields_by_name['fields'].message_type = query__pb2._FIELD _VGTID.fields_by_name['shard_gtids'].message_type = _SHARDGTID +_JOURNAL.fields_by_name['migration_type'].enum_type = _MIGRATIONTYPE +_JOURNAL.fields_by_name['shard_gtids'].message_type = _SHARDGTID +_JOURNAL.fields_by_name['participants'].message_type = _KEYSPACESHARD _VEVENT.fields_by_name['type'].enum_type = _VEVENTTYPE _VEVENT.fields_by_name['row_event'].message_type = _ROWEVENT _VEVENT.fields_by_name['field_event'].message_type = _FIELDEVENT _VEVENT.fields_by_name['vgtid'].message_type = _VGTID +_VEVENT.fields_by_name['journal'].message_type = _JOURNAL _VSTREAMREQUEST.fields_by_name['effective_caller_id'].message_type = vtrpc__pb2._CALLERID _VSTREAMREQUEST.fields_by_name['immediate_caller_id'].message_type = query__pb2._VTGATECALLERID _VSTREAMREQUEST.fields_by_name['target'].message_type = query__pb2._TARGET @@ -1165,6 +1317,8 @@ DESCRIPTOR.message_types_by_name['FieldEvent'] = _FIELDEVENT DESCRIPTOR.message_types_by_name['ShardGtid'] = _SHARDGTID DESCRIPTOR.message_types_by_name['VGtid'] = _VGTID +DESCRIPTOR.message_types_by_name['KeyspaceShard'] = _KEYSPACESHARD +DESCRIPTOR.message_types_by_name['Journal'] = _JOURNAL DESCRIPTOR.message_types_by_name['VEvent'] = _VEVENT DESCRIPTOR.message_types_by_name['VStreamRequest'] = _VSTREAMREQUEST DESCRIPTOR.message_types_by_name['VStreamResponse'] = _VSTREAMRESPONSE @@ -1172,6 +1326,7 @@ DESCRIPTOR.message_types_by_name['VStreamRowsResponse'] = _VSTREAMROWSRESPONSE DESCRIPTOR.enum_types_by_name['OnDDLAction'] = _ONDDLACTION DESCRIPTOR.enum_types_by_name['VEventType'] = _VEVENTTYPE +DESCRIPTOR.enum_types_by_name['MigrationType'] = _MIGRATIONTYPE _sym_db.RegisterFileDescriptor(DESCRIPTOR) Charset = _reflection.GeneratedProtocolMessageType('Charset', (_message.Message,), dict( @@ -1280,6 +1435,20 @@ )) _sym_db.RegisterMessage(VGtid) +KeyspaceShard = _reflection.GeneratedProtocolMessageType('KeyspaceShard', (_message.Message,), dict( + DESCRIPTOR = _KEYSPACESHARD, + __module__ = 'binlogdata_pb2' + # @@protoc_insertion_point(class_scope:binlogdata.KeyspaceShard) + )) +_sym_db.RegisterMessage(KeyspaceShard) + +Journal = _reflection.GeneratedProtocolMessageType('Journal', (_message.Message,), dict( + DESCRIPTOR = _JOURNAL, + __module__ = 'binlogdata_pb2' + # @@protoc_insertion_point(class_scope:binlogdata.Journal) + )) +_sym_db.RegisterMessage(Journal) + VEvent = _reflection.GeneratedProtocolMessageType('VEvent', (_message.Message,), dict( DESCRIPTOR = _VEVENT, __module__ = 'binlogdata_pb2' diff --git a/test/backup.py b/test/backup.py index ebe06836ed8..63a17d2cdc9 100755 --- a/test/backup.py +++ b/test/backup.py @@ -31,6 +31,7 @@ use_mysqlctld = False use_xtrabackup = False +xtrabackup_stripes = 0 stream_mode = 'tar' tablet_master = None tablet_replica1 = None @@ -48,6 +49,7 @@ def setUpModule(): '-xtrabackup_stream_mode', stream_mode, '-xtrabackup_user=vt_dba', + '-xtrabackup_stripes=%d' % (xtrabackup_stripes), '-xtrabackup_backup_flags', '--password=VtDbaPass'] @@ -539,7 +541,7 @@ def _restore_in_place(t): def test_terminated_restore(self): stop_restore_msg = 'Copying file 10' if use_xtrabackup: - stop_restore_msg = 'Restore: Preparing the files' + stop_restore_msg = 'Restore: Preparing' def _terminated_restore(t): for e in utils.vtctld_connection.execute_vtctl_command( ['RestoreFromBackup', t.tablet_alias]): diff --git a/test/config.json b/test/config.json index c407ed00874..f409b430beb 100644 --- a/test/config.json +++ b/test/config.json @@ -269,6 +269,15 @@ "RetryMax": 0, "Tags": [] }, + "prepared_statement": { + "File": "prepared_statement_test.py", + "Args": [], + "Command": [], + "Manual": false, + "Shard": 4, + "RetryMax": 0, + "Tags": [] + }, "mysqlctl": { "File": "mysqlctl.py", "Args": [], diff --git a/test/keyspace_test.py b/test/keyspace_test.py index 8d7e997b2c5..11535480141 100755 --- a/test/keyspace_test.py +++ b/test/keyspace_test.py @@ -15,6 +15,7 @@ # limitations under the License. import unittest +import json from vtdb import vtgate_client @@ -300,6 +301,9 @@ def test_remove_keyspace_cell(self): utils.run_vtctl( ['InitTablet', '-port=1234', '-keyspace=test_delete_keyspace', '-shard=0', 'test_ca-0000000100', 'master']) + utils.run_vtctl( + ['InitTablet', '-port=1234', '-keyspace=test_delete_keyspace', + '-shard=1', 'test_ca-0000000101', 'master']) utils.run_vtctl( ['InitTablet', '-port=1234', '-keyspace=test_delete_keyspace', '-shard=0', 'test_nj-0000000100', 'replica']) @@ -315,11 +319,24 @@ def test_remove_keyspace_cell(self): utils.run_vtctl( ['GetShardReplication', 'test_nj', 'test_delete_keyspace/1']) utils.run_vtctl(['GetSrvKeyspace', 'test_nj', 'test_delete_keyspace']) + utils.run_vtctl(['GetSrvKeyspace', 'test_ca', 'test_delete_keyspace']) # Just remove the shard from one cell (including tablets), # but leaving the global records and other cells/shards alone. utils.run_vtctl( ['RemoveShardCell', '-recursive', 'test_delete_keyspace/0', 'test_nj']) + # Check that the shard is gone from test_nj. + srv_keyspace = utils.run_vtctl_json(['GetSrvKeyspace', 'test_nj', 'test_delete_keyspace']) + for partition in srv_keyspace['partitions']: + self.assertEqual(len(partition['shard_references']), 1, + 'RemoveShardCell should have removed one shard from the target cell: ' + + json.dumps(srv_keyspace)) + # Make sure the shard is still serving in test_ca. + srv_keyspace = utils.run_vtctl_json(['GetSrvKeyspace', 'test_ca', 'test_delete_keyspace']) + for partition in srv_keyspace['partitions']: + self.assertEqual(len(partition['shard_references']), 2, + 'RemoveShardCell should not have changed other cells: ' + + json.dumps(srv_keyspace)) utils.run_vtctl(['RebuildKeyspaceGraph', 'test_delete_keyspace']) utils.run_vtctl(['GetKeyspace', 'test_delete_keyspace']) diff --git a/test/local_example.sh b/test/local_example.sh index 9b3b2fe1643..88d3ca5253e 100755 --- a/test/local_example.sh +++ b/test/local_example.sh @@ -18,6 +18,7 @@ # timeout in seconds (for each step, not overall) timeout=30 +export TOPO=zk2 cd $VTTOP/examples/local diff --git a/test/prepared_statement_test.py b/test/prepared_statement_test.py new file mode 100755 index 00000000000..963f2550c6f --- /dev/null +++ b/test/prepared_statement_test.py @@ -0,0 +1,301 @@ +#!/usr/bin/env python +# +# 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. + +"""Ensures the vtgate MySQL server protocol plugin works as expected with prepared statments. + +We use table ACLs to verify the user name authenticated by the connector is +set properly. +""" + +import datetime +import socket +import unittest + +import mysql.connector +from mysql.connector import FieldType +from mysql.connector.cursor import MySQLCursorPrepared +from mysql.connector.errors import Error + +import environment +import utils +import tablet +import warnings + +# single shard / 2 tablets +shard_0_master = tablet.Tablet() +shard_0_slave = tablet.Tablet() + +table_acl_config = environment.tmproot + '/table_acl_config.json' +mysql_auth_server_static = (environment.tmproot + + '/mysql_auth_server_static.json') + + +json_example = '''{ + "quiz": { + "sport": { + "q1": { + "question": "Which one is correct team name in NBA?", + "options": [ + "New York Bulls", + "Los Angeles Kings", + "Golden State Warriros", + "Huston Rocket" + ], + "answer": "Huston Rocket" + } + }, + "maths": { + "q1": { + "question": "5 + 7 = ?", + "options": [ + "10", + "11", + "12", + "13" + ], + "answer": "12" + }, + "q2": { + "question": "12 - 8 = ?", + "options": [ + "1", + "2", + "3", + "4" + ], + "answer": "4" + } + } + } +}''' + +insert_stmt = '''insert into vt_prepare_stmt_test values(%s, %s, %s, %s, %s, %s, %s, + %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)''' + +def setUpModule(): + try: + environment.topo_server().setup() + + # setup all processes + setup_procs = [ + shard_0_master.init_mysql(), + shard_0_slave.init_mysql(), + ] + utils.wait_procs(setup_procs) + + utils.run_vtctl(['CreateKeyspace', 'test_keyspace']) + + shard_0_master.init_tablet('replica', 'test_keyspace', '0') + shard_0_slave.init_tablet('replica', 'test_keyspace', '0') + + # create databases so vttablet can start behaving normally + shard_0_master.create_db('vt_test_keyspace') + shard_0_slave.create_db('vt_test_keyspace') + + except: + tearDownModule() + raise + + +def tearDownModule(): + utils.required_teardown() + if utils.options.skip_teardown: + return + + shard_0_master.kill_vttablet() + shard_0_slave.kill_vttablet() + + teardown_procs = [ + shard_0_master.teardown_mysql(), + shard_0_slave.teardown_mysql(), + ] + utils.wait_procs(teardown_procs, raise_on_error=False) + + environment.topo_server().teardown() + utils.kill_sub_processes() + utils.remove_tmp_files() + + shard_0_master.remove_tree() + shard_0_slave.remove_tree() + + +create_vt_prepare_test = '''create table vt_prepare_stmt_test ( +id bigint auto_increment, +msg varchar(64), +keyspace_id bigint(20) unsigned NOT NULL, +tinyint_unsigned TINYINT, +bool_signed BOOL, +smallint_unsigned SMALLINT, +mediumint_unsigned MEDIUMINT, +int_unsigned INT, +float_unsigned FLOAT(10,2), +double_unsigned DOUBLE(16,2), +decimal_unsigned DECIMAL, +t_date DATE, +t_datetime DATETIME, +t_time TIME, +t_timestamp TIMESTAMP, +c8 bit(8) DEFAULT NULL, +c16 bit(16) DEFAULT NULL, +c24 bit(24) DEFAULT NULL, +c32 bit(32) DEFAULT NULL, +c40 bit(40) DEFAULT NULL, +c48 bit(48) DEFAULT NULL, +c56 bit(56) DEFAULT NULL, +c63 bit(63) DEFAULT NULL, +c64 bit(64) DEFAULT NULL, +json_col JSON, +text_col TEXT, +data longblob, +primary key (id) +) Engine=InnoDB''' + + +class TestPreparedStatements(unittest.TestCase): + """This test makes sure that prepared statements is working correctly. + """ + + def test_prepared_statements(self): + with open(table_acl_config, 'w') as fd: + fd.write("""{ + "table_groups": [ + { + "table_names_or_prefixes": ["vt_prepare_stmt_test", "dual"], + "readers": ["vtgate client 1"], + "writers": ["vtgate client 1"], + "admins": ["vtgate client 1"] + } + ] +} +""") + + with open(mysql_auth_server_static, 'w') as fd: + fd.write("""{ + "testuser1": { + "Password": "testpassword1", + "UserData": "vtgate client 1" + }, + "testuser2": { + "Password": "testpassword2", + "UserData": "vtgate client 2" + } +} +""") + + # start the tablets + shard_0_master.start_vttablet(wait_for_state='NOT_SERVING', + table_acl_config=table_acl_config) + shard_0_slave.start_vttablet(wait_for_state='NOT_SERVING', + table_acl_config=table_acl_config) + + # setup replication + utils.run_vtctl(['InitShardMaster', '-force', 'test_keyspace/0', + shard_0_master.tablet_alias], auto_log=True) + utils.run_vtctl(['ApplySchema', '-sql', create_vt_prepare_test, + 'test_keyspace']) + for t in [shard_0_master, shard_0_slave]: + utils.run_vtctl(['RunHealthCheck', t.tablet_alias]) + + # start vtgate + utils.VtGate(mysql_server=True).start( + extra_args=['-mysql_auth_server_impl', 'static', + '-mysql_server_query_timeout', '1s', + '-mysql_auth_server_static_file', mysql_auth_server_static]) + # We use gethostbyname('localhost') so we don't presume + # of the IP format (travis is only IP v4, really). + params = dict(host=socket.gethostbyname('localhost'), + port=utils.vtgate.mysql_port, + user='testuser1', + passwd='testpassword1', + db='test_keyspace', + use_pure=True) + + # 'vtgate client 1' is authorized to access vt_prepare_insert_test + conn = mysql.connector.Connect(**params) + cursor = conn.cursor() + cursor.execute('select * from vt_prepare_stmt_test', {}) + cursor.fetchone() + cursor.close() + + cursor = conn.cursor() + try: + cursor.execute('selet * from vt_prepare_stmt_test', {}) + cursor.close() + except mysql.connector.Error as err: + if err.errno == 1105: + print "Captured the error" + else: + raise + + # Insert several rows using prepared statements + text_value = "text" * 100 # Large text value + largeComment = 'L' * ((4 * 1024) + 1) # Large blob + + # Set up the values for the prepared statement + cursor = conn.cursor(cursor_class=MySQLCursorPrepared) + for i in range(1, 100): + insert_values = (i, str(i) + "21", i * 100, 127, 1, 32767, 8388607, 2147483647, 2.55, 64.9,55.5, + datetime.date(2009, 5, 5), datetime.date(2009, 5, 5), datetime.datetime.now().time(), datetime.date(2009, 5, 5), + 1,1,1,1,1,1,1,1,1, json_example, text_value, largeComment) + cursor.execute(insert_stmt, insert_values) + + cursor.fetchone() + cursor.close() + + cursor = conn.cursor(cursor_class=MySQLCursorPrepared) + cursor.execute('select * from vt_prepare_stmt_test where id = %s', (1,)) + result = cursor.fetchall() + + # Validate the query results. + if cursor.rowcount != 1: + self.fail('expected 1 row got ' + str(cursor.rowcount)) + + if result[0][1] != "121": + self.fail('Received incorrect value, wanted: 121, got ' + result[1]) + + cursor.close() + + # Update a row using prepared statements + updated_text_value = "text_col_msg" + updated_data_value = "updated" + + cursor = conn.cursor(cursor_class=MySQLCursorPrepared) + cursor.execute('update vt_prepare_stmt_test set data = %s , text_col = %s where id = %s', (updated_data_value, updated_text_value, 1)) + cursor.close() + + # Validate the update results + cursor = conn.cursor(cursor_class=MySQLCursorPrepared) + cursor.execute('select * from vt_prepare_stmt_test where id = %s', (1,)) + result = cursor.fetchone() + if result[-1] != updated_data_value or result[-2] != updated_text_value: + self.fail("Received incorrect values") + cursor.close() + + # Delete from table using prepared statements + cursor = conn.cursor(cursor_class=MySQLCursorPrepared) + cursor.execute('delete from vt_prepare_stmt_test where text_col = %s', (text_value,)) + cursor.close() + + # Validate Deletion + cursor = conn.cursor(cursor_class=MySQLCursorPrepared) + cursor.execute('select count(*) from vt_prepare_stmt_test') + res = cursor.fetchone() + if res[0] != 1: + self.fail("Delete failed") + cursor.close() + +if __name__ == '__main__': + utils.main() diff --git a/test/xtrabackup_xbstream.py b/test/xtrabackup_xbstream.py index 751d2f6af62..0f027185211 100755 --- a/test/xtrabackup_xbstream.py +++ b/test/xtrabackup_xbstream.py @@ -23,4 +23,5 @@ if __name__ == '__main__': backup.use_xtrabackup = True backup.stream_mode = 'xbstream' + backup.xtrabackup_stripes = 8 utils.main(backup) diff --git a/vagrant-scripts/bootstrap_vm.sh b/vagrant-scripts/bootstrap_vm.sh index bc1d0150207..05edbe05b45 100755 --- a/vagrant-scripts/bootstrap_vm.sh +++ b/vagrant-scripts/bootstrap_vm.sh @@ -30,10 +30,11 @@ apt-get install -y make \ pkg-config \ bison \ curl \ - openjdk-7-jdk \ + openjdk-8-jdk \ ant \ zip \ unzip +pip install mysql-connector-python # Install golang GO_VER='1.11.1' diff --git a/vagrant-scripts/vitess/build.sh b/vagrant-scripts/vitess/build.sh index 100b2f202c3..eb1745dcbdc 100755 --- a/vagrant-scripts/vitess/build.sh +++ b/vagrant-scripts/vitess/build.sh @@ -10,6 +10,9 @@ export VT_MYSQL_ROOT=/usr printf "\nBuilding Vitess...\n" +# Stopping on errors makes them easier to see +set -e + # This is just to make sure the vm can write into these directories sudo chown "$(whoami)":"$(whoami)" /vagrant sudo chown "$(whoami)":"$(whoami)" /vagrant/src @@ -26,4 +29,4 @@ source /vagrant/dist/grpc/usr/local/bin/activate pip install mysqlclient make build -printf "\Build completed\n\n" +printf "\nBuild completed\n\n" diff --git a/vagrant-scripts/vitess/start.sh b/vagrant-scripts/vitess/start.sh index 1fd980dc37b..751bb723aef 100755 --- a/vagrant-scripts/vitess/start.sh +++ b/vagrant-scripts/vitess/start.sh @@ -9,6 +9,8 @@ export VTDATAROOT=/tmp/vtdata-dev export MYSQL_FLAVOR=MySQL56 cd "$VITESS_WORKSPACE"/examples/local export SHARD="-" +export TOPO="zk2" + ./zk-up.sh ./vtctld-up.sh --enable-grpc-static-auth ./vttablet-up.sh --enable-grpc-static-auth diff --git a/vendor/vendor.json b/vendor/vendor.json index 3c0f16a409c..fa174afbc19 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -3,34 +3,68 @@ "ignore": "appengine test", "package": [ { - "checksumSHA1": "ZLRh6zW4/DnVsGpgtt+ZiIaEFKc=", + "checksumSHA1": "b1KgRkWqz0RmrEBK6IJ8kOJva6w=", "path": "cloud.google.com/go/compute/metadata", - "revision": "686f0e89858ea78eae54d4b2021e6bfc7d3a30ca", - "revisionTime": "2016-12-16T21:27:53Z" + "revision": "cdaaf98f9226c39dc162b8e55083b2fbc67b4674", + "revisionTime": "2019-07-12T19:01:42Z", + "version": "v0.43.0", + "versionExact": "v0.43.0" }, { - "checksumSHA1": "4iounbuF7SMZdx/MlKSUuhnV848=", + "checksumSHA1": "+S/9jBntS1iHZwxkR64vsy97Gh8=", + "path": "cloud.google.com/go/iam", + "revision": "cdaaf98f9226c39dc162b8e55083b2fbc67b4674", + "revisionTime": "2019-07-12T19:01:42Z", + "version": "v0.43.0", + "versionExact": "v0.43.0" + }, + { + "checksumSHA1": "JfGXEtr79UaxukcL05IERkjYm/g=", "path": "cloud.google.com/go/internal", - "revision": "686f0e89858ea78eae54d4b2021e6bfc7d3a30ca", - "revisionTime": "2016-12-16T21:27:53Z" + "revision": "cdaaf98f9226c39dc162b8e55083b2fbc67b4674", + "revisionTime": "2019-07-12T19:01:42Z", + "version": "v0.43.0", + "versionExact": "v0.43.0" }, { - "checksumSHA1": "W2xJ0+fvugRhRi1PMi64bYofBbU=", + "checksumSHA1": "wQ4uGuRwMb24vG16pPQDOOCPkFo=", "path": "cloud.google.com/go/internal/optional", - "revision": "686f0e89858ea78eae54d4b2021e6bfc7d3a30ca", - "revisionTime": "2016-12-16T21:27:53Z" + "revision": "cdaaf98f9226c39dc162b8e55083b2fbc67b4674", + "revisionTime": "2019-07-12T19:01:42Z", + "version": "v0.43.0", + "versionExact": "v0.43.0" }, { - "checksumSHA1": "9q9/aJWq19uF6NE4tx4qJvP5Uho=", + "checksumSHA1": "5Jz6j0verpzBzMwIEZai+EbV6Ls=", "path": "cloud.google.com/go/internal/testutil", - "revision": "686f0e89858ea78eae54d4b2021e6bfc7d3a30ca", - "revisionTime": "2016-12-16T21:27:53Z" + "revision": "cdaaf98f9226c39dc162b8e55083b2fbc67b4674", + "revisionTime": "2019-07-12T19:01:42Z", + "version": "v0.43.0", + "versionExact": "v0.43.0" }, { - "checksumSHA1": "cHbMVt14iTMFZHeZMM9Q06dSV+M=", + "checksumSHA1": "jHOn3QLqvr1luNqyOg24/BXLrsM=", + "path": "cloud.google.com/go/internal/trace", + "revision": "cdaaf98f9226c39dc162b8e55083b2fbc67b4674", + "revisionTime": "2019-07-12T19:01:42Z", + "version": "v0.43.0", + "versionExact": "v0.43.0" + }, + { + "checksumSHA1": "FSifvUBJjm4OsSU5rp5s5+bqvN0=", + "path": "cloud.google.com/go/internal/version", + "revision": "cdaaf98f9226c39dc162b8e55083b2fbc67b4674", + "revisionTime": "2019-07-12T19:01:42Z", + "version": "v0.43.0", + "versionExact": "v0.43.0" + }, + { + "checksumSHA1": "tof7cbQFVwy2rN/iJfKXDKUf4rs=", "path": "cloud.google.com/go/storage", - "revision": "686f0e89858ea78eae54d4b2021e6bfc7d3a30ca", - "revisionTime": "2016-12-16T21:27:53Z" + "revision": "cdaaf98f9226c39dc162b8e55083b2fbc67b4674", + "revisionTime": "2019-07-12T19:01:42Z", + "version": "v0.43.0", + "versionExact": "v0.43.0" }, { "checksumSHA1": "t5pzf8AGtuCmECrPlJM9oAky+dk=", @@ -397,98 +431,100 @@ "revisionTime": "2016-01-21T18:51:14Z" }, { - "checksumSHA1": "BP2buXHHOKxI5eYS2xELVng2kf4=", + "checksumSHA1": "MgBmXopyMTVxPYgWfLrSsMIFE84=", "path": "github.com/golang/protobuf/jsonpb", - "revision": "aa810b61a9c79d51363740d207bb46cf8e620ed5", - "revisionTime": "2018-08-14T21:14:27Z", - "version": "v1.2.0", - "versionExact": "v1.2.0" + "revision": "6c65a5562fc06764971b7c5d05c76c75e84bdbf7", + "revisionTime": "2019-07-01T18:22:01Z", + "version": "v1.3.2", + "versionExact": "v1.3.2" }, { - "checksumSHA1": "3QpmjZApyomODlDRgXomf4DgsJU=", + "checksumSHA1": "78dam9bgu36kpCiQPsy5ni3s1cs=", "path": "github.com/golang/protobuf/jsonpb/jsonpb_test_proto", - "revision": "aa810b61a9c79d51363740d207bb46cf8e620ed5", - "revisionTime": "2018-08-14T21:14:27Z", - "version": "v1.2.0", - "versionExact": "v1.2.0" + "revision": "6c65a5562fc06764971b7c5d05c76c75e84bdbf7", + "revisionTime": "2019-07-01T18:22:01Z", + "version": "v1.3.2", + "versionExact": "v1.3.2" }, { - "checksumSHA1": "mE9XW26JSpe4meBObM6J/Oeq0eg=", + "checksumSHA1": "CGj8VcI/CpzxaNqlqpEVM7qElD4=", "path": "github.com/golang/protobuf/proto", - "revision": "aa810b61a9c79d51363740d207bb46cf8e620ed5", - "revisionTime": "2018-08-14T21:14:27Z", - "version": "v1.2.0", - "versionExact": "v1.2.0" + "revision": "6c65a5562fc06764971b7c5d05c76c75e84bdbf7", + "revisionTime": "2019-07-01T18:22:01Z", + "version": "v1.3.2", + "versionExact": "v1.3.2" }, { - "checksumSHA1": "DlygQR0Ml7JuGquUo2U4C0MJLBs=", + "checksumSHA1": "cQvjaQ6YsQ2s/QOmJeSGMjbyLhU=", "path": "github.com/golang/protobuf/proto/proto3_proto", - "revision": "aa810b61a9c79d51363740d207bb46cf8e620ed5", - "revisionTime": "2018-08-14T21:14:27Z", - "version": "v1.2.0", - "versionExact": "v1.2.0" + "revision": "6c65a5562fc06764971b7c5d05c76c75e84bdbf7", + "revisionTime": "2019-07-01T18:22:01Z", + "version": "v1.3.2", + "versionExact": "v1.3.2" }, { - "checksumSHA1": "jI4LkaFUi2rO9vZwvIJJ9tCY6mM=", + "checksumSHA1": "Ap3fxoENMwxwOM77e56TlCVt+7o=", "path": "github.com/golang/protobuf/proto/test_proto", - "revision": "aa810b61a9c79d51363740d207bb46cf8e620ed5", - "revisionTime": "2018-08-14T21:14:27Z", - "version": "v1.2.0", - "versionExact": "v1.2.0" + "revision": "6c65a5562fc06764971b7c5d05c76c75e84bdbf7", + "revisionTime": "2019-07-01T18:22:01Z", + "version": "v1.3.2", + "versionExact": "v1.3.2" }, { "checksumSHA1": "A0DxiyxXV4u8PmwUwlVkQ2CKyiQ=", "path": "github.com/golang/protobuf/proto/testdata", "revision": "1909bc2f63dc92bb931deace8b8312c4db72d12f", - "revisionTime": "2017-08-08T02:16:21Z" + "revisionTime": "2017-08-08T02:16:21Z", + "version": "v1.3.2", + "versionExact": "v1.3.2" }, { "checksumSHA1": "iqWBA0GWNr+cwAdF2KVy1eq9mlU=", "path": "github.com/golang/protobuf/protoc-gen-go", - "revision": "aa810b61a9c79d51363740d207bb46cf8e620ed5", - "revisionTime": "2018-08-14T21:14:27Z", - "version": "v1.2.0", - "versionExact": "v1.2.0" + "revision": "6c65a5562fc06764971b7c5d05c76c75e84bdbf7", + "revisionTime": "2019-07-01T18:22:01Z", + "version": "v1.3.2", + "versionExact": "v1.3.2" }, { - "checksumSHA1": "DA2cyOt1W92RTyXAqKQ4JWKGR8U=", + "checksumSHA1": "WOkXetG3AqJnfVVuqTJvdukcHps=", "path": "github.com/golang/protobuf/protoc-gen-go/descriptor", - "revision": "aa810b61a9c79d51363740d207bb46cf8e620ed5", - "revisionTime": "2018-08-14T21:14:27Z", - "version": "v1.2.0", - "versionExact": "v1.2.0" + "revision": "6c65a5562fc06764971b7c5d05c76c75e84bdbf7", + "revisionTime": "2019-07-01T18:22:01Z", + "version": "v1.3.2", + "versionExact": "v1.3.2" }, { - "checksumSHA1": "+BH6O73wJlqOQtPGpmnT+5l3tAw=", + "checksumSHA1": "dqkZJ8o1Hj3gbN30RyZ7G3CxhfU=", "path": "github.com/golang/protobuf/protoc-gen-go/generator", - "revision": "aa810b61a9c79d51363740d207bb46cf8e620ed5", - "revisionTime": "2018-08-14T21:14:27Z", - "version": "v1.2.0", - "versionExact": "v1.2.0" + "revision": "6c65a5562fc06764971b7c5d05c76c75e84bdbf7", + "revisionTime": "2019-07-01T18:22:01Z", + "version": "v1.3.2", + "versionExact": "v1.3.2" }, { "checksumSHA1": "uY4dEtqaAe5gsU8gbpCI1JgEIII=", "path": "github.com/golang/protobuf/protoc-gen-go/generator/internal/remap", - "revision": "aa810b61a9c79d51363740d207bb46cf8e620ed5", - "revisionTime": "2018-08-14T21:14:27Z", - "version": "v1.2.0", - "versionExact": "v1.2.0" + "revision": "6c65a5562fc06764971b7c5d05c76c75e84bdbf7", + "revisionTime": "2019-07-01T18:22:01Z", + "version": "v1.3.2", + "versionExact": "v1.3.2" }, { - "checksumSHA1": "EGcFhhLBcZ2f7hTDhtkuK6q1MUc=", + "checksumSHA1": "fejUXovU2abLTPX7kU8fzwT8Kmo=", "path": "github.com/golang/protobuf/protoc-gen-go/grpc", - "revision": "aa810b61a9c79d51363740d207bb46cf8e620ed5", - "revisionTime": "2018-08-14T21:14:27Z", - "version": "v1.2.0", - "versionExact": "v1.2.0" + "revision": "6c65a5562fc06764971b7c5d05c76c75e84bdbf7", + "revisionTime": "2019-07-01T18:22:01Z", + "version": "v1.3.2", + "versionExact": "v1.3.2" }, { "checksumSHA1": "h4PLbJDYnRmcUuf56USJ5K3xJOg=", "path": "github.com/golang/protobuf/protoc-gen-go/plugin", - "revision": "aa810b61a9c79d51363740d207bb46cf8e620ed5", - "revisionTime": "2018-08-14T21:14:27Z", - "version": "v1.2.0", - "versionExact": "v1.2.0" + "revision": "6c65a5562fc06764971b7c5d05c76c75e84bdbf7", + "revisionTime": "2019-07-01T18:22:01Z", + "version": "v1.3.2", + "versionExact": "v1.3.2" }, { "checksumSHA1": "/vLtyN6HK5twSZIFerD199YTmjk=", @@ -497,52 +533,52 @@ "revisionTime": "2016-11-03T22:44:32Z" }, { - "checksumSHA1": "tkJPssYejSjuAwE2tdEnoEIj93Q=", + "checksumSHA1": "aEiR2m3NGaMGTbUW5P+w5gKFyc8=", "path": "github.com/golang/protobuf/ptypes", - "revision": "aa810b61a9c79d51363740d207bb46cf8e620ed5", - "revisionTime": "2018-08-14T21:14:27Z", - "version": "v1.2.0", - "versionExact": "v1.2.0" + "revision": "6c65a5562fc06764971b7c5d05c76c75e84bdbf7", + "revisionTime": "2019-07-01T18:22:01Z", + "version": "v1.3.2", + "versionExact": "v1.3.2" }, { - "checksumSHA1": "G0aiY+KmzFsQLTNzRAGRhJNSj7A=", + "checksumSHA1": "2/Xg4L9IVGQRJB8zCELZx7/Z4HU=", "path": "github.com/golang/protobuf/ptypes/any", - "revision": "aa810b61a9c79d51363740d207bb46cf8e620ed5", - "revisionTime": "2018-08-14T21:14:27Z", - "version": "v1.2.0", - "versionExact": "v1.2.0" + "revision": "6c65a5562fc06764971b7c5d05c76c75e84bdbf7", + "revisionTime": "2019-07-01T18:22:01Z", + "version": "v1.3.2", + "versionExact": "v1.3.2" }, { - "checksumSHA1": "kjVDCbK5/WiHqP1g4GMUxm75jos=", + "checksumSHA1": "RE9rLveNHapyMKQC8p10tbkUE9w=", "path": "github.com/golang/protobuf/ptypes/duration", - "revision": "aa810b61a9c79d51363740d207bb46cf8e620ed5", - "revisionTime": "2018-08-14T21:14:27Z", - "version": "v1.2.0", - "versionExact": "v1.2.0" + "revision": "6c65a5562fc06764971b7c5d05c76c75e84bdbf7", + "revisionTime": "2019-07-01T18:22:01Z", + "version": "v1.3.2", + "versionExact": "v1.3.2" }, { - "checksumSHA1": "VCwyXqpYo81QNvC7z6nsp+yczc4=", + "checksumSHA1": "RT/PGRMtH/yBCbIJfZftaz5yc3M=", "path": "github.com/golang/protobuf/ptypes/struct", - "revision": "aa810b61a9c79d51363740d207bb46cf8e620ed5", - "revisionTime": "2018-08-14T21:14:27Z", - "version": "v1.2.0", - "versionExact": "v1.2.0" + "revision": "6c65a5562fc06764971b7c5d05c76c75e84bdbf7", + "revisionTime": "2019-07-01T18:22:01Z", + "version": "v1.3.2", + "versionExact": "v1.3.2" }, { - "checksumSHA1": "FdeygjOuyR2p5v9b0kNOtzfpjS4=", + "checksumSHA1": "seEwY2xETpK9yHJ9+bHqkLZ0VMU=", "path": "github.com/golang/protobuf/ptypes/timestamp", - "revision": "aa810b61a9c79d51363740d207bb46cf8e620ed5", - "revisionTime": "2018-08-14T21:14:27Z", - "version": "v1.2.0", - "versionExact": "v1.2.0" + "revision": "6c65a5562fc06764971b7c5d05c76c75e84bdbf7", + "revisionTime": "2019-07-01T18:22:01Z", + "version": "v1.3.2", + "versionExact": "v1.3.2" }, { - "checksumSHA1": "7sWfJ35gaddpCbcKYZRG2nL6eQo=", + "checksumSHA1": "KlQCb83HC090bojw4ofNDxn2nho=", "path": "github.com/golang/protobuf/ptypes/wrappers", - "revision": "aa810b61a9c79d51363740d207bb46cf8e620ed5", - "revisionTime": "2018-08-14T21:14:27Z", - "version": "v1.2.0", - "versionExact": "v1.2.0" + "revision": "6c65a5562fc06764971b7c5d05c76c75e84bdbf7", + "revisionTime": "2019-07-01T18:22:01Z", + "version": "v1.3.2", + "versionExact": "v1.3.2" }, { "checksumSHA1": "p/8vSviYF91gFflhrt5vkyksroo=", @@ -550,12 +586,48 @@ "revision": "553a641470496b2327abcac10b36396bd98e45c9", "revisionTime": "2017-02-15T23:32:05Z" }, + { + "checksumSHA1": "HYqCnwjrsx9RYvx7uA0EkzLGnxA=", + "path": "github.com/google/go-cmp/cmp", + "revision": "6d8cafd2f64fe3cd66b7530d95df066b00bdd777", + "revisionTime": "2019-08-01T21:37:55Z" + }, + { + "checksumSHA1": "FUnTgtE5i3f8asIvicGkJSFlrts=", + "path": "github.com/google/go-cmp/cmp/internal/diff", + "revision": "6d8cafd2f64fe3cd66b7530d95df066b00bdd777", + "revisionTime": "2019-08-01T21:37:55Z" + }, + { + "checksumSHA1": "nR8EJ8i8lqxxmtLPnXI7WlYANiE=", + "path": "github.com/google/go-cmp/cmp/internal/flags", + "revision": "6d8cafd2f64fe3cd66b7530d95df066b00bdd777", + "revisionTime": "2019-08-01T21:37:55Z" + }, + { + "checksumSHA1": "0pcLJsUQUaBdPXM5LuL9uFeuETs=", + "path": "github.com/google/go-cmp/cmp/internal/function", + "revision": "6d8cafd2f64fe3cd66b7530d95df066b00bdd777", + "revisionTime": "2019-08-01T21:37:55Z" + }, + { + "checksumSHA1": "ZNN1jJuHnBCpo21lSv25VvkotIM=", + "path": "github.com/google/go-cmp/cmp/internal/value", + "revision": "6d8cafd2f64fe3cd66b7530d95df066b00bdd777", + "revisionTime": "2019-08-01T21:37:55Z" + }, { "checksumSHA1": "V/53BpqgOkSDZCX6snQCAkdO2fM=", "path": "github.com/googleapis/gax-go", "revision": "da06d194a00e19ce00d9011a13931c3f6f6887c7", "revisionTime": "2016-11-07T00:24:06Z" }, + { + "checksumSHA1": "WZoHSeTnVjnPIX2+U1Otst5MUKw=", + "path": "github.com/googleapis/gax-go/v2", + "revision": "bd5b16380fd03dc758d11cef74ba2e3bc8b0e8c2", + "revisionTime": "2019-05-13T18:38:25Z" + }, { "checksumSHA1": "P3zGmsNjW8m15a+nks4FdVpFKwE=", "path": "github.com/gopherjs/gopherjs/js", @@ -618,6 +690,12 @@ "revision": "6bb64b370b90e7ef1fa532be9e591a81c3493e00", "revisionTime": "2016-05-03T14:34:40Z" }, + { + "checksumSHA1": "UThRII2e7MEeIJ2sTHbCXC+4tKU=", + "path": "github.com/hashicorp/golang-lru/simplelru", + "revision": "7f827b33c0f158ec5dfbba01bb0b14a4541fd81d", + "revisionTime": "2019-07-26T16:11:22Z" + }, { "checksumSHA1": "E3Xcanc9ouQwL+CZGOUyA/+giLg=", "path": "github.com/hashicorp/serf/coordinate", @@ -834,12 +912,6 @@ "revision": "abf152e5f3e97f2fafac028d2cc06c1feb87ffa5", "revisionTime": "2016-04-11T19:08:41Z" }, - { - "checksumSHA1": "dF3fORwN1HTgrlrdmll9K2cOjOg=", - "path": "github.com/samuel/go-zookeeper/zk", - "revision": "e64db453f3512cade908163702045e0f31137843", - "revisionTime": "2016-06-16T02:49:54Z" - }, { "checksumSHA1": "zmC8/3V4ls53DJlNTKDZwPSC/dA=", "path": "github.com/satori/go.uuid", @@ -1098,6 +1170,114 @@ "revision": "ecda9a501e8220fae3b4b600c3db4b0ba22cfc68", "revisionTime": "2017-03-16T03:48:04Z" }, + { + "checksumSHA1": "az5f5DY8K9vZizIo4mjHNPAALUA=", + "path": "github.com/z-division/go-zookeeper/zk", + "revision": "6d7457066b9b62f64b9a884659d89ad5c5ad5173", + "revisionTime": "2019-01-28T07:28:38Z" + }, + { + "checksumSHA1": "w+WRj7WpdItd5iR7PcaQQKMrVB0=", + "path": "go.opencensus.io", + "revision": "b4a14686f0a98096416fe1b4cb848e384fb2b22b", + "revisionTime": "2019-07-13T07:22:01Z" + }, + { + "checksumSHA1": "KLZy3Nh+8JlI04JmBa/Jc8fxrVQ=", + "path": "go.opencensus.io/internal", + "revision": "b4a14686f0a98096416fe1b4cb848e384fb2b22b", + "revisionTime": "2019-07-13T07:22:01Z" + }, + { + "checksumSHA1": "Dw3rpna1DwTa7TCzijInKcU49g4=", + "path": "go.opencensus.io/internal/tagencoding", + "revision": "b4a14686f0a98096416fe1b4cb848e384fb2b22b", + "revisionTime": "2019-07-13T07:22:01Z" + }, + { + "checksumSHA1": "r6fbtPwxK4/TYUOWc7y0hXdAG4Q=", + "path": "go.opencensus.io/metric/metricdata", + "revision": "b4a14686f0a98096416fe1b4cb848e384fb2b22b", + "revisionTime": "2019-07-13T07:22:01Z" + }, + { + "checksumSHA1": "kWj13srwY1SH5KgFecPhEfHnzVc=", + "path": "go.opencensus.io/metric/metricproducer", + "revision": "b4a14686f0a98096416fe1b4cb848e384fb2b22b", + "revisionTime": "2019-07-13T07:22:01Z" + }, + { + "checksumSHA1": "kZAPvdijG2qWdS00Vt2NS4kH02k=", + "path": "go.opencensus.io/plugin/ocgrpc", + "revision": "b4a14686f0a98096416fe1b4cb848e384fb2b22b", + "revisionTime": "2019-07-13T07:22:01Z" + }, + { + "checksumSHA1": "Ur+xijNXCbNHR8Q5VjW1czSAabo=", + "path": "go.opencensus.io/plugin/ochttp", + "revision": "b4a14686f0a98096416fe1b4cb848e384fb2b22b", + "revisionTime": "2019-07-13T07:22:01Z" + }, + { + "checksumSHA1": "UZhIoErIy1tKLmVT/5huwlp6KFQ=", + "path": "go.opencensus.io/plugin/ochttp/propagation/b3", + "revision": "b4a14686f0a98096416fe1b4cb848e384fb2b22b", + "revisionTime": "2019-07-13T07:22:01Z" + }, + { + "checksumSHA1": "q+y8X+5nDONIlJlxfkv+OtA18ds=", + "path": "go.opencensus.io/resource", + "revision": "b4a14686f0a98096416fe1b4cb848e384fb2b22b", + "revisionTime": "2019-07-13T07:22:01Z" + }, + { + "checksumSHA1": "Cc4tRuW0IjlfAFY8BcdfMDqG0R8=", + "path": "go.opencensus.io/stats", + "revision": "b4a14686f0a98096416fe1b4cb848e384fb2b22b", + "revisionTime": "2019-07-13T07:22:01Z" + }, + { + "checksumSHA1": "oIo4NRi6AVCfcwVfHzCXAsoZsdI=", + "path": "go.opencensus.io/stats/internal", + "revision": "b4a14686f0a98096416fe1b4cb848e384fb2b22b", + "revisionTime": "2019-07-13T07:22:01Z" + }, + { + "checksumSHA1": "vN9GN1vwD4RU/3ld2tKK00K0i94=", + "path": "go.opencensus.io/stats/view", + "revision": "b4a14686f0a98096416fe1b4cb848e384fb2b22b", + "revisionTime": "2019-07-13T07:22:01Z" + }, + { + "checksumSHA1": "AoqL/neZwl05Fv08vcXXlhbY12g=", + "path": "go.opencensus.io/tag", + "revision": "b4a14686f0a98096416fe1b4cb848e384fb2b22b", + "revisionTime": "2019-07-13T07:22:01Z" + }, + { + "checksumSHA1": "0O3djqX4bcg5O9LZdcinEoYeQKs=", + "path": "go.opencensus.io/trace", + "revision": "b4a14686f0a98096416fe1b4cb848e384fb2b22b", + "revisionTime": "2019-07-13T07:22:01Z" + }, + { + "checksumSHA1": "JkvEb8oMEFjic5K/03Tyr5Lok+w=", + "path": "go.opencensus.io/trace/internal", + "revision": "b4a14686f0a98096416fe1b4cb848e384fb2b22b", + "revisionTime": "2019-07-13T07:22:01Z" + }, + { + "checksumSHA1": "FHJParRi8f1GHO7Cx+lk3bMWBq0=", + "path": "go.opencensus.io/trace/propagation", + "revision": "b4a14686f0a98096416fe1b4cb848e384fb2b22b", + "revisionTime": "2019-07-13T07:22:01Z" + }, + { + "checksumSHA1": "UHbxxaMqpEPsubh8kPwzSlyEwqI=", + "path": "go.opencensus.io/trace/tracestate", + "revision": "b4a14686f0a98096416fe1b4cb848e384fb2b22b", + "revisionTime": "2019-07-13T07:22:01Z" + }, { "checksumSHA1": "FwW3Vv4jW0Nv7V2SZC7x/Huj5M4=", "path": "golang.org/x/crypto/argon2", @@ -1177,34 +1357,34 @@ "revisionTime": "2018-11-14T21:44:15Z" }, { - "checksumSHA1": "4q+J7KldqFG28gkuEdHTyHgNcz4=", + "checksumSHA1": "uRlaEkyMCxyjj57KBa81GEfvCwg=", "path": "golang.org/x/oauth2", - "revision": "04e1573abc896e70388bd387a69753c378d46466", - "revisionTime": "2016-07-30T22:43:56Z" + "revision": "0f29369cfe4552d0e4bcddc57cc75f4d7e672a33", + "revisionTime": "2019-05-07T23:52:07Z" }, { - "checksumSHA1": "Ml9aUD6MMJOwU2ZndUEWjQZA6cs=", + "checksumSHA1": "UmEcak5EiFA6UpbMnlfkQzHyw3M=", "path": "golang.org/x/oauth2/google", - "revision": "04e1573abc896e70388bd387a69753c378d46466", - "revisionTime": "2016-07-30T22:43:56Z" + "revision": "0f29369cfe4552d0e4bcddc57cc75f4d7e672a33", + "revisionTime": "2019-05-07T23:52:07Z" }, { - "checksumSHA1": "D3v/aqfB9swlaZcSksCoF+lbOqo=", + "checksumSHA1": "+9KSfsjsC3F2CldDDb+Dt+d/H3Q=", "path": "golang.org/x/oauth2/internal", - "revision": "04e1573abc896e70388bd387a69753c378d46466", - "revisionTime": "2016-07-30T22:43:56Z" + "revision": "0f29369cfe4552d0e4bcddc57cc75f4d7e672a33", + "revisionTime": "2019-05-07T23:52:07Z" }, { - "checksumSHA1": "A/8+i+ZrWYF+ihbus3fjWVi7u6I=", + "checksumSHA1": "huVltYnXdRFDJLgp/ZP9IALzG7g=", "path": "golang.org/x/oauth2/jws", - "revision": "04e1573abc896e70388bd387a69753c378d46466", - "revisionTime": "2016-07-30T22:43:56Z" + "revision": "0f29369cfe4552d0e4bcddc57cc75f4d7e672a33", + "revisionTime": "2019-05-07T23:52:07Z" }, { - "checksumSHA1": "McqNj0/805YfYQJQGomeB0s+EcU=", + "checksumSHA1": "HGS6ig1GfcE2CBHBsi965ZVn9Xw=", "path": "golang.org/x/oauth2/jwt", - "revision": "04e1573abc896e70388bd387a69753c378d46466", - "revisionTime": "2016-07-30T22:43:56Z" + "revision": "0f29369cfe4552d0e4bcddc57cc75f4d7e672a33", + "revisionTime": "2019-05-07T23:52:07Z" }, { "checksumSHA1": "1CmUDjhZlyKZcbLYlWI7cRzK3fI=", @@ -1309,64 +1489,108 @@ "revisionTime": "2016-10-28T04:02:39Z" }, { - "checksumSHA1": "I1JSeU5OMapl+4s2VrnBkMon3Bw=", + "checksumSHA1": "FhzGDPlkW5SaQGtSgKnjQAiYVk0=", "path": "google.golang.org/api/gensupport", - "revision": "55146ba61254fdb1c26d65ff3c04bc1611ad73fb", - "revisionTime": "2016-12-12T20:09:13Z" + "revision": "02490b97dff7cfde1995bd77de808fd27053bc87", + "revisionTime": "2019-06-24T17:16:18Z", + "version": "v0.7.0", + "versionExact": "v0.7.0" }, { - "checksumSHA1": "BWKmb7kGYbfbvXO6E7tCpTh9zKE=", + "checksumSHA1": "YIDE68w/xMptf6Nu9hHiOwXOvho=", "path": "google.golang.org/api/googleapi", - "revision": "55146ba61254fdb1c26d65ff3c04bc1611ad73fb", - "revisionTime": "2016-12-12T20:09:13Z" + "revision": "02490b97dff7cfde1995bd77de808fd27053bc87", + "revisionTime": "2019-06-24T17:16:18Z", + "version": "v0.7.0", + "versionExact": "v0.7.0" }, { "checksumSHA1": "1K0JxrUfDqAB3MyRiU1LKjfHyf4=", "path": "google.golang.org/api/googleapi/internal/uritemplates", - "revision": "55146ba61254fdb1c26d65ff3c04bc1611ad73fb", - "revisionTime": "2016-12-12T20:09:13Z" + "revision": "02490b97dff7cfde1995bd77de808fd27053bc87", + "revisionTime": "2019-06-24T17:16:18Z", + "version": "v0.7.0", + "versionExact": "v0.7.0" }, { "checksumSHA1": "Mr2fXhMRzlQCgANFm91s536pG7E=", "path": "google.golang.org/api/googleapi/transport", - "revision": "55146ba61254fdb1c26d65ff3c04bc1611ad73fb", - "revisionTime": "2016-12-12T20:09:13Z" + "revision": "02490b97dff7cfde1995bd77de808fd27053bc87", + "revisionTime": "2019-06-24T17:16:18Z", + "version": "v0.7.0", + "versionExact": "v0.7.0" }, { - "checksumSHA1": "nefIfmUzE2DJD4Tpodz+WHQLfeE=", + "checksumSHA1": "6Tg4dDJKzoSrAA5beVknvnjluOU=", "path": "google.golang.org/api/internal", - "revision": "55146ba61254fdb1c26d65ff3c04bc1611ad73fb", - "revisionTime": "2016-12-12T20:09:13Z" + "revision": "02490b97dff7cfde1995bd77de808fd27053bc87", + "revisionTime": "2019-06-24T17:16:18Z", + "version": "v0.7.0", + "versionExact": "v0.7.0" }, { - "checksumSHA1": "slcGOTGSdukEPPSN81Q5WZGmhog=", + "checksumSHA1": "zh9AcT6oNvhnOqb7w7njY48TkvI=", "path": "google.golang.org/api/iterator", - "revision": "55146ba61254fdb1c26d65ff3c04bc1611ad73fb", - "revisionTime": "2016-12-12T20:09:13Z" + "revision": "02490b97dff7cfde1995bd77de808fd27053bc87", + "revisionTime": "2019-06-24T17:16:18Z", + "version": "v0.7.0", + "versionExact": "v0.7.0" }, { - "checksumSHA1": "7u58UYArY+urG47WScM0HFdBahs=", + "checksumSHA1": "XdTB13Pxzd95rhckAEBpCeMp69M=", "path": "google.golang.org/api/iterator/testing", - "revision": "55146ba61254fdb1c26d65ff3c04bc1611ad73fb", - "revisionTime": "2016-12-12T20:09:13Z" + "revision": "02490b97dff7cfde1995bd77de808fd27053bc87", + "revisionTime": "2019-06-24T17:16:18Z", + "version": "v0.7.0", + "versionExact": "v0.7.0" }, { - "checksumSHA1": "kEQSHsbkLxyIijEvp5W2SF3uqsU=", + "checksumSHA1": "2AyxThTPscWdy49fGsU2tg0Uyw8=", "path": "google.golang.org/api/option", - "revision": "55146ba61254fdb1c26d65ff3c04bc1611ad73fb", - "revisionTime": "2016-12-12T20:09:13Z" + "revision": "02490b97dff7cfde1995bd77de808fd27053bc87", + "revisionTime": "2019-06-24T17:16:18Z", + "version": "v0.7.0", + "versionExact": "v0.7.0" }, { - "checksumSHA1": "xygm9BwoCg7vc0PPgAPdxNKJ38c=", + "checksumSHA1": "Aka6Sle3vs6xGP70PADl9lAlZIE=", "path": "google.golang.org/api/storage/v1", - "revision": "55146ba61254fdb1c26d65ff3c04bc1611ad73fb", - "revisionTime": "2016-12-12T20:09:13Z" + "revision": "02490b97dff7cfde1995bd77de808fd27053bc87", + "revisionTime": "2019-06-24T17:16:18Z", + "version": "v0.7.0", + "versionExact": "v0.7.0" }, { - "checksumSHA1": "ztaquTYXuYLb5Kc6mtF64yrsA7E=", + "checksumSHA1": "hOQM3ns9t81o566ge8UNFEtoXX8=", "path": "google.golang.org/api/transport", - "revision": "55146ba61254fdb1c26d65ff3c04bc1611ad73fb", - "revisionTime": "2016-12-12T20:09:13Z" + "revision": "02490b97dff7cfde1995bd77de808fd27053bc87", + "revisionTime": "2019-06-24T17:16:18Z", + "version": "v0.7.0", + "versionExact": "v0.7.0" + }, + { + "checksumSHA1": "XeonlHuXpmHUQDqIK2qJ/DSKg0o=", + "path": "google.golang.org/api/transport/grpc", + "revision": "02490b97dff7cfde1995bd77de808fd27053bc87", + "revisionTime": "2019-06-24T17:16:18Z", + "version": "v0.7.0", + "versionExact": "v0.7.0" + }, + { + "checksumSHA1": "WzZfHJ4G6jO/qf3n6DI9a9awJQk=", + "path": "google.golang.org/api/transport/http", + "revision": "02490b97dff7cfde1995bd77de808fd27053bc87", + "revisionTime": "2019-06-24T17:16:18Z", + "version": "v0.7.0", + "versionExact": "v0.7.0" + }, + { + "checksumSHA1": "sJcKCvjPtoysqyelsB2CQzC5oQI=", + "path": "google.golang.org/api/transport/http/internal/propagation", + "revision": "02490b97dff7cfde1995bd77de808fd27053bc87", + "revisionTime": "2019-06-24T17:16:18Z", + "version": "v0.7.0", + "versionExact": "v0.7.0" }, { "checksumSHA1": "buWXkeU6VNtym88sZ7lKJvsCVXk=", @@ -1433,10 +1657,34 @@ "versionExact": "v1.5.0" }, { - "checksumSHA1": "MgYFT27I9gfAtSVBpGVqkCYOj3U=", + "checksumSHA1": "GlPZsxfa/OYvumlfU8+2j4cVai8=", + "path": "google.golang.org/genproto/googleapis/api/annotations", + "revision": "fa694d86fc64c7654a660f8908de4e879866748d", + "revisionTime": "2019-08-01T16:59:51Z" + }, + { + "checksumSHA1": "nTQH9H1cWFc4Ft8sJylUT9ANl/Y=", + "path": "google.golang.org/genproto/googleapis/iam/v1", + "revision": "fa694d86fc64c7654a660f8908de4e879866748d", + "revisionTime": "2019-08-01T16:59:51Z" + }, + { + "checksumSHA1": "EOkBjXBkCQcsEf9fk2KOQZcJO08=", + "path": "google.golang.org/genproto/googleapis/rpc/code", + "revision": "fa694d86fc64c7654a660f8908de4e879866748d", + "revisionTime": "2019-08-01T16:59:51Z" + }, + { + "checksumSHA1": "dU5fToNngC22+3DsebkdYv+T3jE=", "path": "google.golang.org/genproto/googleapis/rpc/status", - "revision": "b5d43981345bdb2c233eb4bf3277847b48c6fdc6", - "revisionTime": "2018-11-09T15:42:31Z" + "revision": "fa694d86fc64c7654a660f8908de4e879866748d", + "revisionTime": "2019-08-01T16:59:51Z" + }, + { + "checksumSHA1": "F1znYp6CXz3gZ0WGdy89d7jZgP4=", + "path": "google.golang.org/genproto/googleapis/type/expr", + "revision": "fa694d86fc64c7654a660f8908de4e879866748d", + "revisionTime": "2019-08-01T16:59:51Z" }, { "checksumSHA1": "O6SQTcVdhL+4betKp/7ketCc/AU=", @@ -1462,6 +1710,22 @@ "version": "v1.16.0", "versionExact": "v1.16.0" }, + { + "checksumSHA1": "ZD8cJs3NtFy3pzofoTThBvVVdKU=", + "path": "google.golang.org/grpc/balancer/grpclb", + "revision": "2e463a05d100327ca47ac218281906921038fd95", + "revisionTime": "2018-10-23T17:37:47Z", + "version": "v1.16.0", + "versionExact": "v1.16.0" + }, + { + "checksumSHA1": "CWf3yHL+DCM8pZETYCGA70C4JGM=", + "path": "google.golang.org/grpc/balancer/grpclb/grpc_lb_v1", + "revision": "2e463a05d100327ca47ac218281906921038fd95", + "revisionTime": "2018-10-23T17:37:47Z", + "version": "v1.16.0", + "versionExact": "v1.16.0" + }, { "checksumSHA1": "DJ1AtOk4Pu7bqtUMob95Hw8HPNw=", "path": "google.golang.org/grpc/balancer/roundrobin", @@ -1494,6 +1758,70 @@ "version": "v1.16.0", "versionExact": "v1.16.0" }, + { + "checksumSHA1": "RqDVFWVRXNIzSEge/L8JSMskEME=", + "path": "google.golang.org/grpc/credentials/alts", + "revision": "2e463a05d100327ca47ac218281906921038fd95", + "revisionTime": "2018-10-23T17:37:47Z", + "version": "v1.16.0", + "versionExact": "v1.16.0" + }, + { + "checksumSHA1": "qAUIOU0aukDblUKBw9Pbjzc+nW8=", + "path": "google.golang.org/grpc/credentials/alts/internal", + "revision": "2e463a05d100327ca47ac218281906921038fd95", + "revisionTime": "2018-10-23T17:37:47Z", + "version": "v1.16.0", + "versionExact": "v1.16.0" + }, + { + "checksumSHA1": "PTVv5w1hd88sHf2TJbctBasS4ck=", + "path": "google.golang.org/grpc/credentials/alts/internal/authinfo", + "revision": "2e463a05d100327ca47ac218281906921038fd95", + "revisionTime": "2018-10-23T17:37:47Z", + "version": "v1.16.0", + "versionExact": "v1.16.0" + }, + { + "checksumSHA1": "/s6U8ulRJiogFjFygs450dOeIoI=", + "path": "google.golang.org/grpc/credentials/alts/internal/conn", + "revision": "2e463a05d100327ca47ac218281906921038fd95", + "revisionTime": "2018-10-23T17:37:47Z", + "version": "v1.16.0", + "versionExact": "v1.16.0" + }, + { + "checksumSHA1": "znhrvWfbdiviJiZpekYHOi4TRmw=", + "path": "google.golang.org/grpc/credentials/alts/internal/handshaker", + "revision": "2e463a05d100327ca47ac218281906921038fd95", + "revisionTime": "2018-10-23T17:37:47Z", + "version": "v1.16.0", + "versionExact": "v1.16.0" + }, + { + "checksumSHA1": "CliKuySSTAK7m5iZuEA3fRiLHjg=", + "path": "google.golang.org/grpc/credentials/alts/internal/handshaker/service", + "revision": "2e463a05d100327ca47ac218281906921038fd95", + "revisionTime": "2018-10-23T17:37:47Z", + "version": "v1.16.0", + "versionExact": "v1.16.0" + }, + { + "checksumSHA1": "3/WS7uTk/B23ijy0PoHmIS/A76M=", + "path": "google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp", + "revision": "2e463a05d100327ca47ac218281906921038fd95", + "revisionTime": "2018-10-23T17:37:47Z", + "version": "v1.16.0", + "versionExact": "v1.16.0" + }, + { + "checksumSHA1": "KreBPF6lZnpT8psfiyRson0C9lI=", + "path": "google.golang.org/grpc/credentials/google", + "revision": "2e463a05d100327ca47ac218281906921038fd95", + "revisionTime": "2018-10-23T17:37:47Z", + "version": "v1.16.0", + "versionExact": "v1.16.0" + }, { "checksumSHA1": "QbufP1o0bXrtd5XecqdRCK/Vl0M=", "path": "google.golang.org/grpc/credentials/oauth", From 40ee7006db6408d23979b48037de61a21afe161a Mon Sep 17 00:00:00 2001 From: deepthi Date: Tue, 13 Aug 2019 16:46:01 -0700 Subject: [PATCH 17/17] address review comments Signed-off-by: deepthi --- go/cmd/vtbackup/vtbackup.go | 2 +- go/vt/logutil/proto3.go | 2 +- go/vt/mysqlctl/backupengine.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go/cmd/vtbackup/vtbackup.go b/go/cmd/vtbackup/vtbackup.go index 8d419fee83c..23cc8c529d7 100644 --- a/go/cmd/vtbackup/vtbackup.go +++ b/go/cmd/vtbackup/vtbackup.go @@ -247,7 +247,7 @@ func takeBackup(ctx context.Context, topoServer *topo.Server, backupStorage back } log.Infof("Restoring latest backup from directory %v", backupDir) - restorePos, _, err := mysqlctl.Restore(ctx, mycnf, mysqld, backupDir, *concurrency, extraEnv, map[string]string{}, logutil.NewConsoleLogger(), true, dbName, time.Unix(0, 0).UTC()) + restorePos, _, err := mysqlctl.Restore(ctx, mycnf, mysqld, backupDir, *concurrency, extraEnv, map[string]string{}, logutil.NewConsoleLogger(), true, dbName, time.Time{}) switch err { case nil: log.Infof("Successfully restored from backup at replication position %v", restorePos) diff --git a/go/vt/logutil/proto3.go b/go/vt/logutil/proto3.go index 5e8ab03b7cc..43fd959dd82 100644 --- a/go/vt/logutil/proto3.go +++ b/go/vt/logutil/proto3.go @@ -33,7 +33,7 @@ import ( func ProtoToTime(ts *vttimepb.Time) time.Time { if ts == nil { // treat nil like the empty Timestamp - return time.Unix(0, 0).UTC() + return time.Time{} } return time.Unix(ts.Seconds, int64(ts.Nanoseconds)).UTC() } diff --git a/go/vt/mysqlctl/backupengine.go b/go/vt/mysqlctl/backupengine.go index f6dec0a9fbb..4351974da2a 100644 --- a/go/vt/mysqlctl/backupengine.go +++ b/go/vt/mysqlctl/backupengine.go @@ -61,7 +61,7 @@ func findBackupToRestore(ctx context.Context, cnf *Mycnf, mysqld MysqlDaemon, lo var bh backupstorage.BackupHandle var index int - unixZeroTime := time.Unix(0, 0).UTC() + unixZeroTime := time.Time{} for index = len(bhs) - 1; index >= 0; index-- { bh = bhs[index]