Merge pull request #23941 from yuwata/test-60-improve-performance

test: performance improvement for TEST-60
This commit is contained in:
Frantisek Sumsal 2022-07-08 07:24:52 +00:00 committed by GitHub
commit 8db5bc589a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 43 deletions

View file

@ -4,4 +4,5 @@ Description=TEST-60-MOUNT-RATELIMIT
[Service]
Type=oneshot
ExecStartPre=rm -f /failed /testok
ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh

View file

@ -53,6 +53,8 @@ EOF
}
}
: >/failed
systemd-analyze log-level debug
systemd-analyze log-target journal
@ -83,6 +85,8 @@ for ((i = 0; i < NUM_DIRS; i++)); do
mkdir "/tmp/meow${i}"
done
TS="$(date '+%H:%M:%S')"
for ((i = 0; i < NUM_DIRS; i++)); do
mount -t tmpfs tmpfs "/tmp/meow${i}"
done
@ -94,54 +98,20 @@ for ((i = 0; i < NUM_DIRS; i++)); do
umount "/tmp/meow${i}"
done
# figure out if we have entered the rate limit state
entered_rl=0
exited_rl=0
timeout="$(date -ud "2 minutes" +%s)"
while [[ $(date -u +%s) -le ${timeout} ]]; do
if journalctl -u init.scope | grep -q "(mount-monitor-dispatch) entered rate limit"; then
entered_rl=1
break
fi
sleep 5
done
# if the infra is slow we might not enter the rate limit state; in that case skip the exit check
if [ "${entered_rl}" = "1" ]; then
exited_rl=0
timeout="$(date -ud "2 minutes" +%s)"
while [[ $(date -u +%s) -le ${timeout} ]]; do
if journalctl -u init.scope | grep -q "(mount-monitor-dispatch) left rate limit"; then
exited_rl=1
break
fi
sleep 5
done
if [ "${exited_rl}" = "0" ]; then
exit 24
fi
# Figure out if we have entered the rate limit state.
# If the infra is slow we might not enter the rate limit state; in that case skip the exit check.
if timeout 2m bash -c "while ! journalctl -u init.scope --since=$TS | grep -q '(mount-monitor-dispatch) entered rate limit'; do sleep 1; done"; then
timeout 2m bash -c "while ! journalctl -u init.scope --since=$TS | grep -q '(mount-monitor-dispatch) left rate limit'; do sleep 1; done"
fi
# give some time for units to settle so we don't race between exiting the rate limit state and cleaning up the units
sleep 60
systemctl daemon-reload
sleep 60
# verify that the mount units are always cleaned up at the end
if systemctl list-units -t mount tmp-meow* | grep -q tmp-meow; then
exit 42
fi
# Verify that the mount units are always cleaned up at the end.
# Give some time for units to settle so we don't race between exiting the rate limit state and cleaning up the units.
timeout 2m bash -c 'while systemctl list-units -t mount tmp-meow* | grep -q tmp-meow; do systemctl daemon-reload; sleep 10; done'
# test that handling of mount start jobs is delayed when /proc/self/mouninfo monitor is rate limited
test_issue_20329
systemd-analyze log-level info
echo OK >/testok
exit 0
touch /testok
rm /failed