summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEric Lambert <eric.lambert@seagate.com>2014-10-03 17:08:05 -0700
committerEric Lambert <eric.lambert@seagate.com>2014-10-03 17:08:05 -0700
commit62fba6ba49ab216dbb19c7b7dcbd83804fe7f66e (patch)
tree888213525b42e0efe4357a2ee2653fb73d6cfeaf /src
parent581afe3199dcf1171f750a96ef4d83512ea1ba66 (diff)
downloadliberasurecode-62fba6ba49ab216dbb19c7b7dcbd83804fe7f66e.tar.gz
add backend_id and backend_version to fragment metadata
Diffstat (limited to 'src')
-rw-r--r--src/erasurecode.c6
-rw-r--r--src/erasurecode_helpers.c36
-rw-r--r--src/erasurecode_postprocessing.c9
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;
}