MCPcopy Create free account
hub / github.com/couchbase/cbft / getSupervisorMaps

Method getSupervisorMaps

query_supervisor.go:243–344  ·  view source on GitHub ↗
(nodeDefs *cbgt.NodeDefs,
	indexName string, longerThan string)

Source from the content-addressed store, hash-verified

241}
242
243func (qss *QuerySupervisorDetails) getSupervisorMaps(nodeDefs *cbgt.NodeDefs,
244 indexName string, longerThan string) ([]response, map[string]string) {
245 type supervisorReq struct {
246 uuid string
247 url string
248 }
249 type supervisorResp struct {
250 uuid string
251 data responseData
252 err error
253 }
254
255 supervisorDetailsURLs, urlErrs := qss.getURLs(nodeDefs, indexName,
256 longerThan)
257 var wg sync.WaitGroup
258 groupSize := getWorkerCount(len(supervisorDetailsURLs))
259 requestCh := make(chan *supervisorReq, len(supervisorDetailsURLs))
260 responseCh := make(chan *supervisorResp, len(supervisorDetailsURLs))
261
262 for i := 0; i < groupSize; i++ {
263 wg.Add(1)
264 go func() {
265 for reqs := range requestCh {
266 ctx, ctxCancel := context.WithTimeout(context.Background(),
267 60*time.Second)
268 req, err := http.NewRequestWithContext(ctx, "GET", reqs.url, nil)
269 req.Header.Add(rest.CLUSTER_ACTION, clusterActionScatterGather)
270 if err != nil {
271 ctxCancel()
272 responseCh <- &supervisorResp{
273 uuid: reqs.uuid,
274 err: fmt.Errorf("failed to form a request"+
275 " to node: %s, err: %v", reqs.uuid, err),
276 }
277 continue
278 }
279
280 httpClient := cbgt.HttpClient()
281 res, err := httpClient.Do(req)
282 ctxCancel()
283 if err != nil {
284 responseCh <- &supervisorResp{
285 uuid: reqs.uuid,
286 err: fmt.Errorf("failed to send a request to node:"+
287 " %s, err: %v", reqs.uuid, err),
288 }
289 continue
290 }
291 data, derr := ioutil.ReadAll(res.Body)
292 res.Body.Close()
293 if derr != nil {
294 responseCh <- &supervisorResp{
295 uuid: reqs.uuid,
296 err: fmt.Errorf("error in decoding response from node:"+
297 " %s, err: %v", reqs.uuid, derr),
298 }
299 continue
300 }

Callers 1

ServeHTTPMethod · 0.95

Calls 5

getURLsMethod · 0.95
getWorkerCountFunction · 0.85
UnmarshalJSONFunction · 0.85
AddMethod · 0.80
CloseMethod · 0.45

Tested by

no test coverage detected