From 3786d27da280ca70d5e1d2b679333776b16b1954 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Fri, 17 Sep 2010 14:37:51 -0700 Subject: [PATCH] ovs-vsctl: Remove default timeout. 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 | 11 ++++++----- utilities/ovs-vsctl.c | 2 +- xenserver/etc_init.d_openvswitch | 6 +++--- xenserver/etc_xapi.d_plugins_openvswitch-cfg-update | 6 +++--- xenserver/etc_xensource_scripts_vif | 4 ++-- ...usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py | 2 +- xenserver/usr_sbin_brctl | 2 +- ...usr_share_openvswitch_scripts_monitor-external-ids | 2 +- 9 files changed, 19 insertions(+), 18 deletions(-) diff --git a/debian/openvswitch-switch.init b/debian/openvswitch-switch.init index a933a21ae..13dea1c37 100755 --- a/debian/openvswitch-switch.init +++ b/debian/openvswitch-switch.init @@ -252,7 +252,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 7476777a8..ef080bb41 100644 --- a/utilities/ovs-vsctl.8.in +++ b/utilities/ovs-vsctl.8.in @@ -118,11 +118,12 @@ 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, or with a \fIsecs\fR of \fB0\fR, \fBovs\-vsctl\fR waits +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 4d50194aa..043530280 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 050844570..68079fcf5 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 6da86d5cd..733301868 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 f27ff5b40..88006e2c4 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 6ee4138b2..d2f6a6a3c 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 7fecc5648..5cf0b88ac 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 f91801d22..a28ce6090 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, -- 2.43.0