Anton Vinogradov created IGNITE-28894:
-----------------------------------------

             Summary: C++: thin-client nested modules are missing from the 
dev-mode classpath
                 Key: IGNITE-28894
                 URL: https://issues.apache.org/jira/browse/IGNITE-28894
             Project: Ignite
          Issue Type: Task
            Reporter: Anton Vinogradov
            Assignee: Anton Vinogradov


CreateIgniteHomeClasspath() (used when IGNITE_NATIVE_TEST_CLASSPATH=true, i.e. 
C++ tests run against an exploded dev build) scans modules/ only one level 
deep: for every direct child it calls ClasspathExploded(child, false), so 
nested maven modules are never visited.

modules/thin-client is not a maven module itself (it has no pom.xml) — it is a 
grouping directory holding thin-client/api and thin-client/impl. As a result 
neither their target/classes nor their target/libs end up on the classpath of a 
node started from C++.

These classes cannot arrive any other way: copy-dependencies in parent/pom.xml 
sets <excludeGroupIds>${project.groupId}</excludeGroupIds>, so ignite artifacts 
are never copied into target/libs.

jdeps confirms real bytecode references from ignite-core into the thin client:
  * org.apache.ignite.Ignition -> IgniteClient, ClientException, TcpIgniteClient
  * management commands (DeactivateCommand, SetStateCommand, StateCommand, 
WarmUpStopCommand, CommandUtils) -> ClientCluster, IgniteClient

They are resolved lazily, so a node currently starts fine (verified with both 
the default config and the cache-test.xml used by the C++ core tests). But any 
path that reaches Ignition.startClient() or a management command from the 
C++-hosted JVM fails with NoClassDefFoundError. The hole is latent, not yet 
observable in the existing C++ suite.

The same problem was already solved for modules/binary when it was split into 
api/impl: CreateIgniteHomeClasspath() carries an explicit recursive special 
case for that directory — ClasspathExploded(home + "/modules/binary", true). 
Moving the thin client into nested modules did not add the matching line; the 
C++ side was not touched at all.

Fix: mirror the binary special case for modules/thin-client in both
  * modules/platforms/cpp/core/src/jni/os/linux/utils.cpp
  * modules/platforms/cpp/core/src/jni/os/win/utils.cpp

A generic two-level scan is deliberately avoided: it would additionally pull 
extdata/* (p2p / URI-deployment test data that is intentionally kept off the 
classpath), platforms/dotnet and web/*-test into the dev node classpath.



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

Reply via email to