Skip to content

IGNITE-28819 Thin client implementation extraction#13306

Merged
nizhikov merged 237 commits into
apache:masterfrom
nizhikov:IGNITE-28819
Jul 9, 2026
Merged

IGNITE-28819 Thin client implementation extraction#13306
nizhikov merged 237 commits into
apache:masterfrom
nizhikov:IGNITE-28819

Conversation

@nizhikov

Copy link
Copy Markdown
Contributor

Thank you for submitting the pull request to the Apache Ignite.

In order to streamline the review of the contribution
we ask you to ensure the following steps have been taken:

The Contribution Checklist

  • There is a single JIRA ticket related to the pull request.
  • The web-link to the pull request is attached to the JIRA ticket.
  • The JIRA ticket has the Patch Available state.
  • The pull request body describes changes that have been made.
    The description explains WHAT and WHY was made instead of HOW.
  • The pull request title is treated as the final commit message.
    The following pattern must be used: IGNITE-XXXX Change summary where XXXX - number of JIRA issue.
  • A reviewer has been mentioned through the JIRA comments
    (see the Maintainers list)
  • The pull request has been checked by the Teamcity Bot and
    the green visa attached to the JIRA ticket (see tab PR Check at TC.Bot - Instance 1 or TC.Bot - Instance 2)

Notes

If you need any help, please email dev@ignite.apache.org or ask anу advice on http://asf.slack.com #ignite channel.

nizhikov and others added 30 commits June 25, 2026 16:48
Create empty modules/thin-client/impl (ignite-thin-client-impl) for the
thin client implementation extraction. It depends only on ignite-commons,
ignite-binary-api and ignite-thin-client-api (no ignite-core dependency).

Wire it into the reactor (root pom.xml), the BOM dependency management,
and ignite-core (compile dependency + maven-shade include) so the module's
classes are bundled back into ignite-core.jar for binary compatibility,
mirroring ignite-thin-client-api.

Exclude ignite-thin-client-impl from the assembly dependency sets
(dependencies-apache-ignite{,-lgpl,-slim}.xml) as done for
ignite-thin-client-api, since the classes ship inside ignite-core.jar.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pure relocation (no code change) of the first leaf class of the thin
client implementation. ProtocolVersion has no dependencies on ignite-core
internals and is referenced only from within the thin client package, so
it moves cleanly. Its class still ships in ignite-core.jar via the shade
of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pure relocation (no code change) of a leaf class of the thin client
implementation. BinaryNameMapperMode has no ignite-core internal dependencies and is
referenced only from within the thin client package. Its class still
ships in ignite-core.jar via the shade of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pure relocation (no code change) of a leaf class of the thin client
implementation. ClientCacheEntry has no ignite-core internal dependencies and is
referenced only from within the thin client package. Its class still
ships in ignite-core.jar via the shade of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pure relocation (no code change) of a leaf class of the thin client
implementation. ClientConnection has no ignite-core internal dependencies and is
referenced only from within the thin client package. Its class still
ships in ignite-core.jar via the shade of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…impl

Pure relocation (no code change) of a leaf class of the thin client
implementation. ClientConnectionStateHandler has no ignite-core internal dependencies and is
referenced only from within the thin client package. Its class still
ships in ignite-core.jar via the shade of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pure relocation (no code change) of a leaf class of the thin client
implementation. ClientJCacheAdapter has no ignite-core internal dependencies and is
referenced only from within the thin client package. Its class still
ships in ignite-core.jar via the shade of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ent-impl

Pure relocation (no code change) of a leaf class of the thin client
implementation. ClientJCacheEntryListenerAdapter has no ignite-core internal dependencies and is
referenced only from within the thin client package. Its class still
ships in ignite-core.jar via the shade of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pure relocation (no code change) of a leaf class of the thin client
implementation. ClientMessageDecoder has no ignite-core internal dependencies and is
referenced only from within the thin client package. Its class still
ships in ignite-core.jar via the shade of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pure relocation (no code change) of a leaf class of the thin client
implementation. ClientMessageHandler has no ignite-core internal dependencies and is
referenced only from within the thin client package. Its class still
ships in ignite-core.jar via the shade of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pure relocation (no code change) of a leaf class of the thin client
implementation. ClientNotificationType has no ignite-core internal dependencies and is
referenced only from within the thin client package. Its class still
ships in ignite-core.jar via the shade of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pure relocation (no code change) of a leaf class of the thin client
implementation. ClientProtocolError has no ignite-core internal dependencies and is
referenced only from within the thin client package. Its class still
ships in ignite-core.jar via the shade of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…impl

