{"record":{"id":"14da9495f89464e8","repo":"hashicorp/terraform","slug":"error-getting-bucket-s-v","errorCode":null,"errorMessage":"error getting bucket %s: %#v","messagePattern":"error getting bucket (.+?): %#v","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/backend/remote-state/oss/client.go","lineNumber":138,"sourceCode":"\t\tif err := bucket.PutObject(c.stateFile, body, options...); err != nil {\n\t\t\treturn diags.Append(fmt.Errorf(\"failed to upload state %s: %#v\", c.stateFile, err))\n\t\t}\n\t}\n\n\tsum := md5.Sum(data)\n\tif err := c.putMD5(sum[:]); err != nil {\n\t\t// if this errors out, we unfortunately have to error out altogether,\n\t\t// since the next Get will inevitably fail.\n\t\treturn diags.Append(fmt.Errorf(\"failed to store state MD5: %s\", err))\n\t}\n\treturn diags\n}\n\nfunc (c *RemoteClient) Delete() tfdiags.Diagnostics {\n\tvar diags tfdiags.Diagnostics\n\tbucket, err := c.ossClient.Bucket(c.bucketName)\n\tif err != nil {\n\t\treturn diags.Append(fmt.Errorf(\"error getting bucket %s: %#v\", c.bucketName, err))\n\t}\n\n\tlog.Printf(\"[DEBUG] Deleting remote state from OSS: %#v\", c.stateFile)\n\n\tif err := bucket.DeleteObject(c.stateFile); err != nil {\n\t\treturn diags.Append(fmt.Errorf(\"error deleting state %s: %#v\", c.stateFile, err))\n\t}\n\n\tif err := c.deleteMD5(); err != nil {\n\t\tlog.Printf(\"[WARN] Error deleting state MD5: %s\", err)\n\t}\n\treturn diags\n}\n\nfunc (c *RemoteClient) Lock(info *statemgr.LockInfo) (string, error) {\n\tif c.otsTable == \"\" {\n\t\treturn \"\", nil\n\t}","sourceCodeStart":120,"sourceCodeEnd":156,"githubUrl":"https://github.com/hashicorp/terraform/blob/c9def3e214014c1188faabfc4a5bde5095139765/internal/backend/remote-state/oss/client.go#L120-L156","documentation":"In RemoteClient.Delete() (client.go:136-138), ossClient.Bucket(c.bucketName) failed before deleting the state object. Same local constructor validation as errors 349/358; non-network. Blocks workspace deletion (terraform workspace delete).","triggerScenarios":"Delete() reached with an invalid bucketName (uppercase, underscore, length, illegal chars). Bucket() rejects it locally; no OSS call made.","commonSituations":"Bucket attribute edited to an invalid name; variable interpolation produced garbage; stale cached backend config.","solutions":["Fix the bucket name to valid OSS form and re-run terraform init.","Ensure the variable feeding bucket resolves to the real lowercase bucket name.","Re-run terraform workspace delete after init."],"exampleFix":"// before\nbackend \"oss\" {\n  bucket = \"TF_State\"\n}\n\n// after\nbackend \"oss\" {\n  bucket = \"tf-state\"\n}","handlingStrategy":"validation","validationCode":"// Reuse validBucketName (error 344) before Delete path.\nif !validBucketName(c.bucketName) {\n    return fmt.Errorf(\"refusing Delete: invalid bucket %q\", c.bucketName)\n}","typeGuard":null,"tryCatchPattern":"// Local validation; fix name and re-init, no retry.\nif strings.Contains(err.Error(), \"error getting bucket\") { fixBucketName(err) }","preventionTips":["Validate backend bucket once at config time.","Re-init after backend edits."],"tags":["alibaba-cloud","oss","bucket-validation","remote-state","go"],"analyzedSha":"c9def3e214014c1188faabfc4a5bde5095139765","analyzedAt":"2026-08-07T15:39:49.278Z","schemaVersion":2},"datasetVersion":"2026-08-07T21:17:07.882Z"}