Optimize _make_firewall_dict_with_rules db queries
This change optimizes _make_firewall_dict_with_rules implementation by
getting rules for a firewall in one db query instead of one db query per
rule (previous implementation). It improves performance: typically on
my deployment _make_firewall_dict_with_rules for a firewall with 1000
rules takes 0.2s instead of 12s with previous implementation.
Change-Id: Ia5cd39ec4ee388fab21884d08e2b19f6f6c484d5
Closes-Bug: #1658817
(cherry picked from commit 8a97921783
)
This commit is contained in:
parent
8d1fa05693
commit
651069db85
|
@ -13,6 +13,8 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import operator
|
||||
|
||||
from neutron.callbacks import events
|
||||
from neutron.callbacks import registry
|
||||
from neutron.callbacks import resources
|
||||
|
@ -176,9 +178,10 @@ class Firewall_db_mixin(fw_ext.FirewallPluginBase, base_db.CommonDbMixin):
|
|||
firewall = self.get_firewall(context, firewall_id)
|
||||
fw_policy_id = firewall['firewall_policy_id']
|
||||
if fw_policy_id:
|
||||
fw_policy = self.get_firewall_policy(context, fw_policy_id)
|
||||
fw_rules_list = [self.get_firewall_rule(
|
||||
context, rule_id) for rule_id in fw_policy['firewall_rules']]
|
||||
fw_rules_list = self.get_firewall_rules(
|
||||
context, filters={'firewall_policy_id': [fw_policy_id]})
|
||||
fw_rules_list = sorted(
|
||||
fw_rules_list, key=operator.itemgetter('position'))
|
||||
firewall['firewall_rule_list'] = fw_rules_list
|
||||
else:
|
||||
firewall['firewall_rule_list'] = []
|
||||
|
|
Loading…
Reference in New Issue