mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 13:37:30 +00:00
Merge pull request #26705 from nebril/issue-26704
Automatic merge from submit-queue Make discovery summarizer call servers in parallel fixes #26704
This commit is contained in:
commit
9b5696b7b4
@ -102,20 +102,39 @@ func (ds *discoverySummarizerServer) indexHandler(w http.ResponseWriter, r *http
|
|||||||
func (ds *discoverySummarizerServer) summarizeGroupVersionsHandler(path string) func(http.ResponseWriter, *http.Request) {
|
func (ds *discoverySummarizerServer) summarizeGroupVersionsHandler(path string) func(http.ResponseWriter, *http.Request) {
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
var apiGroupList *unversioned.APIGroupList
|
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] {
|
for _, serverAddress := range ds.groupVersionPaths[path] {
|
||||||
groupList, err := ds.getAPIGroupList(serverAddress + path)
|
addr := serverAddress
|
||||||
if err != nil {
|
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)
|
ds.writeErr(http.StatusBadGateway, err, w)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if apiGroupList == nil {
|
|
||||||
apiGroupList = &unversioned.APIGroupList{}
|
|
||||||
*apiGroupList = *groupList
|
|
||||||
} else {
|
|
||||||
apiGroupList.Groups = append(apiGroupList.Groups, groupList.Groups...)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ds.writeRawJSON(http.StatusOK, *apiGroupList, w)
|
ds.writeRawJSON(http.StatusOK, *apiGroupList, w)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user