Skip to content

IGNITE-28520 Auto-generate message serialization / marshalling / deployment - #13095

Merged
anton-vinogradov merged 347 commits into
apache:masterfrom
anton-vinogradov:ignite-28520
Jul 28, 2026
Merged

IGNITE-28520 Auto-generate message serialization / marshalling / deployment#13095
anton-vinogradov merged 347 commits into
apache:masterfrom
anton-vinogradov:ignite-28520

Conversation

@anton-vinogradov

@anton-vinogradov anton-vinogradov commented Apr 30, 2026

Copy link
Copy Markdown
Contributor

What

Extends the annotation-driven message codegen (previously serialization-only) to
marshalling and deployment: a message's wire read/write, marshalling and
deployment are now generated from declarative field annotations, replacing
hand-written writeTo/readFrom, prepareMarshal/finishUnmarshal and prepareDeployment.

Main directions

  1. Generated marshaller & deployer companions. MessageProcessor now emits
    <Msg>Marshaller and <Msg>Deployer next to <Msg>Serializer, driven by
    @Marshalled / @MarshalledCollection / @MarshalledMap (with @Order /
    @NioField). Hand-written marshalling/deployment hooks are removed from messages.

  2. Uniform factory dispatch. MessageFactory resolves all three by direct type —
    serializer() / marshaller() / deployer() — via one
    register(directType, supplier, serializer, marshaller, deployer). Callers use the
    static facades MessageSerializer.writeTo/readFrom, MessageMarshaller.marshal/unmarshal,
    GridCacheMessageDeployer.deploy; an ArchUnit rule (MessageSerializationArchitectureTest)
    enforces it.

  3. Comm & discovery wired to it. GridIoManager / GridCacheIoManager /
    IgniteTxManager and the TCP/ZK discovery I/O call MessageMarshaller.marshal/unmarshal;
    discovery custom messages (MetadataUpdateProposedMessage, BinaryMetadataVersionInfo, …)
    move from MarshallableMessage hooks to @Marshalled.

  4. Deployment collapsed. GridCacheMessageDeployer is now only the codegen interface
    plus the factory-resolving facade; per-field static bridges dropped, GridCacheMessage#deploy*
    accessed directly.

  5. Marshalling stays off the NIO threads. The NIO codec does only serialization
    (writeTo/readFrom); the actual marshal/unmarshal runs on the sender and worker
    threads. @NioField + unmarshalNio are the explicit, minimal exception — only the
    handful of fields needed for early dispatch are unmarshalled on the NIO thread.

Side effects (mechanical — skim)

  • Rename to a consistent vocabulary (bulk of the diff, purely mechanical):
    • prepareMarshalmarshal, finishUnmarshalunmarshal,
      finishUnmarshalNiounmarshalNio (on MarshallableMessage / MessageMarshaller);
    • CacheObject#prepareMarshal(ctx) / finishUnmarshal(ctx)marshal / unmarshal;
    • deployment prepareDeployment + prepare*Deployment helpers → deploy / deploy*;
    • test renames: MarshallerCacheFreeFinishTest…UnmarshalTest,
      MessageFinishUnmarshalOnceTestMessageUnmarshalOnceTest.
  • Build/CI: .mvn/jvm.config opens jdk.compiler for the codegen tests
    (Google compile-testing); commit-check.yml now surfaces the real compile error
    behind the generated-class "cannot find symbol" cascade.

Performance

JMH-verified: serialization hot path unchanged (Δ ≈ 0 vs master); marshalling adds
~1.8 ns/message of factory dispatch (<0.5% of the actual U.marshal, ~µs); zero extra
allocations.

@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
43 New Code Smells (required ≤ 1)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

@anton-vinogradov

anton-vinogradov commented Jul 25, 2026

Copy link
Copy Markdown
Contributor Author

/runall


🚀 RunAll queuedbuild 9228148. The verdict lands here when the run finishes.
🏁 Run finished — the verdict comment has the full story.

@anton-vinogradov

anton-vinogradov commented Jul 25, 2026

