|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- package metacache
-
- import (
- "time"
-
- "gitlink.org.cn/cloudream/common/pkgs/logger"
- stgglb "gitlink.org.cn/cloudream/jcs-pub/common/globals"
- coormq "gitlink.org.cn/cloudream/jcs-pub/common/pkgs/mq/coordinator"
- cortypes "gitlink.org.cn/cloudream/jcs-pub/coordinator/types"
- )
-
- func (m *MetaCacheHost) AddHubMeta() *HubMeta {
- meta := &HubMeta{}
- meta.cache = NewSimpleMetaCache(SimpleMetaCacheConfig[cortypes.HubID, cortypes.Hub]{
- Getter: meta.load,
- Expire: time.Minute * 5,
- })
-
- m.caches = append(m.caches, meta)
- return meta
- }
-
- type HubMeta struct {
- cache *SimpleMetaCache[cortypes.HubID, cortypes.Hub]
- }
-
- func (h *HubMeta) Get(hubID cortypes.HubID) *cortypes.Hub {
- v, ok := h.cache.Get(hubID)
- if ok {
- return &v
- }
- return nil
- }
-
- func (h *HubMeta) GetMany(hubIDs []cortypes.HubID) []*cortypes.Hub {
- vs, oks := h.cache.GetMany(hubIDs)
- ret := make([]*cortypes.Hub, len(vs))
- for i := range vs {
- if oks[i] {
- ret[i] = &vs[i]
- }
- }
- return ret
- }
-
- func (h *HubMeta) ClearOutdated() {
- h.cache.ClearOutdated()
- }
-
- func (h *HubMeta) load(keys []cortypes.HubID) ([]cortypes.Hub, []bool) {
- vs := make([]cortypes.Hub, len(keys))
- oks := make([]bool, len(keys))
-
- coorCli, err := stgglb.CoordinatorMQPool.Acquire()
- if err != nil {
- logger.Warnf("new coordinator client: %v", err)
- return vs, oks
- }
- defer stgglb.CoordinatorMQPool.Release(coorCli)
-
- get, err := coorCli.GetHubs(coormq.NewGetHubs(keys))
- if err != nil {
- logger.Warnf("get hubs: %v", err)
- return vs, oks
- }
-
- for i := range keys {
- if get.Hubs[i] != nil {
- vs[i] = *get.Hubs[i]
- oks[i] = true
- }
- }
-
- return vs, oks
- }
|