IGNITE-28819 Thin client implementation extraction#13306
Merged
Conversation
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>
…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>
anton-vinogradov
approved these changes
Jul 9, 2026
Possible compatibility issues. Please, check rolling upgrade casesThis PR modifies protected classes (with Order annotation). Affected files:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
The description explains WHAT and WHY was made instead of HOW.
The following pattern must be used:
IGNITE-XXXX Change summarywhereXXXX- number of JIRA issue.(see the Maintainers list)
the
green visaattached to the JIRA ticket (see tabPR Checkat 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.