Exemplo n.º 1
0
 def setUp(self):
     self.null_driver = ECDriver(
         library_import_str="pyeclib.core.ECNullDriver", k=8, m=2)
Exemplo n.º 2
0
 def setUp(self):
     self.stripe_driver = ECDriver(
         library_import_str="pyeclib.core.ECStripingDriver", k=8, m=0)
parser = argparse.ArgumentParser()
parser.add_argument('k', type=int)
parser.add_argument('m', type=int)
parser.add_argument('ec_type')
parser.add_argument('file_dir')
parser.add_argument('filename')
parser.add_argument('fragment_dir')

args = parser.parse_args()

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

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:
    whole_file_str = fp.read()

# encode
fragments = ec_driver.encode(whole_file_str)

# store
i = 0
for fragment in fragments:
    with open("%s/%s.%d" % (args.fragment_dir, args.filename, i), "wb") as fp:
        fp.write(fragment)
    i += 1
Exemplo n.º 4
0
    def get_pyeclib_testspec(self, csum="none"):
        pyeclib_drivers = []
        _type1 = 'jerasure_rs_vand'
        if _type1 in VALID_EC_TYPES:
            pyeclib_drivers.append(
                ECDriver(k=12, m=2, ec_type=_type1, chksum_type=csum))
            pyeclib_drivers.append(
                ECDriver(k=11, m=2, ec_type=_type1, chksum_type=csum))
            pyeclib_drivers.append(
                ECDriver(k=10, m=2, ec_type=_type1, chksum_type=csum))
            pyeclib_drivers.append(
                ECDriver(k=8, m=4, ec_type=_type1, chksum_type=csum))
        _type2 = 'liberasurecode_rs_vand'
        if _type2 in VALID_EC_TYPES:
            pyeclib_drivers.append(
                ECDriver(k=12, m=2, ec_type=_type2, chksum_type=csum))
            pyeclib_drivers.append(
                ECDriver(k=11, m=2, ec_type=_type2, chksum_type=csum))
            pyeclib_drivers.append(
                ECDriver(k=10, m=2, ec_type=_type2, chksum_type=csum))
            pyeclib_drivers.append(
                ECDriver(k=8, m=4, ec_type=_type2, chksum_type=csum))
        _type3_1 = 'flat_xor_hd'
        if _type3_1 in VALID_EC_TYPES:
            pyeclib_drivers.append(
                ECDriver(k=12, m=6, ec_type=_type3_1, chksum_type=csum))
            pyeclib_drivers.append(
                ECDriver(k=10, m=5, ec_type=_type3_1, chksum_type=csum))
        _type3_2 = 'flat_xor_hd_4'
        if _type3_2 in VALID_EC_TYPES:
            pyeclib_drivers.append(
                ECDriver(k=12, m=6, ec_type=_type3_2, chksum_type=csum))
            pyeclib_drivers.append(
                ECDriver(k=10, m=5, ec_type=_type3_2, chksum_type=csum))
        _type4 = 'shss'
        if _type4 in VALID_EC_TYPES:
            pyeclib_drivers.append(
                ECDriver(k=10, m=4, ec_type=_type4, chksum_type=csum))
            pyeclib_drivers.append(
                ECDriver(k=20, m=4, ec_type=_type4, chksum_type=csum))
            pyeclib_drivers.append(
                ECDriver(k=11, m=7, ec_type=_type4, chksum_type=csum))

        _type5 = 'isa_l_rs_vand'
        if _type5 in VALID_EC_TYPES:
            pyeclib_drivers.append(
                ECDriver(k=12, m=2, ec_type=_type5, chksum_type=csum))
            pyeclib_drivers.append(
                ECDriver(k=11, m=2, ec_type=_type5, chksum_type=csum))
            pyeclib_drivers.append(
                ECDriver(k=10, m=2, ec_type=_type5, chksum_type=csum))
            pyeclib_drivers.append(
                ECDriver(k=8, m=4, ec_type=_type5, chksum_type=csum))
        _type6 = 'isa_l_rs_cauchy'
        if _type6 in VALID_EC_TYPES:
            pyeclib_drivers.append(
                ECDriver(k=12, m=2, ec_type=_type6, chksum_type=csum))
            pyeclib_drivers.append(
                ECDriver(k=11, m=2, ec_type=_type6, chksum_type=csum))
            pyeclib_drivers.append(
                ECDriver(k=10, m=2, ec_type=_type6, chksum_type=csum))
            pyeclib_drivers.append(
                ECDriver(k=8, m=4, ec_type=_type6, chksum_type=csum))
            pyeclib_drivers.append(
                ECDriver(k=11, m=7, ec_type=_type6, chksum_type=csum))

        _type7 = 'libphazr'
        if _type7 in VALID_EC_TYPES:
            pyeclib_drivers.append(
                ECDriver(k=4, m=4, ec_type=_type7, chksum_type=csum))
        return pyeclib_drivers
