Looks OK. Sorry for the continuing troubles, but this test has survived many iterations on Google machines without failure. Failures are more likely to be collector-specific than random-number-specific. If you can repro, you can try varying hotspot GC flags.
On Fri, Dec 4, 2015 at 10:31 AM, joe darcy <[email protected]> wrote: > Hello, > > Please review the patch below to address > > JDK-8144742: Instrument intermittently failing test > GCDuringIteration.java > > In brief, after GCDuringIteration.java was un-@ignored recently, it has been > seen to fail intermittently in some of our testing. As the test uses > randomness, to help the investigation GCDuringIteration.java should be > switched over to the standard random number generator which prints out the > seed and allows the seed to be set. > > Also, the test is marked as being known to intermittently fail and for that > reason, is bumped from tier 1 to tier 2. > > Thanks, > > -Joe > > diff -r 8ef2bf79539c test/TEST.groups > --- a/test/TEST.groups Thu Dec 03 13:18:51 2015 -0800 > +++ b/test/TEST.groups Fri Dec 04 10:30:58 2015 -0800 > @@ -30,6 +30,7 @@ > -java/lang/ProcessHandle/TreeTest.java \ > -java/util/zip/TestLocalTime.java \ > :jdk_util \ > + -java/util/WeakHashMap/GCDuringIteration.java \ > -java/util/concurrent/Phaser/Basic.java \ > sun/nio/cs/ISO8859x.java \ > java/nio/Buffer \ > @@ -40,6 +41,7 @@ > java/lang/ProcessHandle/TreeTest.java \ > java/util/zip/TestLocalTime.java \ > java/util/concurrent/Phaser/Basic.java \ > + java/util/WeakHashMap/GCDuringIteration.java \ > :jdk_io \ > :jdk_nio \ > -sun/nio/cs/ISO8859x.java \ > diff -r 8ef2bf79539c test/java/util/WeakHashMap/GCDuringIteration.java > --- a/test/java/util/WeakHashMap/GCDuringIteration.java Thu Dec 03 > 13:18:51 2015 -0800 > +++ b/test/java/util/WeakHashMap/GCDuringIteration.java Fri Dec 04 > 10:30:58 2015 -0800 > @@ -1,5 +1,5 @@ > /* > - * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights > reserved. > + * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights > reserved. > * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. > * > * This code is free software; you can redistribute it and/or modify it > @@ -24,13 +24,17 @@ > /* > * @test > * @bug 6499848 > + * @library /lib/testlibrary/ > + * @build jdk.testlibrary.RandomFactory > + * @run main GCDuringIteration > * @summary Check that iterators work properly in the presence of > * concurrent finalization and removal of elements. > - * @key randomness > + * @key randomness intermittent > */ > > import java.util.*; > import java.util.concurrent.CountDownLatch; > +import jdk.testlibrary.RandomFactory; > > public class GCDuringIteration { > private static void waitForFinalizersToRun() { > @@ -65,8 +69,9 @@ > equal(map.values().iterator().next(), v); > } > > + static final Random rnd = RandomFactory.getRandom(); > + > void checkIterator(final Iterator<Map.Entry<Foo, Integer>> it, int > first) { > - final Random rnd = new Random(); > for (int i = first; i >= 0; --i) { > if (rnd.nextBoolean()) check(it.hasNext()); > equal(it.next().getValue(), i); > @@ -86,7 +91,7 @@ > final int n = 10; > // Create array of strong refs > final Foo[] foos = new Foo[2*n]; > - final Map<Foo,Integer> map = new > WeakHashMap<Foo,Integer>(foos.length); > + final Map<Foo,Integer> map = new WeakHashMap<>(foos.length); > check(map.isEmpty()); > equal(map.size(), 0); > >
