JCS-pub/client/internal/task/upload_objects.go

52 lines
2.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// package task 定义了与任务处理相关的结构体和函数。
package task
import (
"time"
"gitlink.org.cn/cloudream/common/pkgs/task" // 引入task包提供任务处理的通用功能。
cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" // 引入cdssdk包提供云存储相关的SDK接口。
"gitlink.org.cn/cloudream/storage/common/pkgs/cmd" // 引入cmd包提供命令执行相关的功能。
"gitlink.org.cn/cloudream/storage/common/pkgs/iterator" // 引入iterator包提供迭代器相关的功能。
)
// UploadObjectsResult 定义了上传对象结果的类型继承自cmd包的UploadObjectsResult类型。
type UploadObjectsResult = cmd.UploadObjectsResult
// UploadObjects 定义了上传对象的任务结构体,包含上传命令和执行结果。
type UploadObjects struct {
cmd cmd.UploadObjects // cmd字段定义了上传对象的具体操作。
Result *UploadObjectsResult // Result字段存储上传对象操作的结果。
}
// NewUploadObjects 创建并返回一个新的UploadObjects实例。
// userID: 用户ID标识发起上传请求的用户。
// packageID: 包ID标识被上传的对象所属的包。
// objectIter: 上传对象迭代器,用于遍历和上传多个对象。
// nodeAffinity: 节点亲和性,指定上传任务首选的执行节点。
// 返回值为初始化后的UploadObjects指针。
func NewUploadObjects(userID cdssdk.UserID, packageID cdssdk.PackageID, objectIter iterator.UploadingObjectIterator, nodeAffinity *cdssdk.NodeID) *UploadObjects {
return &UploadObjects{
cmd: *cmd.NewUploadObjects(userID, packageID, objectIter, nodeAffinity),
}
}
// Execute 执行上传对象的任务。
// task: 任务实例,包含任务的上下文信息。
// ctx: 任务执行的上下文,包括分布式锁和网络连接性等信息。
// complete: 任务完成时的回调函数。
// 该函数负责调用上传命令的Execute方法处理上传结果并通过回调函数报告任务完成情况。
func (t *UploadObjects) Execute(task *task.Task[TaskContext], ctx TaskContext, complete CompleteFn) {
ret, err := t.cmd.Execute(&cmd.UploadObjectsContext{
Distlock: ctx.distlock, // 使用任务上下文中的分布式锁。
Connectivity: ctx.connectivity, // 使用任务上下文中的网络连接性信息。
})
t.Result = ret // 存储上传结果。
complete(err, CompleteOption{
RemovingDelay: time.Minute, // 设置任务完成后的清理延迟为1分钟。
})
}