NSX-V3: Fix QoS delete
In commit I1f863bf91f712d4b12db753b13cc6b842b6918a4 the qos driver stopped using the message queue. So the delete callback is now called in the plugin context, after the qos policy is already deleted. This means that we cannot access the backend profile id in the DB, since it was already deleted too. The fix is to remove the foreign key constraint from the mapping table, and manually delete the entry. Change-Id: I28e1c7c5ad0bb487d9c19ce76e2f7820f029678e
This commit is contained in:
parent
653b9bef83
commit
70fbe736b7
@ -374,6 +374,11 @@ def get_switch_profile_by_qos_policy(session, qos_policy_id):
|
|||||||
raise nsx_exc.NsxQosPolicyMappingNotFound(policy=qos_policy_id)
|
raise nsx_exc.NsxQosPolicyMappingNotFound(policy=qos_policy_id)
|
||||||
|
|
||||||
|
|
||||||
|
def delete_qos_policy_profile_mapping(session, qos_policy_id):
|
||||||
|
return (session.query(nsx_models.QosPolicySwitchProfile).
|
||||||
|
filter_by(qos_policy_id=qos_policy_id).delete())
|
||||||
|
|
||||||
|
|
||||||
# NSXv3 Port Mirror Sessions DB methods.
|
# NSXv3 Port Mirror Sessions DB methods.
|
||||||
def add_port_mirror_session_mapping(session, tf_id, pm_session_id):
|
def add_port_mirror_session_mapping(session, tf_id, pm_session_id):
|
||||||
with session.begin(subtransactions=True):
|
with session.begin(subtransactions=True):
|
||||||
|
@ -1 +1 @@
|
|||||||
8c0a81a07691
|
84ceffa27115
|
@ -0,0 +1,35 @@
|
|||||||
|
# Copyright 2017 VMware, Inc.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
"""remove the foreign key constrain from nsxv3_qos_policy_mapping
|
||||||
|
|
||||||
|
Revision ID: 84ceffa27115
|
||||||
|
Revises: 8c0a81a07691
|
||||||
|
Create Date: 2017-03-15 11:47:09.450116
|
||||||
|
"""
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = '84ceffa27115'
|
||||||
|
down_revision = '8c0a81a07691'
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
from sqlalchemy.engine import reflection
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
table_name = 'neutron_nsx_qos_policy_mappings'
|
||||||
|
inspector = reflection.Inspector.from_engine(op.get_bind())
|
||||||
|
fk_constraint = inspector.get_foreign_keys(table_name)[0]
|
||||||
|
op.drop_constraint(fk_constraint.get('name'), table_name,
|
||||||
|
type_='foreignkey')
|
@ -355,8 +355,6 @@ class QosPolicySwitchProfile(model_base.BASEV2, models.TimestampMixin):
|
|||||||
# Maps neutron qos policy identifiers to NSX-V3 switch profile identifiers
|
# Maps neutron qos policy identifiers to NSX-V3 switch profile identifiers
|
||||||
__tablename__ = 'neutron_nsx_qos_policy_mappings'
|
__tablename__ = 'neutron_nsx_qos_policy_mappings'
|
||||||
qos_policy_id = sa.Column(sa.String(36),
|
qos_policy_id = sa.Column(sa.String(36),
|
||||||
sa.ForeignKey('qos_policies.id',
|
|
||||||
ondelete='CASCADE'),
|
|
||||||
primary_key=True)
|
primary_key=True)
|
||||||
switch_profile_id = sa.Column(sa.String(36), nullable=False)
|
switch_profile_id = sa.Column(sa.String(36), nullable=False)
|
||||||
|
|
||||||
|
@ -118,7 +118,10 @@ class QosNotificationsHandler(object):
|
|||||||
def delete_policy(self, context, policy_id):
|
def delete_policy(self, context, policy_id):
|
||||||
profile_id = nsx_db.get_switch_profile_by_qos_policy(
|
profile_id = nsx_db.get_switch_profile_by_qos_policy(
|
||||||
context.session, policy_id)
|
context.session, policy_id)
|
||||||
|
# delete the profile id from the backend and the DB
|
||||||
self._nsxlib_qos.delete(profile_id)
|
self._nsxlib_qos.delete(profile_id)
|
||||||
|
nsx_db.delete_qos_policy_profile_mapping(
|
||||||
|
context.session, policy_id)
|
||||||
|
|
||||||
def update_policy(self, context, policy_id, policy):
|
def update_policy(self, context, policy_id, policy):
|
||||||
profile_id = nsx_db.get_switch_profile_by_qos_policy(
|
profile_id = nsx_db.get_switch_profile_by_qos_policy(
|
||||||
|
Loading…
Reference in New Issue
Block a user