Skip to content

Commit 6abd6ea

Browse files
committed
Remove old-style cell v1 instance listing
There were a couple of tests validating this behavior. They are all stubbed out. Part of blueprint remove-cells-v1 Change-Id: Ie0223dfe37f60d0feee6eff06a02c67e330f9237 Signed-off-by: Stephen Finucane <[email protected]>
1 parent 6ac1573 commit 6abd6ea

File tree

2 files changed

+15
-282
lines changed

2 files changed

+15
-282
lines changed

nova/compute/api.py

Lines changed: 3 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -2744,14 +2744,9 @@ def _remap_fixed_ip_filter(fixed_ip):
27442744
if expected_attrs:
27452745
fields.extend(expected_attrs)
27462746

2747-
if CONF.cells.enable:
2748-
insts = self._do_old_style_instance_list_for_poor_cellsv1_users(
2749-
context, filters, limit, marker, fields, sort_keys,
2750-
sort_dirs)
2751-
else:
2752-
insts, down_cell_uuids = instance_list.get_instance_objects_sorted(
2753-
context, filters, limit, marker, fields, sort_keys, sort_dirs,
2754-
cell_down_support=cell_down_support)
2747+
insts, down_cell_uuids = instance_list.get_instance_objects_sorted(
2748+
context, filters, limit, marker, fields, sort_keys, sort_dirs,
2749+
cell_down_support=cell_down_support)
27552750

27562751
def _get_unique_filter_method():
27572752
seen_uuids = set()
@@ -2793,51 +2788,6 @@ def _filter(instance):
27932788

27942789
return instances
27952790

2796-
def _do_old_style_instance_list_for_poor_cellsv1_users(self,
2797-
context, filters,
2798-
limit, marker,
2799-
fields,
2800-
sort_keys,
2801-
sort_dirs):
2802-
try:
2803-
cell0_mapping = objects.CellMapping.get_by_uuid(context,
2804-
objects.CellMapping.CELL0_UUID)
2805-
except exception.CellMappingNotFound:
2806-
cell0_instances = objects.InstanceList(objects=[])
2807-
else:
2808-
with nova_context.target_cell(context, cell0_mapping) as cctxt:
2809-
try:
2810-
cell0_instances = self._get_instances_by_filters(
2811-
cctxt, filters, limit=limit, marker=marker,
2812-
fields=fields, sort_keys=sort_keys,
2813-
sort_dirs=sort_dirs)
2814-
# If we found the marker in cell0 we need to set it to None
2815-
# so we don't expect to find it in the cells below.
2816-
marker = None
2817-
except exception.MarkerNotFound:
2818-
# We can ignore this since we need to look in the cell DB
2819-
cell0_instances = objects.InstanceList(objects=[])
2820-
# Only subtract from limit if it is not None
2821-
limit = (limit - len(cell0_instances)) if limit else limit
2822-
2823-
# There is only planned support for a single cell here. Multiple cell
2824-
# instance lists should be proxied to project Searchlight, or a similar
2825-
# alternative.
2826-
if limit is None or limit > 0:
2827-
# NOTE(melwitt): If we're on cells v1, we need to read
2828-
# instances from the top-level database because reading from
2829-
# cells results in changed behavior, because of the syncing.
2830-
# We can remove this path once we stop supporting cells v1.
2831-
cell_instances = self._get_instances_by_filters(
2832-
context, filters, limit=limit, marker=marker,
2833-
fields=fields, sort_keys=sort_keys,
2834-
sort_dirs=sort_dirs)
2835-
else:
2836-
LOG.debug('Limit excludes any results from real cells')
2837-
cell_instances = objects.InstanceList(objects=[])
2838-
2839-
return cell0_instances + cell_instances
2840-
28412791
@staticmethod
28422792
def _ip_filter(inst_models, filters, limit):
28432793
ipv4_f = re.compile(str(filters.get('ip')))

nova/tests/unit/compute/test_compute_api.py

Lines changed: 12 additions & 229 deletions
Original file line numberDiff line numberDiff line change
@@ -6854,240 +6854,23 @@ def test_placement_client_init(self, mock_report_client):
68546854

68556855

