[ovs-dev] [PATCH] ovs-lib: Keep internal interface ip during upgrade.
Daniele Di Proietto
diproiettod at vmware.com
Wed Jun 22 02:28:10 UTC 2016
Guru made some suggestions offline, so I've sent a v2 here:
http://openvswitch.org/pipermail/dev/2016-June/073313.html
On 21/06/2016 11:49, "Daniele Di Proietto" <diproiettod at vmware.com> wrote:
>Commit 9b5422a98f81("ovs-lib: Try to call exit before killing.")
>introduced a problem where internal interfaces are destroyed and
>recreated, losing their IP address.
>
>Commit 9aad5a5a96ba("ovs-vswitchd: Preserve datapath ports across
>graceful shutdown.") fixed the problem by changing ovs-vswitchd
>to preserve the ports on `ovs-appctl exit`. Unfortunately, this fix is
>not enough during upgrade from <= 2.5.0, where an old ovs-vswitchd is
>running (without the fix) and a new ovs-lib script is performing the
>restart.
>
>The problem seem to affect both RHEL and ubuntu
>
>This commit fixes the upgrade by looking at the running ovs-vswitchd
>version and avoid using `ovs-appctl exit` for old (before 2.5.90)
>versions.
>
>Suggested-by: Gurucharan Shetty <guru at ovn.org>
>Signed-off-by: Daniele Di Proietto <diproiettod at vmware.com>
>---
> utilities/ovs-lib.in | 28 ++++++++++++++++++++++++----
> 1 file changed, 24 insertions(+), 4 deletions(-)
>
>diff --git a/utilities/ovs-lib.in b/utilities/ovs-lib.in
>index 773efb3..ec8b82a 100644
>--- a/utilities/ovs-lib.in
>+++ b/utilities/ovs-lib.in
>@@ -202,10 +202,30 @@ start_daemon () {
> stop_daemon () {
> if test -e "$rundir/$1.pid"; then
> if pid=`cat "$rundir/$1.pid"`; then
>- for action in EXIT .1 .25 .65 1 \
>- TERM .1 .25 .65 1 1 1 1 \
>- KILL 1 1 1 2 10 15 30 \
>- FAIL; do
>+
>+ actions="TERM .1 .25 .65 1 1 1 1 \
>+ KILL 1 1 1 2 10 15 30 \
>+ FAIL"
>+ graceful="EXIT .1 .25 .65 1"
>+ if [ "$1" = "ovs-vswitchd" ]; then
>+ version=`ovs-appctl -T 1 -t $rundir/$1.$pid.ctl version`
>+ version_num=`echo $version | cut -d ' ' -f 4`
>+ version_maj=`echo $version_num | cut -d '.' -f 1`
>+ version_min=`echo $version_num | cut -d '.' -f 2`
>+ version_rev=`echo $version_num | cut -d '.' -f 3`
>+
>+ # Use `ovs-appctl exit` for ovs-vswitchd only if version
>+ # is >= 2.5.90. On previous versions it's not safe, because
>+ # internal ports might lose their IP address.
>+ if [ "$version_maj" -gt 2 \
>+ -o "$version_min" -gt 5 \
>+ -o "$version_rev" -ge 90 ]; then
>+ actions="$graceful $actions"
>+ fi
>+ else
>+ actions="$graceful $actions"
>+ fi
>+ for action in $actions; do
> if pid_exists "$pid" >/dev/null 2>&1; then :; else
> return 0
> fi
>--
>2.8.1
>
More information about the dev
mailing list