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)

Reply via email to