{"record":{"id":"ed1d51db28cd1498","repo":"hashicorp/terraform","slug":"failed-to-delete-bucket-v-v","errorCode":null,"errorMessage":"failed to delete bucket %v: %v","messagePattern":"failed to delete bucket (.+?): (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/backend/remote-state/cos/client.go","lineNumber":343,"sourceCode":"func (c *remoteClient) deleteBucket(recursive bool) error {\n\tif recursive {\n\t\tobs, err := c.getBucket(\"\")\n\t\tif err != nil {\n\t\t\tif strings.Contains(err.Error(), \"not exists\") {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tlog.Printf(\"[DEBUG] deleteBucket %s: empty bucket error: %v\", c.bucket, err)\n\t\t\treturn fmt.Errorf(\"failed to empty bucket %v: %v\", c.bucket, err)\n\t\t}\n\t\tfor _, v := range obs {\n\t\t\tc.deleteObject(v.Key)\n\t\t}\n\t}\n\n\trsp, err := c.cosClient.Bucket.Delete(c.cosContext)\n\tif rsp == nil {\n\t\tlog.Printf(\"[DEBUG] deleteBucket %s: error: %v\", c.bucket, err)\n\t\treturn fmt.Errorf(\"failed to delete bucket %v: %v\", c.bucket, err)\n\t}\n\tdefer rsp.Body.Close()\n\n\tlog.Printf(\"[DEBUG] deleteBucket %s: code: %d, error: %v\", c.bucket, rsp.StatusCode, err)\n\tif rsp.StatusCode == 404 {\n\t\treturn nil\n\t}\n\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to delete bucket %v: %v\", c.bucket, err)\n\t}\n\n\treturn nil\n}\n\n// cosLock lock cos for writing\nfunc (c *remoteClient) cosLock(bucket, cosFile string) error {\n\tlog.Printf(\"[DEBUG] lock cos file %s:%s\", bucket, cosFile)","sourceCodeStart":325,"sourceCodeEnd":361,"githubUrl":"https://github.com/hashicorp/terraform/blob/c9def3e214014c1188faabfc4a5bde5095139765/internal/backend/remote-state/cos/client.go#L325-L361","documentation":"Raised by deleteBucket() when cosClient.Bucket.Delete returns a nil response — the delete-bucket request produced no response. The wrapped error is the transport-level failure. This is the no-response branch of bucket deletion.","triggerScenarios":"At client.go:340-343: rsp == nil. Triggered during bucket teardown: network/DNS/TLS failure, auth failure before response, or context cancellation during 'terraform destroy'.","commonSituations":"Network outage during destroy; backend endpoint misconfigured; credentials expired mid-session; VPN/firewall blocking egress to cos.*.myqcloud.com.","solutions":["Verify connectivity to the COS endpoint and retry.","Confirm the bucket region/endpoint is correctly configured.","Re-authenticate if the session/STS token expired (long-running destroys).","Check TF_LOG=DEBUG for the underlying transport error."],"exampleFix":"# confirm reachability then retry\ncurl -I https://cos.ap-guangzhou.myqcloud.com\nterraform destroy","handlingStrategy":"retry","validationCode":"// Preflight: confirm endpoint reachability before destroy.","typeGuard":null,"tryCatchPattern":"if err := c.deleteBucket(false); err != nil {\n    if strings.Contains(err.Error(), \"failed to delete bucket\") {\n        // nil-response: verify connectivity/credentials then retry\n    }\n}","preventionTips":["Verify egress to cos.*.myqcloud.com is allowed.","Re-authenticate if the session/STS expired.","Retry transient transport failures."],"tags":["cos","tencent-cloud","bucket","delete","network","destroy","transient"],"analyzedSha":"c9def3e214014c1188faabfc4a5bde5095139765","analyzedAt":"2026-08-07T15:39:49.278Z","schemaVersion":2},"datasetVersion":"2026-08-07T20:17:04.800Z"}