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)
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)