hashicorp/terraform · error
failed to delete file %v: %v
Error message
failed to delete file %v: %v
What it means
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.
Source
Thrown at internal/backend/remote-state/cos/client.go:264
log.Printf("[DEBUG] putObject %s: error: %v", cosFile, err)
return fmt.Errorf("failed to save file to %v: %v", cosFile, err)
}
defer rsp.Body.Close()
log.Printf("[DEBUG] putObject %s: code: %d, error: %v", cosFile, rsp.StatusCode, err)
if err != nil {
return fmt.Errorf("failed to save file to %v: %v", cosFile, err)
}
return nil
}
// deleteObject delete remote object
func (c *remoteClient) deleteObject(cosFile string) error {
rsp, err := c.cosClient.Object.Delete(c.cosContext, cosFile)
if rsp == nil {
log.Printf("[DEBUG] deleteObject %s: error: %v", cosFile, err)
return fmt.Errorf("failed to delete file %v: %v", cosFile, err)
}
defer rsp.Body.Close()
log.Printf("[DEBUG] deleteObject %s: code: %d, error: %v", cosFile, rsp.StatusCode, err)
if rsp.StatusCode == 404 {
return nil
}
if err != nil {
return fmt.Errorf("failed to delete file %v: %v", cosFile, err)
}
return nil
}
// getBucket list bucket by prefix
func (c *remoteClient) getBucket(prefix string) (obs []cos.Object, err error) {
fs, rsp, err := c.cosClient.Bucket.Get(c.cosContext, &cos.BucketGetOptions{Prefix: prefix})View on GitHub (pinned to c9def3e214)
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.
Example fix
# retry the destroy/refresh once connectivity is confirmed terraform init terraform destroy
Defensive patterns
Strategy: retry
Validate before calling
// Preflight: confirm connectivity to the endpoint. // (No object-level validation for a delete beyond reachability.)
Try / catch
if err := c.deleteObject(c.stateFile); err != nil {
if strings.Contains(err.Error(), "failed to delete file") {
// nil-response branch: safe to retry
}
} Prevention
- Verify egress to cos.*.myqcloud.com is allowed.
- Confirm region/endpoint is correct.
- Retry transient transport failures before giving up.
When it happens
Trigger: At client.go:261-264: rsp == nil. Occurs on network failure, DNS error, TLS failure, connection refused, or context cancellation before the DELETE completed.
Common situations: 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.
Related errors
- failed to save file to %v: %v
- failed to delete bucket %v: %v
- bucket %s not exists
- failed to create bucket %v: %v
- failed to empty bucket %v: %v
AI-assisted analysis of hashicorp/terraform@c9def3e214 (2026-08-07).
Data as JSON: /api/errors/6845f9d67714df63.
Report an issue: GitHub.