commit 0b1500ff74341c54c3da4412eb8ee8db9c58cf41 Author: Nathan Scott Date: Tue Feb 11 09:54:07 2014 +1100 Allow PMDA Install scripts to be run even when pmcd is stopped. Following the Install recipe from the GFS2 PMDA man page, users can run into difficulty if pmcd is not running first. There's no mention of that, and the error message is cryptic. This fix extends the generic PMDA installation process to allow any PMDA to kick-start the pmcd process if it needs to. The one wrinkle there is a chicken-and-egg with the namespace setup, but that's tackled via addition of a Rebuild call in the right spot. Reported by Andrew Price, tested by Paul Evans, myself and now also PCP QA test 755. Resolves Red Hat bug #1062443. diff --git a/qa/755 b/qa/755 new file mode 100755 index 0000000..be5ae14 --- /dev/null +++ b/qa/755 @@ -0,0 +1,98 @@ +#!/bin/sh +# PCP QA Test No. 755 +# Exercise the Apache PMDA Install/Remove, as well as the +# mechanism by which a PMDA can be installed with no pmcd +# process running. +# +# Copyright (c) 2014 Red Hat. +# + +seq=`basename $0` +echo "QA output created by $seq" + +# get standard environment, filters and checks +. ./common.product +. ./common.filter +. ./common.check + +status=1 # failure is the default! +done_clean=false +rm -f $seq.full + +install_on_cleanup=false +pminfo apache >/dev/null 2>&1 && install_on_cleanup=true + +_cleanup() +{ + if $done_clean + then + : + else + [ -f $tmp.pmcd.conf ] && $sudo mv $tmp.pmcd.conf $PCP_PMCDCONF_PATH + rm -f $tmp.* + $sudo $PCP_RC_DIR/pcp restart | _filter_pcp_start + _wait_for_pmcd + _wait_for_pmlogger + if $install_on_cleanup + then + ( cd $PCP_PMDAS_DIR/apache; $sudo ./Install /dev/null 2>&1 ) + else + ( cd $PCP_PMDAS_DIR/apache; $sudo ./Remove >/dev/null 2>&1 ) + fi + done_clean=true + fi +} + +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_filter_apache() +{ + # cull message resulting from no running httpd + grep -v 'Information not currently available' +} + +# real QA test starts here +home=$PCP_PMDAS_DIR +iam=apache +cd $home/$iam +unset ROOT MAKEFLAGS + +# copy the pmcd config file to restore state later. +cp $PCP_PMCDCONF_PATH $tmp.pmcd.conf + +# start from a known starting point +$sudo ./Remove >/dev/null 2>&1 +$sudo $PCP_RC_DIR/pmcd stop + +echo +echo "=== $iam agent installation ===" +$sudo ./Install $tmp.out 2>&1 +# Check apache metrics have appeared ... X metrics and Y values +_filter_pmda_install <$tmp.out \ +| sed \ + -e '/^Waiting for pmcd/s/\.\.\.[. ]*$/DOTS/' \ + -e 's/[0-9][0-9]* warnings, //' \ +| $PCP_AWK_PROG ' +/Check apache metrics have appeared/ { if ($7 >= 20 && $7 <= 80) $7 = "X" + if ($10 >= 0 && $10 <= 80) $10 = "Y" + } + { print }' + +# pmcd should have been started by the Install process - check +if pminfo -v $iam > $tmp.info 2> $tmp.err +then + : +else + echo "... failed! ... here is the Install log ..." + cat $tmp.out +fi +cat $tmp.info $tmp.err | _filter_apache + +echo +echo "=== remove $iam agent ===" +$sudo ./Remove >$tmp.out 2>&1 +_filter_pmda_remove <$tmp.out + +# success, all done +status=0 +exit diff --git a/qa/755.out b/qa/755.out new file mode 100644 index 0000000..50b4b3b --- /dev/null +++ b/qa/755.out @@ -0,0 +1,23 @@ +QA output created by 755 +Waiting for pmcd to terminate ... + +=== apache agent installation === +Installing the "apache" Performance Metrics Domain Agent (PMDA) ... + +Apache port number [80]? Updating the Performance Metrics Name Space (PMNS) ... +Terminate PMDA if already installed ... +[...install files, make output...] +Updating the PMCD control file, and notifying PMCD ... +Starting pmcd ... +Starting pmlogger ... +Check apache metrics have appeared ... X metrics and Y values + +=== remove apache agent === +Culling the Performance Metrics Name Space ... +apache ... done +Updating the PMCD control file, and notifying PMCD ... +[...removing files...] +Check apache metrics have gone away ... OK +Waiting for pmcd to terminate ... +Starting pmcd ... +Starting pmlogger ... diff --git a/qa/group b/qa/group index bb752f1..0cb02fe 100644 --- a/qa/group +++ b/qa/group @@ -130,6 +130,7 @@ pmda pmda.install # Assorted PMDAs +pmda.apache pmda.cisco pmda.environ pmda.gfs2 @@ -888,6 +889,7 @@ avahi 748 pmlogrewrite pmda.mysql local oss 749 pmcd local oss 750 pmda.rpm local oss +755 pmda.apache pmda.install local oss 768 pmlogextract local oss 775 sanity pmfind local oss 783 pmda.rpm local oss diff --git a/src/pmcd/pmdaproc.sh b/src/pmcd/pmdaproc.sh index 43cffa7..bab0161 100644 --- a/src/pmcd/pmdaproc.sh +++ b/src/pmcd/pmdaproc.sh @@ -1163,6 +1163,22 @@ _install() # Install the namespace # + if [ ! -f $NAMESPACE ] + then + # We may be installing an agent right after an install - + # before pmcd startup, which has a pre-execution step of + # rebuilding the namespace root. Do so now. + if [ -x $PMNSDIR/Rebuild ] + then + echo "$prog: cannot Rebuild the PMNS for \"$NAMESPACE\"" + exit 1 + fi + cd $PMNSDIR + ./Rebuild -dus + cd $__here + forced_restart=true + fi + for __n in $pmns_name do if pminfo $__ns_opt $__n >/dev/null 2>&1