argoproj/argo-workflows · error

failed to check if bucket %s exists: %w

Error message

failed to check if bucket %s exists: %w

What it means

Raised in Save when outputArtifact.OSS.CreateBucketIfNotPresent is true and the IsBucketExist probe fails. This is an API/transport error while checking bucket existence, not a 'bucket missing' result — usually credentials, endpoint, or permission problems. Non-transient errors abort the Save backoff immediately.

Source

Thrown at workflow/artifacts/oss/oss.go:241

			logger.Info(ctx, "OSS Save")
			osscli, err := ossDriver.newOSSClient(ctx)
			if err != nil {
				return !isTransientOSSErr(ctx, err), err
			}
			isDir, err := file.IsDirectory(path)
			if err != nil {
				logger.WithError(err).Warn(ctx, "Failed to test if path is a directory")
				return false, nil
			}
			bucketName := outputArtifact.OSS.Bucket
			err = setBucketLogging(osscli, bucketName)
			if err != nil {
				return !isTransientOSSErr(ctx, err), err
			}
			if outputArtifact.OSS.CreateBucketIfNotPresent {
				exists, existsErr := osscli.IsBucketExist(bucketName)
				if existsErr != nil {
					return !isTransientOSSErr(ctx, existsErr), fmt.Errorf("failed to check if bucket %s exists: %w", bucketName, existsErr)
				}
				if !exists {
					err = osscli.CreateBucket(bucketName)
					if err != nil {
						return !isTransientOSSErr(ctx, err), fmt.Errorf("failed to automatically create bucket %s when it's not present: %w", bucketName, err)
					}
				}
			}
			bucket, err := osscli.Bucket(bucketName)
			if err != nil {
				return !isTransientOSSErr(ctx, err), err
			}
			objectName := outputArtifact.OSS.Key
			if outputArtifact.OSS.LifecycleRule != nil {
				err = setBucketLifecycleRule(osscli, outputArtifact.OSS)
				if err != nil {
					return !isTransientOSSErr(ctx, err), err
				}

View on GitHub (pinned to 35bff19146)

Solutions

  1. Check the wrapped OSS error code to distinguish AccessDenied (fix RAM policy: add oss:GetBucketInfo/oss:ListObjects) from network errors (fix endpoint/DNS).
  2. Verify endpoint and credentials in the artifact repository secret; test with ossutil using the same AK/SK/endpoint.
  3. If you pre-create the bucket yourself, set createBucketIfNotPresent: false to skip the existence probe entirely.
  4. If transient (network/throttle), re-run — the driver's backoff already retries transient errors.

Example fix

// before (workflow spec)
oss:
  createBucketIfNotPresent: true
// after (bucket managed externally, avoids the probe)
oss:
  createBucketIfNotPresent: false
Defensive patterns

Strategy: validation

Validate before calling

// preflight outside the workflow, same credentials
cli, err := oss.New(endpoint, ak, sk)
if err != nil { panic(err) }
ok, err := cli.IsBucketExist(bucketName)
if err != nil { panic(fmt.Sprintf("bucket probe failed (creds/endpoint/permission): %v", err)) }
fmt.Printf("bucket %s exists: %v\n", bucketName, ok)

Type guard

func isBucketProbeErr(err error) bool {
	se, ok := err.(oss.ServiceError)
	return ok && (se.Code == "AccessDenied" || se.Code == "SignatureDoesNotMatch" || se.StatusCode == 403)
}

Try / catch

err := driver.Save(ctx, path, artifact)
if err != nil && strings.Contains(err.Error(), "failed to check if bucket") {
	var se oss.ServiceError
	if errors.As(err, &se) && se.StatusCode == 403 {
		// credentials/permission problem: alert, don't retry
	}
}

Prevention

When it happens

Trigger: Saving an output artifact with createBucketIfNotPresent: true while osscli.IsBucketExist errors: invalid AK/SK, unreachable or wrong endpoint, missing oss:GetBucketInfo/List permission on the account, or DNS/network failure from the exec to OSS.

Common situations: First-time setup where the secret's endpoint is wrong (e.g. internal endpoint from outside the VPC); RAM user lacking bucket-level read permissions; typo'd bucket name violating OSS naming rules can also surface here depending on SDK validation; corporate proxy blocking the OSS endpoint.

Related errors


AI-assisted analysis of argoproj/argo-workflows@35bff19146 (2026-09-03). Data as JSON: /api/errors/07fb3ef262f30619. Report an issue: GitHub.