diff --git a/br/pkg/storage/gcs.go b/br/pkg/storage/gcs.go index f32d4344d9a83..7c6deb7aaac3f 100644 --- a/br/pkg/storage/gcs.go +++ b/br/pkg/storage/gcs.go @@ -296,6 +296,9 @@ func NewGCSStorage(ctx context.Context, gcs *backuppb.GCS, opts *ExternalStorage if gcs.Endpoint != "" { clientOps = append(clientOps, option.WithEndpoint(gcs.Endpoint)) } + // the HTTPClient should has credential, currently the HTTPClient only has the http.Transport. + // So we remove the HTTPClient in the storage.New(). + // Issue: https: //github.com/pingcap/tidb/issues/47022 if opts.HTTPClient != nil { clientOps = append(clientOps, option.WithHTTPClient(opts.HTTPClient)) } diff --git a/br/pkg/storage/storage.go b/br/pkg/storage/storage.go index e4624e2ed475e..7ed15ce2d16bf 100644 --- a/br/pkg/storage/storage.go +++ b/br/pkg/storage/storage.go @@ -144,7 +144,9 @@ type ExternalStorageOptions struct { NoCredentials bool // HTTPClient to use. The created storage may ignore this field if it is not - // directly using HTTP (e.g. the local storage). + // directly using HTTP (e.g. the local storage) or use self-design HTTP client + // with credential (e.g. the gcs). + // NOTICE: the HTTPClient is only used by s3 storage and azure blob storage. HTTPClient *http.Client // CheckPermissions check the given permission in New() function. @@ -197,6 +199,9 @@ func New(ctx context.Context, backend *backuppb.StorageBackend, opts *ExternalSt if backend.Gcs == nil { return nil, errors.Annotate(berrors.ErrStorageInvalidConfig, "GCS config not found") } + // the HTTPClient should has credential, currently the HTTPClient only has the http.Transport. + // Issue: https: //github.com/pingcap/tidb/issues/47022 + opts.HTTPClient = nil return NewGCSStorage(ctx, backend.Gcs, opts) case *backuppb.StorageBackend_AzureBlobStorage: return newAzureBlobStorage(ctx, backend.AzureBlobStorage, opts)