示例#1
0
        assert byte_ndarray.ndim == 2
        assert byte_ndarray.shape[0] == self.N
        swapped = self.swap(byte_ndarray)
        filtered_ndarray = swapped[:-1]
        flat_list = filtered_ndarray.ravel(1)[:size]
        flat_str_list = [chr(e) for e in flat_list]
        return ''.join(flat_str_list)

    def __gen_raid_array(self, byte_ndarray):
        """
        compute the whole raid array from raw data byte_ndarray
        :param byte_ndarray: data 2darray
        :return:
        """
        assert byte_ndarray.ndim == 2
        assert byte_ndarray.shape[0] + 1 == self.N
        parity = utils.gen_p(byte_ndarray, ndim=2)
        gen_ndarray = np.concatenate([byte_ndarray, parity])
        write_ndarray = self.swap(gen_ndarray)
        return write_ndarray

    def write(self, content, fname):
        """write content into fname(in RAID5 system)"""
        byte_ndarray = self._gen_ndarray_from_content(content, self.N - 1)
        write_array = self.__gen_raid_array(byte_ndarray)
        self._write_n(fname, write_array, self.N)


if __name__ == '__main__':
    utils.simple_test(RAID5)
示例#2
0
        assert byte_ndarray.ndim == 2
        assert byte_ndarray.shape[0] == self.N
        swapped = self.swap(byte_ndarray)
        filtered_ndarray = swapped[:-1]
        flat_list = filtered_ndarray.ravel(1)[:size]
        flat_str_list = [chr(e) for e in flat_list]
        return ''.join(flat_str_list)

    def __gen_raid_array(self, byte_ndarray):
        """
        compute the whole raid array from raw data byte_ndarray
        :param byte_ndarray: data 2darray
        :return:
        """
        assert byte_ndarray.ndim == 2
        assert byte_ndarray.shape[0] + 1 == self.N
        parity = utils.gen_p(byte_ndarray, ndim=2)
        gen_ndarray = np.concatenate([byte_ndarray, parity])
        write_ndarray = self.swap(gen_ndarray)
        return write_ndarray

    def write(self, content, fname):
        """write content into fname(in RAID5 system)"""
        byte_ndarray = self._gen_ndarray_from_content(content, self.N - 1)
        write_array = self.__gen_raid_array(byte_ndarray)
        self._write_n(fname, write_array, self.N)


if __name__ == '__main__':
    utils.simple_test(RAID5)
示例#3
0
        assert 0 <= index < self.N
        byte_ndarray = self._read_n(fname, self.N, exclude=index)
        parity = utils.gen_p(byte_ndarray, ndim=1)
        content = self._1darray_to_str(parity)
        fpath = self.get_real_name(index, fname)
        utils.write_content(fpath, content)
        # check
        read_ndarray = self._read_n(fname, self.N)
        self.check(read_ndarray)

    def __gen_raid_array(self, byte_ndarray):
        """generate full ndarray from raw data ndarray
        """
        # calculate parity and append
        parity = utils.gen_p(byte_ndarray, ndim=2)
        write_array = np.concatenate([byte_ndarray, parity])
        get_logger().info('write_array=\n{}'.format(write_array))
        return write_array

    def write(self, content, fname):
        """
        write content into fname(RAID4 system)
        """
        byte_ndarray = self._gen_ndarray_from_content(content, self.N - 1)
        write_array = self.__gen_raid_array(byte_ndarray)
        self._write_n(fname, write_array, self.N)


if __name__ == '__main__':
    utils.simple_test(RAID4)