|
- // 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: 上传对象迭代器,用于遍历和上传多个对象。
- // storageAffinity: 节点亲和性,指定上传任务首选的执行节点。
- // 返回值为初始化后的UploadObjects指针。
- func NewUploadObjects(userID cdssdk.UserID, packageID cdssdk.PackageID, objectIter iterator.UploadingObjectIterator, storageAffinity cdssdk.StorageID) *UploadObjects {
- return &UploadObjects{
- cmd: *cmd.NewUploadObjects(userID, packageID, objectIter, storageAffinity),
- }
- }
-
- // 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, // 使用任务上下文中的网络连接性信息。
- StgMgr: ctx.stgMgr,
- })
-
- t.Result = ret // 存储上传结果。
-
- complete(err, CompleteOption{
- RemovingDelay: time.Minute, // 设置任务完成后的清理延迟为1分钟。
- })
- }
|