You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

upload_objects.go 2.6 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // package task 定义了与任务处理相关的结构体和函数。
  2. package task
  3. import (
  4. "time"
  5. "gitlink.org.cn/cloudream/common/pkgs/task" // 引入task包,提供任务处理的通用功能。
  6. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" // 引入cdssdk包,提供云存储相关的SDK接口。
  7. "gitlink.org.cn/cloudream/storage/common/pkgs/cmd" // 引入cmd包,提供命令执行相关的功能。
  8. "gitlink.org.cn/cloudream/storage/common/pkgs/iterator" // 引入iterator包,提供迭代器相关的功能。
  9. )
  10. // UploadObjectsResult 定义了上传对象结果的类型,继承自cmd包的UploadObjectsResult类型。
  11. type UploadObjectsResult = cmd.UploadObjectsResult
  12. // UploadObjects 定义了上传对象的任务结构体,包含上传命令和执行结果。
  13. type UploadObjects struct {
  14. cmd cmd.UploadObjects // cmd字段定义了上传对象的具体操作。
  15. Result *UploadObjectsResult // Result字段存储上传对象操作的结果。
  16. }
  17. // NewUploadObjects 创建并返回一个新的UploadObjects实例。
  18. // userID: 用户ID,标识发起上传请求的用户。
  19. // packageID: 包ID,标识被上传的对象所属的包。
  20. // objectIter: 上传对象迭代器,用于遍历和上传多个对象。
  21. // storageAffinity: 节点亲和性,指定上传任务首选的执行节点。
  22. // 返回值为初始化后的UploadObjects指针。
  23. func NewUploadObjects(userID cdssdk.UserID, packageID cdssdk.PackageID, objectIter iterator.UploadingObjectIterator, storageAffinity cdssdk.StorageID) *UploadObjects {
  24. return &UploadObjects{
  25. cmd: *cmd.NewUploadObjects(userID, packageID, objectIter, storageAffinity),
  26. }
  27. }
  28. // Execute 执行上传对象的任务。
  29. // task: 任务实例,包含任务的上下文信息。
  30. // ctx: 任务执行的上下文,包括分布式锁和网络连接性等信息。
  31. // complete: 任务完成时的回调函数。
  32. // 该函数负责调用上传命令的Execute方法,处理上传结果,并通过回调函数报告任务完成情况。
  33. func (t *UploadObjects) Execute(task *task.Task[TaskContext], ctx TaskContext, complete CompleteFn) {
  34. ret, err := t.cmd.Execute(&cmd.UploadObjectsContext{
  35. Distlock: ctx.distlock, // 使用任务上下文中的分布式锁。
  36. Connectivity: ctx.connectivity, // 使用任务上下文中的网络连接性信息。
  37. StgMgr: ctx.stgMgr,
  38. })
  39. t.Result = ret // 存储上传结果。
  40. complete(err, CompleteOption{
  41. RemovingDelay: time.Minute, // 设置任务完成后的清理延迟为1分钟。
  42. })
  43. }

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。