Skip to content

Commit

Permalink
ovs-vsctl: Remove default timeout.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
blp committed Sep 17, 2010
1 parent 4fefc29 commit 6b7b9d3
Show file tree
Hide file tree
Showing 9 changed files with 19 additions and 18 deletions.
2 changes: 1 addition & 1 deletion debian/openvswitch-switch.init
Original file line number Diff line number Diff line change
Expand Up @@ -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 --
Expand Down
11 changes: 6 additions & 5 deletions utilities/ovs-vsctl.8.in
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion utilities/ovs-vsctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -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[];
Expand Down
6 changes: 3 additions & 3 deletions xenserver/etc_init.d_openvswitch
Original file line number Diff line number Diff line change
Expand Up @@ -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" \
Expand Down Expand Up @@ -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

Expand Down
6 changes: 3 additions & 3 deletions xenserver/etc_xapi.d_plugins_openvswitch-cfg-update
Original file line number Diff line number Diff line change
Expand Up @@ -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 = ""
Expand All @@ -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",
Expand Down
4 changes: 2 additions & 2 deletions xenserver/etc_xensource_scripts_vif
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down
2 changes: 1 addition & 1 deletion xenserver/usr_sbin_brctl
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit 6b7b9d3

Please sign in to comment.