예제 #1
0
def process(udp_clients):
    client_ring = NodeRing(udp_clients)
    hash_codes = set()
    # PUT all users.
    for u in USERS:
        data_bytes, key = serialize_PUT(u)
        response = client_ring.get_hrw_node(key).send(data_bytes)
        print(response)
        hash_codes.add(str(response.decode()))

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

    # GET all users.
    for hc in hash_codes:
        print(hc)
        data_bytes, key = serialize_GET(hc)
        response = client_ring.get_hrw_node(key).send(data_bytes)
        print(response)
def get_users(hc):
    myOb = NodeRing(NODES)
    data_bytes, key = serialize_GET(hc)
    # print(f'In GET {data_bytes},{key}')
    if bf.is_member(key):
        print("Data found in bloom filter")
        node = myOb.get_hrw_node(key)
        response = UDPClient(node['host'], node['port']).send(data_bytes)
        # print(f'{response} from server')
    else:
        print("Data not in bloom filter and probably not in server")
def delete_users(hc):
    myOb = NodeRing(NODES)
    data_bytes, key = serialize_DELETE(hc)
    node = myOb.get_hrw_node(key)
    if bf.is_member(key):
        response = UDPClient(node['host'], node['port']).send(data_bytes)
        if (response.decode() == 'Success'):
            print('Deleted Succesfully')
            bf.delete(key)
    else:
        print("Data not in bloom filter and probably not in server")
def post_users():
    hash_codes = set()
    myOb = NodeRing(NODES)
    # PUT all users.
    for u in USERS:
        data_bytes, key = serialize_PUT(u)
        # TODO: PART II - Instead of going to server 0, use Naive hashing to split data into multiple servers
        node = myOb.get_hrw_node(key)
        print(f'sending data to port {(node)}')
        response = UDPClient(node['host'], node['port']).send(data_bytes)
        hash_codes.add(response)
        bf.add(response)
        print(f'Hash codes for all users: {hash_codes}  {len(hash_codes)}')
    return hash_codes