Skip to content

Commit b1d64d7

Browse files
committed
thread dump on github actions cancellation
1 parent 3df8b9d commit b1d64d7

4 files changed

Lines changed: 62 additions & 7 deletions

File tree

.github/workflows/develop-status.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ jobs:
2929
- name: Build
3030
run: mvn -B -U clean install -Pquick,\!formatting
3131
- name: Verify
32-
run: mvn -B install -P-skipSlowTests -Dmaven.javadoc.skip=true
32+
run: ./scripts/ci/run-with-thread-dump.sh mvn -B install -P-skipSlowTests -Dmaven.javadoc.skip=true
3333
- name: Publish Test Report
3434
if: failure()
3535
uses: scacap/action-surefire-report@v1

.github/workflows/main-status.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ jobs:
2929
- name: Build
3030
run: mvn -B -U -T 2C clean install -DskipTests
3131
- name: Run all tests
32-
run: mvn -B install -P-skipSlowTests -Dmaven.javadoc.skip=true
32+
run: ./scripts/ci/run-with-thread-dump.sh mvn -B install -P-skipSlowTests -Dmaven.javadoc.skip=true
3333
- name: Publish Test Report
3434
if: failure()
3535
uses: scacap/action-surefire-report@v1

.github/workflows/pr-verify.yml

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ jobs:
6262
- name: Build
6363
run: mvn --quiet clean && mvn -B --quiet -T 2C install -Pquick
6464
- name: Test
65-
run: mvn -B test -DskipITs -P-formatting -Dmaven.javadoc.skip -Djapicmp.skip -Denforcer.skip -Danimal.sniffer.skip
65+
run: ./scripts/ci/run-with-thread-dump.sh mvn -B test -DskipITs -P-formatting -Dmaven.javadoc.skip -Djapicmp.skip -Denforcer.skip -Danimal.sniffer.skip
6666
- name: Publish Test Report
6767
if: failure()
6868
uses: scacap/action-surefire-report@v1.9.0
@@ -84,7 +84,7 @@ jobs:
8484
- name: Build
8585
run: mvn --quiet clean && mvn -B --quiet -T 2C install -Pquick
8686
- name: Verify
87-
run: mvn -B verify -PskipUnitTests,-formatting -Dmaven.javadoc.skip -Denforcer.skip -Danimal.sniffer.skip
87+
run: ./scripts/ci/run-with-thread-dump.sh mvn -B verify -PskipUnitTests,-formatting -Dmaven.javadoc.skip -Denforcer.skip -Danimal.sniffer.skip
8888
- name: Publish Test Report
8989
if: failure()
9090
uses: scacap/action-surefire-report@v1.9.0
@@ -105,7 +105,7 @@ jobs:
105105
- name: Build
106106
run: mvn --quiet clean && mvn -B --quiet -T 2C install -Pquick
107107
- name: Verify
108-
run: mvn -B verify -PslowTestsOnly,-skipSlowTests,-formatting -Dmaven.javadoc.skip -Djapicmp.skip -Denforcer.skip -Danimal.sniffer.skip
108+
run: ./scripts/ci/run-with-thread-dump.sh mvn -B verify -PslowTestsOnly,-skipSlowTests,-formatting -Dmaven.javadoc.skip -Djapicmp.skip -Denforcer.skip -Danimal.sniffer.skip
109109
- name: Publish Test Report
110110
if: failure()
111111
uses: scacap/action-surefire-report@v1.9.0
@@ -148,12 +148,11 @@ jobs:
148148
node-version: 18
149149
- name: Run end-to-end tests of RDF4J Server and Workbench
150150
working-directory: ./e2e
151-
run: ./run.sh
151+
run: ../scripts/ci/run-with-thread-dump.sh ./run.sh
152152

153153
copyright-check:
154154
runs-on: ubuntu-latest
155155
steps:
156156
- uses: actions/checkout@v4
157157
- name: check copyright header present
158158
run: scripts/checkCopyrightPresent.sh
159-

scripts/ci/run-with-thread-dump.sh

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
dump_threads() {
5+
echo "== Cancellation received: capturing JVM thread dumps =="
6+
local pids
7+
pids=$(pgrep -f '[j]ava' || true)
8+
if [[ -z "${pids}" ]]; then
9+
echo "No Java processes found."
10+
return 0
11+
fi
12+
13+
if command -v jcmd >/dev/null 2>&1; then
14+
for pid in ${pids}; do
15+
echo "-- jcmd Thread.print for PID ${pid} --"
16+
jcmd "${pid}" Thread.print || true
17+
done
18+
return 0
19+
fi
20+
21+
if command -v jstack >/dev/null 2>&1; then
22+
for pid in ${pids}; do
23+
echo "-- jstack for PID ${pid} --"
24+
jstack "${pid}" || true
25+
done
26+
return 0
27+
fi
28+
29+
for pid in ${pids}; do
30+
echo "-- kill -QUIT ${pid} (no jcmd/jstack available) --"
31+
kill -QUIT "${pid}" || true
32+
done
33+
}
34+
35+
on_term() {
36+
dump_threads
37+
if [[ -n "${child_pid:-}" ]]; then
38+
kill -TERM "${child_pid}" 2>/dev/null || true
39+
fi
40+
}
41+
42+
if [[ $# -eq 0 ]]; then
43+
echo "Usage: $0 <command> [args...]" >&2
44+
exit 2
45+
fi
46+
47+
trap on_term INT TERM
48+
49+
"$@" &
50+
child_pid=$!
51+
52+
wait "${child_pid}"
53+
status=$?
54+
55+
trap - INT TERM
56+
exit "${status}"

0 commit comments

Comments
 (0)