Skip to content

Commit

Permalink
Merge pull request #26705 from nebril/issue-26704
Browse files Browse the repository at this point in the history
Automatic merge from submit-queue

Make discovery summarizer call servers in parallel

fixes #26704
  • Loading branch information
k8s-merge-robot authored Jul 18, 2016
2 parents 6032494 + ee6f50e commit 9b5696b
Showing 1 changed file with 28 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -102,20 +102,39 @@ func (ds *discoverySummarizerServer) indexHandler(w http.ResponseWriter, r *http
func (ds *discoverySummarizerServer) summarizeGroupVersionsHandler(path string) func(http.ResponseWriter, *http.Request) {
return func(w http.ResponseWriter, r *http.Request) {
var apiGroupList *unversioned.APIGroupList
// TODO: We can cache and parallelize the calls to all servers.
// TODO: We can cache calls to all servers.
groups := make(chan *unversioned.APIGroupList)
errorChannel := make(chan error)
for _, serverAddress := range ds.groupVersionPaths[path] {
groupList, err := ds.getAPIGroupList(serverAddress + path)
if err != nil {
addr := serverAddress
go func(groups chan *unversioned.APIGroupList, error_channel chan error) {
groupList, err := ds.getAPIGroupList(addr + path)
if err != nil {
errorChannel <- err
return
}
groups <- groupList
return
}(groups, errorChannel)
}

var groupList *unversioned.APIGroupList
var err error
for range ds.groupVersionPaths[path] {
select {
case groupList = <-groups:
if apiGroupList == nil {
apiGroupList = &unversioned.APIGroupList{}
*apiGroupList = *groupList
} else {
apiGroupList.Groups = append(apiGroupList.Groups, groupList.Groups...)
}
case err = <-errorChannel:
ds.writeErr(http.StatusBadGateway, err, w)
return
}
if apiGroupList == nil {
apiGroupList = &unversioned.APIGroupList{}
*apiGroupList = *groupList
} else {
apiGroupList.Groups = append(apiGroupList.Groups, groupList.Groups...)
}
}

ds.writeRawJSON(http.StatusOK, *apiGroupList, w)
return
}
Expand Down

0 comments on commit 9b5696b

Please sign in to comment.