Use existing mapping instead of DB query
To Fetch associated provided and consumed policy rule set, using existing mapping instead of querying from DB Change-Id: I1afff196dbd66cd56ee5faefa67e7f7f5bea585e Closes-bug: #1387526
This commit is contained in:
@@ -28,7 +28,6 @@ from neutron.openstack.common import log as logging
|
||||
from neutron.plugins.common import constants as pconst
|
||||
from oslo.config import cfg
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy.orm import exc as sql_exc
|
||||
|
||||
from gbp.neutron.db.grouppolicy import group_policy_db as gpdb
|
||||
from gbp.neutron.db import servicechain_db # noqa
|
||||
@@ -1033,21 +1032,6 @@ class ResourceMappingDriver(api.PolicyDriver):
|
||||
self._update_sgs_on_ptg(context, ptg_id, provided_policy_rule_sets,
|
||||
consumed_policy_rule_sets, "ASSOCIATE")
|
||||
|
||||
def _get_ptgs_providing_policy_rule_set(self, session, policy_rule_set_id):
|
||||
with session.begin(subtransactions=True):
|
||||
return (session.query(
|
||||
gpdb.PTGToPRSProvidingAssociation).filter_by(
|
||||
policy_rule_set_id=policy_rule_set_id).first())
|
||||
|
||||
def _get_ptgs_consuming_policy_rule_set(self, session, policy_rule_set_id):
|
||||
try:
|
||||
with session.begin(subtransactions=True):
|
||||
return (session.query(
|
||||
gpdb.PTGToPRSConsumingAssociation).filter_by(
|
||||
policy_rule_set_id=policy_rule_set_id).all())
|
||||
except sql_exc.NoResultFound:
|
||||
return None
|
||||
|
||||
# updates sg rules corresponding to a policy rule
|
||||
def _update_policy_rule_sg_rules(self, context, policy_rule_sets,
|
||||
old_policy_rule, new_policy_rule,
|
||||
@@ -1097,12 +1081,12 @@ class ResourceMappingDriver(api.PolicyDriver):
|
||||
|
||||
def _handle_redirect_action(self, context, policy_rule_sets):
|
||||
for policy_rule_set_id in policy_rule_sets:
|
||||
ptgs_consuming_policy_rule_set = (
|
||||
self._get_ptgs_consuming_policy_rule_set(
|
||||
context._plugin_context._session, policy_rule_set_id))
|
||||
ptg_providing_prs = (
|
||||
self._get_ptgs_providing_policy_rule_set(
|
||||
context._plugin_context._session, policy_rule_set_id))
|
||||
policy_rule_set = context._plugin.get_policy_rule_set(
|
||||
context._plugin_context, policy_rule_set_id)
|
||||
ptgs_consuming_policy_rule_set = policy_rule_set[
|
||||
'consuming_policy_target_groups']
|
||||
ptg_providing_prs = policy_rule_set[
|
||||
'providing_policy_target_groups']
|
||||
|
||||
# Create the ServiceChain Instance when we have both Provider and
|
||||
# consumer PTGs. If Labels are available, they have to be applied
|
||||
@@ -1111,8 +1095,6 @@ class ResourceMappingDriver(api.PolicyDriver):
|
||||
not ptg_providing_prs):
|
||||
continue
|
||||
|
||||
policy_rule_set = context._plugin.get_policy_rule_set(
|
||||
context._plugin_context, policy_rule_set_id)
|
||||
for rule_id in policy_rule_set.get('policy_rules'):
|
||||
policy_rule = context._plugin.get_policy_rule(
|
||||
context._plugin_context, rule_id)
|
||||
@@ -1125,20 +1107,22 @@ class ResourceMappingDriver(api.PolicyDriver):
|
||||
ptgs_consuming_policy_rule_set):
|
||||
ptg_chain_map = self._get_ptg_servicechain_mapping(
|
||||
context._plugin_context.session,
|
||||
ptg_providing_prs.policy_target_group_id,
|
||||
ptg_consuming_prs.policy_target_group_id)
|
||||
ptg_providing_prs[0],
|
||||
ptg_consuming_prs)
|
||||
if ptg_chain_map:
|
||||
break # one chain between a pair of PTGs
|
||||
sc_instance = self._create_servicechain_instance(
|
||||
context, policy_action.get("action_value"),
|
||||
ptg_providing_prs.policy_target_group_id,
|
||||
ptg_consuming_prs.policy_target_group_id,
|
||||
# REVISIT(Magesh): Handle multiple providing
|
||||
# policy rule set bug/1387527
|
||||
ptg_providing_prs[0],
|
||||
ptg_consuming_prs,
|
||||
classifier_id)
|
||||
chain_instance_id = sc_instance['id']
|
||||
self._set_ptg_servicechain_instance_mapping(
|
||||
context._plugin_context.session,
|
||||
ptg_providing_prs.policy_target_group_id,
|
||||
ptg_consuming_prs.policy_target_group_id,
|
||||
ptg_providing_prs[0],
|
||||
ptg_consuming_prs,
|
||||
chain_instance_id)
|
||||
break
|
||||
|
||||
|
||||
Reference in New Issue
Block a user