Skip to content

Instantly share code, notes, and snippets.

@clayg
Last active August 29, 2015 14:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save clayg/2860667dc8a7d3a31e73 to your computer and use it in GitHub Desktop.
Save clayg/2860667dc8a7d3a31e73 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
from pyeclib.ec_iface import ECDriver
driver = ECDriver(k=3, m=1, ec_type='jerasure_rs_vand')
fragments = [' ' for f in range(3)]
driver.decode(fragments)
@dbishop
Copy link

dbishop commented May 6, 2015

Instrumentation:

    def _reconstruct(self, policy, fragment_payload, frag_index):
        global call_count
        base = '/tmp/frag_index_%d_fragment_payload%d_%d'
        for i, f_payload in enumerate(fragment_payload):
            fname = base % (frag_index, call_count, i)
            with open(fname, 'wb') as fh:
                fh.write(f_payload)
        call_count += 1
        return policy.pyeclib_driver.reconstruct(fragment_payload,
                                                 [frag_index])[0]

pyeclib_reconstruct.py

from pyeclib.ec_iface import ECDriver
import argparse

parser = argparse.ArgumentParser(description='Fragment reconstructor for PyECLib.')
parser.add_argument('k', type=int, help='number of data elements')
parser.add_argument('m', type=int, help='number of parity elements')
parser.add_argument('ec_type', help='EC algorithm used')
parser.add_argument('i', type=int, help='fragment index to reconstruct')
parser.add_argument('fragments', metavar='fragment', nargs='+',
                    help='fragments to reconstruct from')
parser.add_argument('filename', help='output file')

args = parser.parse_args()

print("k = %d, m = %d" % (args.k, args.m))
print("ec_type = %s" % args.ec_type)
print("i = %d" % args.i)
print("fragments = %s" % args.fragments)
print("filename = %s" % args.filename)

ec_driver = ECDriver(k=args.k, m=args.m, ec_type=args.ec_type)

fragment_list = []

# read fragments
for fragment in args.fragments:
    with open(("%s" % fragment), "rb") as fp:
        fragment_list.append(fp.read())

# reconstruct
decoded_fragment = ec_driver.reconstruct(fragment_list, [args.i])[0]

# write
with open("%s.fragment_%d" % (args.filename, args.i), "wb") as fp:
    fp.write(decoded_fragment)

Invocation:

root@node3:/home/vagrant/ec_segfault# pyeclib_reconstruct.py 3 2 isa_l_rs_vand 1 /tmp/frag_index_1_fragment_payload1_0 /tmp/frag_index_1_fragment_payload1_1 /tmp/frag_index_1_fragment_payload1_2 my_objectk = 3, m = 2
ec_type = isa_l_rs_vand
i = 1
fragments = ['/tmp/frag_index_1_fragment_payload1_0', '/tmp/frag_index_1_fragment_payload1_1', '/tmp/frag_index_1_fragment_payload1_2']
filename = my_object
Segmentation fault

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment