in sharedlibraries/storage/storage.go [215:252]
func ConnectToBucket(ctx context.Context, p *ConnectParameters) (*storage.BucketHandle, bool) {
var opts []option.ClientOption
if p.UserAgentSuffix != "" {
p.UserAgent = fmt.Sprintf("%s %s)", strings.TrimSuffix(p.UserAgent, ")"), p.UserAgentSuffix)
}
log.CtxLogger(ctx).Debugw("Setting User-Agent header", "userAgent", p.UserAgent)
opts = append(opts, option.WithUserAgent(p.UserAgent))
if p.ServiceAccount != "" {
opts = append(opts, option.WithCredentialsFile(p.ServiceAccount))
}
if p.Endpoint != "" {
opts = append(opts, option.WithEndpoint(p.Endpoint))
}
if p.OAuthToken.SecretValue() != "" {
opts = append(opts, option.WithTokenSource(oauth2.StaticTokenSource(&oauth2.Token{AccessToken: p.OAuthToken.SecretValue()})))
}
client, err := p.StorageClient(ctx, opts...)
if err != nil {
log.CtxLogger(ctx).Errorw("Failed to create GCS client. Ensure your default credentials or service account file are correct.", "error", err)
return nil, false
}
bucket := client.Bucket(p.BucketName)
if !p.VerifyConnection {
log.CtxLogger(ctx).Infow("Created bucket but did not verify connection. Read/write calls may fail.", "bucket", p.BucketName)
return bucket, true
}
log.CtxLogger(ctx).Debugw("Verifying connection to bucket", "bucket", p.BucketName)
rw := &ReadWriter{MaxRetries: p.MaxRetries}
it := bucket.Retryer(rw.retryOptions("Failed to verify bucket connection, retrying.")...).Objects(ctx, nil)
if _, err := it.Next(); err != nil && err != iterator.Done {
log.CtxLogger(ctx).Errorw("Failed to connect to bucket. Ensure the bucket exists and you have permission to access it.", "bucket", p.BucketName, "error", err)
return nil, false
}
log.CtxLogger(ctx).Infow("Connected to bucket", "bucket", p.BucketName)
return bucket, true
}