[crac] RFR: 8364456: [CRaC] Extend error logging of waitForCheckpointed

Timofei Pushkin tpushkin at openjdk.org
Thu Jul 31 18:05:24 UTC 2025


Makes `CracProcess.waitForCheckpointed()` print the same logs as `CracProcess.waitForSuccess()` does.

<details>

<summary>Before</summary>


STDERR:
Starting process to be checkpointed:
<crac-repo>/build/linux-arm64-slow-openjdk/images/jdk/bin/java -ea -XX:CRaCEngine=criuengine -cp <crac-repo>/build/linux-arm64-slow-openjdk/test-support/jtreg_test_jdk_jdk_crac_newArgs_CheckpointInNewMainTest_java/classes/0/jdk/crac/newArgs/CheckpointInNewMainTest.d:<crac-repo>/build/linux-arm64-slow-openjdk/test-support/jtreg_test_jdk_jdk_crac_newArgs_CheckpointInNewMainTest_java/classes/0/test/lib -XX:CRaCEngineOptions=direct_map=false -XX:CRaCCheckpointTo=cr jdk.test.lib.crac.CracTest __run_test__ CheckpointInNewMainTest
java.lang.RuntimeException: Checkpointed process was not killed as expected. expected: 137 but was: 1
        at jdk.test.lib.Asserts.fail(Asserts.java:715)
        at jdk.test.lib.Asserts.assertEquals(Asserts.java:208)
        at jdk.test.lib.crac.CracProcess.waitForCheckpointed(CracProcess.java:41)
        at jdk.test.lib.crac.CracBuilder.doCheckpoint(CracBuilder.java:241)
        at CheckpointInNewMainTest.test(CheckpointInNewMainTest.java:53)
        at jdk.test.lib.crac.CracTest.run(CracTest.java:163)
        at jdk.test.lib.crac.CracTest.main(CracTest.java:90)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
        at java.base/java.lang.reflect.Method.invoke(Method.java:565)
        at com.sun.javatest.regtest.agent.MainActionHelper$AgentVMRunnable.run(MainActionHelper.java:335)
        at java.base/java.lang.Thread.run(Thread.java:1474)

JavaTest Message: Test threw exception: java.lang.RuntimeException
JavaTest Message: shutting down test


</details>

<details>

<summary>After</summary>


STDERR:
Starting process to be checkpointed:
<crac-repo>/build/linux-arm64-slow-openjdk/images/jdk/bin/java -ea -XX:CRaCEngine=criuengine -cp <crac-repo>/build/linux-arm64-slow-openjdk/test-support/jtreg_test_jdk_jdk_crac_newArgs_CheckpointInNewMainTest_java/classes/0/jdk/crac/newArgs/CheckpointInNewMainTest.d:<crac-repo>/build/linux-arm64-slow-openjdk/test-support/jtreg_test_jdk_jdk_crac_newArgs_CheckpointInNewMainTest_java/classes/0/test/lib -XX:CRaCEngineOptions=direct_map=false -XX:CRaCCheckpointTo=cr jdk.test.lib.crac.CracTest __run_test__ CheckpointInNewMainTest
stdout: [
]
stderr: [
Exception in thread "main" java.lang.IllegalStateException: Some very useful explanation of the problem
        at CheckpointInNewMainTest.exec(CheckpointInNewMainTest.java:64)
        at jdk.test.lib.crac.CracTest.run(CracTest.java:165)
        at jdk.test.lib.crac.CracTest.main(CracTest.java:90)
]
exitValue = 1

java.lang.RuntimeException: Checkpointed process was not killed as expected. expected: 137 but was: 1
        at jdk.test.lib.Asserts.fail(Asserts.java:715)
        at jdk.test.lib.Asserts.assertEquals(Asserts.java:208)
        at jdk.test.lib.crac.CracProcess.waitForCheckpointed(CracProcess.java:45)
        at jdk.test.lib.crac.CracBuilder.doCheckpoint(CracBuilder.java:241)
        at CheckpointInNewMainTest.test(CheckpointInNewMainTest.java:53)
        at jdk.test.lib.crac.CracTest.run(CracTest.java:163)
        at jdk.test.lib.crac.CracTest.main(CracTest.java:90)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
        at java.base/java.lang.reflect.Method.invoke(Method.java:565)
        at com.sun.javatest.regtest.agent.MainActionHelper$AgentVMRunnable.run(MainActionHelper.java:335)
        at java.base/java.lang.Thread.run(Thread.java:1474)

JavaTest Message: Test threw exception: java.lang.RuntimeException
JavaTest Message: shutting down test

STDOUT:
[2025-07-31T17:40:07.905590979Z] Gathering output for process 172600
[2025-07-31T17:40:08.016154176Z] Waiting for completion for process 172600
[2025-07-31T17:40:08.016337160Z] Waiting for completion finished for process 172600


</details>

It also changes the format in which `CracProcess.waitForSuccess()` prints child process output: before it was divided between stdout and stderr of the parent process, now it all goes into stderr of the parent process — it makes it easier to read because everything (commandline, stdout, stderr) is in the same place.

-------------

Commit messages:
 - Extend waitForCheckpointed logging

Changes: https://git.openjdk.org/crac/pull/254/files
  Webrev: https://webrevs.openjdk.org/?repo=crac&pr=254&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8364456
  Stats: 16 lines in 1 file changed: 11 ins; 2 del; 3 mod
  Patch: https://git.openjdk.org/crac/pull/254.diff
  Fetch: git fetch https://git.openjdk.org/crac.git pull/254/head:pull/254

PR: https://git.openjdk.org/crac/pull/254


More information about the crac-dev mailing list