summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTushar Gohad <tushar.gohad@intel.com>2014-08-05 08:11:13 -0700
committerTushar Gohad <tushar.gohad@intel.com>2014-08-05 08:11:13 -0700
commitc617070b19c6dd60cafc56f2f9922728089198d5 (patch)
treeb1a478ae5f47cc49c3e84131145b31cfdc40ff0c
parent5fc005a96e5263ed20f125b9dda2da59f07f2deb (diff)
downloadpyeclib-c617070b19c6dd60cafc56f2f9922728089198d5.tar.gz
Make library_import_str arg to ECDriver conditional, rename types to be
specific to jerasure Signed-off-by: Tushar Gohad <tushar.gohad@intel.com>
-rw-r--r--README6
-rw-r--r--src/c/pyeclib_c/pyeclib_c.h2
-rw-r--r--src/python/pyeclib/core.py4
-rw-r--r--src/python/pyeclib/ec_iface.py15
-rwxr-xr-xtest/ec_pyeclib_file_test.sh2
-rw-r--r--test/test_pyeclib_api.py104
-rw-r--r--test/test_pyeclib_c.py4
-rw-r--r--tools/argparse.pycbin0 -> 64818 bytes
-rw-r--r--tools/pyeclib_conf_tool.py4
-rw-r--r--tools/pyeclib_decode.py3
-rw-r--r--tools/pyeclib_encode.py4
11 files changed, 55 insertions, 93 deletions
diff --git a/README b/README
index 475ee48..b9860a8 100644
--- a/README
+++ b/README
@@ -30,14 +30,14 @@ Examples of using this library are provided in "tools" directory:
PyEClib initialization::
- ec_driver = ECDriver("pyeclib.core.ECPyECLibDriver",
- k=<num_encoded_data_fragments>,
+ ec_driver = ECDriver(k=<num_encoded_data_fragments>,
m=<num_encoded_parity_fragments>,
ec_type=<ec_scheme>))
Supported ``ec_type`` values:
- * ``rs_vand`` => Vandermonde Reed-Solomon encoding
+ * ``jerasure_rs_vand`` => Vandermonde Reed-Solomon encoding (Jerasure variant)
+ * ``jerasure_rs_cauchy_orig`` => Cauchy Reed-Solomon encoding (Jerasure variant)
* ``flat_xor_3``, ``flat_xor_4`` => Flat-XOR based HD combination codes
A configuration utility is provided to help compare available EC schemes in
diff --git a/src/c/pyeclib_c/pyeclib_c.h b/src/c/pyeclib_c/pyeclib_c.h
index 56ee1e3..3992bc8 100644
--- a/src/c/pyeclib_c/pyeclib_c.h
+++ b/src/c/pyeclib_c/pyeclib_c.h
@@ -27,7 +27,7 @@
typedef enum { PYECC_RS_VAND, PYECC_RS_CAUCHY_ORIG, PYECC_XOR_HD_4, PYECC_XOR_HD_3, PYECC_NUM_TYPES, PYECC_NOT_FOUND } pyeclib_type_t;
-const char *pyeclib_type_str[] = { "rs_vand", "rs_cauchy_orig", "flat_xor_4", "flat_xor_3" };
+const char *pyeclib_type_str[] = { "jerasure_rs_vand", "jerasure_rs_cauchy_orig", "flat_xor_4", "flat_xor_3" };
const int pyeclib_type_word_size_bytes[] = { sizeof(long), sizeof(long), sizeof(long), sizeof(long) };
// Unconditionally enforce alignment for now... This is needed for the SIMD extentions.
diff --git a/src/python/pyeclib/core.py b/src/python/pyeclib/core.py
index 2963c76..2134fca 100644
--- a/src/python/pyeclib/core.py
+++ b/src/python/pyeclib/core.py
@@ -42,8 +42,8 @@ class ECPyECLibException(Exception):
class ECPyECLibDriver(object):
def __init__(self, k, m, ec_type, chksum_type="none"):
- self.ec_rs_vand = "rs_vand"
- self.ec_rs_cauchy_orig = "rs_cauchy_orig"
+ self.ec_rs_vand = "jerasure_rs_vand"
+ self.ec_rs_cauchy_orig = "jerasure_rs_cauchy_orig"
self.ec_flat_xor_3 = "flat_xor_3"
self.ec_flat_xor_4 = "flat_xor_4"
self.chksum_none = "none"
diff --git a/src/python/pyeclib/ec_iface.py b/src/python/pyeclib/ec_iface.py
index 5db4602..e17ee5d 100644
--- a/src/python/pyeclib/ec_iface.py
+++ b/src/python/pyeclib/ec_iface.py
@@ -76,11 +76,10 @@ def create_instance(import_str, *args, **kwargs):
class ECDriver(object):
- def __init__(self, library_import_str, *args, **kwargs):
+ def __init__(self, *args, **kwargs):
self.k = -1
self.m = -1
self.w = -1
- self.library_import_str = None
for (key, value) in kwargs.items():
if key == "k":
self.k = int(value)
@@ -89,12 +88,8 @@ class ECDriver(object):
if key == "w":
self.w = int(value)
- if library_import_str is not None:
- self.library_import_str = library_import_str
- else:
- raise ECDriverError(
- "Library import string (library_import_str) was not specified "
- "and is a required argument!")
+ self.library_import_str = kwargs.pop('library_import_str',
+ 'pyeclib.core.ECPyECLibDriver')
if self.k < 0:
raise ECDriverError(
@@ -109,7 +104,7 @@ class ECDriver(object):
# We require keyword arguments to prevent ambiguity between EC libs
#
self.ec_lib_reference = create_instance(
- library_import_str,
+ self.library_import_str,
*args,
**kwargs)
@@ -138,7 +133,7 @@ class ECDriver(object):
if len(not_implemented_str) > 0:
raise ECDriverError(
"The following required methods are not implemented "
- "in %s: %s" % (library_import_str, not_implemented_str))
+ "in %s: %s" % (self.library_import_str, not_implemented_str))
def encode(self, data_bytes):
"""
diff --git a/test/ec_pyeclib_file_test.sh b/test/ec_pyeclib_file_test.sh
index 9914466..6f2de8e 100755
--- a/test/ec_pyeclib_file_test.sh
+++ b/test/ec_pyeclib_file_test.sh
@@ -37,7 +37,7 @@ if [ ! -d ${FRAGMENT_DIR} ]; then
mkdir ${FRAGMENT_DIR}
fi
-TYPES="flat_xor_4 flat_xor_3 rs_vand rs_cauchy_orig"
+TYPES="flat_xor_4 flat_xor_3 jerasure_rs_vand jerasure_rs_cauchy_orig"
NUM_DATAS="10 11 12"
RS_NUM_PARITIES="2 3 4"
XOR_NUM_PARITIES="6"
diff --git a/test/test_pyeclib_api.py b/test/test_pyeclib_api.py
index 3e4f0d5..ee1ecbc 100644
--- a/test/test_pyeclib_api.py
+++ b/test/test_pyeclib_api.py
@@ -41,7 +41,8 @@ else:
class TestNullDriver(unittest.TestCase):
def setUp(self):
- self.null_driver = ECDriver("pyeclib.core.ECNullDriver", k=8, m=2)
+ self.null_driver = ECDriver(
+ library_import_str="pyeclib.core.ECNullDriver", k=8, m=2)
def tearDown(self):
pass
@@ -54,7 +55,8 @@ class TestNullDriver(unittest.TestCase):
class TestStripeDriver(unittest.TestCase):
def setUp(self):
- self.stripe_driver = ECDriver("pyeclib.core.ECStripingDriver", k=8, m=0)
+ self.stripe_driver = ECDriver(
+ library_import_str="pyeclib.core.ECStripingDriver", k=8, m=0)
def tearDown(self):
pass
@@ -102,12 +104,9 @@ class TestPyECLibDriver(unittest.TestCase):
def test_small_encode(self):
pyeclib_drivers = []
- pyeclib_drivers.append(ECDriver("pyeclib.core.ECPyECLibDriver",
- k=12, m=2, ec_type="rs_vand"))
- pyeclib_drivers.append(ECDriver("pyeclib.core.ECPyECLibDriver",
- k=11, m=2, ec_type="rs_vand"))
- pyeclib_drivers.append(ECDriver("pyeclib.core.ECPyECLibDriver",
- k=10, m=2, ec_type="rs_vand"))
+ pyeclib_drivers.append(ECDriver(k=12, m=2, ec_type="jerasure_rs_vand"))
+ pyeclib_drivers.append(ECDriver(k=11, m=2, ec_type="jerasure_rs_vand"))
+ pyeclib_drivers.append(ECDriver(k=10, m=2, ec_type="jerasure_rs_vand"))
encode_strs = [b"a", b"hello", b"hellohyhi", b"yo"]
@@ -121,20 +120,15 @@ class TestPyECLibDriver(unittest.TestCase):
def test_verify_fragment_algsig_chksum_fail(self):
pyeclib_drivers = []
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=12, m=2, ec_type="rs_vand", chksum_type="algsig"))
+ ECDriver(k=12, m=2, ec_type="jerasure_rs_vand", chksum_type="algsig"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=12, m=3, ec_type="rs_vand", chksum_type="algsig"))
+ ECDriver(k=12, m=3, ec_type="jerasure_rs_vand", chksum_type="algsig"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=12, m=6, ec_type="flat_xor_4", chksum_type="algsig"))
+ ECDriver(k=12, m=6, ec_type="flat_xor_4", chksum_type="algsig"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=10, m=5, ec_type="flat_xor_4", chksum_type="algsig"))
+ ECDriver(k=10, m=5, ec_type="flat_xor_4", chksum_type="algsig"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=10, m=5, ec_type="flat_xor_3", chksum_type="algsig"))
+ ECDriver(k=10, m=5, ec_type="flat_xor_3", chksum_type="algsig"))
filesize = 1024 * 1024 * 3
file_str = ''.join(random.choice(ascii_letters) for i in range(filesize))
@@ -162,20 +156,15 @@ class TestPyECLibDriver(unittest.TestCase):
def test_verify_fragment_inline_succeed(self):
pyeclib_drivers = []
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=12, m=2, ec_type="rs_vand", chksum_type="algsig"))
+ ECDriver(k=12, m=2, ec_type="jerasure_rs_vand", chksum_type="algsig"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=12, m=3, ec_type="rs_vand", chksum_type="algsig"))
+ ECDriver(k=12, m=3, ec_type="jerasure_rs_vand", chksum_type="algsig"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=12, m=6, ec_type="flat_xor_4", chksum_type="algsig"))
+ ECDriver(k=12, m=6, ec_type="flat_xor_4", chksum_type="algsig"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=10, m=5, ec_type="flat_xor_4", chksum_type="algsig"))
+ ECDriver(k=10, m=5, ec_type="flat_xor_4", chksum_type="algsig"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=10, m=5, ec_type="flat_xor_3", chksum_type="algsig"))
+ ECDriver(k=10, m=5, ec_type="flat_xor_3", chksum_type="algsig"))
filesize = 1024 * 1024 * 3
file_str = ''.join(random.choice(ascii_letters) for i in range(filesize))
@@ -196,17 +185,13 @@ class TestPyECLibDriver(unittest.TestCase):
def test_verify_fragment_inline_chksum_fail(self):
pyeclib_drivers = []
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=12, m=2, ec_type="rs_vand", chksum_type="inline"))
+ ECDriver(k=12, m=2, ec_type="jerasure_rs_vand", chksum_type="inline"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=12, m=3, ec_type="rs_vand", chksum_type="inline"))
+ ECDriver(k=12, m=3, ec_type="jerasure_rs_vand", chksum_type="inline"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=12, m=4, ec_type="rs_vand", chksum_type="inline"))
+ ECDriver(k=12, m=4, ec_type="jerasure_rs_vand", chksum_type="inline"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=12, m=2, ec_type="rs_cauchy_orig", chksum_type="inline"))
+ ECDriver(k=12, m=2, ec_type="jerasure_rs_cauchy_orig", chksum_type="inline"))
filesize = 1024 * 1024 * 3
file_str = ''.join(random.choice(ascii_letters) for i in range(filesize))
@@ -239,17 +224,13 @@ class TestPyECLibDriver(unittest.TestCase):
def test_verify_fragment_inline_chksum_succeed(self):
pyeclib_drivers = []
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=12, m=2, ec_type="rs_vand", chksum_type="inline"))
+ ECDriver(k=12, m=2, ec_type="jerasure_rs_vand", chksum_type="inline"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=12, m=3, ec_type="rs_vand", chksum_type="inline"))
+ ECDriver(k=12, m=3, ec_type="jerasure_rs_vand", chksum_type="inline"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=12, m=4, ec_type="rs_vand", chksum_type="inline"))
+ ECDriver(k=12, m=4, ec_type="jerasure_rs_vand", chksum_type="inline"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=12, m=2, ec_type="rs_cauchy_orig", chksum_type="inline"))
+ ECDriver(k=12, m=2, ec_type="jerasure_rs_cauchy_orig", chksum_type="inline"))
filesize = 1024 * 1024 * 3
file_str = ''.join(random.choice(ascii_letters) for i in range(filesize))
@@ -270,14 +251,13 @@ class TestPyECLibDriver(unittest.TestCase):
def test_get_segment_info(self):
pyeclib_drivers = []
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=12, m=2, ec_type="rs_vand"))
+ ECDriver( k=12, m=2, ec_type="jerasure_rs_vand"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=11, m=2, ec_type="rs_vand"))
+ ECDriver(
+ k=11, m=2, ec_type="jerasure_rs_vand"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=10, m=2, ec_type="rs_vand"))
+ ECDriver(
+ k=10, m=2, ec_type="jerasure_rs_vand"))
file_sizes = [
1024 * 1024,
@@ -345,29 +325,21 @@ class TestPyECLibDriver(unittest.TestCase):
def test_rs(self):
pyeclib_drivers = []
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=12, m=2, ec_type="rs_vand"))
+ ECDriver(k=12, m=2, ec_type="jerasure_rs_vand"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=12, m=2, ec_type="rs_cauchy_orig"))
+ ECDriver(k=12, m=2, ec_type="jerasure_rs_cauchy_orig"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=12, m=3, ec_type="rs_vand"))
+ ECDriver(k=12, m=3, ec_type="jerasure_rs_vand"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=12, m=3, ec_type="rs_cauchy_orig"))
+ ECDriver(k=12, m=3, ec_type="jerasure_rs_cauchy_orig"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=12, m=6, ec_type="flat_xor_4"))
+ ECDriver(k=12, m=6, ec_type="flat_xor_4"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=10, m=5, ec_type="flat_xor_4"))
+ ECDriver(k=10, m=5, ec_type="flat_xor_4"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=10, m=5, ec_type="flat_xor_3"))
+ ECDriver(k=10, m=5, ec_type="flat_xor_3"))
pyeclib_drivers.append(
- ECDriver("pyeclib.core.ECPyECLibDriver",
- k=9, m=5, ec_type="flat_xor_3"))
+ ECDriver(k=9, m=5, ec_type="flat_xor_3"))
for pyeclib_driver in pyeclib_drivers:
for file_size in self.file_sizes:
diff --git a/test/test_pyeclib_c.py b/test/test_pyeclib_c.py
index 5539efd..59076ba 100644
--- a/test/test_pyeclib_c.py
+++ b/test/test_pyeclib_c.py
@@ -58,7 +58,7 @@ class TestPyECLib(unittest.TestCase):
self.iterations = 100
# EC algorithm and config parameters
- self.rs_types = [("rs_vand", 16), ("rs_cauchy_orig", 4)]
+ self.rs_types = [("jerasure_rs_vand", 16), ("jerasure_rs_cauchy_orig", 4)]
self.xor_types = [("flat_xor_4", 12, 6, 4),
("flat_xor_4", 10, 5, 4),
("flat_xor_3", 10, 5, 3)]
@@ -332,7 +332,7 @@ class TestPyECLib(unittest.TestCase):
#
# MDS codes need any k fragments
#
- if ec_type in ["rs_vand", "rs_cauchy_orig"]:
+ if ec_type in ["jerasure_rs_vand", "jerasure_rs_cauchy_orig"]:
expected_fragments = [i for i in range(num_data + num_parity)]
missing_fragments = []
diff --git a/tools/argparse.pyc b/tools/argparse.pyc
new file mode 100644
index 0000000..21e0c53
--- /dev/null
+++ b/tools/argparse.pyc
Binary files differ
diff --git a/tools/pyeclib_conf_tool.py b/tools/pyeclib_conf_tool.py
index 2d8890b..284c162 100644
--- a/tools/pyeclib_conf_tool.py
+++ b/tools/pyeclib_conf_tool.py
@@ -238,9 +238,7 @@ for scheme in schemes:
string.ascii_uppercase + string.digits) for x in range(args.s))
try:
- ec_driver = ECDriver(
- "pyeclib.core.ECPyECLibDriver",
- k=scheme.k, m=scheme.m, ec_type=scheme.ec_type)
+ ec_driver = ECDriver(k=scheme.k, m=scheme.m, ec_type=scheme.ec_type)
except Exception as e:
print("Scheme %s is not defined (%s)." % (scheme, e))
continue
diff --git a/tools/pyeclib_decode.py b/tools/pyeclib_decode.py
index 4ec7f52..7b539a7 100644
--- a/tools/pyeclib_decode.py
+++ b/tools/pyeclib_decode.py
@@ -44,8 +44,7 @@ print("ec_type = %s" % args.ec_type)
print("fragments = %s" % args.fragments)
print("filename = %s" % args.filename)
-ec_driver = ECDriver(
- "pyeclib.core.ECPyECLibDriver", k=args.k, m=args.m, ec_type=args.ec_type)
+ec_driver = ECDriver(k=args.k, m=args.m, ec_type=args.ec_type)
fragment_list = []
diff --git a/tools/pyeclib_encode.py b/tools/pyeclib_encode.py
index 28563c5..8e9f0b9 100644
--- a/tools/pyeclib_encode.py
+++ b/tools/pyeclib_encode.py
@@ -43,9 +43,7 @@ print("k = %d, m = %d" % (args.k, args.m))
print("ec_type = %s" % args.ec_type)
print("filename = %s" % args.filename)
-ec_driver = ECDriver(
- "pyeclib.core.ECPyECLibDriver",
- k=args.k, m=args.m, ec_type=args.ec_type)
+ec_driver = ECDriver(k=args.k, m=args.m, ec_type=args.ec_type)
# read
with open(("%s/%s" % (args.file_dir, args.filename)), "rb") as fp: