Esempio n. 1
0
    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)