From 86963e60bea60f45d7d730442f6b447f58c3f275 Mon Sep 17 00:00:00 2001 From: Pavel Kholkin Date: Mon, 28 Dec 2015 15:07:42 +0300 Subject: [PATCH] enginefacade: 'ec2_instance' and 'instance_fault' Use enginefacade in 'ec2_instance' and 'instance_fault' sections. Implements: blueprint new-oslodb-enginefacade Closes-Bug: #1533684 Co-Authored-By: Sergey Nikitin Change-Id: I39406c41f8674fff538b15d8e23b4e9258cf5fc3 --- nova/api/openstack/compute/legacy_v2/servers.py | 1 + nova/api/openstack/compute/servers.py | 1 + nova/db/sqlalchemy/api.py | 17 ++++++++++------- nova/tests/unit/compute/test_compute.py | 7 +++---- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/nova/api/openstack/compute/legacy_v2/servers.py b/nova/api/openstack/compute/legacy_v2/servers.py index 751c744a83f2..93a1c42116cc 100644 --- a/nova/api/openstack/compute/legacy_v2/servers.py +++ b/nova/api/openstack/compute/legacy_v2/servers.py @@ -233,6 +233,7 @@ class Controller(wsgi.Controller): instance_list = objects.InstanceList() if is_detail: + instance_list._context = context instance_list.fill_faults() response = self._view_builder.detail(req, instance_list) else: diff --git a/nova/api/openstack/compute/servers.py b/nova/api/openstack/compute/servers.py index fda67f30cbfb..e4ae2c23dfa6 100644 --- a/nova/api/openstack/compute/servers.py +++ b/nova/api/openstack/compute/servers.py @@ -404,6 +404,7 @@ class ServersController(wsgi.Controller): instance_list = objects.InstanceList() if is_detail: + instance_list._context = context instance_list.fill_faults() response = self._view_builder.detail(req, instance_list) else: diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py index 5b375a0a18ad..9339162d8d38 100644 --- a/nova/db/sqlalchemy/api.py +++ b/nova/db/sqlalchemy/api.py @@ -5749,14 +5749,16 @@ def aggregate_host_add(context, aggregate_id, host): ################ +@main_context_manager.writer def instance_fault_create(context, values): """Create a new InstanceFault.""" fault_ref = models.InstanceFault() fault_ref.update(values) - fault_ref.save() + fault_ref.save(context.session) return dict(fault_ref) +@main_context_manager.reader def instance_fault_get_by_instance_uuids(context, instance_uuids): """Get all instance faults for the provided instance_uuids.""" if not instance_uuids: @@ -5927,6 +5929,7 @@ def action_event_get_by_id(context, action_id, event_id): @require_context +@main_context_manager.writer def ec2_instance_create(context, instance_uuid, id=None): """Create ec2 compatible instance by provided uuid.""" ec2_instance_ref = models.InstanceIdMapping() @@ -5934,12 +5937,13 @@ def ec2_instance_create(context, instance_uuid, id=None): if id is not None: ec2_instance_ref.update({'id': id}) - ec2_instance_ref.save() + ec2_instance_ref.save(context.session) return ec2_instance_ref @require_context +@main_context_manager.reader def ec2_instance_get_by_uuid(context, instance_uuid): result = _ec2_instance_get_query(context).\ filter_by(uuid=instance_uuid).\ @@ -5952,6 +5956,7 @@ def ec2_instance_get_by_uuid(context, instance_uuid): @require_context +@main_context_manager.reader def ec2_instance_get_by_id(context, instance_id): result = _ec2_instance_get_query(context).\ filter_by(id=instance_id).\ @@ -5964,16 +5969,14 @@ def ec2_instance_get_by_id(context, instance_id): @require_context +@main_context_manager.reader def get_instance_uuid_by_ec2_id(context, ec2_id): result = ec2_instance_get_by_id(context, ec2_id) return result['uuid'] -def _ec2_instance_get_query(context, session=None): - return model_query(context, - models.InstanceIdMapping, - session=session, - read_deleted='yes') +def _ec2_instance_get_query(context): + return model_query(context, models.InstanceIdMapping, read_deleted='yes') def _task_log_get_query(context, task_name, period_beginning, diff --git a/nova/tests/unit/compute/test_compute.py b/nova/tests/unit/compute/test_compute.py index 04fae9fb46ea..887f925b2d48 100644 --- a/nova/tests/unit/compute/test_compute.py +++ b/nova/tests/unit/compute/test_compute.py @@ -11280,8 +11280,6 @@ class EvacuateHostTestCase(BaseTestCase): send_node=False): network_api = self.compute.network_api ctxt = context.get_admin_context() - mock_context = mock.Mock() - mock_context.elevated.return_value = ctxt node = limits = None if send_node: @@ -11290,7 +11288,8 @@ class EvacuateHostTestCase(BaseTestCase): @mock.patch.object(network_api, 'setup_networks_on_host') @mock.patch.object(network_api, 'setup_instance_network_on_host') - def _test_rebuild(mock_setup_instance_network_on_host, + @mock.patch('nova.context.RequestContext.elevated', return_value=ctxt) + def _test_rebuild(mock_context, mock_setup_instance_network_on_host, mock_setup_networks_on_host): orig_image_ref = None image_ref = None @@ -11298,7 +11297,7 @@ class EvacuateHostTestCase(BaseTestCase): bdms = objects.BlockDeviceMappingList.get_by_instance_uuid( self.context, self.inst.uuid) self.compute.rebuild_instance( - mock_context, self.inst, orig_image_ref, + ctxt, self.inst, orig_image_ref, image_ref, injected_files, 'newpass', {}, bdms, recreate=True, on_shared_storage=on_shared_storage, migration=migration, scheduled_node=node, limits=limits)