← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1657358] Re: Create fw_policy with used fw_rule hit internal error

 

Reviewed:  https://review.openstack.org/421734
Committed: https://git.openstack.org/cgit/openstack/neutron-fwaas/commit/?id=89c9437b4c39ce9da5bd039a15ef1d79f45bea48
Submitter: Jenkins
Branch:    master

commit 89c9437b4c39ce9da5bd039a15ef1d79f45bea48
Author: ZhaoBo <zhaobo6@xxxxxxxxxx>
Date:   Wed Jan 18 16:04:08 2017 +0800

    Fix AssertionError raised from _set_rules_for_policy
    
    In this function process, once a fw_policy create/update, we should focus
    on this fw_policy related resources only, such as its fw_rules. But when add
    the relationship into fw_policy, it will query all the related rows with
    the rule_ids. This may get the other policy_rule row in
    firewallpolicyruleAssociation table. So this patch add the
    'firewall_policy_id' into filter, it will get the result owned by the
    policy you create/update.
    
    Change-Id: I843bdbe463ec83c752e07cd3e7aa4f52c7038ede
    Closes-Bug: #1657358


** Changed in: neutron
       Status: In Progress => Fix Released

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/1657358

Title:
  Create fw_policy with used fw_rule hit internal error

Status in neutron:
  Fix Released

Bug description:
  Hit internal error when create fw_policy with exist fw_rule.

  If there is a policy with this fw_rule already, new request create an
  new policy with the fw_rule, neutron-server will hit internal error.

  
  repo
  -----
  1. create a fw_ruleA
  2. create a fw_policyX with fw_ruleA
  3. create another fw_policyY with fw_ruleA    ==== ERROR

  
  2017-01-16 16:01:20.220 ERROR neutron.api.v2.resource [req-d4fa6f6b-852d-4233-a39b-9ae73dbd8c45 admin a4d7fafd8b6e42f5aa1de690e360d285] create failed: No details.
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource Traceback (most recent call last):
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/opt/stack/neutron/neutron/api/v2/resource.py", line 79, in resource
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     result = method(request=request, **args)
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/opt/stack/neutron/neutron/api/v2/base.py", line 438, in create
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     return self._create(request, body, **kwargs)
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/opt/stack/neutron/neutron/db/api.py", line 92, in wrapped
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     setattr(e, '_RETRY_EXCEEDED', True)
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 220, in __exit__
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     self.force_reraise()
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 196, in force_reraise
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     six.reraise(self.type_, self.value, self.tb)
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/opt/stack/neutron/neutron/db/api.py", line 88, in wrapped
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     return f(*args, **kwargs)
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/oslo_db/api.py", line 151, in wrapper
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     ectxt.value = e.inner_exc
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 220, in __exit__
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     self.force_reraise()
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 196, in force_reraise
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     six.reraise(self.type_, self.value, self.tb)
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/oslo_db/api.py", line 139, in wrapper
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     return f(*args, **kwargs)
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/opt/stack/neutron/neutron/db/api.py", line 128, in wrapped
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     traceback.format_exc())
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 220, in __exit__
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     self.force_reraise()
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 196, in force_reraise
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     six.reraise(self.type_, self.value, self.tb)
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/opt/stack/neutron/neutron/db/api.py", line 123, in wrapped
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     return f(*dup_args, **dup_kwargs)
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/opt/stack/neutron/neutron/api/v2/base.py", line 551, in _create
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     obj = do_create(body)
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/opt/stack/neutron/neutron/api/v2/base.py", line 533, in do_create
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     request.context, reservation.reservation_id)
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 220, in __exit__
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     self.force_reraise()
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 196, in force_reraise
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     six.reraise(self.type_, self.value, self.tb)
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/opt/stack/neutron/neutron/api/v2/base.py", line 526, in do_create
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     return obj_creator(request.context, **kwargs)
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/opt/stack/neutron-fwaas/neutron_fwaas/db/firewall/v2/firewall_db_v2.py", line 641, in create_firewall_policy
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     self._set_rules_for_policy(context, fwp_db, fwp)
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/opt/stack/neutron-fwaas/neutron_fwaas/db/firewall/v2/firewall_db_v2.py", line 627, in _set_rules_for_policy
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     fwp_db.rule_associations.reorder()
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 553, in __exit__
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     self.rollback()
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py", line 60, in __exit__
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     compat.reraise(exc_type, exc_value, exc_tb)
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 550, in __exit__
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     self.commit()
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 455, in commit
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     self._prepare_impl()
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 435, in _prepare_impl
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     self.session.flush()
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2080, in flush
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     self._flush(objects)
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2198, in _flush
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     transaction.rollback(_capture_exception=True)
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py", line 60, in __exit__
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     compat.reraise(exc_type, exc_value, exc_tb)
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2162, in _flush
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     flush_context.execute()
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 373, in execute
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     rec.execute(self)
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 487, in execute
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     self.dependency_processor.process_saves(uow, states)
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/dependency.py", line 558, in process_saves
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     uowcommit, False)
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/dependency.py", line 575, in _synchronize
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     sync.clear(dest, self.mapper, self.prop.synchronize_pairs)
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource   File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/sync.py", line 74, in clear
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource     (r, orm_util.state_str(dest))
  2017-01-16 16:01:20.220 TRACE neutron.api.v2.resource AssertionError: Dependency rule tried to blank-out primary key column 'firewall_policy_rule_associations_v2.firewall_policy_id' on instance '<FirewallPolicyRuleAssociation at 0x7fb4729b7590>'

To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/1657358/+subscriptions


References