Exemplo n.º 5
0
    def __init__(self,
                 idx,
                 name='',
                 aliases='',
                 is_default=False,
                 is_deprecated=False,
                 object_ring=None,
                 diskfile_module='egg:swift#erasure_coding.fs',
                 ec_segment_size=DEFAULT_EC_OBJECT_SEGMENT_SIZE,
                 ec_type=None,
                 ec_ndata=None,
                 ec_nparity=None,
                 ec_duplication_factor=1):

        super(ECStoragePolicy, self).__init__(idx=idx,
                                              name=name,
                                              aliases=aliases,
                                              is_default=is_default,
                                              is_deprecated=is_deprecated,
                                              object_ring=object_ring,
                                              diskfile_module=diskfile_module)

        # Validate erasure_coding policy specific members
        # ec_type is one of the EC implementations supported by PyEClib
        if ec_type is None:
            raise PolicyError('Missing ec_type')
        if ec_type not in VALID_EC_TYPES:
            raise PolicyError('Wrong ec_type %s for policy %s, should be one'
                              ' of "%s"' %
                              (ec_type, self.name, ', '.join(VALID_EC_TYPES)))
        self._ec_type = ec_type

        # Define _ec_ndata as the number of EC data fragments
        # Accessible as the property "ec_ndata"
        try:
            value = int(ec_ndata)
            if value <= 0:
                raise ValueError
            self._ec_ndata = value
        except (TypeError, ValueError):
            raise PolicyError('Invalid ec_num_data_fragments %r' % ec_ndata,
                              index=self.idx)

        # Define _ec_nparity as the number of EC parity fragments
        # Accessible as the property "ec_nparity"
        try:
            value = int(ec_nparity)
            if value <= 0:
                raise ValueError
            self._ec_nparity = value
        except (TypeError, ValueError):
            raise PolicyError('Invalid ec_num_parity_fragments %r' %
                              ec_nparity,
                              index=self.idx)

        # Define _ec_segment_size as the encode segment unit size
        # Accessible as the property "ec_segment_size"
        try:
            value = int(ec_segment_size)
            if value <= 0:
                raise ValueError
            self._ec_segment_size = value
        except (TypeError, ValueError):
            raise PolicyError('Invalid ec_object_segment_size %r' %
                              ec_segment_size,
                              index=self.idx)

        if self._ec_type == 'isa_l_rs_vand' and self._ec_nparity >= 5:
            logger = logging.getLogger("swift.common.storage_policy")
            if not logger.handlers:
                # If nothing else, log to stderr
                logger.addHandler(logging.StreamHandler(sys.__stderr__))
            logger.warning(
                'Storage policy %s uses an EC configuration known to harm '
                'data durability. Any data in this policy should be migrated. '
                'See https://bugs.launchpad.net/swift/+bug/1639691 for '
                'more information.' % self.name)
            if not is_deprecated:
                raise PolicyError(
                    'Storage policy %s uses an EC configuration known to harm '
                    'data durability. This policy MUST be deprecated.' %
                    self.name)

        # Initialize PyECLib EC backend
        try:
            self.pyeclib_driver = \
                ECDriver(k=self._ec_ndata, m=self._ec_nparity,
                         ec_type=self._ec_type)
        except ECDriverError as e:
            raise PolicyError("Error creating EC policy (%s)" % e,
                              index=self.idx)

        # quorum size in the EC case depends on the choice of EC scheme.
        self._ec_quorum_size = \
            self._ec_ndata + self.pyeclib_driver.min_parity_fragments_needed()
        self._fragment_size = None

        self._ec_duplication_factor = \
            config_positive_int_value(ec_duplication_factor)
Exemplo n.º 6
0
# Contains consants that are used by all programs.

from pyeclib.ec_iface import ECDriver

K = 3
M = 13
EC_TYPE = "liberasurecode_rs_vand"
PORT1 = 5005 # sender.py sends to this port, intermediate.py receives from this port.
PORT2 = 6006 # intermediate.py sends to this port, receiver.py receives from this port.

