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.

cache.go 2.5 kB

2 years ago
10 months ago
10 months ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package mq
  2. import (
  3. "fmt"
  4. "time"
  5. "gitlink.org.cn/cloudream/common/consts/errorcode"
  6. "gitlink.org.cn/cloudream/common/pkgs/mq"
  7. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  8. mytask "gitlink.org.cn/cloudream/storage/agent/internal/task"
  9. agtmq "gitlink.org.cn/cloudream/storage/common/pkgs/mq/agent"
  10. )
  11. func (svc *Service) CheckCache(msg *agtmq.CheckCache) (*agtmq.CheckCacheResp, *mq.CodeMessage) {
  12. store, err := svc.stgAgts.GetShardStore(msg.StorageID)
  13. if err != nil {
  14. return nil, mq.Failed(errorcode.OperationFailed, fmt.Sprintf("get shard store of storage %v: %v", msg.StorageID, err))
  15. }
  16. infos, err := store.ListAll()
  17. if err != nil {
  18. return nil, mq.Failed(errorcode.OperationFailed, fmt.Sprintf("listting file in shard store: %v", err))
  19. }
  20. var fileHashes []cdssdk.FileHash
  21. for _, info := range infos {
  22. fileHashes = append(fileHashes, info.Hash)
  23. }
  24. return mq.ReplyOK(agtmq.NewCheckCacheResp(fileHashes))
  25. }
  26. func (svc *Service) CacheGC(msg *agtmq.CacheGC) (*agtmq.CacheGCResp, *mq.CodeMessage) {
  27. store, err := svc.stgAgts.GetShardStore(msg.StorageID)
  28. if err != nil {
  29. return nil, mq.Failed(errorcode.OperationFailed, fmt.Sprintf("get shard store of storage %v: %v", msg.StorageID, err))
  30. }
  31. err = store.GC(msg.Avaiables)
  32. if err != nil {
  33. return nil, mq.Failed(errorcode.OperationFailed, fmt.Sprintf("purging cache: %v", err))
  34. }
  35. return mq.ReplyOK(agtmq.RespCacheGC())
  36. }
  37. func (svc *Service) StartCacheMovePackage(msg *agtmq.StartCacheMovePackage) (*agtmq.StartCacheMovePackageResp, *mq.CodeMessage) {
  38. tsk := svc.taskManager.StartNew(mytask.NewCacheMovePackage(msg.UserID, msg.PackageID, msg.StorageID))
  39. return mq.ReplyOK(agtmq.NewStartCacheMovePackageResp(tsk.ID()))
  40. }
  41. func (svc *Service) WaitCacheMovePackage(msg *agtmq.WaitCacheMovePackage) (*agtmq.WaitCacheMovePackageResp, *mq.CodeMessage) {
  42. tsk := svc.taskManager.FindByID(msg.TaskID)
  43. if tsk == nil {
  44. return nil, mq.Failed(errorcode.TaskNotFound, "task not found")
  45. }
  46. if msg.WaitTimeoutMs == 0 {
  47. tsk.Wait()
  48. errMsg := ""
  49. if tsk.Error() != nil {
  50. errMsg = tsk.Error().Error()
  51. }
  52. return mq.ReplyOK(agtmq.NewWaitCacheMovePackageResp(true, errMsg))
  53. } else {
  54. if tsk.WaitTimeout(time.Duration(msg.WaitTimeoutMs) * time.Millisecond) {
  55. errMsg := ""
  56. if tsk.Error() != nil {
  57. errMsg = tsk.Error().Error()
  58. }
  59. return mq.ReplyOK(agtmq.NewWaitCacheMovePackageResp(true, errMsg))
  60. }
  61. return mq.ReplyOK(agtmq.NewWaitCacheMovePackageResp(false, ""))
  62. }
  63. }

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