예제 #1
0
파일: aio.py 프로젝트: nkchenz/ideerfs
    def _enqueue(self, fp, data, length, callback, queue, mask):
        fn = fp.fileno()
        io = OODict()
        io.fn = fn
        io.ctime = time.time()
        io.data = data
        io.length = length
        io.callback = callback
        io.done_cv = threading.Condition()
        io.done = False
        
        if fn not in self.io_queue:
            self.io_queue[fn] = OODict()
            self.io_queue[fn].fp = fp
            self.io_queue[fn].mask = 0
            self.io_queue[fn].errs = 0
            fp.setblocking(0)
            self.epoll.register(fn, self.io_queue[fn].mask)

        if queue not in self.io_queue[fn]:
            self.io_queue[fn][queue] = []

        if self.io_queue[fn][queue]:
            self.io_queue[fn][queue].append(io)
        else:
            self.io_queue[fn][queue] = [io]
            self.io_queue[fn].mask |= mask
            self.epoll.modify(fn, self.io_queue[fn].mask)

        print queue, io
        return io
예제 #2
0
파일: obj.py 프로젝트: nkchenz/ideerfs
    def load_chunk(self, chunk, dev):
        """Read chunk from device, return a chunk object
        @fid
        @cid
        @version
        @dev
        """
        file = self._get_chunk_path(chunk, dev)
        if not os.path.isfile(file):
            raise IOError('chunk lost or stale')

        fp = open(file, 'r')
        try:
            header = OODict(eval(fp.read(CHUNK_HEADER_SIZE).strip('\x00')))
        except:
            raise IOError('chunk header corrupt')

        if not header:
            raise IOError('chunk header corrupt')

        data = fp.read(header.size)
        if len(data) != header.size:
            raise IOError('chunk data lost')

        if header.algo == 'adler32' and zlib.adler32(data) != header.checksum:
            raise IOError('chunk data corrupt')

        if header.algo == 'sha1' and hashlib.sha1(data).hexdigest() != header.checksum:
            raise IOError('chunk data corrupt')

        fp.close()
        header.data = data
        return header