summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@gmail.com>2013-02-11 09:00:16 -0800
committerVishvananda Ishaya <vishvananda@gmail.com>2013-02-20 08:12:57 -0800
commit1564bbce9816eaeeffb6007564cf5b1aaa7561a1 (patch)
tree2262a2c05f3ed0559574eb5efafcd43663aa21a1
parent032308c7920b368541f1f89bfab550e1e9e48f31 (diff)
downloadnova-1564bbce9816eaeeffb6007564cf5b1aaa7561a1.tar.gz
nova-1564bbce9816eaeeffb6007564cf5b1aaa7561a1.tar.xz
nova-1564bbce9816eaeeffb6007564cf5b1aaa7561a1.zip
Fix handling of source_groups with no-db-compute.
The moving of data around in no-db-compute broke source groups. This is a combination of a few errors. First, the instance_type data wasn't being retrieved from system_metadata. Second, the instance_type data was too deep in the heirarchy and being ignored. Finally, source groups require a nw info call which causes a db access by nova-compute. Fixes bug 1122316 Change-Id: Iccb6e5d336c0b2c8ba41c41ab2e046fc9617835a
-rw-r--r--nova/conductor/manager.py4
-rw-r--r--nova/db/sqlalchemy/api.py3
-rw-r--r--nova/network/api.py4
-rw-r--r--nova/virt/firewall.py5
4 files changed, 11 insertions, 5 deletions
diff --git a/nova/conductor/manager.py b/nova/conductor/manager.py
index a986b0415..6202cb8b6 100644
--- a/nova/conductor/manager.py
+++ b/nova/conductor/manager.py
@@ -208,9 +208,9 @@ class ConductorManager(manager.SchedulerDependentManager):
return jsonutils.to_primitive(group)
def security_group_rule_get_by_security_group(self, context, secgroup):
- rule = self.db.security_group_rule_get_by_security_group(
+ rules = self.db.security_group_rule_get_by_security_group(
context, secgroup['id'])
- return jsonutils.to_primitive(rule)
+ return jsonutils.to_primitive(rules, max_depth=4)
def provider_fw_rule_get_all(self, context):
rules = self.db.provider_fw_rule_get_all(context)
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py
index 2ac08f6eb..c717871d1 100644
--- a/nova/db/sqlalchemy/api.py
+++ b/nova/db/sqlalchemy/api.py
@@ -3203,7 +3203,8 @@ def security_group_rule_get_by_security_group(context, security_group_id,
session=None):
return _security_group_rule_get_query(context, session=session).\
filter_by(parent_group_id=security_group_id).\
- options(joinedload_all('grantee_group.instances.instance_type')).\
+ options(joinedload_all('grantee_group.instances.'
+ 'system_metadata')).\
all()
diff --git a/nova/network/api.py b/nova/network/api.py
index 98387687d..f89cfb8de 100644
--- a/nova/network/api.py
+++ b/nova/network/api.py
@@ -20,6 +20,7 @@
import functools
import inspect
+from nova.compute import instance_types
from nova.db import base
from nova import exception
from nova.network import floating_ips
@@ -362,8 +363,9 @@ class API(base.Base):
def _get_instance_nw_info(self, context, instance):
"""Returns all network info related to an instance."""
+ instance_type = instance_types.extract_instance_type(instance)
args = {'instance_id': instance['uuid'],
- 'rxtx_factor': instance['instance_type']['rxtx_factor'],
+ 'rxtx_factor': instance_type['rxtx_factor'],
'host': instance['host'],
'project_id': instance['project_id']}
nw_info = self.network_rpcapi.get_instance_nw_info(context, **args)
diff --git a/nova/virt/firewall.py b/nova/virt/firewall.py
index 6ab4249b1..a36beb7f0 100644
--- a/nova/virt/firewall.py
+++ b/nova/virt/firewall.py
@@ -19,6 +19,7 @@
from oslo.config import cfg
+from nova import conductor
from nova import context
from nova import network
from nova.network import linux_net
@@ -398,9 +399,11 @@ class IptablesFirewallDriver(FirewallDriver):
# and should be the only one making
# making rpc calls.
nw_api = network.API()
+ capi = conductor.API()
for instance in rule['grantee_group']['instances']:
nw_info = nw_api.get_instance_nw_info(ctxt,
- instance)
+ instance,
+ capi)
ips = [ip['address']
for ip in nw_info.fixed_ips()