Skip to content

Conversation

@weisd
Copy link
Contributor

@weisd weisd commented Oct 24, 2025

Fix Multipart Upload Checksum Validation

Summary

This PR implements comprehensive checksum validation for multipart uploads, addressing several critical issues in the upload completion process and enhancing data integrity verification.

Changes Made

🔧 Core Fixes

  • Fixed multipart upload checksum validation: Implemented proper checksum verification during complete_multipart_upload operations
  • Enhanced checksum type handling: Added support for multiple checksum algorithms (SHA256, SHA1, CRC32, CRC32C, CRC64_NVME)
  • Improved error handling: Added detailed error logging and validation for checksum mismatches

📁 Files Modified

  1. crates/ecstore/src/set_disk.rs (212 lines changed)

    • Added comprehensive checksum validation logic in complete_multipart_upload
    • Implemented checksum type detection and validation
    • Added support for replication checksum handling
    • Enhanced metadata handling for actual object size
  2. crates/filemeta/src/filemeta.rs (2 lines changed)

    • Fixed conversion from FileInfo to MetaObject
  3. crates/rio/src/checksum.rs (6 lines added)

    • Added merge() method to ChecksumType for combining checksum types
  4. crates/rio/src/hash_reader.rs (9 lines changed)

    • Enhanced checksum handling in add_non_trailing_checksum
    • Improved trailer checksum extraction logic
    • Added debug logging for checksum operations
  5. rustfs/src/storage/ecfs.rs (31 lines changed)

    • Simplified multipart upload processing
    • Improved checksum extraction from request headers
    • Enhanced error handling and logging

Key Features

✅ Checksum Validation

  • Part-level validation: Each uploaded part is validated against its stored checksum
  • Object-level validation: Final object checksum is computed and validated
  • Type safety: Support for multiple checksum algorithms with proper type checking

🔒 Data Integrity

  • Replication support: Enhanced handling of replication checksums
  • Metadata preservation: Proper handling of actual object size metadata
  • Error recovery: Comprehensive error handling with detailed logging

🚀 Performance Improvements

  • Optimized processing: Streamlined multipart upload completion
  • Memory efficiency: Better handling of large multipart uploads
  • Reduced redundancy: Cleaned up TODO comments and unused code

Technical Details

Checksum Validation Flow

  1. Extract checksum type from metadata
  2. Validate each part's checksum against stored values
  3. Combine part checksums for object-level validation
  4. Verify final checksum matches expected value
  5. Handle replication checksums appropriately

Error Handling

  • Detailed error messages for checksum mismatches
  • Proper error codes for invalid parts
  • Comprehensive logging for debugging

Testing

The changes maintain backward compatibility while adding robust checksum validation. All existing functionality is preserved with enhanced data integrity verification.

Breaking Changes

None. This is a backward-compatible enhancement.

Related Issues

Fixes multipart upload checksum validation issues and improves data integrity for large file uploads.


Commit History:

  • 1fe8c569 - add log
  • 0f16018d - fix multipart upload checksum
  • 3e95199a - Merge remote-tracking branch 'origin/main' into feat/checksum
  • e7e36078 - todo

@weisd weisd merged commit 6a59c0a into main Oct 24, 2025
14 checks passed
@weisd weisd deleted the feat/checksum branch October 24, 2025 10:23
houseme added a commit that referenced this pull request Oct 25, 2025
* 'main' of github.com:rustfs/rustfs:
  fix:add favicon.ico route (#713)
  fix: multipart upload checksum validation (#712)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant