aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com
diff options
context:
space:
mode:
authordependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>2023-08-15 01:15:45 +0000
committerTaras Madan <tarasmadan@google.com>2023-08-16 13:25:32 +0000
commit535131f44a0091d1692cb1619e15cba1fb68dc10 (patch)
tree889547583ca1787632e4a3474f2b5ec5063b8ed7 /vendor/github.com
parentabeafcd013bf86c3c32c0951c0ef43c4312e2e5d (diff)
mod: do: bump google.golang.org/api from 0.136.0 to 0.137.0
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.136.0 to 0.137.0. - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.136.0...v0.137.0) --- updated-dependencies: - dependency-name: google.golang.org/api dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Diffstat (limited to 'vendor/github.com')
-rw-r--r--vendor/github.com/google/s2a-go/internal/v2/s2av2.go81
-rw-r--r--vendor/github.com/google/s2a-go/retry/retry.go144
-rw-r--r--vendor/github.com/google/s2a-go/s2a.go20
3 files changed, 217 insertions, 28 deletions
diff --git a/vendor/github.com/google/s2a-go/internal/v2/s2av2.go b/vendor/github.com/google/s2a-go/internal/v2/s2av2.go
index ff172883f..26fac02dc 100644
--- a/vendor/github.com/google/s2a-go/internal/v2/s2av2.go
+++ b/vendor/github.com/google/s2a-go/internal/v2/s2av2.go
@@ -33,6 +33,7 @@ import (
"github.com/google/s2a-go/internal/handshaker/service"
"github.com/google/s2a-go/internal/tokenmanager"
"github.com/google/s2a-go/internal/v2/tlsconfigstore"
+ "github.com/google/s2a-go/retry"
"github.com/google/s2a-go/stream"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
@@ -44,7 +45,7 @@ import (
const (
s2aSecurityProtocol = "tls"
- defaultS2ATimeout = 3 * time.Second
+ defaultS2ATimeout = 6 * time.Second
)
// An environment variable, which sets the timeout enforced on the connection to the S2A service for handshake.
@@ -131,7 +132,13 @@ func (c *s2av2TransportCreds) ClientHandshake(ctx context.Context, serverAuthori
serverName := removeServerNamePort(serverAuthority)
timeoutCtx, cancel := context.WithTimeout(ctx, GetS2ATimeout())
defer cancel()
- s2AStream, err := createStream(timeoutCtx, c.s2av2Address, c.getS2AStream)
+ var s2AStream stream.S2AStream
+ var err error
+ retry.Run(timeoutCtx,
+ func() error {
+ s2AStream, err = createStream(timeoutCtx, c.s2av2Address, c.getS2AStream)
+ return err
+ })
if err != nil {
grpclog.Infof("Failed to connect to S2Av2: %v", err)
if c.fallbackClientHandshake != nil {
@@ -152,31 +159,34 @@ func (c *s2av2TransportCreds) ClientHandshake(ctx context.Context, serverAuthori
tokenManager = *c.tokenManager
}
- if c.serverName == "" {
- config, err = tlsconfigstore.GetTLSConfigurationForClient(serverName, s2AStream, tokenManager, c.localIdentity, c.verificationMode, c.serverAuthorizationPolicy)
- if err != nil {
- grpclog.Info("Failed to get client TLS config from S2Av2: %v", err)
- if c.fallbackClientHandshake != nil {
- return c.fallbackClientHandshake(ctx, serverAuthority, rawConn, err)
- }
- return nil, nil, err
- }
- } else {
- config, err = tlsconfigstore.GetTLSConfigurationForClient(c.serverName, s2AStream, tokenManager, c.localIdentity, c.verificationMode, c.serverAuthorizationPolicy)
- if err != nil {
- grpclog.Info("Failed to get client TLS config from S2Av2: %v", err)
- if c.fallbackClientHandshake != nil {
- return c.fallbackClientHandshake(ctx, serverAuthority, rawConn, err)
- }
- return nil, nil, err
+ sn := serverName
+ if c.serverName != "" {
+ sn = c.serverName
+ }
+ retry.Run(timeoutCtx,
+ func() error {
+ config, err = tlsconfigstore.GetTLSConfigurationForClient(sn, s2AStream, tokenManager, c.localIdentity, c.verificationMode, c.serverAuthorizationPolicy)
+ return err
+ })
+ if err != nil {
+ grpclog.Info("Failed to get client TLS config from S2Av2: %v", err)
+ if c.fallbackClientHandshake != nil {
+ return c.fallbackClientHandshake(ctx, serverAuthority, rawConn, err)
}
+ return nil, nil, err
}
if grpclog.V(1) {
grpclog.Infof("Got client TLS config from S2Av2.")
}
- creds := credentials.NewTLS(config)
- conn, authInfo, err := creds.ClientHandshake(ctx, serverName, rawConn)
+ creds := credentials.NewTLS(config)
+ var conn net.Conn
+ var authInfo credentials.AuthInfo
+ retry.Run(timeoutCtx,
+ func() error {
+ conn, authInfo, err = creds.ClientHandshake(timeoutCtx, serverName, rawConn)
+ return err
+ })
if err != nil {
grpclog.Infof("Failed to do client handshake using S2Av2: %v", err)
if c.fallbackClientHandshake != nil {
@@ -196,7 +206,13 @@ func (c *s2av2TransportCreds) ServerHandshake(rawConn net.Conn) (net.Conn, crede
}
ctx, cancel := context.WithTimeout(context.Background(), GetS2ATimeout())
defer cancel()
- s2AStream, err := createStream(ctx, c.s2av2Address, c.getS2AStream)
+ var s2AStream stream.S2AStream
+ var err error
+ retry.Run(ctx,
+ func() error {
+ s2AStream, err = createStream(ctx, c.s2av2Address, c.getS2AStream)
+ return err
+ })
if err != nil {
grpclog.Infof("Failed to connect to S2Av2: %v", err)
return nil, nil, err
@@ -213,7 +229,12 @@ func (c *s2av2TransportCreds) ServerHandshake(rawConn net.Conn) (net.Conn, crede
tokenManager = *c.tokenManager
}
- config, err := tlsconfigstore.GetTLSConfigurationForServer(s2AStream, tokenManager, c.localIdentities, c.verificationMode)
+ var config *tls.Config
+ retry.Run(ctx,
+ func() error {
+ config, err = tlsconfigstore.GetTLSConfigurationForServer(s2AStream, tokenManager, c.localIdentities, c.verificationMode)
+ return err
+ })
if err != nil {
grpclog.Infof("Failed to get server TLS config from S2Av2: %v", err)
return nil, nil, err
@@ -221,8 +242,20 @@ func (c *s2av2TransportCreds) ServerHandshake(rawConn net.Conn) (net.Conn, crede
if grpclog.V(1) {
grpclog.Infof("Got server TLS config from S2Av2.")
}
+
creds := credentials.NewTLS(config)
- return creds.ServerHandshake(rawConn)
+ var conn net.Conn
+ var authInfo credentials.AuthInfo
+ retry.Run(ctx,
+ func() error {
+ conn, authInfo, err = creds.ServerHandshake(rawConn)
+ return err
+ })
+ if err != nil {
+ grpclog.Infof("Failed to do server handshake using S2Av2: %v", err)
+ return nil, nil, err
+ }
+ return conn, authInfo, err
}
// Info returns protocol info of s2av2TransportCreds.
diff --git a/vendor/github.com/google/s2a-go/retry/retry.go b/vendor/github.com/google/s2a-go/retry/retry.go
new file mode 100644
index 000000000..224915f4d
--- /dev/null
+++ b/vendor/github.com/google/s2a-go/retry/retry.go
@@ -0,0 +1,144 @@
+/*
+ *
+ * Copyright 2023 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// Package retry provides a retry helper for talking to S2A gRPC server.
+// The implementation is modeled after
+// https://github.com/googleapis/google-cloud-go/blob/main/compute/metadata/retry.go
+package retry
+
+import (
+ "context"
+ "math/rand"
+ "time"
+
+ "google.golang.org/grpc/grpclog"
+)
+
+const (
+ maxRetryAttempts = 5
+ maxRetryForLoops = 10
+)
+
+type defaultBackoff struct {
+ max time.Duration
+ mul float64
+ cur time.Duration
+}
+
+// Pause returns a duration, which is used as the backoff wait time
+// before the next retry.
+func (b *defaultBackoff) Pause() time.Duration {
+ d := time.Duration(1 + rand.Int63n(int64(b.cur)))
+ b.cur = time.Duration(float64(b.cur) * b.mul)
+ if b.cur > b.max {
+ b.cur = b.max
+ }
+ return d
+}
+
+// Sleep will wait for the specified duration or return on context
+// expiration.
+func Sleep(ctx context.Context, d time.Duration) error {
+ t := time.NewTimer(d)
+ select {
+ case <-ctx.Done():
+ t.Stop()
+ return ctx.Err()
+ case <-t.C:
+ return nil
+ }
+}
+
+// NewRetryer creates an instance of S2ARetryer using the defaultBackoff
+// implementation.
+var NewRetryer = func() *S2ARetryer {
+ return &S2ARetryer{bo: &defaultBackoff{
+ cur: 100 * time.Millisecond,
+ max: 30 * time.Second,
+ mul: 2,
+ }}
+}
+
+type backoff interface {
+ Pause() time.Duration
+}
+
+// S2ARetryer implements a retry helper for talking to S2A gRPC server.
+type S2ARetryer struct {
+ bo backoff
+ attempts int
+}
+
+// Attempts return the number of retries attempted.
+func (r *S2ARetryer) Attempts() int {
+ return r.attempts
+}
+
+// Retry returns a boolean indicating whether retry should be performed
+// and the backoff duration.
+func (r *S2ARetryer) Retry(err error) (time.Duration, bool) {
+ if err == nil {
+ return 0, false
+ }
+ if r.attempts >= maxRetryAttempts {
+ return 0, false
+ }
+ r.attempts++
+ return r.bo.Pause(), true
+}
+
+// Run uses S2ARetryer to execute the function passed in, until success or reaching
+// max number of retry attempts.
+func Run(ctx context.Context, f func() error) {
+ retryer := NewRetryer()
+ forLoopCnt := 0
+ var err error
+ for {
+ err = f()
+ if bo, shouldRetry := retryer.Retry(err); shouldRetry {
+ if grpclog.V(1) {
+ grpclog.Infof("will attempt retry: %v", err)
+ }
+ if ctx.Err() != nil {
+ if grpclog.V(1) {
+ grpclog.Infof("exit retry loop due to context error: %v", ctx.Err())
+ }
+ break
+ }
+ if sleepErr := Sleep(ctx, bo); sleepErr != nil {
+ if grpclog.V(1) {
+ grpclog.Infof("exit retry loop due to sleep error: %v", sleepErr)
+ }
+ break
+ }
+ // This shouldn't happen, just make sure we are not stuck in the for loops.
+ forLoopCnt++
+ if forLoopCnt > maxRetryForLoops {
+ if grpclog.V(1) {
+ grpclog.Infof("exit the for loop after too many retries")
+ }
+ break
+ }
+ continue
+ }
+ if grpclog.V(1) {
+ grpclog.Infof("retry conditions not met, exit the loop")
+ }
+ break
+ }
+}
diff --git a/vendor/github.com/google/s2a-go/s2a.go b/vendor/github.com/google/s2a-go/s2a.go
index 1c1349de4..d684c2c73 100644
--- a/vendor/github.com/google/s2a-go/s2a.go
+++ b/vendor/github.com/google/s2a-go/s2a.go
@@ -35,6 +35,7 @@ import (
"github.com/google/s2a-go/internal/handshaker/service"
"github.com/google/s2a-go/internal/tokenmanager"
"github.com/google/s2a-go/internal/v2"
+ "github.com/google/s2a-go/retry"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/grpclog"
@@ -390,9 +391,15 @@ func NewS2ADialTLSContextFunc(opts *ClientOptions) func(ctx context.Context, net
}
timeoutCtx, cancel := context.WithTimeout(ctx, v2.GetS2ATimeout())
defer cancel()
- s2aTLSConfig, err := factory.Build(timeoutCtx, &TLSClientConfigOptions{
- ServerName: serverName,
- })
+
+ var s2aTLSConfig *tls.Config
+ retry.Run(timeoutCtx,
+ func() error {
+ s2aTLSConfig, err = factory.Build(timeoutCtx, &TLSClientConfigOptions{
+ ServerName: serverName,
+ })
+ return err
+ })
if err != nil {
grpclog.Infof("error building S2A TLS config: %v", err)
return fallback(err)
@@ -401,7 +408,12 @@ func NewS2ADialTLSContextFunc(opts *ClientOptions) func(ctx context.Context, net
s2aDialer := &tls.Dialer{
Config: s2aTLSConfig,
}
- c, err := s2aDialer.DialContext(ctx, network, addr)
+ var c net.Conn
+ retry.Run(timeoutCtx,
+ func() error {
+ c, err = s2aDialer.DialContext(timeoutCtx, network, addr)
+ return err
+ })
if err != nil {
grpclog.Infof("error dialing with S2A to %s: %v", addr, err)
return fallback(err)