{"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":"exception","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/d32a084675427f5ac3f7d2868578ef8b2c1dc525/internal/backend/remote-state/cos/client.go#L325-L361","documentation":"Returned by deleteBucket() when the COS SDK returns a nil response pointer from Bucket.Delete. The bucket-delete request never produced an HTTP response — transport-level failure. The original SDK error is wrapped.","triggerScenarios":"c.cosClient.Bucket.Delete(...) returns (nil, err). Network failure, invalid endpoint, missing/expired credentials, or context cancellation before any response.","commonSituations":"Same transport causes as 210/212: wrong region/endpoint, expired keys, no outbound connectivity, parent operation cancelled mid-destroy.","solutions":["Inspect the wrapped error and DEBUG line `deleteBucket <bucket>: error:`.","Verify credentials and region/endpoint.","Confirm outbound connectivity to COS.","Retry after fixing the transport issue."],"exampleFix":"// before: expired SecretKey causes DELETE to return nil response\nexport TENCENTCLOUD_SECRETKEY=expired\n// after: rotate\nexport TENCENTCLOUD_SECRETKEY=fresh_key","handlingStrategy":"retry","validationCode":"// Validate connectivity before attempting bucket delete\nfunc canReachCOSForDelete(ctx context.Context, client *cos.Client, bucket string) error {\n    rsp, err := client.Bucket.Delete(ctx)\n    if rsp == nil { return fmt.Errorf(\"transport failure reaching COS to delete bucket %s: %w\", bucket, err) }\n    rsp.Body.Close()\n    return nil\n}","typeGuard":"func isDeleteBucketTransportFailure(rsp *cos.Response) bool { return rsp == nil }","tryCatchPattern":"// Retry nil-response bucket deletes as transport errors\nbackoff.Retry(func() error {\n    rsp, err := client.Bucket.Delete(ctx)\n    if rsp == nil { return err }\n    defer rsp.Body.Close()\n    if rsp.StatusCode == 404 { return nil }\n    if err != nil { return backoff.Permanent(err) }\n    return nil\n}, backoff.NewExponentialBackOff())","preventionTips":["Keep credentials fresh and region/endpoint correct.","Run destructive operations from hosts with reliable COS connectivity.","Prefer pre-creating/pre-deleting buckets manually to keep Terraform least-privileged.","Validate the COS client URL is built from the right region."],"tags":["terraform","cos","tencent-cloud","bucket","network","credentials","delete","remote-state","go"],"backgroundTag":null,"analyzedSha":"d32a084675427f5ac3f7d2868578ef8b2c1dc525","analyzedAt":"2026-08-11T18:43:52.779Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}