def test_place_in_multiple_servers(self): """ Each client placed in a server, with multiplicative_factor one. For each server, the used capacity equals the sum of its clients' demands. """ number_servers = 30 number_clients = 1000 server_manager = ServerManager() client_manager = ClientManager() servers = [ server_manager.create_server() for i in range(number_servers) ] clients = [ client_manager.create_client(random.randint(10, 30)) for i in range(number_clients) ] placement_manager = PlacementManager(servers) server = 0 for client in clients: placement_manager.place_client(client, servers[server]) server = (server + 1) % number_servers for i in range(number_clients): self.assertEqual(placement_manager.get_servers(clients[i]), [(servers[i % number_servers], 1.0)]) for i in range(number_servers): served_clients = [ clients[j] for j in range(i, number_clients, number_servers) ] self.assertEqual( placement_manager.get_clients_served_by(servers[i]), {client: 1.0 for client in served_clients}) self.assertEqual(servers[i].used_capacity, sum(client.demand for client in served_clients))
def placement(clients, servers): """ Greedy algorithm. Sort clients in descending order of their demand. For each client, place it into the server that has the lowest used_capacity. """ placement_manager = PlacementManager(servers) clients.sort(reverse=True) for client in clients: server = heapq.heappop(servers) placement_manager.place_client(client, server) heapq.heappush(servers, server) return placement_manager
def placement(clients, servers): """ Greedy algorithm. Sort clients in descending order of their demand. For each client, place it into the server that has the lowest used_capacity. """ placement_manager = PlacementManager(servers) clients.sort(reverse=True) for client in clients: server = heapq.heappop(servers) placement_manager.place_client(client, server) heapq.heappush(servers, server) return placement_manager
def test_place_in_single_server(self): """ All clients served by a single server. Its used capacity equals the total client demand. """ server_manager = ServerManager() client_manager = ClientManager() server = server_manager.create_server() number_clients = 100 demands = [random.randint(10, 30) for i in range(number_clients)] clients = [client_manager.create_client(demand) for demand in demands] placement_manager = PlacementManager([server]) for client in clients: placement_manager.place_client(client, server) for client in clients: self.assertEqual(placement_manager.get_servers(client), [(server, 1.0)]) self.assertEqual(placement_manager.get_clients_served_by(server), {client : 1.0 for client in clients}) self.assertEqual(server.used_capacity, sum(demands))
def test_place_in_single_server(self): """ All clients served by a single server. Its used capacity equals the total client demand. """ server_manager = ServerManager() client_manager = ClientManager() server = server_manager.create_server() number_clients = 100 demands = [random.randint(10, 30) for i in range(number_clients)] clients = [client_manager.create_client(demand) for demand in demands] placement_manager = PlacementManager([server]) for client in clients: placement_manager.place_client(client, server) for client in clients: self.assertEqual(placement_manager.get_servers(client), [(server, 1.0)]) self.assertEqual(placement_manager.get_clients_served_by(server), {client: 1.0 for client in clients}) self.assertEqual(server.used_capacity, sum(demands))
def test_place_in_multiple_servers(self): """ Each client placed in a server, with multiplicative_factor one. For each server, the used capacity equals the sum of its clients' demands. """ number_servers = 30 number_clients = 1000 server_manager = ServerManager() client_manager = ClientManager() servers = [server_manager.create_server() for i in range(number_servers)] clients = [client_manager.create_client(random.randint(10, 30)) for i in range(number_clients)] placement_manager = PlacementManager(servers) server = 0 for client in clients: placement_manager.place_client(client, servers[server]) server = (server+1)%number_servers for i in range(number_clients): self.assertEqual(placement_manager.get_servers(clients[i]), [(servers[i%number_servers], 1.0)]) for i in range(number_servers): served_clients = [clients[j] for j in range(i, number_clients, number_servers)] self.assertEqual(placement_manager.get_clients_served_by(servers[i]), {client : 1.0 for client in served_clients}) self.assertEqual(servers[i].used_capacity, sum(client.demand for client in served_clients))