Anton Vinogradov created IGNITE-28893:
-----------------------------------------

             Summary: Calcite. Missing joou runtime dependency halts node 
startup in release package and C++ tests
                 Key: IGNITE-28893
                 URL: https://issues.apache.org/jira/browse/IGNITE-28893
             Project: Ignite
          Issue Type: Task
            Reporter: Anton Vinogradov
            Assignee: Anton Vinogradov


The Calcite upgrade from 1.40 to 1.42 changed only the version properties in 
modules/calcite/pom.xml.
However, calcite-core 1.42 declares a new runtime dependency, 
org.jooq:joou-java-6, which
calcite-core 1.40 did not have. It was not added to the module's dependency 
list.

Why that matters:

The copy-libs execution of maven-dependency-plugin in parent/pom.xml copies 
only DIRECT dependencies
into target/libs (excludeTransitive is true). This is why 
modules/calcite/pom.xml already declares
calcite's runtime dependencies explicitly - guava, failureaccess, janino, 
avatica-core, jackson,
json-path, reflections. joou was not declared, so it never lands in 
modules/calcite/target/libs.

Two consumers are built from target/libs:

1. The release package. The assembly descriptor 
(assembly/dependencies-apache-ignite.xml) maps each
   optional module's target/libs into libs/optional/${module.artifactId}. So 
libs/optional/ignite-calcite
   ships without joou.

2. The exploded classpath of the embedded dev node, assembled by 
CreateIgniteHomeClasspath() in
   modules/platforms/cpp/core/src/jni/os/\{linux,win}/utils.cpp, which appends 
each module's
   target/libs jars. This is the classpath the C++ tests boot their JVM node 
with.

Effect:

A node with the Calcite query engine enabled dies during startup:

    java.lang.NoClassDefFoundError: org/joou/ULong
    Critical system error detected ... failureCtx=FailureContext 
[type=SYSTEM_WORKER_TERMINATION,
        err=java.lang.NoClassDefFoundError: org/joou/ULong]
    JVM will be halted immediately due to the failure

Because StopNodeOrHaltFailureHandler halts the JVM from inside the hosting 
process, the C++ test
binary that started the node is killed along with it, and its remaining tests 
never run.

In CI this shows up in the Platform C++ CMake suites: the only C++ 
configuration that enables the
Calcite engine is odbc-test/config/queries-default.xml, so the ODBC binary dies 
at its first
node-starting test (ConnectionTestSuite: TestConnectionRestore, which boots 
queries-test.xml). The
suite reports 595 tests instead of 1046 with zero failures - core-test 458 and 
thin-client-test 130
complete, odbc-test contributes only 7 - and the "test count dropped" guard 
turns the suite red.

Java test suites are unaffected because Surefire resolves the full transitive 
classpath from Maven.

Fix: declare org.jooq:joou-java-6 explicitly in modules/calcite/pom.xml, so it 
is copied into
target/libs and reaches both the release package and the exploded test 
classpath.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to