Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random
- import pprint
- num_partitions = 4096
- max_cluster_size = 128
- full_partition_map = [range(0, max_cluster_size) for _ in range(0, num_partitions)]
- map(random.shuffle, full_partition_map)
- def make_map(nodes):
- cluster_size = len(nodes)
- partition_map = []
- for row in full_partition_map:
- row = filter(lambda i: i < cluster_size, row)
- row = [nodes[i] for i in row]
- row = filter(lambda n: n != None, row)[:replication_factor] # stable
- partition_map.append(row)
- return partition_map
- def compare_maps(map1, map2):
- master_change = 0
- replica_change = 0
- for part1, part2 in zip(map1, map2):
- if part1[0] != part2[0]:
- master_change += 1
- for replica1, replica2 in zip(part1[1:], part2[1:]):
- if replica1 != replica2:
- replica_change += 1
- print "Master Change: %d, Replica Change: %d, Total Change: %d"%(master_change, replica_change, master_change + replica_change)
- init_nodes = range(100, 104)
- replication_factor = 1
- print "Start: %s"%(init_nodes)
- initial_map = make_map(init_nodes)
- add_node = init_nodes[:]
- add_node.append(104)
- print "\nAdding a node: %s"%(add_node)
- add_node_map = make_map(add_node)
- compare_maps(initial_map, add_node_map)
- remove_node = init_nodes[:]
- removed = init_nodes[2]
- del remove_node[2]
- print "\nRemoved a node: %s"%(remove_node)
- remove_node_map = make_map(remove_node)
- compare_maps(initial_map, remove_node_map)
- remove_node = init_nodes[:]
- removed = init_nodes[2]
- remove_node[2] = None
- print "\nReplace a node with None: %s"%(remove_node)
- remove_node_map = make_map(remove_node)
- compare_maps(initial_map, remove_node_map)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement