getDowngradeEnabled returns the downgrade enabled status of the given member via its peerURLs. Returns the last error if it fails to get it.
(lg *zap.Logger, m *membership.Member, rt http.RoundTripper, timeout time.Duration)
| 382 | // getDowngradeEnabled returns the downgrade enabled status of the given member |
| 383 | // via its peerURLs. Returns the last error if it fails to get it. |
| 384 | func getDowngradeEnabled(lg *zap.Logger, m *membership.Member, rt http.RoundTripper, timeout time.Duration) (bool, error) { |
| 385 | cc := &http.Client{ |
| 386 | Transport: rt, |
| 387 | Timeout: timeout, |
| 388 | CheckRedirect: func(req *http.Request, via []*http.Request) error { |
| 389 | return http.ErrUseLastResponse |
| 390 | }, |
| 391 | } |
| 392 | var ( |
| 393 | err error |
| 394 | resp *http.Response |
| 395 | ) |
| 396 | |
| 397 | for _, u := range m.PeerURLs { |
| 398 | addr := u + DowngradeEnabledPath |
| 399 | resp, err = cc.Get(addr) |
| 400 | if err != nil { |
| 401 | lg.Warn( |
| 402 | "failed to reach the peer URL", |
| 403 | zap.String("address", addr), |
| 404 | zap.String("remote-member-id", m.ID.String()), |
| 405 | zap.Error(err), |
| 406 | ) |
| 407 | continue |
| 408 | } |
| 409 | var b []byte |
| 410 | b, err = io.ReadAll(resp.Body) |
| 411 | resp.Body.Close() |
| 412 | if err != nil { |
| 413 | lg.Warn( |
| 414 | "failed to read body of response", |
| 415 | zap.String("address", addr), |
| 416 | zap.String("remote-member-id", m.ID.String()), |
| 417 | zap.Error(err), |
| 418 | ) |
| 419 | continue |
| 420 | } |
| 421 | var enable bool |
| 422 | if enable, err = strconv.ParseBool(string(b)); err != nil { |
| 423 | lg.Warn( |
| 424 | "failed to convert response", |
| 425 | zap.String("address", addr), |
| 426 | zap.String("remote-member-id", m.ID.String()), |
| 427 | zap.Error(err), |
| 428 | ) |
| 429 | continue |
| 430 | } |
| 431 | return enable, nil |
| 432 | } |
| 433 | return false, err |
| 434 | } |
| 435 | |
| 436 | func convertToClusterVersion(v string) (*semver.Version, error) { |
| 437 | ver, err := semver.NewVersion(v) |