Note: "permalinks" may not be as permanent as we would like,
direct links of old sources may well be a few messages off.
Hi Lars,
looking at the patch I'm pretty sure that there is another
bug lurking around.
I made a diff on the drbd ocf resource agent between version
8.9.2 and 8.9.3.:
-------------------8<-------------------------
--- ./ocf/resource.d/linbit/drbd 2015-06-30 09:40:15.787666004 +0200
+++ ./ocf/resource.d/linbit/drbd.8.9.3 2015-06-30 15:13:58.086771560 +0200
@@ -308,7 +308,7 @@
DRBD_DSTATE_LOCAL=()
DRBD_DSTATE_REMOTE=()
- eval "$($DRBDSETUP "$DRBD_RESOURCE" sh-status)"
+ eval "$($DRBDADM sh-status "$DRBD_RESOURCE")"
# if there was no output at all, or a weird output
# make sure the status arrays won't be empty.
@@ -916,11 +916,11 @@
check_binary $DRBDSETUP
# XXX I really take cibadmin, sed, grep, etc. for granted.
- local VERSION DRBDADM_VERSION_CODE=0
+ local VERSION DRBD_KERNEL_VERSION_CODE=0
if VERSION="$($DRBDADM --version 2>/dev/null)"; then
eval $VERSION
fi
- if (( $DRBDADM_VERSION_CODE >= 0x080400 )); then
+ if (( $DRBD_KERNEL_VERSION_CODE >= 0x080400 )); then
DRBD_HAS_MULTI_VOLUME=true
fi
check_crm_feature_set
@@ -1037,6 +1037,7 @@
for i in $OCF_RESKEY_adjust_master_score; do
[[ $i = *[!0-9]* ]] && fallback=true && ocf_log err "BAD adjust_master_score value $i ; falling back to default"
[[ $j && $i -lt $j ]] && fallback=true && ocf_log err "BAD adjust_master_score value $j > $i ; falling back to default"
+ j=$i
n=$(( n+1 ))
done
[[ $n != 4 ]] && fallback=true && ocf_log err "Not enough adjust_master_score values ($n != 4); falling back to default"
-------------------8<-------------------------
I'm pretty sure that the intersting part is the first change
from using 'drbdadm sh-status $RES' instead of 'drbdsetup $RES sh-status'.
When I look at the output of 'drbdadm sh-status $RES' I get a warning
on STDERR: "This command will ignore resource names!"
When I look at the output I guess that the shell variables API
is different between these two. I do have two multivolume resources
in my cluster. While I get one assignemnt per variable in the
"good" case I get severals lines in the "bad" case. Depending on
the sequence of the evaluated lines I get bad status reported back
to the ocf agent and the ocf agent starts to do wrong things based
on that bad information.
Hopefully this helps.
Best regards
Andreas Mock
> -----Ursprüngliche Nachricht-----
> Von: drbd-user-bounces at lists.linbit.com [mailto:drbd-user-
> bounces at lists.linbit.com] Im Auftrag von Lars Ellenberg
> Gesendet: Dienstag, 30. Juni 2015 14:09
> An: drbd-user at lists.linbit.com
> Betreff: Re: [DRBD-user] Pacemaker resource start failure in combination
> of drbd-utils-8.9.3 and drbd-8.4.6
>
> On Tue, Jun 30, 2015 at 11:14:01AM +0200, Lars Ellenberg wrote:
> > On Tue, Jun 30, 2015 at 05:57:17PM +0900, Hiroshi Fujishima wrote:
> > > >>>>> In <20150630082043.GH7381 at soda.linbit>
> > > >>>>> Lars Ellenberg <lars.ellenberg at linbit.com> wrote:
> > > > On Tue, Jun 30, 2015 at 10:16:42AM +0200, Lars Ellenberg wrote:
> > > > > On Tue, Jun 30, 2015 at 09:46:49AM +0900, Hiroshi Fujishima wrote:
> > > > > > Hello
> > > > > >
> > > > > > In combination of drbd-utils-8.9.3 and drbd-8.4.6, the following
> > > > > > command failed to start drbd resource.
> > > > > >
> > > > > > # systemctl stop pacemaker
> > > > > > # rmmod drbd
> > > > > > # systemctl start pacemaker
> > > > > >
> > > > > > # crm_mon
> > > > > > Failed actions:
> > > > > > res_drbd_r0_start_0 on sac-tkh-sv002 'unknown error' (1):
> call=7, status=complete, last-rc-change='Tue Jun 30 09:33:29 2015',
> queued=0ms, exec=67ms
> > > > > >
> > > > > > Jun 30 09:33:29 sac-tkh-sv002 drbd(res_drbd_r0)[26761]: ERROR:
> r0: Called drbdadm -c /etc/drbd.conf syncer r0
>
> Try this:
>
> From 07289b456d662379d36d964742ea71331933d1cb Mon Sep 17 00:00:00 2001
> From: Lars Ellenberg <lars.ellenberg at linbit.com>
> Date: Tue, 30 Jun 2015 11:51:41 +0200
> Subject: [PATCH] drbd.ocf: fix drbd module version detection of unloaded
> module
>
> ---
> scripts/drbd.ocf | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
>
> diff --git a/scripts/drbd.ocf b/scripts/drbd.ocf
> index 0733a8d..e339841 100644
> --- a/scripts/drbd.ocf
> +++ b/scripts/drbd.ocf
> @@ -926,6 +926,18 @@ drbd_validate_all () {
> if VERSION="$($DRBDADM --version 2>/dev/null)"; then
> eval $VERSION
> fi
> + if (( $DRBD_KERNEL_VERSION_CODE == 0x0 )) ; then
> + # Maybe the DRBD module was not loaded (yet).
> + # I don't want to load the module here,
> + # maybe this is just a probe or stop.
> + # It will be loaded on "start", though.
> + # Instead, look at modinfo output.
> + # Newer drbdadm does this implicitly, but may reexec older
> + # drbdadm versions for compatibility reasons.
> + DRBD_KERNEL_VERSION_CODE=$(printf "0x%02x%02x%02x" $(
> + modinfo -F version drbd |
> + sed -ne 's/^\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\).*$/\1
> \2 \3/p'))
> + fi
> if (( $DRBD_KERNEL_VERSION_CODE >= 0x080400 )); then
> DRBD_HAS_MULTI_VOLUME=true
> fi
> --
> 1.9.1
>
> _______________________________________________
> drbd-user mailing list
> drbd-user at lists.linbit.com
> http://lists.linbit.com/mailman/listinfo/drbd-user