Feat(Storage): Enable full object checksum validation on JSON path#8825
Open
thiyaguk09 wants to merge 6 commits intogoogleapis:mainfrom
Open
Feat(Storage): Enable full object checksum validation on JSON path#8825thiyaguk09 wants to merge 6 commits intogoogleapis:mainfrom
thiyaguk09 wants to merge 6 commits intogoogleapis:mainfrom
Conversation
d61822d to
4091fcc
Compare
Refactor Resumable, Streamable, and Multipart uploaders to ensure integrity headers (X-Goog-Hash) are only attached to the request when an upload is being finalized. - In StreamableUploader, introduced `$isFinalRequest` to track intent before writeSize recalculations. - In ResumableUploader, added a boundary check to only attach the hash when the current range matches the total file size. - Aligns with GCS best practices for resumable upload integrity.
4091fcc to
2ac9aad
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Enhanced Checksum Validation & Header Logic
This PR implements comprehensive MD5 and CRC32c checksum validation for object uploads, ensuring data integrity via the
X-Goog-Hashheader, improving data integrity verification. It refactors the upload architecture to handle hashes dynamically across different upload strategies.Key Technical Changes
1. Core Library Enhancements (
google-cloud-core)ResumableUploader&StreamableUploader: Added type-safe logic(int)($rangeEnd + 1) === (int)$sizeto ensureX-Goog-Hashis transmitted only on the final chunk/request, preventing intermediate validation errors.MultipartUploader: Standardized header merging to ensure hashes calculated by the connection layer are always included in single-shot uploads.restOptionsmerging to ensure custom metadata and encryption headers are preserved alongside checksums.2. Storage Package Improvements (
google-cloud-storage)MD5orCRC32chashes when thevalidateoption is enabled.Bucket::upload()to honor user-provided checksums and prevent redundant re-calculation.BucketTestandRestTestto verify hash behavior in resumable, streamable, and multipart scenarios.Note
CI "Lowest Dependencies" Failure: This failure occurs because the CI environment pulls the tagged version of
google-cloud-corefrom Packagist instead of using the local changes in this PR. This will resolve once the Core changes are merged.