Skip to content

Conversation

@vpa1977
Copy link

@vpa1977 vpa1977 commented Oct 21, 2025

FileDescriptor test intermittently fails because the agent's process output capture lacks synchronisation.

This PR fixes the issue:

  • Agent VM prints the "process output separator" to stderr and stdout before and after action
  • The main vm uses the marker to stop reading the stream for the current test result section (or a general agent log)
  • The main vm restarts reading the log after updating the test section (or clearing it) until the next marker or the process is shut down.

Alternative:
-Disable the test and make no assumptions about contents of the agent vm process output.

Testing: tier1 and tier2 tests on mainline jdk (Ubuntu Linux) in agentvm mode.

make test TEST=":tier1 :tier2" JTREG="TEST_MODE=agentvm"

....

==============================
Test summary
==============================
   TEST                                              TOTAL  PASS  FAIL ERROR  SKIP   
   jtreg:test/hotspot/jtreg:tier1                     3124  2837     0     0   287   
   jtreg:test/jdk:tier1                               2519  2480     0     0    39   
   jtreg:test/langtools:tier1                         4670  4660     0     0    10   
   jtreg:test/jaxp:tier1                                 0     0     0     0     0   
   jtreg:test/lib-test:tier1                            38    38     0     0     0   
   jtreg:test/hotspot/jtreg:tier2                      960   913     0     0    47   
>> jtreg:test/jdk:tier2                               4455  4220     1     0   234 <<
   jtreg:test/langtools:tier2                           14    12     0     0     2   
   jtreg:test/jaxp:tier2                               517   516     0     0     1   
   jtreg:test/docs:tier2                                 4     0     0     0     4   
==============================
TEST FAILURE

Unrelated failure: test/jdk/java/nio/channels/DatagramChannel/SendReceiveMaxSize.java


---------System.out:(98/7409)----------
Seed from RandomFactory = 7590698091695474155L
[15:02:42.244] config SendReceiveMaxSize.setUp(): success [0ms]
[15:02:42.272] test SendReceiveMaxSize.testGetOption(SendReceiveMaxSize$$Lambda/0x00000000450736f8@8d234b9, 65507, /10.201.67.1): success [7ms]
[15:02:42.273] test SendReceiveMaxSize.testGetOption(SendReceiveMaxSize$$Lambda/0x0000000045073920@449629ff, 65507, /10.201.67.1): success [0ms]
[15:02:42.273] test SendReceiveMaxSize.testGetOption(SendReceiveMaxSize$$Lambda/0x0000000045078000@2b071f3f, 65527, java.net.Inet6Address@22212892): success [0ms]
[15:02:42.273] test SendReceiveMaxSize.testGetOption(SendReceiveMaxSize$$Lambda/0x0000000045078228@298b6c94, 65527, java.net.Inet6Address@22212892): success [0ms]
testSendReceiveMaxSize: sender: /10.201.67.1:50670 -> receiver: /10.201.67.1:49236
sendBuf:    java.nio.HeapByteBuffer[pos=0 lim=65507 cap=65507]
receiveBuf: java.nio.HeapByteBuffer[pos=0 lim=65507 cap=65507]
sendBuf:    java.nio.HeapByteBuffer[pos=0 lim=65506 cap=65506]
receiveBuf: java.nio.HeapByteBuffer[pos=0 lim=65506 cap=65506]
[15:02:42.286] test SendReceiveMaxSize.testSendReceiveMaxSize(SendReceiveMaxSize$$Lambda/0x00000000450736f8@8d234b9, 65507, /10.201.67.1): success [11ms]
testSendReceiveMaxSize: sender: /10.201.67.1:48168 -> receiver: /10.201.67.1:52274
sendBuf:    java.nio.HeapByteBuffer[pos=0 lim=65507 cap=65507]
receiveBuf: java.nio.HeapByteBuffer[pos=0 lim=65507 cap=65507]
sendBuf:    java.nio.HeapByteBuffer[pos=0 lim=65506 cap=65506]
receiveBuf: java.nio.HeapByteBuffer[pos=0 lim=65506 cap=65506]
[15:02:42.288] test SendReceiveMaxSize.testSendReceiveMaxSize(SendReceiveMaxSize$$Lambda/0x0000000045073920@449629ff, 65507, /10.201.67.1): success [2ms]
testSendReceiveMaxSize: sender: /[fe80:0:0:0:fc54:ff:fe24:9197%17]:46562 -> receiver: /[fe80:0:0:0:fc54:ff:fe24:9197%17]:58635
[15:02:42.289] test SendReceiveMaxSize.testSendReceiveMaxSize(SendReceiveMaxSize$$Lambda/0x0000000045078000@2b071f3f, 65527, java.net.Inet6Address@8959069): failure [1ms]
java.net.SocketException: Message too long
	at java.base/sun.nio.ch.DatagramChannelImpl.send0(Native Method)
	at java.base/sun.nio.ch.DatagramChannelImpl.sendFromNativeBuffer(DatagramChannelImpl.java:914)
	at java.base/sun.nio.ch.DatagramChannelImpl.send(DatagramChannelImpl.java:886)
	at java.base/sun.nio.ch.DatagramChannelImpl.send(DatagramChannelImpl.java:798)
	at SendReceiveMaxSize.testSendReceiveMaxSize(SendReceiveMaxSize.java:155)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
	at java.base/java.lang.reflect.Method.invoke(Method.java:565)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:132)
	at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:599)
	at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:174)
	at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46)
	at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:822)
	at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:147)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
	at org.testng.TestRunner.privateRun(TestRunner.java:764)
	at org.testng.TestRunner.run(TestRunner.java:585)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:384)
	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:378)
	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:337)
	at org.testng.SuiteRunner.run(SuiteRunner.java:286)
	at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
	at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96)
	at org.testng.TestNG.runSuitesSequentially(TestNG.java:1218)
	at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
	at org.testng.TestNG.runSuites(TestNG.java:1069)
	at org.testng.TestNG.run(TestNG.java:1037)
	at com.sun.javatest.regtest.agent.TestNGRunner.main(TestNGRunner.java:109)
	at com.sun.javatest.regtest.agent.TestNGRunner.main(TestNGRunner.java:65)
	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.MainWrapper$MainTask.run(MainWrapper.java:138)
	at java.base/java.lang.Thread.run(Thread.java:1474)
testSendReceiveMaxSize: sender: /[fe80:0:0:0:fc54:ff:fe24:9197%17]:39368 -> receiver: /[fe80:0:0:0:fc54:ff:fe24:9197%17]:38228
[15:02:42.291] test SendReceiveMaxSize.testSendReceiveMaxSize(SendReceiveMaxSize$$Lambda/0x0000000045078228@298b6c94, 65527, java.net.Inet6Address@8959069): failure [0ms]
java.net.SocketException: Message too long
	at java.base/sun.nio.ch.DatagramChannelImpl.send0(Native Method)
	at java.base/sun.nio.ch.DatagramChannelImpl.sendFromNativeBuffer(DatagramChannelImpl.java:914)
	at java.base/sun.nio.ch.DatagramChannelImpl.send(DatagramChannelImpl.java:886)
	at java.base/sun.nio.ch.DatagramChannelImpl.send(DatagramChannelImpl.java:798)
	at SendReceiveMaxSize.testSendReceiveMaxSize(SendReceiveMaxSize.java:155)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
	at java.base/java.lang.reflect.Method.invoke(Method.java:565)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:132)
	at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:599)
	at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:174)
	at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46)
	at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:822)
	at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:147)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
	at org.testng.TestRunner.privateRun(TestRunner.java:764)
	at org.testng.TestRunner.run(TestRunner.java:585)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:384)
	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:378)
	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:337)
	at org.testng.SuiteRunner.run(SuiteRunner.java:286)
	at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
	at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96)
	at org.testng.TestNG.runSuitesSequentially(TestNG.java:1218)
	at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
	at org.testng.TestNG.runSuites(TestNG.java:1069)
	at org.testng.TestNG.run(TestNG.java:1037)
	at com.sun.javatest.regtest.agent.TestNGRunner.main(TestNGRunner.java:109)
	at com.sun.javatest.regtest.agent.TestNGRunner.main(TestNGRunner.java:65)
	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.MainWrapper$MainTask.run(MainWrapper.java:138)
	at java.base/java.lang.Thread.run(Thread.java:1474)

===============================================
java/nio/channels/DatagramChannel/SendReceiveMaxSize.java
Total tests run: 8, Passes: 6, Failures: 2, Skips: 0
===============================================

Progress

  • Change must be properly reviewed (1 review required, with at least 1 Reviewer)
  • Change must not contain extraneous whitespace
  • Commit message must refer to an issue

Issue

Reviewing

Using git

Checkout this PR locally:
$ git fetch https://git.openjdk.org/jtreg.git pull/295/head:pull/295
$ git checkout pull/295

Update a local copy of the PR:
$ git checkout pull/295
$ git pull https://git.openjdk.org/jtreg.git pull/295/head

Using Skara CLI tools

Checkout this PR locally:
$ git pr checkout 295

View PR using the GUI difftool:
$ git pr show -t 295

Using diff file

Download this PR as a diff file:
https://git.openjdk.org/jtreg/pull/295.diff

Using Webrev

Link to Webrev Comment

@bridgekeeper
Copy link

bridgekeeper bot commented Oct 21, 2025

👋 Welcome back vpetko! A progress list of the required criteria for merging this PR into master will be added to the body of your pull request. There are additional pull request commands available for use with this pull request.

@openjdk
Copy link

openjdk bot commented Oct 21, 2025

❗ This change is not yet ready to be integrated.
See the Progress checklist in the description for automated requirements.

@vpa1977 vpa1977 marked this pull request as ready for review October 22, 2025 02:38
@openjdk openjdk bot added the rfr Pull request is ready for review label Oct 22, 2025
@mlbridge
Copy link

mlbridge bot commented Oct 22, 2025

Webrevs

@vpa1977 vpa1977 marked this pull request as draft October 22, 2025 03:15
@openjdk openjdk bot removed the rfr Pull request is ready for review label Oct 22, 2025
How it works:
 - The agent vm emits separator text before and after the text.
 - The main vm send the action and waits for the separator text line from
   the agent vm.
 - After the result have been read by the main vm it expects another separator
   text line. After consuming the line it redirects output to the agent log.

Edge cases:
 - Timeouts and Agent VM crashes:
   - The main vm's stdout and stderr tasks will exit due to the
     closed stream. The main vm is supposed to dispose the failed agent.
@vpa1977 vpa1977 marked this pull request as ready for review October 22, 2025 05:13
@openjdk openjdk bot added the rfr Pull request is ready for review label Oct 22, 2025
@vpa1977
Copy link
Author

vpa1977 commented Oct 24, 2025

Still getting intermittent failure in StreamsTest. moving to draft.

@vpa1977 vpa1977 marked this pull request as draft October 24, 2025 01:34
@openjdk openjdk bot removed the rfr Pull request is ready for review label Oct 24, 2025
@vpa1977 vpa1977 marked this pull request as ready for review October 27, 2025 21:55
@openjdk openjdk bot added the rfr Pull request is ready for review label Oct 27, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

rfr Pull request is ready for review

Development

Successfully merging this pull request may close these issues.

1 participant