{"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":"exception","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/d32a084675427f5ac3f7d2868578ef8b2c1dc525/internal/backend/remote-state/cos/client.go#L246-L282","documentation":"Returned by deleteObject() when the COS SDK returns a nil response pointer from Object.Delete. Same transport-failure shape as 201/206 but on the DELETE path: no HTTP response was received at all.","triggerScenarios":"c.cosClient.Object.Delete(...) returns (nil, err) due to network failure, bad endpoint, missing/invalid credentials, or context cancellation before any response.","commonSituations":"Same as 201/206: misconfigured region/endpoint, expired SecretId/SecretKey, no outbound connectivity to COS, or the parent operation was cancelled.","solutions":["Inspect the wrapped error and DEBUG line `deleteObject <file>: error:`.","Verify credentials and region/endpoint configuration.","Confirm outbound connectivity to `cos.<region>.myqcloud.com`.","Retry after resolving the transport cause."],"exampleFix":"// before: stale credentials cause DELETE to fail with nil response\nexport TENCENTCLOUD_SECRETID=old_id\n// after: refresh credentials\nexport TENCENTCLOUD_SECRETID=new_id\nexport TENCENTCLOUD_SECRETKEY=new_key","handlingStrategy":"retry","validationCode":"// Validate delete-path connectivity before relying on it (e.g. force-unlock)\nfunc canDeleteObject(ctx context.Context, client *cos.Client, key string) error {\n    rsp, err := client.Object.Delete(ctx, key+\".probe\")\n    if rsp == nil { return fmt.Errorf(\"transport failure deleting from COS: %w\", err) }\n    rsp.Body.Close()\n    return nil // 404 is fine here\n}","typeGuard":"func isNilDeleteResponse(rsp *cos.Response) bool { return rsp == nil }","tryCatchPattern":"// Retry nil-response deletes as transport errors:\nbackoff.Retry(func() error {\n    rsp, err := client.Object.Delete(ctx, key)\n    if rsp == nil { return err } // retryable\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 current; rotate before expiry.","Maintain stable outbound connectivity from CI runners.","Use the backend's own delete paths rather than ad-hoc SDK scripts.","Validate the region/endpoint before destructive operations."],"tags":["terraform","cos","tencent-cloud","network","credentials","delete-path","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"}