[ovs-dev] [PATCH] ovs-vsctl: Remove default timeout.
Ben Pfaff
blp at nicira.com
Fri Sep 17 21:10:15 UTC 2010
On overloaded XenServers the current default timeout of 5 seconds can
occasionally be reached, which causes VM startup to fail. This commit
fixes the problem by removing the default timeout and changing each
invocation of ovs-vsctl within the tree to specify its own timeout,
if appropriate.
Bug #3573.
---
debian/openvswitch-switch.init | 2 +-
utilities/ovs-vsctl.8.in | 10 +++++-----
utilities/ovs-vsctl.c | 2 +-
xenserver/etc_init.d_openvswitch | 6 +++---
.../etc_xapi.d_plugins_openvswitch-cfg-update | 6 +++---
xenserver/etc_xensource_scripts_vif | 4 ++--
..._lib_xsconsole_plugins-base_XSFeatureVSwitch.py | 2 +-
xenserver/usr_sbin_brctl | 2 +-
..._share_openvswitch_scripts_monitor-external-ids | 2 +-
9 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/debian/openvswitch-switch.init b/debian/openvswitch-switch.init
index d860630..34b5604 100755
--- a/debian/openvswitch-switch.init
+++ b/debian/openvswitch-switch.init
@@ -257,7 +257,7 @@ case "$1" in
echo " ERROR."
fi
- ovs-vsctl --no-wait init
+ ovs-vsctl --no-wait --timeout=5 init
# Start ovs-vswitchd.
set --
diff --git a/utilities/ovs-vsctl.8.in b/utilities/ovs-vsctl.8.in
index 7476777..f0c5838 100644
--- a/utilities/ovs-vsctl.8.in
+++ b/utilities/ovs-vsctl.8.in
@@ -118,11 +118,11 @@ Prevents \fBovs\-vsctl\fR from actually modifying the database.
.
.IP "\fB\-t \fIsecs\fR"
.IQ "\fB\-\-timeout=\fIsecs\fR"
-Limits runtime to approximately \fIsecs\fR seconds. A value of
-zero will cause \fBovs\-vsctl\fR to wait forever. If the timeout expires,
-\fBovs\-vsctl\fR will exit with a \fBSIGALRM\fR signal. If this option is
-not used, \fBovs\-vsctl\fR uses a timeout of five seconds.
-(A timeout would normally happen only if the database cannot be contacted.)
+By default, \fBovs\-vsctl\fR wait forever for a response from the
+database. This option limits runtime to approximately \fIsecs\fR
+seconds. If the timeout expires, \fBovs\-vsctl\fR will exit with a
+\fBSIGALRM\fR signal. (A timeout would normally happen only if the
+database cannot be contacted, or if the system is overloaded.)
.
.SS "Public Key Infrastructure Options"
.so lib/ssl.man
diff --git a/utilities/ovs-vsctl.c b/utilities/ovs-vsctl.c
index 4d50194..0435302 100644
--- a/utilities/ovs-vsctl.c
+++ b/utilities/ovs-vsctl.c
@@ -85,7 +85,7 @@ static bool dry_run;
static bool wait_for_reload = true;
/* --timeout: Time to wait for a connection to 'db'. */
-static int timeout = 5;
+static int timeout;
/* All supported commands. */
static const struct vsctl_command_syntax all_commands[];
diff --git a/xenserver/etc_init.d_openvswitch b/xenserver/etc_init.d_openvswitch
index 0508445..68079fc 100755
--- a/xenserver/etc_init.d_openvswitch
+++ b/xenserver/etc_init.d_openvswitch
@@ -293,7 +293,7 @@ EOF
function set_system_ids {
if [ -f /etc/xensource-inventory ]; then
action "Configuring Open vSwitch system IDs" true
- $vsctl --no-wait set Open_vSwitch . \
+ $vsctl --no-wait --timeout=5 set Open_vSwitch . \
external-ids:system-type="$PRODUCT_BRAND" \
external-ids:system-version="$PRODUCT_VERSION-$BUILD_NUMBER" \
external-ids:system-id="$INSTALLATION_UUID" \
@@ -329,11 +329,11 @@ function start {
fi
start_ovsdb_server
- $vsctl --no-wait init
+ $vsctl --no-wait --timeout=5 init
if [ ! -e /var/run/openvswitch.booted ]; then
touch /var/run/openvswitch.booted
for bridge in $($vsctl list-br); do
- $vsctl --no-wait del-br $bridge
+ $vsctl --no-wait --timeout=5 del-br $bridge
done
fi
diff --git a/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update b/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update
index 6da86d5..7333018 100755
--- a/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update
+++ b/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update
@@ -111,7 +111,7 @@ def setControllerCfg(controller):
'managers="ssl:' + controller + ':6632"'])
def vswitchCfgQuery(action_args):
- cmd = [vsctl, "-vANY:console:emer"] + action_args
+ cmd = [vsctl, "--timeout=5", "-vANY:console:emer"] + action_args
output = subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()
if len(output) == 0 or output[0] == None:
output = ""
@@ -120,14 +120,14 @@ def vswitchCfgQuery(action_args):
return output
def vswitchCfgMod(action_args):
- cmd = [vsctl, "-vANY:console:emer"] + action_args
+ cmd = [vsctl, "--timeout=5", "-vANY:console:emer"] + action_args
exitcode = subprocess.call(cmd)
if exitcode != 0:
raise XenAPIPlugin.Failure("VSWITCH_CONFIG_MOD_FAILURE",
[ str(exitcode) , str(action_args) ])
def emergency_reset(session, args):
- cmd = [vsctl, "emer-reset"]
+ cmd = [vsctl, "--timeout=5", "emer-reset"]
exitcode = subprocess.call(cmd)
if exitcode != 0:
raise XenAPIPlugin.Failure("VSWITCH_EMER_RESET_FAILURE",
diff --git a/xenserver/etc_xensource_scripts_vif b/xenserver/etc_xensource_scripts_vif
index f27ff5b..88006e2 100755
--- a/xenserver/etc_xensource_scripts_vif
+++ b/xenserver/etc_xensource_scripts_vif
@@ -165,7 +165,7 @@ add_to_bridge()
local vif_details=$(handle_vswitch_vif_details $bridge)
fi
- $vsctl -- --if-exists del-port $dev -- add-port $bridge $dev $vif_details
+ $vsctl --timeout=30 -- --if-exists del-port $dev -- add-port $bridge $dev $vif_details
;;
esac
@@ -182,7 +182,7 @@ remove_from_bridge()
# If ovs-brcompatd is running, it might already have deleted the
# port. Use --if-exists to suppress the error that would otherwise
# arise in that case.
- $vsctl -- --if-exists del-port $dev
+ $vsctl --timeout=30 -- --if-exists del-port $dev
;;
esac
}
diff --git a/xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py b/xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py
index 6ee4138..d2f6a6a 100644
--- a/xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py
+++ b/xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py
@@ -79,7 +79,7 @@ class VSwitchConfig:
@staticmethod
def Get(action):
try:
- arg = [vsctl, "-vANY:console:emer"] + action.split()
+ arg = [vsctl, "--timeout=30", "-vANY:console:emer"] + action.split()
output = ShellPipe(arg).Stdout()
except StandardError, e:
XSLogError("config retrieval error: " + str(e))
diff --git a/xenserver/usr_sbin_brctl b/xenserver/usr_sbin_brctl
index 7fecc56..5cf0b88 100755
--- a/xenserver/usr_sbin_brctl
+++ b/xenserver/usr_sbin_brctl
@@ -35,7 +35,7 @@ def delegate():
def call_vsctl(cmd, arg=""):
database = '--db=' + OVSDB_SERVER
- command = [VSCTL, database, cmd]
+ command = [VSCTL, '--timeout=30', database, cmd]
if (arg):
command.append(arg)
return subprocess.Popen(command, stdout=subprocess.PIPE).communicate()[0].split()
diff --git a/xenserver/usr_share_openvswitch_scripts_monitor-external-ids b/xenserver/usr_share_openvswitch_scripts_monitor-external-ids
index f91801d..a28ce60 100755
--- a/xenserver/usr_share_openvswitch_scripts_monitor-external-ids
+++ b/xenserver/usr_share_openvswitch_scripts_monitor-external-ids
@@ -98,7 +98,7 @@ def get_iface_id(if_name, default=None):
def set_external_id(table, record, key, value):
col = 'external-ids:"' + key + '"="' + value + '"'
- cmd = [vsctl, "-vANY:console:emer", "set", table, record, col]
+ cmd = [vsctl, "--timeout=30", "-vANY:console:emer", "set", table, record, col]
exitcode = subprocess.call(cmd)
if exitcode != 0:
syslog.syslog(syslog.LOG_WARNING,
--
1.7.1
More information about the dev
mailing list