Copy link
Copy Markdown
Contributor Author

Ignite PR Checker verdict · RunAll build 9228148 · 147 suites ran, 0 reused

5 blocker(s) in 1 suite(s):

  • Cache (Expiry Policy): org.apache.ignite.internal.processors.cache.expiry.IgniteCacheExpiryPolicyTestSuite: org.apache.ignite.internal.processors.cache.IgniteCacheExpireAndUpdateConsistencyTest.testTx2
  • Cache (Expiry Policy): org.apache.ignite.internal.processors.cache.expiry.IgniteCacheExpiryPolicyTestSuite: org.apache.ignite.internal.processors.cache.IgniteCacheExpireAndUpdateConsistencyTest.testTx3
  • Cache (Expiry Policy): org.apache.ignite.internal.processors.cache.expiry.IgniteCacheExpiryPolicyTestSuite: org.apache.ignite.internal.processors.cache.IgniteCacheExpireAndUpdateConsistencyTest.testAtomic1
  • Cache (Expiry Policy): org.apache.ignite.internal.processors.cache.expiry.IgniteCacheExpiryPolicyTestSuite: org.apache.ignite.internal.processors.cache.IgniteCacheExpireAndUpdateConsistencyTest.testAtomic2
  • Cache (Expiry Policy): org.apache.ignite.internal.processors.cache.expiry.IgniteCacheExpiryPolicyTestSuite: org.apache.ignite.internal.processors.cache.IgniteCacheExpireAndUpdateConsistencyTest.testAtomic3

♻️ Settled after 2 auto re-run wave(s): #1 — 1 blocker + 1 broken suite(s); #2 — 1 blocker suite(s).

@anton-vinogradov

anton-vinogradov commented Jul 25, 2026

Copy link
Copy Markdown
Contributor Author

/runall


🚀 RunAll queuedbuild 9228469. The verdict lands here when the run finishes.
🏁 Run finished — the verdict comment has the full story.

@anton-vinogradov

Copy link
Copy Markdown
Contributor Author

Ignite PR Checker verdict · RunAll build 9228469 · 147 suites ran, 0 reused

No blockers — nothing in this run looks caused by this PR. 21 pre-existing/flaky tests filtered out.

@anton-vinogradov

Copy link
Copy Markdown
Contributor Author

Ignite PR Checker verdict · RunAll build 9229249 · 16 suites ran, 131 reused

No blockers — nothing in this run looks caused by this PR. 12 pre-existing/flaky tests filtered out.

for (int i = 1; i <= RMT_CNT; i++)
rmts.add(grid(i).localNode());

MARSHAL_CNT.set(0);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can it be not 0 here?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In a clean run it cannot: MARSHAL_CNT is incremented only by CountingMarshaller, which is registered for direct type MAX_MESSAGE_ID + 1, and that type belongs only to MarshalOnceCheckMessage — created nowhere but in this test method. The reset matters because the counter is static, i.e. shared by all five nodes in the JVM and surviving across method boundaries: with @repeat (GridAbstractTest installs RepeatRule) or a repeated run of the class in the same fork the second iteration would enter with a non-zero value and the assert below would fail for the wrong reason.


startGrids(2);

RETRY_MARSHAL_CNT.set(0);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can it be not 0 here?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as the other one: RETRY_MARSHAL_CNT is touched only by RetryCountingMarshaller, registered for direct type MAX_MESSAGE_ID + 2, which belongs only to RetryCheckMessage created in this method — so it is 0 in a clean run. The reset guards against the static counter carrying a value over from a repeated run in the same JVM.

