mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-06-13 10:33:35 +00:00
rebase: update kubernetes to latest
updating the kubernetes release to the latest in main go.mod Signed-off-by: Madhu Rajanna <madhupr007@gmail.com>
This commit is contained in:
committed by
mergify[bot]
parent
63c4c05b35
commit
5a66991bb3
21
vendor/go.etcd.io/etcd/client/v3/client.go
generated
vendored
21
vendor/go.etcd.io/etcd/client/v3/client.go
generated
vendored
@ -86,7 +86,7 @@ func New(cfg Config) (*Client, error) {
|
||||
// service interface implementations and do not need connection management.
|
||||
func NewCtxClient(ctx context.Context, opts ...Option) *Client {
|
||||
cctx, cancel := context.WithCancel(ctx)
|
||||
c := &Client{ctx: cctx, cancel: cancel, lgMu: new(sync.RWMutex)}
|
||||
c := &Client{ctx: cctx, cancel: cancel, lgMu: new(sync.RWMutex), mu: new(sync.RWMutex)}
|
||||
for _, opt := range opts {
|
||||
opt(c)
|
||||
}
|
||||
@ -231,15 +231,30 @@ func (c *Client) dialSetupOpts(creds grpccredentials.TransportCredentials, dopts
|
||||
opts = append(opts, grpc.WithInsecure())
|
||||
}
|
||||
|
||||
unaryMaxRetries := defaultUnaryMaxRetries
|
||||
if c.cfg.MaxUnaryRetries > 0 {
|
||||
unaryMaxRetries = c.cfg.MaxUnaryRetries
|
||||
}
|
||||
|
||||
backoffWaitBetween := defaultBackoffWaitBetween
|
||||
if c.cfg.BackoffWaitBetween > 0 {
|
||||
backoffWaitBetween = c.cfg.BackoffWaitBetween
|
||||
}
|
||||
|
||||
backoffJitterFraction := defaultBackoffJitterFraction
|
||||
if c.cfg.BackoffJitterFraction > 0 {
|
||||
backoffJitterFraction = c.cfg.BackoffJitterFraction
|
||||
}
|
||||
|
||||
// Interceptor retry and backoff.
|
||||
// TODO: Replace all of clientv3/retry.go with RetryPolicy:
|
||||
// https://github.com/grpc/grpc-proto/blob/cdd9ed5c3d3f87aef62f373b93361cf7bddc620d/grpc/service_config/service_config.proto#L130
|
||||
rrBackoff := withBackoff(c.roundRobinQuorumBackoff(defaultBackoffWaitBetween, defaultBackoffJitterFraction))
|
||||
rrBackoff := withBackoff(c.roundRobinQuorumBackoff(backoffWaitBetween, backoffJitterFraction))
|
||||
opts = append(opts,
|
||||
// Disable stream retry by default since go-grpc-middleware/retry does not support client streams.
|
||||
// Streams that are safe to retry are enabled individually.
|
||||
grpc.WithStreamInterceptor(c.streamClientInterceptor(withMax(0), rrBackoff)),
|
||||
grpc.WithUnaryInterceptor(c.unaryClientInterceptor(withMax(defaultUnaryMaxRetries), rrBackoff)),
|
||||
grpc.WithUnaryInterceptor(c.unaryClientInterceptor(withMax(unaryMaxRetries), rrBackoff)),
|
||||
)
|
||||
|
||||
return opts, nil
|
||||
|
9
vendor/go.etcd.io/etcd/client/v3/config.go
generated
vendored
9
vendor/go.etcd.io/etcd/client/v3/config.go
generated
vendored
@ -88,5 +88,14 @@ type Config struct {
|
||||
// PermitWithoutStream when set will allow client to send keepalive pings to server without any active streams(RPCs).
|
||||
PermitWithoutStream bool `json:"permit-without-stream"`
|
||||
|
||||
// MaxUnaryRetries is the maximum number of retries for unary RPCs.
|
||||
MaxUnaryRetries uint `json:"max-unary-retries"`
|
||||
|
||||
// BackoffWaitBetween is the wait time before retrying an RPC.
|
||||
BackoffWaitBetween time.Duration `json:"backoff-wait-between"`
|
||||
|
||||
// BackoffJitterFraction is the jitter fraction to randomize backoff wait time.
|
||||
BackoffJitterFraction float64 `json:"backoff-jitter-fraction"`
|
||||
|
||||
// TODO: support custom balancer picker
|
||||
}
|
||||
|
20
vendor/go.etcd.io/etcd/client/v3/retry_interceptor.go
generated
vendored
20
vendor/go.etcd.io/etcd/client/v3/retry_interceptor.go
generated
vendored
@ -19,6 +19,7 @@ package clientv3
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"io"
|
||||
"sync"
|
||||
"time"
|
||||
@ -85,7 +86,7 @@ func (c *Client) unaryClientInterceptor(optFuncs ...retryOption) grpc.UnaryClien
|
||||
}
|
||||
continue
|
||||
}
|
||||
if !isSafeRetry(c.lg, lastErr, callOpts) {
|
||||
if !isSafeRetry(c, lastErr, callOpts) {
|
||||
return lastErr
|
||||
}
|
||||
}
|
||||
@ -279,7 +280,7 @@ func (s *serverStreamingRetryingStream) receiveMsgAndIndicateRetry(m interface{}
|
||||
return true, err
|
||||
|
||||
}
|
||||
return isSafeRetry(s.client.lg, err, s.callOpts), err
|
||||
return isSafeRetry(s.client, err, s.callOpts), err
|
||||
}
|
||||
|
||||
func (s *serverStreamingRetryingStream) reestablishStreamAndResendBuffer(callCtx context.Context) (grpc.ClientStream, error) {
|
||||
@ -319,17 +320,28 @@ func waitRetryBackoff(ctx context.Context, attempt uint, callOpts *options) erro
|
||||
}
|
||||
|
||||
// isSafeRetry returns "true", if request is safe for retry with the given error.
|
||||
func isSafeRetry(lg *zap.Logger, err error, callOpts *options) bool {
|
||||
func isSafeRetry(c *Client, err error, callOpts *options) bool {
|
||||
if isContextError(err) {
|
||||
return false
|
||||
}
|
||||
|
||||
// Situation when learner refuses RPC it is supposed to not serve is from the server
|
||||
// perspective not retryable.
|
||||
// But for backward-compatibility reasons we need to support situation that
|
||||
// customer provides mix of learners (not yet voters) and voters with an
|
||||
// expectation to pick voter in the next attempt.
|
||||
// TODO: Ideally client should be 'aware' which endpoint represents: leader/voter/learner with high probability.
|
||||
if errors.Is(err, rpctypes.ErrGPRCNotSupportedForLearner) && len(c.Endpoints()) > 1 {
|
||||
return true
|
||||
}
|
||||
|
||||
switch callOpts.retryPolicy {
|
||||
case repeatable:
|
||||
return isSafeRetryImmutableRPC(err)
|
||||
case nonRepeatable:
|
||||
return isSafeRetryMutableRPC(err)
|
||||
default:
|
||||
lg.Warn("unrecognized retry policy", zap.String("retryPolicy", callOpts.retryPolicy.String()))
|
||||
c.lg.Warn("unrecognized retry policy", zap.String("retryPolicy", callOpts.retryPolicy.String()))
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user