summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDevin Carlen <devin.carlen@gmail.com>2010-08-28 23:06:40 -0700
committerDevin Carlen <devin.carlen@gmail.com>2010-08-28 23:06:40 -0700
commit5425a3252f6e91d842a891fbd93ee51f490bddce (patch)
tree93fea4518fc1975934fc531424e28f7a97f172fb
parentae6905b9f1ef97206ee3c8722cec3b26fc064f38 (diff)
Making tests pass
-rw-r--r--nova/db/sqlalchemy/__init__.py3
-rw-r--r--nova/db/sqlalchemy/api.py58
-rw-r--r--nova/db/sqlalchemy/models.py31
-rw-r--r--nova/tests/network_unittest.py1
4 files changed, 55 insertions, 38 deletions
diff --git a/nova/db/sqlalchemy/__init__.py b/nova/db/sqlalchemy/__init__.py
index e69de29bb..e94f99486 100644
--- a/nova/db/sqlalchemy/__init__.py
+++ b/nova/db/sqlalchemy/__init__.py
@@ -0,0 +1,3 @@
+from models import register_models
+
+register_models() \ No newline at end of file
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py
index 5295d1e38..0b6316221 100644
--- a/nova/db/sqlalchemy/api.py
+++ b/nova/db/sqlalchemy/api.py
@@ -23,7 +23,7 @@ from nova import db
from nova import exception
from nova import flags
from nova.db.sqlalchemy import models
-from nova.db.sqlalchemy import session
+from nova.db.sqlalchemy.session import managed_session
FLAGS = flags.FLAGS
@@ -56,7 +56,7 @@ def daemon_update(context, daemon_id, values):
def floating_ip_allocate_address(context, node_name, project_id):
- with session.managed(auto_commit=False) as session:
+ with managed_session(autocommit=False) as session:
floating_ip_ref = session.query(models.FloatingIp) \
.filter_by(node_name=node_name) \
.filter_by(fixed_ip_id=None) \
@@ -202,7 +202,7 @@ def instance_get_by_address(context, address):
def instance_get_by_project(context, project_id):
- with session.managed() as session:
+ with managed_session() as session:
return session.query(models.Instance) \
.filter_by(project_id=project_id) \
.filter_by(deleted=False) \
@@ -210,7 +210,7 @@ def instance_get_by_project(context, project_id):
def instance_get_by_reservation(context, reservation_id):
- with session.managed() as session:
+ with managed_session() as session:
return session.query(models.Instance) \
.filter_by(reservation_id=reservation_id) \
.filter_by(deleted=False) \
@@ -290,7 +290,7 @@ def network_count(context):
return models.Network.count()
def network_count_allocated_ips(context, network_id):
- with session.managed() as session:
+ with managed_session() as session:
return session.query(models.FixedIp) \
.filter_by(network_id=network_id) \
.filter_by(allocated=True) \
@@ -299,7 +299,7 @@ def network_count_allocated_ips(context, network_id):
def network_count_available_ips(context, network_id):
- with session.managed() as session:
+ with managed_session() as session:
return session.query(models.FixedIp) \
.filter_by(network_id=network_id) \
.filter_by(allocated=False) \
@@ -309,7 +309,7 @@ def network_count_available_ips(context, network_id):
def network_count_reserved_ips(context, network_id):
- with session.managed() as session:
+ with managed_session() as session:
return session.query(models.FixedIp) \
.filter_by(network_id=network_id) \
.filter_by(reserved=True) \
@@ -326,8 +326,8 @@ def network_create(context, values):
def network_create_fixed_ips(context, network_id, num_vpn_clients):
- with session.managed(auto_commit=False) as session:
- network_ref = network_get(context, network_id)
+ with managed_session(autocommit=False) as session:
+ network_ref = network_get(context, network_id, session=session)
# NOTE(vish): should these be properties of the network as opposed
# to constants?
BOTTOM_RESERVED = 3
@@ -340,15 +340,16 @@ def network_create_fixed_ips(context, network_id, num_vpn_clients):
fixed_ip['ip_str'] = str(project_net[i])
if i < BOTTOM_RESERVED or num_ips - i < TOP_RESERVED:
fixed_ip['reserved'] = True
- fixed_ip['network'] = network_get(context, network_id)
+ fixed_ip['network'] = network_get(context,
+ network_id,
+ session=session)
session.add(fixed_ip)
session.commit()
def network_ensure_indexes(context, num_networks):
- with session.managed(auto_commit=False) as session:
+ with managed_session(autocommit=False) as session:
if models.NetworkIndex.count() == 0:
- session = models.NovaBase.get_session()
for i in range(num_networks):
network_index = models.NetworkIndex()
network_index.index = i
@@ -357,7 +358,7 @@ def network_ensure_indexes(context, num_networks):
def network_destroy(context, network_id):
- with session.managed(auto_commit=False) as session:
+ with managed_session(autocommit=False) as session:
session.execute('update networks set deleted=1 where id=:id',
{'id': network_id})
session.execute('update network_indexes set deleted=1 where network_id=:id',
@@ -365,12 +366,12 @@ def network_destroy(context, network_id):
session.commit()
-def network_get(context, network_id):
- return models.Network.find(network_id)
+def network_get(context, network_id, session=None):
+ return models.Network.find(network_id, session=session)
def network_get_associated_fixed_ips(context, network_id):
- with session.managed() as session:
+ with managed_session() as session:
return session.query(models.FixedIp) \
.filter(models.FixedIp.instance_id != None) \
.filter_by(deleted=False) \
@@ -378,7 +379,7 @@ def network_get_associated_fixed_ips(context, network_id):
def network_get_by_bridge(context, bridge):
- with session.managed() as session:
+ with managed_session() as session:
rv = session.query(models.Network) \
.filter_by(bridge=bridge) \
.filter_by(deleted=False) \
@@ -405,7 +406,7 @@ def network_get_host(context, network_id):
def network_get_index(context, network_id):
- with session.managed(auto_commit=False) as session:
+ with managed_session(autocommit=False) as session:
network_index = session.query(models.NetworkIndex) \
.filter_by(network_id=None) \
.filter_by(deleted=False) \
@@ -413,7 +414,7 @@ def network_get_index(context, network_id):
.first()
if not network_index:
raise db.NoMoreNetworks()
- network_index['network'] = network_get(context, network_id)
+ network_index['network'] = network_get(context, network_id, session=session)
session.add(network_index)
session.commit()
return network_index['index']
@@ -429,10 +430,11 @@ def network_set_cidr(context, network_id, cidr):
network_ref['broadcast'] = str(project_net.broadcast())
network_ref['vpn_private_ip_str'] = str(project_net[2])
network_ref['dhcp_start'] = str(project_net[3])
+ network_ref.save()
def network_set_host(context, network_id, host_id):
- with session.managed(auto_commit=False) as session:
+ with managed_session(autocommit=False) as session:
network = session.query(models.Network) \
.filter_by(id=network_id) \
.filter_by(deleted=False) \
@@ -463,7 +465,7 @@ def network_update(context, network_id, values):
def project_get_network(context, project_id):
- with session.managed() as session:
+ with managed_session() as session:
rv = session.query(models.Network) \
.filter_by(project_id=project_id) \
.filter_by(deleted=False) \
@@ -483,11 +485,11 @@ def queue_get_for(context, topic, physical_node_id):
def volume_allocate_shelf_and_blade(context, volume_id):
- with session.managed(auto_commit=False) as session:
- db.volume_ensure_blades(context,
- session,
- FLAGS.num_shelves,
- FLAGS.blades_per_shelf)
+ with managed_session(autocommit=False) as session:
+ volume_ensure_blades(context,
+ FLAGS.num_shelves,
+ FLAGS.blades_per_shelf,
+ session=session)
export_device = session.query(models.ExportDevice) \
.filter_by(volume=None) \
.filter_by(deleted=False) \
@@ -535,7 +537,7 @@ def volume_detached(context, volume_id):
# NOTE(vish): should this code go up a layer?
-def volume_ensure_blades(context, session, num_shelves, blades_per_shelf):
+def volume_ensure_blades(context, num_shelves, blades_per_shelf, session=None):
count = models.ExportDevice.count(session=session)
if count >= num_shelves * blades_per_shelf:
return
@@ -556,7 +558,7 @@ def volume_get_all(context):
def volume_get_by_project(context, project_id):
- with session.managed() as session:
+ with managed_session() as session:
return session.query(models.Volume) \
.filter_by(project_id=project_id) \
.filter_by(deleted=False) \
diff --git a/nova/db/sqlalchemy/models.py b/nova/db/sqlalchemy/models.py
index c3529f29c..040fa50cc 100644
--- a/nova/db/sqlalchemy/models.py
+++ b/nova/db/sqlalchemy/models.py
@@ -25,7 +25,7 @@ from sqlalchemy import Table, Column, Integer, String
from sqlalchemy import MetaData, ForeignKey, DateTime, Boolean, Text
from sqlalchemy.ext.declarative import declarative_base
-from nova.db.sqlalchemy import session
+from nova.db.sqlalchemy.session import managed_session
from nova import auth
from nova import exception
from nova import flags
@@ -36,6 +36,7 @@ Base = declarative_base()
class NovaBase(object):
__table_args__ = {'mysql_engine':'InnoDB'}
+ __table_initialized__ = False
__prefix__ = 'none'
created_at = Column(DateTime)
updated_at = Column(DateTime)
@@ -48,7 +49,7 @@ class NovaBase(object):
.filter_by(deleted=False) \
.all()
else:
- with session.managed() as session:
+ with managed_session() as session:
return cls.all(session=session)
@classmethod
@@ -58,8 +59,8 @@ class NovaBase(object):
.filter_by(deleted=False) \
.count()
else:
- with session.managed() as session:
- return cls.count(session=session)
+ with managed_session() as s:
+ return cls.count(session=s)
@classmethod
def find(cls, obj_id, session=None):
@@ -72,7 +73,7 @@ class NovaBase(object):
except exc.NoResultFound:
raise exception.NotFound("No model for id %s" % obj_id)
else:
- with session.managed() as session:
+ with managed_session() as session:
return cls.find(obj_id, session=session)
@classmethod
@@ -87,8 +88,9 @@ class NovaBase(object):
def save(self, session=None):
if session:
session.add(self)
+ session.flush()
else:
- with session.managed() as s:
+ with managed_session() as s:
self.save(session=s)
def delete(self, session=None):
@@ -253,7 +255,7 @@ class ExportDevice(Base, NovaBase):
class FixedIp(Base, NovaBase):
__tablename__ = 'fixed_ips'
id = Column(Integer, primary_key=True)
- ip_str = Column(String(255), unique=True)
+ ip_str = Column(String(255))
network_id = Column(Integer, ForeignKey('networks.id'), nullable=False)
instance_id = Column(Integer, ForeignKey('instances.id'), nullable=True)
instance = relationship(Instance, backref=backref('fixed_ip',
@@ -280,7 +282,7 @@ class FixedIp(Base, NovaBase):
class FloatingIp(Base, NovaBase):
__tablename__ = 'floating_ips'
id = Column(Integer, primary_key=True)
- ip_str = Column(String(255), unique=True)
+ ip_str = Column(String(255))
fixed_ip_id = Column(Integer, ForeignKey('fixed_ips.id'), nullable=True)
fixed_ip = relationship(FixedIp, backref=backref('floating_ips'))
@@ -336,12 +338,21 @@ class NetworkIndex(Base, NovaBase):
index = Column(Integer)
network_id = Column(Integer, ForeignKey('networks.id'), nullable=True)
network = relationship(Network, backref=backref('network_index',
- uselist=False))
+ uselist=False))
+
+def register_models():
+ from sqlalchemy import create_engine
+
+ models = (Image, PhysicalNode, Daemon, Instance, Volume, ExportDevice,
+ FixedIp, FloatingIp, Network, NetworkIndex)
+ engine = create_engine(FLAGS.sql_connection, echo=False)
+ for model in models:
+ model.metadata.create_all(engine)
if __name__ == '__main__':
instance = Instance(image_id='as', ramdisk_id='AS', user_id='anthony')
user = User(id='anthony')
- with session.managed() as session:
+ with managed_session() as session:
session.add(instance)
diff --git a/nova/tests/network_unittest.py b/nova/tests/network_unittest.py
index d487c2e45..e0de04be7 100644
--- a/nova/tests/network_unittest.py
+++ b/nova/tests/network_unittest.py
@@ -105,6 +105,7 @@ class NetworkTestCase(test.TrialTestCase):
db.fixed_ip_deallocate(None, fix_addr)
def test_allocate_deallocate_fixed_ip(self):
+ import pdb; pdb.set_trace()
"""Makes sure that we can allocate and deallocate a fixed ip"""
address = self._create_address(0)
self.assertTrue(is_allocated_in_project(address, self.projects[0].id))