Comment 6 for bug 1666320

Revision history for this message
Tim Burke (1-tim-z) wrote :

Clay, my check_crc.py script didn't fully capture is_invalid_fragment_header; in particular, it didn't include the version check [1], which would have caused your first frag (which seems to have been written by libec 1.0.9) to skip the checksumming. My understanding is that pre-1.2.0 libec would always store 0 for the checksum, which matches your observations.

chksum_type applies to *fragment data* checksumming; it's only relevant insofar as it would use the same implementation of crc32 as the metadata checksumming. It defaults to 1 (no checksum is stored) and though pyeclib exposes a way to change it [2], Swift never uses it [3]. Instead, Swift relies on its existing MD5-based integrity checks.

[1] https://github.com/openstack/liberasurecode/blob/1.5.0/src/erasurecode.c#L1092-L1094
[2] https://github.com/openstack/pyeclib/blob/1.5.0/pyeclib/ec_iface.py#L186-L192
[3] https://github.com/openstack/swift/blob/2.14.0/swift/common/storage_policy.py#L482-L484