From 69bed0e79bd951b4e5496cae6b3738649030b5ae Mon Sep 17 00:00:00 2001
From: Gris Ge <fge@redhat.com>
Date: Tue, 23 Jun 2020 20:28:30 +0800
Subject: [PATCH] ovs: Eliminate the repeat call of is_ovs_running()
The `validate_interface_capabilities()` is invoking `is_ovs_running()`
on every interface. Fixed by using `set()` for interface types for
duplicate types and also caching ovs daemon status.
The `NetworkManagerPlugin.get_interfaces()` is invoking
`is_ovs_running()` on every interface. Fixed by caching ovs daemon
status.
Signed-off-by: Gris Ge <fge@redhat.com>
---
libnmstate/nm/plugin.py | 3 ++-
libnmstate/validator.py | 5 +++--
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/libnmstate/nm/plugin.py b/libnmstate/nm/plugin.py
index 20fa77e..4032359 100644
--- a/libnmstate/nm/plugin.py
+++ b/libnmstate/nm/plugin.py
@@ -97,6 +97,7 @@ class NetworkManagerPlugin(NmstatePlugin):
def get_interfaces(self):
info = []
+ capabilities = self.capabilities
devices_info = [
(dev, nm_device.get_device_common_info(dev))
@@ -122,7 +123,7 @@ class NetworkManagerPlugin(NmstatePlugin):
if nm_bond.is_bond_type_id(type_id):
bondinfo = nm_bond.get_bond_info(dev)
iface_info.update(_ifaceinfo_bond(bondinfo))
- elif NmstatePlugin.OVS_CAPABILITY in self.capabilities:
+ elif NmstatePlugin.OVS_CAPABILITY in capabilities:
if nm_ovs.is_ovs_bridge_type_id(type_id):
iface_info["bridge"] = nm_ovs.get_ovs_info(
self.context, dev, devices_info
diff --git a/libnmstate/validator.py b/libnmstate/validator.py
index ee30166..02890b4 100644
--- a/libnmstate/validator.py
+++ b/libnmstate/validator.py
@@ -47,9 +47,10 @@ def validate_capabilities(state, capabilities):
def validate_interface_capabilities(ifaces_state, capabilities):
- ifaces_types = [iface_state.get("type") for iface_state in ifaces_state]
+ ifaces_types = {iface_state.get("type") for iface_state in ifaces_state}
has_ovs_capability = NmstatePlugin.OVS_CAPABILITY in capabilities
has_team_capability = NmstatePlugin.TEAM_CAPABILITY in capabilities
+ ovs_is_running = is_ovs_running()
for iface_type in ifaces_types:
is_ovs_type = iface_type in (
InterfaceType.OVS_BRIDGE,
@@ -57,7 +58,7 @@ def validate_interface_capabilities(ifaces_state, capabilities):
InterfaceType.OVS_PORT,
)
if is_ovs_type and not has_ovs_capability:
- if not is_ovs_running():
+ if not ovs_is_running:
raise NmstateDependencyError(
"openvswitch service is not started."
)
--
2.27.0