add backend_id and backend_version to fragment metadata
This commit is contained in:
@@ -140,6 +140,10 @@ int set_checksum(ec_checksum_type_t ct, char *buf, int blocksize);
|
||||
int get_checksum(char *buf);
|
||||
int set_libec_version(char *fragment);
|
||||
int get_libec_version(char *fragment, uint32_t *ver);
|
||||
int set_backend_id(char *buf, ec_backend_id_t id);
|
||||
int get_backend_id(char *buf, ec_backend_id_t *id);
|
||||
int set_backend_version(char *buf, uint32_t version);
|
||||
int get_backend_version(char *buf, uint32_t *version);
|
||||
|
||||
/* ==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~== */
|
||||
|
||||
|
||||
@@ -35,6 +35,6 @@ int finalize_fragments_after_encode(ec_backend_t instance,
|
||||
|
||||
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, ec_backend_t instance);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
# include <stdlib.h>
|
||||
# include <stddef.h>
|
||||
# include <stdarg.h>
|
||||
# include <stdbool.h>
|
||||
# include <unistd.h>
|
||||
#else
|
||||
# if defined(HAVE_STDLIB_H)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -721,6 +721,9 @@ static void test_get_fragment_metadata(const ec_backend_id_t be_id, struct ec_ar
|
||||
uint64_t encoded_fragment_len = 0;
|
||||
fragment_metadata_t cur_frag;
|
||||
fragment_metadata_t cmp_frag;
|
||||
ec_backend_id_t rtv_be_id = -1;
|
||||
uint32_t be_version = 0;
|
||||
ec_backend_t be = NULL;
|
||||
|
||||
desc = liberasurecode_instance_create(be_id, args);
|
||||
if (-EBACKENDNOTAVAIL == desc) {
|
||||
@@ -728,6 +731,8 @@ static void test_get_fragment_metadata(const ec_backend_id_t be_id, struct ec_ar
|
||||
return;
|
||||
}
|
||||
assert(desc > 0);
|
||||
be = liberasurecode_backend_instance_get_by_desc(desc);
|
||||
assert(be != NULL);
|
||||
|
||||
orig_data = create_buffer(orig_data_size, 'x');
|
||||
assert(orig_data != NULL);
|
||||
@@ -762,6 +767,12 @@ static void test_get_fragment_metadata(const ec_backend_id_t be_id, struct ec_ar
|
||||
rc = get_libec_version(header, &ver);
|
||||
assert(rc == 0);
|
||||
assert(ver == LIBERASURECODE_VERSION);
|
||||
rc = get_backend_id(header, &rtv_be_id);
|
||||
assert(rc == 0);
|
||||
assert(rtv_be_id == be_id);
|
||||
rc = get_backend_version(header, &be_version);
|
||||
assert(rc == 0);
|
||||
assert(be_version == be->common.ec_backend_version);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user