diff options
author | Eric Lambert <eric.lambert@seagate.com> | 2014-10-03 17:08:05 -0700 |
---|---|---|
committer | Eric Lambert <eric.lambert@seagate.com> | 2014-10-03 17:08:05 -0700 |
commit | 62fba6ba49ab216dbb19c7b7dcbd83804fe7f66e (patch) | |
tree | 888213525b42e0efe4357a2ee2653fb73d6cfeaf /src | |
parent | 581afe3199dcf1171f750a96ef4d83512ea1ba66 (diff) | |
download | liberasurecode-62fba6ba49ab216dbb19c7b7dcbd83804fe7f66e.tar.gz |
add backend_id and backend_version to fragment metadata
Diffstat (limited to 'src')
-rw-r--r-- | src/erasurecode.c | 6 | ||||
-rw-r--r-- | src/erasurecode_helpers.c | 36 | ||||
-rw-r--r-- | src/erasurecode_postprocessing.c | 9 |
3 files changed, 46 insertions, 5 deletions
diff --git a/src/erasurecode.c b/src/erasurecode.c index b3d1395..e95f28b 100644 --- a/src/erasurecode.c +++ b/src/erasurecode.c @@ -635,7 +635,8 @@ int liberasurecode_decode(int desc, char *fragment_ptr = data[missing_idx]; init_fragment_header(fragment_ptr); add_fragment_metadata(fragment_ptr, missing_idx, - orig_data_size, blocksize, !set_chksum); + orig_data_size, blocksize, instance->args.uargs.ct, + !set_chksum, instance); } j++; } @@ -798,7 +799,8 @@ int liberasurecode_reconstruct_fragment(int desc, } init_fragment_header(fragment_ptr); add_fragment_metadata(fragment_ptr, destination_idx, orig_data_size, - blocksize, !set_chksum); + blocksize, instance->args.uargs.ct, + !set_chksum, instance); /* * Copy the reconstructed fragment to the output buffer diff --git a/src/erasurecode_helpers.c b/src/erasurecode_helpers.c index 2f97b17..21952c0 100644 --- a/src/erasurecode_helpers.c +++ b/src/erasurecode_helpers.c @@ -359,6 +359,42 @@ int get_libec_version(char *buf, uint32_t *ver) { return 0; } +int set_backend_id(char *buf, ec_backend_id_t id) { + if (!is_valid_fragment(buf)) { + return -1; + } + fragment_header_t *header = (fragment_header_t *) buf; + header->meta.backend_id = (uint8_t)id; + return 0; +} + +int get_backend_id(char *buf, ec_backend_id_t *id) { + if (!is_valid_fragment(buf)) { + return -1; + } + fragment_header_t *header = (fragment_header_t *) buf; + *id = header->meta.backend_id; + return 0; +} + +int set_backend_version(char *buf, uint32_t version) { + if (!is_valid_fragment(buf)) { + return -1; + } + fragment_header_t *header = (fragment_header_t *) buf; + header->meta.backend_version = version; + return 0; +} + +int get_backend_version(char *buf, uint32_t *version) { + if (!is_valid_fragment(buf)) { + return -1; + } + fragment_header_t *header = (fragment_header_t *) buf; + *version = header->meta.backend_version; + return 0; +} + /* ==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~== */ inline int set_checksum(ec_checksum_type_t ct, char *buf, int blocksize) diff --git a/src/erasurecode_postprocessing.c b/src/erasurecode_postprocessing.c index 682638b..2029f3d 100644 --- a/src/erasurecode_postprocessing.c +++ b/src/erasurecode_postprocessing.c @@ -32,12 +32,15 @@ void add_fragment_metadata(char *fragment, int idx, uint64_t orig_data_size, int blocksize, - ec_checksum_type_t ct, int add_chksum) + ec_checksum_type_t ct, int add_chksum, ec_backend_t be) { + //TODO EDL we are ignoring the return codes here, fix that set_libec_version(fragment); set_fragment_idx(fragment, idx); set_orig_data_size(fragment, orig_data_size); set_fragment_payload_size(fragment, blocksize); + set_backend_id(fragment, be->common.id); + set_backend_version(fragment, be->common.ec_backend_version); if (add_chksum) { set_checksum(ct, fragment, blocksize); @@ -55,7 +58,7 @@ int finalize_fragments_after_encode(ec_backend_t instance, 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, ct, set_chksum); + blocksize, ct, set_chksum, instance); encoded_data[i] = fragment; } @@ -63,7 +66,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, ct, set_chksum); + blocksize, ct, set_chksum, instance); encoded_parity[i] = fragment; } |