Anton Vinogradov created IGNITE-28841:
-----------------------------------------
Summary: Codestyle check still flaky after IGNITE-28840: drop -T
1C, the concurrent in-process javac races the annotation processors
Key: IGNITE-28841
URL: https://issues.apache.org/jira/browse/IGNITE-28841
Project: Ignite
Issue Type: Task
Reporter: Anton Vinogradov
Assignee: Anton Vinogradov
h3. Problem
IGNITE-28840 tried to fix the intermittent codestyle \{{test-compile}} failure
by adding \{{-Dmaven.compiler.useIncrementalCompilation=false}}, but the job
still fails the same way:
{code}
[ERROR] IgniteKernal.java:[176,45] cannot find symbol
symbol: class ConfigurationViewWalker
location: package org.apache.ignite.internal.systemview
[ERROR] IgniteDataTransferObject.java:[27,47] package
org.apache.ignite.internal.codegen.idto does not exist
{code}
Example with the IGNITE-28840 flag already applied: run 28435576909 (PR #13298).
h3. Root cause
The trigger is \{{-T 1C}}, introduced in IGNITE-28823, not incremental
compilation.
{\{maven-compiler-plugin}} runs the compiler in-process (\{{fork}} is not
enabled), so javac executes inside the Maven JVM. The \{{ignite-core}}
annotation processors — \{{MessageProcessor}},
\{{SystemViewRowAttributeWalkerProcessor}},
\{{IgniteDataTransferObjectProcessor}} — reach into \{{com.sun.tools.javac}}
internals (that is why MAVEN_OPTS and the surefire argLine open
\{{jdk.compiler/com.sun.tools.javac.*}}).
Under \{{-T 1C}} several reactor modules compile concurrently in that single
JVM. The shared in-process javac / \{{com.sun.tools.javac}} machinery is not
thread-safe, so generation of the Walker / Factory sources for \{{ignite-core}}
is intermittently dropped while the files referencing them are compiled — hence
"cannot find symbol". Single-threaded there is no concurrent compilation and
the issue does not occur.
Forking the compiler is not viable here: a forked javac would not inherit the
\{{--add-opens=jdk.compiler/...}} that MAVEN_OPTS grants the in-process
compiler, breaking the processors outright.
h3. Change
Run the codestyle / \{{test-compile}} step single-threaded again (drop \{{-T
1C}}) and remove the ineffective
\{{-Dmaven.compiler.useIncrementalCompilation=false}} from this step. The
primary IGNITE-28823 win (no second full reactor recompile on the
abandoned-tests step) is untouched.
h3. Verification
Re-run the codestyle job several times after the change; without \{{-T 1C}} the
concurrent-compilation race is gone.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)