Skip to content

Commit 9f671d6

Browse files
authored
infoschema: optimize cluster info retrieval using concurrency (#61496)
close #61483
1 parent e8aa60d commit 9f671d6

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

pkg/infoschema/tables.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"fmt"
2222
"net"
2323
"net/http"
24+
"runtime"
2425
"slices"
2526
"sort"
2627
"strconv"
@@ -1981,8 +1982,22 @@ func GetClusterServerInfo(ctx sessionctx.Context) ([]ServerInfo, error) {
19811982
if err != nil {
19821983
return nil, err
19831984
}
1985+
1986+
// Create an error group with Panic recovery and concurrency limit
1987+
resolveGroup := util.NewErrorGroupWithRecover()
1988+
resolveGroup.SetLimit(runtime.GOMAXPROCS(0)) //Limit concurrency to number of CPU cores
1989+
1990+
// Resolve loopback addresses concurrently for each node
19841991
for i := range nodes {
1985-
nodes[i].ResolveLoopBackAddr()
1992+
resolveGroup.Go(func() error {
1993+
nodes[i].ResolveLoopBackAddr()
1994+
return nil
1995+
})
1996+
}
1997+
1998+
// Wait for all address resolutions to complete and check for errors
1999+
if err := resolveGroup.Wait(); err != nil {
2000+
return nil, err
19862001
}
19872002
servers = append(servers, nodes...)
19882003
}

0 commit comments

Comments
 (0)