summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Greenan <kmgreen2@gmail.com>2014-08-16 19:01:38 -0700
committerKevin Greenan <kmgreen2@gmail.com>2014-08-20 09:15:36 -0700
commitd251ed8f98abcbd90eb1f81a09da93d54427efd7 (patch)
tree1bd5dd2587669185ec7a61033c71c9d2779976e1
parent2e4860ca50fe3525696e9c32d4b80fdc50654f96 (diff)
downloadliberasurecode-d251ed8f98abcbd90eb1f81a09da93d54427efd7.tar.gz
API change for liberasurecode_fragments_needed
Still needed: 1.) RS and XOR backends need to honor the 'exclude' argument. 2.) Need to add tests.
-rw-r--r--include/erasurecode/erasurecode.h22
-rw-r--r--src/erasurecode.c15
2 files changed, 23 insertions, 14 deletions
diff --git a/include/erasurecode/erasurecode.h b/include/erasurecode/erasurecode.h
index da8b3c2..9db76da 100644
--- a/include/erasurecode/erasurecode.h
+++ b/include/erasurecode/erasurecode.h
@@ -258,21 +258,23 @@ int liberasurecode_reconstruct_fragment(int desc,
char* out_fragment); /* output */
/**
- * Determine which fragments are needed to reconstruct some subset
- * of missing fragments. The two lists passed into the method (missing_idxs,
- * and fragments_needed), must be allocated by the user.
+ * Return a list of lists with valid rebuild indexes given
+ * a list of missing indexes.
*
- * @param desc - liberasurecode descriptor/handle
- * from liberasurecode_instance_create()
- * @param missing_idxs - -1 terminated list of missing indexes
- * @param fragements_needed - integer array of length at least k + 1, on
- * successful completion, this array will be a -1 terminated list of
- * required fragment indexes.
+ * @desc: liberasurecode instance descriptor (obtained with
+ * liberasurecode_instance_create)
+ * @fragments_to_reconstruct list of indexes to reconstruct
+ * @fragments_to_exclude list of indexes to exclude from
+ * reconstruction equation
+ * @fragments_needed list of fragments needed to reconstruct
+ * fragments in fragments_to_reconstruct
*
* @return 0 on success, non-zero on error
*/
int liberasurecode_fragments_needed(int desc,
- int *missing_idxs, int *fragments_needed);
+ int *fragments_to_reconstruct,
+ int *fragments_to_exclude,
+ int *fragments_needed);
/* ==~=*=~==~=*=~== liberasurecode fragment metadata routines ==~*==~=*=~==~ */
diff --git a/src/erasurecode.c b/src/erasurecode.c
index 9b41293..fea3250 100644
--- a/src/erasurecode.c
+++ b/src/erasurecode.c
@@ -827,12 +827,18 @@ out:
*
* @desc: liberasurecode instance descriptor (obtained with
* liberasurecode_instance_create)
- * @missing_idx_list: list of indexes of missing elements
+ * @fragments_to_reconstruct list of indexes to reconstruct
+ * @fragments_to_exclude list of indexes to exclude from
+ reconstruction equation
+ * @fragments_needed list of fragments needed to reconstruct
+ fragments in fragments_to_reconstruct
*
* @return a list of lists (bitmaps) of indexes to rebuild data
* from (in 'fragments_needed')
*/
-int liberasurecode_fragments_needed(int desc, int *missing_idxs,
+int liberasurecode_fragments_needed(int desc,
+ int *fragments_to_reconstruct,
+ int *fragments_to_exclude,
int *fragments_needed)
{
int ret = 0;
@@ -845,10 +851,11 @@ int liberasurecode_fragments_needed(int desc, int *missing_idxs,
/* FIXME preprocessing */
+ /* FIXME use fragments_to_exclude */
+
/* call the backend fragments_needed function passing it desc instance */
ret = instance->common.ops->fragments_needed(
- instance->desc.backend_desc, missing_idxs,
- fragments_needed);
+ instance->desc.backend_desc, fragments_to_reconstruct, fragments_needed);
out_error:
return ret;