Exemplo n.º 1
0
    def test_multiple_spots_multiple_hosts(self):
        used1 = object_fakes.make_resources(vcpu=8, memory=2048, disk=40)
        total1 = object_fakes.make_resources(vcpu=8, memory=2048, disk=40)
        rp1_capabilities = object_fakes.make_capabilities(used=used1,
                                                          total=total1)

        used2 = object_fakes.make_resources(vcpu=4, memory=1792, disk=20)
        total2 = object_fakes.make_resources(vcpu=8, memory=2048, disk=40)
        rp2_capabilities = object_fakes.make_capabilities(used=used2,
                                                          total=total2)

        servers_rp1 = [
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=1, memory=256, disk=10),
                                     uuid='server1'),
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=1, memory=256, disk=10),
                                     uuid='server2'),
        ]

        servers_rp2 = [
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=2, memory=512, disk=10),
                                     uuid='server3'),
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=1, memory=256, disk=10),
                                     uuid='server4'),
        ]

        rp1 = object_fakes.make_resource_provider(
            uuid='1', name='rp1', capabilities=rp1_capabilities)
        rp1.preemptible_servers = servers_rp1
        rp1.populate = mock.Mock()
        rp2 = object_fakes.make_resource_provider(
            uuid='2', name='rp2', capabilities=rp2_capabilities)
        rp2.preemptible_servers = servers_rp2
        rp2.populate = mock.Mock()

        rps = [rp1, rp2]

        requested = object_fakes.make_resources(vcpu=2, memory=512, disk=10)
        projects = [mock.Mock()]

        expected = (rps, servers_rp1 + [servers_rp2[0]])

        with mock.patch('random.shuffle') as mocked:
            mocked.side_effect = mocked_random
            with mock.patch('random.choice') as mocked_choice:
                mocked_choice.side_effect = rps
                actual = self.strategy.get_preemptible_servers(
                    requested, rps, 2, projects)
                self.assertEqual(expected, actual)
                self.assertEqual(1, rp1.reserved_spots)
                self.assertEqual(1, rp2.reserved_spots)
                self.assertEqual(0, len(rp1.preemptible_servers))
                self.assertEqual(1, len(rp2.preemptible_servers))
                self.assertEqual('server4', rp2.preemptible_servers[0].uuid)
Exemplo n.º 2
0
    def test_full_execution(self, spots):
        used1 = object_fakes.make_resources(vcpu=4, memory=1024, disk=20)
        total1 = object_fakes.make_resources(vcpu=8, memory=2056, disk=40)
        rp1_capabilities = object_fakes.make_capabilities(used=used1,
                                                          total=total1)

        used2 = object_fakes.make_resources(vcpu=4, memory=1024, disk=20)
        total2 = object_fakes.make_resources(vcpu=8, memory=2056, disk=40)
        rp2_capabilities = object_fakes.make_capabilities(used=used2,
                                                          total=total2)

        servers_rp1 = [
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=1, memory=256, disk=10),
                                     uuid='server1'),
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=1, memory=256, disk=10),
                                     uuid='server2'),
        ]

        servers_rp2 = [
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=1, memory=256, disk=10),
                                     uuid='server3'),
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=1, memory=256, disk=10),
                                     uuid='server4'),
        ]

        rp1 = object_fakes.make_resource_provider(
            uuid='1', name='rp1', capabilities=rp1_capabilities)
        rp1.preemptible_servers = servers_rp1
        rp2 = object_fakes.make_resource_provider(
            uuid='2', name='rp2', capabilities=rp2_capabilities)
        rp2.preemptible_servers = servers_rp2

        rps = [rp1, rp2]

        expected_result = (rps[:], servers_rp1[:] + servers_rp2[:])

        requested = object_fakes.make_resources(disk=50)
        projects = [mock.Mock()]

        with mock.patch('random.shuffle') as mocked:
            mocked.side_effect = mocked_random
            with mock.patch('random.choice') as mocked_choice:
                mocked_choice.side_effect = rps
                result = self.strategy.get_preemptible_servers(
                    requested, rps, 1, projects)

                self.assertEqual(expected_result, result)

                self.assertEqual(0, len(rp1.preemptible_servers))
                self.assertEqual(0, len(rp2.preemptible_servers))
