예제 #1
0
 def extract_request(self, data_bytes):
     request = deserialize(data_bytes)
     operation = request['operation']
     key = request['id']
     payload = None
     if 'payload' in request:
         payload = request['payload']
     print(f'operation={operation}\nid={key}\npayload={payload}')
     response = self.handle_operation(operation, key, payload)
     return response
예제 #2
0
 def send(self, key, databytes):
     operation = deserialize(databytes)['operation']
     if operation == 'PUT':
         nodes = self.replicas[self.__get_node(key)]
         responses = []
         for node in nodes:
             responses.append(node.send(databytes))
         return responses[0]
     else:
         return self.__get_node(key).send(databytes)
예제 #3
0
def delete(key, data_bytes):
    if is_member(key):
        print(f"{key} is a member")
        fix_me_server_id = ring.get_node(key)
        print(f"key={key},server_id={fix_me_server_id}")
        response = clients[fix_me_server_id].send(data_bytes)
        resStr = deserialize(response)
        return resStr
    else:
        print(f"{key} is not a member")
        return 'success'
예제 #4
0
def process(udp_clients):
    hash_codes = set()
    # PUT all users.
    for u in USERS:
        data_bytes, key = serialize_PUT(u)

        # hash
        fix_me_server_id = ring.get_node(key)
        print(f"put key={key} to server_id={fix_me_server_id}")
        response = udp_clients[fix_me_server_id].send(data_bytes)

        # TODO set back-up server as ((server_id +1) % n)
        # fix_me_server_id = (fix_me_server_id+1) % len(udp_clients)
        # print(f"put back up key={key} to server_id={fix_me_server_id}")
        # response = udp_clients[fix_me_server_id].send(data_bytes)

        hash_codes.add(response)
        print(response)

    print(
        f"Number of Users={len(USERS)}\nNumber of Users Cached={len(hash_codes)}"
    )

    # TODO: PART I
    # GET all users.
    for hc in hash_codes:
        hc = str(hc, encoding='utf-8')
        # hc = deserialize(hc)
        print(hc)
        data_bytes, key = serialize_GET(hc)
        # fix_me_server_id = 0

        # hash
        fix_me_server_id = ring.get_node(key)
        print(f"get key={key} from server_id={fix_me_server_id}")
        try:
            response = udp_clients[fix_me_server_id].send(data_bytes)
        except socket.timeout:
            # TODO if the server is down, then get back-up data from ((server_id +1) % n)
            fix_me_server_id = (fix_me_server_id + 1) % len(udp_clients)
            print(f"get back up key={key} from server_id={fix_me_server_id}")
            response = udp_clients[fix_me_server_id].send(data_bytes)

            # debug code, check response
        resStr = deserialize(response)
        print(f"get parsed data:{resStr}")
예제 #5
0
        def cached_fn(*args):
            key = ""
            data_bytes = ""

            #print(func.__name__)
            cache = LRUCache(size)
            fname = func.__name__

            if (len(args) == 1):
                key = args[0]
                #print(key)
            if (len(args) == 2):
                key = args[0]
                data_bytes = args[1]
            if (fname == 'put' or fname == 'fibonacci'):
                temp = LRUCacheItem(key, data_bytes)
                cache.insertItem(temp)
                print("LRU--->Number of Users Cached=" + str(len(item_list)))
                retval = func(*args)
            if (fname == 'get' or fname == 'get_data'):
                hashval = cache.get()
                if key in hashval:
                    item = hashval[key]
                    data_bytes, key = serialize_GET(item)
                    print("LRU Get-->")
                    print(key)
                    retval = key
                    print(deserialize(data_bytes))
                else:
                    retval = func(*args)
                    if (retval != None):
                        print("Server Get --> Success")
                        print(key)
                    else:
                        print("Server Get-->" + key + '--->KEY NOT FOUND')
            if (fname == 'delete'):
                if (cache.remove(key)):
                    print("LRU Delete-->" + key)
                else:
                    print("LRU Delete-->" + key + '--->KEY NOT FOUND')

                retval = func(*args)
                print("Server Delete-->" + key)
            return retval