{"record":{"id":"795f181a56e08c87","repo":"hashicorp/terraform","slug":"failed-to-open-file-at-v-v","errorCode":null,"errorMessage":"failed to open file at %v: %v","messagePattern":"failed to open file at (.+?): (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/backend/remote-state/cos/client.go","lineNumber":186,"sourceCode":"\t\treturn nil, fmt.Errorf(\"lock file %s not exists\", c.lockFile)\n\t}\n\n\tinfo := &statemgr.LockInfo{}\n\tif err := json.Unmarshal(data, info); err != nil {\n\t\treturn nil, err\n\t}\n\n\tinfo.ID = checksum\n\n\treturn info, nil\n}\n\n// getObject get remote object\nfunc (c *remoteClient) getObject(cosFile string) (exists bool, data []byte, checksum string, err error) {\n\trsp, err := c.cosClient.Object.Get(c.cosContext, cosFile, nil)\n\tif rsp == nil {\n\t\tlog.Printf(\"[DEBUG] getObject %s: error: %v\", cosFile, err)\n\t\terr = fmt.Errorf(\"failed to open file at %v: %v\", cosFile, err)\n\t\treturn\n\t}\n\tdefer rsp.Body.Close()\n\n\tlog.Printf(\"[DEBUG] getObject %s: code: %d, error: %v\", cosFile, rsp.StatusCode, err)\n\tif err != nil {\n\t\tif rsp.StatusCode == 404 {\n\t\t\terr = nil\n\t\t} else {\n\t\t\terr = fmt.Errorf(\"failed to open file at %v: %v\", cosFile, err)\n\t\t}\n\t\treturn\n\t}\n\n\tchecksum = rsp.Header.Get(\"X-Cos-Meta-Md5\")\n\tlog.Printf(\"[DEBUG] getObject %s: checksum: %s\", cosFile, checksum)\n\tif len(checksum) != 32 {\n\t\terr = fmt.Errorf(\"failed to open file at %v: checksum %s invalid\", cosFile, checksum)","sourceCodeStart":168,"sourceCodeEnd":204,"githubUrl":"https://github.com/hashicorp/terraform/blob/c9def3e214014c1188faabfc4a5bde5095139765/internal/backend/remote-state/cos/client.go#L168-L204","documentation":"Raised by remoteClient.getObject() (cos/client.go:186) on the very first guard: the COS HTTP response pointer is nil. A nil response means the request never produced an HTTP reply - the underlying cos-go-sdk returned an error before any status code, e.g. network/DNS failure or an unconfigured client.","triggerScenarios":"getObject() runs c.cosClient.Object.Get(...); rsp comes back nil (err is non-nil). This happens on connection refusal, DNS resolution failure, invalid bucket URL, or a nil cosClient.","commonSituations":"Network outage to COS; wrong region/bucket producing an unresolvable host; credentials not configured so the client was not initialized; endpoint/accelerate misconfiguration.","solutions":["Verify network connectivity and DNS resolution to the COS endpoint from the host.","Confirm bucket name and region are correct and the COS URL resolves.","Ensure secret_id/secret_key (or STS token / CAM role) are configured so the client initializes.","Check the endpoint/accelerate settings; remove a bad custom endpoint."],"exampleFix":"// before: bucket typo / wrong region -> nil response\nterraform { backend \"cos\" { bucket = \"my-bukcet\" region = \"ap-guangzhou\" } }\n// after\nterraform { backend \"cos\" { bucket = \"my-bucket\"  region = \"ap-guangzhou\" } }","handlingStrategy":"retry","validationCode":"// Validate COS reachability/config before getObject depends on it\nfunc cosReachable(c *cos.Client, ctx context.Context) error {\n    // lightweight probe; nil response path means unreachable\n    if c == nil { return fmt.Errorf(\"cos client not initialized (check credentials/region)\") }\n    return nil\n}","typeGuard":null,"tryCatchPattern":"// Retry getObject on nil-response (network) errors with backoff\nfor attempt := 0; attempt < 3; attempt++ {\n    exists, data, sum, err := c.getObject(f)\n    if err == nil || !strings.Contains(err.Error(), \"failed to open file\") || attempt == 2 { return exists, data, sum, err }\n    time.Sleep(time.Duration(attempt+1) * time.Second)\n}","preventionTips":["Verify network and DNS to the COS endpoint before running terraform.","Ensure credentials are set so the COS client is non-nil.","Double-check bucket name and region spelling."],"tags":["cos","tencentcloud","object-get","network","nil-response","config"],"analyzedSha":"c9def3e214014c1188faabfc4a5bde5095139765","analyzedAt":"2026-08-07T15:39:49.278Z","schemaVersion":2},"datasetVersion":"2026-08-07T21:17:07.882Z"}