{"record":{"id":"916e8db0ddf16916","repo":"hashicorp/terraform","slug":"error-splitting-source-data-s","errorCode":null,"errorMessage":"error splitting source data: %s","messagePattern":"error splitting source data: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/backend/remote-state/oci/multipart_upload.go","lineNumber":58,"sourceCode":"\tsourceBlocks            chan objectStorageSourceBlock\n\tosUploadPartResponses   chan objectStorageUploadPartResponse\n\twg                      *sync.WaitGroup\n\terrChan                 chan error\n\tmultipartUploadResponse objectstorage.CreateMultipartUploadResponse\n\tmultipartUploadRequest  objectstorage.CreateMultipartUploadRequest\n\tlogger                  hclog.Logger\n}\n\ntype objectStorageSourceBlock struct {\n\tsection     *io.SectionReader\n\tblockNumber *int\n}\n\nfunc (multipartUploadData MultipartUploadData) multiPartUploadImpl(ctx context.Context) error {\n\tlogger := ctx.Value(\"logger\").(hclog.Logger).Named(\"multiPartUpload\")\n\tsourceBlocks, err := multipartUploadData.objectMultiPartSplit()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"error splitting source data: %s\", err)\n\t}\n\n\tmultipartUploadRequest := &objectstorage.CreateMultipartUploadRequest{\n\t\tNamespaceName:   common.String(multipartUploadData.client.namespace),\n\t\tBucketName:      common.String(multipartUploadData.client.bucketName),\n\t\tRequestMetadata: multipartUploadData.RequestMetadata,\n\t\tCreateMultipartUploadDetails: objectstorage.CreateMultipartUploadDetails{\n\t\t\tObject: common.String(multipartUploadData.client.path),\n\t\t},\n\t}\n\tif multipartUploadData.client.kmsKeyID != \"\" {\n\t\tmultipartUploadRequest.OpcSseKmsKeyId = common.String(multipartUploadData.client.kmsKeyID)\n\t} else if multipartUploadData.client.SSECustomerKey != \"\" && multipartUploadData.client.SSECustomerKeySHA256 != \"\" {\n\t\tmultipartUploadRequest.OpcSseCustomerKey = common.String(multipartUploadData.client.SSECustomerKey)\n\t\tmultipartUploadRequest.OpcSseCustomerKeySha256 = common.String(multipartUploadData.client.SSECustomerKeySHA256)\n\t\tmultipartUploadRequest.OpcSseCustomerAlgorithm = common.String(multipartUploadData.client.SSECustomerAlgorithm)\n\t}\n","sourceCodeStart":40,"sourceCodeEnd":76,"githubUrl":"https://github.com/hashicorp/terraform/blob/c9def3e214014c1188faabfc4a5bde5095139765/internal/backend/remote-state/oci/multipart_upload.go#L40-L76","documentation":"Raised at the top of multiPartUploadImpl when objectMultiPartSplit() fails. objectMultiPartSplit delegates to SplitSizeToOffsetsAndLimits, which errors when the data size would require more than MaxCount (10000) parts at DefaultFilePartSize (128MiB). So this is the multipart path's size-guard: the state payload is too large to upload in 10000 parts.","triggerScenarios":"multiPartUploadImpl is entered (data > DefaultFilePartSize per client.go:137) and objectMultiPartSplit returns an error — concretely when dataSize > 10000 * 128MiB (~1.28 TiB), making totalParts exceed MaxCount at multipart_upload.go:197.","commonSituations":"An abnormally huge terraform.tfstate (1+ TiB) due to runaway resource count, large embedded binary blobs in state, or state bloat from mismanaged resources; testing with an oversized synthetic state.","solutions":["Reduce state size: remove large sensitive values, split the configuration into multiple workspaces/states, or prune deleted resources from state.","Raise DefaultFilePartSize (var, multipart_upload.go:21) so fewer parts are needed, keeping under MaxCount — only if the larger part size stays within OCI's per-part limits.","Confirm this is not a one-off huge object being written to the state key by mistake.","If legitimately large, store the bulk data in object storage outside Terraform and reference it, keeping tfstate small."],"exampleFix":"// before (default 128MiB parts -> >10000 parts for >1.28TiB)\nvar DefaultFilePartSize int64 = 128 * 1024 * 1024\n// after (larger parts reduce part count)\nvar DefaultFilePartSize int64 = 512 * 1024 * 1024 // keep under OCI per-part max & MaxCount","handlingStrategy":"validation","validationCode":"// Validate size before entering multipart:\ndataSize := int64(len(data))\nif totalParts := (dataSize + DefaultFilePartSize - 1) / DefaultFilePartSize; totalParts > MaxCount {\n    return fmt.Errorf(\"state of %d bytes would need %d parts (>MaxCount %d); reduce size or raise DefaultFilePartSize\", dataSize, totalParts, MaxCount)\n}","typeGuard":null,"tryCatchPattern":"sourceBlocks, err := multipartUploadData.objectMultiPartSplit()\nif err != nil {\n    return fmt.Errorf(\"error splitting source data: %s\", err)\n}","preventionTips":["Keep tfstate small by splitting workspaces and externalizing large data.","If raising DefaultFilePartSize, stay within OCI per-part limits and keep totalParts <= MaxCount.","Monitor state size 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"}