From 64d073ca080f194680c14ccdf3b2b08e50d8eade Mon Sep 17 00:00:00 2001 From: Vishvananda Ishaya Date: Thu, 9 Sep 2010 06:55:54 -0700 Subject: speed up describe by loading fixed and floating ips --- nova/db/sqlalchemy/api.py | 9 ++++++++- nova/endpoint/cloud.py | 8 ++++---- 2 files changed, 12 insertions(+), 5 deletions(-) (limited to 'nova') diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py index 817ff9ac3..958036707 100644 --- a/nova/db/sqlalchemy/api.py +++ b/nova/db/sqlalchemy/api.py @@ -25,6 +25,7 @@ from nova import flags from nova.db.sqlalchemy import models from nova.db.sqlalchemy.session import get_session from sqlalchemy import or_ +from sqlalchemy.orm import joinedload_all FLAGS = flags.FLAGS @@ -251,12 +252,17 @@ def instance_get(context, instance_id): def instance_get_all(context): - return models.Instance.all(deleted=_deleted(context)) + session = get_session() + return session.query(models.Instance + ).options(joinedload_all('fixed_ip.floating_ips') + ).filter_by(deleted=_deleted(context) + ).all() def instance_get_by_project(context, project_id): session = get_session() return session.query(models.Instance + ).options(joinedload_all('fixed_ip.floating_ips') ).filter_by(project_id=project_id ).filter_by(deleted=_deleted(context) ).all() @@ -265,6 +271,7 @@ def instance_get_by_project(context, project_id): def instance_get_by_reservation(_context, reservation_id): session = get_session() return session.query(models.Instance + ).options(joinedload_all('fixed_ip.floating_ips') ).filter_by(reservation_id=reservation_id ).filter_by(deleted=False ).all() diff --git a/nova/endpoint/cloud.py b/nova/endpoint/cloud.py index 709c967bb..6958eacfe 100644 --- a/nova/endpoint/cloud.py +++ b/nova/endpoint/cloud.py @@ -379,11 +379,11 @@ class CloudController(object): 'code': instance['state'], 'name': instance['state_description'] } - floating_addr = db.instance_get_floating_address(context, - instance['id']) + floating_addr = None + if instance['fixed_ip']['floating_ips']: + floating_addr = instance['fixed_ip']['floating_ips'][0]['str_id'] i['publicDnsName'] = floating_addr - fixed_addr = db.instance_get_fixed_address(context, - instance['id']) + fixed_addr = instance['fixed_ip']['str_id'] i['privateDnsName'] = fixed_addr if not i['publicDnsName']: i['publicDnsName'] = i['privateDnsName'] -- cgit