Pure relocation (no code change) of a leaf class of the thin client
implementation. ClientRetryPolicyContextImpl has no ignite-core internal dependencies and is
referenced only from within the thin client package. Its class still
ships in ignite-core.jar via the shade of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pure relocation (no code change) of a leaf class of the thin client
implementation. IgniteClientFutureImpl has no ignite-core internal dependencies and is
referenced only from within the thin client package. Its class still
ships in ignite-core.jar via the shade of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pure relocation (no code change) of a leaf class of the thin client
implementation. NotificationListener has no ignite-core internal dependencies and is
referenced only from within the thin client package. Its class still
ships in ignite-core.jar via the shade of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pure relocation (no code change) of a leaf class of the thin client
implementation. ProtocolVersionFeature has no ignite-core internal dependencies and is
referenced only from within the thin client package. Its class still
ships in ignite-core.jar via the shade of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pure relocation (no code change) of a leaf class of the thin client
implementation. QueryPager has no ignite-core internal dependencies and is
referenced only from within the thin client package. Its class still
ships in ignite-core.jar via the shade of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pure relocation (no code change) of a leaf class of the thin client
implementation. ClientConnectionMultiplexer has no ignite-core internal dependencies and is
referenced only from within the thin client package. Its class still
ships in ignite-core.jar via the shade of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ient-impl

Pure relocation (no code change) of a leaf class of the thin client
implementation. ClientInternalBinaryConfiguration has no ignite-core internal dependencies and is
referenced only from within the thin client package. Its class still
ships in ignite-core.jar via the shade of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pure relocation (no code change) of a leaf class of the thin client
implementation. ClientOperation has no ignite-core internal dependencies and is
referenced only from within the thin client package. Its class still
ships in ignite-core.jar via the shade of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pure relocation (no code change) of a leaf class of the thin client
implementation. ClientQueryCursor has no ignite-core internal dependencies and is
referenced only from within the thin client package. Its class still
ships in ignite-core.jar via the shade of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pure relocation (no code change) of a leaf class of the thin client
implementation. FieldsQueryPager has no ignite-core internal dependencies and is
referenced only from within the thin client package. Its class still
ships in ignite-core.jar via the shade of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pure relocation (no code change) of a leaf class of the thin client
implementation. ProtocolContext has no ignite-core internal dependencies and is
referenced only from within the thin client package. Its class still
ships in ignite-core.jar via the shade of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pure relocation (no code change) of a leaf class of the thin client
implementation. ClientFieldsQueryCursor has no ignite-core internal dependencies and is
referenced only from within the thin client package. Its class still
ships in ignite-core.jar via the shade of ignite-thin-client-impl.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ClientServiceDescriptorImpl's only ignite-core dependency was the import of
org.apache.ignite.services.Service, used solely in a javadoc {@link}. Per the
move convention, the javadoc-only import is removed (the {@link Service} text
remains; doclint is disabled so it does not fail the build), leaving the class
free of ignite-core internals. Relocated to ignite-thin-client-impl; its class
still ships in ignite-core.jar via the shade.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Relocate the ClusterNodeFunc utility class from ignite-core to ignite-commons
so it is available to modules that must not depend on ignite-core (the thin
client implementation being extracted uses ClusterNodeFunc.eqNodes). The class
keeps its package org.apache.ignite.internal.util.lang, so all existing
ignite-core call sites are unaffected.

ClusterNodeFunc references four node-id predicates that lived in ignite-core
(ContainsNodeIdsPredicate, EqualsClusterNodeIdPredicate, HasEqualIdPredicate,
HasNotEqualIdPredicate); they depend only on ignite-commons classes
(ClusterNode, S, IgnitePredicate) and are moved alongside it (keeping their
gridfunc package). EqualsUuidPredicate already lives in ignite-commons.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ClientClusterNodeImpl's only ignite-core dependency was the static import of
ClusterNodeFunc.eqNodes, now resident in ignite-commons. All its other
dependencies (ClusterNode, ClusterMetrics, S, IgniteProductVersion) already
live in ignite-commons, so this is a pure relocation with no code change. The
class still ships in ignite-core.jar via the shade.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Relocate the SSL context factory classes (SslContextFactory,
AbstractSslContextFactory, DelegatingSSLContextSpi, SSLContextWrapper,
SSLServerSocketFactoryWrapper, SSLSocketFactoryWrapper and package-info) from
ignite-core to ignite-commons so they are available to modules that must not
depend on ignite-core. The thin client implementation being extracted uses
SslContextFactory.DFLT_STORE_TYPE / DFLT_KEY_ALGORITHM.