Exemplo n.º 3
0
    def test_check_spots_multiple_hosts(self):
        strategy = chance.ChanceStrategy(False)
        hosts = [
            object_fakes.make_resource_provider(reserved_spots=1),
            object_fakes.make_resource_provider(reserved_spots=1)
        ]
        # No exception is raised
        strategy.check_spots(hosts, 2)

        # Asking for more spots should raise the exception
        self.assertRaises(exception.NotEnoughResources,
                          strategy.check_spots, hosts, 3)
Exemplo n.º 4
0
    def test_not_enough_resources(self):
        used1 = object_fakes.make_resources(vcpu=4, memory=1024, disk=20)
        total1 = object_fakes.make_resources(vcpu=8, memory=2056, disk=40)
        rp1_capabilities = object_fakes.make_capabilities(used=used1,
                                                          total=total1)

        used2 = object_fakes.make_resources(vcpu=4, memory=1024, disk=20)
        total2 = object_fakes.make_resources(vcpu=8, memory=2056, disk=40)
        rp2_capabilities = object_fakes.make_capabilities(used=used2,
                                                          total=total2)

        servers_rp1 = [
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=1, memory=256, disk=10),
                                     uuid='server1'),
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=1, memory=256, disk=10),
                                     uuid='server2'),
        ]

        servers_rp2 = [
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=1, memory=256, disk=10),
                                     uuid='server3'),
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=1, memory=256, disk=10),
                                     uuid='server4'),
        ]

        rp1 = object_fakes.make_resource_provider(
            uuid='1', name='rp1', capabilities=rp1_capabilities)
        rp1.preemptible_servers = servers_rp1
        rp1.populate = mock.Mock()
        rp2 = object_fakes.make_resource_provider(
            uuid='2', name='rp2', capabilities=rp2_capabilities)
        rp2.preemptible_servers = servers_rp2
        rp2.populate = mock.Mock()

        rps = [rp1, rp2]

        requested = object_fakes.make_resources(disk=50)
        projects = [mock.Mock()]

        with mock.patch('random.shuffle') as mocked:
            mocked.side_effect = mocked_random
            with mock.patch('random.choice') as mocked_choice:
                mocked_choice.side_effect = rps
                self.assertRaises(exception.NotEnoughResources,
                                  self.strategy.get_preemptible_servers,
                                  requested, rps, 1, projects)
Exemplo n.º 5
0
    def test_find_matching_server_combinations(self):
        used = object_fakes.make_resources(vcpu=8, memory=2056, disk=40)
        total = object_fakes.make_resources(vcpu=8, memory=2056, disk=40)
        rp_capabilities = object_fakes.make_capabilities(used=used,
                                                         total=total)

        server1 = object_fakes.make_server(
            resources=object_fakes.make_resources(vcpu=1, memory=256, disk=10),
            uuid='server1',
            flavor_name='flavor1')
        server2 = object_fakes.make_server(
            resources=object_fakes.make_resources(vcpu=1, memory=256, disk=5),
            uuid='server2',
            flavor_name='flavor2')
        server3 = object_fakes.make_server(
            resources=object_fakes.make_resources(vcpu=2, memory=512, disk=10),
            uuid='server3',
            flavor_name='flavor3')
        servers = [server1, server2, server3]

        host = object_fakes.make_resource_provider(
            uuid='1', name='rp1', capabilities=rp_capabilities)
        host.preemptible_servers = servers
        requested = object_fakes.make_resources(vcpu=1, memory=256, disk=5)
        result = self.strategy.find_matching_server_combinations([host],
                                                                 requested,
                                                                 None)
        expected_instances = [server2]
        exepected_leftovers = object_fakes.make_resources()
        self.assertEqual(expected_instances, result.instances)
        self.assertEqual(exepected_leftovers, result.leftovers)
        self.assertEqual(host.uuid, result.provider.uuid)
