Make migration an asynchronous task (#4666)

* Add failed state and error to Job
* Move migration code
* Add websocket monitor
* Make migrate a job managed task
This commit is contained in:
WithoutPants
2024-03-14 11:06:23 +11:00
committed by GitHub
parent fa172c2dfd
commit e5929389b4
36 changed files with 693 additions and 304 deletions

View File

@@ -2,6 +2,7 @@ package manager
import (
"context"
"fmt"
"time"
"github.com/stashapp/stash/pkg/job"
@@ -17,7 +18,7 @@ type OptimiseDatabaseJob struct {
Optimiser Optimiser
}
func (j *OptimiseDatabaseJob) Execute(ctx context.Context, progress *job.Progress) {
func (j *OptimiseDatabaseJob) Execute(ctx context.Context, progress *job.Progress) error {
logger.Info("Optimising database")
progress.SetTotal(2)
@@ -31,11 +32,10 @@ func (j *OptimiseDatabaseJob) Execute(ctx context.Context, progress *job.Progres
})
if job.IsCancelled(ctx) {
logger.Info("Stopping due to user request")
return
return nil
}
if err != nil {
logger.Errorf("Error analyzing database: %v", err)
return
return fmt.Errorf("Error analyzing database: %w", err)
}
progress.ExecuteTask("Vacuuming database", func() {
@@ -44,13 +44,13 @@ func (j *OptimiseDatabaseJob) Execute(ctx context.Context, progress *job.Progres
})
if job.IsCancelled(ctx) {
logger.Info("Stopping due to user request")
return
return nil
}
if err != nil {
logger.Errorf("Error vacuuming database: %v", err)
return
return fmt.Errorf("error vacuuming database: %w", err)
}
elapsed := time.Since(start)
logger.Infof("Finished optimising database after %s", elapsed)
return nil
}