コード例 #1
0
ファイル: parallel_put.py プロジェクト: makcuk/fabnet
    def run(self):
        while True:
            job = PutWorker.QUEUE.get()
            try:
                if job == QUIT_JOB:
                    break

                f_path, seek, size, file_md = job

                f_obj = open(f_path, 'rb')
                try:
                    f_obj.seek(seek)
                    data = f_obj.read(size)
                    logger.debug('Read %s %s %s %s'%(file_md.name, seek, size, len(data)))
                finally:
                    f_obj.close()

                try:
                    key, checksum = self.fabnet_gateway.put(data, replica_count=file_md.replica_count)
                except Exception, err:
                    logger.error('Cant put data block from file %s. Wait %s seconds and try again...'%(file_md.name, FG_ERROR_TIMEOUT))
                    time.sleep(FG_ERROR_TIMEOUT)
                    PutWorker.QUEUE.put(job)
                    continue

                file_md.append_chunk(key, checksum, seek, size)

                if file_md.is_all_chunks():
                    logger.debug('File %s is uploaded. Updating metadata...'%file_md.name)
                    self.save_metadata_callback(file_md)
            except Exception, err:
                logger.error('[PutWorker][%s] %s'%(job, err))
コード例 #2
0
ファイル: parallel_get.py プロジェクト: makcuk/fabnet
 def save_block(self, seek, data):
     self.__lock.acquire()
     try:
         self.downloaded_blocks += 1
         fobj = None
         try:
             fobj = open(self.file_obj.name, "r+b")
             fobj.seek(seek)
             fobj.write(data)
             logger.debug("Saved %s %s %s" % (self.file_name, seek, len(data)))
         except Exception, err:
             self.is_error = True
             raise err
         finally:
             if fobj:
                 fobj.close()