]>
Commit | Line | Data |
---|---|---|
0c819009 AZ |
1 | #!/usr/bin/env bash |
2 | set -eux | |
3 | set -o pipefail | |
4 | ||
5 | systemd-analyze log-level debug | |
6 | systemd-analyze log-target journal | |
7 | ||
8 | NUM_DIRS=20 | |
9 | ||
10 | # mount/unmount enough times to trigger the /proc/self/mountinfo parsing rate limiting | |
11 | ||
12 | for ((i = 0; i < NUM_DIRS; i++)); do | |
13 | mkdir "/tmp/meow${i}" | |
14 | done | |
15 | ||
16 | for ((i = 0; i < NUM_DIRS; i++)); do | |
17 | mount -t tmpfs tmpfs "/tmp/meow${i}" | |
18 | done | |
19 | ||
20 | systemctl daemon-reload | |
21 | systemctl list-units -t mount tmp-meow* | grep -q tmp-meow | |
22 | ||
23 | for ((i = 0; i < NUM_DIRS; i++)); do | |
24 | umount "/tmp/meow${i}" | |
25 | done | |
26 | ||
27 | # figure out if we have entered the rate limit state | |
28 | ||
f571d9d5 | 29 | entered_rl=0 |
0c819009 AZ |
30 | exited_rl=0 |
31 | timeout="$(date -ud "2 minutes" +%s)" | |
32 | while [[ $(date -u +%s) -le ${timeout} ]]; do | |
33 | if journalctl -u init.scope | grep -q "(mount-monitor-dispatch) entered rate limit"; then | |
34 | entered_rl=1 | |
35 | break | |
36 | fi | |
37 | sleep 5 | |
38 | done | |
39 | ||
40 | # if the infra is slow we might not enter the rate limit state; in that case skip the exit check | |
41 | ||
42 | if [ "${entered_rl}" = "1" ]; then | |
43 | exited_rl=0 | |
44 | timeout="$(date -ud "2 minutes" +%s)" | |
45 | while [[ $(date -u +%s) -le ${timeout} ]]; do | |
46 | if journalctl -u init.scope | grep -q "(mount-monitor-dispatch) left rate limit"; then | |
47 | exited_rl=1 | |
48 | break | |
49 | fi | |
50 | sleep 5 | |
51 | done | |
52 | ||
53 | if [ "${exited_rl}" = "0" ]; then | |
54 | exit 24 | |
55 | fi | |
56 | fi | |
57 | ||
58 | # give some time for units to settle so we don't race between exiting the rate limit state and cleaning up the units | |
59 | ||
60 | sleep 60 | |
61 | systemctl daemon-reload | |
62 | sleep 60 | |
63 | ||
64 | # verify that the mount units are always cleaned up at the end | |
65 | ||
66 | if systemctl list-units -t mount tmp-meow* | grep -q tmp-meow; then | |
67 | exit 42 | |
68 | fi | |
69 | ||
70 | systemd-analyze log-level info | |
71 | ||
72 | echo OK >/testok | |
73 | ||
74 | exit 0 |