File: 1573

package info (click to toggle)
pcp 7.0.5-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 252,916 kB
  • sloc: ansic: 1,478,844; sh: 177,285; xml: 160,462; cpp: 83,809; python: 24,349; perl: 18,303; yacc: 6,877; lex: 2,864; makefile: 2,694; awk: 165; fortran: 60; java: 52
file content (131 lines) | stat: -rwxr-xr-x 4,018 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
#!/bin/sh
# PCP QA Test No. 1573
# Exercise libpcp_web memory leak without a key server.
#
# Copyright (c) 2020 Red Hat.
#

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

# get standard environment, filters and checks
. ./common.product
. ./common.filter
. ./common.check

_check_series

_cleanup()
{
    cd $here
    if $need_restore
    then
	need_restore=false
	_service pmlogger stop >/dev/null
	$sudo rm -rf $PCP_LOG_DIR/pmlogger
	$sudo mv $PCP_LOG_DIR/pmlogger.$seq $PCP_LOG_DIR/pmlogger
	_restore_config $PCP_ETC_DIR/pcp/pmlogger
	_service pmcd restart 2>&1 | _filter_pcp_restart
	_wait_for_pmcd
	_service pmlogger restart 2>&1 | _filter_pcp_restart
	_wait_for_pmlogger
	_restore_config $PCP_SYSCONF_DIR/pmproxy
    fi
    if $pmproxy_was_running
    then
	echo "Restart pmproxy ..." >>$seq_full
	_service pmproxy restart >>$seq_full 2>&1
	_wait_for_pmproxy
    else
	echo "Stopping pmproxy ..." >>$seq_full
	_service pmproxy stop >>$seq_full 2>&1
    fi
    $sudo rm -rf $tmp $tmp.*
}

status=1	# failure is the default!
need_restore=false
trap "_cleanup; exit \$status" 0 1 2 3 15

pmproxy_was_running=false
[ -f $PCP_RUN_DIR/pmproxy.pid ] && pmproxy_was_running=true
echo "pmproxy_was_running=$pmproxy_was_running" >>$seq_full

# real QA test starts here
_save_config $PCP_SYSCONF_DIR/pmproxy
need_restore=true

# only want the primary logger running
_save_config $PCP_ETC_DIR/pcp/pmlogger
_restore_pmlogger_control

#$sudo rm -f $PCP_SYSCONF_DIR/pmproxy/*
echo "[pmproxy]" > $tmp.conf
echo "pcp.enabled = true" >> $tmp.conf
echo "http.enabled = true" >> $tmp.conf
echo "resp.enabled = true" >> $tmp.conf
echo "secure.enabled = false" >> $tmp.conf
echo "[discover]" >> $tmp.conf
echo "enabled = true" >> $tmp.conf
echo "[pmseries]" >> $tmp.conf
echo "enabled = false" >> $tmp.conf
$sudo cp $tmp.conf $PCP_SYSCONF_DIR/pmproxy/pmproxy.conf

if ! _service pmlogger stop >/dev/null; then _exit 1; fi

# move aside existing logs so we can measure base memory footprint
[ -d $PCP_LOG_DIR/pmlogger.$seq ] && $sudo mv $PCP_LOG_DIR/pmlogger.$seq $PCP_LOG_DIR/pmlogger.$seq.saved
$sudo mv $PCP_LOG_DIR/pmlogger $PCP_LOG_DIR/pmlogger.$seq
$sudo mkdir -p $PCP_LOG_DIR/pmlogger
$sudo chmod 775 $PCP_LOG_DIR/pmlogger
$sudo chown $PCP_USER:$PCP_USER $PCP_LOG_DIR/pmlogger

if ! _service pmproxy restart >>$seq_full 2>&1; then _exit 1; fi
_wait_for_pmproxy || _exit 1

pmproxy_pid=`_get_pids_by_name -a pmproxy`
[ -z "$pmproxy_pid" ] && echo === pmproxy not running && status=1 && exit 1
echo === extract initial rss
pmproxy_rss1=`pminfo -f proc.memory.rss |
	$PCP_AWK_PROG '{ if ($2 == "['$pmproxy_pid'") { print $NF} }'`
if [ -z "$pmproxy_rss1" ]
then
    $PCP_PS_PROG $PCP_PS_ALL_FLAGS | grep -E '[P]PID|/[p]mproxy( |$)'
    pminfo -f proc.memory.rss | grep '[p]mproxy'
    echo "Arrgh: cannot find first rss for pid $pmproxy_pid"
    status=1
    exit
fi

echo === restarting pmlogger # primary only
if ! _service pmlogger restart 2>&1; then _exit 1; fi | _filter_pcp_restart
_wait_for_pmlogger || _exit 1

echo === wait for pmproxy to process filesystem events
pmsleep 4.2

echo === extract updated rss
pmproxy_rss2=`pminfo -f proc.memory.rss |
	$PCP_AWK_PROG '{ if ($2 == "['$pmproxy_pid'") { print $NF} }'`
if [ -z "$pmproxy_rss2" ]
then
    $PCP_PS_PROG $PCP_PS_ALL_FLAGS | grep -E '[P]PID|/[p]mproxy( |$)'
    pminfo -f proc.memory.rss | grep '[p]mproxy'
    echo "Arrgh: cannot find second rss for pid $pmproxy_pid"
    status=1
    exit
fi

echo === checking rss within tolerance
_within_tolerance "rss" $pmproxy_rss1 $pmproxy_rss2 10%
[ $pmproxy_rss2 -gt 10000 ] && echo "Unexpected pmproxy RSS: $pmproxy_rss2, was initially $pmproxy_rss1"

echo "RSS1 for PID $pmproxy_pid is $pmproxy_rss1" >> $seq_full
echo "RSS2 for PID $pmproxy_pid is $pmproxy_rss2" >> $seq_full
cat $PCP_LOG_DIR/pmproxy/pmproxy.log >>$seq_full
[ -f /proc/$pmproxy_pid/maps ] && echo == maps >>$seq_full && $sudo cat /proc/$pmproxy_pid/maps >>$seq_full
echo === see $seq.full for pmproxy rss and logs

# success, all done
status=0
exit