def check(self, byte_ndarray): """ check involves p and q :param byte_ndarray: all ndarray including p and q :return: """ # check p data_p_ndarray = byte_ndarray[:-1] utils.check_data_p(data_p_ndarray) # check_q data_ndarray = byte_ndarray[:-2] q_ndarray = byte_ndarray[-1:] utils.check_q(data_ndarray, q_ndarray)
def recover_d_or_p(self, fname, index): """ recover data drive or 'p' drive, simply using XOR :param fname: data name :param index: data disk or p disk index :return: """ assert 0 <= index < self.N - 1 byte_ndarray = self._read_n(fname, self.N - 1, 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 data or p read_ndarray = self._read_n(fname, self.N - 1) utils.check_data_p(read_ndarray)
def check(self, byte_ndarray): """integrity check; only need to check p""" utils.check_data_p(byte_ndarray)