Exemplo n.º 6
0
    def test_multiple_spots_one_host(self):
        used1 = object_fakes.make_resources(vcpu=8, memory=2048, disk=40)
        total1 = object_fakes.make_resources(vcpu=8, memory=2048, disk=40)
        rp1_capabilities = object_fakes.make_capabilities(used=used1,
                                                          total=total1)

        servers_rp1 = [
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=4, memory=1024, disk=20),
                                     uuid='server1'),
        ]

        rp1 = object_fakes.make_resource_provider(
            uuid='1', name='rp1', capabilities=rp1_capabilities)
        rp1.preemptible_servers = servers_rp1
        rp1.populate = mock.Mock()

        rps = [rp1]

        requested = object_fakes.make_resources(vcpu=2, memory=512, disk=10)
        projects = [mock.Mock()]

        expected = (rps, servers_rp1)
        exp_used = object_fakes.make_resources(vcpu=8, memory=2048, disk=40)

        actual = self.strategy.get_preemptible_servers(requested, rps, 2,
                                                       projects)
        self.assertEqual(expected, actual)
        self.assertEqual(exp_used, rp1.used_resources)
        self.assertEqual(2, rp1.reserved_spots)
        self.assertEqual(0, len(rp1.preemptible_servers))
Exemplo n.º 7
0
    def test_select_servers_not_enough_resources(self):
        used = object_fakes.make_resources(vcpu=8, memory=2056, disk=40)
        total = object_fakes.make_resources(vcpu=8, memory=2056, disk=40)
        rp_capabilities = object_fakes.make_capabilities(used=used,
                                                         total=total)

        servers = [
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=1, memory=256, disk=10),
                                     uuid='server1'),
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=1, memory=256, disk=5),
                                     uuid='server2'),
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=2, memory=512, disk=10),
                                     uuid='server3')
        ]

        host = object_fakes.make_resource_provider(
            uuid='1', name='rp1', capabilities=rp_capabilities)
        host.preemptible_servers = servers
        requested = object_fakes.make_resources(vcpu=6, memory=512, disk=10)

        with mock.patch('random.shuffle') as mocked:
            mocked.side_effect = mocked_random
            self.assertEqual([], self.strategy.select_servers(host, requested))
            self.assertEqual(0, host.reserved_spots)
            self.assertEqual(3, len(host.preemptible_servers))
Exemplo n.º 8
0
    def test_find_matching_server_combinations_not_enough(self):
        used = object_fakes.make_resources(vcpu=7, memory=512, disk=35)
        total = object_fakes.make_resources(vcpu=8, memory=2056, disk=40)
        rp_capabilities = object_fakes.make_capabilities(used=used,
                                                         total=total)

        server1 = object_fakes.make_server(
            resources=object_fakes.make_resources(vcpu=1, memory=256, disk=10),
            uuid='server1')
        server2 = object_fakes.make_server(
            resources=object_fakes.make_resources(vcpu=1, memory=256, disk=5),
            uuid='server2')
        server3 = object_fakes.make_server(
            resources=object_fakes.make_resources(vcpu=2, memory=512, disk=10),
            uuid='server3')
        servers = [server1, server2, server3]

        host = object_fakes.make_resource_provider(
            uuid='1', name='rp1', capabilities=rp_capabilities)
        host.preemptible_servers = servers
        requested = object_fakes.make_resources(vcpu=1, memory=256, disk=35)
        result = self.strategy.find_matching_server_combinations([host],
                                                                 requested,
                                                                 None)
        self.assertIsNone(result)
