Exemplo n.º 1
0
    def test_discover_hosts(self):
        status = lambda m: None

        ctxt = context.get_admin_context()

        # NOTE(danms): Three cells, one unmapped host per cell
        mappings = host_mapping.discover_hosts(ctxt, status_fn=status)
        self.assertEqual(3, len(mappings))

        # NOTE(danms): All hosts should be mapped now, so we should do
        # no lookups for them
        with mock.patch('nova.objects.HostMapping.get_by_host') as mock_gbh:
            mappings = host_mapping.discover_hosts(ctxt, status_fn=status)
            self.assertFalse(mock_gbh.called)
        self.assertEqual(0, len(mappings))
Exemplo n.º 2
0
    def test_discover_services_one_cell(self, mock_srv, mock_hm_create,
                                        mock_hm_get, mock_cm):
        mock_cm.return_value = objects.CellMapping(uuid=uuids.cell1)
        mock_srv.return_value = [
            objects.Service(host='host1'),
            objects.Service(host='host2'),
        ]

        def fake_get_host_mapping(ctxt, host):
            if host == 'host2':
                return
            else:
                raise exception.HostMappingNotFound(name=host)

        mock_hm_get.side_effect = fake_get_host_mapping

        lines = []

        def fake_status(msg):
            lines.append(msg)

        ctxt = context.get_admin_context()
        mappings = host_mapping.discover_hosts(ctxt, cell_uuid=uuids.cell1,
                                               status_fn=fake_status,
                                               by_service=True)
        self.assertEqual(1, len(mappings))
        self.assertEqual(['host1'],
                         sorted([m.host for m in mappings]))

        expected = """\
Getting computes from cell: %(cell)s
Creating host mapping for service host1
Found 1 unmapped computes in cell: %(cell)s""" % {'cell': uuids.cell1}

        self.assertEqual(expected, '\n'.join(lines))
Exemplo n.º 3
0
    def test_discover_services(self, mock_srv, mock_hm_create,
                               mock_hm_get, mock_cm):
        mock_cm.return_value = [
            objects.CellMapping(uuid=uuids.cell1),
            objects.CellMapping(uuid=uuids.cell2),
        ]
        mock_srv.side_effect = [
            [objects.Service(host='host1'),
             objects.Service(host='host2')],
            [objects.Service(host='host3')],
        ]

        def fake_get_host_mapping(ctxt, host):
            if host == 'host2':
                return
            else:
                raise exception.HostMappingNotFound(name=host)

        mock_hm_get.side_effect = fake_get_host_mapping

        ctxt = context.get_admin_context()
        mappings = host_mapping.discover_hosts(ctxt, by_service=True)
        self.assertEqual(2, len(mappings))
        self.assertEqual(['host1', 'host3'],
                         sorted([m.host for m in mappings]))
Exemplo n.º 4
0
    def test_discover_hosts_one(self, mock_cn_get, mock_hm_get, mock_hm_create,
                                mock_cm):
        def _hm_get(context, host):
            if host in ['a', 'b', 'c']:
                return objects.HostMapping()
            raise exception.HostMappingNotFound(name=host)

        mock_hm_get.side_effect = _hm_get
        # NOTE(danms): Provide both side effects, but expect it to only
        # be called once if we provide a cell
        mock_cn_get.side_effect = [[objects.ComputeNode(host='d',
                                                        uuid=uuids.cn1)],
                                   [objects.ComputeNode(host='e',
                                                        uuid=uuids.cn2)]]

        mock_cm.return_value = objects.CellMapping(name='foo',
                                                   uuid=uuids.cm1)
        ctxt = context.get_admin_context()
        with mock.patch('nova.objects.ComputeNode.save') as mock_save:
            hms = host_mapping.discover_hosts(ctxt, uuids.cm1)
            mock_save.assert_called_once_with()
        self.assertEqual(1, len(hms))
        self.assertTrue(mock_hm_create.called)
        self.assertEqual(['d'],
                         [hm.host for hm in hms])
