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