Merge "Fix DB query returning ready devices in LoadBalancerCallbacks"
This commit is contained in:
@@ -49,15 +49,15 @@ class LoadBalancerCallbacks(object):
|
||||
|
||||
def get_ready_devices(self, context, host=None):
|
||||
with context.session.begin(subtransactions=True):
|
||||
qry = context.session.query(
|
||||
loadbalancer_db.Vip, loadbalancer_db.Pool
|
||||
)
|
||||
qry = (context.session.query(loadbalancer_db.Pool.id).
|
||||
join(loadbalancer_db.Vip))
|
||||
|
||||
qry = qry.filter(loadbalancer_db.Vip.status.in_(ACTIVE_PENDING))
|
||||
qry = qry.filter(loadbalancer_db.Pool.status.in_(ACTIVE_PENDING))
|
||||
up = True # makes pep8 and sqlalchemy happy
|
||||
qry = qry.filter(loadbalancer_db.Vip.admin_state_up == up)
|
||||
qry = qry.filter(loadbalancer_db.Pool.admin_state_up == up)
|
||||
return [p.id for v, p in qry.all()]
|
||||
return [id for id, in qry.all()]
|
||||
|
||||
def get_logical_device(self, context, pool_id=None, activate=True,
|
||||
**kwargs):
|
||||
|
||||
@@ -21,6 +21,8 @@ import mock
|
||||
|
||||
from quantum import context
|
||||
from quantum import manager
|
||||
from quantum.db.loadbalancer import loadbalancer_db as ldb
|
||||
from quantum.openstack.common import uuidutils
|
||||
from quantum.plugins.common import constants
|
||||
from quantum.plugins.services.agent_loadbalancer import plugin
|
||||
from quantum.tests import base
|
||||
@@ -50,6 +52,54 @@ class TestLoadBalancerCallbacks(TestLoadBalancerPluginBase):
|
||||
)
|
||||
self.assertEqual(ready, [vip['vip']['pool_id']])
|
||||
|
||||
def test_get_ready_devices_multiple_vips_and_pools(self):
|
||||
ctx = context.get_admin_context()
|
||||
|
||||
# add 3 pools and 2 vips directly to DB
|
||||
# to create 2 "ready" devices and one pool without vip
|
||||
pools = []
|
||||
for i in xrange(0, 3):
|
||||
pools.append(ldb.Pool(id=uuidutils.generate_uuid(),
|
||||
subnet_id=self._subnet_id,
|
||||
protocol="HTTP",
|
||||
lb_method="ROUND_ROBIN",
|
||||
status=constants.ACTIVE,
|
||||
admin_state_up=True))
|
||||
ctx.session.add(pools[i])
|
||||
|
||||
vip0 = ldb.Vip(id=uuidutils.generate_uuid(),
|
||||
protocol_port=80,
|
||||
protocol="HTTP",
|
||||
pool_id=pools[0].id,
|
||||
status=constants.ACTIVE,
|
||||
admin_state_up=True,
|
||||
connection_limit=3)
|
||||
ctx.session.add(vip0)
|
||||
pools[0].vip_id = vip0.id
|
||||
|
||||
vip1 = ldb.Vip(id=uuidutils.generate_uuid(),
|
||||
protocol_port=80,
|
||||
protocol="HTTP",
|
||||
pool_id=pools[1].id,
|
||||
status=constants.ACTIVE,
|
||||
admin_state_up=True,
|
||||
connection_limit=3)
|
||||
ctx.session.add(vip1)
|
||||
pools[1].vip_id = vip1.id
|
||||
|
||||
ctx.session.flush()
|
||||
|
||||
self.assertEqual(ctx.session.query(ldb.Pool).count(), 3)
|
||||
self.assertEqual(ctx.session.query(ldb.Vip).count(), 2)
|
||||
ready = self.callbacks.get_ready_devices(ctx)
|
||||
self.assertEqual(len(ready), 2)
|
||||
self.assertIn(pools[0].id, ready)
|
||||
self.assertIn(pools[1].id, ready)
|
||||
self.assertNotIn(pools[2].id, ready)
|
||||
# cleanup
|
||||
ctx.session.query(ldb.Pool).delete()
|
||||
ctx.session.query(ldb.Vip).delete()
|
||||
|
||||
def test_get_ready_devices_inactive_vip(self):
|
||||
with self.vip() as vip:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user