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.

storage.go 1.8 kB

2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package mq
  2. import (
  3. "fmt"
  4. "gitlink.org.cn/cloudream/common/consts/errorcode"
  5. "gitlink.org.cn/cloudream/common/pkgs/logger"
  6. "gitlink.org.cn/cloudream/common/pkgs/mq"
  7. coormq "gitlink.org.cn/cloudream/storage2/common/pkgs/mq/coordinator"
  8. "gitlink.org.cn/cloudream/storage2/coordinator/internal/db"
  9. cortypes "gitlink.org.cn/cloudream/storage2/coordinator/types"
  10. )
  11. func (svc *Service) GetStorageDetails(msg *coormq.GetStorageDetails) (*coormq.GetStorageDetailsResp, *mq.CodeMessage) {
  12. d := svc.db
  13. stgs, err := db.DoTx02(d, func(tx db.SQLContext) ([]*cortypes.StorageDetail, error) {
  14. stgs, err := d.Storage().BatchGetByID(tx, msg.StorageIDs)
  15. if err != nil {
  16. return nil, fmt.Errorf("getting storages: %v", err)
  17. }
  18. stgMap := make(map[cortypes.StorageID]*cortypes.Storage)
  19. for _, stg := range stgs {
  20. s := stg
  21. stgMap[stg.StorageID] = &s
  22. }
  23. hubIDs := make([]cortypes.HubID, 0, len(stgs))
  24. for _, stg := range stgs {
  25. if stg.MasterHub != 0 {
  26. hubIDs = append(hubIDs, stg.MasterHub)
  27. }
  28. }
  29. hubs, err := d.Hub().BatchGetByID(tx, hubIDs)
  30. if err != nil {
  31. return nil, fmt.Errorf("getting hubs: %v", err)
  32. }
  33. hubMap := make(map[cortypes.HubID]*cortypes.Hub)
  34. for _, hub := range hubs {
  35. h := hub
  36. hubMap[hub.HubID] = &h
  37. }
  38. details := make([]*cortypes.StorageDetail, len(msg.StorageIDs))
  39. for i, stgID := range msg.StorageIDs {
  40. stg := stgMap[stgID]
  41. if stg == nil {
  42. continue
  43. }
  44. details[i] = &cortypes.StorageDetail{
  45. Storage: *stg,
  46. MasterHub: hubMap[stg.MasterHub],
  47. }
  48. }
  49. return details, nil
  50. })
  51. if err != nil {
  52. logger.Warnf("getting storage details: %s", err.Error())
  53. return nil, mq.Failed(errorcode.OperationFailed, fmt.Sprintf("getting storage details: %v", err))
  54. }
  55. return mq.ReplyOK(coormq.RespGetStorageDetails(stgs))
  56. }

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