diff options
author | zeripath <art27@cantab.net> | 2021-11-13 11:28:50 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-13 19:28:50 +0800 |
commit | bab95c3a86f63f521311a77e516be5b6c521e0a4 (patch) | |
tree | 2b77de81f4985b5f899c8769cfa1616dbf4285f7 /modules | |
parent | 47448083a1b88201dcfa00ec06fb748f5ac18040 (diff) | |
download | gitea-bab95c3a86f63f521311a77e516be5b6c521e0a4.tar.gz gitea-bab95c3a86f63f521311a77e516be5b6c521e0a4.zip |
Correctly handle failed migrations (#17575)
* Correctly handle failed migrations
There is a bug in handling failed migrations whereby the migration task gets decoupled
from the migration repository. This leads to a failure of the task to get deleted with
the repository and also leads to the migration failed page resulting in a ISE.
This PR removes the zeroing out of the task id from the migration but also makes
the migration handler tolerate missing tasks much nicer.
Fix #17571
Signed-off-by: Andrew Thornton <art27@cantab.net>
Diffstat (limited to 'modules')
-rw-r--r-- | modules/task/migrate.go | 3 | ||||
-rw-r--r-- | modules/task/task.go | 6 |
2 files changed, 6 insertions, 3 deletions
diff --git a/modules/task/migrate.go b/modules/task/migrate.go index 52f4bb91cf..715e76b4ad 100644 --- a/modules/task/migrate.go +++ b/modules/task/migrate.go @@ -58,6 +58,9 @@ func runMigrateTask(t *models.Task) (err error) { t.EndTime = timeutil.TimeStampNow() t.Status = structs.TaskStatusFailed t.Message = err.Error() + // Ensure that the repo loaded before we zero out the repo ID from the task - thus ensuring that we can delete it + _ = t.LoadRepo() + t.RepoID = 0 if err := t.UpdateCols("status", "errors", "repo_id", "end_time"); err != nil { log.Error("Task UpdateCols failed: %v", err) diff --git a/modules/task/task.go b/modules/task/task.go index 4e782869f9..51377df78c 100644 --- a/modules/task/task.go +++ b/modules/task/task.go @@ -90,7 +90,7 @@ func CreateMigrateTask(doer, u *models.User, opts base.MigrateOptions) (*models. return nil, err } - var task = models.Task{ + var task = &models.Task{ DoerID: doer.ID, OwnerID: u.ID, Type: structs.TaskTypeMigrateRepo, @@ -98,7 +98,7 @@ func CreateMigrateTask(doer, u *models.User, opts base.MigrateOptions) (*models. PayloadContent: string(bs), } - if err := models.CreateTask(&task); err != nil { + if err := models.CreateTask(task); err != nil { return nil, err } @@ -126,5 +126,5 @@ func CreateMigrateTask(doer, u *models.User, opts base.MigrateOptions) (*models. return nil, err } - return &task, nil + return task, nil } |