Esempio n. 1
0
	def get_dumped_events(self):
		"""
		Method loads previously saved events from Redis database - to have data to merge with currently created slice-clusters.
		Old events are being dumped to MySQL, and shouldn't be in Redis.
		Currently method is used only on initialisation. 
		"""
		self.events = {}
		for key in self.redis.keys("event:*"):
			event = Event(self.mysql, self.redis, self.tokenizer, self.morph, self.classifier)
			event.load(key[6:])
			self.events[event.id] = event
    def send(self, _id, event=None):
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            data = "data"
            # print("Sending Data from client")
            # Connect to server and send data
            sock.settimeout(3)
            sock.connect((Node.ips[_id], 6000))
            sock.sendall(event)

            # Receive data from the server and shut down
            received = sock.recv(1024)
            # Add To EntrySet
        except:
            # Node Down cancel conflict
            if not event == None:
                print("Failed to connect to node: " + str(_id))
                d = json.loads(event)
                dd = json.loads(d['events'][0])
                event = Event.load(dd)
                event.entry = Entry.load(event.entry)
                self.delete_entry(event.entry, [_id])
            pass

        finally:
            sock.close()
    def receive(self, raw):
        data = json.loads(raw)
        print(self.table.table)
        print(data)
        if data['type'] == "failure":
            self.rec_failure(data)
        else:
            new_table = TimeTable.load(json.loads(data['table']),
                                       len(Node.ips))
            events = data['events']

            new_events = []
            for event in events:
                event = Event.load(json.loads(event))
                if event.entry:
                    event.entry = Entry.load(event.entry)
                new_events.append(event)

            # For all events this node doesn't have, make modifications
            for event in new_events:
                if not self.has_event(event, self.id):
                    res = event.apply(self.entry_set, self)
                    if res:
                        self.events.append(event)
                    else:
                        if event.type == MessageTypes.Insert:
                            self.send_failure(event)

            self.table.sync(new_table, self.id, data['node_id'])
        print(self.table.table)
    def send(self, _id, event=None):
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            data = "data"
           # print("Sending Data from client")
            # Connect to server and send data
            sock.settimeout(3)
            sock.connect((Node.ips[_id], 6000))
            sock.sendall(event)

            # Receive data from the server and shut down
            received = sock.recv(1024)
            # Add To EntrySet
        except:
            # Node Down cancel conflict
            if not event == None:
                print("Failed to connect to node: " + str(_id))
                d = json.loads(event)
                dd = json.loads(d['events'][0])
                event = Event.load(dd)
                event.entry = Entry.load(event.entry)
                self.delete_entry(event.entry, [_id])
            pass

        finally:
            sock.close()
    def receive(self, raw):
        data = json.loads(raw)
        print(self.table.table)
        print(data)
        if data['type'] == "failure":
            self.rec_failure(data)
        else:
            new_table = TimeTable.load(json.loads(data['table']), len(Node.ips))
            events = data['events']

            new_events =[]
            for event in events:
                event = Event.load(json.loads(event))
                if event.entry:
                    event.entry = Entry.load(event.entry)
                new_events.append(event)

            # For all events this node doesn't have, make modifications
            for event in new_events:
                if not self.has_event(event, self.id):
                    res = event.apply(self.entry_set, self)
                    if res:
                        self.events.append(event)
                    else:
                        if event.type == MessageTypes.Insert:
                            self.send_failure(event)

            self.table.sync(new_table, self.id, data['node_id'])
        print(self.table.table)
Esempio n. 6
0
def parse_command(user_input):
    user_input = user_input.split()
    command = user_input[0]
    command = command.lower()
    args = user_input[1:]

    # proposer proposes a new event
    # if successful, add it to the calendar
    if command == "schedule":
        # first verify this site is a participant in the new event
        event_string = " ".join(args)
        event = Event.load(event_string)
        if config.worker.ID not in event.participants:
            print("You cannot schedule an event for other users")
            return

        # propose the new event (Paxos proposal algorithm)
        accepted = config.worker.propose(event, "new")
        if accepted:
            print("SUCCESS!")
            config.calendar.schedule(event)
        else:
            print("Not adding event to calendar")

    # proposer proposes an event cancellation
    # if successful, remove it from the calendar
    elif command == "cancel":
        # first verify that the event exists and this site is a participant
        event_name = args[0]
        participants = config.calendar.get_participants(event_name)
        if participants == None:
            print("You are not participating in that event")
            return

        # propose the event cancellation (Paxos proposal algorithm)
        accepted = config.worker.propose(event_name, "cancel", participants)
        if accepted:
            print("SUCCESS!")
            config.calendar.cancel(event_name)

    # view the entire calendar
    elif command == "view":
        config.calendar.view()

    # view all events this site is particpating in
    elif command == "myview":
        config.calendar.myview()

    # view the log
    elif command == "log":
        print("User requested LOG")

    # all other commands are invalid
    else:
        print("ERROR: Invalid command.")
    def create_from_log(self, node):
        node.log.close()
        log = open('log.dat', 'r')
        for l in log:
            event = json.loads(l)
            event = Event.load(event)
            event.entry = Entry.load(event.entry)
            event.apply(node.entry_set, node)
            node.events.append(event)
            for i in event.entry.participants:
                if event.time > node.table.table[node.id][i]:
                    node.table.table[node.id][i] = event.time

        log.close()

        #create calendar from it
        #using log file

        node.log = open("log.dat", "a+")
 def create_from_log(self, node):
     node.log.close()
     log =  open('log.dat','r')
     for l in log:
         event = json.loads(l)
         event = Event.load(event)
         event.entry = Entry.load(event.entry)
         event.apply(node.entry_set, node)
         node.events.append(event)
         for i in event.entry.participants:
             if event.time > node.table.table[node.id][i]:
                 node.table.table[node.id][i] = event.time
     
             
     log.close()
     
     
     #create calendar from it
     #using log file
     
     
     node.log = open("log.dat", "a+")
    def rec_failure(self, data):
        event = Event.load(json.loads(data['event']))
        event.entry = Entry.load(event.entry)

        self.delete_entry(event.entry)
    def rec_failure(self, data):
        event = Event.load(json.loads(data['event']))
        event.entry = Entry.load(event.entry)

        self.delete_entry(event.entry)