[ovs-dev] [kernel-reload 8/8] xenserver: Introduce "force-reload-kmod" to reload kernel module.

Ethan Jackson ethan at nicira.com
Wed Feb 9 00:47:23 UTC 2011


I like this a lot.  Go ahead and merge it.

Ethan

On Tue, Feb 8, 2011 at 4:44 PM, Ben Pfaff <blp at nicira.com> wrote:
> On Tue, Feb 08, 2011 at 03:34:03PM -0800, Ben Pfaff wrote:
>> On Tue, Feb 08, 2011 at 03:24:32PM -0800, Ethan Jackson wrote:
>> > On Tue, Feb 8, 2011 at 3:18 PM, Ben Pfaff <blp at nicira.com> wrote:
>> > > On Tue, Feb 08, 2011 at 03:14:39PM -0800, Ethan Jackson wrote:
>> > >> > +if test "$#" = 0; then
>> > >> > + ? ?echo "# $0: no parameters given (use \"$0 --help\" for help)"
>> > >> > +fi
>> > >> Perhaps this should cause it to exit unsuccessfully.
>> > >
>> > > I did it this way in case the init script doesn't find any interfaces to
>> > > save. ?I guess it could avoid invoking it at all in that case.
>> >
>> > Yeah I was wondering about this.  A possible approach (which I
>> > considered mentioning but decided against it) would be to change the
>> > force_reload_kmod init script to give up when ovs-save fails (for
>> > example on my system it fails because I don't have iptables-save).
>>
>> We can probably skip iptables entirely, without an error, if
>> iptables-save is not present: Red Hat and Debian both put iptables and
>> iptables-save in the same package, so if iptables-save is not present
>> then it is unlikely that any iptables rules are configured.
>>
>> > As part of this change, we could change ovs-save to be more exacting
>> > and die with an exit code when things aren't as it expects.  This has
>> > the benefit of preventing bugs in ovs-save or configuration errors
>> > from hosing the system.
>>
>> I thought about that.  I'll take another look at doing it that way.
>
> I made some changes that move in that direction:
>
> diff --git a/utilities/ovs-save b/utilities/ovs-save
> index 76f02da..b2c726e 100755
> --- a/utilities/ovs-save
> +++ b/utilities/ovs-save
> @@ -31,6 +31,23 @@ fi
>
>  PATH=/sbin:/bin:/usr/sbin:/usr/bin
>
> +missing_program () {
> +    save_IFS=$IFS
> +    IFS=:
> +    for dir in $PATH; do
> +        IFS=$save_IFS
> +        if test -x $dir/$1; then
> +            return 1
> +        fi
> +    done
> +    IFS=$save_IFS
> +    return 0
> +}
> +if missing_program ip; then
> +    echo "$0: ip not found in $PATH" >&2
> +    exit 1
> +fi
> +
>  if test "$#" = 0; then
>     echo "# $0: no parameters given (use \"$0 --help\" for help)"
>  fi
> @@ -128,7 +145,13 @@ for dev in $devs; do
>     echo
>  done
>
> -echo "# global"
> -echo "iptables-restore <<'EOF'"
> -iptables-save
> -echo "EOF"
> +if missing_program iptables-save; then
> +    echo "# iptables-save not found in $PATH, not saving iptables state"
> +else
> +    echo "# global"
> +    echo "iptables-restore <<'EOF'"
> +    iptables-save
> +    echo "EOF"
> +fi
> +
> +exit 0
> diff --git a/xenserver/etc_init.d_openvswitch b/xenserver/etc_init.d_openvswitch
> index 582a153..a08a95d 100755
> --- a/xenserver/etc_init.d_openvswitch
> +++ b/xenserver/etc_init.d_openvswitch
> @@ -474,7 +474,11 @@ function force_reload_kmod {
>
>     script=$(mktemp)
>     action "Save interface configuration to $script" true
> -    /usr/share/openvswitch/scripts/ovs-save $ifaces > $script
> +    if ! /usr/share/openvswitch/scripts/ovs-save $ifaces > $script; then
> +        warning "Failed to save configuration, not replacing kernel module"
> +        start
> +        exit 1
> +    fi
>     chmod +x $script
>
>     action "Destroy datapaths" remove_all_dp
>




More information about the dev mailing list