From 611420a201857891c5609d23a23912907dcddf68 Mon Sep 17 00:00:00 2001 From: Hillium Date: Wed, 8 Jul 2020 15:29:12 +0800 Subject: [PATCH 1/8] glue: set query DDL when executing DDLs --- pkg/gluetidb/glue.go | 69 +++++++++++++++++++++++++++++++++++++++++--- tests/br_db/run.sh | 5 ++++ 2 files changed, 70 insertions(+), 4 deletions(-) diff --git a/pkg/gluetidb/glue.go b/pkg/gluetidb/glue.go index 7633b8064..1640c016d 100644 --- a/pkg/gluetidb/glue.go +++ b/pkg/gluetidb/glue.go @@ -3,6 +3,7 @@ package gluetidb import ( + "bytes" "context" "github.com/pingcap/parser/model" @@ -10,11 +11,21 @@ import ( pd "github.com/pingcap/pd/v4/client" "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/domain" + "github.com/pingcap/tidb/executor" "github.com/pingcap/tidb/kv" + "github.com/pingcap/tidb/meta/autoid" "github.com/pingcap/tidb/session" + "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/br/pkg/glue" "github.com/pingcap/br/pkg/gluetikv" + "github.com/pingcap/errors" +) + +const ( + defaultCapOfCreateTable = 512 + defaultCapOfCreateDatabase = 64 + brComment = "/*from('br')*/" ) // Glue is an implementation of glue.Glue using a new TiDB session. @@ -23,7 +34,9 @@ type Glue struct { } type tidbSession struct { - se session.Session + se session.Session + allocs map[int64]autoid.Allocator + allocFactory func(dbID int64, allocType uint8, opts ...autoid.AllocOption) autoid.Allocator } // GetDomain implements glue.Glue. @@ -37,7 +50,14 @@ func (Glue) CreateSession(store kv.Storage) (glue.Session, error) { if err != nil { return nil, err } - return &tidbSession{se: se}, nil + tiSession := &tidbSession{ + se: se, + allocs: make(map[int64]autoid.Allocator), + allocFactory: func(dbID int64, allocType uint8, opts ...autoid.AllocOption) autoid.Allocator { + return autoid.NewAllocator(store, dbID, false, allocType, opts...) + }, + } + return tiSession, nil } // Open implements glue.Glue. @@ -69,6 +89,7 @@ func (gs *tidbSession) Execute(ctx context.Context, sql string) error { // CreateDatabase implements glue.Session. func (gs *tidbSession) CreateDatabase(ctx context.Context, schema *model.DBInfo) error { d := domain.GetDomain(gs.se).DDL() + gs.se.SetValue(sessionctx.QueryString, gs.showCreateDatabase(schema)) schema = schema.Clone() if len(schema.Charset) == 0 { schema.Charset = mysql.DefaultCharset @@ -79,7 +100,11 @@ func (gs *tidbSession) CreateDatabase(ctx context.Context, schema *model.DBInfo) // CreateTable implements glue.Session. func (gs *tidbSession) CreateTable(ctx context.Context, dbName model.CIStr, table *model.TableInfo) error { d := domain.GetDomain(gs.se).DDL() - + query, err := gs.showCreateTable(table, dbName) + if err != nil { + return err + } + gs.se.SetValue(sessionctx.QueryString, query) // Clone() does not clone partitions yet :( table = table.Clone() if table.Partition != nil { @@ -87,7 +112,6 @@ func (gs *tidbSession) CreateTable(ctx context.Context, dbName model.CIStr, tabl newPartition.Definitions = append([]model.PartitionDefinition{}, table.Partition.Definitions...) table.Partition = &newPartition } - return d.CreateTableWithInfo(gs.se, dbName, table, ddl.OnExistIgnore, true) } @@ -95,3 +119,40 @@ func (gs *tidbSession) CreateTable(ctx context.Context, dbName model.CIStr, tabl func (gs *tidbSession) Close() { gs.se.Close() } + +func (gs *tidbSession) allocatorFor(tbl *model.TableInfo, dbName model.CIStr) (autoid.Allocator, error) { + db, ok := domain.GetDomain(gs.se).InfoSchema().SchemaByName(dbName) + if !ok { + return nil, errors.Errorf("failed to get schema of table %s", tbl.Name.String()) + } + if alloc, ok := gs.allocs[db.ID]; ok { + return alloc, nil + } + alloc := gs.allocFactory(db.ID, autoid.AutoIncrementType) + gs.allocs[db.ID] = alloc + return alloc, nil +} + +// showCreateTable shows the result of SHOW CREATE TABLE from a TableInfo. +func (gs *tidbSession) showCreateTable(tbl *model.TableInfo, dbName model.CIStr) (string, error) { + table := tbl.Clone() + table.AutoIncID = 0 + result := bytes.NewBuffer(make([]byte, 0, defaultCapOfCreateTable)) + // this can never fail. + alloc, err := gs.allocatorFor(tbl, dbName) + if err != nil { + return "", err + } + _, _ = result.WriteString(brComment) + executor.ConstructResultOfShowCreateTable(gs.se, tbl, alloc, result) + return result.String(), nil +} + +// showCreateDatabase shows the result of SHOW CREATE DATABASE from a dbInfo. +func (gs *tidbSession) showCreateDatabase(db *model.DBInfo) string { + result := bytes.NewBuffer(make([]byte, 0, defaultCapOfCreateTable)) + // this can never fail. + _, _ = result.WriteString(brComment) + executor.ConstructResultOfShowCreateDatabase(gs.se, db, true, result) + return result.String() +} diff --git a/tests/br_db/run.sh b/tests/br_db/run.sh index 31389fa28..94d688815 100755 --- a/tests/br_db/run.sh +++ b/tests/br_db/run.sh @@ -51,4 +51,9 @@ if [ "$table_count" -ne "2" ];then exit 1 fi +# Test BR DDL query string +echo "testing DDL query..." +curl 127.0.0.1:10080/ddl/history | grep -E '/\*from(.*)\*/CREATE TABLE' +curl 127.0.0.1:10080/ddl/history | grep -E '/\*from(.*)\*/CREATE DATABASE' + run_sql "DROP DATABASE $DB;" From c9c2b28a4d1958dd8d959d8c0737ea48dc6a332a Mon Sep 17 00:00:00 2001 From: Hillium Date: Wed, 8 Jul 2020 15:44:41 +0800 Subject: [PATCH 2/8] glue: fix some linting --- pkg/gluetidb/glue.go | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/pkg/gluetidb/glue.go b/pkg/gluetidb/glue.go index 1640c016d..e3d273303 100644 --- a/pkg/gluetidb/glue.go +++ b/pkg/gluetidb/glue.go @@ -17,9 +17,10 @@ import ( "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" + "github.com/pingcap/errors" + "github.com/pingcap/br/pkg/glue" "github.com/pingcap/br/pkg/gluetikv" - "github.com/pingcap/errors" ) const ( @@ -89,7 +90,11 @@ func (gs *tidbSession) Execute(ctx context.Context, sql string) error { // CreateDatabase implements glue.Session. func (gs *tidbSession) CreateDatabase(ctx context.Context, schema *model.DBInfo) error { d := domain.GetDomain(gs.se).DDL() - gs.se.SetValue(sessionctx.QueryString, gs.showCreateDatabase(schema)) + query, err := gs.showCreateDatabase(schema) + if err != nil { + return err + } + gs.se.SetValue(sessionctx.QueryString, query) schema = schema.Clone() if len(schema.Charset) == 0 { schema.Charset = mysql.DefaultCharset @@ -138,21 +143,25 @@ func (gs *tidbSession) showCreateTable(tbl *model.TableInfo, dbName model.CIStr) table := tbl.Clone() table.AutoIncID = 0 result := bytes.NewBuffer(make([]byte, 0, defaultCapOfCreateTable)) - // this can never fail. alloc, err := gs.allocatorFor(tbl, dbName) if err != nil { return "", err } + // this can never fail. _, _ = result.WriteString(brComment) - executor.ConstructResultOfShowCreateTable(gs.se, tbl, alloc, result) + if err := executor.ConstructResultOfShowCreateTable(gs.se, tbl, alloc, result); err != nil { + return "", err + } return result.String(), nil } // showCreateDatabase shows the result of SHOW CREATE DATABASE from a dbInfo. -func (gs *tidbSession) showCreateDatabase(db *model.DBInfo) string { - result := bytes.NewBuffer(make([]byte, 0, defaultCapOfCreateTable)) +func (gs *tidbSession) showCreateDatabase(db *model.DBInfo) (string, error) { + result := bytes.NewBuffer(make([]byte, 0, defaultCapOfCreateDatabase)) // this can never fail. _, _ = result.WriteString(brComment) - executor.ConstructResultOfShowCreateDatabase(gs.se, db, true, result) - return result.String() + if err := executor.ConstructResultOfShowCreateDatabase(gs.se, db, true, result); err != nil { + return "", err + } + return result.String(), nil } From 5361adc189f8fea0f5a8076bf97697e9cd25c7c7 Mon Sep 17 00:00:00 2001 From: Hillium Date: Wed, 15 Jul 2020 12:18:46 +0800 Subject: [PATCH 3/8] *: update TiDB version --- go.mod | 8 ++++---- go.sum | 22 ++++++++++++++++++++-- pkg/gluetidb/glue.go | 35 +++++------------------------------ 3 files changed, 29 insertions(+), 36 deletions(-) diff --git a/go.mod b/go.mod index 9bbce185d..7bc15eff6 100644 --- a/go.mod +++ b/go.mod @@ -16,12 +16,12 @@ require ( github.com/pingcap/check v0.0.0-20200212061837-5e12011dc712 github.com/pingcap/errors v0.11.5-0.20190809092503-95897b64e011 github.com/pingcap/failpoint v0.0.0-20200603062251-b230c36c413c - github.com/pingcap/kvproto v0.0.0-20200518112156-d4aeb467de29 + github.com/pingcap/kvproto v0.0.0-20200630051533-f735bcd8f9f9 github.com/pingcap/log v0.0.0-20200511115504-543df19646ad - github.com/pingcap/parser v0.0.0-20200609110328-c65941b9fbb3 + github.com/pingcap/parser v0.0.0-20200623082809-b74301ac298b github.com/pingcap/pd/v4 v4.0.0-rc.2.0.20200520083007-2c251bd8f181 - github.com/pingcap/tidb v1.1.0-beta.0.20200622093932-c98514e7516e - github.com/pingcap/tidb-tools v4.0.0+incompatible + github.com/pingcap/tidb v1.1.0-beta.0.20200715033736-8a6554a21f8f + github.com/pingcap/tidb-tools v4.0.1+incompatible github.com/pingcap/tipb v0.0.0-20200615034523-dcfcea0b5965 github.com/prometheus/client_golang v1.5.1 github.com/prometheus/common v0.9.1 diff --git a/go.sum b/go.sum index f7588a3f7..64022bd58 100644 --- a/go.sum +++ b/go.sum @@ -28,6 +28,8 @@ dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7 github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/Jeffail/gabs/v2 v2.5.1 h1:ANfZYjpMlfTTKebycu4X1AgkVWumFVDYQl7JwOr4mDk= +github.com/Jeffail/gabs/v2 v2.5.1/go.mod h1:xCn81vdHKxFUuWWAaD5jCTQDNPBMh5pPs9IJ+NcziBI= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= @@ -285,6 +287,8 @@ github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hypnoglow/gormzap v0.3.0/go.mod h1:5Wom8B7Jl2oK0Im9hs6KQ+Kl92w4Y7gKCrj66rhyvw0= +github.com/iancoleman/strcase v0.0.0-20191112232945-16388991a334 h1:VHgatEHNcBFEB7inlalqfNqw65aNkM1lGX2yt3NmbS8= +github.com/iancoleman/strcase v0.0.0-20191112232945-16388991a334/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= @@ -406,6 +410,8 @@ github.com/ngaut/unistore v0.0.0-20200603091253-e0b717679796/go.mod h1:9mpqZeS1C github.com/ngaut/unistore v0.0.0-20200604043635-5004cdad650f/go.mod h1:5Vec+R2BwOyugVQ8Id8uDmlIYbqodCvykM50IpaAjk4= github.com/ngaut/unistore v0.0.0-20200604061006-d8e9dc0ad154 h1:yuiHbYQTMgvroGV9Uu5dOUDvt4dv944BN6gx0ZAM1oo= github.com/ngaut/unistore v0.0.0-20200604061006-d8e9dc0ad154/go.mod h1:YGQzxn9cVy0q2puXVt1X8l5OohRHv2djR/ziz1k14XQ= +github.com/ngaut/unistore v0.0.0-20200630072006-0c4035925f69 h1:tn65bmj+EBa8gXYKQHPRlGcDdo+tDEjUK88gO4QK11s= +github.com/ngaut/unistore v0.0.0-20200630072006-0c4035925f69/go.mod h1:Hxlp5VAoPOHwcXLUw/E+P3XjJX1EP38NWjXPpc4nuOE= github.com/nicksnyder/go-i18n v1.10.0/go.mod h1:HrK7VCrbOvQoUAQ7Vpy7i87N7JZZZ7R2xBGjv0j365Q= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= @@ -478,6 +484,9 @@ github.com/pingcap/kvproto v0.0.0-20200424032552-6650270c39c3/go.mod h1:IOdRDPLy github.com/pingcap/kvproto v0.0.0-20200428135407-0f5ffe459677/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= github.com/pingcap/kvproto v0.0.0-20200518112156-d4aeb467de29 h1:NpW1OuYrIl+IQrSsVbtyHpHpazmSCHy+ysrOixY0xY4= github.com/pingcap/kvproto v0.0.0-20200518112156-d4aeb467de29/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= +github.com/pingcap/kvproto v0.0.0-20200608081027-d02a6f65e956/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= +github.com/pingcap/kvproto v0.0.0-20200630051533-f735bcd8f9f9 h1:2w4StpDuyXkAtg5wHTDtkqO71+spYbN4J53ARfyOAo4= +github.com/pingcap/kvproto v0.0.0-20200630051533-f735bcd8f9f9/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9 h1:AJD9pZYm72vMgPcQDww9rkZ1DnWfl0pXV3BOWlkYIjA= github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= github.com/pingcap/log v0.0.0-20200117041106-d28c14d3b1cd h1:CV3VsP3Z02MVtdpTMfEgRJ4T9NGgGTxdHpJerent7rM= @@ -491,6 +500,8 @@ github.com/pingcap/parser v0.0.0-20200518090819-ec1e13b948b1/go.mod h1:vQdbJqobJ github.com/pingcap/parser v0.0.0-20200522094936-3b720a0512a6/go.mod h1:vQdbJqobJAgFyiRNNtXahpMoGWwPEuWciVEK5A20NS0= github.com/pingcap/parser v0.0.0-20200609110328-c65941b9fbb3 h1:nPE21utCCSq0c0QjoeU1IvMarBvLOfigeaHggx3B07M= github.com/pingcap/parser v0.0.0-20200609110328-c65941b9fbb3/go.mod h1:vQdbJqobJAgFyiRNNtXahpMoGWwPEuWciVEK5A20NS0= +github.com/pingcap/parser v0.0.0-20200623082809-b74301ac298b h1:mrIaC+MfZi4jfsaD8ErzpLNAGRgDICPMrsmoHj2zi6Q= +github.com/pingcap/parser v0.0.0-20200623082809-b74301ac298b/go.mod h1:vQdbJqobJAgFyiRNNtXahpMoGWwPEuWciVEK5A20NS0= github.com/pingcap/pd/v4 v4.0.0-rc.1.0.20200422143320-428acd53eba2/go.mod h1:s+utZtXDznOiL24VK0qGmtoHjjXNsscJx3m1n8cC56s= github.com/pingcap/pd/v4 v4.0.0-rc.2.0.20200520083007-2c251bd8f181 h1:FM+PzdoR3fmWAJx3ug+p5aOgs5aZYwFkoDL7Potdsz0= github.com/pingcap/pd/v4 v4.0.0-rc.2.0.20200520083007-2c251bd8f181/go.mod h1:q4HTx/bA8aKBa4S7L+SQKHvjRPXCRV0tA0yRw0qkZSA= @@ -505,14 +516,16 @@ github.com/pingcap/tidb v1.1.0-beta.0.20200603101356-552e7709de0d/go.mod h1:wgu4 github.com/pingcap/tidb v1.1.0-beta.0.20200604055950-efc1c154d098/go.mod h1:UMxsNE326wyfgFJCx6aerPRLj1/tGPYDBKS9T9NOHI8= github.com/pingcap/tidb v1.1.0-beta.0.20200610060912-f12cdc42010f h1:FS/jkQj5YJFOmE//JOUHGdfT1fuQdRy7cXiMkU3W1ak= github.com/pingcap/tidb v1.1.0-beta.0.20200610060912-f12cdc42010f/go.mod h1:jyXOvS9k0PTxYHju2OgySOe9FtydA52TiQ5bXAaKyQE= -github.com/pingcap/tidb v1.1.0-beta.0.20200622093932-c98514e7516e h1:IQK0KavByOcCXYb8oMhQk5+8djgrYEu/eDby5CcmOYw= -github.com/pingcap/tidb v1.1.0-beta.0.20200622093932-c98514e7516e/go.mod h1:32tdRklkqxQipIaI4uH3XHiMUIEmStzPcAnc8y23JRc= +github.com/pingcap/tidb v1.1.0-beta.0.20200715033736-8a6554a21f8f h1:laFThZIeLc5kzjvC+aIum90Y5H5FdXezfveK7OiiVW8= +github.com/pingcap/tidb v1.1.0-beta.0.20200715033736-8a6554a21f8f/go.mod h1:xxBzlVvpP87oTM2woTs5kWsA3Z9L1QY3DS4Efha53rw= github.com/pingcap/tidb-tools v4.0.0-beta.1.0.20200306084441-875bd09aa3d5+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= github.com/pingcap/tidb-tools v4.0.0-rc.1.0.20200421113014-507d2bb3a15e+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= github.com/pingcap/tidb-tools v4.0.0-rc.1.0.20200514040632-f76b3e428e19+incompatible h1:/JKsYjsa5Ug8v5CN4zIbJGIqsvgBUkGwaP/rEScVvWM= github.com/pingcap/tidb-tools v4.0.0-rc.1.0.20200514040632-f76b3e428e19+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= github.com/pingcap/tidb-tools v4.0.0+incompatible h1:znKDL3y92StJVS0ON1fx3yaKSq8mVJ0k3xOYgXQDj8k= github.com/pingcap/tidb-tools v4.0.0+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= +github.com/pingcap/tidb-tools v4.0.1+incompatible h1:/Z0FEc0Os4CZ0Wun7uyg9teEwcHIhNz1iwGTIC86uhg= +github.com/pingcap/tidb-tools v4.0.1+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= github.com/pingcap/tipb v0.0.0-20190428032612-535e1abaa330/go.mod h1:RtkHW8WbcNxj8lsbzjaILci01CtYnYbIkQhjyZWrWVI= github.com/pingcap/tipb v0.0.0-20200417094153-7316d94df1ee h1:XJQ6/LGzOSc/jo33AD8t7jtc4GohxcyODsYnb+kZXJM= github.com/pingcap/tipb v0.0.0-20200417094153-7316d94df1ee/go.mod h1:RtkHW8WbcNxj8lsbzjaILci01CtYnYbIkQhjyZWrWVI= @@ -635,6 +648,8 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20171017195756-830351dc03c6 h1:lYIiVD github.com/tmc/grpc-websocket-proxy v0.0.0-20171017195756-830351dc03c6/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/twmb/murmur3 v1.1.3 h1:D83U0XYKcHRYwYIpBKf3Pks91Z0Byda/9SJ8B6EMRcA= +github.com/twmb/murmur3 v1.1.3/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= github.com/uber-go/atomic v1.3.2 h1:Azu9lPBWRNKzYXSIwRfgRuDuS0YKsK4NFhiQv98gkxo= github.com/uber-go/atomic v1.3.2/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g= github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= @@ -671,6 +686,8 @@ github.com/zhangjinpeng1987/raft v0.0.0-20190624145930-deeb32d6553d/go.mod h1:1K go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0= +go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.etcd.io/etcd v0.5.0-alpha.5.0.20191023171146-3cf2f69b5738 h1:lWF4f9Nypl1ZqSb4gLeh/DGvBYVaUYHuiB93teOmwgc= go.etcd.io/etcd v0.5.0-alpha.5.0.20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= @@ -827,6 +844,7 @@ golang.org/x/sys v0.0.0-20191128015809-6d18c012aee9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= diff --git a/pkg/gluetidb/glue.go b/pkg/gluetidb/glue.go index e3d273303..8c1980ebc 100644 --- a/pkg/gluetidb/glue.go +++ b/pkg/gluetidb/glue.go @@ -17,8 +17,6 @@ import ( "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/errors" - "github.com/pingcap/br/pkg/glue" "github.com/pingcap/br/pkg/gluetikv" ) @@ -35,9 +33,7 @@ type Glue struct { } type tidbSession struct { - se session.Session - allocs map[int64]autoid.Allocator - allocFactory func(dbID int64, allocType uint8, opts ...autoid.AllocOption) autoid.Allocator + se session.Session } // GetDomain implements glue.Glue. @@ -52,11 +48,7 @@ func (Glue) CreateSession(store kv.Storage) (glue.Session, error) { return nil, err } tiSession := &tidbSession{ - se: se, - allocs: make(map[int64]autoid.Allocator), - allocFactory: func(dbID int64, allocType uint8, opts ...autoid.AllocOption) autoid.Allocator { - return autoid.NewAllocator(store, dbID, false, allocType, opts...) - }, + se: se, } return tiSession, nil } @@ -105,7 +97,7 @@ func (gs *tidbSession) CreateDatabase(ctx context.Context, schema *model.DBInfo) // CreateTable implements glue.Session. func (gs *tidbSession) CreateTable(ctx context.Context, dbName model.CIStr, table *model.TableInfo) error { d := domain.GetDomain(gs.se).DDL() - query, err := gs.showCreateTable(table, dbName) + query, err := gs.showCreateTable(table) if err != nil { return err } @@ -125,31 +117,14 @@ func (gs *tidbSession) Close() { gs.se.Close() } -func (gs *tidbSession) allocatorFor(tbl *model.TableInfo, dbName model.CIStr) (autoid.Allocator, error) { - db, ok := domain.GetDomain(gs.se).InfoSchema().SchemaByName(dbName) - if !ok { - return nil, errors.Errorf("failed to get schema of table %s", tbl.Name.String()) - } - if alloc, ok := gs.allocs[db.ID]; ok { - return alloc, nil - } - alloc := gs.allocFactory(db.ID, autoid.AutoIncrementType) - gs.allocs[db.ID] = alloc - return alloc, nil -} - // showCreateTable shows the result of SHOW CREATE TABLE from a TableInfo. -func (gs *tidbSession) showCreateTable(tbl *model.TableInfo, dbName model.CIStr) (string, error) { +func (gs *tidbSession) showCreateTable(tbl *model.TableInfo) (string, error) { table := tbl.Clone() table.AutoIncID = 0 result := bytes.NewBuffer(make([]byte, 0, defaultCapOfCreateTable)) - alloc, err := gs.allocatorFor(tbl, dbName) - if err != nil { - return "", err - } // this can never fail. _, _ = result.WriteString(brComment) - if err := executor.ConstructResultOfShowCreateTable(gs.se, tbl, alloc, result); err != nil { + if err := executor.ConstructResultOfShowCreateTable(gs.se, tbl, autoid.Allocators{}, result); err != nil { return "", err } return result.String(), nil From 7e1cb412b031155a2c8e5d8056caf9adde8b67cc Mon Sep 17 00:00:00 2001 From: Hillium Date: Wed, 15 Jul 2020 13:09:02 +0800 Subject: [PATCH 4/8] *: run go mod tidy --- go.sum | 2 ++ 1 file changed, 2 insertions(+) diff --git a/go.sum b/go.sum index aa0814336..8807ee139 100644 --- a/go.sum +++ b/go.sum @@ -484,6 +484,8 @@ github.com/pingcap/kvproto v0.0.0-20200424032552-6650270c39c3/go.mod h1:IOdRDPLy github.com/pingcap/kvproto v0.0.0-20200428135407-0f5ffe459677/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= github.com/pingcap/kvproto v0.0.0-20200518112156-d4aeb467de29 h1:NpW1OuYrIl+IQrSsVbtyHpHpazmSCHy+ysrOixY0xY4= github.com/pingcap/kvproto v0.0.0-20200518112156-d4aeb467de29/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= +github.com/pingcap/kvproto v0.0.0-20200608081027-d02a6f65e956/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= +github.com/pingcap/kvproto v0.0.0-20200630051533-f735bcd8f9f9/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= github.com/pingcap/kvproto v0.0.0-20200706115936-1e0910aabe6c h1:VnLpCAxMAeDxc7HXTetwDQB+/MtDQjHAOBsd4QnGVwA= github.com/pingcap/kvproto v0.0.0-20200706115936-1e0910aabe6c/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9 h1:AJD9pZYm72vMgPcQDww9rkZ1DnWfl0pXV3BOWlkYIjA= From 49a68b6069ff1eb5278473a4b3d37300a16fc925 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=B1=E5=B2=9A?= <36239017+YuJuncen@users.noreply.github.com> Date: Wed, 15 Jul 2020 16:09:48 +0800 Subject: [PATCH 5/8] Update tests/br_db/run.sh Co-authored-by: kennytm --- tests/br_db/run.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/br_db/run.sh b/tests/br_db/run.sh index 94d688815..94d1a3aa9 100755 --- a/tests/br_db/run.sh +++ b/tests/br_db/run.sh @@ -53,7 +53,7 @@ fi # Test BR DDL query string echo "testing DDL query..." -curl 127.0.0.1:10080/ddl/history | grep -E '/\*from(.*)\*/CREATE TABLE' -curl 127.0.0.1:10080/ddl/history | grep -E '/\*from(.*)\*/CREATE DATABASE' +curl 127.0.0.1:10080/ddl/history | grep -E '/\*from('"'br'"')\*/CREATE TABLE' +curl 127.0.0.1:10080/ddl/history | grep -E '/\*from('"'br'"')\*/CREATE DATABASE' run_sql "DROP DATABASE $DB;" From 10110ce7549119e5c77ef60f3bea1660dcca7494 Mon Sep 17 00:00:00 2001 From: Hillium Date: Wed, 15 Jul 2020 17:07:51 +0800 Subject: [PATCH 6/8] glue: use double quote in comment --- pkg/gluetidb/glue.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/gluetidb/glue.go b/pkg/gluetidb/glue.go index 25f7d48e8..6e7140f3f 100644 --- a/pkg/gluetidb/glue.go +++ b/pkg/gluetidb/glue.go @@ -26,7 +26,7 @@ import ( const ( defaultCapOfCreateTable = 512 defaultCapOfCreateDatabase = 64 - brComment = "/*from('br')*/" + brComment = `/*from("br")*/` ) // New makes a new tidb glue. From fffc30b98a8c3d6235772d0a177effefc79529ba Mon Sep 17 00:00:00 2001 From: Hillium Date: Wed, 15 Jul 2020 17:33:07 +0800 Subject: [PATCH 7/8] tests: use leaser DDL grep regex --- tests/br_db/run.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/br_db/run.sh b/tests/br_db/run.sh index 94d1a3aa9..a89e4a7f1 100755 --- a/tests/br_db/run.sh +++ b/tests/br_db/run.sh @@ -53,7 +53,7 @@ fi # Test BR DDL query string echo "testing DDL query..." -curl 127.0.0.1:10080/ddl/history | grep -E '/\*from('"'br'"')\*/CREATE TABLE' -curl 127.0.0.1:10080/ddl/history | grep -E '/\*from('"'br'"')\*/CREATE DATABASE' +curl 127.0.0.1:10080/ddl/history | grep -E '/\*from(.+br.+)\*/CREATE TABLE' +curl 127.0.0.1:10080/ddl/history | grep -E '/\*from(.+br.+)\*/CREATE DATABASE' run_sql "DROP DATABASE $DB;" From 28b67bfbccccaf29bdd1c0e4db7cada5bddc27c5 Mon Sep 17 00:00:00 2001 From: Hillium Date: Wed, 15 Jul 2020 17:51:44 +0800 Subject: [PATCH 8/8] tests: use from(br) as comment --- pkg/gluetidb/glue.go | 2 +- tests/br_db/run.sh | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/gluetidb/glue.go b/pkg/gluetidb/glue.go index 6e7140f3f..8895ddf12 100644 --- a/pkg/gluetidb/glue.go +++ b/pkg/gluetidb/glue.go @@ -26,7 +26,7 @@ import ( const ( defaultCapOfCreateTable = 512 defaultCapOfCreateDatabase = 64 - brComment = `/*from("br")*/` + brComment = `/*from(br)*/` ) // New makes a new tidb glue. diff --git a/tests/br_db/run.sh b/tests/br_db/run.sh index a89e4a7f1..4ea4a2d39 100755 --- a/tests/br_db/run.sh +++ b/tests/br_db/run.sh @@ -53,7 +53,7 @@ fi # Test BR DDL query string echo "testing DDL query..." -curl 127.0.0.1:10080/ddl/history | grep -E '/\*from(.+br.+)\*/CREATE TABLE' -curl 127.0.0.1:10080/ddl/history | grep -E '/\*from(.+br.+)\*/CREATE DATABASE' +curl 127.0.0.1:10080/ddl/history | grep -E '/\*from\(br\)\*/CREATE TABLE' +curl 127.0.0.1:10080/ddl/history | grep -E '/\*from\(br\)\*/CREATE DATABASE' run_sql "DROP DATABASE $DB;"