in server/datasource/etcd/kv/kv_cache.go [235:267]
func (kc *Cache) getKvFromEtcd(ctx context.Context, req *CacheSearchReq, kvIdsLeft []string) []*model.KVDoc {
if len(kvIdsLeft) == 0 {
return nil
}
openlog.Debug("get kv from etcd by kvId")
wg := sync.WaitGroup{}
docs := make([]*model.KVDoc, len(kvIdsLeft))
for i, kvID := range kvIdsLeft {
wg.Add(1)
go func(kvID string, cnt int) {
defer wg.Done()
docKey := key.KV(req.Domain, req.Project, kvID)
kv, err := etcdadpt.Get(ctx, docKey)
if err != nil {
openlog.Error(fmt.Sprintf("failed to get kv from etcd, err %v", err))
return
}
doc, err := kc.GetKvDoc(kv)
if err != nil {
openlog.Error(fmt.Sprintf("failed to unmarshal kv, err %v", err))
return
}
kc.StoreKvDoc(doc.ID, doc)
docs[cnt] = doc
}(kvID, i)
}
wg.Wait()
return docs
}