summaryrefslogtreecommitdiffstats
path: root/nova/db
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-05-15 10:43:02 +0000
committerGerrit Code Review <review@openstack.org>2013-05-15 10:43:02 +0000
commit031319f9051e182ea45beb0298bcd062a0d400c8 (patch)
treef05602c797d44810c1d2b32941b2ca469b4f36b3 /nova/db
parent4dee8665b43cad974c4781d0ebbfff94e5101d35 (diff)
parentac9cc15164f0afcac4b3320bcd58d36c00f3232c (diff)
Merge "Optimize db.instance_floating_address_get_all method"
Diffstat (limited to 'nova/db')
-rw-r--r--nova/db/sqlalchemy/api.py21
1 files changed, 15 insertions, 6 deletions
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py
index 730ca641c..1fc273bec 100644
--- a/nova/db/sqlalchemy/api.py
+++ b/nova/db/sqlalchemy/api.py
@@ -1914,14 +1914,23 @@ def instance_get_floating_address(context, instance_id):
@require_context
def instance_floating_address_get_all(context, instance_uuid):
- fixed_ips = fixed_ip_get_by_instance(context, instance_uuid)
+ if not uuidutils.is_uuid_like(instance_uuid):
+ raise exception.InvalidUUID(uuid=instance_uuid)
+
+ fixed_ip_ids = model_query(context, models.FixedIp.id,
+ base_model=models.FixedIp).\
+ filter_by(instance_uuid=instance_uuid).\
+ all()
+ if not fixed_ip_ids:
+ raise exception.FixedIpNotFoundForInstance(instance_uuid=instance_uuid)
- floating_ips = []
- for fixed_ip in fixed_ips:
- _floating_ips = floating_ip_get_by_fixed_ip_id(context, fixed_ip['id'])
- floating_ips += _floating_ips
+ fixed_ip_ids = [fixed_ip_id.id for fixed_ip_id in fixed_ip_ids]
- return floating_ips
+ floating_ips = model_query(context, models.FloatingIp.address,
+ base_model=models.FloatingIp).\
+ filter(models.FloatingIp.fixed_ip_id.in_(fixed_ip_ids)).\
+ all()
+ return [floating_ip.address for floating_ip in floating_ips]
@require_admin_context