Skip to content

Commit 36d9b61

Browse files
winkyaocoocood
authored andcommitted
*: AddIndex skip checking unique constraint when TiDB is importing data. (pingcap#5535)
1 parent 132626e commit 36d9b61

15 files changed

Lines changed: 65 additions & 52 deletions

File tree

ddl/index.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -690,7 +690,7 @@ func (w *worker) doBackfillIndexTaskInTxn(t table.Table, txn kv.Transaction, col
690690
}
691691

692692
// Create the index.
693-
handle, err := w.index.Create(txn, idxRecord.vals, idxRecord.handle)
693+
handle, err := w.index.Create(w.ctx, txn, idxRecord.vals, idxRecord.handle)
694694
if err != nil {
695695
if kv.ErrKeyExists.Equal(err) && idxRecord.handle == handle {
696696
// Index already exists, skip it.

executor/executor_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import (
4141
"github.com/pingcap/tidb/types"
4242
"github.com/pingcap/tidb/util/admin"
4343
"github.com/pingcap/tidb/util/logutil"
44+
"github.com/pingcap/tidb/util/mock"
4445
"github.com/pingcap/tidb/util/testkit"
4546
"github.com/pingcap/tidb/util/testleak"
4647
"github.com/pingcap/tidb/util/testutil"
@@ -182,7 +183,7 @@ func (s *testSuite) TestAdmin(c *C) {
182183
tb, err := is.TableByName(model.NewCIStr("test"), model.NewCIStr("admin_test"))
183184
c.Assert(err, IsNil)
184185
c.Assert(tb.Indices(), HasLen, 1)
185-
_, err = tb.Indices()[0].Create(txn, types.MakeDatums(int64(10)), 1)
186+
_, err = tb.Indices()[0].Create(mock.NewContext(), txn, types.MakeDatums(int64(10)), 1)
186187
c.Assert(err, IsNil)
187188
err = txn.Commit(goctx.Background())
188189
c.Assert(err, IsNil)

executor/set_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -124,11 +124,11 @@ func (s *testSuite) TestSetVar(c *C) {
124124

125125
tk.MustExec("set @@character_set_results = NULL")
126126

127-
c.Assert(vars.SkipConstraintCheck, IsFalse)
128-
tk.MustExec("set @@tidb_skip_constraint_check = '1'")
129-
c.Assert(vars.SkipConstraintCheck, IsTrue)
130-
tk.MustExec("set @@tidb_skip_constraint_check = '0'")
131-
c.Assert(vars.SkipConstraintCheck, IsFalse)
127+
c.Assert(vars.ImportingData, IsFalse)
128+
tk.MustExec("set @@tidb_import_data = '1'")
129+
c.Assert(vars.ImportingData, IsTrue)
130+
tk.MustExec("set @@tidb_import_data = '0'")
131+
c.Assert(vars.ImportingData, IsFalse)
132132

133133
// Test set transaction isolation level, which is equivalent to setting variable "tx_isolation".
134134
tk.MustExec("SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED")

kv/buffer_store.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func (s *BufferStore) Get(k Key) ([]byte, error) {
4747
return nil, errors.Trace(err)
4848
}
4949
if len(val) == 0 {
50-
return nil, errors.Trace(ErrNotExist)
50+
return nil, ErrNotExist
5151
}
5252
return val, nil
5353
}

sessionctx/variable/session.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,8 @@ type SessionVars struct {
200200

201201
/* TiDB system variables */
202202

203-
// SkipConstraintCheck is true when importing data.
204-
SkipConstraintCheck bool
203+
// ImportingData is true when importing data.
204+
ImportingData bool
205205

206206
// SkipUTF8Check check on input value.
207207
SkipUTF8Check bool

sessionctx/variable/sysvar.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -605,7 +605,7 @@ var defaultSysVars = []*SysVar{
605605
{ScopeGlobal, "innodb_online_alter_log_max_size", "134217728"},
606606
/* TiDB specific variables */
607607
{ScopeSession, TiDBSnapshot, ""},
608-
{ScopeSession, TiDBSkipConstraintCheck, "0"},
608+
{ScopeSession, TiDBImportingData, "0"},
609609
{ScopeSession, TiDBOptAggPushDown, boolToIntStr(DefOptAggPushDown)},
610610
{ScopeSession, TiDBOptInSubqUnFolding, boolToIntStr(DefOptInSubqUnfolding)},
611611
{ScopeSession, TiDBBuildStatsConcurrency, strconv.Itoa(DefBuildStatsConcurrency)},

sessionctx/variable/tidb_vars.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ const (
3434
// When the value is set to a datetime string like '2017-11-11 20:20:20', the session reads history data of that time.
3535
TiDBSnapshot = "tidb_snapshot"
3636

37-
// tidb_skip_constraint_check is used for loading data from a dump file, to speed up the loading process.
37+
// tidb_import_data is used for loading data from a dump file, to speed up the loading process.
3838
// When the value is set to true, unique index constraint is not checked.
39-
TiDBSkipConstraintCheck = "tidb_skip_constraint_check"
39+
TiDBImportingData = "tidb_import_data"
4040

4141
// tidb_opt_agg_push_down is used to endable/disable the optimizer rule of aggregation push down.
4242
TiDBOptAggPushDown = "tidb_opt_agg_push_down"

sessionctx/varsutil/varsutil.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,8 @@ func SetSessionSystemVar(vars *variable.SessionVars, name string, value types.Da
140140
if isAutocommit {
141141
vars.SetStatusFlag(mysql.ServerStatusInTrans, false)
142142
}
143-
case variable.TiDBSkipConstraintCheck:
144-
vars.SkipConstraintCheck = tidbOptOn(sVal)
143+
case variable.TiDBImportingData:
144+
vars.ImportingData = tidbOptOn(sVal)
145145
case variable.TiDBSkipUTF8Check:
146146
vars.SkipUTF8Check = tidbOptOn(sVal)
147147
case variable.TiDBOptAggPushDown:

sessionctx/varsutil/varsutil_test.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -83,23 +83,23 @@ func (s *testVarsutilSuite) TestVarsutil(c *C) {
8383

8484
c.Assert(SetSessionSystemVar(v, "character_set_results", types.Datum{}), IsNil)
8585

86-
// Test case for get TiDBSkipConstraintCheck session variable.
87-
val, err = GetSessionSystemVar(v, variable.TiDBSkipConstraintCheck)
86+
// Test case for get TiDBImportingData session variable.
87+
val, err = GetSessionSystemVar(v, variable.TiDBImportingData)
8888
c.Assert(err, IsNil)
8989
c.Assert(val, Equals, "0")
9090

91-
// Test case for tidb_skip_constraint_check
92-
c.Assert(v.SkipConstraintCheck, IsFalse)
93-
SetSessionSystemVar(v, variable.TiDBSkipConstraintCheck, types.NewStringDatum("0"))
94-
c.Assert(v.SkipConstraintCheck, IsFalse)
95-
SetSessionSystemVar(v, variable.TiDBSkipConstraintCheck, types.NewStringDatum("1"))
96-
c.Assert(v.SkipConstraintCheck, IsTrue)
97-
SetSessionSystemVar(v, variable.TiDBSkipConstraintCheck, types.NewStringDatum("0"))
98-
c.Assert(v.SkipConstraintCheck, IsFalse)
99-
100-
// Test case for change TiDBSkipConstraintCheck session variable.
101-
SetSessionSystemVar(v, variable.TiDBSkipConstraintCheck, types.NewStringDatum("1"))
102-
val, err = GetSessionSystemVar(v, variable.TiDBSkipConstraintCheck)
91+
// Test case for tidb_import_data
92+
c.Assert(v.ImportingData, IsFalse)
93+
SetSessionSystemVar(v, variable.TiDBImportingData, types.NewStringDatum("0"))
94+
c.Assert(v.ImportingData, IsFalse)
95+
SetSessionSystemVar(v, variable.TiDBImportingData, types.NewStringDatum("1"))
96+
c.Assert(v.ImportingData, IsTrue)
97+
SetSessionSystemVar(v, variable.TiDBImportingData, types.NewStringDatum("0"))
98+
c.Assert(v.ImportingData, IsFalse)
99+
100+
// Test case for change TiDBImportingData session variable.
101+
SetSessionSystemVar(v, variable.TiDBImportingData, types.NewStringDatum("1"))
102+
val, err = GetSessionSystemVar(v, variable.TiDBImportingData)
103103
c.Assert(err, IsNil)
104104
c.Assert(val, Equals, "1")
105105

table/index.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
package table
1515

1616
import (
17+
"github.com/pingcap/tidb/context"
1718
"github.com/pingcap/tidb/kv"
1819
"github.com/pingcap/tidb/model"
1920
"github.com/pingcap/tidb/types"
@@ -30,7 +31,7 @@ type Index interface {
3031
// Meta returns IndexInfo.
3132
Meta() *model.IndexInfo
3233
// Create supports insert into statement.
33-
Create(rm kv.RetrieverMutator, indexedValues []types.Datum, h int64) (int64, error)
34+
Create(ctx context.Context, rm kv.RetrieverMutator, indexedValues []types.Datum, h int64) (int64, error)
3435
// Delete supports delete from statement.
3536
Delete(m kv.Mutator, indexedValues []types.Datum, h int64) error
3637
// Drop supports drop table, drop index statements.

0 commit comments

Comments
 (0)