func ConnectToBucket()

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
}