def __init__(self, processor, shared, peer): super(RemoteReporter, self).__init__() self.name = 'Reporter-' + peer # Binding shared objects self.dir = shared.settings['Main']['Temporary directory'] + sep + \ hex(int(monotonic() * 100))[2:] self.queue = shared.queue # Current running job, not nessesary self.cur self.curproc = processor.getcur self.pid = processor.getpid # Socket creation tcp = socket() tcp.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) tcp.settimeout(10) # OPTIMIZE: Find optimal timeout tcp.bind(('0.0.0.0', 50000)) tcp.listen(1) try: self.tcp, addr = tcp.accept() except timeout: tcp.close() self._alive = False return self.tcp.settimeout(10) # Setting socket for file transfer self.filetransfer = FileTransfer(socket=self.tcp, blocksize=10240) tcp.close() # Receive job class as it is try: sjob = loads(self.tcp.recv(4096).decode('utf-8')) except timeout: error('Timeout while obtainig job') self.stop() return self.job = Job(*sjob) # Equivalents of local and remote dirs self.eqdirs = dict() # Receive nessesary files and attach their with local paths to job for name, rpath in self.job.files.items(): rdir = dirname(rpath) ldir = self.dir + sep + hex(hash(rdir))[3:] self.eqdirs[ldir] = rdir lpath = ldir + sep + basename(rpath) # Make directory try: makedirs(ldir, exist_ok=True) self.tcp.send( make_header(RR_GET, rpath) + rpath.encode('utf-8')) # Receive file to local path self.filetransfer.recvfile(lpath) except: exception('Error while obtaining job files') self.stop() return # Attach local path to job debug("Replaced " + name + " from " + rpath + " to " + lpath) self.job.files[name] = lpath # Put job into the queue self.queue.put(self.job) shared.inform('add', self.job)
def __init__(self, shared, peer): super(RemoteReceiver, self).__init__() self.peer = peer self.name = 'Receiver-' + self.peer # Binding shared objects self.queue = shared.queue self.inform = shared.inform self.sendto = shared.udpsocket.sendto # Socket creation self.tcp = socket() self.tcp.settimeout(10) # OPTIMIZE: Find optimal timeout sleep(1) # OPTIMIZE: Find optimal sleep before connection try: self.tcp.connect((peer, 50000)) except: error('Unable to connect remote worker ' + self.peer) self.stop() return self.filetransfer = FileTransfer(self.tcp, blocksize=10240) self.job = self.queue.get() debug("Job extracted: " + str(self.job.id))