ec_driver = ECDriver(k=K, m=M, ec_type=EC_TYPE)
    oldname = FILE_NAME
    os.rename(FILE_NAME, new_name)
    # Delete the fragment
    for i in range(0, 6):
        fil = "/home/rawal/Desktop/mini_pro/File/" + new_name + '.' + str(i)
        os.remove(fil)

    FILE_NAME = new_name

    k1 = 4
    m1 = 2
    ec_type1 = "liberasurecode_rs_vand"
    file_dir = "/home/rawal/Desktop/mini_pro/code"
    filename = FILE_NAME
    fragment_dir = "/home/rawal/Desktop/mini_pro/File"
    ec_driver = ECDriver(k=k1, m=m1, ec_type=ec_type1)
    with open(("%s/%s" % (file_dir, filename)), "rb") as fp:
        whole_file_str = fp.read()
    fragments = ec_driver.encode(whole_file_str)
    i = 0
    for fragment in fragments:
        with open("%s/%s.%d" % (fragment_dir, filename, i), "wb") as fp:
            fp.write(fragment)
        i += 1

    for i in range(1, 6):
        BUCKET_NAME = "minibuck" + str(i)
        newfn = "/home/rawal/Desktop/mini_pro/File/" + new_name + '.' + str(i -
                                                                            1)

        s3 = boto3.client('s3')
Exemplo n.º 8
0
# Results will be List[(ec_type, throughput)]
results = []

# Num iterations
num_iterations = 10

for scheme in schemes:
    print(scheme)

    # Generate a new string for each test
    file_str = ''.join(
        random.choice(string.ascii_uppercase + string.digits)
        for x in range(args.s))

    try:
        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

    timer.start()

    for i in range(num_iterations):
        ec_driver.encode(file_str)

    duration = timer.stop_and_return()

    results.append((scheme, duration))

    timer.reset()
Exemplo n.º 9
0
    def __init__(self,
                 idx,
                 name='',
                 aliases='',
                 is_default=False,
                 is_deprecated=False,
                 object_ring=None,
                 ec_segment_size=DEFAULT_EC_OBJECT_SEGMENT_SIZE,
                 ec_type=None,
                 ec_ndata=None,
                 ec_nparity=None):

        super(ECStoragePolicy, self).__init__(idx=idx,
                                              name=name,
                                              aliases=aliases,
                                              is_default=is_default,
                                              is_deprecated=is_deprecated,
                                              object_ring=object_ring)

        # Validate erasure_coding policy specific members
        # ec_type is one of the EC implementations supported by PyEClib
        if ec_type is None:
            raise PolicyError('Missing ec_type')
        if ec_type not in VALID_EC_TYPES:
            raise PolicyError('Wrong ec_type %s for policy %s, should be one'
                              ' of "%s"' %
                              (ec_type, self.name, ', '.join(VALID_EC_TYPES)))
        self._ec_type = ec_type

        # Define _ec_ndata as the number of EC data fragments
        # Accessible as the property "ec_ndata"
        try:
            value = int(ec_ndata)
            if value <= 0:
                raise ValueError
            self._ec_ndata = value
        except (TypeError, ValueError):
            raise PolicyError('Invalid ec_num_data_fragments %r' % ec_ndata,
                              index=self.idx)

        # Define _ec_nparity as the number of EC parity fragments
        # Accessible as the property "ec_nparity"
        try:
            value = int(ec_nparity)
            if value <= 0:
                raise ValueError
            self._ec_nparity = value
        except (TypeError, ValueError):
            raise PolicyError('Invalid ec_num_parity_fragments %r' %
                              ec_nparity,
                              index=self.idx)

        # Define _ec_segment_size as the encode segment unit size
        # Accessible as the property "ec_segment_size"
        try:
            value = int(ec_segment_size)
            if value <= 0:
                raise ValueError
            self._ec_segment_size = value
        except (TypeError, ValueError):
            raise PolicyError('Invalid ec_object_segment_size %r' %
                              ec_segment_size,
                              index=self.idx)

        # Initialize PyECLib EC backend
        try:
            self.pyeclib_driver = \
                ECDriver(k=self._ec_ndata, m=self._ec_nparity,
                         ec_type=self._ec_type)
        except ECDriverError as e:
            raise PolicyError("Error creating EC policy (%s)" % e,
                              index=self.idx)

        # quorum size in the EC case depends on the choice of EC scheme.
        self._ec_quorum_size = \
            self._ec_ndata + self.pyeclib_driver.min_parity_fragments_needed()