aboutsummaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorzeripath <art27@cantab.net>2021-11-13 11:28:50 +0000
committerGitHub <noreply@github.com>2021-11-13 19:28:50 +0800
commitbab95c3a86f63f521311a77e516be5b6c521e0a4 (patch)
tree2b77de81f4985b5f899c8769cfa1616dbf4285f7 /modules
parent47448083a1b88201dcfa00ec06fb748f5ac18040 (diff)
downloadgitea-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.go3
-rw-r--r--modules/task/task.go6
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
}