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.

create_package.go 2.4 kB

2 years ago
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package task
  2. import (
  3. "fmt"
  4. "time"
  5. "gitlink.org.cn/cloudream/common/pkgs/logger"
  6. "gitlink.org.cn/cloudream/common/pkgs/task"
  7. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  8. stgglb "gitlink.org.cn/cloudream/storage/common/globals"
  9. "gitlink.org.cn/cloudream/storage/common/pkgs/cmd"
  10. "gitlink.org.cn/cloudream/storage/common/pkgs/iterator"
  11. "gitlink.org.cn/cloudream/storage/common/pkgs/mq/coordinator"
  12. )
  13. type CreatePackageResult struct {
  14. PackageID cdssdk.PackageID
  15. Objects []cmd.ObjectUploadResult
  16. }
  17. type CreatePackage struct {
  18. userID cdssdk.UserID
  19. bucketID cdssdk.BucketID
  20. name string
  21. objIter iterator.UploadingObjectIterator
  22. nodeAffinity *cdssdk.NodeID
  23. Result *CreatePackageResult
  24. }
  25. func NewCreatePackage(userID cdssdk.UserID, bucketID cdssdk.BucketID, name string, objIter iterator.UploadingObjectIterator, nodeAffinity *cdssdk.NodeID) *CreatePackage {
  26. return &CreatePackage{
  27. userID: userID,
  28. bucketID: bucketID,
  29. name: name,
  30. objIter: objIter,
  31. nodeAffinity: nodeAffinity,
  32. }
  33. }
  34. func (t *CreatePackage) Execute(task *task.Task[TaskContext], ctx TaskContext, complete CompleteFn) {
  35. log := logger.WithType[CreatePackage]("Task")
  36. log.Debugf("begin")
  37. defer log.Debugf("end")
  38. coorCli, err := stgglb.CoordinatorMQPool.Acquire()
  39. if err != nil {
  40. err = fmt.Errorf("new coordinator client: %w", err)
  41. log.Warn(err.Error())
  42. complete(err, CompleteOption{
  43. RemovingDelay: time.Minute,
  44. })
  45. return
  46. }
  47. defer stgglb.CoordinatorMQPool.Release(coorCli)
  48. createResp, err := coorCli.CreatePackage(coordinator.NewCreatePackage(t.userID, t.bucketID, t.name))
  49. if err != nil {
  50. err = fmt.Errorf("creating package: %w", err)
  51. log.Error(err.Error())
  52. complete(err, CompleteOption{
  53. RemovingDelay: time.Minute,
  54. })
  55. return
  56. }
  57. uploadRet, err := cmd.NewUploadObjects(t.userID, createResp.Package.PackageID, t.objIter, t.nodeAffinity).Execute(&cmd.UploadObjectsContext{
  58. Distlock: ctx.distlock,
  59. Connectivity: ctx.connectivity,
  60. })
  61. if err != nil {
  62. err = fmt.Errorf("uploading objects: %w", err)
  63. log.Error(err.Error())
  64. complete(err, CompleteOption{
  65. RemovingDelay: time.Minute,
  66. })
  67. return
  68. }
  69. t.Result.PackageID = createResp.Package.PackageID
  70. t.Result.Objects = uploadRet.Objects
  71. complete(nil, CompleteOption{
  72. RemovingDelay: time.Minute,
  73. })
  74. }

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