From e6efbf2fab9e3930dd2674e2d17a56f3ab91eac3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 19:57:13 -0500 Subject: [PATCH] fix(deps): update module cloud.google.com/go/storage to v1.48.0 (#15329) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 +- vendor/cloud.google.com/go/storage/CHANGES.md | 17 +++ vendor/cloud.google.com/go/storage/bucket.go | 19 ++- vendor/cloud.google.com/go/storage/client.go | 3 +- .../go/storage/emulator_test.sh | 2 +- .../go/storage/grpc_client.go | 139 +++++++++++++++--- .../go/storage/http_client.go | 12 +- .../go/storage/internal/version.go | 2 +- vendor/cloud.google.com/go/storage/invoke.go | 6 +- vendor/cloud.google.com/go/storage/storage.go | 82 +++++++++-- vendor/cloud.google.com/go/storage/writer.go | 10 ++ vendor/modules.txt | 2 +- 13 files changed, 246 insertions(+), 54 deletions(-) diff --git a/go.mod b/go.mod index 9f89284834934..747c569ddfa4f 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ toolchain go1.23.1 require ( cloud.google.com/go/bigtable v1.33.0 cloud.google.com/go/pubsub v1.45.3 - cloud.google.com/go/storage v1.47.0 + cloud.google.com/go/storage v1.48.0 dario.cat/mergo v1.0.1 github.com/Azure/azure-pipeline-go v0.2.3 github.com/Azure/azure-storage-blob-go v0.15.0 diff --git a/go.sum b/go.sum index 59c8f36a6b101..463ff97f6ac07 100644 --- a/go.sum +++ b/go.sum @@ -661,8 +661,8 @@ cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= -cloud.google.com/go/storage v1.47.0 h1:ajqgt30fnOMmLfWfu1PWcb+V9Dxz6n+9WKjdNg5R4HM= -cloud.google.com/go/storage v1.47.0/go.mod h1:Ks0vP374w0PW6jOUameJbapbQKXqkjGd/OJRp2fb9IQ= +cloud.google.com/go/storage v1.48.0 h1:FhBDHACbVtdPx7S/AbcKujPWiHvfO6F8OXGgCEbB2+o= +cloud.google.com/go/storage v1.48.0/go.mod h1:aFoDYNMAjv67lp+xcuZqjUKv/ctmplzQ3wJgodA7b+M= cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4= diff --git a/vendor/cloud.google.com/go/storage/CHANGES.md b/vendor/cloud.google.com/go/storage/CHANGES.md index b06751bc81790..dd1dc1c8970a4 100644 --- a/vendor/cloud.google.com/go/storage/CHANGES.md +++ b/vendor/cloud.google.com/go/storage/CHANGES.md @@ -1,6 +1,23 @@ # Changes +## [1.48.0](https://github.com/googleapis/google-cloud-go/compare/storage/v1.47.0...storage/v1.48.0) (2024-12-05) + + +### Features + +* **storage/dataflux:** Run worksteal listing parallel to sequential listing ([#10966](https://github.com/googleapis/google-cloud-go/issues/10966)) ([3005f5a](https://github.com/googleapis/google-cloud-go/commit/3005f5a86c18254e569b8b1782bf014aa62f33cc)) +* **storage:** Add Writer.ChunkTransferTimeout ([#11111](https://github.com/googleapis/google-cloud-go/issues/11111)) ([fd1db20](https://github.com/googleapis/google-cloud-go/commit/fd1db203d0de898891b9920aacb141ea39228609)) +* **storage:** Allow non default service account ([#11137](https://github.com/googleapis/google-cloud-go/issues/11137)) ([19f01c3](https://github.com/googleapis/google-cloud-go/commit/19f01c3c48ed1272c8fc0af9e5f69646cb662808)) + + +### Bug Fixes + +* **storage:** Add backoff to gRPC write retries ([#11200](https://github.com/googleapis/google-cloud-go/issues/11200)) ([a7db927](https://github.com/googleapis/google-cloud-go/commit/a7db927da9cf4c6cf242a5db83e44a16d75a8291)) +* **storage:** Correct direct connectivity check ([#11152](https://github.com/googleapis/google-cloud-go/issues/11152)) ([a75c8b0](https://github.com/googleapis/google-cloud-go/commit/a75c8b0f72c38d9a85c908715c3e37eb5cffb131)) +* **storage:** Disable soft delete policy using 0 retentionDurationSeconds ([#11226](https://github.com/googleapis/google-cloud-go/issues/11226)) ([f087721](https://github.com/googleapis/google-cloud-go/commit/f087721b7b20ad28ded1d0a84756a8bbaa2bb95a)) +* **storage:** Retry SignBlob call for URL signing ([#11154](https://github.com/googleapis/google-cloud-go/issues/11154)) ([f198452](https://github.com/googleapis/google-cloud-go/commit/f198452fd2b29e779e9080ba79d7e873eb0c32ef)) + ## [1.47.0](https://github.com/googleapis/google-cloud-go/compare/storage/v1.46.0...storage/v1.47.0) (2024-11-14) diff --git a/vendor/cloud.google.com/go/storage/bucket.go b/vendor/cloud.google.com/go/storage/bucket.go index 3eded017831eb..43161f7838255 100644 --- a/vendor/cloud.google.com/go/storage/bucket.go +++ b/vendor/cloud.google.com/go/storage/bucket.go @@ -326,11 +326,14 @@ func (b *BucketHandle) defaultSignBytesFunc(email string) func([]byte) ([]byte, if err != nil { return nil, fmt.Errorf("unable to create iamcredentials client: %w", err) } - - resp, err := svc.Projects.ServiceAccounts.SignBlob(fmt.Sprintf("projects/-/serviceAccounts/%s", email), &iamcredentials.SignBlobRequest{ - Payload: base64.StdEncoding.EncodeToString(in), - }).Do() - if err != nil { + // Do the SignBlob call with a retry for transient errors. + var resp *iamcredentials.SignBlobResponse + if err := run(ctx, func(ctx context.Context) error { + resp, err = svc.Projects.ServiceAccounts.SignBlob(fmt.Sprintf("projects/-/serviceAccounts/%s", email), &iamcredentials.SignBlobRequest{ + Payload: base64.StdEncoding.EncodeToString(in), + }).Do() + return err + }, b.retry, true); err != nil { return nil, fmt.Errorf("unable to sign bytes: %w", err) } out, err := base64.StdEncoding.DecodeString(resp.SignedBlob) @@ -1338,8 +1341,10 @@ func (ua *BucketAttrsToUpdate) toRawBucket() *raw.Bucket { } if ua.SoftDeletePolicy != nil { if ua.SoftDeletePolicy.RetentionDuration == 0 { - rb.NullFields = append(rb.NullFields, "SoftDeletePolicy") - rb.SoftDeletePolicy = nil + rb.SoftDeletePolicy = &raw.BucketSoftDeletePolicy{ + RetentionDurationSeconds: 0, + ForceSendFields: []string{"RetentionDurationSeconds"}, + } } else { rb.SoftDeletePolicy = ua.SoftDeletePolicy.toRawSoftDeletePolicy() } diff --git a/vendor/cloud.google.com/go/storage/client.go b/vendor/cloud.google.com/go/storage/client.go index aebba22517579..9841326b0df2a 100644 --- a/vendor/cloud.google.com/go/storage/client.go +++ b/vendor/cloud.google.com/go/storage/client.go @@ -237,7 +237,8 @@ type openWriterParams struct { chunkSize int // chunkRetryDeadline - see `Writer.ChunkRetryDeadline`. // Optional. - chunkRetryDeadline time.Duration + chunkRetryDeadline time.Duration + chunkTransferTimeout time.Duration // Object/request properties diff --git a/vendor/cloud.google.com/go/storage/emulator_test.sh b/vendor/cloud.google.com/go/storage/emulator_test.sh index 7bad7cf391ccf..258201ec9e6f4 100644 --- a/vendor/cloud.google.com/go/storage/emulator_test.sh +++ b/vendor/cloud.google.com/go/storage/emulator_test.sh @@ -89,4 +89,4 @@ then fi # Run tests -go test -v -timeout 10m ./ -run="^Test(RetryConformance|.*Emulated)$" -short 2>&1 | tee -a sponge_log.log +go test -v -timeout 15m ./ ./dataflux -run="^Test(RetryConformance|.*Emulated)$" -short 2>&1 | tee -a sponge_log.log diff --git a/vendor/cloud.google.com/go/storage/grpc_client.go b/vendor/cloud.google.com/go/storage/grpc_client.go index 40789270540e1..bb746b8f031a8 100644 --- a/vendor/cloud.google.com/go/storage/grpc_client.go +++ b/vendor/cloud.google.com/go/storage/grpc_client.go @@ -29,6 +29,7 @@ import ( "cloud.google.com/go/internal/trace" gapic "cloud.google.com/go/storage/internal/apiv2" "cloud.google.com/go/storage/internal/apiv2/storagepb" + "github.com/google/uuid" "github.com/googleapis/gax-go/v2" "google.golang.org/api/googleapi" "google.golang.org/api/iterator" @@ -101,7 +102,10 @@ func defaultGRPCOptions() []option.ClientOption { ) } else { // Only enable DirectPath when the emulator is not being targeted. - defaults = append(defaults, internaloption.EnableDirectPath(true), internaloption.EnableDirectPathXds()) + defaults = append(defaults, + internaloption.EnableDirectPath(true), + internaloption.EnableDirectPathXds(), + internaloption.AllowNonDefaultServiceAccount(true)) } return defaults @@ -1220,7 +1224,7 @@ func (c *grpcStorageClient) OpenWriter(params *openWriterParams, opts ...storage } } - o, off, err := gw.uploadBuffer(recvd, offset, doneReading) + o, off, err := gw.uploadBuffer(recvd, offset, doneReading, newUploadBufferRetryConfig(gw.settings)) if err != nil { err = checkCanceled(err) errorf(err) @@ -2088,12 +2092,7 @@ func (w *gRPCWriter) queryProgress() (int64, error) { // completed. // // Returns object, persisted size, and any error that is not retriable. -func (w *gRPCWriter) uploadBuffer(recvd int, start int64, doneReading bool) (*storagepb.Object, int64, error) { - var shouldRetry = ShouldRetry - if w.settings.retry != nil && w.settings.retry.shouldRetry != nil { - shouldRetry = w.settings.retry.shouldRetry - } - +func (w *gRPCWriter) uploadBuffer(recvd int, start int64, doneReading bool, retryConfig *uploadBufferRetryConfig) (*storagepb.Object, int64, error) { var err error var lastWriteOfEntireObject bool @@ -2140,6 +2139,7 @@ sendBytes: // label this loop so that we can use a continue statement from a nes if w.stream == nil { hds := []string{"x-goog-request-params", fmt.Sprintf("bucket=projects/_/buckets/%s", url.QueryEscape(w.bucket))} ctx := gax.InsertMetadataIntoOutgoingContext(w.ctx, hds...) + ctx = setInvocationHeaders(ctx, retryConfig.invocationID, retryConfig.attempts) w.stream, err = w.c.raw.BidiWriteObject(ctx) if err != nil { @@ -2185,7 +2185,11 @@ sendBytes: // label this loop so that we can use a continue statement from a nes // Retriable errors mean we should start over and attempt to // resend the entire buffer via a new stream. // If not retriable, falling through will return the error received. - if shouldRetry(err) { + err = retryConfig.retriable(w.ctx, err) + + if err == nil { + retryConfig.doBackOff(w.ctx) + // TODO: Add test case for failure modes of querying progress. writeOffset, err = w.determineOffset(start) if err != nil { @@ -2227,11 +2231,17 @@ sendBytes: // label this loop so that we can use a continue statement from a nes if !lastWriteOfEntireObject { resp, err := w.stream.Recv() - // Retriable errors mean we should start over and attempt to - // resend the entire buffer via a new stream. - // If not retriable, falling through will return the error received - // from closing the stream. - if shouldRetry(err) { + if err != nil { + // Retriable errors mean we should start over and attempt to + // resend the entire buffer via a new stream. + // If not retriable, falling through will return the error received + // from closing the stream. + err = retryConfig.retriable(w.ctx, err) + if err != nil { + return nil, 0, err + } + + retryConfig.doBackOff(w.ctx) writeOffset, err = w.determineOffset(start) if err != nil { return nil, 0, err @@ -2243,9 +2253,6 @@ sendBytes: // label this loop so that we can use a continue statement from a nes continue sendBytes } - if err != nil { - return nil, 0, err - } if resp.GetPersistedSize() != writeOffset { // Retry if not all bytes were persisted. @@ -2271,7 +2278,14 @@ sendBytes: // label this loop so that we can use a continue statement from a nes var obj *storagepb.Object for obj == nil { resp, err := w.stream.Recv() - if shouldRetry(err) { + + if err != nil { + err = retryConfig.retriable(w.ctx, err) + if err != nil { + return nil, 0, err + } + retryConfig.doBackOff(w.ctx) + writeOffset, err = w.determineOffset(start) if err != nil { return nil, 0, err @@ -2280,9 +2294,6 @@ sendBytes: // label this loop so that we can use a continue statement from a nes w.stream = nil continue sendBytes } - if err != nil { - return nil, 0, err - } obj = resp.GetResource() } @@ -2367,3 +2378,89 @@ func checkCanceled(err error) error { return err } + +type uploadBufferRetryConfig struct { + attempts int + invocationID string + config *retryConfig + lastErr error +} + +func newUploadBufferRetryConfig(settings *settings) *uploadBufferRetryConfig { + config := settings.retry + + if config == nil { + config = defaultRetry.clone() + } + + if config.shouldRetry == nil { + config.shouldRetry = ShouldRetry + } + + if config.backoff == nil { + config.backoff = &gaxBackoff{} + } else { + config.backoff.SetMultiplier(settings.retry.backoff.GetMultiplier()) + config.backoff.SetInitial(settings.retry.backoff.GetInitial()) + config.backoff.SetMax(settings.retry.backoff.GetMax()) + } + + return &uploadBufferRetryConfig{ + attempts: 1, + invocationID: uuid.New().String(), + config: config, + } +} + +// retriable determines if a retry is necessary and if so returns a nil error; +// otherwise it returns the error to be surfaced to the user. +func (retry *uploadBufferRetryConfig) retriable(ctx context.Context, err error) error { + if err == nil { + // a nil err does not need to be retried + return nil + } + if err != context.Canceled && err != context.DeadlineExceeded { + retry.lastErr = err + } + + if retry.config.policy == RetryNever { + return err + } + + if retry.config.maxAttempts != nil && retry.attempts >= *retry.config.maxAttempts { + return fmt.Errorf("storage: retry failed after %v attempts; last error: %w", retry.attempts, err) + } + + retry.attempts++ + + // Explicitly check context cancellation so that we can distinguish between a + // DEADLINE_EXCEEDED error from the server and a user-set context deadline. + // Unfortunately gRPC will codes.DeadlineExceeded (which may be retryable if it's + // sent by the server) in both cases. + ctxErr := ctx.Err() + if errors.Is(ctxErr, context.Canceled) || errors.Is(ctxErr, context.DeadlineExceeded) { + if retry.lastErr != nil { + return fmt.Errorf("retry failed with %v; last error: %w", ctxErr, retry.lastErr) + } + return ctxErr + } + + if !retry.config.shouldRetry(err) { + return err + } + return nil +} + +// doBackOff pauses for the appropriate amount of time; it should be called after +// encountering a retriable error. +func (retry *uploadBufferRetryConfig) doBackOff(ctx context.Context) error { + p := retry.config.backoff.Pause() + + if ctxErr := gax.Sleep(ctx, p); ctxErr != nil { + if retry.lastErr != nil { + return fmt.Errorf("retry failed with %v; last error: %w", ctxErr, retry.lastErr) + } + return ctxErr + } + return nil +} diff --git a/vendor/cloud.google.com/go/storage/http_client.go b/vendor/cloud.google.com/go/storage/http_client.go index 221078f3e2622..4c62ce9305735 100644 --- a/vendor/cloud.google.com/go/storage/http_client.go +++ b/vendor/cloud.google.com/go/storage/http_client.go @@ -34,6 +34,7 @@ import ( "cloud.google.com/go/iam/apiv1/iampb" "cloud.google.com/go/internal/optional" "cloud.google.com/go/internal/trace" + "github.com/googleapis/gax-go/v2" "github.com/googleapis/gax-go/v2/callctx" "golang.org/x/oauth2/google" "google.golang.org/api/googleapi" @@ -967,6 +968,9 @@ func (c *httpStorageClient) OpenWriter(params *openWriterParams, opts ...storage if params.chunkRetryDeadline != 0 { mediaOpts = append(mediaOpts, googleapi.ChunkRetryDeadline(params.chunkRetryDeadline)) } + if params.chunkTransferTimeout != 0 { + mediaOpts = append(mediaOpts, googleapi.ChunkTransferTimeout(params.chunkTransferTimeout)) + } pr, pw := io.Pipe() @@ -1022,7 +1026,13 @@ func (c *httpStorageClient) OpenWriter(params *openWriterParams, opts ...storage } if useRetry { if s.retry != nil { - call.WithRetry(s.retry.backoff, s.retry.shouldRetry) + bo := &gax.Backoff{} + if s.retry.backoff != nil { + bo.Multiplier = s.retry.backoff.GetMultiplier() + bo.Initial = s.retry.backoff.GetInitial() + bo.Max = s.retry.backoff.GetMax() + } + call.WithRetry(bo, s.retry.shouldRetry) } else { call.WithRetry(nil, nil) } diff --git a/vendor/cloud.google.com/go/storage/internal/version.go b/vendor/cloud.google.com/go/storage/internal/version.go index f2754293858ec..3e13b71a98c09 100644 --- a/vendor/cloud.google.com/go/storage/internal/version.go +++ b/vendor/cloud.google.com/go/storage/internal/version.go @@ -15,4 +15,4 @@ package internal // Version is the current tagged release of the library. -const Version = "1.47.0" +const Version = "1.48.0" diff --git a/vendor/cloud.google.com/go/storage/invoke.go b/vendor/cloud.google.com/go/storage/invoke.go index 99783f3df47b6..b1e838fc7193b 100644 --- a/vendor/cloud.google.com/go/storage/invoke.go +++ b/vendor/cloud.google.com/go/storage/invoke.go @@ -58,9 +58,9 @@ func run(ctx context.Context, call func(ctx context.Context) error, retry *retry } bo := gax.Backoff{} if retry.backoff != nil { - bo.Multiplier = retry.backoff.Multiplier - bo.Initial = retry.backoff.Initial - bo.Max = retry.backoff.Max + bo.Multiplier = retry.backoff.GetMultiplier() + bo.Initial = retry.backoff.GetInitial() + bo.Max = retry.backoff.GetMax() } var errorFunc func(err error) bool = ShouldRetry if retry.shouldRetry != nil { diff --git a/vendor/cloud.google.com/go/storage/storage.go b/vendor/cloud.google.com/go/storage/storage.go index cc91f8fe9fa4e..e112d124ab657 100644 --- a/vendor/cloud.google.com/go/storage/storage.go +++ b/vendor/cloud.google.com/go/storage/storage.go @@ -244,6 +244,8 @@ func NewGRPCClient(ctx context.Context, opts ...option.ClientOption) (*Client, e // Direct connectivity is expected to be available when running from inside // GCP and connecting to a bucket in the same region. // +// Experimental helper that's subject to change. +// // You can pass in [option.ClientOption] you plan on passing to [NewGRPCClient] func CheckDirectConnectivitySupported(ctx context.Context, bucket string, opts ...option.ClientOption) error { view := metric.NewView( @@ -282,7 +284,7 @@ func CheckDirectConnectivitySupported(ctx context.Context, bucket string, opts . hist := m.Data.(metricdata.Histogram[float64]) for _, d := range hist.DataPoints { v, present := d.Attributes.Value("grpc.lb.locality") - if present && v.AsString() != "" { + if present && v.AsString() != "" && v.AsString() != "{}" { return nil } } @@ -2214,7 +2216,7 @@ type withBackoff struct { } func (wb *withBackoff) apply(config *retryConfig) { - config.backoff = &wb.backoff + config.backoff = gaxBackoffFromStruct(&wb.backoff) } // WithMaxAttempts configures the maximum number of times an API call can be made @@ -2305,8 +2307,58 @@ func (wef *withErrorFunc) apply(config *retryConfig) { config.shouldRetry = wef.shouldRetry } +type backoff interface { + Pause() time.Duration + + SetInitial(time.Duration) + SetMax(time.Duration) + SetMultiplier(float64) + + GetInitial() time.Duration + GetMax() time.Duration + GetMultiplier() float64 +} + +func gaxBackoffFromStruct(bo *gax.Backoff) *gaxBackoff { + if bo == nil { + return nil + } + b := &gaxBackoff{} + b.Backoff = *bo + return b +} + +// gaxBackoff is a gax.Backoff that implements the backoff interface +type gaxBackoff struct { + gax.Backoff +} + +func (b *gaxBackoff) SetInitial(i time.Duration) { + b.Initial = i +} + +func (b *gaxBackoff) SetMax(m time.Duration) { + b.Max = m +} + +func (b *gaxBackoff) SetMultiplier(m float64) { + b.Multiplier = m +} + +func (b *gaxBackoff) GetInitial() time.Duration { + return b.Initial +} + +func (b *gaxBackoff) GetMax() time.Duration { + return b.Max +} + +func (b *gaxBackoff) GetMultiplier() float64 { + return b.Multiplier +} + type retryConfig struct { - backoff *gax.Backoff + backoff backoff policy RetryPolicy shouldRetry func(err error) bool maxAttempts *int @@ -2316,22 +2368,22 @@ func (r *retryConfig) clone() *retryConfig { if r == nil { return nil } - - var bo *gax.Backoff - if r.backoff != nil { - bo = &gax.Backoff{ - Initial: r.backoff.Initial, - Max: r.backoff.Max, - Multiplier: r.backoff.Multiplier, - } - } - - return &retryConfig{ - backoff: bo, + newConfig := &retryConfig{ + backoff: nil, policy: r.policy, shouldRetry: r.shouldRetry, maxAttempts: r.maxAttempts, } + + if r.backoff != nil { + bo := &gaxBackoff{} + bo.Initial = r.backoff.GetInitial() + bo.Max = r.backoff.GetMax() + bo.Multiplier = r.backoff.GetMultiplier() + newConfig.backoff = bo + } + + return newConfig } // composeSourceObj wraps a *raw.ComposeRequestSourceObjects, but adds the methods diff --git a/vendor/cloud.google.com/go/storage/writer.go b/vendor/cloud.google.com/go/storage/writer.go index 43a0f0d109374..c0fc2ec2398e1 100644 --- a/vendor/cloud.google.com/go/storage/writer.go +++ b/vendor/cloud.google.com/go/storage/writer.go @@ -88,6 +88,15 @@ type Writer struct { // cancellation. ChunkRetryDeadline time.Duration + // ChunkTransferTimeout sets a per-chunk request timeout for resumable uploads. + // + // For resumable uploads, the Writer will terminate the request and attempt a retry + // if the request to upload a particular chunk stalls for longer than this duration. Retries + // may continue until the ChunkRetryDeadline is reached. + // + // The default value is no timeout. + ChunkTransferTimeout time.Duration + // ForceEmptyContentType is an optional parameter that is used to disable // auto-detection of Content-Type. By default, if a blank Content-Type // is provided, then gax.DetermineContentType is called to sniff the type. @@ -188,6 +197,7 @@ func (w *Writer) openWriter() (err error) { ctx: w.ctx, chunkSize: w.ChunkSize, chunkRetryDeadline: w.ChunkRetryDeadline, + chunkTransferTimeout: w.ChunkTransferTimeout, bucket: w.o.bucket, attrs: &w.ObjectAttrs, conds: w.o.conds, diff --git a/vendor/modules.txt b/vendor/modules.txt index 0ae3d624eb6ef..0f37a836dff45 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -63,7 +63,7 @@ cloud.google.com/go/pubsub/apiv1/pubsubpb cloud.google.com/go/pubsub/internal cloud.google.com/go/pubsub/internal/distribution cloud.google.com/go/pubsub/internal/scheduler -# cloud.google.com/go/storage v1.47.0 +# cloud.google.com/go/storage v1.48.0 ## explicit; go 1.21 cloud.google.com/go/storage cloud.google.com/go/storage/experimental