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.0 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package services
  2. import (
  3. "fmt"
  4. "time"
  5. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  6. stgglb "gitlink.org.cn/cloudream/storage/common/globals"
  7. agtmq "gitlink.org.cn/cloudream/storage/common/pkgs/mq/agent"
  8. coormq "gitlink.org.cn/cloudream/storage/common/pkgs/mq/coordinator"
  9. )
  10. type CacheService struct {
  11. *Service
  12. }
  13. func (svc *Service) CacheSvc() *CacheService {
  14. return &CacheService{Service: svc}
  15. }
  16. func (svc *CacheService) StartCacheMovePackage(userID cdssdk.UserID, packageID cdssdk.PackageID, nodeID cdssdk.NodeID) (string, error) {
  17. agentCli, err := stgglb.AgentMQPool.Acquire(nodeID)
  18. if err != nil {
  19. return "", fmt.Errorf("new agent client: %w", err)
  20. }
  21. defer stgglb.AgentMQPool.Release(agentCli)
  22. startResp, err := agentCli.StartCacheMovePackage(agtmq.NewStartCacheMovePackage(userID, packageID))
  23. if err != nil {
  24. return "", fmt.Errorf("start cache move package: %w", err)
  25. }
  26. return startResp.TaskID, nil
  27. }
  28. func (svc *CacheService) WaitCacheMovePackage(nodeID cdssdk.NodeID, taskID string, waitTimeout time.Duration) (bool, error) {
  29. agentCli, err := stgglb.AgentMQPool.Acquire(nodeID)
  30. if err != nil {
  31. return true, fmt.Errorf("new agent client: %w", err)
  32. }
  33. defer stgglb.AgentMQPool.Release(agentCli)
  34. waitResp, err := agentCli.WaitCacheMovePackage(agtmq.NewWaitCacheMovePackage(taskID, waitTimeout.Milliseconds()))
  35. if err != nil {
  36. return true, fmt.Errorf("wait cache move package: %w", err)
  37. }
  38. if !waitResp.IsComplete {
  39. return false, nil
  40. }
  41. if waitResp.Error != "" {
  42. return true, fmt.Errorf("%s", waitResp.Error)
  43. }
  44. return true, nil
  45. }
  46. func (svc *CacheService) CacheRemovePackage(packageID cdssdk.PackageID, nodeID cdssdk.NodeID) error {
  47. coorCli, err := stgglb.CoordinatorMQPool.Acquire()
  48. if err != nil {
  49. return fmt.Errorf("new agent client: %w", err)
  50. }
  51. defer stgglb.CoordinatorMQPool.Release(coorCli)
  52. _, err = coorCli.CacheRemovePackage(coormq.ReqCacheRemoveMovedPackage(packageID, nodeID))
  53. if err != nil {
  54. return fmt.Errorf("requesting to coordinator: %w", err)
  55. }
  56. return nil
  57. }

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