Client provides addresses of current leader and members to callback function of upper layer
- Dominant language
- Go
- Stars
- 1.2k
- Forks
- 783
- Avg merge
- 5d 21h
- Merged PRs (30d)
- 36
Description
## Enhancement Task
Currently PD client has the functionality to maintain the latest leader and members in `pdServiceDiscovery`. It's helpful that this functionality can help caller know latest PD leader/member information when caller access them directly rather than use Client interface. One example is lightning directly use leader address to use HTTP API.
So I propose these new methods to Client interface
```golang
type Client interface {
...
ToLeader(ctx context.Context, fn func(leaderAddr string) error) error
ToAtLeastOneMember(ctx context.Context, fn func(addrs []string) error) error
}
```
And caller can use it like
```golang
// check PD version
err := pdCli.ToAtLeastOneMember(ctx, func (addrs []string) error {
for _, addr := range addrs {
err := tls.WithHost(addr).GetJSON(ctx, "/pd/api/v1/version", &rawVersion)
...
}
...
})
```
When the callback function fails for network problem, PD client can also trigger internal leader/member updating.
Contributor guide
Assessment
This issue has not been assessed yet.