hashicorp/terraform · error
error splitting data into parts: %s
Error message
error splitting data into parts: %s
What it means
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.
Source
Thrown at internal/backend/remote-state/oci/multipart_upload.go:172
ObjectName: multipartUploadResponse.Object,
OpcClientRequestId: multipartUploadResponse.OpcClientRequestId,
RequestMetadata: multipartUploadRequest.RequestMetadata,
CommitMultipartUploadDetails: objectstorage.CommitMultipartUploadDetails{
PartsToCommit: commitMultipartUploadPartDetails,
},
}
_, err = multipartUploadData.client.objectStorageClient.CommitMultipartUpload(context.Background(), commitMultipartUploadRequest)
if err != nil {
return fmt.Errorf("failed to commit multipart upload: %s", err)
}
return nil
}
func (m MultipartUploadData) objectMultiPartSplit() ([]objectStorageSourceBlock, error) {
dataSize := int64(len(m.Data))
offsets, partSize, err := SplitSizeToOffsetsAndLimits(dataSize)
if err != nil {
return nil, fmt.Errorf("error splitting data into parts: %s", err)
}
sourceBlocks := make([]objectStorageSourceBlock, len(offsets))
for i := range offsets {
start := offsets[i]
end := start + partSize
if end > dataSize {
end = dataSize
}
sourceBlocks[i] = objectStorageSourceBlock{
section: io.NewSectionReader(bytes.NewReader(m.Data), start, end-start),
blockNumber: common.Int(i + 1),
}
}
return sourceBlocks, nil
}
/*
SplitSizeToOffsetsAndLimits splits a file size into chunks based on DefaultFilePartSize.View on GitHub (pinned to c9def3e214)
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).
Defensive patterns
Strategy: validation
Validate before calling
// Validate part count before splitting:
dataSize := int64(len(m.Data))
if (dataSize+DefaultFilePartSize-1)/DefaultFilePartSize > MaxCount {
return nil, fmt.Errorf("data exceeds maximum part count")
} Try / catch
offsets, partSize, err := SplitSizeToOffsetsAndLimits(dataSize)
if err != nil {
return nil, fmt.Errorf("error splitting data into parts: %s", err)
} Prevention
- Reduce state size or raise DefaultFilePartSize to keep totalParts <= MaxCount.
- Monitor state file growth.
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- error splitting source data: %s
- file exceeds maximum part count
- error creating multipart upload: %s
- failed to upload part: %s
- not all parts uploaded successfully, multipart upload aborte
AI-assisted analysis of hashicorp/terraform@c9def3e214 (2026-08-07).
Data as JSON: /api/errors/5d20b7694917d883.
Report an issue: GitHub.