diff options
author | Tushar Gohad <tushar.gohad@intel.com> | 2014-08-05 08:11:13 -0700 |
---|---|---|
committer | Tushar Gohad <tushar.gohad@intel.com> | 2014-08-05 08:11:13 -0700 |
commit | c617070b19c6dd60cafc56f2f9922728089198d5 (patch) | |
tree | b1a478ae5f47cc49c3e84131145b31cfdc40ff0c | |
parent | 5fc005a96e5263ed20f125b9dda2da59f07f2deb (diff) | |
download | pyeclib-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-- | README | 6 | ||||
-rw-r--r-- | src/c/pyeclib_c/pyeclib_c.h | 2 | ||||
-rw-r--r-- | src/python/pyeclib/core.py | 4 | ||||
-rw-r--r-- | src/python/pyeclib/ec_iface.py | 15 | ||||
-rwxr-xr-x | test/ec_pyeclib_file_test.sh | 2 | ||||
-rw-r--r-- | test/test_pyeclib_api.py | 104 | ||||
-rw-r--r-- | test/test_pyeclib_c.py | 4 | ||||
-rw-r--r-- | tools/argparse.pyc | bin | 0 -> 64818 bytes | |||
-rw-r--r-- | tools/pyeclib_conf_tool.py | 4 | ||||
-rw-r--r-- | tools/pyeclib_decode.py | 3 | ||||
-rw-r--r-- | tools/pyeclib_encode.py | 4 |
11 files changed, 55 insertions, 93 deletions
@@ -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 Binary files differnew file mode 100644 index 0000000..21e0c53 --- /dev/null +++ b/tools/argparse.pyc 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: |