Exemplo n.º 9
0
    def test_select_servers_not_enough(self):
        # In the watermark mode even if the host preemptible resources
        # are not enough, we will try to free those resources.
        used1 = object_fakes.make_resources(vcpu=8, memory=2056, disk=50)
        total1 = object_fakes.make_resources(vcpu=8, memory=2056, disk=50)
        rp1_capabilities = object_fakes.make_capabilities(used=used1,
                                                          total=total1)

        servers = [
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=1, memory=512, disk=10),
                                     uuid='server1'),
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=1, memory=512, disk=10),
                                     uuid='server2'),
        ]

        host = object_fakes.make_resource_provider(
            uuid='1', name='rp1', capabilities=rp1_capabilities)
        host.preemptible_servers = servers
        requested = object_fakes.make_resources(vcpu=2, memory=512, disk=40)

        with mock.patch('random.shuffle') as mocked:
            mocked.side_effect = mocked_random
            result = self.strategy.select_servers(host, requested)
            self.assertEqual(servers, result)
            self.assertEqual(0, len(host.preemptible_servers))
Exemplo n.º 10
0
    def test_select_servers(self):
        used1 = object_fakes.make_resources(vcpu=4, memory=1024, disk=25)
        total1 = object_fakes.make_resources(vcpu=8, memory=2056, disk=50)
        rp1_capabilities = object_fakes.make_capabilities(used=used1,
                                                          total=total1)

        servers = [
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=1, memory=256, disk=10),
                                     uuid='server1'),
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=1, memory=256, disk=5),
                                     uuid='server2'),
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=2, memory=512, disk=10),
                                     uuid='server3')
        ]

        host = object_fakes.make_resource_provider(
            uuid='1', name='rp1', capabilities=rp1_capabilities)
        host.preemptible_servers = servers

        requested = object_fakes.make_resources(vcpu=2, memory=512, disk=10)

        with mock.patch('random.shuffle') as mocked:
            mocked.side_effect = mocked_random
            self.assertEqual([servers[0], servers[1]],
                             self.strategy.select_servers(host, requested))
            self.assertEqual(1, len(host.preemptible_servers))
            self.assertEqual('server3', host.preemptible_servers[0].uuid)
            self.assertEqual(1, host.reserved_spots)
Exemplo n.º 11
0
    def test_find_matching_server_combinations_multiple_hosts(self):
        used1 = object_fakes.make_resources(vcpu=7, memory=1800, disk=35)
        total1 = object_fakes.make_resources(vcpu=8, memory=2056, disk=40)
        rp1_capabilities = object_fakes.make_capabilities(used=used1,
                                                          total=total1)

        servers1 = [
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=1, memory=256, disk=5),
                                     uuid='server1'),
        ]

        host1 = object_fakes.make_resource_provider(
            uuid='1', name='rp1', capabilities=rp1_capabilities)
        host1.preemptible_servers = servers1

        used2 = object_fakes.make_resources(vcpu=7, memory=1500, disk=35)
        total2 = object_fakes.make_resources(vcpu=8, memory=2056, disk=40)
        rp2_capabilities = object_fakes.make_capabilities(used=used2,
                                                          total=total2)

        servers2 = [
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=1, memory=256, disk=5),
                                     uuid='server2'),
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=2, memory=512, disk=10),
                                     uuid='server3')
        ]

        host2 = object_fakes.make_resource_provider(
            uuid='2', name='rp2', capabilities=rp2_capabilities)

        host2.preemptible_servers = servers2
        requested = object_fakes.make_resources(vcpu=2, memory=512, disk=10)
        result = self.strategy.find_matching_server_combinations(
            [host1, host2], requested, None)
        expected_instances = servers1
        exepected_leftovers = object_fakes.make_resources()
        self.assertEqual(expected_instances, result.instances)
        self.assertEqual(exepected_leftovers, result.leftovers)
        self.assertEqual(host1.uuid, result.provider.uuid)
