[
https://issues.apache.org/jira/browse/IGNITE-28841?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Anton Vinogradov resolved IGNITE-28841.
---------------------------------------
Resolution: Fixed
> 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
> Priority: Major
> Time Spent: 20m
> Remaining Estimate: 0h
>
> 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)