Skip to content

Instantly share code, notes, and snippets.

@amirziai
Created September 25, 2022 21:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save amirziai/c746990449e5045307756cf4498a363a to your computer and use it in GitHub Desktop.
Save amirziai/c746990449e5045307756cf4498a363a to your computer and use it in GitHub Desktop.
class ConsistentHashingWithTokensNaive:
def __init__(
self,
server_ids: Set[ServerId],
k: int,
seed: int = SEED,
):
server_ids_virtual = {
f"{server_id}-{idx}"
for server_id in server_ids
for idx in range(k)
}
self.k = k
self.ch = ConsistentHashing(
server_ids=server_ids_virtual,
seed=seed,
)
def key_lookup(self, key: str) -> ServerId:
server_id_virtual = self.ch.key_lookup(key=key)
return "-".join(server_id_virtual.split("-")[:-1])
def add_server(self, server_id: ServerId) -> None:
for idx in range(self.k):
self.ch.add_server(server_id=f"{server_id}-{idx}")
def remove_server(self, server_id: ServerId) -> None:
for idx in range(self.k):
self.ch.remove_server(server_id=f"{server_id}-{idx}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment