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.

storagemeta.go 1.6 kB

7 months ago
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package metacache
  2. import (
  3. "time"
  4. "gitlink.org.cn/cloudream/storage2/client/types"
  5. )
  6. func (m *MetaCacheHost) AddStorageMeta() *UserSpaceMeta {
  7. meta := &UserSpaceMeta{}
  8. meta.cache = NewSimpleMetaCache(SimpleMetaCacheConfig[types.UserSpaceID, types.UserSpaceDetail]{
  9. Getter: meta.load,
  10. Expire: time.Minute * 5,
  11. })
  12. m.caches = append(m.caches, meta)
  13. return meta
  14. }
  15. type UserSpaceMeta struct {
  16. cache *SimpleMetaCache[types.UserSpaceID, types.UserSpaceDetail]
  17. }
  18. func (s *UserSpaceMeta) Get(spaceID types.UserSpaceID) *types.UserSpaceDetail {
  19. v, ok := s.cache.Get(spaceID)
  20. if ok {
  21. return &v
  22. }
  23. return nil
  24. }
  25. func (s *UserSpaceMeta) GetMany(spaceIDs []types.UserSpaceID) []*types.UserSpaceDetail {
  26. vs, oks := s.cache.GetMany(spaceIDs)
  27. ret := make([]*types.UserSpaceDetail, len(vs))
  28. for i := range vs {
  29. if oks[i] {
  30. ret[i] = &vs[i]
  31. }
  32. }
  33. return ret
  34. }
  35. func (s *UserSpaceMeta) ClearOutdated() {
  36. s.cache.ClearOutdated()
  37. }
  38. func (s *UserSpaceMeta) load(keys []types.UserSpaceID) ([]types.UserSpaceDetail, []bool) {
  39. // vs := make([]stgmod.StorageDetail, len(keys))
  40. // oks := make([]bool, len(keys))
  41. // coorCli, err := stgglb.CoordinatorMQPool.Acquire()
  42. // if err != nil {
  43. // logger.Warnf("new coordinator client: %v", err)
  44. // return vs, oks
  45. // }
  46. // defer stgglb.CoordinatorMQPool.Release(coorCli)
  47. // get, err := coorCli.GetStorageDetails(coormq.ReqGetStorageDetails(keys))
  48. // if err != nil {
  49. // logger.Warnf("get storage details: %v", err)
  50. // return vs, oks
  51. // }
  52. // for i := range keys {
  53. // if get.Storages[i] != nil {
  54. // vs[i] = *get.Storages[i]
  55. // oks[i] = true
  56. // }
  57. // }
  58. // return vs, oks
  59. }

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