in server/datasource/etcd/kv/kv_dao.go [344:377]
func findManyAndDelete(ctx context.Context, kvIDs []string, project, domain string) ([]*model.KVDoc, int64, error) {
var docs []*model.KVDoc
var opOptions []etcdadpt.OpOptions
var err error
for _, id := range kvIDs {
if _, err = getKVDoc(ctx, domain, project, id); err != nil {
continue
}
opOptions = append(opOptions, etcdadpt.OpDel(etcdadpt.WithStrKey(key.KV(domain, project, id))))
}
if len(opOptions) == 0 {
return make([]*model.KVDoc, 0), 0, err
}
resp, err := etcdadpt.ListAndDeleteMany(ctx, opOptions...)
if err != nil {
openlog.Error("find Keys error: " + err.Error())
return nil, 0, err
}
if resp.Count == 0 {
return nil, 0, datasource.ErrKeyNotExists
}
for _, kv := range resp.Kvs {
var doc model.KVDoc
err := json.Unmarshal(kv.Value, &doc)
if err != nil {
openlog.Error("fail to unmarshal kv" + err.Error())
return nil, 0, err
}
docs = append(docs, &doc)
}
return docs, resp.Count, nil
}