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
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)
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'
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}")
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