2023-08-23 16:17:33 +08:00
|
|
|
|
package task
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"fmt"
|
2025-01-25 08:01:57 +08:00
|
|
|
|
"strconv"
|
|
|
|
|
|
"time"
|
2024-11-08 15:13:08 +08:00
|
|
|
|
|
2023-08-23 16:17:33 +08:00
|
|
|
|
"gitlink.org.cn/cloudream/common/pkgs/logger"
|
2024-11-08 15:13:08 +08:00
|
|
|
|
"gitlink.org.cn/cloudream/common/sdks/storage/cdsapi"
|
2023-09-21 10:44:26 +08:00
|
|
|
|
schglb "gitlink.org.cn/cloudream/scheduler/common/globals"
|
2023-09-04 16:48:46 +08:00
|
|
|
|
exectsk "gitlink.org.cn/cloudream/scheduler/common/pkgs/mq/executor/task"
|
2023-08-23 16:17:33 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
type StorageLoadPackage struct {
|
2023-09-13 10:43:12 +08:00
|
|
|
|
*exectsk.StorageLoadPackage
|
2023-08-23 16:17:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2023-09-13 10:43:12 +08:00
|
|
|
|
func NewStorageLoadPackage(info *exectsk.StorageLoadPackage) *StorageLoadPackage {
|
2023-08-23 16:17:33 +08:00
|
|
|
|
return &StorageLoadPackage{
|
2023-09-13 10:43:12 +08:00
|
|
|
|
StorageLoadPackage: info,
|
2023-08-23 16:17:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-08-09 17:42:10 +08:00
|
|
|
|
func (t *StorageLoadPackage) Execute(task *Task, ctx TaskContext) {
|
2023-08-23 16:17:33 +08:00
|
|
|
|
log := logger.WithType[StorageLoadPackage]("Task")
|
2024-06-07 16:18:07 +08:00
|
|
|
|
log.Debugf("begin with %v", logger.FormatStruct(t.StorageLoadPackage))
|
2023-08-23 16:17:33 +08:00
|
|
|
|
defer log.Debugf("end")
|
|
|
|
|
|
|
2024-06-05 15:43:17 +08:00
|
|
|
|
packagePath, err := t.do(ctx)
|
2023-09-04 16:48:46 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
//TODO 若任务失败,上报的状态failed字段根据情况修改
|
2024-08-09 17:42:10 +08:00
|
|
|
|
task.SendStatus(exectsk.NewStorageLoadPackageStatus(err.Error(), ""))
|
2023-09-04 16:48:46 +08:00
|
|
|
|
} else {
|
2024-08-09 17:42:10 +08:00
|
|
|
|
task.SendStatus(exectsk.NewStorageLoadPackageStatus("", packagePath))
|
2023-09-04 16:48:46 +08:00
|
|
|
|
}
|
2023-08-23 16:17:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2023-10-08 16:46:19 +08:00
|
|
|
|
func (t *StorageLoadPackage) do(ctx TaskContext) (string, error) {
|
2023-09-21 10:44:26 +08:00
|
|
|
|
stgCli, err := schglb.CloudreamStoragePool.Acquire()
|
2023-08-23 16:17:33 +08:00
|
|
|
|
if err != nil {
|
2023-10-08 16:46:19 +08:00
|
|
|
|
return "", fmt.Errorf("new cloudream storage client: %w", err)
|
2023-08-23 16:17:33 +08:00
|
|
|
|
}
|
2023-09-26 09:59:01 +08:00
|
|
|
|
defer schglb.CloudreamStoragePool.Release(stgCli)
|
2023-08-23 16:17:33 +08:00
|
|
|
|
|
2025-01-25 08:01:57 +08:00
|
|
|
|
path := strconv.FormatInt(int64(t.PackageID), 10) + "_" + strconv.FormatInt(time.Now().Unix(), 10)
|
|
|
|
|
|
_, err = stgCli.StorageLoadPackage(cdsapi.StorageLoadPackageReq{
|
2023-09-13 10:43:12 +08:00
|
|
|
|
UserID: t.UserID,
|
|
|
|
|
|
PackageID: t.PackageID,
|
|
|
|
|
|
StorageID: t.StorageID,
|
2025-01-25 08:01:57 +08:00
|
|
|
|
RootPath: path,
|
2023-08-23 16:17:33 +08:00
|
|
|
|
})
|
2023-10-08 16:46:19 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return "", err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-01-25 08:01:57 +08:00
|
|
|
|
return path, nil
|
2023-08-23 16:17:33 +08:00
|
|
|
|
}
|
2023-09-13 10:43:12 +08:00
|
|
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
|
|
Register(NewStorageLoadPackage)
|
|
|
|
|
|
}
|