| 60 | } |
| 61 | |
| 62 | func (ln *labelName) encode(strs []string) ([]*controller.PrometheusLabelName, error) { |
| 63 | ln.lock.Lock() |
| 64 | defer ln.lock.Unlock() |
| 65 | |
| 66 | resp := make([]*controller.PrometheusLabelName, 0) |
| 67 | var dbToAdd []*metadbmodel.PrometheusLabelName |
| 68 | for i := range strs { |
| 69 | str := strs[i] |
| 70 | if id, ok := ln.strToID.Get(str); ok { |
| 71 | resp = append(resp, &controller.PrometheusLabelName{Name: &str, Id: proto.Uint32(uint32(id))}) |
| 72 | continue |
| 73 | } |
| 74 | dbToAdd = append(dbToAdd, &metadbmodel.PrometheusLabelName{Name: str}) |
| 75 | } |
| 76 | if len(dbToAdd) == 0 { |
| 77 | return resp, nil |
| 78 | } |
| 79 | ids, err := ln.allocate(len(dbToAdd)) |
| 80 | if err != nil { |
| 81 | return nil, err |
| 82 | } |
| 83 | for i := range ids { |
| 84 | dbToAdd[i].ID = ids[i] |
| 85 | } |
| 86 | err = addBatch(ln.org.DB, dbToAdd, ln.resourceType) |
| 87 | if err != nil { |
| 88 | log.Errorf("add %s error: %s", ln.resourceType, err.Error(), ln.org.LogPrefix) |
| 89 | return nil, err |
| 90 | } |
| 91 | for i := range dbToAdd { |
| 92 | id := dbToAdd[i].ID |
| 93 | str := dbToAdd[i].Name |
| 94 | ln.strToID.Set(str, id) |
| 95 | resp = append(resp, &controller.PrometheusLabelName{Name: &str, Id: proto.Uint32(uint32(id))}) |
| 96 | } |
| 97 | return resp, nil |
| 98 | } |
| 99 | |
| 100 | func (ln *labelName) load() (ids mapset.Set[int], err error) { |
| 101 | var items []*metadbmodel.PrometheusLabelName |