summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Lambert <eric.lambert@seagate.com>2014-09-29 13:24:50 -0700
committerEric Lambert <eric.lambert@seagate.com>2014-09-29 13:24:50 -0700
commitbe8dcbcc2736c717df07675d3e83d4736c91a0bd (patch)
treecc369eae9acfb9d118854801d91e1e9a07d4c4a9
parent3a108f751cd522fb30f348ff8968caeef7f6f9b8 (diff)
downloadliberasurecode-be8dcbcc2736c717df07675d3e83d4736c91a0bd.tar.gz
Char * backend names are no longer supported. They have been replaced with elements of the ec_backend_id_t enum.
-rw-r--r--README.md28
-rw-r--r--include/erasurecode/erasurecode.h28
-rw-r--r--src/erasurecode.c79
-rw-r--r--test/libec_slap.c2
-rw-r--r--test/liberasurecode_test.c166
5 files changed, 55 insertions, 248 deletions
diff --git a/README.md b/README.md
index b2be7b5..eccac7e 100644
--- a/README.md
+++ b/README.md
@@ -98,33 +98,11 @@ User-facing API Functions
/* liberasurecode frontend API functions */
/**
- * Returns a list of EC backends implemented/enabled - the user
- * should always rely on the return from this function as this
- * set of backends can be different from the names listed in
- * ec_backend_names above.
- *
- * @param num_backends - pointer to int, size of list returned
- *
- * @return list of EC backends implemented
- */
-const char ** liberasurecode_supported_backends(int *num_backends);
-
-/**
- * Returns a list of checksum types supported for fragment data, stored in
- * individual fragment headers as part of fragment metadata
- *
- * @param num_checksum_types - pointer to int, size of list returned
- *
- * @return list of checksum types supported for fragment data
- */
-const char ** liberasurecode_supported_checksum_types(int *num_checksum_types);
-
-/**
* Create a liberasurecode instance and return a descriptor
* for use with EC operations (encode, decode, reconstruct)
*
- * @param backend_name - one of the supported backends as
- * defined by ec_backend_names
+ * @param id - one of the supported backends as
+ * defined by ec_backend_id_t
* @param ec_args - arguments to the EC backend
* arguments common to all backends
* k - number of data fragments
@@ -138,7 +116,7 @@ const char ** liberasurecode_supported_checksum_types(int *num_checksum_types);
*
* @return liberasurecode instance descriptor (int > 0)
*/
-int liberasurecode_instance_create(const char *backend_name,
+int liberasurecode_instance_create(const ec_backend_id_t id,
struct ec_args *args);
/**
diff --git a/include/erasurecode/erasurecode.h b/include/erasurecode/erasurecode.h
index c63c7dd..1d07297 100644
--- a/include/erasurecode/erasurecode.h
+++ b/include/erasurecode/erasurecode.h
@@ -89,33 +89,11 @@ struct ec_args {
/* liberasurecode frontend API functions */
/**
- * Returns a list of EC backends implemented/enabled - the user
- * should always rely on the return from this function as this
- * set of backends can be different from the names listed in
- * ec_backend_names above.
- *
- * @param num_backends - pointer to int, size of list returned
- *
- * @return list of EC backends implemented
- */
-const char ** liberasurecode_supported_backends(int *num_backends);
-
-/**
- * Returns a list of checksum types supported for fragment data, stored in
- * individual fragment headers as part of fragment metadata
- *
- * @param num_checksum_types - pointer to int, size of list returned
- *
- * @return list of checksum types supported for fragment data
- */
-const char ** liberasurecode_supported_checksum_types(int *num_checksum_types);
-
-/**
* Create a liberasurecode instance and return a descriptor
* for use with EC operations (encode, decode, reconstruct)
*
- * @param backend_name - one of the supported backends as
- * defined by ec_backend_names
+ * @param id - one of the supported backends as
+ * defined by ec_backend_id_t
* @param ec_args - arguments to the EC backend
* arguments common to all backends
* k - number of data fragments
@@ -129,7 +107,7 @@ const char ** liberasurecode_supported_checksum_types(int *num_checksum_types);
*
* @return liberasurecode instance descriptor (int > 0)
*/
-int liberasurecode_instance_create(const char *backend_name,
+int liberasurecode_instance_create(const ec_backend_id_t id,
struct ec_args *args);
/**
diff --git a/src/erasurecode.c b/src/erasurecode.c
index 0d7e563..7c2cbd0 100644
--- a/src/erasurecode.c
+++ b/src/erasurecode.c
@@ -43,12 +43,6 @@ extern struct ec_backend_common backend_flat_xor_hd;
extern struct ec_backend_common backend_jerasure_rs_vand;
extern struct ec_backend_common backend_jerasure_rs_cauchy;
-static const char *ec_chksum_types[CHKSUM_TYPES_MAX] = {
- "none",
- "crc32",
- "md5",
-};
-
ec_backend_t ec_backends_supported[] = {
(ec_backend_t) &backend_null,
(ec_backend_t) &backend_jerasure_rs_vand,
@@ -61,38 +55,6 @@ ec_backend_t ec_backends_supported[] = {
int num_supported_backends = 0;
char *ec_backends_supported_str[EC_BACKENDS_MAX];
-/* Get EC backend by name */
-ec_backend_t liberasurecode_backend_lookup_by_name(const char *name)
-{
- if (NULL == name)
- return NULL;
-
- int b = 0;
-
- for (b = 0; ec_backends_supported[b]; ++b) {
- if (!strcmp(ec_backends_supported[b]->common.name, name))
- return ec_backends_supported[b];
- }
-
- return NULL;
-}
-
-/* Name to ID mapping for EC backend */
-ec_backend_id_t liberasurecode_backend_lookup_id(const char *name)
-{
- if (NULL == name)
- return EC_BACKENDS_MAX;
- int b = 0;
-
- for (b = 0; ec_backends_supported[b]; ++b) {
- ec_backend_t backend = ec_backends_supported[b];
- if (backend && !strcmp(backend->common.name, name))
- return backend->common.id;
- }
-
- return EC_BACKENDS_MAX;
-}
-
/* =~=*=~==~=*=~==~=*=~= EC backend instance management =~=*=~==~=*=~==~=*= */
/* Registered erasure code backend instances */
@@ -255,41 +217,11 @@ liberasurecode_exit(void) {
/* =~=*=~==~=*=~= liberasurecode frontend API implementation =~=*=~==~=*=~== */
/**
- * Returns a list of EC backends implemented/enabled - the user
- * should always rely on the return from this function as this
- * set of backends can be different from the names listed in
- * ec_backend_names above.
- *
- * @param num_backends - pointer to return number of backends in
- *
- * @returns list of EC backends implemented
- */
-const char ** liberasurecode_supported_backends(int *num_backends)
-{
- *num_backends = num_supported_backends;
- return (const char **) ec_backends_supported_str;
-}
-
-/**
- * Returns a list of checksum types supported for fragment data, stored in
- * individual fragment headers as part of fragment metadata
- *
- * @param num_checksum_types - pointer to int, size of list returned
- *
- * @returns list of checksum types supported for fragment data
- */
-const char ** liberasurecode_supported_checksum_types(int *num_checksum_types)
-{
- *num_checksum_types = CHKSUM_TYPES_MAX;
- return (const char **) ec_chksum_types;
-}
-
-/**
* Create a liberasurecode instance and return a descriptor
* for use with EC operations (encode, decode, reconstruct)
*
- * @param backend_name - one of the supported backends as
- * defined by ec_backend_names
+ * @param id - one of the supported backends as
+ * defined by ec_backend_id_t
* @param ec_args - arguments to the EC backend
* arguments common to all backends
* k - number of data fragments
@@ -303,17 +235,16 @@ const char ** liberasurecode_supported_checksum_types(int *num_checksum_types)
*
* @returns liberasurecode instance descriptor (int > 0)
*/
-int liberasurecode_instance_create(const char *backend_name,
+int liberasurecode_instance_create(const ec_backend_id_t id,
struct ec_args *args)
{
int err = 0;
ec_backend_t instance = NULL;
struct ec_backend_args bargs;
- if (!backend_name || !args)
+ if (!args)
return -1;
- ec_backend_id_t id = liberasurecode_backend_lookup_id(backend_name);
- if (EC_BACKENDS_MAX == id)
+ if (id >= EC_BACKENDS_MAX)
return -EBACKENDNOTSUPP;
/* Allocate memory for ec_backend instance */
diff --git a/test/libec_slap.c b/test/libec_slap.c
index 7054e4b..f7eb5ef 100644
--- a/test/libec_slap.c
+++ b/test/libec_slap.c
@@ -206,7 +206,7 @@ static int test_hd_code(struct ec_args *args,
/*
* Get handle
*/
- desc = liberasurecode_instance_create("flat_xor_hd", args);
+ desc = liberasurecode_instance_create(EC_BACKEND_FLAT_XOR_HD, args);
if (desc <= 0) {
fprintf(stderr, "Could not create libec descriptor\n");
exit(1);
diff --git a/test/liberasurecode_test.c b/test/liberasurecode_test.c
index e81c111..fd56632 100644
--- a/test/liberasurecode_test.c
+++ b/test/liberasurecode_test.c
@@ -205,35 +205,11 @@ static void validate_fragment_checksum(struct ec_args *args,
}
}
-static void test_liberasurecode_supported_backends()
-{
- int i, num_backends;
- const char **supported_ec_backends =
- liberasurecode_supported_backends(&num_backends);
-
- for (i = 0; i < num_backends; i++) {
- printf("%s\n", supported_ec_backends[i]);
- }
-}
-
-static void test_liberasurecode_supported_checksum_types()
-{
- int i;
- int num_checksum_types;
- const char **supported_checksum_types =
- liberasurecode_supported_checksum_types(&num_checksum_types);
-
- assert(num_checksum_types == CHKSUM_TYPES_MAX);
- for (i = 0; i < CHKSUM_TYPES_MAX; i++) {
- printf("%s\n", supported_checksum_types[i]);
- }
-}
-
static void test_create_and_destroy_backend(
- const char *backend,
+ ec_backend_id_t be_id,
struct ec_args *args)
{
- int desc = liberasurecode_instance_create(backend, args);
+ int desc = liberasurecode_instance_create(be_id, args);
if (-EBACKENDNOTAVAIL == desc) {
fprintf (stderr, "Backend library not available!\n");
return;
@@ -244,11 +220,9 @@ static void test_create_and_destroy_backend(
static void test_create_backend_invalid_args()
{
- assert(liberasurecode_instance_create(NULL, &null_args) < 0);
- assert(liberasurecode_instance_create("DOESNOTEXIST", &null_args) == -EBACKENDNOTSUPP);
- assert(liberasurecode_instance_create("", &null_args) == -EBACKENDNOTSUPP);
- assert(liberasurecode_instance_create(" ", &null_args) == -EBACKENDNOTSUPP);
- assert(liberasurecode_instance_create("null", NULL) < 0);
+ assert(liberasurecode_instance_create(-1, &null_args) < 0);
+ assert(liberasurecode_instance_create(EC_BACKENDS_MAX, &null_args) < 0);
+ assert(liberasurecode_instance_create(EC_BACKEND_NULL, NULL) < 0);
}
static void test_destroy_backend_invalid_args()
@@ -257,7 +231,7 @@ static void test_destroy_backend_invalid_args()
assert(liberasurecode_instance_destroy(desc) < 0);
desc = 1;
assert(liberasurecode_instance_destroy(desc) < 0);
- desc = liberasurecode_instance_create("null", &null_args);
+ desc = liberasurecode_instance_create(EC_BACKEND_NULL, &null_args);
assert(desc > 0);
assert(0 == liberasurecode_instance_destroy(desc));
assert(liberasurecode_instance_destroy(desc) < 0);
@@ -277,7 +251,7 @@ static void test_encode_invalid_args()
&encoded_data, &encoded_parity, &encoded_fragment_len);
assert(rc < 0);
- desc = liberasurecode_instance_create("null", &null_args);
+ desc = liberasurecode_instance_create(EC_BACKEND_NULL, &null_args);
assert(desc > 0);
rc = liberasurecode_encode(desc, NULL, orig_data_size,
@@ -310,7 +284,7 @@ static void test_encode_cleanup_invalid_args()
char **encoded_data = NULL, **encoded_parity = NULL;
uint64_t encoded_fragment_len = 0;
- desc = liberasurecode_instance_create("null", &null_args);
+ desc = liberasurecode_instance_create(EC_BACKEND_NULL, &null_args);
assert(desc > 0);
rc = liberasurecode_encode(desc, orig_data, orig_data_size,
@@ -338,7 +312,7 @@ static void test_decode_invalid_args()
char *decoded_data = NULL;
uint64_t decoded_data_len = 0;
- desc = liberasurecode_instance_create("null", &null_args);
+ desc = liberasurecode_instance_create(EC_BACKEND_NULL, &null_args);
assert(desc > 0);
rc = liberasurecode_encode(desc, orig_data, orig_data_size,
&encoded_data, &encoded_parity, &encoded_fragment_len);
@@ -377,7 +351,7 @@ static void test_decode_cleanup_invalid_args()
rc = liberasurecode_decode_cleanup(desc, orig_data);
assert(rc < 0);
- desc = liberasurecode_instance_create("null", &null_args);
+ desc = liberasurecode_instance_create(EC_BACKEND_NULL, &null_args);
assert(desc > 0);
rc = liberasurecode_decode_cleanup(desc, NULL);
@@ -398,7 +372,7 @@ static void test_reconstruct_fragment_invalid_args()
rc = liberasurecode_reconstruct_fragment(desc, avail_frags, 1, frag_len, 1, out_frag);
assert(rc < 0);
- desc = liberasurecode_instance_create("null", &null_args);
+ desc = liberasurecode_instance_create(EC_BACKEND_NULL, &null_args);
assert(desc > 0);
rc = liberasurecode_reconstruct_fragment(desc, NULL, 1, frag_len, 1, out_frag);
@@ -419,7 +393,7 @@ static void test_fragments_needed_invalid_args()
rc = liberasurecode_fragments_needed(desc, &frags_to_recon, &frags_to_exclude, frags_needed);
assert(rc < 0);
- desc = liberasurecode_instance_create("null", &null_args);
+ desc = liberasurecode_instance_create(EC_BACKEND_NULL, &null_args);
assert(desc > 0);
rc = liberasurecode_fragments_needed(desc, NULL, &frags_to_exclude, frags_needed);
@@ -463,7 +437,7 @@ static void test_verify_stripe_metadata_invalid_args() {
rc = liberasurecode_verify_stripe_metadata(desc, frags, num_frags);
assert(rc < 0);
- desc = liberasurecode_instance_create("null", &null_args);
+ desc = liberasurecode_instance_create(EC_BACKEND_NULL, &null_args);
assert(desc > 0);
rc = liberasurecode_verify_stripe_metadata(desc, NULL, num_frags);
@@ -473,7 +447,7 @@ static void test_verify_stripe_metadata_invalid_args() {
assert(rc < 0);
}
-static void encode_decode_test_impl(const char *backend,
+static void encode_decode_test_impl(const ec_backend_id_t be_id,
struct ec_args *args,
int *skip)
{
@@ -492,7 +466,7 @@ static void encode_decode_test_impl(const char *backend,
char *orig_data_ptr = NULL;
int remaining = 0;
- desc = liberasurecode_instance_create(backend, args);
+ desc = liberasurecode_instance_create(be_id, args);
if (-EBACKENDNOTAVAIL == desc) {
fprintf (stderr, "Backend library not available!\n");
return;
@@ -546,7 +520,7 @@ static void encode_decode_test_impl(const char *backend,
free(orig_data);
}
-static void reconstruct_test_impl(const char *backend,
+static void reconstruct_test_impl(const ec_backend_id_t be_id,
struct ec_args *args,
int *skip)
{
@@ -562,7 +536,7 @@ static void reconstruct_test_impl(const char *backend,
int i = 0;
char *out = NULL;
- desc = liberasurecode_instance_create(backend, args);
+ desc = liberasurecode_instance_create(be_id, args);
if (-EBACKENDNOTAVAIL == desc) {
fprintf (stderr, "Backend library not available!\n");
return;
@@ -596,14 +570,14 @@ static void reconstruct_test_impl(const char *backend,
}
}
-static void test_fragments_needed_impl(const char *backend,
+static void test_fragments_needed_impl(const ec_backend_id_t be_id,
struct ec_args *args)
{
int *fragments_to_reconstruct = NULL;
int *fragments_to_exclude = NULL;
int *fragments_needed = NULL;
int *new_fragments_needed = NULL;
- int desc = liberasurecode_instance_create(backend, args);
+ int desc = liberasurecode_instance_create(be_id, args);
int ret = -1;
int i = 0, j = 0;
int n = args->k + args->m;
@@ -723,7 +697,7 @@ static void test_fragments_needed_impl(const char *backend,
free(new_fragments_needed);
}
-static void test_get_fragment_metadata(char *backend, struct ec_args *args)
+static void test_get_fragment_metadata(const ec_backend_id_t be_id, struct ec_args *args)
{
int i = 0;
int rc = 0;
@@ -736,7 +710,7 @@ static void test_get_fragment_metadata(char *backend, struct ec_args *args)
fragment_metadata_t cur_frag;
fragment_metadata_t cmp_frag;
- desc = liberasurecode_instance_create(backend, args);
+ desc = liberasurecode_instance_create(be_id, args);
if (-EBACKENDNOTAVAIL == desc) {
fprintf (stderr, "Backend library not available!\n");
return;
@@ -772,7 +746,7 @@ static void test_get_fragment_metadata(char *backend, struct ec_args *args)
}
}
-static void test_decode_with_missing_data(const char *backend,
+static void test_decode_with_missing_data(const ec_backend_id_t be_id,
struct ec_args *args)
{
int i;
@@ -781,14 +755,14 @@ static void test_decode_with_missing_data(const char *backend,
for (i = 0; i < args->k; i++)
{
skip[i] = 1;
- encode_decode_test_impl(backend, args, skip);
+ encode_decode_test_impl(be_id, args, skip);
skip[i] = 0;
}
free(skip);
}
-static void test_decode_with_missing_parity(const char *backend,
- struct ec_args *args)
+static void test_decode_with_missing_parity(const ec_backend_id_t be_id,
+ struct ec_args *args)
{
int i;
int *skip = create_skips_array(args,args->k);
@@ -796,14 +770,14 @@ static void test_decode_with_missing_parity(const char *backend,
for (i = args->k; i < args->m; i++)
{
skip[i] = 1;
- encode_decode_test_impl(backend, args, skip);
+ encode_decode_test_impl(be_id, args, skip);
skip[i] = 0;
}
free(skip);
}
-static void test_decode_with_missing_multi_data(const char *backend,
- struct ec_args *args)
+static void test_decode_with_missing_multi_data(const ec_backend_id_t be_id,
+ struct ec_args *args)
{
int max_num_missing = args->hd - 1;
int i,j;
@@ -813,13 +787,13 @@ static void test_decode_with_missing_multi_data(const char *backend,
for (j = i; j < i + max_num_missing; j++) {
skip[j]=1;
}
- encode_decode_test_impl(backend, args, skip);
+ encode_decode_test_impl(be_id, args, skip);
free(skip);
}
}
-static void test_decode_with_missing_multi_parity(const char *backend,
- struct ec_args *args)
+static void test_decode_with_missing_multi_parity(const ec_backend_id_t be_id,
+ struct ec_args *args)
{
int i,j;
int max_num_missing = args->hd - 1;
@@ -829,13 +803,13 @@ static void test_decode_with_missing_multi_parity(const char *backend,
for (j = i; j < i + max_num_missing; j++) {
skip[j]=1;
}
- encode_decode_test_impl(backend, args, skip);
+ encode_decode_test_impl(be_id, args, skip);
free(skip);
}
}
-static void test_decode_with_missing_multi_data_parity(const char *backend,
- struct ec_args *args)
+static void test_decode_with_missing_multi_data_parity(
+ const ec_backend_id_t be_id, struct ec_args *args)
{
int i,j;
int max_num_missing = args->hd - 1;
@@ -846,93 +820,39 @@ static void test_decode_with_missing_multi_data_parity(const char *backend,
for (j = i; j < i + max_num_missing; j++) {
skip[j]=1;
}
- encode_decode_test_impl(backend, args, skip);
+ encode_decode_test_impl(be_id, args, skip);
free(skip);
}
}
-static void test_simple_encode_decode(const char *backend,
+static void test_simple_encode_decode(const ec_backend_id_t be_id,
struct ec_args *args)
{
int *skip = create_skips_array(args,-1);
assert(skip != NULL);
- encode_decode_test_impl(backend, args, skip);
+ encode_decode_test_impl(be_id, args, skip);
free(skip);
}
-static void test_simple_reconstruct(const char *backend,
- struct ec_args *args)
+static void test_simple_reconstruct(const ec_backend_id_t be_id,
+ struct ec_args *args)
{
int i = 0;
for (i = 0; i < args->k + args->m; i++) {
int *skip = create_skips_array(args,i);
assert(skip != NULL);
- reconstruct_test_impl(backend, args, skip);
+ reconstruct_test_impl(be_id, args, skip);
free(skip);
}
}
-static void test_fragments_needed(const char *backend,
+static void test_fragments_needed(const ec_backend_id_t be_id,
struct ec_args *args)
{
- test_fragments_needed_impl(backend, args);
-}
-
-static void test_backend_lookup_by_name()
-{
- const char *null_name = NULL;
- const char *empty_name = "";
- const char *white_space_name = " ";
- const char *missing_name = "1DONT3XIST!";
- int i =0, num_backends;
- const char **supported_ec_backends =
- liberasurecode_supported_backends(&num_backends);
-
- assert(liberasurecode_backend_lookup_by_name(null_name) == NULL);
- assert(liberasurecode_backend_lookup_by_name(empty_name) == NULL);
- assert(liberasurecode_backend_lookup_by_name(white_space_name) == NULL);
- assert(liberasurecode_backend_lookup_by_name(missing_name) == NULL);
-
- for (i = 0; i < num_backends; i++) {
- assert(liberasurecode_backend_lookup_by_name(supported_ec_backends[i]) != NULL);
- }
-}
-
-static void test_backend_lookup_by_id()
-{
- const char *null_name = NULL;
- const char *empty_name = "";
- const char *white_space_name = " ";
- const char *missing_name = "1DONT3XIST!";
- int i =0, num_backends;
- const char **supported_ec_backends =
- liberasurecode_supported_backends(&num_backends);
- assert(liberasurecode_backend_lookup_id(null_name) == EC_BACKENDS_MAX);
- assert(liberasurecode_backend_lookup_id(empty_name) == EC_BACKENDS_MAX);
- assert(liberasurecode_backend_lookup_id(white_space_name) == EC_BACKENDS_MAX);
- assert(liberasurecode_backend_lookup_id(missing_name) == EC_BACKENDS_MAX);
- for (i = 0; i < num_backends; i++) {
- assert(liberasurecode_backend_lookup_id(supported_ec_backends[i]) == i);
- }
+ test_fragments_needed_impl(be_id, args);
}
struct testcase testcases[] = {
- {"liberasurecode_supported_backends",
- test_liberasurecode_supported_backends,
- EC_BACKENDS_MAX, CHKSUM_TYPES_MAX,
- .skip = false},
- {"test_liberasurecode_supported_checksum_types",
- test_liberasurecode_supported_checksum_types,
- EC_BACKENDS_MAX, CHKSUM_TYPES_MAX,
- .skip = false},
- {"look_up_by_name",
- test_backend_lookup_by_name,
- EC_BACKENDS_MAX, CHKSUM_TYPES_MAX,
- .skip = false},
- {"look_up_by_id",
- test_backend_lookup_by_id,
- EC_BACKENDS_MAX, CHKSUM_TYPES_MAX,
- .skip = false},
{"test_create_backend_invalid_args",
test_create_backend_invalid_args,
EC_BACKENDS_MAX, CHKSUM_TYPES_MAX,
@@ -1136,7 +1056,7 @@ int main(int argc, char **argv)
continue;
}
struct ec_args *args = create_ec_args(testcases[ii].be_id, testcases[ii].ct);
- testcases[ii].function(testname, args);
+ testcases[ii].function(testcases[ii].be_id, args);
fprintf(stdout, "ok %d - %s: %s\n", ii + 1,
testcases[ii].description,
(testname) ? testname : "");