Exemplo n.º 5
0
    def test_discover_hosts_all(self, mock_cn_get, mock_hm_get, mock_hm_create,
                                mock_cm):
        def _hm_get(context, host):
            if host in ['a', 'b', 'c']:
                return objects.HostMapping()
            raise exception.HostMappingNotFound(name=host)

        mock_hm_get.side_effect = _hm_get
        mock_cn_get.side_effect = [[objects.ComputeNode(host='d',
                                                        uuid=uuids.cn1)],
                                   [objects.ComputeNode(host='e',
                                                        uuid=uuids.cn2)]]

        cell_mappings = [objects.CellMapping(name='foo',
                                             uuid=uuids.cm1),
                         objects.CellMapping(name='bar',
                                             uuid=uuids.cm2)]
        mock_cm.return_value = cell_mappings
        ctxt = context.get_admin_context()
        with mock.patch('nova.objects.ComputeNode.save') as mock_save:
            hms = host_mapping.discover_hosts(ctxt)
            mock_save.assert_has_calls([mock.call(), mock.call()])
        self.assertEqual(2, len(hms))
        self.assertTrue(mock_hm_create.called)
        self.assertEqual(['d', 'e'],
                         [hm.host for hm in hms])
Exemplo n.º 6
0
    def test_discover_services_one_cell(self, mock_srv, mock_hm_create,
                                        mock_hm_get, mock_cm):
        mock_cm.return_value = objects.CellMapping(uuid=uuids.cell1)
        mock_srv.return_value = [
            objects.Service(host='host1'),
            objects.Service(host='host2'),
        ]

        def fake_get_host_mapping(ctxt, host):
            if host == 'host2':
                return
            else:
                raise exception.HostMappingNotFound(name=host)

        mock_hm_get.side_effect = fake_get_host_mapping

        lines = []

        def fake_status(msg):
            lines.append(msg)

        ctxt = context.get_admin_context()
        mappings = host_mapping.discover_hosts(ctxt, cell_uuid=uuids.cell1,
                                               status_fn=fake_status,
                                               by_service=True)
        self.assertEqual(1, len(mappings))
        self.assertEqual(['host1'],
                         sorted([m.host for m in mappings]))

        expected = """\
Getting computes from cell: %(cell)s
Creating host mapping for service host1
Found 1 unmapped computes in cell: %(cell)s""" % {'cell': uuids.cell1}

        self.assertEqual(expected, '\n'.join(lines))
Exemplo n.º 7
0
    def test_discover_services(self, mock_srv, mock_hm_create,
                               mock_hm_get, mock_cm):
        mock_cm.return_value = [
            objects.CellMapping(uuid=uuids.cell1),
            objects.CellMapping(uuid=uuids.cell2),
        ]
        mock_srv.side_effect = [
            [objects.Service(host='host1'),
             objects.Service(host='host2')],
            [objects.Service(host='host3')],
        ]

        def fake_get_host_mapping(ctxt, host):
            if host == 'host2':
                return
            else:
                raise exception.HostMappingNotFound(name=host)

        mock_hm_get.side_effect = fake_get_host_mapping

        ctxt = context.get_admin_context()
        mappings = host_mapping.discover_hosts(ctxt, by_service=True)
        self.assertEqual(2, len(mappings))
        self.assertEqual(['host1', 'host3'],
                         sorted([m.host for m in mappings]))
Exemplo n.º 8
0
    def test_discover_hosts_one(self, mock_cn_get, mock_hm_get, mock_hm_create,
                                mock_cm):
        def _hm_get(context, host):
            if host in ['a', 'b', 'c']:
                return objects.HostMapping()
            raise exception.HostMappingNotFound(name=host)

        mock_hm_get.side_effect = _hm_get
        # NOTE(danms): Provide both side effects, but expect it to only
        # be called once if we provide a cell
        mock_cn_get.side_effect = [[objects.ComputeNode(host='d',
                                                        uuid=uuids.cn1)],
                                   [objects.ComputeNode(host='e',
                                                        uuid=uuids.cn2)]]

        mock_cm.return_value = objects.CellMapping(name='foo',
                                                   uuid=uuids.cm1)
        ctxt = context.get_admin_context()
        with mock.patch('nova.objects.ComputeNode.save') as mock_save:
            hms = host_mapping.discover_hosts(ctxt, uuids.cm1)
            mock_save.assert_called_once_with()
        self.assertEqual(1, len(hms))
        self.assertTrue(mock_hm_create.called)
        self.assertEqual(['d'],
                         [hm.host for hm in hms])
