RFR 8078143: java/lang/management/ThreadMXBean/AllThreadIds.java fails intermittently
Jaroslav Bachorik
jaroslav.bachorik at oracle.com
Wed May 13 18:07:39 UTC 2015
On 13.5.2015 19:40, Martin Buchholz wrote:
> toString()should never return null, I think.
It doesn't matter much here. The test would fail with an NPE and it
would be right to do so. None of the suppliers should ever return null.
>
> 52 @Override
> 53 public String toString() {
> 54 T resolved = val.get();
> 55 return resolved != null ? resolved.toString() : null;
> 56 }
>
>
> I expected methods like waitForCondition to include a timeout with
> failure. I like 10 seconds, being large enough to never be hit
> spuriously in tests.
It's difficult to find a value 'large enough'. Imagine the test running
on a small embedded device and fastdebug build. I had my fun fixing
tests failing intermittently because it was thought that the original
timeout was large enough. I better leave it to the harness.
>
> Why not
> () -> (long) mbean.getThreadCount(),
Because curLiveThreadCount needs to be set to mbean.getThreadCount() value.
>
> 169 ()->{
> 170 curLiveThreadCount = mbean.getThreadCount();
> 171 return (long)curLiveThreadCount;
> 172 },
>
>
> I worry that
> mbean.getThreadCount()
> is hard to test since the "system" may spin up and shut down utility
> threads at any time.
The 'system' threads are not reported by this method. And the current
understanding is that once VM is fully initialized no user-observable
threads are randomly started on behalf of the system.
-JB-
>
> On Wed, May 13, 2015 at 4:46 AM, Jaroslav Bachorik
> <jaroslav.bachorik at oracle.com <mailto:jaroslav.bachorik at oracle.com>> wrote:
>
> On 1.5.2015 21:55, Martin Buchholz wrote:
>
>
>
> On Thu, Apr 30, 2015 at 11:27 AM, Jaroslav Bachorik
> <jaroslav.bachorik at oracle.com
> <mailto:jaroslav.bachorik at oracle.com>
> <mailto:jaroslav.bachorik at oracle.com
> <mailto:jaroslav.bachorik at oracle.com>>> wrote:
>
> On 30.4.2015 19:18, Martin Buchholz wrote:
>
> Tests that sleep can almost always be better written
> some other way.
> In this case, I would prefer busy-waiting with timeout
> until the
> expected condition becomes true.
>
>
> The thing is that in case of a real issue with the thread
> counters we
> a/ would be busy-waiting till the test times out (using an
> arbitrary
> delay is also problematic due to different performance of
> different
> machines running with different configurations)
>
>
> Far less problematic (performance-wise and reliability-wise)
> than the
> fixed sleep.
>
> b/ would get a rather confusing message about the test
> timing out at
> the end
>
>
> You can easily improve the error message.
>
>
> Well, not that easily. It is not possible to get a notification when
> JTREG decides to timeout the test. So you will get the standard
> JTREG message and that's all.
>
> I was able to modify the test to wait for a given condition and
> provide useful messages in case of mismatch and retry. For the price
> of an increased complexity. On the other hand, the test should be
> much more resilient to timing errors caused by slow setups.
>
> Updated webrev: http://cr.openjdk.java.net/~jbachorik/8078143/webrev.01
>
> Thanks,
>
> -JB-
>
>
More information about the serviceability-dev
mailing list