RFR: 8264632: compiler/codecache/jmx/PoolsIndependenceTest.java fails to Notification not being received
iignatyev at openjdk.java.net
Wed Apr 21 15:40:32 UTC 2021
On Tue, 20 Apr 2021 18:04:07 GMT, Evgeny Nikitin <enikitin at openjdk.org> wrote:
> Hi all,
> May I ask for reviews for this change?
> **The case**
> **The problem**
> The test calls for MemoryPoolMXBean.setUsageThreshold() and expects a Notification get fired when the threshold is breached. The Notification is never received.
> The failure most probably is caused by the combination of following events:
> 1. Some threshold has already breached (caused by some other tests);
> 2. In this case MemoryPoolMXBean never fires subsequent Notifications until the usage is less than a set threshold;
> 3. The usage manages to grow up between these two lines:
> final long usageThresholdLimit = bean.getUsage().getUsed() + 1;
> 4. The usage has never fallen below any set threshold and therefore Notification is never sent. Setting usageThresholdLimit to 0 doesn't clear up the situation "Notification has already been sent" either.
>  Very common, happens almost every time during my testing - the code cache usage grows up quickly at VM start.
> **Proposed solution:**
> 1. Before the actual test, I set the usageThresholdLimit to max. possible value;
> 2. This causes the current usage to appear below the threshold and therefore the "Notification has already been sent" state is cleared;
> 3. The monitoring is then switched off (by setting usageThresholdLimit to 0), as at the VM start.
> 1. Preemptive breaching of some threshold causes the problem for non-modified test.
> 2. The modified test has been tested with debug versions of macosx, windows, linux x64 builds and a linux-aarch64-debug build.
I'm sorry but I don't understand your root-cause analysis (and hence can't review the patch), could you please elaborate on what you mean by some other tests? as far as I can see all test actions in `PoolsIndependenceTest` are run as `@run main/othervm`, so they are executed in a fresh JVM, in other words, there were no tests which got exected before `compiler.codecache.jmx.PoolsIndependenceTest ` and no other tests are run concurrently to it.
More information about the hotspot-compiler-dev