Exemplo n.º 12
0
    def test_get_preemptible_servers(self, spots, select):
        used1 = object_fakes.make_resources(vcpu=4, memory=1024, disk=20)
        total1 = object_fakes.make_resources(vcpu=8, memory=2056, disk=40)
        rp1_capabilities = object_fakes.make_capabilities(used=used1,
                                                          total=total1)

        used2 = object_fakes.make_resources(vcpu=4, memory=1024, disk=20)
        total2 = object_fakes.make_resources(vcpu=8, memory=2056, disk=40)
        rp2_capabilities = object_fakes.make_capabilities(used=used2,
                                                          total=total2)

        servers_rp1 = [
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=1, memory=256, disk=10),
                                     uuid='server1'),
            object_fakes.make_server(resources=object_fakes.make_resources(
                vcpu=1, memory=256, disk=10),
                                     uuid='server2'),
        ]

        rp1 = object_fakes.make_resource_provider(
            uuid='1', name='rp1', capabilities=rp1_capabilities)
        rp1.preemptible_servers = servers_rp1
        rp2 = object_fakes.make_resource_provider(
            uuid='2', name='rp2', capabilities=rp2_capabilities)

        requested = object_fakes.make_resources(disk=10)
        hosts = [rp1, rp2]

        projects = [mock.Mock()]
        select.return_value = [servers_rp1[0]]
        with mock.patch('random.choice') as mocked:
            mocked.return_value = hosts[0]

            expected = ([hosts[0]], [servers_rp1[0]])
            result = self.strategy.get_preemptible_servers(
                requested, hosts, 1, projects)

            self.assertEqual(expected, result)
        spots.assert_not_called()
Exemplo n.º 13
0
 def test_get_preemptible_servers_enough_free_multiple_spots(self):
     used = object_fakes.make_resources(vcpu=4, memory=1000, disk=20)
     total = object_fakes.make_resources(vcpu=8, memory=2056, disk=40)
     rp_capabilities = object_fakes.make_capabilities(used=used,
                                                      total=total)
     host = object_fakes.make_resource_provider(
         uuid='1', name='rp1', capabilities=rp_capabilities)
     fake_projects = [mock.Mock()]
     requested = object_fakes.make_resources(vcpu=2, memory=512, disk=10)
     sel_hosts, sel_servers = self.strategy.get_preemptible_servers(
         requested, [host], 2, fake_projects)
     self.assertEqual([host], sel_hosts)
     self.assertEqual([], sel_servers)
Exemplo n.º 14
0
 def test_get_preemptible_servers_multiple_hosts(self, mocked_find):
     used = object_fakes.make_resources(vcpu=7, memory=1800, disk=35)
     total = object_fakes.make_resources(vcpu=8, memory=2056, disk=40)
     rp_capabilities = object_fakes.make_capabilities(used=used,
                                                      total=total)
     host1 = object_fakes.make_resource_provider(
         uuid='1', name='rp1', capabilities=rp_capabilities)
     host2 = object_fakes.make_resource_provider(
         uuid='2', name='rp2', capabilities=rp_capabilities)
     server1 = object_fakes.make_server(
         resources=object_fakes.make_resources(vcpu=1, memory=256, disk=10),
         uuid='server1')
     server2 = object_fakes.make_server(
         resources=object_fakes.make_resources(vcpu=1, memory=256, disk=10),
         uuid='server2')
     server3 = object_fakes.make_server(
         resources=object_fakes.make_resources(vcpu=1, memory=256, disk=10),
         uuid='server3')
     combo1 = utils.Combination(provider=host1,
                                instances=[server1],
                                leftovers=object_fakes.make_resources(
                                    vcpu=2, memory=256, disk=10))
     combo2 = utils.Combination(provider=host2,
                                instances=[server2, server3],
                                leftovers=object_fakes.make_resources(
                                    vcpu=2, memory=256, disk=10))
     mocked_find.side_effect = [combo1, combo2, None]
     fake_hosts = [mock.Mock()]
     fake_projects = [mock.Mock()]
     requested = object_fakes.make_resources(vcpu=2, memory=512, disk=10)
     # Make sure that in watermark mode even if we don't have enough
     # resources, no exception is raised.
     sel_hosts, sel_servers = self.strategy.get_preemptible_servers(
         requested, fake_hosts, 2, fake_projects)
     self.assertEqual([host1, host2], sel_hosts)
     self.assertEqual([server1, server2, server3], sel_servers)
