mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
add timeout for http client
This commit is contained in:
parent
af7154c1f4
commit
59f7764772
@ -68,7 +68,7 @@ func (s *serverVersionAdapter) GetDowngradeInfo() *serverversion.DowngradeInfo {
|
||||
}
|
||||
|
||||
func (s *serverVersionAdapter) GetMembersVersions() map[string]*version.Versions {
|
||||
return getMembersVersions(s.lg, s.cluster, s.id, s.peerRt)
|
||||
return getMembersVersions(s.lg, s.cluster, s.id, s.peerRt, s.Cfg.ReqTimeout())
|
||||
}
|
||||
|
||||
func (s *serverVersionAdapter) GetStorageVersion() *semver.Version {
|
||||
|
@ -298,7 +298,7 @@ func bootstrapExistingClusterNoWAL(cfg config.ServerConfig, prt http.RoundTrippe
|
||||
if err := membership.ValidateClusterAndAssignIDs(cfg.Logger, cl, existingCluster); err != nil {
|
||||
return nil, fmt.Errorf("error validating peerURLs %s: %v", existingCluster, err)
|
||||
}
|
||||
if !isCompatibleWithCluster(cfg.Logger, cl, cl.MemberByName(cfg.Name).ID, prt) {
|
||||
if !isCompatibleWithCluster(cfg.Logger, cl, cl.MemberByName(cfg.Name).ID, prt, cfg.ReqTimeout()) {
|
||||
return nil, fmt.Errorf("incompatible with current running cluster")
|
||||
}
|
||||
scaleUpLearners := false
|
||||
|
@ -138,7 +138,7 @@ func getRemotePeerURLs(cl *membership.RaftCluster, local string) []string {
|
||||
// The key of the returned map is the member's ID. The value of the returned map
|
||||
// is the semver versions string, including server and cluster.
|
||||
// If it fails to get the version of a member, the key will be nil.
|
||||
func getMembersVersions(lg *zap.Logger, cl *membership.RaftCluster, local types.ID, rt http.RoundTripper) map[string]*version.Versions {
|
||||
func getMembersVersions(lg *zap.Logger, cl *membership.RaftCluster, local types.ID, rt http.RoundTripper, timeout time.Duration) map[string]*version.Versions {
|
||||
members := cl.Members()
|
||||
vers := make(map[string]*version.Versions)
|
||||
for _, m := range members {
|
||||
@ -150,7 +150,7 @@ func getMembersVersions(lg *zap.Logger, cl *membership.RaftCluster, local types.
|
||||
vers[m.ID.String()] = &version.Versions{Server: version.Version, Cluster: cv}
|
||||
continue
|
||||
}
|
||||
ver, err := getVersion(lg, m, rt)
|
||||
ver, err := getVersion(lg, m, rt, timeout)
|
||||
if err != nil {
|
||||
lg.Warn("failed to get version", zap.String("remote-member-id", m.ID.String()), zap.Error(err))
|
||||
vers[m.ID.String()] = nil
|
||||
@ -183,9 +183,9 @@ func allowedVersionRange(downgradeEnabled bool) (minV *semver.Version, maxV *sem
|
||||
// cluster version in the range of [MinV, MaxV] and no known members has a cluster version
|
||||
// out of the range.
|
||||
// We set this rule since when the local member joins, another member might be offline.
|
||||
func isCompatibleWithCluster(lg *zap.Logger, cl *membership.RaftCluster, local types.ID, rt http.RoundTripper) bool {
|
||||
vers := getMembersVersions(lg, cl, local, rt)
|
||||
minV, maxV := allowedVersionRange(getDowngradeEnabledFromRemotePeers(lg, cl, local, rt))
|
||||
func isCompatibleWithCluster(lg *zap.Logger, cl *membership.RaftCluster, local types.ID, rt http.RoundTripper, timeout time.Duration) bool {
|
||||
vers := getMembersVersions(lg, cl, local, rt, timeout)
|
||||
minV, maxV := allowedVersionRange(getDowngradeEnabledFromRemotePeers(lg, cl, local, rt, timeout))
|
||||
return isCompatibleWithVers(lg, vers, local, minV, maxV)
|
||||
}
|
||||
|
||||
@ -234,9 +234,10 @@ func isCompatibleWithVers(lg *zap.Logger, vers map[string]*version.Versions, loc
|
||||
|
||||
// getVersion returns the Versions of the given member via its
|
||||
// peerURLs. Returns the last error if it fails to get the version.
|
||||
func getVersion(lg *zap.Logger, m *membership.Member, rt http.RoundTripper) (*version.Versions, error) {
|
||||
func getVersion(lg *zap.Logger, m *membership.Member, rt http.RoundTripper, timeout time.Duration) (*version.Versions, error) {
|
||||
cc := &http.Client{
|
||||
Transport: rt,
|
||||
Timeout: timeout,
|
||||
}
|
||||
var (
|
||||
err error
|
||||
@ -331,14 +332,14 @@ func promoteMemberHTTP(ctx context.Context, url string, id uint64, peerRt http.R
|
||||
}
|
||||
|
||||
// getDowngradeEnabledFromRemotePeers will get the downgrade enabled status of the cluster.
|
||||
func getDowngradeEnabledFromRemotePeers(lg *zap.Logger, cl *membership.RaftCluster, local types.ID, rt http.RoundTripper) bool {
|
||||
func getDowngradeEnabledFromRemotePeers(lg *zap.Logger, cl *membership.RaftCluster, local types.ID, rt http.RoundTripper, timeout time.Duration) bool {
|
||||
members := cl.Members()
|
||||
|
||||
for _, m := range members {
|
||||
if m.ID == local {
|
||||
continue
|
||||
}
|
||||
enable, err := getDowngradeEnabled(lg, m, rt)
|
||||
enable, err := getDowngradeEnabled(lg, m, rt, timeout)
|
||||
if err != nil {
|
||||
lg.Warn("failed to get downgrade enabled status", zap.String("remote-member-id", m.ID.String()), zap.Error(err))
|
||||
} else {
|
||||
@ -352,9 +353,10 @@ func getDowngradeEnabledFromRemotePeers(lg *zap.Logger, cl *membership.RaftClust
|
||||
|
||||
// getDowngradeEnabled returns the downgrade enabled status of the given member
|
||||
// via its peerURLs. Returns the last error if it fails to get it.
|
||||
func getDowngradeEnabled(lg *zap.Logger, m *membership.Member, rt http.RoundTripper) (bool, error) {
|
||||
func getDowngradeEnabled(lg *zap.Logger, m *membership.Member, rt http.RoundTripper, timeout time.Duration) (bool, error) {
|
||||
cc := &http.Client{
|
||||
Transport: rt,
|
||||
Timeout: timeout,
|
||||
}
|
||||
var (
|
||||
err error
|
||||
|
Loading…
x
Reference in New Issue
Block a user