summaryrefslogtreecommitdiff
path: root/src/erasurecode.c
diff options
context:
space:
mode:
authorJim Cheung <jim.cheung@phazr.io>2017-01-23 13:55:24 -0800
committerjimcheung <jim.cheung@phazr.io>2017-02-28 11:14:11 -0800
commit06e50ea86b6de729fa5dbc23ef41af87b19e636a (patch)
treeace75bea1a47a5a380af8913923956fdcd693679 /src/erasurecode.c
parent0794b31c623e4cede76d66be730719d24debcca9 (diff)
downloadliberasurecode-06e50ea86b6de729fa5dbc23ef41af87b19e636a.tar.gz
Add Phazr.IO libphazr backend to liberasurecode
Currently, there are several implementations of erasure codes that are available within OpenStack Swift. Most, if not all, of which are based on the Reed Solomon coding algorithm. Phazr.IO’s Erasure Coding technology uses a patented algorithm which are significantly more efficient and improves the speed of coding, decoding and reconstruction. In addition, Phazr.IO Erasure Code use a non-systematic algorithm which provides data protection at rest and in transport without the need to use encryption. Please contact support@phazr.io for more info on our technology. Change-Id: I4e40d02a8951e38409ad3c604c5dd6f050fa7ea0
Diffstat (limited to 'src/erasurecode.c')
-rw-r--r--src/erasurecode.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/erasurecode.c b/src/erasurecode.c
index a63bc25..542fdb1 100644
--- a/src/erasurecode.c
+++ b/src/erasurecode.c
@@ -50,6 +50,7 @@ extern struct ec_backend_common backend_isa_l_rs_vand;
extern struct ec_backend_common backend_shss;
extern struct ec_backend_common backend_liberasurecode_rs_vand;
extern struct ec_backend_common backend_isa_l_rs_cauchy;
+extern struct ec_backend_common backend_libphazr;
ec_backend_t ec_backends_supported[] = {
(ec_backend_t) &backend_null,
@@ -60,6 +61,7 @@ ec_backend_t ec_backends_supported[] = {
(ec_backend_t) &backend_shss,
(ec_backend_t) &backend_liberasurecode_rs_vand,
(ec_backend_t) &backend_isa_l_rs_cauchy,
+ (ec_backend_t) &backend_libphazr,
NULL,
};
@@ -597,8 +599,8 @@ int liberasurecode_decode(int desc,
}
}
- if (instance->common.id != EC_BACKEND_SHSS) {
- /* shss (ntt_backend) must force to decode */
+ if (instance->common.id != EC_BACKEND_SHSS && instance->common.id != EC_BACKEND_LIBPHAZR) {
+ /* shss (ntt_backend) & libphazr backend must force to decode */
// TODO: Add a frag and function to handle whether the backend want to decode or not.
/*
* Try to re-assebmle the original data before attempting a decode
@@ -1232,7 +1234,11 @@ int liberasurecode_get_fragment_size(int desc, int data_len)
if (NULL == instance)
return -EBACKENDNOTAVAIL;
int aligned_data_len = get_aligned_data_size(instance, data_len);
- int size = (aligned_data_len / instance->args.uargs.k) + instance->common.backend_metadata_size;
+ int blocksize = aligned_data_len / instance->args.uargs.k;
+ int metadata_size = instance->common.ops->get_backend_metadata_size(
+ instance->desc.backend_desc,
+ blocksize);
+ int size = blocksize + metadata_size;
return size;
}