Пример #1
0
 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))
Пример #2
0
 def test_set_multiplicative_factors(self):
     """
     Place each clients i in two servers:
     server[0], with multiplicative_factor k, and servers[1] with multiplicative_factor 1.0-k.
     """
     number_servers = 2
     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)
     multiplicative_factors = [random.random() for i in range(number_clients)]
     for i in range(number_clients):
         placement_manager.reset(clients[i:i+1])
         placement_manager.set_multiplicative_factor(servers[0], clients[i:i+1], multiplicative_factors[i])
         placement_manager.set_multiplicative_factor(servers[1], clients[i:i+1], 1.0 - multiplicative_factors[i])
     for i in range(number_clients):
         retrieved_servers = placement_manager.get_servers(clients[i])
         self.assertEqual(retrieved_servers[0][1], multiplicative_factors[i])
         self.assertEqual(retrieved_servers[1][1], 1.0 - multiplicative_factors[i])
     retrieved_clients = placement_manager.get_clients_served_by(servers[0])
     self.assertEqual(retrieved_clients,
                       {clients[i] : multiplicative_factors[i] for i in range(number_clients)})
     retrieved_clients = placement_manager.get_clients_served_by(servers[1])
     self.assertEqual(retrieved_clients,
                       {clients[i] : 1.0 - multiplicative_factors[i] for i in range(number_clients)})
Пример #3
0
 def test_place_and_get_zero_clients(self):
     """
     Servers are initialized empty.
     """
     server_manager = ServerManager()
     servers = [server_manager.create_server() for i in range(30)]
     placement_manager = PlacementManager(servers)
     for server in servers:
         self.assertEqual(placement_manager.get_clients_served_by(server), {})
Пример #4
0
 def test_create_servers(self):
     """
     Verify if servers id are correctly created sequentially.
     """
     number_servers = 30
     server_manager = ServerManager()
     servers = [server_manager.create_server() for i in range(number_servers)]
     for i in range(number_servers):
         self.assertEqual(servers[i].id, i+1)
 def __get_clients_and_servers(self, demands, number_servers):
     """
     Input: list with demands and integer number_servers.
     Output: list with clients and list with servers.
     """
     client_manager = ClientManager()
     server_manager = ServerManager()
     clients = [client_manager.create_client(demand) for demand in demands]
     servers = [server_manager.create_server() for i in range(number_servers)]
     return (clients, servers)
Пример #6
0
 def test_place_and_get_zero_clients(self):
     """
     Servers are initialized empty.
     """
     server_manager = ServerManager()
     servers = [server_manager.create_server() for i in range(30)]
     placement_manager = PlacementManager(servers)
     for server in servers:
         self.assertEqual(placement_manager.get_clients_served_by(server),
                          {})
Пример #7
0
 def __get_clients_and_servers(self, demands, number_servers):
     """
     Input: list with demands and integer number_servers.
     Output: list with clients and list with servers.
     """
     client_manager = ClientManager()
     server_manager = ServerManager()
     clients = [client_manager.create_client(demand) for demand in demands]
     servers = [
         server_manager.create_server() for i in range(number_servers)
     ]
     return (clients, servers)
Пример #8
0
def read_input(file_name):
    """
    Input: file name (string).
    File format:
        int algorithm (1 or 2)
        int number of servers
        list of int [client demands]
    Reads file and outputs a list of clients, a list of servers and the algorithm.
    """
    f = open(file_name, 'r')
    client_manager = ClientManager()
    server_manager = ServerManager()
    algorithm = int(f.readline())
    number_servers = int(f.readline())
    servers = [server_manager.create_server() for i in range(number_servers)]
    demands = map(int, f.readline().split())
    clients = [client_manager.create_client(demand) for demand in demands]
    return clients, servers, algorithm
Пример #9
0
def read_input(file_name):
    """
    Input: file name (string).
    File format:
        int algorithm (1 or 2)
        int number of servers
        list of int [client demands]
    Reads file and outputs a list of clients, a list of servers and the algorithm.
    """
    f = open(file_name, 'r')
    client_manager = ClientManager()
    server_manager = ServerManager()
    algorithm = int(f.readline())
    number_servers = int(f.readline())
    servers = [server_manager.create_server() for i in range(number_servers)]
    demands = map(int, f.readline().split())
    clients = [client_manager.create_client(demand) for demand in demands]
    return clients, servers, algorithm
Пример #10
0
 def test_set_multiplicative_factors(self):
     """
     Place each clients i in two servers:
     server[0], with multiplicative_factor k, and servers[1] with multiplicative_factor 1.0-k.
     """
     number_servers = 2
     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)
     multiplicative_factors = [
         random.random() for i in range(number_clients)
     ]
     for i in range(number_clients):
         placement_manager.reset(clients[i:i + 1])
         placement_manager.set_multiplicative_factor(
             servers[0], clients[i:i + 1], multiplicative_factors[i])
         placement_manager.set_multiplicative_factor(
             servers[1], clients[i:i + 1], 1.0 - multiplicative_factors[i])
     for i in range(number_clients):
         retrieved_servers = placement_manager.get_servers(clients[i])
         self.assertEqual(retrieved_servers[0][1],
                          multiplicative_factors[i])
         self.assertEqual(retrieved_servers[1][1],
                          1.0 - multiplicative_factors[i])
     retrieved_clients = placement_manager.get_clients_served_by(servers[0])
     self.assertEqual(retrieved_clients, {
         clients[i]: multiplicative_factors[i]
         for i in range(number_clients)
     })
     retrieved_clients = placement_manager.get_clients_served_by(servers[1])
     self.assertEqual(
         retrieved_clients, {
             clients[i]: 1.0 - multiplicative_factors[i]
             for i in range(number_clients)
         })
Пример #11
0
 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))
Пример #12
0
 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))
Пример #13
0
 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))
Пример #14
0
def run_client(**kwargs):
    """Run the simulation client manager."""

    save = kwargs.get("save", False)
    timeout = kwargs.get("timeout", 310)
    address = kwargs.get("address", ("127.0.0.1", 50000))
    authkey = kwargs.get("authkey", None)
    n_procs = kwargs.get("n_procs", mp.cpu_count())
    max_tries = kwargs.get("max_tries", 3)

    # Job-specific parameters.
    kwargs = dict(save=save)

    # Connect to the server manager
    ServerManager.register_shared(with_callable=False)
    mgr = ServerManager(address=address, authkey=authkey)
    mgr.connect()

    # create a lock for printing information
    info_lock = mp.Lock()

    # Set up params and task parameters.
    worker_kwargs = {'timeout': timeout, 'save': save, 'max_tries': max_tries}

    logger.info("Starting processes...")
    threads = []
    for ithread in xrange(n_procs):
        thread = Thread(name="Thread_%02d" % ithread,
                        target=worker_thread,
                        args=(mgr, info_lock),
                        kwargs=worker_kwargs)
        threads.append(thread)
        thread.start()
        thread.join(timeout=0.2)

    for thread in threads:
        thread.join()

    logger.info("Jobs complete.")
    sys.exit(0)