anton-vinogradov commented on PR #13372:
URL: https://github.com/apache/ignite/pull/13372#issuecomment-4995778150

   @zstan You're right that Ignite's own Java code doesn't call these methods — 
but Calcite does, at engine init.
   
   In `calcite-core` **1.42** the class 
`org.apache.calcite.runtime.SqlFunctions` gained **59 methods** whose 
signatures use joou unsigned types (`org.joou.ULong plus(ULong, ULong)`, 
`checkedPlus(...)`, etc.). These are new in 1.42 — 1.40 had no joou at all.
   
   The node dies while building the engine, not while running a query. Stack 
(reproduced locally without joou on the classpath):
   
   ```
   java.lang.NoClassDefFoundError: org/joou/ULong
       at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
       at org.apache.calcite.linq4j.tree.Types.lookupMethod(Types.java:288)
       at org.apache.calcite.util.BuiltInMethod.<init>(BuiltInMethod.java:1043)
       at org.apache.calcite.util.BuiltInMethod.<clinit>(BuiltInMethod.java:320)
       at 
o.a.i.i.processors.query.calcite.exec.exp.RexImpTable.<init>(RexImpTable.java:300)
       ... IgniteScalarFunction.create -> SchemaHolderImpl.onFunctionCreated -> 
cache start
   ```
   
   `BuiltInMethod.<clinit>` calls `Class.getDeclaredMethods0`, which resolves 
**every** method signature of the referenced classes, including the joou-typed 
ones — so the class must be on the classpath even though nothing invokes those 
methods.
   
   **Why Java suites are green:** Surefire builds its classpath from the full 
transitive Maven graph, where `joou` is present transitively via `calcite-core` 
— declared explicitly or not. The failure only appears in classpaths assembled 
from `target/libs`, which `copy-libs` fills with **direct** dependencies only 
(`excludeTransitive=true`). That's exactly why this module already 
hand-declares guava, janino, avatica, jackson, etc. — `joou` was the one that 
got missed. Both the C++ dev node and `libs/optional/ignite-calcite` in the 
release are built from `target/libs`, so both break; Surefire never does.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to