def __init__(self, num_replicas=3): nodes = self.generate_nodes(num_replicas) hnodes = [hashit(node) for node in nodes] hnodes.sort() self.num_replicas = num_replicas self.nodes = nodes self.hnodes = hnodes self.nodes_map = {hashit(node): node.split("-")[1] for node in nodes}
def send_requests(): for server in servers: connections[server] = Client(server) ring = HRW_Hash() data = csv_line_dict(csv_file_name) count = 0 for key, value in data: if connections[ring.get_node(key)].send_entry(dict([(str(hashit(key)), value)])) == 200: count += 1 print('Uploaded all %s entries.' %count) print('Verifying the data.') for connection in connections.values(): connection.get_entries()
def get_node(self, key): pos = bisect(self.hnodes, hashit(key)) if pos == len(self.hnodes): return self.nodes_map[self.hnodes[0]] else: return self.nodes_map[self.hnodes[pos]]
def get_node(self, val): key_hash = hashit(val) annotated = [(self.merge_hashes(key_hash, hnode), self.nodes_map[hnode]) for hnode in self.hnodes] ordered = sorted(annotated) return [host for _, host in ordered[:1]][0]