On Tue, Sep 07, 2010 at 03:55:49PM -0400, Michael Smith wrote:
> Allow the LVM RA to handle multiple volume groups.
>
> Correct the documentation to refer to volume groups, not volumes.
>
> Allow "status" operation to skip "vgck" if so configured, in order to
> save time if CLVM is hanging.
>
> Allow an unsuccessful "stop" to be ignored if so configured, as required
> in some CLVM setups.
>
> Remove double-check to simplify "validate-all" routine.
>
> Signed-off-by: Michael Smith <[email protected]>
> + if [ -z "$@" ]
That does not work.
"$@" is expanded first, into separate words.
so you get [ -z vg00 vg01 vg02 ],
and that results in
[: too many arguments
rather do [ $# = 0 ]
> + then
> + vgdisplay 2>&1 | grep -q 'Volume group .* not found' && {
> + ocf_log info "No volume groups found"
> + return $OCF_SUCCESS
> + }
But that branch does not look functional to me anyways?
What's that supposed to do?
What if you have a single stale entry in some lvm cache?
I'd rather make "all" as well as "" a configuration error,
and not the default.
Typically, if you use LVM, you'll also have a system VG,
which you won't be able to deactivate.
> + else
> + for i in $@
> + do
> + if vgdisplay $i 2>&1 | grep -q 'Volume group .* not found'
> + then
> + ocf_log info "Volume group $i not found"
> + else
> + vgs_active="$vgs $i"
> + fi
> +
> + if [ -z "$vgs_active" ]
> + then
> + ocf_log info "No volume groups found."
> + return $OCF_SUCCESS
> + fi
> + done
> + fi
how about
vgs_active=$(
# separator / is nice, as it is not allowed in names here.
vgs --separator / -o vg_name,lv_name,lv_attr $* |
grep '.*/.*/....a' | # grep for active lvs
cut -d/ -f1 | # cut the vg_name, and uniq it.
sort -u)
> +
> + ocf_log info "Deactivating logical volumes (groups: ${vgs_active:-all})"
> + ocf_run vgchange --available ln $vgs_active
> + rc=$?
>
> - if
> - LVM_status $1
> + if [ -z "$OCF_RESKEY_checkstop" ] || ocf_is_true "$OCF_RESKEY_checkstop"
And if checkstop is false,
then you are intentionally lying to the cluster manager?
What is the use case for that?
> then
> - ocf_log err "LVM: $1 did not stop correctly"
> - return $OCF_ERR_GENERIC
> + if [ $rc -ne 0 ]
> + then
> + ocf_log err "Volume groups (${vgs_active:-all}) failed to stop"
> + return $OCF_ERR_GENERIC
> + fi
> +
> + if
> + LVM_status $1
uh? why $1, suddenly, no longer $@ ?
If only the first succeeded, you report success anyways!
BTW, why are you using $1 and $@, if VOLUMES is a global variable anyways?
> + then
> + ocf_log err "Volume groups (${vgs_active:-all}) still running after
> stop"
> + return $OCF_ERR_GENERIC
> + fi
> fi
> -
> - # TODO: This MUST run vgexport as well
What about those vgimport/export TODOs?
> -if
> - [ -z "$OCF_RESKEY_volgrpname" ]
> -then
> -# echo "You must identify the volume group name!"
> - ocf_log err "You must identify the volume group name!"
> -# usage
> - exit $OCF_ERR_ARGS
> -fi
I'd leave that in, require that either/or has to be set.
Defaulting to "all" is a bad idea, IMO.
--
: Lars Ellenberg
: LINBIT | Your Way to High Availability
: DRBD/HA support and consulting http://www.linbit.com
DRBD® and LINBIT® are registered trademarks of LINBIT, Austria.
_______________________________________________________
Linux-HA-Dev: [email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/