File 0008-Improve-speed-of-listing-from-DB.patch of Package openstack-neutron-lbaas
diff -crB --new-file neutron-lbaas-9.2.2.dev11-backup/neutron_lbaas/db/loadbalancer/loadbalancer_dbv2.py neutron-lbaas-9.2.2.dev11/neutron_lbaas/db/loadbalancer/loadbalancer_dbv2.py
*** neutron-lbaas-9.2.2.dev11-backup/neutron_lbaas/db/loadbalancer/loadbalancer_dbv2.py 2018-12-10 11:27:12.369266310 -0800
--- neutron-lbaas-9.2.2.dev11/neutron_lbaas/db/loadbalancer/loadbalancer_dbv2.py 2018-12-10 12:06:25.836712721 -0800
***************
*** 33,38 ****
--- 33,39 ----
from sqlalchemy import orm
from sqlalchemy.orm import exc
from sqlalchemy.orm import lazyload
+ from sqlalchemy.orm import subqueryload
from neutron_lbaas._i18n import _
from neutron_lbaas import agent_scheduler
***************
*** 92,100 ****
return False
return True
! def _get_resources(self, context, model, filters=None):
query = self._get_collection_query(context, model,
filters=filters)
return [model_instance for model_instance in query]
def _create_port_choose_fixed_ip(self, fixed_ips):
--- 93,103 ----
return False
return True
! def _get_resources(self, context, model, filters=None, options=None):
query = self._get_collection_query(context, model,
filters=filters)
+ if options:
+ query = query.options(options)
return [model_instance for model_instance in query]
def _create_port_choose_fixed_ip(self, fixed_ips):
***************
*** 364,370 ****
return
if port_db['device_owner'] == n_const.DEVICE_OWNER_LOADBALANCERV2:
filters = {'vip_port_id': [port_id]}
! if len(self.get_loadbalancers(context, filters=filters)) > 0:
reason = _('has device owner %s') % port_db['device_owner']
raise n_exc.ServicePortInUse(port_id=port_db['id'],
reason=reason)
--- 367,373 ----
return
if port_db['device_owner'] == n_const.DEVICE_OWNER_LOADBALANCERV2:
filters = {'vip_port_id': [port_id]}
! if len(self.get_loadbalancer_ids(context, filters=filters)) > 0:
reason = _('has device owner %s') % port_db['device_owner']
raise n_exc.ServicePortInUse(port_id=port_db['id'],
reason=reason)
***************
*** 374,385 ****
--- 377,405 ----
_prevent_lbaasv2_port_delete_callback, resources.PORT,
events.BEFORE_DELETE)
+ def get_loadbalancer_ids(self, context, filters=None):
+ lb_dbs = self._get_resources(context, models.LoadBalancer,
+ filters=filters)
+ return [lb_db.id
+ for lb_db in lb_dbs]
+
def get_loadbalancers(self, context, filters=None):
lb_dbs = self._get_resources(context, models.LoadBalancer,
filters=filters)
return [data_models.LoadBalancer.from_sqlalchemy_model(lb_db)
for lb_db in lb_dbs]
+ def get_loadbalancers_as_api_dict(self, context, filters=None):
+ options = (
+ subqueryload(models.LoadBalancer.listeners),
+ subqueryload(models.LoadBalancer.pools),
+ subqueryload(models.LoadBalancer.provider)
+ )
+ lb_dbs = self._get_resources(context, models.LoadBalancer,
+ filters=filters, options=options)
+ return [lb_db.to_api_dict
+ for lb_db in lb_dbs]
+
def get_loadbalancer(self, context, id):
lb_db = self._get_resource(context, models.LoadBalancer, id)
return data_models.LoadBalancer.from_sqlalchemy_model(lb_db)
***************
*** 557,562 ****
--- 577,593 ----
return [data_models.Listener.from_sqlalchemy_model(listener_db)
for listener_db in listener_dbs]
+ def get_listeners_as_api_dict(self, context, filters=None):
+ options = (
+ subqueryload(models.Listener.sni_containers),
+ subqueryload(models.Listener.loadbalancer),
+ subqueryload(models.Listener.l7_policies)
+ )
+ listener_dbs = self._get_resources(context, models.Listener,
+ filters=filters, options=options)
+ return [listener_db.to_api_dict
+ for listener_db in listener_dbs]
+
def get_listener(self, context, id):
listener_db = self._get_resource(context, models.Listener, id)
return data_models.Listener.from_sqlalchemy_model(listener_db)
***************
*** 673,678 ****
--- 704,722 ----
return [data_models.Pool.from_sqlalchemy_model(pool_db)
for pool_db in pool_dbs]
+ def get_pools_as_api_dict(self, context, filters=None):
+ options = (
+ subqueryload(models.PoolV2.members),
+ subqueryload(models.PoolV2.listeners),
+ subqueryload(models.PoolV2.l7_policies),
+ subqueryload(models.PoolV2.loadbalancer),
+ subqueryload(models.PoolV2.session_persistence)
+ )
+ pool_dbs = self._get_resources(context, models.PoolV2,
+ filters=filters, options=options)
+ return [pool_db.to_api_dict
+ for pool_db in pool_dbs]
+
def get_pool(self, context, id):
pool_db = self._get_resource(context, models.PoolV2, id)
return data_models.Pool.from_sqlalchemy_model(pool_db)
***************
*** 712,717 ****
--- 756,768 ----
return [data_models.Member.from_sqlalchemy_model(member_db)
for member_db in member_dbs]
+ def get_pool_members_as_api_dict(self, context, filters=None):
+ filters = filters or {}
+ member_dbs = self._get_resources(context, models.MemberV2,
+ filters=filters)
+ return [member_db.to_api_dict
+ for member_db in member_dbs]
+
def get_pool_member(self, context, id):
member_db = self._get_resource(context, models.MemberV2, id)
return data_models.Member.from_sqlalchemy_model(member_db)
***************
*** 770,775 ****
--- 821,836 ----
return [data_models.HealthMonitor.from_sqlalchemy_model(hm_db)
for hm_db in hm_dbs]
+ def get_healthmonitors_as_api_dict(self, context, filters=None):
+ options = (
+ subqueryload(models.HealthMonitorV2.pool)
+ )
+ filters = filters or {}
+ hm_dbs = self._get_resources(context, models.HealthMonitorV2,
+ filters=filters, options=options)
+ return [hm_db.to_api_dict
+ for hm_db in hm_dbs]
+
def update_loadbalancer_stats(self, context, loadbalancer_id, stats_data):
stats_data = stats_data or {}
with context.session.begin(subtransactions=True):
***************
*** 863,868 ****
--- 924,938 ----
return [data_models.L7Policy.from_sqlalchemy_model(l7policy_db)
for l7policy_db in l7policy_dbs]
+ def get_l7policies_as_api_dict(self, context, filters=None):
+ options = (
+ subqueryload(models.L7Policy.rules)
+ )
+ l7policy_dbs = self._get_resources(context, models.L7Policy,
+ filters=filters, options=options)
+ return [l7policy_db.to_api_dict
+ for l7policy_db in l7policy_dbs]
+
def create_l7policy_rule(self, context, rule, l7policy_id):
with context.session.begin(subtransactions=True):
if not self._resource_exists(context, models.L7Policy,
***************
*** 922,927 ****
--- 992,1011 ----
return [data_models.L7Rule.from_sqlalchemy_model(rule_db)
for rule_db in rule_dbs]
+ def get_l7policy_rules_as_api_dict(
+ self, context, l7policy_id, filters=None):
+ options = (
+ subqueryload(models.L7Rule.policy)
+ )
+ if filters:
+ filters.update(filters)
+ else:
+ filters = {'l7policy_id': [l7policy_id]}
+ rule_dbs = self._get_resources(context, models.L7Rule,
+ filters=filters, options=options)
+ return [rule_db.to_api_dict
+ for rule_db in rule_dbs]
+
def _prevent_lbaasv2_port_delete_callback(resource, event, trigger, **kwargs):
context = kwargs['context']
diff -crB --new-file neutron-lbaas-9.2.2.dev11-backup/neutron_lbaas/db/loadbalancer/models.py neutron-lbaas-9.2.2.dev11/neutron_lbaas/db/loadbalancer/models.py
*** neutron-lbaas-9.2.2.dev11-backup/neutron_lbaas/db/loadbalancer/models.py 2018-12-10 11:27:12.369266310 -0800
--- neutron-lbaas-9.2.2.dev11/neutron_lbaas/db/loadbalancer/models.py 2018-12-10 11:51:21.186330609 -0800
***************
*** 13,18 ****
--- 13,20 ----
# License for the specific language governing permissions and limitations
# under the License.
+ import six
+
from neutron.api.v2 import attributes as attr
from neutron.db import model_base
from neutron.db import models_v2
***************
*** 92,97 ****
--- 94,117 ----
def root_loadbalancer(self):
return self.pool.loadbalancer
+ @property
+ def to_api_dict(self):
+ def to_dict(sa_model, attributes):
+ ret = {}
+ for attr in attributes:
+ value = getattr(sa_model, attr)
+ if six.PY2 and isinstance(value, six.text_type):
+ ret[attr.encode('utf8')] = value.encode('utf8')
+ else:
+ ret[attr] = value
+ return ret
+
+ ret_dict = to_dict(self, [
+ 'id', 'tenant_id', 'pool_id', 'address', 'protocol_port', 'weight',
+ 'admin_state_up', 'subnet_id', 'name'])
+
+ return ret_dict
+
class HealthMonitorV2(model_base.BASEV2, model_base.HasId,
model_base.HasProject):
***************
*** 119,124 ****
--- 139,172 ----
def root_loadbalancer(self):
return self.pool.loadbalancer
+ @property
+ def to_api_dict(self):
+ def to_dict(sa_model, attributes):
+ ret = {}
+ for attr in attributes:
+ value = getattr(sa_model, attr)
+ if six.PY2 and isinstance(value, six.text_type):
+ ret[attr.encode('utf8')] = value.encode('utf8')
+ else:
+ ret[attr] = value
+ return ret
+
+ ret_dict = to_dict(self, [
+ 'id', 'tenant_id', 'type', 'delay', 'timeout', 'max_retries',
+ 'http_method', 'url_path', 'expected_codes', 'admin_state_up',
+ 'name', 'max_retries_down'])
+
+ ret_dict['pools'] = []
+ if self.pool:
+ ret_dict['pools'].append({'id': self.pool.id})
+ if self.type in [lb_const.HEALTH_MONITOR_TCP,
+ lb_const.HEALTH_MONITOR_PING]:
+ ret_dict.pop('http_method')
+ ret_dict.pop('url_path')
+ ret_dict.pop('expected_codes')
+
+ return ret_dict
+
class LoadBalancer(model_base.BASEV2, model_base.HasId, model_base.HasProject):
"""Represents a v2 neutron load balancer."""
***************
*** 158,163 ****
--- 206,239 ----
def root_loadbalancer(self):
return self
+ @property
+ def to_api_dict(self):
+ def to_dict(sa_model, attributes):
+ ret = {}
+ for attr in attributes:
+ value = getattr(sa_model, attr)
+ if six.PY2 and isinstance(value, six.text_type):
+ ret[attr.encode('utf8')] = value.encode('utf8')
+ else:
+ ret[attr] = value
+ return ret
+
+ ret_dict = to_dict(self, [
+ 'id', 'tenant_id', 'name', 'description',
+ 'vip_subnet_id', 'vip_port_id', 'vip_address', 'operating_status',
+ 'provisioning_status', 'admin_state_up', 'flavor_id'])
+ ret_dict['listeners'] = [{'id': listener.id}
+ for listener in self.listeners]
+ ret_dict['pools'] = [{'id': pool.id} for pool in self.pools]
+
+ if self.provider:
+ ret_dict['provider'] = self.provider.provider_name
+
+ if not self.flavor_id:
+ del ret_dict['flavor_id']
+
+ return ret_dict
+
class PoolV2(model_base.BASEV2, model_base.HasId, model_base.HasProject):
"""Represents a v2 neutron load balancer pool."""
***************
*** 211,216 ****
--- 287,327 ----
else:
return None
+ @property
+ def to_api_dict(self):
+ def to_dict(sa_model, attributes):
+ ret = {}
+ for attr in attributes:
+ value = getattr(sa_model, attr)
+ if six.PY2 and isinstance(value, six.text_type):
+ ret[attr.encode('utf8')] = value.encode('utf8')
+ else:
+ ret[attr] = value
+ return ret
+
+ ret_dict = to_dict(self, [
+ 'id', 'tenant_id', 'name', 'description',
+ 'healthmonitor_id', 'protocol', 'lb_algorithm', 'admin_state_up'])
+
+ ret_dict['loadbalancers'] = []
+ if self.loadbalancer:
+ ret_dict['loadbalancers'].append({'id': self.loadbalancer.id})
+ ret_dict['session_persistence'] = None
+ if self.session_persistence:
+ ret_dict['session_persistence'] = (
+ to_dict(self.session_persistence, [
+ 'type', 'cookie_name']))
+ ret_dict['members'] = [{'id': member.id} for member in self.members]
+ ret_dict['listeners'] = [{'id': listener.id}
+ for listener in self.listeners]
+ if self.listener:
+ ret_dict['listener_id'] = self.listener.id
+ else:
+ ret_dict['listener_id'] = None
+ ret_dict['l7_policies'] = [{'id': l7_policy.id}
+ for l7_policy in self.l7_policies]
+ return ret_dict
+
class SNI(model_base.BASEV2):
***************
*** 262,267 ****
--- 373,399 ----
def root_loadbalancer(self):
return self.policy.listener.loadbalancer
+ @property
+ def to_api_dict(self):
+ def to_dict(sa_model, attributes):
+ ret = {}
+ for attr in attributes:
+ value = getattr(sa_model, attr)
+ if six.PY2 and isinstance(value, six.text_type):
+ ret[attr.encode('utf8')] = value.encode('utf8')
+ else:
+ ret[attr] = value
+ return ret
+
+ ret_dict = to_dict(self, [
+ 'id', 'tenant_id', 'type', 'compare_type', 'invert', 'key',
+ 'value', 'admin_state_up'])
+
+ ret_dict['policies'] = []
+ if self.policy:
+ ret_dict['policies'].append({'id': self.policy.id})
+ return ret_dict
+
class L7Policy(model_base.BASEV2, model_base.HasId, model_base.HasProject):
"""Represents L7 Policy."""
***************
*** 289,295 ****
rules = orm.relationship(
L7Rule,
uselist=True,
- lazy="joined",
primaryjoin="L7Policy.id==L7Rule.l7policy_id",
foreign_keys=[L7Rule.l7policy_id],
cascade="all, delete-orphan",
--- 421,426 ----
***************
*** 302,307 ****
--- 433,461 ----
def root_loadbalancer(self):
return self.listener.loadbalancer
+ @property
+ def to_api_dict(self):
+ def to_dict(sa_model, attributes):
+ ret = {}
+ for attr in attributes:
+ value = getattr(sa_model, attr)
+ if six.PY2 and isinstance(value, six.text_type):
+ ret[attr.encode('utf8')] = value.encode('utf8')
+ else:
+ ret[attr] = value
+ return ret
+
+ ret_dict = to_dict(self, [
+ 'id', 'tenant_id', 'name', 'description', 'listener_id', 'action',
+ 'redirect_pool_id', 'redirect_url', 'position', 'admin_state_up'])
+
+ ret_dict['listeners'] = [{'id': self.listener_id}]
+ ret_dict['rules'] = [{'id': rule.id} for rule in self.rules]
+ if (ret_dict.get('action') ==
+ lb_const.L7_POLICY_ACTION_REDIRECT_TO_POOL):
+ del ret_dict['redirect_url']
+ return ret_dict
+
class Listener(model_base.BASEV2, model_base.HasId, model_base.HasProject):
"""Represents a v2 neutron listener."""
***************
*** 343,356 ****
provisioning_status = sa.Column(sa.String(16), nullable=False)
operating_status = sa.Column(sa.String(16), nullable=False)
default_pool = orm.relationship(
! PoolV2, backref=orm.backref("listeners"), lazy='joined')
loadbalancer = orm.relationship(
LoadBalancer,
backref=orm.backref("listeners", uselist=True))
l7_policies = orm.relationship(
L7Policy,
uselist=True,
- lazy="joined",
primaryjoin="Listener.id==L7Policy.listener_id",
order_by="L7Policy.position",
collection_class=orderinglist.ordering_list('position', count_from=1),
--- 497,509 ----
provisioning_status = sa.Column(sa.String(16), nullable=False)
operating_status = sa.Column(sa.String(16), nullable=False)
default_pool = orm.relationship(
! PoolV2, backref=orm.backref("listeners"))
loadbalancer = orm.relationship(
LoadBalancer,
backref=orm.backref("listeners", uselist=True))
l7_policies = orm.relationship(
L7Policy,
uselist=True,
primaryjoin="Listener.id==L7Policy.listener_id",
order_by="L7Policy.position",
collection_class=orderinglist.ordering_list('position', count_from=1),
***************
*** 361,363 ****
--- 514,545 ----
@property
def root_loadbalancer(self):
return self.loadbalancer
+
+ @property
+ def to_api_dict(self):
+ def to_dict(sa_model, attributes):
+ ret = {}
+ for attr in attributes:
+ value = getattr(sa_model, attr)
+ if six.PY2 and isinstance(value, six.text_type):
+ ret[attr.encode('utf8')] = value.encode('utf8')
+ else:
+ ret[attr] = value
+ return ret
+
+ ret_dict = to_dict(self, [
+ 'id', 'tenant_id', 'name', 'description', 'default_pool_id',
+ 'protocol', 'default_tls_container_id', 'protocol_port',
+ 'connection_limit', 'admin_state_up'])
+
+ # NOTE(blogan): Returning a list to future proof for M:N objects
+ # that are not yet implemented.
+ ret_dict['loadbalancers'] = []
+ if self.loadbalancer:
+ ret_dict['loadbalancers'].append({'id': self.loadbalancer.id})
+ ret_dict['sni_container_refs'] = [container.tls_container_id
+ for container in self.sni_containers]
+ ret_dict['default_tls_container_ref'] = self.default_tls_container_id
+ ret_dict['l7policies'] = [{'id': l7_policy.id}
+ for l7_policy in self.l7_policies]
+ return ret_dict
diff -crB --new-file neutron-lbaas-9.2.2.dev11-backup/neutron_lbaas/services/loadbalancer/plugin.py neutron-lbaas-9.2.2.dev11/neutron_lbaas/services/loadbalancer/plugin.py
*** neutron-lbaas-9.2.2.dev11-backup/neutron_lbaas/services/loadbalancer/plugin.py 2018-12-10 11:26:49.077180654 -0800
--- neutron-lbaas-9.2.2.dev11/neutron_lbaas/services/loadbalancer/plugin.py 2018-12-10 11:59:06.733210034 -0800
***************
*** 447,454 ****
return self.db.get_loadbalancer(context, id).to_api_dict()
def get_loadbalancers(self, context, filters=None, fields=None):
! return [loadbalancer.to_api_dict() for loadbalancer in
! self.db.get_loadbalancers(context, filters=filters)]
def _validate_tls(self, listener, curr_listener=None):
def validate_tls_container(container_ref):
--- 447,453 ----
return self.db.get_loadbalancer(context, id).to_api_dict()
def get_loadbalancers(self, context, filters=None, fields=None):
! return self.db.get_loadbalancers_as_api_dict(context, filters=filters)
def _validate_tls(self, listener, curr_listener=None):
def validate_tls_container(container_ref):
***************
*** 644,651 ****
return self.db.get_listener(context, id).to_api_dict()
def get_listeners(self, context, filters=None, fields=None):
! return [listener.to_api_dict() for listener in self.db.get_listeners(
! context, filters=filters)]
def create_pool(self, context, pool):
pool = pool.get('pool')
--- 643,650 ----
return self.db.get_listener(context, id).to_api_dict()
def get_listeners(self, context, filters=None, fields=None):
! return self.db.get_listeners_as_api_dict(
! context, filters=filters)
def create_pool(self, context, pool):
pool = pool.get('pool')
***************
*** 735,742 ****
self._call_driver_operation(context, driver.pool.delete, db_pool)
def get_pools(self, context, filters=None, fields=None):
! return [pool.to_api_dict() for pool in self.db.get_pools(
! context, filters=filters)]
def get_pool(self, context, id, fields=None):
return self.db.get_pool(context, id).to_api_dict()
--- 734,741 ----
self._call_driver_operation(context, driver.pool.delete, db_pool)
def get_pools(self, context, filters=None, fields=None):
! return self.db.get_pools_as_api_dict(
! context, filters=filters)
def get_pool(self, context, id, fields=None):
return self.db.get_pool(context, id).to_api_dict()
***************
*** 807,814 ****
if not filters:
filters = {}
filters['pool_id'] = [pool_id]
! return [mem.to_api_dict() for mem in self.db.get_pool_members(
! context, filters=filters)]
def get_pool_member(self, context, id, pool_id, fields=None):
self._check_pool_exists(context, pool_id)
--- 806,813 ----
if not filters:
filters = {}
filters['pool_id'] = [pool_id]
! return self.db.get_pool_members_as_api_dict(
! context, filters=filters)
def get_pool_member(self, context, id, pool_id, fields=None):
self._check_pool_exists(context, pool_id)
***************
*** 879,886 ****
return self.db.get_healthmonitor(context, id).to_api_dict()
def get_healthmonitors(self, context, filters=None, fields=None):
! return [hm.to_api_dict() for hm in self.db.get_healthmonitors(
! context, filters=filters)]
def stats(self, context, loadbalancer_id):
lb = self.db.get_loadbalancer(context, loadbalancer_id)
--- 878,885 ----
return self.db.get_healthmonitor(context, id).to_api_dict()
def get_healthmonitors(self, context, filters=None, fields=None):
! return self.db.get_healthmonitors_as_api_dict(
! context, filters=filters)
def stats(self, context, loadbalancer_id):
lb = self.db.get_loadbalancer(context, loadbalancer_id)
***************
*** 950,957 ****
self.db.delete_l7policy(context, id)
def get_l7policies(self, context, filters=None, fields=None):
! return [policy.to_api_dict() for policy in self.db.get_l7policies(
! context, filters=filters)]
def get_l7policy(self, context, id, fields=None):
return self.db.get_l7policy(context, id).to_api_dict()
--- 949,956 ----
self.db.delete_l7policy(context, id)
def get_l7policies(self, context, filters=None, fields=None):
! return self.db.get_l7policies_as_api_dict(
! context, filters=filters)
def get_l7policy(self, context, id, fields=None):
return self.db.get_l7policy(context, id).to_api_dict()
***************
*** 1024,1031 ****
def get_l7policy_rules(self, context, l7policy_id,
filters=None, fields=None):
self._check_l7policy_exists(context, l7policy_id)
! return [rule.to_api_dict() for rule in self.db.get_l7policy_rules(
! context, l7policy_id, filters=filters)]
def get_l7policy_rule(self, context, id, l7policy_id, fields=None):
self._check_l7policy_exists(context, l7policy_id)
--- 1023,1030 ----
def get_l7policy_rules(self, context, l7policy_id,
filters=None, fields=None):
self._check_l7policy_exists(context, l7policy_id)
! return self.db.get_l7policy_rules_as_api_dict(
! context, l7policy_id, filters=filters)
def get_l7policy_rule(self, context, id, l7policy_id, fields=None):
self._check_l7policy_exists(context, l7policy_id)
diff -crB --new-file neutron-lbaas-9.2.2.dev11-backup/neutron_lbaas/tests/unit/db/loadbalancer/test_db_loadbalancerv2.py neutron-lbaas-9.2.2.dev11/neutron_lbaas/tests/unit/db/loadbalancer/test_db_loadbalancerv2.py
*** neutron-lbaas-9.2.2.dev11-backup/neutron_lbaas/tests/unit/db/loadbalancer/test_db_loadbalancerv2.py 2017-10-09 16:40:31.000000000 -0700
--- neutron-lbaas-9.2.2.dev11/neutron_lbaas/tests/unit/db/loadbalancer/test_db_loadbalancerv2.py 2018-12-10 12:05:33.788503781 -0800
***************
*** 1005,1014 ****
}
ctx = context.get_admin_context()
port['device_owner'] = n_constants.DEVICE_OWNER_LOADBALANCERV2
- myloadbalancers = [{'name': 'lb1'}]
with mock.patch.object(manager.NeutronManager, 'get_plugin') as gp:
! self.plugin.db.get_loadbalancers = mock.Mock(
! return_value=myloadbalancers)
plugin = mock.Mock()
gp.return_value = plugin
plugin._get_port.return_value = port
--- 1005,1013 ----
}
ctx = context.get_admin_context()
port['device_owner'] = n_constants.DEVICE_OWNER_LOADBALANCERV2
with mock.patch.object(manager.NeutronManager, 'get_plugin') as gp:
! self.plugin.db.get_loadbalancer_ids = (
! mock.Mock(return_value=['1']))
plugin = mock.Mock()
gp.return_value = plugin
plugin._get_port.return_value = port
***************
*** 2373,2380 ****
lb_const.OFFLINE)
self.plugin.delete_l7policy(c, p5['l7policy']['id'])
listener_db = self.plugin.db._get_resource(
! context.get_admin_context(),
models.Listener, listener['listener']['id'])
names = ['0', '1', '2', '4', '6']
for pos in range(0, 4):
--- 2372,2380 ----
lb_const.OFFLINE)
self.plugin.delete_l7policy(c, p5['l7policy']['id'])
+ c2 = context.get_admin_context()
listener_db = self.plugin.db._get_resource(
! c2,
models.Listener, listener['listener']['id'])
names = ['0', '1', '2', '4', '6']
for pos in range(0, 4):