{"record":{"id":"a5c6461b2770eeaa","repo":"hashicorp/terraform","slug":"error-deleting-state-s-v","errorCode":null,"errorMessage":"error deleting state %s: %#v","messagePattern":"error deleting state (.+?): %#v","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/backend/remote-state/oss/client.go","lineNumber":144,"sourceCode":"\tif err := c.putMD5(sum[:]); err != nil {\n\t\t// if this errors out, we unfortunately have to error out altogether,\n\t\t// since the next Get will inevitably fail.\n\t\treturn diags.Append(fmt.Errorf(\"failed to store state MD5: %s\", err))\n\t}\n\treturn diags\n}\n\nfunc (c *RemoteClient) Delete() tfdiags.Diagnostics {\n\tvar diags tfdiags.Diagnostics\n\tbucket, err := c.ossClient.Bucket(c.bucketName)\n\tif err != nil {\n\t\treturn diags.Append(fmt.Errorf(\"error getting bucket %s: %#v\", c.bucketName, err))\n\t}\n\n\tlog.Printf(\"[DEBUG] Deleting remote state from OSS: %#v\", c.stateFile)\n\n\tif err := bucket.DeleteObject(c.stateFile); err != nil {\n\t\treturn diags.Append(fmt.Errorf(\"error deleting state %s: %#v\", c.stateFile, err))\n\t}\n\n\tif err := c.deleteMD5(); err != nil {\n\t\tlog.Printf(\"[WARN] Error deleting state MD5: %s\", err)\n\t}\n\treturn diags\n}\n\nfunc (c *RemoteClient) Lock(info *statemgr.LockInfo) (string, error) {\n\tif c.otsTable == \"\" {\n\t\treturn \"\", nil\n\t}\n\n\tinfo.Path = c.lockPath()\n\n\tif info.ID == \"\" {\n\t\tlockID, err := uuid.GenerateUUID()\n\t\tif err != nil {","sourceCodeStart":126,"sourceCodeEnd":162,"githubUrl":"https://github.com/hashicorp/terraform/blob/d32a084675427f5ac3f7d2868578ef8b2c1dc525/internal/backend/remote-state/oss/client.go#L126-L162","documentation":"Thrown by RemoteClient.Delete when bucket.DeleteObject(c.stateFile) fails. The OSS DeleteObject API call returned an error while removing the state object for a workspace being deleted.","triggerScenarios":"DeleteObject returns non-nil: credentials lack oss:DeleteObject, the object does not exist (depending on bucket versioning), the bucket is in a region/endpoint mismatch, or network failure.","commonSituations":"RAM policy missing oss:DeleteObject; object already removed manually; bucket versioning causing DeleteObject to behave differently; endpoint misconfiguration.","solutions":["Grant oss:DeleteObject to the configured credentials on the bucket/state prefix.","Verify the object exists; if it was already deleted, the workspace delete can be considered partially complete.","Confirm the endpoint region matches the bucket region.","Retry on transient network errors; inspect the %#v SDK error code."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"// Treat 'NoSuchKey' as already-deleted and succeed; otherwise surface.\nif err := bucket.DeleteObject(c.stateFile); err != nil {\n    var se oss.ServiceError\n    if errors.As(err, &se) && se.Code == \"NoSuchKey\" { /* idempotent success */ } else {\n        return diags.Append(fmt.Errorf(\"error deleting state %s: %#v\", c.stateFile, err))\n    }\n}","preventionTips":["Grant oss:DeleteObject on the state prefix.","Make workspace deletion idempotent in automation (tolerate already-deleted objects).","Confirm endpoint region before delete."],"tags":["alibaba-cloud","oss","deleteobject","iam","workspace","remote-state"],"backgroundTag":null,"analyzedSha":"d32a084675427f5ac3f7d2868578ef8b2c1dc525","analyzedAt":"2026-08-11T18:43:52.779Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}