The package org.apache.ignite.ssl is preserved, so all existing call sites
(configuration classes, discovery/communication SPIs, etc.) are unaffected.
The package's only external dependencies are IgniteException and the A
argument-check helper, both already in ignite-commons.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ClientSslUtils's only ignite-core dependencies were the static imports of
SslContextFactory.DFLT_STORE_TYPE / DFLT_KEY_ALGORITHM, now resident in
ignite-commons. Its other dependencies (SslMode, SslProtocol,
ClientConfiguration) already live in ignite-thin-client-api, so this is a pure
relocation with no code change. The class still ships in ignite-core.jar via
the shade.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Relocate AffinityTopologyVersion from ignite-core to ignite-commons so it is
available to modules that must not depend on ignite-core. The thin client
channel abstraction (ClientChannel#serverTopologyVersion) returns it. The class
is a self-contained value type whose only external dependency (the S
to-string helper) already lives in ignite-commons; its package
org.apache.ignite.internal.processors.affinity is preserved so all existing
call sites are unaffected.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
nizhikov and others added 26 commits July 1, 2026 13:28
…ADER/writeFully/bytesEqual to CommonUtils

Relocate IGNITE_HEADER, writeFully(SocketChannel,ByteBuffer) and bytesEqual(...) from
IgniteUtils to CommonUtils (still inherited by IgniteUtils) and repoint the nio package
classes from U to CommonUtils, removing their dependency on core's typedef U.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Its only core tie was an @see CIX2 javadoc reference; drop it (F.wrap is inherited from
commons GridFunc) and move the class to ignite-commons so the NIO communication clients
no longer depend on a core type for it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…n to ignite-commons

GridWorkerPool uses CommonUtils.cancel/join (already in commons) instead of U, and the
ComputeExecutionRejectedException it throws moves to ignite-commons as well (FQN preserved).
Removes GridNioAsyncNotifyFilter's dependency on a core worker-pool type.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…r uses SpanManager

Move the self-contained SpanTransport marker interface to ignite-commons and retype
GridNioTracerFilter's tracer to SpanManager (serialize/create are SpanManager methods),
defaulting to NoopSpanManager. Removes the filter's Tracing/NoopTracing/SpanTransport
core dependencies.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…Manager

Pass the SpanManager from GridNioServer into the session and resolve trace names through
SpanManager.traceName instead of the static TraceableMessagesTable.traceName, removing the
session's dependency on the core TraceableMessagesTable.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ricRegistryImpl

Retype the filter's handshake-duration metric to LongConsumer and the rejected-sessions
counter to Runnable; metric creation moves to a new IgniteUtils.sslFilter(...) factory that
the four construction sites now call. Removes GridNioSslFilter's dependency on
MetricRegistryImpl/HistogramMetricImpl/IntMetricImpl.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…cpCommunicationSpi

Type the reader as MessageReader (setBuffer/reset suffice, the DirectMessageReader cast was
redundant) and inline the 2-byte direct-type decoding instead of using
TcpCommunicationSpi.makeMessageType.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Relocate GridNioServer and the entire org.apache.ignite.internal.util.nio package (39
classes, including the ssl subpackage) from ignite-core to the ignite-nio module, now that
the package depends only on ignite-commons, ignite-binary-api and ignite-grid-unsafe. Add
the ignite-grid-unsafe dependency to ignite-nio. ignite-core continues to depend on
ignite-nio, so all existing references resolve.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ite-thin-client-impl

With the NIO package now in ignite-nio, add an ignite-nio dependency to ignite-thin-client-impl
and move the last 11 thin-client implementation classes (TcpIgniteClient, TcpClientCache,
ReliableChannelImpl, ClientServicesImpl, the continuous-query/listener classes and the
client-side gridnioserver multiplexer/connection/parser/listener) out of ignite-core.
GridNioClientConnectionMultiplexer builds its SSL filter directly (no metrics) instead of via
the core IgniteUtils.sslFilter factory. ignite-core keeps a compile dependency on
ignite-thin-client-impl, so Ignition and platform-client references still resolve.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@nizhikov
nizhikov merged commit 32026f4 into apache:master Jul 9, 2026
6 of 7 checks passed
@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown

Possible compatibility issues. Please, check rolling upgrade cases

This PR modifies protected classes (with Order annotation).
Changes to these classes can break rolling upgrade compatibility.

Affected files:

  • modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessage.java
  • modules/core/src/test/java/org/apache/ignite/internal/codegen/MessageProcessorTest.java

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants