Hi,

On Thu, Mar 19, 2009 at 01:21:30PM +0100, Dominik Klein wrote:
> Dejan Muhamedagic wrote:
> > Hi,
> > 
> > On Wed, Mar 18, 2009 at 11:37:27AM -0700, Neil Katin wrote:
> >>
> >> Dejan Muhamedagic wrote:
> >>> Hi,
> >>>
> >>> On Tue, Mar 17, 2009 at 11:56:04AM +0530, Arun G wrote:
> >>>> Hi,
> >>>>      I observed below error message when I upgraded drbd to drbd-8.3.0 in
> >>>> heartbeat 2.1.4 cluster on 2.6.18-8.el5xen.
> >> -- snip --
> >>
> >>> Thanks for the patch. But do all supported drbd versions have the
> >>> role command?
> >>>
> >>> Thanks,
> >>>
> >>> Dejan
> >> No, only 8.3 has the change.  8.2 supports the old "state" argument, but
> >> prints a warning message out, and this warning message upsets the drbd OCF
> >> scripts parting of drbdadm's output.
> > 
> > Since versions before 8.3 don't have the role command, I suppose
> > that 8.3 actually prints the warning.
> > 
> >> drbdadm doesn't support a --version argument, but it does support a 
> >> "status"
> >> command, which has version info in it.  However, I am not sure if "drbdadm 
> >> status"
> >> is guaranteed to not block or not, so I didn't want to have the OCF script 
> >> depend
> >> on it.
> > 
> > drbdadm  | grep Version
> > 
> > works for 8.2.7 and 8.0.14, so I guess that it is available in
> > other versions too.
> > 
> >> So, I see three alternatives: add a new script "drbdadm8.3".  Add an extra 
> >> parameter
> >> saying "use role instead of status".  Or call "drbdadm status" to 
> >> dynamically detect
> >> our version.
> >>
> >> Do you see other choices?  Do you have a preference for a particular 
> >> alternative?
> >> I'm willing to code and test the patch if we can decide what we want.
> > 
> > Let's see if we can figure out the version. Adding new RA would
> > be a maintenance issue. Adding new parameter would make
> > configuration depend on particular release.
> > 
> > We could do something like this:
> > 
> > drbdadm  | grep Version | awk '{print $2}' |
> > awk -F. '
> >     $1 != 8 { exit 2; }
> 
> This should also allow version 7. People may still use v7. The drbdadm |
> grep thing also works. Tested with latest v7 in a vm.
> 
> It prints
> 
> # drbdadm  | grep Version | awk '{print $2}'
> 0.7.25
> 
> though.

OK. Can somebody please test the patch (attached).

Thanks,

Dejan

> Regards
> Dominik
diff -r 7b68f335ad30 resources/OCF/drbd
--- a/resources/OCF/drbd	Tue Mar 24 14:48:41 2009 +0100
+++ b/resources/OCF/drbd	Tue Mar 24 15:30:58 2009 +0100
@@ -232,9 +232,38 @@
 	return 1
 }
 
-
+get_drbd_ver() {
+	# returns 2 for unsupported (not 0.7.x or < 8.x)
+	# returns 1 for versions prior to 8.3.x
+	# returns 0 otherwise
+	drbdadm  | grep Version | awk '{print $2}' |
+	awk -F. '
+		{
+			if( $1 == "0" ) # 0.7.x
+				{ v1 = $2; v2 = $3; }
+			else
+				{ v1 = $1; v2 = $2; }
+		}
+		v1 < 7 { exit 2; }
+		v1 == 7 || (v1 == 8 && v2 < 3) { exit 1; } # use status
+		# otherwise use role
+	'
+}
+get_status_cmd() {
+	get_drbd_ver
+	rc=$?
+	if [ $rc -ge 2 ]; then
+		ocf_log err "Cannot parse output of 'drbdadm | grep Version'"
+		exit $OCF_ERR_GENERIC 
+	elif [ $rc -eq 1 ]; then
+		echo status
+	else
+		echo role
+	fi
+}
 drbd_get_status() {
-	DRBD_STATE=$(do_drbdadm state $RESOURCE)
+	cmd=`get_status_cmd`
+	DRBD_STATE=$(do_drbdadm "$cmd" $RESOURCE)
 	DRBD_STATE_LOCAL=$(echo $DRBD_STATE | sed -e 's#/.*##')
 	DRBD_STATE_REMOTE=$(echo $DRBD_STATE | sed -e 's#.*/##')
 	DRBD_CSTATE=$(do_drbdadm cstate $RESOURCE)
_______________________________________________
Linux-HA mailing list
Linux-HA@lists.linux-ha.org
http://lists.linux-ha.org/mailman/listinfo/linux-ha
See also: http://linux-ha.org/ReportingProblems

Reply via email to