diff options
-rw-r--r-- | include/erasurecode/erasurecode_helpers.h | 2 | ||||
-rw-r--r-- | src/erasurecode.c | 2 | ||||
-rw-r--r-- | src/erasurecode_helpers.c | 5 | ||||
-rw-r--r-- | src/erasurecode_postprocessing.c | 9 | ||||
-rw-r--r-- | test/liberasurecode_test.c | 8 |
5 files changed, 15 insertions, 11 deletions
diff --git a/include/erasurecode/erasurecode_helpers.h b/include/erasurecode/erasurecode_helpers.h index 60d871f..e8fddaa 100644 --- a/include/erasurecode/erasurecode_helpers.h +++ b/include/erasurecode/erasurecode_helpers.h @@ -135,7 +135,7 @@ int get_fragment_payload_size(char *buf); int set_orig_data_size(char *buf, int orig_data_size); int get_orig_data_size(char *buf); int validate_fragment(char *buf); -int set_checksum(char *buf, int blocksize); +int set_checksum(ec_checksum_type_t ct, char *buf, int blocksize); int get_checksum(char *buf); /* ==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~== */ diff --git a/src/erasurecode.c b/src/erasurecode.c index f4d7cab..b376568 100644 --- a/src/erasurecode.c +++ b/src/erasurecode.c @@ -998,7 +998,7 @@ int liberasurecode_get_fragment_metadata(char *fragment, uint32_t computed_chksum = 0; uint32_t stored_chksum = fragment_hdr->meta.chksum[0]; char *fragment_data = get_data_ptr_from_fragment(fragment); - uint64_t fragment_size = get_fragment_size(fragment); + uint64_t fragment_size = fragment_hdr->meta.size; computed_chksum = crc32(0, fragment_data, fragment_size); if (stored_chksum != computed_chksum) { fragment_metadata->chksum_mismatch = 1; diff --git a/src/erasurecode_helpers.c b/src/erasurecode_helpers.c index d4484ce..6e4c882 100644 --- a/src/erasurecode_helpers.c +++ b/src/erasurecode_helpers.c @@ -341,7 +341,7 @@ int validate_fragment(char *buf) /* ==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~== */ -inline int set_checksum(char *buf, int blocksize) +inline int set_checksum(ec_checksum_type_t ct, char *buf, int blocksize) { fragment_header_t* header = (fragment_header_t*) buf; char *data = get_data_ptr_from_fragment(buf); @@ -352,6 +352,9 @@ inline int set_checksum(char *buf, int blocksize) return -1; } + header->meta.chksum_type = ct; + header->meta.chksum_mismatch = 0; + switch(header->meta.chksum_type) { case CHKSUM_CRC32: header->meta.chksum[0] = crc32(0, data, blocksize); diff --git a/src/erasurecode_postprocessing.c b/src/erasurecode_postprocessing.c index 864d474..8315d7a 100644 --- a/src/erasurecode_postprocessing.c +++ b/src/erasurecode_postprocessing.c @@ -32,13 +32,13 @@ void add_fragment_metadata(char *fragment, int idx, uint64_t orig_data_size, int blocksize, - int add_chksum) + ec_checksum_type_t ct, int add_chksum) { set_fragment_idx(fragment, idx); set_orig_data_size(fragment, orig_data_size); set_fragment_payload_size(fragment, blocksize); if (add_chksum) { - set_checksum(fragment, blocksize); + set_checksum(ct, fragment, blocksize); } } @@ -47,12 +47,13 @@ int finalize_fragments_after_encode(ec_backend_t instance, char **encoded_data, char **encoded_parity) { int i, set_chksum = 1; + ec_checksum_type_t ct = instance->args.uargs.ct; /* finalize data fragments */ for (i = 0; i < k; i++) { char *fragment = get_fragment_ptr_from_data(encoded_data[i]); add_fragment_metadata(fragment, i, orig_data_size, - blocksize, set_chksum); + blocksize, ct, set_chksum); encoded_data[i] = fragment; } @@ -60,7 +61,7 @@ int finalize_fragments_after_encode(ec_backend_t instance, for (i = 0; i < m; i++) { char *fragment = get_fragment_ptr_from_data(encoded_parity[i]); add_fragment_metadata(fragment, i + k, orig_data_size, - blocksize, set_chksum); + blocksize, ct, set_chksum); encoded_parity[i] = fragment; } diff --git a/test/liberasurecode_test.c b/test/liberasurecode_test.c index 3600c97..6b6bfd4 100644 --- a/test/liberasurecode_test.c +++ b/test/liberasurecode_test.c @@ -1030,7 +1030,7 @@ struct testcase testcases[] = { {"test_get_fragment_metadata_flat_xor_hd_crc32", test_get_fragment_metadata, EC_BACKEND_FLAT_XOR_HD, CHKSUM_CRC32, - .skip = true}, + .skip = false}, // Jerasure RS Vand backend tests {"create_and_destroy_backend", test_create_and_destroy_backend, @@ -1071,7 +1071,7 @@ struct testcase testcases[] = { {"test_get_fragment_metadata_jerasure_rs_vand_crc32", test_get_fragment_metadata, EC_BACKEND_JERASURE_RS_VAND, CHKSUM_CRC32, - .skip = true}, + .skip = false}, // Jerasure RS Cauchy backend tests {"create_and_destroy_backend", test_create_and_destroy_backend, @@ -1109,10 +1109,10 @@ struct testcase testcases[] = { test_get_fragment_metadata, EC_BACKEND_JERASURE_RS_CAUCHY, CHKSUM_NONE, .skip = false}, - {"test_get_fragment_metadata_jerasure_rs_cauchy", + {"test_get_fragment_metadata_jerasure_rs_cauchy_crc32", test_get_fragment_metadata, EC_BACKEND_JERASURE_RS_CAUCHY, CHKSUM_CRC32, - .skip = true}, + .skip = false}, { NULL, NULL, 0, 0, false }, }; |