def __init__(self, udpPort, backupDir=None, storeDir=None, backupTime=None, bootstrapAddr=None, bootstrapPort=None): # Set parameters self.commPort = udpPort self.address = socket.gethostbyname(socket.gethostname()) if backupDir != None and storeDir != None: # New node - params specified on command line self.serverPort = udpPort + 500 self.backupDir = backupDir self.storageDir = storeDir self.backupTime = backupTime print "Time: " + str(self.backupTime) self.saveParams() else: # Resuming node - load parameters try: self.loadParams() except IOError: print "Can't resume node, there is no saved state in this directory!" exit(1) # Create and store helper objects self.reactor = reactor dataStore = datastore.SQLiteDataStore(str(udpPort) + ".db") self.comm = ChunkSafeComm(self.commPort, dataStore) self.backup = BackupDir(self.backupDir, self.storageDir) self.server = ChunkServer(self.serverPort, self.reactor, os.getcwd()) # Connect to the Entangled network if bootstrapAddr != None and bootstrapPort != None: self.comm.joinNetwork([(bootstrapAddr, bootstrapPort)]) else: self.comm.joinNetwork(None) # Schedule the backup self.reactor.callLater(self.secsToBackup(), self.backUp, None) def sigHandler(signum, frame): self.reactor.callLater(0, self.backUp, None) signal.signal(signal.SIGUSR1, sigHandler)