Store unfinished tasks on disks
This commit is contained in:
@@ -2,6 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"log"
|
||||
"net/http"
|
||||
@@ -39,6 +40,33 @@ func main() {
|
||||
activeDBs := make(map[string]*db.DB)
|
||||
mountToDiskID := make(map[string]string)
|
||||
|
||||
resumeDiskTask := func(info disk.DiskInfo, database *db.DB) {
|
||||
rec, ok, err := database.ActiveTask()
|
||||
if err != nil {
|
||||
log.Printf("load active task for %s: %v", info.DiskID, err)
|
||||
return
|
||||
}
|
||||
if !ok || rec.Task.Type != "copy" {
|
||||
return
|
||||
}
|
||||
|
||||
var opts copier.Options
|
||||
if err := json.Unmarshal(rec.Payload, &opts); err != nil {
|
||||
log.Printf("decode task payload for %s: %v", info.DiskID, err)
|
||||
return
|
||||
}
|
||||
opts.DiskID = info.DiskID
|
||||
opts.MountPath = info.MountPath
|
||||
if rec.Task.Phase != task.PhaseQueued && rec.Task.Phase != task.PhasePreparing && rec.Task.Phase != task.PhaseReplacing && opts.OverwriteMode == config.OverwriteDelete {
|
||||
opts.OverwriteMode = config.OverwriteSkip
|
||||
}
|
||||
|
||||
taskStore.Upsert(rec.Task)
|
||||
if err := cp.Resume(context.Background(), rec.Task.ID, opts); err != nil {
|
||||
log.Printf("resume task %s for %s: %v", rec.Task.ID, info.DiskID, err)
|
||||
}
|
||||
}
|
||||
|
||||
openDiskDB := func(info disk.DiskInfo) {
|
||||
if info.DiskID == "" {
|
||||
return
|
||||
@@ -65,6 +93,7 @@ func main() {
|
||||
activeDBs[info.DiskID] = d
|
||||
cp.SetDB(info.DiskID, d)
|
||||
log.Printf("disk DB opened for %s", info.DiskID)
|
||||
resumeDiskTask(info, d)
|
||||
}
|
||||
|
||||
closeDiskDB := func(info disk.DiskInfo) {
|
||||
|
||||
Reference in New Issue
Block a user