File: 882

package info (click to toggle)
pcp 7.1.0-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 252,748 kB
  • sloc: ansic: 1,483,656; sh: 182,366; xml: 160,462; cpp: 83,813; python: 24,980; perl: 18,327; yacc: 6,877; lex: 2,864; makefile: 2,738; awk: 165; fortran: 60; java: 52
file content (171 lines) | stat: -rwxr-xr-x 4,979 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#!/bin/sh
# PCP QA Test No. 882
# Check PMCD state change notification, aka PMCD_ADD_AGENT
#
# Copyright (c) 2016 Red Hat, Inc.
#

seq=`basename $0`
echo "QA output created by $seq"

# get standard filters
. ./common.product
. ./common.filter
. ./common.check

signal=$PCP_BINADM_DIR/pmsignal
status=1
done_clean=false
LOCALHOST=`hostname`
LOGGING_DIR="$PCP_ARCHIVE_DIR"

_check_local_primary_archive || _notrun "primary pmlogger not writing locally"

if [ ! -f $LOGGING_DIR/$LOCALHOST/Latest ]
then
    _notrun "no Latest folio for primary pmlogger (logpush?)"
    # NOTREACHED
fi

_cleanup()
{
    if $done_clean
    then
	:
    else
	echo "Restore pmcd.conf and restart PMCD ..."
	if [ -f $tmp.pmcd.conf ]
	then
	    $sudo cp $tmp.pmcd.conf $PCP_PMCDCONF_PATH
	    rm -f $tmp.pmcd.conf
	fi
	_restore_primary_logger
	_service pmcd restart 2>&1 | _filter_pcp_restart
	_wait_for_pmcd
	_restore_auto_restart pmcd
	_service pmlogger restart 2>&1 | _filter_pcp_restart \
	| sed -e '/pmlogger not running/d'
	_wait_for_pmlogger
	_restore_auto_restart pmlogger
	rm -f $tmp.*
	done_clean=true
    fi
    exit $status
}

trap "_cleanup" 0 1 2 3 15

# real QA test starts here
PMDA_PMCD_PATH=$PCP_PMDAS_DIR/pmcd/pmda_pmcd.$DSO_SUFFIX

# copy the pmcd config file to restore state later.
cp $PCP_PMCDCONF_PATH $tmp.pmcd.conf

# start from a known starting point
_stop_auto_restart pmcd
_stop_auto_restart pmlogger
if ! _service pmlogger stop 2>&1; then _exit 1; fi \
| _filter_pcp_stop
_wait_pmlogger_end || _exit 1
if ! _service pmcd stop 2>&1; then _exit 1; fi \
| _filter_pcp_stop
_wait_pmcd_end || _exit 1

cat <<End-of-File >$tmp.tmp
# Installed by PCP QA test $seq on `date`
pmcd	2	dso	pmcd_init	$PMDA_PMCD_PATH
sample	29	pipe	binary 		$PCP_PMDAS_DIR/sample/pmdasample -d 29 
simple	253	pipe	binary 		/var/lib/pcp/pmdas/simple/pmdasimple -d 253 
End-of-File
$sudo cp $tmp.tmp $PCP_PMCDCONF_PATH

_writable_primary_logger
if ! _service pmcd restart 2>&1; then _exit 1; fi \
| _filter_pcp_restart
_wait_for_pmcd || _exit 1
if ! _service pmlogger restart 2>&1; then _exit 1; fi \
| _filter_pcp_restart
_wait_for_pmlogger || _exit 1

# Reset pmlogger
#
echo "log sample.dynamic.meta.metric"

# Log the sample pmda's sample.dynamic.meta.metric
#
# May need to retry a few times before we can connect via pmlc
#
can_wait=10
i=0
while [ $i -lt $can_wait ]
do
    echo 'connect primary
log mandatory on 500 msec { sample.dynamic.meta.metric }' \
	| pmlc >$tmp.tmp 2>&1
    if [ -s $tmp.tmp ]
    then
	# any output suggests something did not work
	#
	echo "iter $1: pmlc failed" >>$seq_full
	cat $tmp.tmp >>$seq_full
	sleep 1
	i=`expr $i + 1`
    else
	break
    fi
done

# log a few samples
sleep 2

echo "archive contents before pmda simple restart..."
echo "expect no <mark> record"
echo "---------------------------------------------------------------"
pmafm $LOGGING_DIR/$LOCALHOST/Latest pmdumplog >$tmp.out 2>&1
grep -E '(<mark>)|(sample.dynamic.meta.metric)' $tmp.out \
| _filter_pmdumplog \
| uniq
echo "---------------------------------------------------------------"

# Get the units of sample.dynamic.meta.metric by fetching 
# sample.dynamic.meta.pmdesc.units using pminfo.
echo "pminfo -f sample.dynamic.meta.pmdesc.units" | tee -a $seq_full
units=`pminfo -f sample.dynamic.meta.pmdesc.units | tee -a $seq_full \
    | awk '/value/ { print $2 }'`

# Change the units of sample.dynamic.meta.metric by using pmstore to store into
# sample.dynamic.meta.pmdesc.units
# Change one of the inner bitfields so as to avoid changing the padding
echo "changing units from $units to $((units + 0x100))"
pmstore sample.dynamic.meta.pmdesc.units $((units + 0x100))

# Restart the simple pmda by killing it and the getting pmcd to restart it (HUP).
# pmlogger should receive PMCD_ADD_AGENT, which should cause it to re-check
# all of it's configured metrics. It should then flag the change to
# sample.dynamic.meta.pmdesc.units and exit.
echo "restart the simple pmda"
$sudo $signal -a -s TERM pmdasimple
sleep 1 # let the signal arrive and let pmdasimple exit
$sudo $signal -a -s HUP pmcd   # ensure pmcd restarts the PMDA
sleep 1 # let the signal arrive and pmcd think about it

echo "archive contents after pmda simple restart..."
echo "expect no <mark> record"
echo "---------------------------------------------------------------"
pmafm $LOGGING_DIR/$LOCALHOST/Latest pmdumplog >$tmp.out 2>&1
grep -E '(<mark>)|(sample.dynamic.meta.metric)' $tmp.out \
| _filter_pmdumplog \
| uniq
echo "---------------------------------------------------------------"

# pmlogger should have stopped. Check for the messages indicating that
# the re-check of the configured metrics failed and that it stopped.
echo >>$seq_full
echo "pmlogger log ..." >>$seq_full
cat $LOGGING_DIR/$LOCALHOST/pmlogger.log | tee -a $seq_full | \
grep \
 -e 'Units of metric "sample.dynamic.meta.metric" has changed from ' \
 -e 'One or more configured metrics have changed after pmcd state change. Exiting'

status=0
exit