{"record":{"id":"6845f9d67714df63","repo":"hashicorp/terraform","slug":"failed-to-delete-file-v-v","errorCode":null,"errorMessage":"failed to delete file %v: %v","messagePattern":"failed to delete file (.+?): (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/backend/remote-state/cos/client.go","lineNumber":264,"sourceCode":"\t\tlog.Printf(\"[DEBUG] putObject %s: error: %v\", cosFile, err)\n\t\treturn fmt.Errorf(\"failed to save file to %v: %v\", cosFile, err)\n\t}\n\tdefer rsp.Body.Close()\n\n\tlog.Printf(\"[DEBUG] putObject %s: code: %d, error: %v\", cosFile, rsp.StatusCode, err)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to save file to %v: %v\", cosFile, err)\n\t}\n\n\treturn nil\n}\n\n// deleteObject delete remote object\nfunc (c *remoteClient) deleteObject(cosFile string) error {\n\trsp, err := c.cosClient.Object.Delete(c.cosContext, cosFile)\n\tif rsp == nil {\n\t\tlog.Printf(\"[DEBUG] deleteObject %s: error: %v\", cosFile, err)\n\t\treturn fmt.Errorf(\"failed to delete file %v: %v\", cosFile, err)\n\t}\n\tdefer rsp.Body.Close()\n\n\tlog.Printf(\"[DEBUG] deleteObject %s: code: %d, error: %v\", cosFile, 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 file %v: %v\", cosFile, err)\n\t}\n\n\treturn nil\n}\n\n// getBucket list bucket by prefix\nfunc (c *remoteClient) getBucket(prefix string) (obs []cos.Object, err error) {\n\tfs, rsp, err := c.cosClient.Bucket.Get(c.cosContext, &cos.BucketGetOptions{Prefix: prefix})","sourceCodeStart":246,"sourceCodeEnd":282,"githubUrl":"https://github.com/hashicorp/terraform/blob/c9def3e214014c1188faabfc4a5bde5095139765/internal/backend/remote-state/cos/client.go#L246-L282","documentation":"Raised by deleteObject() when cosClient.Object.Delete returns a nil response, meaning no HTTP response was received for the DELETE request. The wrapped error is the underlying transport failure. This is the 'request never reached the server / no response' branch.","triggerScenarios":"At client.go:261-264: rsp == nil. Occurs on network failure, DNS error, TLS failure, connection refused, or context cancellation before the DELETE completed.","commonSituations":"Network outage during 'terraform destroy' or 'terraform state rm'; backend misconfigured region/endpoint; VPN or firewall blocking egress; terraform interrupted while deleting state or lock files.","solutions":["Verify connectivity to the COS endpoint and retry the operation.","Confirm the bucket region/endpoint in the backend block.","If deleting a lock file during unlock, retry the unlock after confirming credentials are valid.","Check TF_LOG=DEBUG for the underlying transport error to distinguish DNS/auth/network."],"exampleFix":"# retry the destroy/refresh once connectivity is confirmed\nterraform init\nterraform destroy\n","handlingStrategy":"retry","validationCode":"// Preflight: confirm connectivity to the endpoint.\n// (No object-level validation for a delete beyond reachability.)","typeGuard":null,"tryCatchPattern":"if err := c.deleteObject(c.stateFile); err != nil {\n    if strings.Contains(err.Error(), \"failed to delete file\") {\n        // nil-response branch: safe to retry\n    }\n}","preventionTips":["Verify egress to cos.*.myqcloud.com is allowed.","Confirm region/endpoint is correct.","Retry transient transport failures before giving up."],"tags":["cos","tencent-cloud","network","transport","delete","transient"],"analyzedSha":"c9def3e214014c1188faabfc4a5bde5095139765","analyzedAt":"2026-08-07T15:39:49.278Z","schemaVersion":2},"datasetVersion":"2026-08-07T20:17:04.800Z"}