Exemplo n.º 15
0
    def test_find_matching_server_combinations_not_enough_multiple_hosts(self):
        used1 = object_fakes.make_resources(vcpu=7, memory=256, disk=35)
        total1 = object_fakes.make_resources(vcpu=8, memory=2056, disk=40)
        rp1_capabilities = object_fakes.make_capabilities(used=used1,
                                                          total=total1)

        server1 = object_fakes.make_server(
            resources=object_fakes.make_resources(vcpu=1, memory=256, disk=10),
            uuid='server1')
        servers1 = [server1]

        host1 = object_fakes.make_resource_provider(
            uuid='1', name='rp1', capabilities=rp1_capabilities)
        host1.preemptible_servers = servers1

        used2 = object_fakes.make_resources(vcpu=7, memory=512, disk=35)
        total2 = object_fakes.make_resources(vcpu=8, memory=2056, disk=40)
        rp2_capabilities = object_fakes.make_capabilities(used=used2,
                                                          total=total2)

        server2 = object_fakes.make_server(
            resources=object_fakes.make_resources(vcpu=1, memory=256, disk=5),
            uuid='server2')
        server3 = object_fakes.make_server(
            resources=object_fakes.make_resources(vcpu=2, memory=512, disk=10),
            uuid='server3')
        servers2 = [server2, server3]

        host2 = object_fakes.make_resource_provider(
            uuid='2', name='rp2', capabilities=rp2_capabilities)

        host2.preemptible_servers = servers2
        requested = object_fakes.make_resources(vcpu=1, memory=256, disk=35)
        result = self.strategy.find_matching_server_combinations(
            [host1, host2], requested, None)
        self.assertIsNone(result)
Exemplo n.º 16
0
    def test_select_servers_enough_free(self):
        used1 = object_fakes.make_resources(vcpu=4, memory=1024, disk=25)
        total1 = object_fakes.make_resources(vcpu=8, memory=2056, disk=50)
        rp1_capabilities = object_fakes.make_capabilities(used=used1,
                                                          total=total1)

        host = object_fakes.make_resource_provider(
            uuid='1', name='rp1', capabilities=rp1_capabilities)

        requested = object_fakes.make_resources(vcpu=2, memory=512, disk=10)

        self.assertEqual([], self.strategy.select_servers(host, requested))
        res = object_fakes.make_resources(vcpu=4, memory=1024, disk=25)
        expected_used = res + requested
        self.assertEqual(expected_used, host.used_resources)
        self.assertEqual(1, host.reserved_spots)
Exemplo n.º 17
0
    def test_get_preemptible_servers(self, mocked_find):
        used = object_fakes.make_resources(vcpu=7, memory=1800, disk=35)
        total = object_fakes.make_resources(vcpu=8, memory=2056, disk=40)
        rp_capabilities = object_fakes.make_capabilities(used=used,
                                                         total=total)
        host = object_fakes.make_resource_provider(
            uuid='1', name='rp1', capabilities=rp_capabilities)
        server = object_fakes.make_server(
            resources=object_fakes.make_resources(vcpu=1, memory=256, disk=10),
            uuid='server1')
        combo = utils.Combination(provider=host,
                                  instances=[server],
                                  leftovers=object_fakes.make_resources(
                                      vcpu=2, memory=256, disk=10))
        mocked_find.return_value = combo
        fake_hosts = [mock.Mock()]
        fake_projects = [mock.Mock()]
        requested = object_fakes.make_resources(vcpu=2, memory=512, disk=10)

        sel_hosts, sel_servers = self.strategy.get_preemptible_servers(
            requested, fake_hosts, 1, fake_projects)
        self.assertEqual([host], sel_hosts)
        self.assertEqual([server], sel_servers)