(pid uint64)
| 213 | } |
| 214 | |
| 215 | func (mc *MetaHttpClient) GetAllDentry(pid uint64) (dentryMap map[string]*metanode.Dentry, err error) { |
| 216 | defer func() { |
| 217 | if err != nil { |
| 218 | log.LogErrorf("action[GetAllDentry],pid:%v,err:%v", pid, err) |
| 219 | } |
| 220 | }() |
| 221 | dentryMap = make(map[string]*metanode.Dentry) |
| 222 | request := newAPIRequest(http.MethodGet, "/getAllDentry") |
| 223 | request.params["pid"] = fmt.Sprintf("%v", pid) |
| 224 | respData, err := mc.serveRequest(request) |
| 225 | log.LogInfof("err:%v,respData:%v\n", err, string(respData)) |
| 226 | if err != nil { |
| 227 | return |
| 228 | } |
| 229 | |
| 230 | dec := json.NewDecoder(bytes.NewBuffer(respData)) |
| 231 | dec.UseNumber() |
| 232 | |
| 233 | // It's the "items". We expect it to be an array |
| 234 | if err = parseToken(dec, '['); err != nil { |
| 235 | return |
| 236 | } |
| 237 | // Read items (large objects) |
| 238 | for dec.More() { |
| 239 | // Read next item (large object) |
| 240 | lo := &metanode.Dentry{} |
| 241 | if err = dec.Decode(lo); err != nil { |
| 242 | return |
| 243 | } |
| 244 | dentryMap[fmt.Sprintf("%v_%v", lo.ParentId, lo.Name)] = lo |
| 245 | } |
| 246 | // Array closing delimiter |
| 247 | if err = parseToken(dec, ']'); err != nil { |
| 248 | return |
| 249 | } |
| 250 | return |
| 251 | } |
| 252 | |
| 253 | func parseToken(dec *json.Decoder, expectToken rune) (err error) { |
| 254 | t, err := dec.Token() |
no test coverage detected