def SendNewIdentity(): global _NewIdentity if _NewIdentity is None: return fail(Exception(None)) # d = Deferred() # d.errback(Exception('')) # return DeferredList([d], fireOnOneErrback=True) dhnio.Dprint(4, 'identity_registrator.SendNewIdentity ') sendfile, sendfilename = tmpfile.make("propagate") os.close(sendfile) src = _NewIdentity.serialize() dhnio.WriteFile(sendfilename, src) dlist = [] for idurl in _NewIdentity.sources: # sources for out identity are servers we need to send to protocol, host, port, filename = nameurl.UrlParse(idurl) port = settings.IdentityServerPort() d = Deferred() transport_tcp.sendsingle(sendfilename, host, port, do_status_report=False, result_defer=d, description='Identity') dlist.append(d) dl = DeferredList(dlist) return dl
def __init__(self, protocol, length): global _RegisterTransferFunc global _ByTransferID self.protocol = protocol self.receivedBytes = 0 self.length = length self.fd, self.filename = tmpfile.make("tcp-in") self.peer = self.protocol.remoteaddress # self.protocol.transport.getPeer() self.transfer_id = _RegisterTransferFunc( 'receive', self.peer, self.getReceivedBytes, self.filename, -1) _ByTransferID[self.transfer_id] = self.protocol
def doReadRaid(self, arg): fd, filename = tmpfile.make('restore', prefix=self.BackupID.replace('/','_')+'_'+str(self.BlockNumber)+'_') os.close(fd) threads.deferToThread( raidread.raidread, filename, eccmap.CurrentName(), self.Version, self.BlockNumber, os.path.join(settings.getLocalBackupsDir(), self.PathID) ).addBoth( lambda restored_blocks: self.automat('raid-done', filename))
def Start(backupID, outputLocation, callback=None): dhnio.Dprint(8, "restore_monitor.Start %s to %s" % (backupID, outputLocation)) global _WorkingBackupIDs global _WorkingRestoreProgress if backupID in _WorkingBackupIDs.keys(): return None outfd, outfilename = tmpfile.make("restore", ".tar.gz", backupID.replace("/", "_") + "_") r = restore.restore(backupID, outfd) r.MyDeferred.addCallback(restore_done, outfilename, outputLocation, callback) r.MyDeferred.addErrback(restore_failed, outfilename, callback) r.SetBlockRestoredCallback(block_restored_callback) r.SetPacketInCallback(packet_in_callback) _WorkingBackupIDs[backupID] = r _WorkingRestoreProgress[backupID] = {} return r
def SendServers(): sendfile, sendfilename = tmpfile.make("propagate") os.close(sendfile) LocalIdentity = misc.getLocalIdentity() dhnio.WriteFile(sendfilename, LocalIdentity.serialize()) dlist = [] for idurl in LocalIdentity.sources: # sources for out identity are servers we need to send to protocol, host, port, filename = nameurl.UrlParse(idurl) port = settings.IdentityServerPort() d = Deferred() transport_tcp.sendsingle(sendfilename, host, port, do_status_report=False, result_defer=d, description='Identity') dlist.append(d) dl = DeferredList(dlist, consumeErrors=True) return dl
def doRaid(self, arg): newblock = arg fileno, filename = tmpfile.make('raid') serializedblock = newblock.Serialize() blocklen = len(serializedblock) os.write(fileno, str(blocklen) + ":" + serializedblock) os.close(fileno) dt = time.time() d = threads.deferToThread(raidmake.raidmake, filename, self.eccmap.name, self.backupID, self.blockNumber) d.addCallback(self._raidmakeCallback, newblock, dt) d.addErrback(self._raidmakeErrback) del serializedblock
def download_and_replace_starter(output_func = None): repo, locationURL = misc.ReadRepoLocation() url = settings.WindowsStarterFileURL(repo) dhnio.Dprint(6, 'dhnupdate.download_and_replace_starter ' + str(url)) result = Deferred() def _done(x, filename): try: fin = open(filename, 'rb') src = fin.read() fin.close() except: if output_func: output_func('error opening downloaded starter file') result.errback(Exception('error opening downloaded starter file')) return local_filename = os.path.join(GetLocalDir(), settings.WindowsStarterFileName()) dhnio.backup_and_remove(local_filename) try: os.rename(filename, local_filename) dhnio.Dprint(4, 'dhnupdate.download_and_replace_starter file %s was updated' % local_filename) except: dhnio.Dprint(1, 'dhnupdate.download_and_replace_starter ERROR can not rename %s to %s ' % (filename, local_filename)) dhnio.DprintException() result.errback(Exception('can not rename the file ' + filename)) return python27dll_path = os.path.join(GetLocalDir(), 'python27.dll') if not os.path.exists(python27dll_path): url = settings.UpdateLocationURL('test') + 'windows/' + 'python27.dll' d = dhnnet.downloadHTTP(url, python27dll_path) d.addCallback(_done_python27_dll, filename) d.addErrback(_fail, filename) return result.callback(1) def _done_python27_dll(x, filename): dhnio.Dprint(4, 'dhnupdate.download_and_replace_starter file %s was updated' % filename) result.callback(1) def _fail(x, filename): dhnio.Dprint(1, 'dhnupdate.download_and_replace_starter FAILED') if output_func: try: output_func(x.getErrorMessage()) except: output_func('error downloading starter') try: os.remove(filename) except: dhnio.Dprint(1, 'dhnupdate.download_and_replace_starter ERROR can not remove ' + filename) result.errback(Exception('error downloading starter')) fileno, filename = tmpfile.make('other', '.starter') os.close(fileno) d = dhnnet.downloadHTTP(url, filename) d.addCallback(_done, filename) d.addErrback(_fail, filename) return result