From c3cd579365e78b36b2735b046170640e19bb7de4 Mon Sep 17 00:00:00 2001 From: crazycs Date: Fri, 22 Mar 2019 17:02:51 +0800 Subject: [PATCH 01/10] ddl: fix alter table share rowid bit problem --- ddl/db_test.go | 36 ++++++++++++++++++++++++++++++++++++ ddl/ddl_api.go | 9 +++++++++ ddl/ddl_worker.go | 2 +- ddl/table.go | 39 +++++++++++++++++++++++++++++++++++++-- executor/ddl_test.go | 1 + table/tables/tables.go | 7 ++++--- 6 files changed, 88 insertions(+), 6 deletions(-) diff --git a/ddl/db_test.go b/ddl/db_test.go index 4dbbc336732c8..835bd09e5f19e 100644 --- a/ddl/db_test.go +++ b/ddl/db_test.go @@ -2672,3 +2672,39 @@ func (s *testDBSuite) TestModifyColumnCharset(c *C) { ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) } + +func (s *testDBSuite) TestAlterShardRowIDBits(c *C) { + s.tk = testkit.NewTestKit(c, s.store) + tk := s.tk + + tk.MustExec("use test") + // Test alter shard_row_id_bits + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (a int) shard_row_id_bits = 5") + tk.MustExec(fmt.Sprintf("alter table t1 auto_increment = %d;", 1<<56)) + tk.MustExec("insert into t1 set a=1;") + + // Test increase shard_row_id_bits failed by overflow global auto ID. + _, err := tk.Exec(" alter table t1 SHARD_ROW_ID_BITS = 10;") + c.Assert(err, NotNil) + c.Assert(err.Error(), Equals, "[autoid:1467]shard_row_id_bits 10 will cause next global auto ID will overflow") + + // Test reduce shard_row_id_bits will be ok. + tk.MustExec(" alter table t1 SHARD_ROW_ID_BITS = 3;") + checkShardRowID := func(maxShardRowIDBits, shardRowIDBits uint64) { + tbl := testGetTableByName(c, tk.Se, "test", "t1") + c.Assert(tbl.Meta().MaxShardRowIDBits == maxShardRowIDBits, IsTrue) + c.Assert(tbl.Meta().ShardRowIDBits == shardRowIDBits, IsTrue) + } + checkShardRowID(5, 3) + + // Test reduce shard_row_id_bits but calculate overflow should use the max record shard_row_id_bits. + tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (a int) shard_row_id_bits = 10") + tk.MustExec(" alter table t1 SHARD_ROW_ID_BITS = 5;") + checkShardRowID(10, 5) + tk.MustExec(fmt.Sprintf("alter table t1 auto_increment = %d;", 1<<56)) + _, err = tk.Exec("insert into t1 set a=1;") + c.Assert(err, NotNil) + c.Assert(err.Error(), Equals, "[autoid:1467]Failed to read auto-increment value from storage engine") +} diff --git a/ddl/ddl_api.go b/ddl/ddl_api.go index 73a127c1b6319..fbce00b79a5d6 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -1446,6 +1446,7 @@ func handleTableOptions(options []*ast.TableOption, tbInfo *model.TableInfo) err if tbInfo.ShardRowIDBits > shardRowIDBitsMax { tbInfo.ShardRowIDBits = shardRowIDBitsMax } + tbInfo.MaxShardRowIDBits = tbInfo.ShardRowIDBits } } @@ -1670,6 +1671,14 @@ func (d *ddl) ShardRowID(ctx sessionctx.Context, tableIdent ast.Ident, uVal uint if ok && uVal != 0 { return errUnsupportedShardRowIDBits } + if uVal == t.Meta().ShardRowIDBits { + // Nothing need to do. + return nil + } + err = checkGlobalAutoID(d.sessPool, t, uVal) + if err != nil { + return err + } job := &model.Job{ Type: model.ActionShardRowID, SchemaID: schema.ID, diff --git a/ddl/ddl_worker.go b/ddl/ddl_worker.go index 7292c42a0da28..db58ce49fe359 100644 --- a/ddl/ddl_worker.go +++ b/ddl/ddl_worker.go @@ -525,7 +525,7 @@ func (w *worker) runDDLJob(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, case model.ActionRenameTable: ver, err = onRenameTable(t, job) case model.ActionShardRowID: - ver, err = onShardRowID(t, job) + ver, err = w.onShardRowID(d, t, job) case model.ActionModifyTableComment: ver, err = onModifyTableComment(t, job) case model.ActionAddTablePartition: diff --git a/ddl/table.go b/ddl/table.go index c651b8f17c1c2..b6e8d4df41b43 100644 --- a/ddl/table.go +++ b/ddl/table.go @@ -26,7 +26,9 @@ import ( "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/meta/autoid" + "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" + "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/util/gcutil" "github.com/pingcap/tidb/util/logutil" @@ -468,7 +470,7 @@ func onRebaseAutoID(store kv.Storage, t *meta.Meta, job *model.Job) (ver int64, return ver, nil } -func onShardRowID(t *meta.Meta, job *model.Job) (ver int64, _ error) { +func (w *worker) onShardRowID(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { var shardRowIDBits uint64 err := job.DecodeArgs(&shardRowIDBits) if err != nil { @@ -480,7 +482,21 @@ func onShardRowID(t *meta.Meta, job *model.Job) (ver int64, _ error) { job.State = model.JobStateCancelled return ver, errors.Trace(err) } - tblInfo.ShardRowIDBits = shardRowIDBits + if shardRowIDBits < tblInfo.ShardRowIDBits { + tblInfo.ShardRowIDBits = shardRowIDBits + } else { + tbl, err := getTable(d.store, job.SchemaID, tblInfo) + if err != nil { + return ver, errors.Trace(err) + } + err = checkGlobalAutoID(w.sessPool, tbl, shardRowIDBits) + if err != nil { + job.State = model.JobStateCancelled + return ver, err + } + tblInfo.ShardRowIDBits = shardRowIDBits + tblInfo.MaxShardRowIDBits = shardRowIDBits + } ver, err = updateVersionAndTableInfo(t, job, tblInfo, true) if err != nil { job.State = model.JobStateCancelled @@ -490,6 +506,25 @@ func onShardRowID(t *meta.Meta, job *model.Job) (ver int64, _ error) { return ver, nil } +func checkGlobalAutoID(s *sessionPool, tbl table.Table, shardRowIDBits uint64) error { + var ctx sessionctx.Context + ctx, err := s.get() + if err != nil { + return errors.Trace(err) + } + defer s.put(ctx) + + // Check next global max auto ID first. + autoIncID, err := tbl.Allocator(ctx).NextGlobalAutoID(tbl.Meta().ID) + if err != nil { + return errors.Trace(err) + } + if tables.OverflowShardBits(autoIncID, shardRowIDBits) { + return autoid.ErrAutoincReadFailed.GenWithStack("shard_row_id_bits %d will cause next global auto ID will overflow", shardRowIDBits) + } + return nil +} + func onRenameTable(t *meta.Meta, job *model.Job) (ver int64, _ error) { var oldSchemaID int64 var tableName model.CIStr diff --git a/executor/ddl_test.go b/executor/ddl_test.go index 0216b50214b65..2619f4686dadd 100644 --- a/executor/ddl_test.go +++ b/executor/ddl_test.go @@ -505,6 +505,7 @@ func (s *testSuite3) TestShardRowIDBits(c *C) { c.Assert(autoid.ErrAutoincReadFailed.Equal(err), IsTrue, Commentf("err:%v", err)) _, err = tk.Exec("insert into t1 values(3)") c.Assert(autoid.ErrAutoincReadFailed.Equal(err), IsTrue, Commentf("err:%v", err)) + } func (s *testSuite3) TestMaxHandleAddIndex(c *C) { diff --git a/table/tables/tables.go b/table/tables/tables.go index b9621a027de2f..a96e6287ede32 100644 --- a/table/tables/tables.go +++ b/table/tables/tables.go @@ -928,7 +928,8 @@ func (t *tableCommon) AllocAutoID(ctx sessionctx.Context) (int64, error) { return 0, errors.Trace(err) } if t.meta.ShardRowIDBits > 0 { - if t.overflowShardBits(rowID) { + // use max record ShardRowIDBits to check overflow. + if OverflowShardBits(rowID, t.meta.MaxShardRowIDBits) { // If overflow, the rowID may be duplicated. For examples, // t.meta.ShardRowIDBits = 4 // rowID = 0010111111111111111111111111111111111111111111111111111111111111 @@ -949,8 +950,8 @@ func (t *tableCommon) AllocAutoID(ctx sessionctx.Context) (int64, error) { } // overflowShardBits check whether the rowID overflow `1<<(64-t.meta.ShardRowIDBits-1) -1`. -func (t *tableCommon) overflowShardBits(rowID int64) bool { - mask := (1< 0 } From 9fb7b42bb785a538bf10556abf7f44f5c4178325 Mon Sep 17 00:00:00 2001 From: crazycs Date: Fri, 22 Mar 2019 20:08:15 +0800 Subject: [PATCH 02/10] fix ci --- executor/ddl_test.go | 1 - table/tables/tables.go | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/executor/ddl_test.go b/executor/ddl_test.go index 2619f4686dadd..0216b50214b65 100644 --- a/executor/ddl_test.go +++ b/executor/ddl_test.go @@ -505,7 +505,6 @@ func (s *testSuite3) TestShardRowIDBits(c *C) { c.Assert(autoid.ErrAutoincReadFailed.Equal(err), IsTrue, Commentf("err:%v", err)) _, err = tk.Exec("insert into t1 values(3)") c.Assert(autoid.ErrAutoincReadFailed.Equal(err), IsTrue, Commentf("err:%v", err)) - } func (s *testSuite3) TestMaxHandleAddIndex(c *C) { diff --git a/table/tables/tables.go b/table/tables/tables.go index a96e6287ede32..58510c0ec0297 100644 --- a/table/tables/tables.go +++ b/table/tables/tables.go @@ -949,7 +949,7 @@ func (t *tableCommon) AllocAutoID(ctx sessionctx.Context) (int64, error) { return rowID, nil } -// overflowShardBits check whether the rowID overflow `1<<(64-t.meta.ShardRowIDBits-1) -1`. +// OverflowShardBits check whether the rowID overflow `1<<(64-shardRowIDBits-1) -1`. func OverflowShardBits(rowID int64, shardRowIDBits uint64) bool { mask := (1< 0 From 3c96fc6e843ed94a6c72f7766fe92159da8ba61e Mon Sep 17 00:00:00 2001 From: crazycs Date: Fri, 22 Mar 2019 20:32:51 +0800 Subject: [PATCH 03/10] update go.mod for parser --- go.mod | 2 ++ go.sum | 2 ++ 2 files changed, 4 insertions(+) diff --git a/go.mod b/go.mod index eefe31774a0db..26a6bc2595dd3 100644 --- a/go.mod +++ b/go.mod @@ -91,3 +91,5 @@ require ( sourcegraph.com/sourcegraph/appdash v0.0.0-20180531100431-4c381bd170b4 sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 ) + +replace github.com/pingcap/parser => github.com/crazycs520/parser v0.0.0-20190321024858-9d09878eb099 diff --git a/go.sum b/go.sum index d176369b6b27a..18eca957c35d0 100644 --- a/go.sum +++ b/go.sum @@ -22,6 +22,8 @@ github.com/coreos/go-systemd v0.0.0-20181031085051-9002847aa142 h1:3jFq2xL4ZajGK github.com/coreos/go-systemd v0.0.0-20181031085051-9002847aa142/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/crazycs520/parser v0.0.0-20190321024858-9d09878eb099 h1:tElKJwuG/rdoGYtHtzi7oQwlmkoxk/15OZm46W9xbfY= +github.com/crazycs520/parser v0.0.0-20190321024858-9d09878eb099/go.mod h1:xLjI+gnWYexq011WPMEvCNS8rFM9qe1vdojIEzSKPuc= github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 h1:iwZdTE0PVqJCos1vaoKsclOGD3ADKpshg3SRtYBbwso= github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM= github.com/cznic/sortutil v0.0.0-20150617083342-4c7342852e65 h1:hxuZop6tSoOi0sxFzoGGYdRqNrPubyaIf9KoBG9tPiE= From 04367116da87d4bbdcd94bddaf9d85223ec190d1 Mon Sep 17 00:00:00 2001 From: crazycs520 Date: Tue, 26 Mar 2019 18:46:20 +0800 Subject: [PATCH 04/10] address comment --- ddl/table.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ddl/table.go b/ddl/table.go index b6e8d4df41b43..9bcd6fdea3f4f 100644 --- a/ddl/table.go +++ b/ddl/table.go @@ -520,7 +520,7 @@ func checkGlobalAutoID(s *sessionPool, tbl table.Table, shardRowIDBits uint64) e return errors.Trace(err) } if tables.OverflowShardBits(autoIncID, shardRowIDBits) { - return autoid.ErrAutoincReadFailed.GenWithStack("shard_row_id_bits %d will cause next global auto ID will overflow", shardRowIDBits) + return autoid.ErrAutoincReadFailed.GenWithStack("shard_row_id_bits %d will cause next global auto ID overflow", shardRowIDBits) } return nil } From 07f172baa93dd644cf9a7493cc57b865483663bf Mon Sep 17 00:00:00 2001 From: crazycs520 Date: Mon, 1 Apr 2019 11:19:55 +0800 Subject: [PATCH 05/10] update go.mod and address comment --- ddl/ddl_api.go | 2 +- ddl/table.go | 5 +++-- go.mod | 2 +- go.sum | 2 ++ 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/ddl/ddl_api.go b/ddl/ddl_api.go index 8fc44bb80fa8d..637a81a929051 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -1779,7 +1779,7 @@ func (d *ddl) ShardRowID(ctx sessionctx.Context, tableIdent ast.Ident, uVal uint // Nothing need to do. return nil } - err = checkGlobalAutoID(d.sessPool, t, uVal) + err = verifyNoOverflowShardBits(d.sessPool, t, uVal) if err != nil { return err } diff --git a/ddl/table.go b/ddl/table.go index 9bcd6fdea3f4f..12a8b89cc9815 100644 --- a/ddl/table.go +++ b/ddl/table.go @@ -489,12 +489,13 @@ func (w *worker) onShardRowID(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int6 if err != nil { return ver, errors.Trace(err) } - err = checkGlobalAutoID(w.sessPool, tbl, shardRowIDBits) + err = verifyNoOverflowShardBits(w.sessPool, tbl, shardRowIDBits) if err != nil { job.State = model.JobStateCancelled return ver, err } tblInfo.ShardRowIDBits = shardRowIDBits + // MaxShardRowIDBits use to check the overflow of auto ID. tblInfo.MaxShardRowIDBits = shardRowIDBits } ver, err = updateVersionAndTableInfo(t, job, tblInfo, true) @@ -506,7 +507,7 @@ func (w *worker) onShardRowID(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int6 return ver, nil } -func checkGlobalAutoID(s *sessionPool, tbl table.Table, shardRowIDBits uint64) error { +func verifyNoOverflowShardBits(s *sessionPool, tbl table.Table, shardRowIDBits uint64) error { var ctx sessionctx.Context ctx, err := s.get() if err != nil { diff --git a/go.mod b/go.mod index a5c2f48d64163..e70aae340aab7 100644 --- a/go.mod +++ b/go.mod @@ -92,4 +92,4 @@ require ( sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 ) -replace github.com/pingcap/parser => github.com/crazycs520/parser v0.0.0-20190321024858-9d09878eb099 +replace github.com/pingcap/parser => github.com/crazycs520/parser v0.0.0-20190401031557-eeea62a37d06 diff --git a/go.sum b/go.sum index d773c36f94315..b013b0af61ee5 100644 --- a/go.sum +++ b/go.sum @@ -25,6 +25,8 @@ github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbp github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/crazycs520/parser v0.0.0-20190321024858-9d09878eb099 h1:tElKJwuG/rdoGYtHtzi7oQwlmkoxk/15OZm46W9xbfY= github.com/crazycs520/parser v0.0.0-20190321024858-9d09878eb099/go.mod h1:xLjI+gnWYexq011WPMEvCNS8rFM9qe1vdojIEzSKPuc= +github.com/crazycs520/parser v0.0.0-20190401031557-eeea62a37d06 h1:swGG/HaeLJky1g7eW8gbyPHX2dd0lV8Gv3znKquOZM8= +github.com/crazycs520/parser v0.0.0-20190401031557-eeea62a37d06/go.mod h1:xLjI+gnWYexq011WPMEvCNS8rFM9qe1vdojIEzSKPuc= github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 h1:iwZdTE0PVqJCos1vaoKsclOGD3ADKpshg3SRtYBbwso= github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM= github.com/cznic/sortutil v0.0.0-20150617083342-4c7342852e65 h1:hxuZop6tSoOi0sxFzoGGYdRqNrPubyaIf9KoBG9tPiE= From 57741dc3fa3d6abe0e44578549cb00dbc5eefa08 Mon Sep 17 00:00:00 2001 From: crazycs520 Date: Thu, 4 Apr 2019 16:15:52 +0800 Subject: [PATCH 06/10] update go.mod --- ddl/db_test.go | 2 +- go.mod | 4 +--- go.sum | 8 ++------ 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/ddl/db_test.go b/ddl/db_test.go index f353397da605b..57fb0cf0c2798 100644 --- a/ddl/db_test.go +++ b/ddl/db_test.go @@ -2687,7 +2687,7 @@ func (s *testDBSuite) TestAlterShardRowIDBits(c *C) { // Test increase shard_row_id_bits failed by overflow global auto ID. _, err := tk.Exec(" alter table t1 SHARD_ROW_ID_BITS = 10;") c.Assert(err, NotNil) - c.Assert(err.Error(), Equals, "[autoid:1467]shard_row_id_bits 10 will cause next global auto ID will overflow") + c.Assert(err.Error(), Equals, "[autoid:1467]shard_row_id_bits 10 will cause next global auto ID overflow") // Test reduce shard_row_id_bits will be ok. tk.MustExec(" alter table t1 SHARD_ROW_ID_BITS = 3;") diff --git a/go.mod b/go.mod index b2c2b5a4f5317..00ff0a9411270 100644 --- a/go.mod +++ b/go.mod @@ -51,7 +51,7 @@ require ( github.com/pingcap/goleveldb v0.0.0-20171020122428-b9ff6c35079e github.com/pingcap/kvproto v0.0.0-20190215154024-7f2fc73ef562 github.com/pingcap/log v0.0.0-20190307075452-bd41d9273596 - github.com/pingcap/parser v0.0.0-20190331024200-2f120db0a482 + github.com/pingcap/parser v0.0.0-20190404080625-e357a068a3e1 github.com/pingcap/pd v2.1.0-rc.4+incompatible github.com/pingcap/tidb-tools v2.1.3-0.20190321065848-1e8b48f5c168+incompatible github.com/pingcap/tipb v0.0.0-20190107072121-abbec73437b7 @@ -90,5 +90,3 @@ require ( sourcegraph.com/sourcegraph/appdash v0.0.0-20180531100431-4c381bd170b4 sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 ) - -replace github.com/pingcap/parser => github.com/crazycs520/parser v0.0.0-20190401031557-eeea62a37d06 diff --git a/go.sum b/go.sum index b80f4aeccc739..1b095fa1e0b66 100644 --- a/go.sum +++ b/go.sum @@ -23,10 +23,6 @@ github.com/coreos/go-systemd v0.0.0-20181031085051-9002847aa142 h1:3jFq2xL4ZajGK github.com/coreos/go-systemd v0.0.0-20181031085051-9002847aa142/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/crazycs520/parser v0.0.0-20190321024858-9d09878eb099 h1:tElKJwuG/rdoGYtHtzi7oQwlmkoxk/15OZm46W9xbfY= -github.com/crazycs520/parser v0.0.0-20190321024858-9d09878eb099/go.mod h1:xLjI+gnWYexq011WPMEvCNS8rFM9qe1vdojIEzSKPuc= -github.com/crazycs520/parser v0.0.0-20190401031557-eeea62a37d06 h1:swGG/HaeLJky1g7eW8gbyPHX2dd0lV8Gv3znKquOZM8= -github.com/crazycs520/parser v0.0.0-20190401031557-eeea62a37d06/go.mod h1:xLjI+gnWYexq011WPMEvCNS8rFM9qe1vdojIEzSKPuc= github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 h1:iwZdTE0PVqJCos1vaoKsclOGD3ADKpshg3SRtYBbwso= github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM= github.com/cznic/sortutil v0.0.0-20150617083342-4c7342852e65 h1:hxuZop6tSoOi0sxFzoGGYdRqNrPubyaIf9KoBG9tPiE= @@ -123,8 +119,8 @@ github.com/pingcap/kvproto v0.0.0-20190215154024-7f2fc73ef562 h1:32oF1/8lVnBR2JV github.com/pingcap/kvproto v0.0.0-20190215154024-7f2fc73ef562/go.mod h1:QMdbTAXCHzzygQzqcG9uVUgU2fKeSN1GmfMiykdSzzY= github.com/pingcap/log v0.0.0-20190307075452-bd41d9273596 h1:t2OQTpPJnrPDGlvA+3FwJptMTt6MEPdzK1Wt99oaefQ= github.com/pingcap/log v0.0.0-20190307075452-bd41d9273596/go.mod h1:WpHUKhNZ18v116SvGrmjkA9CBhYmuUTKL+p8JC9ANEw= -github.com/pingcap/parser v0.0.0-20190331024200-2f120db0a482 h1:7WrNaktGabxJ/FUtML+wHEGPszCA1fXjWe82gt5Q/Eo= -github.com/pingcap/parser v0.0.0-20190331024200-2f120db0a482/go.mod h1:1FNvfp9+J0wvc4kl8eGNh7Rqrxveg15jJoWo/a0uHwA= +github.com/pingcap/parser v0.0.0-20190404080625-e357a068a3e1 h1:TOaneg32HXTvr6Gk2Dd1EwtLE6L1nbUNVasLxt6ZrVA= +github.com/pingcap/parser v0.0.0-20190404080625-e357a068a3e1/go.mod h1:1FNvfp9+J0wvc4kl8eGNh7Rqrxveg15jJoWo/a0uHwA= github.com/pingcap/pd v2.1.0-rc.4+incompatible h1:/buwGk04aHO5odk/+O8ZOXGs4qkUjYTJ2UpCJXna8NE= github.com/pingcap/pd v2.1.0-rc.4+incompatible/go.mod h1:nD3+EoYes4+aNNODO99ES59V83MZSI+dFbhyr667a0E= github.com/pingcap/tidb-tools v2.1.3-0.20190321065848-1e8b48f5c168+incompatible h1:MkWCxgZpJBgY2f4HtwWMMFzSBb3+JPzeJgF3VrXE/bU= From a9f12bf9b29e438504bb2ef7f5f48da29c3c9cbc Mon Sep 17 00:00:00 2001 From: crazycs520 Date: Thu, 4 Apr 2019 16:26:07 +0800 Subject: [PATCH 07/10] fix test --- ddl/db_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/ddl/db_test.go b/ddl/db_test.go index 56c439b337875..3a92a46fd402f 100644 --- a/ddl/db_test.go +++ b/ddl/db_test.go @@ -2679,6 +2679,7 @@ func (s *testDBSuite) TestAlterShardRowIDBits(c *C) { tk.MustExec("use test") // Test alter shard_row_id_bits tk.MustExec("drop table if exists t1") + defer tk.MustExec("drop table if exists t1") tk.MustExec("create table t1 (a int) shard_row_id_bits = 5") tk.MustExec(fmt.Sprintf("alter table t1 auto_increment = %d;", 1<<56)) tk.MustExec("insert into t1 set a=1;") From 1b68f23375b04add028916fa1ed62f57ef393960 Mon Sep 17 00:00:00 2001 From: Lynn Date: Mon, 8 Apr 2019 11:27:29 +0800 Subject: [PATCH 08/10] Update table/tables/tables.go Co-Authored-By: crazycs520 --- table/tables/tables.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/table/tables/tables.go b/table/tables/tables.go index 8637abdcaa74d..3c4453c64279d 100644 --- a/table/tables/tables.go +++ b/table/tables/tables.go @@ -925,7 +925,7 @@ func (t *tableCommon) AllocAutoID(ctx sessionctx.Context) (int64, error) { return 0, err } if t.meta.ShardRowIDBits > 0 { - // use max record ShardRowIDBits to check overflow. + // Use max record ShardRowIDBits to check overflow. if OverflowShardBits(rowID, t.meta.MaxShardRowIDBits) { // If overflow, the rowID may be duplicated. For examples, // t.meta.ShardRowIDBits = 4 From e9029028961fdac3fc2debf95059073490cf9a8f Mon Sep 17 00:00:00 2001 From: crazycs520 Date: Mon, 8 Apr 2019 11:50:12 +0800 Subject: [PATCH 09/10] Address comment --- table/tables/tables.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/table/tables/tables.go b/table/tables/tables.go index 3c4453c64279d..dec149c6a3bcc 100644 --- a/table/tables/tables.go +++ b/table/tables/tables.go @@ -946,7 +946,7 @@ func (t *tableCommon) AllocAutoID(ctx sessionctx.Context) (int64, error) { return rowID, nil } -// OverflowShardBits check whether the rowID overflow `1<<(64-shardRowIDBits-1) -1`. +// OverflowShardBits checks whether the rowID overflow `1<<(64-shardRowIDBits-1) -1`. func OverflowShardBits(rowID int64, shardRowIDBits uint64) bool { mask := (1< 0 From 51c5bea867c5b8a1fa92bff01e81f67f571abdb2 Mon Sep 17 00:00:00 2001 From: crazycs520 Date: Mon, 8 Apr 2019 14:32:55 +0800 Subject: [PATCH 10/10] address comment --- ddl/db_test.go | 6 +++--- ddl/table.go | 2 -- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/ddl/db_test.go b/ddl/db_test.go index 3a92a46fd402f..d7e00e1381491 100644 --- a/ddl/db_test.go +++ b/ddl/db_test.go @@ -2685,12 +2685,12 @@ func (s *testDBSuite) TestAlterShardRowIDBits(c *C) { tk.MustExec("insert into t1 set a=1;") // Test increase shard_row_id_bits failed by overflow global auto ID. - _, err := tk.Exec(" alter table t1 SHARD_ROW_ID_BITS = 10;") + _, err := tk.Exec("alter table t1 SHARD_ROW_ID_BITS = 10;") c.Assert(err, NotNil) c.Assert(err.Error(), Equals, "[autoid:1467]shard_row_id_bits 10 will cause next global auto ID overflow") // Test reduce shard_row_id_bits will be ok. - tk.MustExec(" alter table t1 SHARD_ROW_ID_BITS = 3;") + tk.MustExec("alter table t1 SHARD_ROW_ID_BITS = 3;") checkShardRowID := func(maxShardRowIDBits, shardRowIDBits uint64) { tbl := testGetTableByName(c, tk.Se, "test", "t1") c.Assert(tbl.Meta().MaxShardRowIDBits == maxShardRowIDBits, IsTrue) @@ -2701,7 +2701,7 @@ func (s *testDBSuite) TestAlterShardRowIDBits(c *C) { // Test reduce shard_row_id_bits but calculate overflow should use the max record shard_row_id_bits. tk.MustExec("drop table if exists t1") tk.MustExec("create table t1 (a int) shard_row_id_bits = 10") - tk.MustExec(" alter table t1 SHARD_ROW_ID_BITS = 5;") + tk.MustExec("alter table t1 SHARD_ROW_ID_BITS = 5;") checkShardRowID(10, 5) tk.MustExec(fmt.Sprintf("alter table t1 auto_increment = %d;", 1<<56)) _, err = tk.Exec("insert into t1 set a=1;") diff --git a/ddl/table.go b/ddl/table.go index 8af91b4e9ee82..b1a4a80674db8 100644 --- a/ddl/table.go +++ b/ddl/table.go @@ -27,7 +27,6 @@ import ( "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/tablecodec" @@ -509,7 +508,6 @@ func (w *worker) onShardRowID(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int6 } func verifyNoOverflowShardBits(s *sessionPool, tbl table.Table, shardRowIDBits uint64) error { - var ctx sessionctx.Context ctx, err := s.get() if err != nil { return errors.Trace(err)