From 9daec36053e366e4edeeb79272baf0c547c3cf0b Mon Sep 17 00:00:00 2001 From: crazycs520 Date: Wed, 19 Jun 2019 13:34:47 +0800 Subject: [PATCH] ddl: fix race in table lock config --- ddl/db_test.go | 27 ++++----------------------- ddl/serial_test.go | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/ddl/db_test.go b/ddl/db_test.go index d176d60130f0b..06bbd649caf70 100644 --- a/ddl/db_test.go +++ b/ddl/db_test.go @@ -88,6 +88,8 @@ func setUpSuite(s *testDBSuite, c *C) { s.schemaName = "test_db" s.autoIDStep = autoid.GetStep() ddl.WaitTimeWhenErrorOccured = 0 + // Test for table lock. + config.GetGlobalConfig().EnableTableLock = true s.cluster = mocktikv.NewCluster() mocktikv.BootstrapWithSingleStore(s.cluster) @@ -2772,18 +2774,6 @@ func (s *testDBSuite2) TestLockTables(c *C) { tk.MustExec("create table t1 (a int)") tk.MustExec("create table t2 (a int)") - // recover table lock config. - originValue := config.GetGlobalConfig().EnableTableLock - defer func() { - config.GetGlobalConfig().EnableTableLock = originValue - }() - - // Test for enable table lock config. - config.GetGlobalConfig().EnableTableLock = false - tk.MustExec("lock tables t1 write") - checkTableLock(c, tk.Se, "test", "t1", model.TableLockNone) - config.GetGlobalConfig().EnableTableLock = true - // Test lock 1 table. tk.MustExec("lock tables t1 write") checkTableLock(c, tk.Se, "test", "t1", model.TableLockWrite) @@ -2959,7 +2949,7 @@ func (s *testDBSuite2) TestLockTables(c *C) { } // TestConcurrentLockTables test concurrent lock/unlock tables. -func (s *testDBSuite2) TestConcurrentLockTables(c *C) { +func (s *testDBSuite4) TestConcurrentLockTables(c *C) { s.tk = testkit.NewTestKit(c, s.store) tk2 := testkit.NewTestKit(c, s.store) tk := s.tk @@ -2969,15 +2959,6 @@ func (s *testDBSuite2) TestConcurrentLockTables(c *C) { tk.MustExec("create table t1 (a int)") tk2.MustExec("use test") - // recover table lock config. - originValue := config.GetGlobalConfig().EnableTableLock - defer func() { - config.GetGlobalConfig().EnableTableLock = originValue - }() - - // Test for enable table lock config. - config.GetGlobalConfig().EnableTableLock = true - // Test concurrent lock tables read. sql1 := "lock tables t1 read" sql2 := "lock tables t1 read" @@ -3010,7 +2991,7 @@ func (s *testDBSuite2) TestConcurrentLockTables(c *C) { tk2.MustExec("unlock tables") } -func (s *testDBSuite2) testParallelExecSQL(c *C, sql1, sql2 string, se1, se2 session.Session, f checkRet) { +func (s *testDBSuite4) testParallelExecSQL(c *C, sql1, sql2 string, se1, se2 session.Session, f checkRet) { callback := &ddl.TestDDLCallback{} times := 0 callback.OnJobRunBeforeExported = func(job *model.Job) { diff --git a/ddl/serial_test.go b/ddl/serial_test.go index 76ee209909901..23bec8381a6da 100644 --- a/ddl/serial_test.go +++ b/ddl/serial_test.go @@ -25,6 +25,7 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/parser/model" "github.com/pingcap/parser/mysql" + "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/infoschema" @@ -410,3 +411,21 @@ func (s *testSerialSuite) TestCanceledJobTakeTime(c *C) { sub := time.Since(startTime) c.Assert(sub, Less, ddl.WaitTimeWhenErrorOccured) } + +func (s *testSerialSuite) TestTableLocksEnable(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1") + defer tk.MustExec("drop table if exists t1") + tk.MustExec("create table t1 (a int)") + // recover table lock config. + originValue := config.GetGlobalConfig().EnableTableLock + defer func() { + config.GetGlobalConfig().EnableTableLock = originValue + }() + + // Test for enable table lock config. + config.GetGlobalConfig().EnableTableLock = false + tk.MustExec("lock tables t1 write") + checkTableLock(c, tk.Se, "test", "t1", model.TableLockNone) +}