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):
openSUSE Build Service is sponsored by