Fix potential race between Logger configuration and GCs in HttpURLConWithProxy test

Daniel Fuchs daniel.fuchs at oracle.com
Thu Jul 23 09:37:07 UTC 2020


Hi Charlie,

Thanks for finding and fixing this!
I have fixed many such failures in the logging tests in
the past.

Your changes look good to me.

Reviewed.

Do you need a sponsor for this?

best regards,

-- daniel

On 22/07/2020 20:38, Charlie Gracie wrote:
> Hi,
> 
> I believe there was a subtle timing hole introduced into the HttpURLConWithProxy.java test with the
> fix for JDK-8183369 [1]. In our local tests, when using GC stress modes, we consistently get a failure
> reported as:
> 
> "Execution failed: `main' threw exception: java.lang.RuntimeException: Connection not retried with proxy".
> 
> I verified that the Proxy is being used but the messages are not being logged with the ProxyHandler. The
> issue is caused by back to back calls of Logger.getLogger(String). If a GC happens between the two calls
> there is no guarantee that the same object will be returned [2]. Since the test relies on the log messages
> being handled by the new ProxyHandler to pass, it needs to ensure the Logger object lives the entire
> lifetime of the test.
> 
> Here is my proposed fix:
> http://cr.openjdk.java.net/~burban/cgracie/logger_fix/webrev0.0/
> 
> The easiest way to reproduce is to use the following vm options when running the specific test. These options
> will force the Shenandoah GC into a continuous GC mode making the test fail almost 100% of the time.
> -vmoption:-XX:+UseShenandoahGC
> -vmoption:-XX:+UnlockDiagnosticVMOptions
> -vmoption:-XX:ShenandoahGCHeuristics=aggressive
> 
> Thanks,
> Charlie Gracie
> 
> [1] https://bugs.openjdk.java.net/browse/JDK-8183369
> [2] https://docs.oracle.com/en/java/javase/14/docs/api/java.logging/java/util/logging/Logger.html#getLogger(java.lang.String)
> 
> 



More information about the net-dev mailing list