{"record":{"id":"5d20b7694917d883","repo":"hashicorp/terraform","slug":"error-splitting-data-into-parts-s","errorCode":null,"errorMessage":"error splitting data into parts: %s","messagePattern":"error splitting data into parts: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/backend/remote-state/oci/multipart_upload.go","lineNumber":172,"sourceCode":"\t\tObjectName:         multipartUploadResponse.Object,\n\t\tOpcClientRequestId: multipartUploadResponse.OpcClientRequestId,\n\t\tRequestMetadata:    multipartUploadRequest.RequestMetadata,\n\t\tCommitMultipartUploadDetails: objectstorage.CommitMultipartUploadDetails{\n\t\t\tPartsToCommit: commitMultipartUploadPartDetails,\n\t\t},\n\t}\n\t_, err = multipartUploadData.client.objectStorageClient.CommitMultipartUpload(context.Background(), commitMultipartUploadRequest)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to commit multipart upload: %s\", err)\n\t}\n\n\treturn nil\n}\nfunc (m MultipartUploadData) objectMultiPartSplit() ([]objectStorageSourceBlock, error) {\n\tdataSize := int64(len(m.Data))\n\toffsets, partSize, err := SplitSizeToOffsetsAndLimits(dataSize)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error splitting data into parts: %s\", err)\n\t}\n\tsourceBlocks := make([]objectStorageSourceBlock, len(offsets))\n\tfor i := range offsets {\n\t\tstart := offsets[i]\n\t\tend := start + partSize\n\t\tif end > dataSize {\n\t\t\tend = dataSize\n\t\t}\n\t\tsourceBlocks[i] = objectStorageSourceBlock{\n\t\t\tsection:     io.NewSectionReader(bytes.NewReader(m.Data), start, end-start),\n\t\t\tblockNumber: common.Int(i + 1),\n\t\t}\n\t}\n\treturn sourceBlocks, nil\n}\n\n/*\nSplitSizeToOffsetsAndLimits splits a file size into chunks based on DefaultFilePartSize.","sourceCodeStart":154,"sourceCodeEnd":190,"githubUrl":"https://github.com/hashicorp/terraform/blob/c9def3e214014c1188faabfc4a5bde5095139765/internal/backend/remote-state/oci/multipart_upload.go#L154-L190","documentation":"Raised in objectMultiPartSplit when SplitSizeToOffsetsAndLimits fails to compute part offsets for the given data size. This is the inner/origination error that [312] wraps at the call site. The only failure mode of SplitSizeToOffsetsAndLimits is exceeding the maximum part count, so this fires under the same condition as 312/318.","triggerScenarios":"SplitSizeToOffsetsAndLimits(dataSize) at multipart_upload.go:170 returns an error because totalParts = ceil(dataSize / DefaultFilePartSize) exceeds MaxCount (10000). dataSize > ~1.28 TiB at the default 128MiB part size.","commonSituations":"Same as 312/318: a pathologically large state file (>1.28 TiB) reaching the multipart path; oversized synthetic/test state; state bloat from mismanaged resources.","solutions":["Shrink the state file (split workspaces, prune deleted resources, move large blobs out of state).","Increase DefaultFilePartSize so totalParts stays under MaxCount (verify the new size is within OCI per-part limits).","Confirm the large size is not accidental (e.g. a binary accidentally stored in state)."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Validate part count before splitting:\ndataSize := int64(len(m.Data))\nif (dataSize+DefaultFilePartSize-1)/DefaultFilePartSize > MaxCount {\n    return nil, fmt.Errorf(\"data exceeds maximum part count\")\n}","typeGuard":null,"tryCatchPattern":"offsets, partSize, err := SplitSizeToOffsetsAndLimits(dataSize)\nif err != nil {\n    return nil, fmt.Errorf(\"error splitting data into parts: %s\", err)\n}","preventionTips":["Reduce state size or raise DefaultFilePartSize to keep totalParts <= MaxCount.","Monitor state file growth."],"tags":["oci","multipart-upload","size-limit","configuration","terraform-state"],"analyzedSha":"c9def3e214014c1188faabfc4a5bde5095139765","analyzedAt":"2026-08-07T15:39:49.278Z","schemaVersion":2},"datasetVersion":"2026-08-07T21:17:07.882Z"}