예제 #1
0
    def __process_data_block(self, key, raw_data, is_replica=False):
        self.__processed_local_blocks += 1
        try:
            raw_header = raw_data.read(DataBlockHeader.HEADER_LEN)
            primary_key, replica_count, checksum, user_id, stored_dt = DataBlockHeader.unpack(raw_header)
            if not is_replica:
                if key != primary_key:
                    raise Exception("Primary key is invalid: %s != %s" % (key, primary_key))

            data_keys = KeyUtils.get_all_keys(primary_key, replica_count)
            if is_replica:
                if key not in data_keys:
                    raise Exception("Replica key is invalid: %s" % key)
        except Exception, err:
            self.__invalid_local_blocks += 1
            logger.error("[RepairDataBlocks] %s" % err)
            return