68566856
class Cellsv1DeprecatedTestMixIn(object):
6857-
@mock.patch.object(objects.BuildRequestList, 'get_by_filters')
6858-
@mock.patch.object(objects.CellMapping, 'get_by_uuid',
6859-
side_effect=exception.CellMappingNotFound(uuid='fake'))
6860-
def test_get_all_includes_build_requests(self, mock_cell_mapping_get,
6861-
mock_buildreq_get):
6862-
6863-
build_req_instances = self._list_of_instances(2)
6864-
build_reqs = [objects.BuildRequest(self.context, instance=instance)
6865-
for instance in build_req_instances]
6866-
mock_buildreq_get.return_value = objects.BuildRequestList(self.context,
6867-
objects=build_reqs)
6868-
6869-
cell_instances = self._list_of_instances(2)
6870-
6871-
with mock.patch.object(self.compute_api,
6872-
'_get_instances_by_filters') as mock_inst_get:
6873-
mock_inst_get.return_value = objects.InstanceList(
6874-
self.context, objects=cell_instances)
6875-
6876-
instances = self.compute_api.get_all(
6877-
self.context, search_opts={'foo': 'bar'},
6878-
limit=None, marker='fake-marker', sort_keys=['baz'],
6879-
sort_dirs=['desc'])
6880-
6881-
mock_buildreq_get.assert_called_once_with(
6882-
self.context, {'foo': 'bar'}, limit=None, marker='fake-marker',
6883-
sort_keys=['baz'], sort_dirs=['desc'])
6884-
fields = ['metadata', 'info_cache', 'security_groups']
6885-
mock_inst_get.assert_called_once_with(
6886-
self.context, {'foo': 'bar'}, limit=None, marker=None,
6887-
fields=fields, sort_keys=['baz'], sort_dirs=['desc'])
6888-
for i, instance in enumerate(build_req_instances + cell_instances):
6889-
self.assertEqual(instance, instances[i])
6890-
6891-
@mock.patch.object(objects.BuildRequestList, 'get_by_filters')
6892-
@mock.patch.object(objects.CellMapping, 'get_by_uuid',
6893-
side_effect=exception.CellMappingNotFound(uuid='fake'))
6894-
def test_get_all_includes_build_requests_filter_dupes(self,
6895-
mock_cell_mapping_get, mock_buildreq_get):
6896-
6897-
build_req_instances = self._list_of_instances(2)
6898-
build_reqs = [objects.BuildRequest(self.context, instance=instance)
6899-
for instance in build_req_instances]
6900-
mock_buildreq_get.return_value = objects.BuildRequestList(self.context,
6901-
objects=build_reqs)
6857+
def test_get_all_build_requests_decrement_limit(self):
6858+
self.skipTest("Removing cells v1")
69026859

6903-
cell_instances = self._list_of_instances(2)
6860+
def test_get_all_cell0_marker_not_found(self):
6861+
self.skipTest("Removing cells v1")
69046862

6905-
with mock.patch.object(self.compute_api,
6906-
'_get_instances_by_filters') as mock_inst_get:
6907-
# Insert one of the build_req_instances here so it shows up twice
6908-
mock_inst_get.return_value = objects.InstanceList(
6909-
self.context, objects=build_req_instances[:1] + cell_instances)
6863+
def test_get_all_includes_build_request_cell0(self):
6864+
self.skipTest("Removing cells v1")
69106865

6911-
instances = self.compute_api.get_all(
6912-
self.context, search_opts={'foo': 'bar'},
6913-
limit=None, marker='fake-marker', sort_keys=['baz'],
6914-
sort_dirs=['desc'])
6866+
def test_get_all_includes_build_requests(self):
6867+
self.skipTest("Removing cells v1")
69156868

6916-
mock_buildreq_get.assert_called_once_with(
6917-
self.context, {'foo': 'bar'}, limit=None, marker='fake-marker',
6918-
sort_keys=['baz'], sort_dirs=['desc'])
6919-
fields = ['metadata', 'info_cache', 'security_groups']
6920-
mock_inst_get.assert_called_once_with(
6921-
self.context, {'foo': 'bar'}, limit=None, marker=None,
6922-
fields=fields, sort_keys=['baz'], sort_dirs=['desc'])
6923-
for i, instance in enumerate(build_req_instances + cell_instances):
6924-
self.assertEqual(instance, instances[i])
6869+
def test_get_all_includes_build_requests_filter_dupes(self):
6870+
self.skipTest("Removing cells v1")
69256871

