ddl: add context cancel check before commit (#53134)

close pingcap/tidb#52805
This commit is contained in:
tangenta
2024-05-13 11:44:40 +08:00
committed by GitHub
parent 3239d121c9
commit 601e21ca50

View File

@ -845,7 +845,7 @@ func (w *JobContext) setDDLLabelForDiagnosis(jobType model.ActionType) {
}
func (w *worker) HandleJobDone(d *ddlCtx, job *model.Job, t *meta.Meta) error {
if err := w.checkOwnerBeforeCommit(); err != nil {
if err := w.checkBeforeCommit(); err != nil {
return err
}
err := w.finishDDLJob(t, job)
@ -956,7 +956,7 @@ func (w *worker) HandleDDLJobTable(d *ddlCtx, job *model.Job) (int64, error) {
return 0, err
}
if err = w.checkOwnerBeforeCommit(); err != nil {
if err = w.checkBeforeCommit(); err != nil {
d.unlockSchemaVersion(job.ID)
return 0, err
}
@ -1008,13 +1008,18 @@ func (w *worker) HandleDDLJobTable(d *ddlCtx, job *model.Job) (int64, error) {
return schemaVer, nil
}
func (w *worker) checkOwnerBeforeCommit() error {
func (w *worker) checkBeforeCommit() error {
if !w.ddlCtx.isOwner() && w.tp != localWorker {
// Since this TiDB instance is not a DDL owner anymore,
// it should not commit any transaction.
w.sess.Rollback()
return dbterror.ErrNotOwner
}
if err := w.ctx.Err(); err != nil {
// The worker context is canceled, it should not commit any transaction.
return err
}
return nil
}