Hi all,

A short update: I fixed IGNITE-29086, and the patch is merged.
https://issues.apache.org/jira/browse/IGNITE-29086
https://github.com/apache/ignite/pull/13642

One important detail is that the bug was in production code, not in tests, and 
it
happens only on JDK 21.0.5 and newer.

The root cause was JDK-8323782 (https://bugs.openjdk.org/browse/JDK-8323782), 
which
changed the order of steps in Thread.interrupt(). Now one interrupt() can do two
things: first it wakes up a thread from wait(), and then it closes the 
FileChannel
that this thread writes to. Because of this, our writer thread lost the last 
records
on stop.

So the key point is that if we use this pattern:

try {
    ...
    synchronized (...) {
        wait();
    }
}
catch (InterruptedException e) {
    write();
}

one Thread.interrupt() may interrupt both wait() and write().

I looked for the same pattern in the main code and didn't find other places 
with it.

I just want to highlight that there can be non-obvious bugs related to the JDK
upgrade, and I suggest we double-check our JDK 21 nightly runs before we declare
JDK 21 support.

Best regards,
Aleksandr Chesnokov

Reply via email to