6926-
@mock.patch.object(objects.BuildRequestList, 'get_by_filters')
6927-
@mock.patch.object(objects.CellMapping, 'get_by_uuid',
6928-
side_effect=exception.CellMappingNotFound(uuid='fake'))
6929-
def test_get_all_build_requests_decrement_limit(self,
6930-
mock_cell_mapping_get,
6931-
mock_buildreq_get):
6932-
6933-
build_req_instances = self._list_of_instances(2)
6934-
build_reqs = [objects.BuildRequest(self.context, instance=instance)
6935-
for instance in build_req_instances]
6936-
mock_buildreq_get.return_value = objects.BuildRequestList(self.context,
6937-
objects=build_reqs)
6938-
6939-
cell_instances = self._list_of_instances(2)
6940-
6941-
with mock.patch.object(self.compute_api,
6942-
'_get_instances_by_filters') as mock_inst_get:
6943-
mock_inst_get.return_value = objects.InstanceList(
6944-
self.context, objects=cell_instances)
6945-
6946-
instances = self.compute_api.get_all(
6947-
self.context, search_opts={'foo': 'bar'},
6948-
limit=10, marker='fake-marker', sort_keys=['baz'],
6949-
sort_dirs=['desc'])
6950-
6951-
mock_buildreq_get.assert_called_once_with(
6952-
self.context, {'foo': 'bar'}, limit=10, marker='fake-marker',
6953-
sort_keys=['baz'], sort_dirs=['desc'])
6954-
fields = ['metadata', 'info_cache', 'security_groups']
6955-
mock_inst_get.assert_called_once_with(
6956-
self.context, {'foo': 'bar'}, limit=8, marker=None,
6957-
fields=fields, sort_keys=['baz'], sort_dirs=['desc'])
6958-
for i, instance in enumerate(build_req_instances + cell_instances):
6959-
self.assertEqual(instance, instances[i])
6960-
6961-
@mock.patch.object(context, 'target_cell')
6962-
@mock.patch.object(objects.BuildRequestList, 'get_by_filters')
6963-
@mock.patch.object(objects.CellMapping, 'get_by_uuid')
6964-
@mock.patch.object(objects.CellMappingList, 'get_all')
6965-
def test_get_all_includes_build_request_cell0(self, mock_cm_get_all,
6966-
mock_cell_mapping_get,
6967-
mock_buildreq_get, mock_target_cell):
6968-
6969-
build_req_instances = self._list_of_instances(2)
6970-
build_reqs = [objects.BuildRequest(self.context, instance=instance)
6971-
for instance in build_req_instances]
6972-
mock_buildreq_get.return_value = objects.BuildRequestList(self.context,
6973-
objects=build_reqs)
6974-
6975-
cell0_instances = self._list_of_instances(2)
6976-
cell_instances = self._list_of_instances(2)
6977-
6978-
cell_mapping = objects.CellMapping(uuid=objects.CellMapping.CELL0_UUID,
6979-
name='0')
6980-
mock_cell_mapping_get.return_value = cell_mapping
6981-
mock_cm_get_all.return_value = [
6982-
cell_mapping,
6983-
objects.CellMapping(uuid=uuids.cell1, name='1'),
6984-
]
6985-
cctxt = mock_target_cell.return_value.__enter__.return_value
6986-
6987-
with mock.patch.object(self.compute_api,
6988-
'_get_instances_by_filters') as mock_inst_get:
6989-
mock_inst_get.side_effect = [objects.InstanceList(
6990-
self.context,
6991-
objects=cell0_instances),
6992-
objects.InstanceList(
6993-
self.context,
6994-
objects=cell_instances)]
6995-
6996-
instances = self.compute_api.get_all(
6997-
self.context, search_opts={'foo': 'bar'},
6998-
limit=10, marker='fake-marker', sort_keys=['baz'],
6999-
sort_dirs=['desc'])
7000-
7001-
if self.cell_type is None:
7002-
for cm in mock_cm_get_all.return_value:
7003-
mock_target_cell.assert_any_call(self.context, cm)
7004-
fields = ['metadata', 'info_cache', 'security_groups']
7005-
inst_get_calls = [mock.call(cctxt, {'foo': 'bar'},
7006-
limit=8, marker=None,
7007-
fields=fields, sort_keys=['baz'],
7008-
sort_dirs=['desc']),
7009-
mock.call(mock.ANY, {'foo': 'bar'},
7010-
limit=6, marker=None,
7011-
fields=fields, sort_keys=['baz'],
7012-
sort_dirs=['desc'])
7013-
]
7014-
self.assertEqual(2, mock_inst_get.call_count)
7015-
mock_inst_get.assert_has_calls(inst_get_calls)
7016-
for i, instance in enumerate(build_req_instances +
7017-
cell0_instances +
7018-
cell_instances):
7019-
self.assertEqual(instance, instances[i])
7020-
7021-
@mock.patch.object(objects.BuildRequestList, 'get_by_filters')
7022-
@mock.patch.object(compute_api.API, '_get_instances_by_filters')
7023-
@mock.patch.object(objects.CellMapping, 'get_by_uuid')
7024-
def test_tenant_to_project_conversion(self, mock_cell_map_get, mock_get,
7025-
mock_buildreq_get):
7026-
mock_cell_map_get.side_effect = exception.CellMappingNotFound(
7027-
uuid='fake')
7028-
mock_get.return_value = objects.InstanceList(objects=[])
7029-
api = compute_api.API()
7030-
api.get_all(self.context, search_opts={'tenant_id': 'foo'})
7031-
filters = mock_get.call_args_list[0][0][1]
7032-
self.assertEqual({'project_id': 'foo'}, filters)
7033-
7034-
@mock.patch.object(context, 'target_cell')
7035-
@mock.patch.object(objects.BuildRequestList, 'get_by_filters',
7036-
side_effect=exception.MarkerNotFound(
7037-
marker=uuids.marker))
7038-
@mock.patch.object(objects.CellMapping, 'get_by_uuid')
7039-
@mock.patch.object(objects.CellMappingList, 'get_all')
7040-
def test_get_all_cell0_marker_not_found(self, mock_cm_get_all,
7041-
mock_cell_mapping_get,
7042-
mock_buildreq_get,
7043-
mock_target_cell):
7044-
"""Tests that we handle a MarkerNotFound raised from the cell0 database
7045-
and continue looking for instances from the normal cell database.
7046-
"""
7047-
7048-
cell_instances = self._list_of_instances(2)
7049-
7050-
cell_mapping = objects.CellMapping(uuid=objects.CellMapping.CELL0_UUID,
7051-
name='0')
7052-
mock_cell_mapping_get.return_value = cell_mapping
7053-
mock_cm_get_all.return_value = [
7054-
cell_mapping,
7055-
objects.CellMapping(uuid=uuids.cell1, name='1'),
7056-
]
7057-
marker = uuids.marker
7058-
cctxt = mock_target_cell.return_value.__enter__.return_value
7059-
7060-
with mock.patch.object(self.compute_api,
7061-
'_get_instances_by_filters') as mock_inst_get:
7062-
# simulate calling _get_instances_by_filters twice, once for cell0
7063-
# which raises a MarkerNotFound and once from the cell DB which
7064-
# returns two instances
7065-
mock_inst_get.side_effect = [
7066-
exception.MarkerNotFound(marker=marker),
7067-
objects.InstanceList(self.context, objects=cell_instances)]
7068-
7069-
instances = self.compute_api.get_all(
7070-
self.context, search_opts={'foo': 'bar'},
7071-
limit=10, marker=marker, sort_keys=['baz'],
7072-
sort_dirs=['desc'])
7073-
7074-
if self.cell_type is None:
7075-
for cm in mock_cm_get_all.return_value:
7076-
mock_target_cell.assert_any_call(self.context, cm)
7077-
fields = ['metadata', 'info_cache', 'security_groups']
7078-
inst_get_calls = [mock.call(cctxt, {'foo': 'bar'},
7079-
limit=10, marker=marker,
7080-
fields=fields, sort_keys=['baz'],
7081-
sort_dirs=['desc']),
7082-
mock.call(mock.ANY, {'foo': 'bar'},
7083-
limit=10, marker=marker,
7084-
fields=fields, sort_keys=['baz'],
7085-
sort_dirs=['desc'])
7086-
]
7087-
self.assertEqual(2, mock_inst_get.call_count)
7088-
mock_inst_get.assert_has_calls(inst_get_calls)
7089-
for i, instance in enumerate(cell_instances):
7090-
self.assertEqual(instance, instances[i])
6872+
def test_tenant_to_project_conversion(self):
6873+
self.skipTest("Removing cells v1")
70916874

70926875
def test_get_all_with_cell_down_support(self):
70936876
self.skipTest("Cell down handling is not supported for cells_v1.")

0 commit comments

Comments
 (0)