Exemplo n.º 9
0
    def test_discover_hosts_all(self, mock_cn_get, mock_hm_get, mock_hm_create,
                                mock_cm):
        def _hm_get(context, host):
            if host in ['a', 'b', 'c']:
                return objects.HostMapping()
            raise exception.HostMappingNotFound(name=host)

        mock_hm_get.side_effect = _hm_get
        mock_cn_get.side_effect = [[objects.ComputeNode(host='d',
                                                        uuid=uuids.cn1)],
                                   [objects.ComputeNode(host='e',
                                                        uuid=uuids.cn2)]]

        cell_mappings = [objects.CellMapping(name='foo',
                                             uuid=uuids.cm1),
                         objects.CellMapping(name='bar',
                                             uuid=uuids.cm2)]
        mock_cm.return_value = cell_mappings
        ctxt = context.get_admin_context()
        with mock.patch('nova.objects.ComputeNode.save') as mock_save:
            hms = host_mapping.discover_hosts(ctxt)
            mock_save.assert_has_calls([mock.call(), mock.call()])
        self.assertEqual(2, len(hms))
        self.assertTrue(mock_hm_create.called)
        self.assertEqual(['d', 'e'],
                         [hm.host for hm in hms])
Exemplo n.º 10
0
 def _discover_hosts_in_cells(self, context):
     global HOST_MAPPING_EXISTS_WARNING
     try:
         host_mappings = host_mapping_obj.discover_hosts(context)
         if host_mappings:
             LOG.info(
                 'Discovered %(count)i new hosts: %(hosts)s',
                 {
                     'count':
                     len(host_mappings),
                     'hosts':
                     ','.join([
                         '%s:%s' % (hm.cell_mapping.name, hm.host)
                         for hm in host_mappings
                     ]),
                 },
             )
     except exception.HostMappingExists as exp:
         msg = ('This periodic task should only be enabled on a single '
                'scheduler to prevent collisions between multiple '
                'schedulers: %s' % str(exp))
         if not HOST_MAPPING_EXISTS_WARNING:
             LOG.warning(msg)
             HOST_MAPPING_EXISTS_WARNING = True
         else:
             LOG.debug(msg)
Exemplo n.º 11
0
 def _discover_hosts_in_cells(self, context):
     host_mappings = host_mapping_obj.discover_hosts(context)
     if host_mappings:
         LOG.info('Discovered %(count)i new hosts: %(hosts)s',
                  {'count': len(host_mappings),
                   'hosts': ','.join(['%s:%s' % (hm.cell_mapping.name,
                                                 hm.host)
                                      for hm in host_mappings])})
Exemplo n.º 12
0
 def _discover_hosts_in_cells(self, context):
     host_mappings = host_mapping_obj.discover_hosts(context)
     if host_mappings:
         LOG.info('Discovered %(count)i new hosts: %(hosts)s',
                  {'count': len(host_mappings),
                   'hosts': ','.join(['%s:%s' % (hm.cell_mapping.name,
                                                 hm.host)
                                      for hm in host_mappings])})
Exemplo n.º 13
0
    def test_discover_hosts_one_cell(self):
        status = lambda m: None

        ctxt = context.get_admin_context()
        cells = objects.CellMappingList.get_all(ctxt)

        # NOTE(danms): One cell, one unmapped host per cell
        mappings = host_mapping.discover_hosts(ctxt, cells[1].uuid,
                                               status_fn=status)
        self.assertEqual(1, len(mappings))

        # NOTE(danms): Three cells, two with one more unmapped host
        mappings = host_mapping.discover_hosts(ctxt, status_fn=status)
        self.assertEqual(2, len(mappings))

        # NOTE(danms): All hosts should be mapped now, so we should do
        # no lookups for them
        with mock.patch('nova.objects.HostMapping.get_by_host') as mock_gbh:
            mappings = host_mapping.discover_hosts(ctxt, status_fn=status)
            self.assertFalse(mock_gbh.called)
        self.assertEqual(0, len(mappings))
Exemplo n.º 14
0
    def test_discover_hosts_one_cell(self):
        status = lambda m: None

        ctxt = context.get_admin_context()
        cells = objects.CellMappingList.get_all(ctxt)

        # NOTE(danms): One cell, one unmapped host per cell
        mappings = host_mapping.discover_hosts(ctxt,
                                               cells[1].uuid,
                                               status_fn=status)
        self.assertEqual(1, len(mappings))

        # NOTE(danms): Three cells, two with one more unmapped host
        mappings = host_mapping.discover_hosts(ctxt, status_fn=status)
        self.assertEqual(2, len(mappings))

        # NOTE(danms): All hosts should be mapped now, so we should do
        # no lookups for them
        with mock.patch('nova.objects.HostMapping.get_by_host') as mock_gbh:
            mappings = host_mapping.discover_hosts(ctxt, status_fn=status)
            self.assertFalse(mock_gbh.called)
        self.assertEqual(0, len(mappings))