* objects travel as {@code QueryStartRequest} parameters and as {@code QueryBatchMessage} rows, and record the thread
* that deserializes them.
*/
public class CalciteMessageUnmarshalThreadIntegrationTest extends AbstractBasicIntegrationTest {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we put it in CalciteCommunicationMessageSerializationTest?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They can't share a class — the bases are incompatible. CalciteCommunicationMessageSerializationTest extends AbstractMessageSerializationTest, a plain JUnit class that starts no nodes: it walks the registered direct types and round-trips each message through mock writer/reader, and it runs in the unit-level suite. The unmarshal-thread test extends AbstractBasicIntegrationTest (GridCommonAbstractTest), starts two servers plus a client and needs real SQL — CREATE TABLE with an OTHER column, 200 inserts and a query with a custom-object parameter — because it asserts on the threads in which the payload is actually deserialized. Putting it there would mean dragging the grid lifecycle into a unit-level serialization test and moving that class out of its suite.

@@ -97,21 +110,32 @@ public class MessageProcessor extends AbstractProcessor {
static final String[] SKIP_MESSAGES = {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we should do smth. like registerExclusionMessages(Class<? extents Message> msgCls) instead

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A Class-typed API cannot be built here, in either direction. The codegen module depends only on ignite-commons, while Message lives in ignite-nio, so Class<? extends Message> does not even compile in this module. And the classes themselves are unreachable regardless of the bound: every excluded one lives in a module that depends on ignite-codegen (core, zookeeper, indexing, calcite), so codegen cannot depend back — that would be a Maven cycle. This is why the lists are FQN strings resolved through Elements.getTypeElement() with a null filter, so an entry missing from the current module's classpath is simply skipped. The mechanism is master's own; this PR adds a single entry to it.

@anton-vinogradov

Copy link
Copy Markdown
Contributor Author

Ignite PR Checker verdict · RunAll build 9232278 · 147 suites ran, 0 reused

No blockers — nothing in this run looks caused by this PR. 28 pre-existing/flaky tests filtered out.

}

/** @return {@code true} if this message has been marshalled. */
boolean marshalled() {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is used only with asserts. Let's remove. We have the double0marshalling check mechanics

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These are the marshal side, and the double-unmarshal mechanics do not cover it: MessageUnmarshalOnceCheck tracks finish-unmarshal of a payload and is gated by IGNITE_MESSAGE_UNMARSHAL_ONCE_CHECK, i.e. it only runs under tests. The flag here guards three different invariants of the prepare-once scheme on the send path: marshal() asserts a wrap is never marshalled twice (marshalling is not idempotent — GridCacheEntryInfo rebases expireTime, for one), sendPrepared() asserts nothing unprepared is sent, and sendMarshalled() asserts nothing unmarshalled reaches the wire. That is what makes prepare-once safe for both fan-out (sendToMany) and retry (sendWithRetry), and it caught a real double-marshal while the retry loop was being reworked in this PR. MessageMarshalOnceTest covers two scenarios; the asserts cover every other path, including future ones. Assertions are off in production, so the cost is a boolean field on GridIoMessage.

* <p>The rules key on whether the called method is {@code static}, not on its name — so any instance method added
* to these interfaces is covered automatically.
*/
public class MessageSerializationArchitectureTest {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we join it with MarshallerCacheFreeUnmarshallTest?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They check different things: MarshallerCacheFreeUnmarshalTest verifies runtime behaviour of one path (a cache-free unmarshal leaves @Marshalled payload untouched and the cache-aware pass finishes it), while this class states three architectural rules over the whole org.apache.ignite class graph. Merging them would put a class-graph scan into a behavioural test and drag the ArchUnit import into it — the opposite of the concern in the other thread. Kept separate.

import com.tngtech.archunit.base.DescribedPredicate;
import com.tngtech.archunit.core.domain.JavaClasses;
import com.tngtech.archunit.core.domain.JavaMethodCall;
import com.tngtech.archunit.core.domain.JavaModifier;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We bring new dependency/library only for tests, for 2 tests and only to check where we call own methods. I doubt it worths. @shishkovilja WDYT? If we aren'tsure how we call methods, probably it is design-related and should be reconsidered in general.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The three rules pin the central invariant of this change: nobody outside the generated companions and the static facades may call MessageSerializer.writeTo/readFrom, MessageMarshaller.marshal/unmarshal or GridCacheMessageDeployer.deploy directly. That is not a stylistic wish — a direct call bypasses the dispatcher and, for the marshalling side, silently moves payload (de)serialization back onto the NIO thread and around the marshal-once contract. The rules have already earned their keep on this branch: every master merge that touched GridNioServer or the Calcite tests brought back a direct msgSer.writeTo(...) call, and the test caught it locally instead of in a suite run.

There is no design-level way to enforce it with the compiler: MessageSerializer is a public SPI, its implementations are generated into other packages, and factory.serializer(...) is called from GridNioServerWrapper (core) and MessageSerialization (nio), so the instance methods cannot be package-private or hidden.

Writing it without the library means bytecode analysis by hand (reflection cannot see call sites) — a home-grown ArchUnit of a couple hundred lines to maintain. The dependency is test-scoped and never ships; modules/core/pom.xml already carries com.google.testing.compile for exactly the same reason — a test-only library for one narrow check, and that one comes from master.

If "no new dependencies" is the priority, I'd rather file a follow-up to rewrite these three rules without the library than drop the check — losing it means the next such regression lands in master unnoticed. WDYT?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@anton-vinogradov , I guggest to remove both tngtech test before the merging.

this.last = last;

mRows = rows.stream().map(o -> o == null ? null : new GenericValueMessage(o)).collect(Collectors.toList());
mRows = new ArrayList<>(rows.size());

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why changed?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is the same conversion as on master, just without the stream pipeline: master does mRows = rows.stream().map(o -> o == null ? null : new GenericValueMessage(o)).collect(toList()), this is the equivalent loop into a pre-sized ArrayList — no lambda/collector allocations per batch, same result. (The lazy variant I had here earlier is reverted, as agreed in the F.view thread.)

*/
public List<Object> rows() {
return mRows.stream().map(GenericValueMessage::value).collect(Collectors.toList());
List<Object> rows = new ArrayList<>(mRows.size());

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same on the read side: master's rows() is mRows.stream().map(GenericValueMessage::value).collect(toList()), this is the same thing as a loop into a pre-sized list.

* current one is answered with the key in {@code nearEvicted}, so the reader is dropped instead of keeping a stale
* near entry.
*/
public class GridNearTxRecreateEvictionTest extends GridCommonAbstractTest {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we put in other ticket?

Comment thread modules/codegen/src/main/java/org/apache/ignite/internal/MessageGenerator.java Outdated
* An ordered message whose payload fails to unmarshal must be skipped with an error logged, not abandon the rest of
* the accumulated set: the tail would otherwise stay unprocessed until the next message arrives on the topic.
*/
public class GridIoManagerOrderedPoisonMessageTest extends GridCommonAbstractTest {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why we keep creating test class for single test method? Let's put it somewhere aroud serialization/marshalling tests

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd keep it separate. The test needs two grids, a plugin registering its own direct type with a marshaller that fails on demand, and a listener thread blocked mid-delivery so that the next two messages pile up in one ordered set — that is the whole point of the scenario.

The neighbours around serialization/marshalling are unit-level: MessageProcessorTest (compile-testing), MarshallerCacheFreeUnmarshalTest and MessageSerializationArchitectureTest (class-graph rules), MessageUnmarshalOnceCheckTest — none of them start a node. The only grid-based one is MessageMarshalOnceTest, but its configuration installs a different plugin (two direct types with counting marshallers) plus an SPI that fails the first send; folding a third direct type and a blocking listener into it would merge two unrelated scenarios into one configuration. That is also the reasoning you applied yourself in the MessageSerializationArchitectureTest thread — different subjects, different classes.


/** @return Number of messages pending in the receiver's ordered set of {@link #TOPIC}. */
private static int pendingOrderedMessages(IgniteEx rcv) {
Map<Object, Map<UUID, Object>> setMap = GridTestUtils.getFieldValue(rcv.context().io(), "msgSetMap");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We might cat to the implementation and add some getter with @TestOnly

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That was the shape this test had at first, and it was rejected in review: initMessageFactoryForTest() in IgniteKernal was removed on the grounds that a production class should not carry a method existing solely for one test, and the test was switched to reflection (U.invoke) instead — see the IgniteKernal thread. Adding a @testonly getter to GridIoManager for msgSetMap would walk that decision back, so I'd rather keep the reflection here: it is a test-only peek at internal state, contained in the test itself. Happy to switch if you and @shishkovilja agree on the opposite rule.

@anton-vinogradov

anton-vinogradov commented Jul 28, 2026

Copy link
Copy Markdown
Contributor Author

/runall


🚀 RunAll queuedbuild 9234302 · live progress & verdict: Ignite PR Checker. The verdict lands here when the run finishes.
🛑 Run cancelled.

@github-actions

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/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/CalciteErrorMessage.java
  • modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/GenericValueMessage.java
  • modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/QueryBatchMessage.java
  • modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/QueryStartRequest.java
  • modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/QueryStartResponse.java
  • modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/QueryTxEntry.java
  • modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/ColocationGroup.java
  • modules/codegen/src/main/java/org/apache/ignite/internal/MessageProcessor.java
  • modules/codegen/src/main/java/org/apache/ignite/internal/idto/IDTOSerializerGenerator.java
  • modules/core/src/main/java/org/apache/ignite/internal/managers/communication/ErrorMessage.java
  • modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessage.java
  • modules/core/src/main/java/org/apache/ignite/internal/managers/communication/IgniteIoTestMessage.java
  • modules/core/src/main/java/org/apache/ignite/internal/managers/eventstorage/GridEventStorageMessage.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateAdapter.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeDirectResult.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/DynamicCacheChangeRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryInfo.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheIdMessage.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/StoredCacheData.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/BinaryMetadataVersionInfo.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/MetadataUpdateProposedMessage.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheTtlUpdateRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedLockRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedLockResponse.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxPrepareRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridNearUnlockRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockResponse.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxFinishResponse.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareResponse.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtUnlockRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/TransactionAttributesAwareRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/AtomicApplicationAttributesAwareRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicNearResponse.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicSingleUpdateRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateResponse.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicFullUpdateRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateFilterRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateInvokeRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateResponse.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/UpdateErrors.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtForceKeysRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtForceKeysResponse.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionSupplyMessage.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsFullMessage.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsSingleMessage.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/CacheVersionedValue.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetResponse.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearSingleGetRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearSingleGetResponse.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareResponse.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IncrementalSnapshotAwareMessage.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IncrementalSnapshotVerifyResult.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryResponse.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryEntry.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxKey.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxEntryValueHolder.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxLocksRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxLocksResponse.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/verify/PartitionHashRecord.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cache/verify/TransactionsHashRecord.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/ChangeGlobalStateMessage.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousMessage.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/StartRequestData.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerRequest.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageCasMessage.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageUpdateMessage.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/PluginsDataBagItem.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/query/schema/message/QueryEntityMessage.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/task/GridTaskResultResponse.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/service/LazyServiceConfigurationMessage.java
  • modules/core/src/main/java/org/apache/ignite/internal/processors/service/ServiceSingleNodeDeploymentResult.java
  • modules/core/src/main/java/org/apache/ignite/spi/discovery/SerializableDataBagItemWrapper.java
  • modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java
  • modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeAddFinishedMessage.java
  • modules/core/src/test/java/org/apache/ignite/internal/codegen/MessageProcessorTest.java
  • modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/TestDelayMessage.java
  • modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/ExploitMessage.java
  • modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/msg/GridH2CacheObject.java

@anton-vinogradov

Copy link
Copy Markdown
Contributor Author

Ignite PR Checker verdict · RunAll build 9234928 · 147 suites ran, 0 reused

No blockers — nothing in this run looks caused by this PR. 19 pre-existing/flaky tests filtered out.

@anton-vinogradov
anton-vinogradov merged commit bfdc573 into apache:master Jul 28, 2026
8 checks passed
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.

4 participants