Skip to content

Commit 536ffa1

Browse files
tangentati-chi-bot
authored andcommitted
This is an automated cherry-pick of pingcap#45457
Signed-off-by: ti-chi-bot <[email protected]>
1 parent cf44157 commit 536ffa1

File tree

7 files changed

+47
-5
lines changed

7 files changed

+47
-5
lines changed

ddl/index.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -626,7 +626,10 @@ func (w *worker) onCreateIndex(d *ddlCtx, t *meta.Meta, job *model.Job, isPK boo
626626
var reorgTp model.ReorgType
627627
reorgTp, err = pickBackfillType(w.ctx, job, indexInfo.Unique, d)
628628
if err != nil {
629-
break
629+
if !errorIsRetryable(err, job) {
630+
job.State = model.JobStateCancelled
631+
}
632+
return ver, err
630633
}
631634
if reorgTp.NeedMergeProcess() {
632635
// Increase telemetryAddIndexIngestUsage

ddl/ingest/disk_root.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,14 @@ package ingest
1616

1717
import (
1818
"fmt"
19+
"os"
1920
"sync"
2021

2122
"github.com/pingcap/errors"
23+
"github.com/pingcap/failpoint"
2224
lcom "github.com/pingcap/tidb/br/pkg/lightning/common"
2325
"github.com/pingcap/tidb/sessionctx/variable"
26+
"github.com/pingcap/tidb/util/dbterror"
2427
"github.com/pingcap/tidb/util/logutil"
2528
"go.uber.org/zap"
2629
)
@@ -107,13 +110,21 @@ func (d *diskRootImpl) usageInfo() string {
107110

108111
// PreCheckUsage implements DiskRoot interface.
109112
func (d *diskRootImpl) PreCheckUsage() error {
113+
failpoint.Inject("mockIngestCheckEnvFailed", func(_ failpoint.Value) {
114+
failpoint.Return(dbterror.ErrIngestCheckEnvFailed.FastGenByArgs("mock error"))
115+
})
116+
err := os.MkdirAll(d.path, 0700)
117+
if err != nil {
118+
return dbterror.ErrIngestCheckEnvFailed.FastGenByArgs(err.Error())
119+
}
110120
sz, err := lcom.GetStorageSize(d.path)
111121
if err != nil {
112-
return errors.Trace(err)
122+
return dbterror.ErrIngestCheckEnvFailed.FastGenByArgs(err.Error())
113123
}
114124
if RiskOfDiskFull(sz.Available, sz.Capacity) {
115125
sortPath := ConfigSortPath()
116-
return errors.Errorf("sort path: %s, %s, please clean up the disk and retry", sortPath, d.UsageInfo())
126+
msg := fmt.Sprintf("sort path: %s, %s, please clean up the disk and retry", sortPath, d.UsageInfo())
127+
return dbterror.ErrIngestCheckEnvFailed.FastGenByArgs(msg)
117128
}
118129
return nil
119130
}

errno/errcode.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1112,6 +1112,7 @@ const (
11121112
ErrColumnInChange = 8245
11131113
ErrDDLSetting = 8246
11141114
ErrIngestFailed = 8247
1115+
ErrIngestCheckEnvFailed = 8256
11151116

11161117
ErrCannotPauseDDLJob = 8260
11171118
ErrCannotResumeDDLJob = 8261

errno/errname.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1104,6 +1104,7 @@ var MySQLErrName = map[uint16]*mysql.ErrMessage{
11041104
ErrPartitionColumnStatsMissing: mysql.Message("Build global-level stats failed due to missing partition-level column stats: %s, please run analyze table to refresh columns of all partitions", nil),
11051105
ErrDDLSetting: mysql.Message("Error happened when %s DDL: %s", nil),
11061106
ErrIngestFailed: mysql.Message("Ingest failed: %s", nil),
1107+
ErrIngestCheckEnvFailed: mysql.Message("Check ingest environment failed: %s", nil),
11071108
ErrNotSupportedWithSem: mysql.Message("Feature '%s' is not supported when security enhanced mode is enabled", nil),
11081109

11091110
ErrPlacementPolicyCheck: mysql.Message("Placement policy didn't meet the constraint, reason: %s", nil),

errors.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1406,6 +1406,11 @@ error = '''
14061406
Ingest failed: %s
14071407
'''
14081408

1409+
["ddl:8256"]
1410+
error = '''
1411+
Check ingest environment failed: %s
1412+
'''
1413+
14091414
["ddl:8260"]
14101415
error = '''
14111416
Job [%v] can't be paused: %s

tests/realtikvtest/addindextest/integration_test.go

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -477,9 +477,13 @@ func TestAddIndexBackfillLostUpdate(t *testing.T) {
477477
d := dom.DDL()
478478
originalCallback := d.GetHook()
479479
defer d.SetHook(originalCallback)
480+
<<<<<<< HEAD
480481
callback := newTestCallBack(t, dom)
482+
=======
483+
hook := &callback.TestDDLCallback{}
484+
>>>>>>> 7f016ce2f20 (ddl: create temp dir automatically for adding index (#45457))
481485
var runDML bool
482-
callback.OnJobRunAfterExported = func(job *model.Job) {
486+
hook.OnJobRunAfterExported = func(job *model.Job) {
483487
if t.Failed() || runDML {
484488
return
485489
}
@@ -514,10 +518,25 @@ func TestAddIndexBackfillLostUpdate(t *testing.T) {
514518
_, err = tk1.Exec("commit;")
515519
assert.NoError(t, err)
516520
}
517-
d.SetHook(callback)
521+
d.SetHook(hook)
518522
require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/mockDMLExecutionStateBeforeImport", "1*return"))
519523
tk.MustExec("alter table t add unique index idx(b);")
520524
tk.MustExec("admin check table t;")
521525
tk.MustQuery("select * from t;").Check(testkit.Rows("1 2 1"))
522526
require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/mockDMLExecutionStateBeforeImport"))
523527
}
528+
529+
func TestAddIndexPreCheckFailed(t *testing.T) {
530+
store := realtikvtest.CreateMockStoreAndSetup(t)
531+
tk := testkit.NewTestKit(t, store)
532+
tk.MustExec("drop database if exists addindexlit;")
533+
tk.MustExec("create database addindexlit;")
534+
tk.MustExec("use addindexlit;")
535+
tk.MustExec(`set global tidb_ddl_enable_fast_reorg=on;`)
536+
537+
tk.MustExec("create table t(id int primary key, b int, k int);")
538+
tk.MustExec("insert into t values (1, 1, 1);")
539+
require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/ddl/ingest/mockIngestCheckEnvFailed", "return"))
540+
tk.MustGetErrMsg("alter table t add index idx(b);", "[ddl:8256]Check ingest environment failed: mock error")
541+
require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/ddl/ingest/mockIngestCheckEnvFailed"))
542+
}

util/dbterror/ddl_terror.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,8 @@ var (
401401
ErrDDLSetting = ClassDDL.NewStd(mysql.ErrDDLSetting)
402402
// ErrIngestFailed returns when the DDL ingest job is failed.
403403
ErrIngestFailed = ClassDDL.NewStd(mysql.ErrIngestFailed)
404+
// ErrIngestCheckEnvFailed returns when the DDL ingest env is failed to init.
405+
ErrIngestCheckEnvFailed = ClassDDL.NewStd(mysql.ErrIngestCheckEnvFailed)
404406

405407
// ErrColumnInChange indicates there is modification on the column in parallel.
406408
ErrColumnInChange = ClassDDL.NewStd(mysql.ErrColumnInChange)

0 commit comments

Comments
 (0)