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
Example #2
0
 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
Example #3
0
 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))
Example #4
0
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
Example #5
0
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
Example #6
0
 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
Example #7
0
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