From 0df16c1fa3760071c9e7d03b6652641d8b9f8bc9 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 26 Mar 2026 17:52:06 +0300 Subject: [PATCH 01/56] WIP --- .../internal/direct/DirectMessageReader.java | 15 ++-- .../direct/stream/DirectByteBufferStream.java | 18 ++++- .../managers/communication/GridIoManager.java | 2 +- .../distributed/dht/GridDhtLockRequest.java | 49 +++---------- .../distributed/near/GridNearGetRequest.java | 69 ++++--------------- .../cache/transactions/TxLocksRequest.java | 31 ++------- .../discovery/tcp/TcpDiscoveryIoSession.java | 2 +- .../direct/DirectMarshallingMessagesTest.java | 2 +- .../communication/CompressedMessageTest.java | 2 +- .../cache/CacheMetricsCacheSizeTest.java | 2 +- ...acheContinuousQueryImmutableEntryTest.java | 2 +- .../testframework/GridSpiTestContext.java | 2 +- .../zk/internal/DiscoveryMessageParser.java | 2 +- 13 files changed, 64 insertions(+), 134 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageReader.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageReader.java index d32d179ae55eb..835ac14d327e5 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageReader.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageReader.java @@ -23,6 +23,7 @@ import java.util.Map; import java.util.UUID; import java.util.function.Function; +import org.apache.ignite.internal.GridKernalContext; import org.apache.ignite.internal.direct.state.DirectMessageState; import org.apache.ignite.internal.direct.state.DirectMessageStateItem; import org.apache.ignite.internal.direct.stream.DirectByteBufferStream; @@ -57,6 +58,9 @@ public class DirectMessageReader implements MessageReader { /** Cache object processor. */ private final IgniteCacheObjectProcessor cacheObjProc; + + /** */ + private final GridKernalContext ctx; /** Buffer for reading. */ private ByteBuffer buf; @@ -68,13 +72,14 @@ public class DirectMessageReader implements MessageReader { * @param msgFactory Message factory. * @param cacheObjProc Cache object processor. */ - public DirectMessageReader(final MessageFactory msgFactory, IgniteCacheObjectProcessor cacheObjProc) { + public DirectMessageReader(final MessageFactory msgFactory, IgniteCacheObjectProcessor cacheObjProc, GridKernalContext ctx) { this.msgFactory = msgFactory; this.cacheObjProc = cacheObjProc; + this.ctx = ctx; state = new DirectMessageState<>(StateItem.class, new IgniteOutClosure() { @Override public StateItem apply() { - return new StateItem(msgFactory, cacheObjProc); + return new StateItem(msgFactory, cacheObjProc, ctx); } }); } @@ -486,7 +491,7 @@ private T readCompressedMessageAndDeserialize(DirectByteBufferStream stream, tmpBuf.put(uncompressed); tmpBuf.flip(); - DirectMessageReader tmpReader = new DirectMessageReader(msgFactory, cacheObjProc); + DirectMessageReader tmpReader = new DirectMessageReader(msgFactory, cacheObjProc, ctx); tmpReader.setBuffer(tmpBuf); @@ -510,8 +515,8 @@ private static class StateItem implements DirectMessageStateItem { * @param msgFactory Message factory. * @param cacheObjProc Cache object processor. */ - public StateItem(MessageFactory msgFactory, IgniteCacheObjectProcessor cacheObjProc) { - stream = new DirectByteBufferStream(msgFactory, cacheObjProc); + public StateItem(MessageFactory msgFactory, IgniteCacheObjectProcessor cacheObjProc, GridKernalContext ctx) { + stream = new DirectByteBufferStream(msgFactory, cacheObjProc, ctx); } /** {@inheritDoc} */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java index 053732880b6ec..082ecd9ec6c97 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java @@ -32,9 +32,11 @@ import java.util.function.Supplier; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteException; +import org.apache.ignite.internal.GridKernalContext; import org.apache.ignite.internal.managers.communication.CompressedMessage; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.CacheObject; +import org.apache.ignite.internal.processors.cache.CacheObjectContext; import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessor; import org.apache.ignite.internal.util.GridLongList; @@ -350,6 +352,12 @@ public class DirectByteBufferStream { /** */ private boolean serializeFinished; + /** */ + final GridKernalContext ctx; + + /** */ + final CacheObjectContext fakeCacheObjCtx; + /** * Constructror for stream used for writing messages. * @@ -360,6 +368,8 @@ public DirectByteBufferStream(MessageFactory msgFactory) { // Is not used while writing messages. cacheObjProc = null; + fakeCacheObjCtx = null; + ctx = null; } /** @@ -368,9 +378,13 @@ public DirectByteBufferStream(MessageFactory msgFactory) { * @param msgFactory Message factory. * @param cacheObjProc Cache object processor. */ - public DirectByteBufferStream(MessageFactory msgFactory, IgniteCacheObjectProcessor cacheObjProc) { + public DirectByteBufferStream(MessageFactory msgFactory, IgniteCacheObjectProcessor cacheObjProc, GridKernalContext ctx) { this.msgFactory = msgFactory; this.cacheObjProc = cacheObjProc; + this.ctx = ctx; + + fakeCacheObjCtx = new CacheObjectContext( + ctx, null, null, false, false, false, false); } /** @@ -1501,7 +1515,7 @@ public KeyCacheObject readKeyCacheObject() { } try { - KeyCacheObject key = cacheObjProc.toKeyCacheObject(null, cacheObjType, cacheObjArr); + KeyCacheObject key = cacheObjProc.toKeyCacheObject(fakeCacheObjCtx, cacheObjType, cacheObjArr); if (keyCacheObjPart != -1) key.partition(keyCacheObjPart); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java index 7a164d1b6d5e3..2da098610482e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java @@ -437,7 +437,7 @@ public void resetMetrics() { } @Override public MessageReader reader(MessageFactory msgFactory) { - return new DirectMessageReader(msgFactory, ctx.cacheObjects()); + return new DirectMessageReader(msgFactory, ctx.cacheObjects(), ctx); } }; } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockRequest.java index 1e862a71061df..3dcd24303127b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockRequest.java @@ -28,7 +28,6 @@ import org.apache.ignite.internal.processors.cache.distributed.GridDistributedLockRequest; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; import org.apache.ignite.internal.util.GridLeanMap; -import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.lang.IgniteUuid; @@ -50,36 +49,27 @@ public class GridDhtLockRequest extends GridDistributedLockRequest { /** Owner mapped version, if any. */ @GridToStringInclude - private Map owned; - - /** Array of keys from {@link #owned}. Used during marshalling and unmarshalling. */ @Order(2) - @GridToStringExclude - KeyCacheObject[] ownedKeys; - - /** Array of values from {@link #owned}. Used during marshalling and unmarshalling. */ - @Order(3) - @GridToStringExclude - GridCacheVersion[] ownedValues; + Map owned; /** Topology version. */ - @Order(4) + @Order(3) AffinityTopologyVersion topVer; /** Task name hash. */ - @Order(5) + @Order(4) int taskNameHash; /** Indexes of keys needed to be preloaded. */ - @Order(6) + @Order(5) BitSet preloadKeys; /** TTL for read operation. */ - @Order(7) + @Order(6) long accessTtl; /** Transaction label. */ - @Order(8) + @Order(7) String txLbl; /** @@ -260,35 +250,16 @@ public long accessTtl() { @Override public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { super.prepareMarshal(ctx); - if (owned != null && ownedKeys == null) { - ownedKeys = new KeyCacheObject[owned.size()]; - ownedValues = new GridCacheVersion[ownedKeys.length]; - - int i = 0; - - for (Map.Entry entry : owned.entrySet()) { - ownedKeys[i] = entry.getKey(); - ownedValues[i] = entry.getValue(); - i++; - } - } + } /** {@inheritDoc} */ @Override public void finishUnmarshal(GridCacheSharedContext ctx, ClassLoader ldr) throws IgniteCheckedException { super.finishUnmarshal(ctx, ldr); - if (ownedKeys != null) { - owned = new GridLeanMap<>(ownedKeys.length); - - for (int i = 0; i < ownedKeys.length; i++) { - ownedKeys[i].finishUnmarshal(ctx.cacheContext(cacheId).cacheObjectContext(), ldr); - owned.put(ownedKeys[i], ownedValues[i]); - } - - ownedKeys = null; - ownedValues = null; - } + if (owned != null) + for (Map.Entry entry : owned.entrySet()) + entry.getKey().finishUnmarshal(ctx.cacheContext(cacheId).cacheObjectContext(), ldr); } /** {@inheritDoc} */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetRequest.java index 03811aa6e79fe..b0f6879a07e80 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetRequest.java @@ -17,11 +17,7 @@ package org.apache.ignite.internal.processors.cache.distributed.near; -import java.util.ArrayList; -import java.util.Iterator; import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.Order; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; @@ -35,7 +31,6 @@ import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.S; -import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgniteUuid; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -69,40 +64,33 @@ public class GridNearGetRequest extends GridCacheIdMessage implements GridCacheD @Order(2) GridCacheVersion ver; - /** */ - @GridToStringInclude - private LinkedHashMap keyMap; - /** */ @Order(3) - List keys; + @GridToStringInclude + LinkedHashMap keys; /** */ @Order(4) - List readersFlags; - - /** */ - @Order(5) byte flags; /** Topology version. */ - @Order(6) + @Order(5) AffinityTopologyVersion topVer; /** Task name hash. */ - @Order(7) + @Order(6) int taskNameHash; /** TTL for read operation. */ - @Order(8) + @Order(7) long createTtl; /** TTL for read operation. */ - @Order(9) + @Order(8) long accessTtl; /** Transaction label. */ - @Order(10) + @Order(9) @Nullable String txLbl; /** @@ -132,7 +120,7 @@ public GridNearGetRequest( IgniteUuid futId, IgniteUuid miniId, GridCacheVersion ver, - Map keys, + LinkedHashMap keys, boolean readThrough, @NotNull AffinityTopologyVersion topVer, int taskNameHash, @@ -151,19 +139,7 @@ public GridNearGetRequest( this.futId = futId; this.miniId = miniId; this.ver = ver; - - this.keys = new ArrayList<>(keys.size()); - - if (addReader) - readersFlags = new ArrayList<>(keys.size()); - - for (Map.Entry entry : keys.entrySet()) { - this.keys.add(entry.getKey()); - - if (addReader) - readersFlags.add(entry.getValue()); - } - + this.keys = keys; this.topVer = topVer; this.taskNameHash = taskNameHash; this.createTtl = createTtl; @@ -215,7 +191,7 @@ public int taskNameHash() { * @return Keys. */ public LinkedHashMap keyMap() { - return keyMap; + return keys; } /** @@ -268,7 +244,7 @@ public long accessTtl() { /** {@inheritDoc} */ @Override public int partition() { - return keys != null && !keys.isEmpty() ? keys.get(0).partition() : -1; + return keys != null && !keys.isEmpty() ? keys.keySet().iterator().next().partition() : -1; } /** @@ -286,14 +262,12 @@ public long accessTtl() { */ @Override public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { super.prepareMarshal(ctx); - - assert ctx != null; + assert !F.isEmpty(keys); - assert readersFlags == null || keys.size() == readersFlags.size(); GridCacheContext cctx = ctx.cacheContext(cacheId); - prepareMarshalCacheObjects(keys, cctx); + prepareMarshalCacheObjects(keys.keySet(), cctx); } /** @@ -306,22 +280,7 @@ public long accessTtl() { GridCacheContext cctx = ctx.cacheContext(cacheId); - finishUnmarshalCacheObjects(keys, cctx, ldr); - - assert !F.isEmpty(keys); - assert readersFlags == null || keys.size() == readersFlags.size(); - - if (keyMap == null) { - keyMap = U.newLinkedHashMap(keys.size()); - - Iterator keysIt = keys.iterator(); - - for (int i = 0; i < keys.size(); i++) { - Boolean addRdr = readersFlags != null ? readersFlags.get(i) : Boolean.FALSE; - - keyMap.put(keysIt.next(), addRdr); - } - } + finishUnmarshalCacheObjects(keys.keySet(), cctx, ldr); } /** {@inheritDoc} */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxLocksRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxLocksRequest.java index 6d516e303032b..4d624e72a2816 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxLocksRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxLocksRequest.java @@ -23,11 +23,9 @@ import org.apache.ignite.internal.Order; import org.apache.ignite.internal.processors.cache.GridCacheMessage; import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; -import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.internal.A; import org.apache.ignite.internal.util.typedef.internal.S; -import org.apache.ignite.internal.util.typedef.internal.U; /** * Transactions lock list request. @@ -38,13 +36,9 @@ public class TxLocksRequest extends GridCacheMessage { long futId; /** Tx keys. */ - @GridToStringInclude - private Set txKeys; - - /** Array of txKeys from {@link #txKeys}. Used during marshalling and unmarshalling. */ - @GridToStringExclude @Order(1) - IgniteTxKey[] txKeysArr; + @GridToStringInclude + Set txKeys; /** * Default constructor. @@ -92,30 +86,17 @@ public Collection txKeys() { @Override public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { super.prepareMarshal(ctx); - txKeysArr = new IgniteTxKey[txKeys.size()]; - - int i = 0; - - for (IgniteTxKey key : txKeys) { + for (IgniteTxKey key : txKeys) key.prepareMarshal(ctx.cacheContext(key.cacheId())); - - txKeysArr[i++] = key; - } } /** {@inheritDoc} */ @Override public void finishUnmarshal(GridCacheSharedContext ctx, ClassLoader ldr) throws IgniteCheckedException { super.finishUnmarshal(ctx, ldr); - txKeys = U.newHashSet(txKeysArr.length); - - for (IgniteTxKey key : txKeysArr) { - key.finishUnmarshal(ctx.cacheContext(key.cacheId()), ldr); - - txKeys.add(key); - } - - txKeysArr = null; + if (txKeys != null) + for (IgniteTxKey key : txKeys) + key.finishUnmarshal(ctx.cacheContext(key.cacheId()), ldr); } /** {@inheritDoc} */ diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryIoSession.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryIoSession.java index 30e9b1b73f810..7fb34efa2dc5e 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryIoSession.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryIoSession.java @@ -109,7 +109,7 @@ public class TcpDiscoveryIoSession { msgBuf = ByteBuffer.allocate(MSG_BUFFER_SIZE); msgWriter = new DirectMessageWriter(spi.messageFactory()); - msgReader = new DirectMessageReader(spi.messageFactory(), null); + msgReader = new DirectMessageReader(spi.messageFactory(), null, null); try { int sendBufSize = sock.getSendBufferSize() > 0 ? sock.getSendBufferSize() : DFLT_SOCK_BUFFER_SIZE; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/direct/DirectMarshallingMessagesTest.java b/modules/core/src/test/java/org/apache/ignite/internal/direct/DirectMarshallingMessagesTest.java index cd7fccd16fd43..3c00b415cf126 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/direct/DirectMarshallingMessagesTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/direct/DirectMarshallingMessagesTest.java @@ -111,7 +111,7 @@ private T doMarshalUnmarshalChunked(T srcMsg) { buf.flip(); buf.get(bytes); - DirectMessageReader reader = new DirectMessageReader(msgFactory, null); + DirectMessageReader reader = new DirectMessageReader(msgFactory, null, null); Message resMsg = null; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/CompressedMessageTest.java b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/CompressedMessageTest.java index 66397139ad4b2..6b8da1f20925e 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/CompressedMessageTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/CompressedMessageTest.java @@ -94,7 +94,7 @@ public void testWriteReadHugeMessage() { msgBuf.flip(); - DirectMessageReader reader = new DirectMessageReader(msgFactory, null); + DirectMessageReader reader = new DirectMessageReader(msgFactory, null, null); reader.setBuffer(msgBuf); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsCacheSizeTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsCacheSizeTest.java index 77616ae9e8d2b..c459d445f5420 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsCacheSizeTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsCacheSizeTest.java @@ -127,7 +127,7 @@ public void testCacheSize() throws Exception { assertTrue(msgWritter.getBuffer().hasRemaining()); - DirectMessageReader msgReader = new DirectMessageReader(msgFactory, null); + DirectMessageReader msgReader = new DirectMessageReader(msgFactory, null, null); msgReader.setBuffer(msgWritter.getBuffer()); msgWritter.getBuffer().rewind(); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/IgniteCacheContinuousQueryImmutableEntryTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/IgniteCacheContinuousQueryImmutableEntryTest.java index e75ed12f40019..7ffa5f7b3aa0b 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/IgniteCacheContinuousQueryImmutableEntryTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/IgniteCacheContinuousQueryImmutableEntryTest.java @@ -166,7 +166,7 @@ public void testCacheContinuousQueryEntrySerialization() { CacheContinuousQueryEntry e1 = new CacheContinuousQueryEntry(); - final DirectMessageReader reader = new DirectMessageReader(msgFactory, null); + final DirectMessageReader reader = new DirectMessageReader(msgFactory, null, null); reader.setBuffer(ByteBuffer.wrap(buf.array())); diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java b/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java index 8809b1c204b41..ad26304b4ade7 100644 --- a/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java +++ b/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java @@ -543,7 +543,7 @@ public void triggerEvent(Event evt) { } @Override public MessageReader reader(MessageFactory msgFactory) { - return new DirectMessageReader(msgFactory, null); + return new DirectMessageReader(msgFactory, null, null); } }; } diff --git a/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/DiscoveryMessageParser.java b/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/DiscoveryMessageParser.java index ea83271c9f54d..5d8571164e322 100644 --- a/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/DiscoveryMessageParser.java +++ b/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/DiscoveryMessageParser.java @@ -136,7 +136,7 @@ private void serializeMessage(Message m, OutputStream out) throws IOException { /** */ private Message deserializeMessage(InputStream in) throws IOException { - DirectMessageReader msgReader = new DirectMessageReader(msgFactory, null); + DirectMessageReader msgReader = new DirectMessageReader(msgFactory, null, null); ByteBuffer msgBuf = ByteBuffer.allocate(MSG_BUFFER_SIZE); msgReader.setBuffer(msgBuf); From 40f251c3f42f06acff6130555390978bdbff6bcb Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 26 Mar 2026 19:08:09 +0300 Subject: [PATCH 02/56] WIP --- .../internal/direct/DirectMessageWriter.java | 29 ++++++++++++----- .../direct/stream/DirectByteBufferStream.java | 20 ++---------- .../managers/communication/GridIoManager.java | 2 +- .../distributed/dht/GridDhtLockRequest.java | 18 ----------- .../distributed/near/GridNearGetRequest.java | 31 ------------------- .../tcp/internal/GridNioServerWrapper.java | 2 +- .../discovery/tcp/TcpDiscoveryIoSession.java | 2 +- .../direct/DirectMarshallingMessagesTest.java | 2 +- ...ByteBufferStreamImplByteOrderSelfTest.java | 2 +- .../communication/CompressedMessageTest.java | 2 +- .../cache/CacheMetricsCacheSizeTest.java | 2 +- ...acheContinuousQueryImmutableEntryTest.java | 2 +- .../testframework/GridSpiTestContext.java | 2 +- .../ignite/util/GridLongListSelfTest.java | 6 ++-- .../zk/internal/DiscoveryMessageParser.java | 2 +- 15 files changed, 38 insertions(+), 86 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageWriter.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageWriter.java index c88e2f5cb2616..6ca191bd78c07 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageWriter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageWriter.java @@ -23,6 +23,7 @@ import java.util.Map; import java.util.UUID; import java.util.function.Consumer; +import org.apache.ignite.internal.GridKernalContext; import org.apache.ignite.internal.direct.state.DirectMessageState; import org.apache.ignite.internal.direct.state.DirectMessageStateItem; import org.apache.ignite.internal.direct.stream.DirectByteBufferStream; @@ -30,6 +31,7 @@ import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.CacheObject; import org.apache.ignite.internal.processors.cache.KeyCacheObject; +import org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessor; import org.apache.ignite.internal.util.GridLongList; import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.internal.S; @@ -59,6 +61,12 @@ public class DirectMessageWriter implements MessageWriter { /** Message factory. */ private final MessageFactory msgFactory; + /** Cache object processor. */ + private final IgniteCacheObjectProcessor cacheObjProc; + + /** */ + private final GridKernalContext ctx; + /** Compression level. Used only for {@link CompressedMessage}. */ private final int compressionLvl; @@ -66,21 +74,28 @@ public class DirectMessageWriter implements MessageWriter { private ByteBuffer buf; /** @param msgFactory Message factory. */ - public DirectMessageWriter(final MessageFactory msgFactory) { - this(msgFactory, DFLT_NETWORK_COMPRESSION); + public DirectMessageWriter(final MessageFactory msgFactory, IgniteCacheObjectProcessor cacheObjProc, GridKernalContext ctx) { + this(msgFactory, cacheObjProc, ctx, DFLT_NETWORK_COMPRESSION); } /** * @param msgFactory Message factory. * @param compressionLvl Compression level. */ - public DirectMessageWriter(final MessageFactory msgFactory, final int compressionLvl) { + public DirectMessageWriter( + final MessageFactory msgFactory, + IgniteCacheObjectProcessor cacheObjProc, + GridKernalContext ctx, + final int compressionLvl) { this.msgFactory = msgFactory; this.compressionLvl = compressionLvl; + this.cacheObjProc = cacheObjProc; + this.ctx = ctx; + state = new DirectMessageState<>(StateItem.class, new IgniteOutClosure() { @Override public StateItem apply() { - return new StateItem(msgFactory); + return new StateItem(msgFactory, cacheObjProc, ctx); } }); } @@ -456,7 +471,7 @@ private void writeCompressedMessage(Consumer consumer, bool if (!stream.serializeFinished()) { ByteBuffer tmpBuf = ByteBuffer.allocateDirect(TMP_BUF_CAPACITY); - DirectMessageWriter tmpWriter = new DirectMessageWriter(msgFactory, compressionLvl); + DirectMessageWriter tmpWriter = new DirectMessageWriter(msgFactory, cacheObjProc, ctx, compressionLvl); tmpWriter.setBuffer(tmpBuf); @@ -509,8 +524,8 @@ private static class StateItem implements DirectMessageStateItem { private boolean hdrWritten; /** */ - public StateItem(MessageFactory msgFactory) { - stream = new DirectByteBufferStream(msgFactory); + public StateItem(MessageFactory msgFactory, IgniteCacheObjectProcessor cacheObjProc, GridKernalContext ctx) { + stream = new DirectByteBufferStream(msgFactory, cacheObjProc, ctx); } /** {@inheritDoc} */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java index 082ecd9ec6c97..cf7b233f68cc4 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java @@ -358,20 +358,6 @@ public class DirectByteBufferStream { /** */ final CacheObjectContext fakeCacheObjCtx; - /** - * Constructror for stream used for writing messages. - * - * @param msgFactory Message factory. - */ - public DirectByteBufferStream(MessageFactory msgFactory) { - this.msgFactory = msgFactory; - - // Is not used while writing messages. - cacheObjProc = null; - fakeCacheObjCtx = null; - ctx = null; - } - /** * Constructror for stream used for reading messages. * @@ -865,7 +851,7 @@ public void writeCacheObject(CacheObject obj) { cacheObjState++; case 1: - writeByteArray(obj.valueBytes(null)); + writeByteArray(obj.valueBytes(fakeCacheObjCtx)); if (!lastFinished) return; @@ -897,7 +883,7 @@ public void writeKeyCacheObject(KeyCacheObject keyObj) { cacheObjState++; case 1: - writeByteArray(keyObj.valueBytes(null)); + writeByteArray(keyObj.valueBytes(fakeCacheObjCtx)); if (!lastFinished) return; @@ -1549,7 +1535,7 @@ public CacheObject readCacheObject() { cacheObjState = 0; } - return cacheObjProc.toCacheObject(null, cacheObjType, cacheObjArr); + return cacheObjProc.toCacheObject(fakeCacheObjCtx, cacheObjType, cacheObjArr); } /** diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java index 2da098610482e..18f1596b39529 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java @@ -433,7 +433,7 @@ public void resetMetrics() { else { formatter = new MessageFormatter() { @Override public MessageWriter writer(MessageFactory msgFactory) { - return new DirectMessageWriter(msgFactory, ctx.config().getNetworkCompressionLevel()); + return new DirectMessageWriter(msgFactory, ctx.cacheObjects(), ctx, ctx.config().getNetworkCompressionLevel()); } @Override public MessageReader reader(MessageFactory msgFactory) { diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockRequest.java index 3dcd24303127b..d60475ac074ce 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockRequest.java @@ -20,10 +20,8 @@ import java.util.BitSet; import java.util.Map; import java.util.UUID; -import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.Order; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; -import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.processors.cache.distributed.GridDistributedLockRequest; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; @@ -246,22 +244,6 @@ public long accessTtl() { return txLbl; } - /** {@inheritDoc} */ - @Override public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { - super.prepareMarshal(ctx); - - - } - - /** {@inheritDoc} */ - @Override public void finishUnmarshal(GridCacheSharedContext ctx, ClassLoader ldr) throws IgniteCheckedException { - super.finishUnmarshal(ctx, ldr); - - if (owned != null) - for (Map.Entry entry : owned.entrySet()) - entry.getKey().finishUnmarshal(ctx.cacheContext(cacheId).cacheObjectContext(), ldr); - } - /** {@inheritDoc} */ @Override public short directType() { return 30; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetRequest.java index b0f6879a07e80..74c6f5d246054 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetRequest.java @@ -18,18 +18,14 @@ package org.apache.ignite.internal.processors.cache.distributed.near; import java.util.LinkedHashMap; -import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.Order; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; -import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheDeployable; import org.apache.ignite.internal.processors.cache.GridCacheIdMessage; -import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; import org.apache.ignite.internal.processors.cache.version.GridCacheVersionable; import org.apache.ignite.internal.util.tostring.GridToStringInclude; -import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.lang.IgniteUuid; import org.jetbrains.annotations.NotNull; @@ -256,33 +252,6 @@ public long accessTtl() { return txLbl; } - /** - * @param ctx Cache context. - * @throws IgniteCheckedException If failed. - */ - @Override public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { - super.prepareMarshal(ctx); - - assert !F.isEmpty(keys); - - GridCacheContext cctx = ctx.cacheContext(cacheId); - - prepareMarshalCacheObjects(keys.keySet(), cctx); - } - - /** - * @param ctx Context. - * @param ldr Loader. - * @throws IgniteCheckedException If failed. - */ - @Override public void finishUnmarshal(GridCacheSharedContext ctx, ClassLoader ldr) throws IgniteCheckedException { - super.finishUnmarshal(ctx, ldr); - - GridCacheContext cctx = ctx.cacheContext(cacheId); - - finishUnmarshalCacheObjects(keys.keySet(), cctx, ldr); - } - /** {@inheritDoc} */ @Override public boolean addDeploymentInfo() { return addDepInfo; diff --git a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/internal/GridNioServerWrapper.java b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/internal/GridNioServerWrapper.java index 97a048a508ddd..6000c6f1a5ab0 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/internal/GridNioServerWrapper.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/internal/GridNioServerWrapper.java @@ -878,7 +878,7 @@ private MessageFactory get() { @Override public MessageWriter writer(GridNioSession ses) throws IgniteCheckedException { // Enable sending wait message for a communication peer while context isn't initialized. if (!stateProvider.spiContextAvailable()) - return new DirectMessageWriter(msgFactory, igniteCfg.getNetworkCompressionLevel()); + return new DirectMessageWriter(msgFactory, null, null, igniteCfg.getNetworkCompressionLevel()); final IgniteSpiContext ctx = stateProvider.getSpiContextWithoutInitialLatch(); diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryIoSession.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryIoSession.java index 7fb34efa2dc5e..d9f2aa4925c97 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryIoSession.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryIoSession.java @@ -108,7 +108,7 @@ public class TcpDiscoveryIoSession { msgBuf = ByteBuffer.allocate(MSG_BUFFER_SIZE); - msgWriter = new DirectMessageWriter(spi.messageFactory()); + msgWriter = new DirectMessageWriter(spi.messageFactory(), null, null); msgReader = new DirectMessageReader(spi.messageFactory(), null, null); try { diff --git a/modules/core/src/test/java/org/apache/ignite/internal/direct/DirectMarshallingMessagesTest.java b/modules/core/src/test/java/org/apache/ignite/internal/direct/DirectMarshallingMessagesTest.java index 3c00b415cf126..ba163f738eca5 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/direct/DirectMarshallingMessagesTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/direct/DirectMarshallingMessagesTest.java @@ -90,7 +90,7 @@ public void testNestedContainers() { private T doMarshalUnmarshalChunked(T srcMsg) { ByteBuffer buf = ByteBuffer.allocate(256); - DirectMessageWriter writer = new DirectMessageWriter(msgFactory); + DirectMessageWriter writer = new DirectMessageWriter(msgFactory, null, null); boolean fullyWritten = false; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStreamImplByteOrderSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStreamImplByteOrderSelfTest.java index 44f44be77f700..0efe0c3aa9692 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStreamImplByteOrderSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStreamImplByteOrderSelfTest.java @@ -101,7 +101,7 @@ private static DirectByteBufferStream createStream(ByteBuffer buff) { @Override public MessageSerializer serializer(short type) { return null; } - }); + }, null, null); stream.setBuffer(buff); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/CompressedMessageTest.java b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/CompressedMessageTest.java index 6b8da1f20925e..49b8c9d4eb7d8 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/CompressedMessageTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/CompressedMessageTest.java @@ -48,7 +48,7 @@ public void testWriteReadHugeMessage() { MessageFactory msgFactory = new IgniteMessageFactoryImpl(new MessageFactoryProvider[]{ new GridIoMessageFactory(jdk(), U.gridClassLoader())}); - DirectMessageWriter writer = new DirectMessageWriter(msgFactory); + DirectMessageWriter writer = new DirectMessageWriter(msgFactory, null, null); ByteBuffer tmpBuf = ByteBuffer.allocate(4096); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsCacheSizeTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsCacheSizeTest.java index c459d445f5420..46dfb98d413c4 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsCacheSizeTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsCacheSizeTest.java @@ -112,7 +112,7 @@ public void testCacheSize() throws Exception { // We have to skip this header at the further message reading. AtomicInteger initHdrSize = new AtomicInteger(); - DirectMessageWriter msgWritter = new DirectMessageWriter(msgFactory) { + DirectMessageWriter msgWritter = new DirectMessageWriter(msgFactory, null, null) { @Override public void onHeaderWritten() { super.onHeaderWritten(); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/IgniteCacheContinuousQueryImmutableEntryTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/IgniteCacheContinuousQueryImmutableEntryTest.java index 7ffa5f7b3aa0b..1d803bb82424f 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/IgniteCacheContinuousQueryImmutableEntryTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/IgniteCacheContinuousQueryImmutableEntryTest.java @@ -153,7 +153,7 @@ public void testCacheContinuousQueryEntrySerialization() { new IgniteMessageFactoryImpl(new MessageFactoryProvider[]{new GridIoMessageFactory(jdk(), U.gridClassLoader())}); ByteBuffer buf = ByteBuffer.allocate(4096); - DirectMessageWriter writer = new DirectMessageWriter(msgFactory); + DirectMessageWriter writer = new DirectMessageWriter(msgFactory, null, null); var serializer = msgFactory.serializer(e0.directType()); assertNotNull("Serializer not found for message type " + e0.directType(), serializer); diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java b/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java index ad26304b4ade7..3439b17e80eee 100644 --- a/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java +++ b/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java @@ -539,7 +539,7 @@ public void triggerEvent(Event evt) { if (formatter == null) { formatter = new MessageFormatter() { @Override public MessageWriter writer(MessageFactory msgFactory) { - return new DirectMessageWriter(msgFactory); + return new DirectMessageWriter(msgFactory, null, null); } @Override public MessageReader reader(MessageFactory msgFactory) { diff --git a/modules/core/src/test/java/org/apache/ignite/util/GridLongListSelfTest.java b/modules/core/src/test/java/org/apache/ignite/util/GridLongListSelfTest.java index 089ba2bdfa8c0..e5e28f836d463 100644 --- a/modules/core/src/test/java/org/apache/ignite/util/GridLongListSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/util/GridLongListSelfTest.java @@ -155,7 +155,7 @@ public void testSerializationCopyConstructor() { * @param initSz Initial size of list. */ private static void testSerialization(GridLongList ll, int initSz) { - DirectMessageWriter writer = new DirectMessageWriter(null); + DirectMessageWriter writer = new DirectMessageWriter(null, null, null); ByteBuffer buf = ByteBuffer.allocate(4096); @@ -236,7 +236,7 @@ private static void testSerialization(GridLongList ll, int initSz) { /** */ @Test public void testSerializationInsufficientBuffer() { - DirectMessageWriter writer = new DirectMessageWriter(null); + DirectMessageWriter writer = new DirectMessageWriter(null, null, null); ByteBuffer buf = ByteBuffer.allocate(10); @@ -252,7 +252,7 @@ public void testSerializationInsufficientBuffer() { /** */ @Test public void testSerializationOfNullValue() { - DirectMessageWriter writer = new DirectMessageWriter(null); + DirectMessageWriter writer = new DirectMessageWriter(null, null, null); ByteBuffer buf = ByteBuffer.allocate(4096); diff --git a/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/DiscoveryMessageParser.java b/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/DiscoveryMessageParser.java index 5d8571164e322..1b3c96f5e13b4 100644 --- a/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/DiscoveryMessageParser.java +++ b/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/DiscoveryMessageParser.java @@ -115,7 +115,7 @@ public DiscoverySpiCustomMessage unmarshalZip(byte[] bytes) { /** */ private void serializeMessage(Message m, OutputStream out) throws IOException { - DirectMessageWriter msgWriter = new DirectMessageWriter(msgFactory); + DirectMessageWriter msgWriter = new DirectMessageWriter(msgFactory, null, null); ByteBuffer msgBuf = ByteBuffer.allocate(MSG_BUFFER_SIZE); msgWriter.setBuffer(msgBuf); From 68764ccfee75b1e76f0f834927f507edc7f5f40d Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 26 Mar 2026 19:12:27 +0300 Subject: [PATCH 03/56] WIP --- .../ignite/internal/processors/cache/GridCacheMessage.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java index 285e4d392d94c..50797d64b5e4c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java @@ -272,6 +272,7 @@ public GridDeploymentInfoBean deployInfo() { * @param ctx Cache context. * @throws IgniteCheckedException If failed. */ + @Deprecated() // TODO, to be removed public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { // No-op. } @@ -284,6 +285,7 @@ public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteChecke * @param ldr Class loader. * @throws IgniteCheckedException If failed. */ + @Deprecated() // TODO, to be removed public void finishUnmarshal(GridCacheSharedContext ctx, ClassLoader ldr) throws IgniteCheckedException { // No-op. } From 06da78fa07a7b2a6e2323d84a94e70a20e2e360e Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 26 Mar 2026 19:17:37 +0300 Subject: [PATCH 04/56] WIP --- .../cache/transactions/TxLocksRequest.java | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxLocksRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxLocksRequest.java index 4d624e72a2816..b47b61bde2e81 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxLocksRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxLocksRequest.java @@ -19,10 +19,8 @@ import java.util.Collection; import java.util.Set; -import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.Order; import org.apache.ignite.internal.processors.cache.GridCacheMessage; -import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.internal.A; import org.apache.ignite.internal.util.typedef.internal.S; @@ -82,23 +80,6 @@ public Collection txKeys() { return addDepInfo; } - /** {@inheritDoc} */ - @Override public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { - super.prepareMarshal(ctx); - - for (IgniteTxKey key : txKeys) - key.prepareMarshal(ctx.cacheContext(key.cacheId())); - } - - /** {@inheritDoc} */ - @Override public void finishUnmarshal(GridCacheSharedContext ctx, ClassLoader ldr) throws IgniteCheckedException { - super.finishUnmarshal(ctx, ldr); - - if (txKeys != null) - for (IgniteTxKey key : txKeys) - key.finishUnmarshal(ctx.cacheContext(key.cacheId()), ldr); - } - /** {@inheritDoc} */ @Override public short directType() { return -24; From 15774f55109bebea944a9d31f1e39ccdfdd7ee1f Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Wed, 1 Apr 2026 18:40:29 +0300 Subject: [PATCH 05/56] WIP --- .../internal/MessageSerializerGenerator.java | 22 +-- .../internal/direct/DirectMessageReader.java | 24 ++-- .../internal/direct/DirectMessageWriter.java | 22 +-- .../direct/stream/DirectByteBufferStream.java | 125 ++++++++++++------ .../cache/transactions/IgniteTxEntry.java | 43 +++--- .../cache/transactions/IgniteTxKey.java | 19 +-- .../communication/MessageReader.java | 14 +- .../communication/MessageWriter.java | 14 +- .../AbstractMessageSerializationTest.java | 20 +-- 9 files changed, 166 insertions(+), 137 deletions(-) diff --git a/modules/codegen/src/main/java/org/apache/ignite/internal/MessageSerializerGenerator.java b/modules/codegen/src/main/java/org/apache/ignite/internal/MessageSerializerGenerator.java index fef259eec6a08..5c6374cf4e443 100644 --- a/modules/codegen/src/main/java/org/apache/ignite/internal/MessageSerializerGenerator.java +++ b/modules/codegen/src/main/java/org/apache/ignite/internal/MessageSerializerGenerator.java @@ -417,7 +417,8 @@ private void returnFalseIfWriteFailed(VariableElement field) throws Exception { return; } - returnFalseIfWriteFailed(write, field, "writer.writeObjectArray", getExpr, messageCollectionItemTypes(field, type)); + returnFalseIfWriteFailed( + write, field, "writer.writeObjectArray", getExpr, messageCollectionItemTypes(field, type), "msg"); return; } @@ -443,6 +444,7 @@ else if (assignableFrom(erasedType(type), type(Map.class.getName()))) { args.add(getExpr); args.add(messageCollectionItemTypes(field, type)); + args.add("msg"); if (compress) args.add("true"); // the value of the compress argument in the MessageWriter#writeMap method @@ -451,10 +453,10 @@ else if (assignableFrom(erasedType(type), type(Map.class.getName()))) { } else if (assignableFrom(type, type("org.apache.ignite.internal.processors.cache.KeyCacheObject"))) - returnFalseIfWriteFailed(write, field, "writer.writeKeyCacheObject", getExpr); + returnFalseIfWriteFailed(write, field, "writer.writeKeyCacheObject", getExpr, "msg"); else if (assignableFrom(type, type("org.apache.ignite.internal.processors.cache.CacheObject"))) - returnFalseIfWriteFailed(write, field, "writer.writeCacheObject", getExpr); + returnFalseIfWriteFailed(write, field, "writer.writeCacheObject", getExpr, "msg"); else if (assignableFrom(type, type("org.apache.ignite.internal.util.GridLongList"))) returnFalseIfWriteFailed(write, field, "writer.writeGridLongList", getExpr); @@ -470,7 +472,8 @@ else if (assignableFrom(type, type(MESSAGE_INTERFACE))) { } else if (assignableFrom(erasedType(type), type(Collection.class.getName()))) - returnFalseIfWriteFailed(write, field, "writer.writeCollection", getExpr, messageCollectionItemTypes(field, type)); + returnFalseIfWriteFailed( + write, field, "writer.writeCollection", getExpr, messageCollectionItemTypes(field, type), "msg"); else if (enumType(env, type)) { Element element = env.getTypeUtils().asElement(type); @@ -625,7 +628,7 @@ private void returnFalseIfReadFailed(VariableElement field) throws Exception { } if (componentType.getKind() == TypeKind.ARRAY) { - returnFalseIfReadFailed(field, "reader.readObjectArray", messageCollectionItemTypes(field, type)); + returnFalseIfReadFailed(field, "reader.readObjectArray", messageCollectionItemTypes(field, type), "msg"); return; } @@ -633,7 +636,7 @@ private void returnFalseIfReadFailed(VariableElement field) throws Exception { if (componentType.getKind() == TypeKind.DECLARED) { Element componentElement = ((DeclaredType)componentType).asElement(); - returnFalseIfReadFailed(field, "reader.readObjectArray", messageCollectionItemTypes(field, type)); + returnFalseIfReadFailed(field, "reader.readObjectArray", messageCollectionItemTypes(field, type), "msg"); if (!"java.lang".equals(env.getElementUtils().getPackageOf(componentElement).getQualifiedName().toString())) { String importCls = ((QualifiedNameable)componentElement).getQualifiedName().toString(); @@ -669,6 +672,7 @@ else if (assignableFrom(erasedType(type), type(Map.class.getName()))) { List args = new ArrayList<>(); args.add(messageCollectionItemTypes(field, type)); + args.add("msg"); if (compress) args.add("true"); // the value of the compress argument in the MessageReader#readMap method @@ -677,10 +681,10 @@ else if (assignableFrom(erasedType(type), type(Map.class.getName()))) { } else if (assignableFrom(type, type("org.apache.ignite.internal.processors.cache.KeyCacheObject"))) - returnFalseIfReadFailed(field, "reader.readKeyCacheObject"); + returnFalseIfReadFailed(field, "reader.readKeyCacheObject", "msg"); else if (assignableFrom(type, type("org.apache.ignite.internal.processors.cache.CacheObject"))) - returnFalseIfReadFailed(field, "reader.readCacheObject"); + returnFalseIfReadFailed(field, "reader.readCacheObject", "msg"); else if (assignableFrom(type, type("org.apache.ignite.internal.util.GridLongList"))) returnFalseIfReadFailed(field, "reader.readGridLongList"); @@ -696,7 +700,7 @@ else if (assignableFrom(type, type(MESSAGE_INTERFACE))) { } else if (assignableFrom(erasedType(type), type(Collection.class.getName()))) { - returnFalseIfReadFailed(field, "reader.readCollection", messageCollectionItemTypes(field, type)); + returnFalseIfReadFailed(field, "reader.readCollection", messageCollectionItemTypes(field, type), "msg"); } else if (enumType(env, type)) { String fieldPrefix = typeNameToFieldName(env.getTypeUtils().asElement(type).getSimpleName().toString()); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageReader.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageReader.java index 835ac14d327e5..71cd6723f933a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageReader.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageReader.java @@ -352,10 +352,10 @@ public ByteBuffer getBuffer() { } /** {@inheritDoc} */ - @Override public CacheObject readCacheObject() { + @Override public CacheObject readCacheObject(Message msg) { DirectByteBufferStream stream = state.item().stream; - CacheObject val = stream.readCacheObject(); + CacheObject val = stream.readCacheObject(msg); lastRead = stream.lastFinished(); @@ -363,10 +363,10 @@ public ByteBuffer getBuffer() { } /** {@inheritDoc} */ - @Override public KeyCacheObject readKeyCacheObject() { + @Override public KeyCacheObject readKeyCacheObject(Message msg) { DirectByteBufferStream stream = state.item().stream; - KeyCacheObject key = stream.readKeyCacheObject(); + KeyCacheObject key = stream.readKeyCacheObject(msg); lastRead = stream.lastFinished(); @@ -385,21 +385,21 @@ public ByteBuffer getBuffer() { } /** {@inheritDoc} */ - @Override public T[] readObjectArray(MessageArrayType type) { + @Override public T[] readObjectArray(MessageArrayType type, Message msg) { DirectByteBufferStream stream = state.item().stream; - T[] msg = stream.readObjectArray(type, this); + T[] arr = stream.readObjectArray(type, msg, this); lastRead = stream.lastFinished(); - return msg; + return arr; } /** {@inheritDoc} */ - @Override public > C readCollection(MessageCollectionType type) { + @Override public > C readCollection(MessageCollectionType type, Message msg) { DirectByteBufferStream stream = state.item().stream; - C col = stream.readCollection(type, this); + C col = stream.readCollection(type, msg, this); lastRead = stream.lastFinished(); @@ -407,7 +407,7 @@ public ByteBuffer getBuffer() { } /** {@inheritDoc} */ - @Override public > M readMap(MessageMapType type, boolean compress) { + @Override public > M readMap(MessageMapType type, Message msg, boolean compress) { DirectByteBufferStream stream = state.item().stream; M map; @@ -415,10 +415,10 @@ public ByteBuffer getBuffer() { if (compress) map = readCompressedMessageAndDeserialize( stream, - tmpReader -> tmpReader.state.item().stream.readMap(type, tmpReader) + tmpReader -> tmpReader.state.item().stream.readMap(type, msg, tmpReader) ); else { - map = stream.readMap(type, this); + map = stream.readMap(type, msg, this); lastRead = stream.lastFinished(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageWriter.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageWriter.java index 6ca191bd78c07..3686a2dfba8e5 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageWriter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageWriter.java @@ -349,19 +349,19 @@ public ByteBuffer getBuffer() { } /** {@inheritDoc} */ - @Override public boolean writeCacheObject(@Nullable CacheObject obj) { + @Override public boolean writeCacheObject(@Nullable CacheObject obj, Message msg) { DirectByteBufferStream stream = state.item().stream; - stream.writeCacheObject(obj); + stream.writeCacheObject(msg, obj); return stream.lastFinished(); } /** {@inheritDoc} */ - @Override public boolean writeKeyCacheObject(KeyCacheObject obj) { + @Override public boolean writeKeyCacheObject(KeyCacheObject obj, Message msg) { DirectByteBufferStream stream = state.item().stream; - stream.writeKeyCacheObject(obj); + stream.writeKeyCacheObject(msg, obj); return stream.lastFinished(); } @@ -376,35 +376,35 @@ public ByteBuffer getBuffer() { } /** {@inheritDoc} */ - @Override public boolean writeObjectArray(T[] arr, MessageArrayType type) { + @Override public boolean writeObjectArray(T[] arr, MessageArrayType type, Message msg) { DirectByteBufferStream stream = state.item().stream; - stream.writeObjectArray(arr, type, this); + stream.writeObjectArray(arr, type, msg, this); return stream.lastFinished(); } /** {@inheritDoc} */ - @Override public boolean writeCollection(Collection col, MessageCollectionType type) { + @Override public boolean writeCollection(Collection col, MessageCollectionType type, Message msg) { DirectByteBufferStream stream = state.item().stream; - stream.writeCollection(col, type, this); + stream.writeCollection(col, type, msg, this); return stream.lastFinished(); } /** {@inheritDoc} */ - @Override public boolean writeMap(Map map, MessageMapType type, boolean compress) { + @Override public boolean writeMap(Map map, MessageMapType type, Message msg, boolean compress) { DirectByteBufferStream stream = state.item().stream; if (compress) writeCompressedMessage( - tmpWriter -> tmpWriter.state.item().stream.writeMap(map, type, tmpWriter), + tmpWriter -> tmpWriter.state.item().stream.writeMap(map, type, msg, tmpWriter), map == null, stream ); else - stream.writeMap(map, type, this); + stream.writeMap(map, type, msg, this); return stream.lastFinished(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java index cf7b233f68cc4..91c98e9a3f167 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java @@ -37,6 +37,8 @@ import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.CacheObject; import org.apache.ignite.internal.processors.cache.CacheObjectContext; +import org.apache.ignite.internal.processors.cache.GridCacheGroupIdMessage; +import org.apache.ignite.internal.processors.cache.GridCacheIdMessage; import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessor; import org.apache.ignite.internal.util.GridLongList; @@ -91,6 +93,8 @@ public class DirectByteBufferStream { /** */ private static final boolean[] BOOLEAN_ARR_EMPTY = new boolean[0]; + + private static final ThreadLocal cotx = new ThreadLocal<>(); /** */ private static final ArrayCreator BYTE_ARR_CREATOR = new ArrayCreator() { @@ -355,9 +359,6 @@ public class DirectByteBufferStream { /** */ final GridKernalContext ctx; - /** */ - final CacheObjectContext fakeCacheObjCtx; - /** * Constructror for stream used for reading messages. * @@ -368,9 +369,6 @@ public DirectByteBufferStream(MessageFactory msgFactory, IgniteCacheObjectProces this.msgFactory = msgFactory; this.cacheObjProc = cacheObjProc; this.ctx = ctx; - - fakeCacheObjCtx = new CacheObjectContext( - ctx, null, null, false, false, false, false); } /** @@ -838,7 +836,7 @@ public void writeAffinityTopologyVersion(AffinityTopologyVersion val) { /** * @param obj Cache object. */ - public void writeCacheObject(CacheObject obj) { + public void writeCacheObject(Message msg, CacheObject obj) { try { if (obj != null) { switch (cacheObjState) { @@ -851,7 +849,11 @@ public void writeCacheObject(CacheObject obj) { cacheObjState++; case 1: - writeByteArray(obj.valueBytes(fakeCacheObjCtx)); + setContext(msg); + + writeByteArray(obj.valueBytes(context())); + + removeContext(msg); if (!lastFinished) return; @@ -870,7 +872,7 @@ public void writeCacheObject(CacheObject obj) { /** * @param keyObj Key cache object. */ - public void writeKeyCacheObject(KeyCacheObject keyObj) { + public void writeKeyCacheObject(Message msg, KeyCacheObject keyObj) { try { if (keyObj != null) { switch (cacheObjState) { @@ -883,7 +885,11 @@ public void writeKeyCacheObject(KeyCacheObject keyObj) { cacheObjState++; case 1: - writeByteArray(keyObj.valueBytes(fakeCacheObjCtx)); + setContext(msg); + + writeByteArray(keyObj.valueBytes(context())); + + removeContext(msg); if (!lastFinished) return; @@ -937,7 +943,7 @@ public void writeMessage(Message msg, MessageWriter writer) { * @param type Type. * @param writer Writer. */ - public void writeObjectArray(T[] arr, MessageArrayType type, MessageWriter writer) { + public void writeObjectArray(T[] arr, MessageArrayType type, Message msg, MessageWriter writer) { if (arr != null) { int len = arr.length; @@ -954,7 +960,7 @@ public void writeObjectArray(T[] arr, MessageArrayType type, MessageWriter w if (arrCur == NULL) arrCur = arr[arrPos++]; - write(type.valueType(), arrCur, writer); + write(type.valueType(), msg, arrCur, writer); if (!lastFinished) return; @@ -973,10 +979,10 @@ public void writeObjectArray(T[] arr, MessageArrayType type, MessageWriter w * @param type Type. * @param writer Writer. */ - public void writeCollection(Collection col, MessageCollectionType type, MessageWriter writer) { + public void writeCollection(Collection col, MessageCollectionType type, Message msg, MessageWriter writer) { if (col != null) { if (col instanceof List && col instanceof RandomAccess) - writeRandomAccessList((List)col, type, writer); + writeRandomAccessList((List)col, type, msg, writer); else { if (it == null) { writeInt(col.size()); @@ -991,7 +997,7 @@ public void writeCollection(Collection col, MessageCollectionType type, M if (cur == NULL) cur = it.next(); - write(type.valueType(), cur, writer); + write(type.valueType(), msg, cur, writer); if (!lastFinished) return; @@ -1011,7 +1017,7 @@ public void writeCollection(Collection col, MessageCollectionType type, M * @param type Type. * @param writer Writer. */ - private void writeRandomAccessList(List list, MessageCollectionType type, MessageWriter writer) { + private void writeRandomAccessList(List list, MessageCollectionType type, Message msg, MessageWriter writer) { assert list instanceof RandomAccess; int size = list.size(); @@ -1029,7 +1035,7 @@ private void writeRandomAccessList(List list, MessageCollectionType type, if (arrCur == NULL) arrCur = list.get(arrPos++); - write(type.valueType(), arrCur, writer); + write(type.valueType(), msg, arrCur, writer); if (!lastFinished) return; @@ -1045,7 +1051,7 @@ private void writeRandomAccessList(List list, MessageCollectionType type, * @param type Type. * @param writer Writer. */ - public void writeMap(Map map, MessageMapType type, MessageWriter writer) { + public void writeMap(Map map, MessageMapType type, Message msg, MessageWriter writer) { if (map != null) { if (mapIt == null) { writeInt(map.size()); @@ -1065,7 +1071,7 @@ public void writeMap(Map map, MessageMapType type, MessageWriter wr e = (Map.Entry)mapCur; if (!keyDone) { - write(type.keyType(), e.getKey(), writer); + write(type.keyType(), msg, e.getKey(), writer); if (!lastFinished) return; @@ -1073,7 +1079,7 @@ public void writeMap(Map map, MessageMapType type, MessageWriter wr keyDone = true; } - write(type.valueType(), e.getValue(), writer); + write(type.valueType(), msg, e.getValue(), writer); if (!lastFinished) return; @@ -1473,7 +1479,7 @@ public AffinityTopologyVersion readAffinityTopologyVersion() { /** * @return Value. */ - public KeyCacheObject readKeyCacheObject() { + public KeyCacheObject readKeyCacheObject(Message msg) { switch (cacheObjState) { case 0: cacheObjType = readByte(); @@ -1501,7 +1507,11 @@ public KeyCacheObject readKeyCacheObject() { } try { - KeyCacheObject key = cacheObjProc.toKeyCacheObject(fakeCacheObjCtx, cacheObjType, cacheObjArr); + setContext(msg); + + KeyCacheObject key = cacheObjProc.toKeyCacheObject(context(), cacheObjType, cacheObjArr); + + removeContext(msg); if (keyCacheObjPart != -1) key.partition(keyCacheObjPart); @@ -1516,7 +1526,7 @@ public KeyCacheObject readKeyCacheObject() { /** * @return Value. */ - public CacheObject readCacheObject() { + public CacheObject readCacheObject(Message msg) { switch (cacheObjState) { case 0: cacheObjType = readByte(); @@ -1535,7 +1545,13 @@ public CacheObject readCacheObject() { cacheObjState = 0; } - return cacheObjProc.toCacheObject(fakeCacheObjCtx, cacheObjType, cacheObjArr); + setContext(msg); + + CacheObject res = cacheObjProc.toCacheObject(context(), cacheObjType, cacheObjArr); + + removeContext(msg); + + return res; } /** @@ -1596,7 +1612,7 @@ public T readMessage(MessageReader reader) { * @param reader Reader. * @return Array. */ - public T[] readObjectArray(MessageArrayType type, MessageReader reader) { + public T[] readObjectArray(MessageArrayType type, Message msg, MessageReader reader) { if (readSize == -1) { int size = readInt(); @@ -1611,7 +1627,7 @@ public T[] readObjectArray(MessageArrayType type, MessageReader reader) { objArr = type.clazz() != null ? (Object[])Array.newInstance(type.clazz(), readSize) : new Object[readSize]; for (int i = readItems; i < readSize; i++) { - Object item = read(type.valueType(), reader); + Object item = read(type.valueType(), msg, reader); if (!lastFinished) return null; @@ -1640,7 +1656,7 @@ public T[] readObjectArray(MessageArrayType type, MessageReader reader) { * @param reader Reader. * @return {@link ArrayList} or a {@link HashSet}. */ - public > C readCollection(MessageCollectionType type, MessageReader reader) { + public > C readCollection(MessageCollectionType type, Message msg, MessageReader reader) { if (readSize == -1) { int size = readInt(); @@ -1655,7 +1671,7 @@ public > C readCollection(MessageCollectionType type, Me col = type.set() ? U.newHashSet(readSize) : new ArrayList<>(readSize); for (int i = readItems; i < readSize; i++) { - Object item = read(type.valueType(), reader); + Object item = read(type.valueType(), msg, reader); if (!lastFinished) return null; @@ -1682,7 +1698,7 @@ public > C readCollection(MessageCollectionType type, Me * @param reader Reader. * @return Map. */ - public > M readMap(MessageMapType type, MessageReader reader) { + public > M readMap(MessageMapType type, Message msg, MessageReader reader) { if (readSize == -1) { int size = readInt(); @@ -1698,7 +1714,7 @@ public > C readCollection(MessageCollectionType type, Me for (int i = readItems; i < readSize; i++) { if (!keyDone) { - Object key = read(type.keyType(), reader); + Object key = read(type.keyType(), msg, reader); if (!lastFinished) return null; @@ -1707,7 +1723,7 @@ public > C readCollection(MessageCollectionType type, Me keyDone = true; } - Object val = read(type.valueType(), reader); + Object val = read(type.valueType(), msg, reader); if (!lastFinished) return null; @@ -1988,7 +2004,7 @@ T readArrayLE(ArrayCreator creator, int typeSize, int lenShift, long off) * @param val Value. * @param writer Writer. */ - protected void write(MessageType type, Object val, MessageWriter writer) { + protected void write(MessageType type, Message msg, Object val, MessageWriter writer) { switch (type.type()) { case BYTE: writeByte((Byte)val); @@ -2096,12 +2112,12 @@ protected void write(MessageType type, Object val, MessageWriter writer) break; case KEY_CACHE_OBJECT: - writeKeyCacheObject((KeyCacheObject)val); + writeKeyCacheObject(msg, (KeyCacheObject)val); break; case CACHE_OBJECT: - writeCacheObject((CacheObject)val); + writeCacheObject(msg, (CacheObject)val); break; @@ -2111,17 +2127,17 @@ protected void write(MessageType type, Object val, MessageWriter writer) break; case MAP: - nestedWrite(writer, () -> writer.writeMap((Map)val, (MessageMapType)type)); + nestedWrite(writer, () -> writer.writeMap((Map)val, (MessageMapType)type, msg)); break; case COLLECTION: - nestedWrite(writer, () -> writer.writeCollection((Collection)val, (MessageCollectionType)type)); + nestedWrite(writer, () -> writer.writeCollection((Collection)val, (MessageCollectionType)type, msg)); break; case ARRAY: - nestedWrite(writer, () -> writer.writeObjectArray((V[])val, (MessageArrayType)type)); + nestedWrite(writer, () -> writer.writeObjectArray((V[])val, (MessageArrayType)type, msg)); break; @@ -2152,7 +2168,7 @@ private void nestedWrite(MessageWriter writer, BooleanSupplier s) { * @param reader Reader. * @return Value. */ - protected Object read(MessageType type, MessageReader reader) { + protected Object read(MessageType type, Message msg, MessageReader reader) { switch (type.type()) { case BYTE: return readByte(); @@ -2218,22 +2234,22 @@ protected Object read(MessageType type, MessageReader reader) { return readAffinityTopologyVersion(); case KEY_CACHE_OBJECT: - return readKeyCacheObject(); + return readKeyCacheObject(msg); case CACHE_OBJECT: - return readCacheObject(); + return readCacheObject(msg); case GRID_LONG_LIST: return readGridLongList(); case MAP: - return nestedRead(reader, () -> reader.readMap((MessageMapType)type)); + return nestedRead(reader, () -> reader.readMap((MessageMapType)type, msg)); case COLLECTION: - return nestedRead(reader, () -> reader.readCollection((MessageCollectionType)type)); + return nestedRead(reader, () -> reader.readCollection((MessageCollectionType)type, msg)); case ARRAY: - return nestedRead(reader, () -> reader.readObjectArray((MessageArrayType)type)); + return nestedRead(reader, () -> reader.readObjectArray((MessageArrayType)type, msg)); case MSG: return readMessage(reader); @@ -2303,6 +2319,29 @@ private void readUuidRaw() { } } + /** {@inheritDoc} */ + private void setContext(Message msg) { + if (msg instanceof GridCacheIdMessage) + cotx.set(ctx.cache().context().cacheContext(((GridCacheIdMessage)msg).cacheId).cacheObjectContext()); + + if (msg instanceof GridCacheGroupIdMessage) + cotx.set(ctx.cache().context().cacheContext(((GridCacheGroupIdMessage)msg).grpId).cacheObjectContext()); + } + + /** {@inheritDoc} */ + private void removeContext(Message msg) { + if (msg instanceof GridCacheIdMessage | msg instanceof GridCacheGroupIdMessage) { + assert cotx.get() != null; + + cotx.remove(); + } + } + + /** {@inheritDoc} */ + private CacheObjectContext context(){ + return cotx.get(); + } + /** {@inheritDoc} */ @Override public String toString() { return S.toString(DirectByteBufferStream.class, this); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java index ef1bbce28a9f9..038afdc1ed376 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java @@ -35,6 +35,7 @@ import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheEntryEx; import org.apache.ignite.internal.processors.cache.GridCacheEntryRemovedException; +import org.apache.ignite.internal.processors.cache.GridCacheIdMessage; import org.apache.ignite.internal.processors.cache.GridCacheOperation; import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.processors.cache.KeyCacheObject; @@ -47,7 +48,6 @@ import org.apache.ignite.internal.util.typedef.T2; import org.apache.ignite.internal.util.typedef.internal.CU; import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.plugin.extensions.communication.Message; import org.apache.ignite.thread.IgniteThread; import org.jetbrains.annotations.Nullable; @@ -59,7 +59,7 @@ * {@link #equals(Object)} method, as transaction entries should use referential * equality. */ -public class IgniteTxEntry implements GridPeerDeployAware, Message { +public class IgniteTxEntry extends GridCacheIdMessage implements GridPeerDeployAware { /** */ private static final long serialVersionUID = 0L; @@ -106,17 +106,12 @@ public class IgniteTxEntry implements GridPeerDeployAware, Message { @Order(0) KeyCacheObject key; - /** Cache ID. */ - @GridToStringExclude - @Order(1) - int cacheId; - /** Transient tx key. */ private IgniteTxKey txKey; /** Cache value. */ @GridToStringInclude - @Order(2) + @Order(1) TxEntryValueHolder val = new TxEntryValueHolder(); /** Visible value for peek. */ @@ -125,7 +120,7 @@ public class IgniteTxEntry implements GridPeerDeployAware, Message { /** Old value before update. */ @GridToStringInclude - @Order(3) + @Order(2) TxEntryValueHolder oldVal = new TxEntryValueHolder(); /** Transform. */ @@ -137,24 +132,24 @@ public class IgniteTxEntry implements GridPeerDeployAware, Message { /** Transform closure bytes. */ @GridToStringExclude - @Order(4) + @Order(3) byte[] transformClosBytes; /** Time to live. */ - @Order(5) + @Order(4) long ttl; /** DR expire time (explicit) */ - @Order(6) + @Order(5) long conflictExpireTime = CU.EXPIRE_TIME_CALCULATE; /** Conflict version. */ - @Order(7) + @Order(6) GridCacheVersion conflictVer; /** Explicit lock version if there is one. */ @GridToStringInclude - @Order(8) + @Order(7) GridCacheVersion explicitVer; /** DHT version. */ @@ -162,7 +157,7 @@ public class IgniteTxEntry implements GridPeerDeployAware, Message { /** Put filters. */ @GridToStringInclude - @Order(9) + @Order(8) CacheEntryPredicate[] filters; /** Flag indicating whether filters passed. Used for fast-commit transactions. */ @@ -196,18 +191,18 @@ public class IgniteTxEntry implements GridPeerDeployAware, Message { private boolean transferExpiryPlc; /** Expiry policy bytes. */ - @Order(10) + @Order(9) byte[] expiryPlcBytes; /** Additional flags. */ - @Order(11) + @Order(10) byte flags; /** Partition update counter. */ private long partUpdateCntr; /** */ - @Order(12) + @Order(11) GridCacheVersion serReadVer; /** @@ -487,13 +482,6 @@ public KeyCacheObject key() { return key; } - /** - * @return Cache ID. - */ - public int cacheId() { - return cacheId; - } - /** * Sets skip store flag value. * @@ -1109,6 +1097,11 @@ public void clearEntryReadVersion() { return deployClass().getClassLoader(); } + /** {@inheritDoc} */ + @Override public boolean addDeploymentInfo() { + return false; + } + /** {@inheritDoc} */ @Override public String toString() { return GridToStringBuilder.toString(IgniteTxEntry.class, this, "xidVer", tx == null ? "null" : tx.xidVersion()); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxKey.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxKey.java index b50bc340c3ba1..11b2a6f7c76b6 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxKey.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxKey.java @@ -20,25 +20,21 @@ import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.Order; import org.apache.ignite.internal.processors.cache.GridCacheContext; +import org.apache.ignite.internal.processors.cache.GridCacheIdMessage; import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.internal.S; -import org.apache.ignite.plugin.extensions.communication.Message; /** * Cache transaction key. This wrapper is needed because same keys may be enlisted in the same transaction * for multiple caches. */ -public class IgniteTxKey implements Message { +public class IgniteTxKey extends GridCacheIdMessage { /** Key. */ @Order(0) @GridToStringInclude(sensitive = true) KeyCacheObject key; - /** Cache ID. */ - @Order(1) - int cacheId; - /** * Empty constructor. */ @@ -62,13 +58,6 @@ public KeyCacheObject key() { return key; } - /** - * @return Cache ID. - */ - public int cacheId() { - return cacheId; - } - /** * @param ctx Context. * @throws IgniteCheckedException If failed. @@ -110,6 +99,10 @@ public void finishUnmarshal(GridCacheContext ctx, ClassLoader ldr) throws Ignite return res; } + /** {@inheritDoc} */ + @Override public boolean addDeploymentInfo() { + return false; + } /** {@inheritDoc} */ @Override public String toString() { diff --git a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java index f2190a1e86a41..93f5c84066a46 100644 --- a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java +++ b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java @@ -215,14 +215,14 @@ public default T readMessage() { * * @return Cache object. */ - public CacheObject readCacheObject(); + public CacheObject readCacheObject(Message msg); /** * Reads {@link KeyCacheObject}. * * @return Key cache object. */ - public KeyCacheObject readKeyCacheObject(); + public KeyCacheObject readKeyCacheObject(Message msg); /** * Reads {@link GridLongList}. @@ -238,7 +238,7 @@ public default T readMessage() { * @param Type of the read object. * @return Array of objects. */ - public T[] readObjectArray(MessageArrayType type); + public T[] readObjectArray(MessageArrayType type, Message msg); /** * Reads any collection. @@ -247,7 +247,7 @@ public default T readMessage() { * @param Type of the read collection. * @return Collection. */ - public > C readCollection(MessageCollectionType type); + public > C readCollection(MessageCollectionType type, Message msg); /** * Reads map. @@ -256,8 +256,8 @@ public default T readMessage() { * @param Type of the read map. * @return Map. */ - public default > M readMap(MessageMapType type) { - return readMap(type, false); + public default > M readMap(MessageMapType type, Message msg) { + return readMap(type, msg, false); } /** @@ -268,7 +268,7 @@ public default T readMessage() { * @param Type of the read map. * @return Map. */ - public > M readMap(MessageMapType type, boolean compress); + public > M readMap(MessageMapType type, Message msg, boolean compress); /** * Tells whether last invocation of any of {@code readXXX(...)} diff --git a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageWriter.java b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageWriter.java index c29e3ac093db9..e414427f6c27c 100644 --- a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageWriter.java +++ b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageWriter.java @@ -265,7 +265,7 @@ public default boolean writeMessage(Message val) { * @param obj Cache object. * @return Whether value was fully written. */ - public boolean writeCacheObject(CacheObject obj); + public boolean writeCacheObject(CacheObject obj, Message msg); /** * Writes {@link KeyCacheObject}. @@ -273,7 +273,7 @@ public default boolean writeMessage(Message val) { * @param obj Key cache object. * @return Whether value was fully written. */ - public boolean writeKeyCacheObject(KeyCacheObject obj); + public boolean writeKeyCacheObject(KeyCacheObject obj, Message msg); /** * Writes {@link GridLongList}. @@ -291,7 +291,7 @@ public default boolean writeMessage(Message val) { * @param Type of the objects that array contains. * @return Whether array was fully written. */ - public boolean writeObjectArray(T[] arr, MessageArrayType type); + public boolean writeObjectArray(T[] arr, MessageArrayType type, Message msg); /** * Writes collection with its elements order. @@ -301,7 +301,7 @@ public default boolean writeMessage(Message val) { * @param Type of the objects that collection contains. * @return Whether value was fully written. */ - public boolean writeCollection(Collection col, MessageCollectionType type); + public boolean writeCollection(Collection col, MessageCollectionType type, Message msg); /** * Writes map. @@ -312,8 +312,8 @@ public default boolean writeMessage(Message val) { * @param Initial value types of the map to write. * @return Whether value was fully written. */ - public default boolean writeMap(Map map, MessageMapType type) { - return writeMap(map, type, false); + public default boolean writeMap(Map map, MessageMapType type, Message msg) { + return writeMap(map, type, msg,false); } /** @@ -326,7 +326,7 @@ public default boolean writeMap(Map map, MessageMapType type) { * @param Initial value types of the map to write. * @return Whether value was fully written. */ - public boolean writeMap(Map map, MessageMapType type, boolean compress); + public boolean writeMap(Map map, MessageMapType type, Message msg, boolean compress); /** * @return Whether header of current message is already written. diff --git a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/AbstractMessageSerializationTest.java b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/AbstractMessageSerializationTest.java index e003670f18f10..b3714f37b7733 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/AbstractMessageSerializationTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/AbstractMessageSerializationTest.java @@ -275,12 +275,12 @@ private boolean writeField(Class type) { } /** {@inheritDoc} */ - @Override public boolean writeCacheObject(CacheObject obj) { + @Override public boolean writeCacheObject(CacheObject obj, Message msg) { return writeField(CacheObject.class); } /** {@inheritDoc} */ - @Override public boolean writeKeyCacheObject(KeyCacheObject obj) { + @Override public boolean writeKeyCacheObject(KeyCacheObject obj, Message msg) { return writeField(KeyCacheObject.class); } @@ -295,17 +295,17 @@ private boolean writeField(Class type) { } /** {@inheritDoc} */ - @Override public boolean writeObjectArray(T[] arr, MessageArrayType type) { + @Override public boolean writeObjectArray(T[] arr, MessageArrayType type, Message msg) { return writeField(Object[].class); } /** {@inheritDoc} */ - @Override public boolean writeCollection(Collection col, MessageCollectionType type) { + @Override public boolean writeCollection(Collection col, MessageCollectionType type, Message msg) { return writeField(type.set() ? Set.class : Collection.class); } /** {@inheritDoc} */ - @Override public boolean writeMap(Map map, MessageMapType type, boolean compress) { + @Override public boolean writeMap(Map map, MessageMapType type, Message msg, boolean compress) { return writeField(type.linked() ? LinkedHashMap.class : HashMap.class); } @@ -529,14 +529,14 @@ private void readField(Class type) { } /** {@inheritDoc} */ - @Override public CacheObject readCacheObject() { + @Override public CacheObject readCacheObject(Message msg) { readField(CacheObject.class); return null; } /** {@inheritDoc} */ - @Override public KeyCacheObject readKeyCacheObject() { + @Override public KeyCacheObject readKeyCacheObject(Message msg) { readField(KeyCacheObject.class); return null; @@ -550,21 +550,21 @@ private void readField(Class type) { } /** {@inheritDoc} */ - @Override public T[] readObjectArray(MessageArrayType type) { + @Override public T[] readObjectArray(MessageArrayType type, Message msg) { readField(Object[].class); return null; } /** {@inheritDoc} */ - @Override public > C readCollection(MessageCollectionType type) { + @Override public > C readCollection(MessageCollectionType type, Message msg) { readField(type.set() ? Set.class : Collection.class); return null; } /** {@inheritDoc} */ - @Override public > M readMap(MessageMapType type, boolean compress) { + @Override public > M readMap(MessageMapType type, Message msg, boolean compress) { readField(type.linked() ? LinkedHashMap.class : HashMap.class); return null; From 31f41751e5e54e03253344fb9ef121da6bdc5552 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Wed, 1 Apr 2026 19:27:39 +0300 Subject: [PATCH 06/56] WIP --- .../direct/stream/DirectByteBufferStream.java | 11 ++++++----- .../extensions/communication/MessageReader.java | 4 ++++ .../extensions/communication/MessageWriter.java | 6 +++++- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java index 91c98e9a3f167..977272710ffec 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java @@ -93,7 +93,8 @@ public class DirectByteBufferStream { /** */ private static final boolean[] BOOLEAN_ARR_EMPTY = new boolean[0]; - + + /** */ private static final ThreadLocal cotx = new ThreadLocal<>(); /** */ @@ -2319,7 +2320,7 @@ private void readUuidRaw() { } } - /** {@inheritDoc} */ + /** */ private void setContext(Message msg) { if (msg instanceof GridCacheIdMessage) cotx.set(ctx.cache().context().cacheContext(((GridCacheIdMessage)msg).cacheId).cacheObjectContext()); @@ -2328,7 +2329,7 @@ private void setContext(Message msg) { cotx.set(ctx.cache().context().cacheContext(((GridCacheGroupIdMessage)msg).grpId).cacheObjectContext()); } - /** {@inheritDoc} */ + /** */ private void removeContext(Message msg) { if (msg instanceof GridCacheIdMessage | msg instanceof GridCacheGroupIdMessage) { assert cotx.get() != null; @@ -2337,8 +2338,8 @@ private void removeContext(Message msg) { } } - /** {@inheritDoc} */ - private CacheObjectContext context(){ + /** */ + private CacheObjectContext context() { return cotx.get(); } diff --git a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java index 93f5c84066a46..937243b94e9fa 100644 --- a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java +++ b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java @@ -236,6 +236,7 @@ public default T readMessage() { * * @param type Array component type. * @param Type of the read object. + * @param msg Message. * @return Array of objects. */ public T[] readObjectArray(MessageArrayType type, Message msg); @@ -245,6 +246,7 @@ public default T readMessage() { * * @param type Collection item type. * @param Type of the read collection. + * @param msg Message. * @return Collection. */ public > C readCollection(MessageCollectionType type, Message msg); @@ -254,6 +256,7 @@ public default T readMessage() { * * @param type Map type. * @param Type of the read map. + * @param msg Message. * @return Map. */ public default > M readMap(MessageMapType type, Message msg) { @@ -264,6 +267,7 @@ public default T readMessage() { * Reads map. * * @param type Map type. + * @param msg Message. * @param compress Whether map should be compressed. * @param Type of the read map. * @return Map. diff --git a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageWriter.java b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageWriter.java index e414427f6c27c..044d718169251 100644 --- a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageWriter.java +++ b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageWriter.java @@ -289,6 +289,7 @@ public default boolean writeMessage(Message val) { * @param arr Array of objects. * @param type Array component type. * @param Type of the objects that array contains. + * @param msg Message. * @return Whether array was fully written. */ public boolean writeObjectArray(T[] arr, MessageArrayType type, Message msg); @@ -299,6 +300,7 @@ public default boolean writeMessage(Message val) { * @param col Collection. * @param type Collection item type. * @param Type of the objects that collection contains. + * @param msg Message. * @return Whether value was fully written. */ public boolean writeCollection(Collection col, MessageCollectionType type, Message msg); @@ -310,10 +312,11 @@ public default boolean writeMessage(Message val) { * @param type Map type. * @param Initial key types of the map to write. * @param Initial value types of the map to write. + * @param msg Message. * @return Whether value was fully written. */ public default boolean writeMap(Map map, MessageMapType type, Message msg) { - return writeMap(map, type, msg,false); + return writeMap(map, type, msg, false); } /** @@ -321,6 +324,7 @@ public default boolean writeMap(Map map, MessageMapType type, Messa * * @param map Map. * @param type Map type. + * @param msg Message. * @param compress Whether map should be compressed. * @param Initial key types of the map to write. * @param Initial value types of the map to write. From e0e47c0114ae4d97c29a5914f3fbb509fdd2e5ba Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Wed, 1 Apr 2026 19:45:29 +0300 Subject: [PATCH 07/56] WIP --- .../ignite/plugin/extensions/communication/MessageReader.java | 2 ++ .../ignite/plugin/extensions/communication/MessageWriter.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java index 937243b94e9fa..704f94befc49a 100644 --- a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java +++ b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java @@ -212,6 +212,7 @@ public default T readMessage() { /** * Reads {@link CacheObject}. + * @param msg Message. * * @return Cache object. */ @@ -219,6 +220,7 @@ public default T readMessage() { /** * Reads {@link KeyCacheObject}. + * @param msg Message. * * @return Key cache object. */ diff --git a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageWriter.java b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageWriter.java index 044d718169251..33020e8276185 100644 --- a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageWriter.java +++ b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageWriter.java @@ -263,6 +263,7 @@ public default boolean writeMessage(Message val) { * Writes {@link CacheObject}. * * @param obj Cache object. + * @param msg Message. * @return Whether value was fully written. */ public boolean writeCacheObject(CacheObject obj, Message msg); @@ -271,6 +272,7 @@ public default boolean writeMessage(Message val) { * Writes {@link KeyCacheObject}. * * @param obj Key cache object. + * @param msg Message. * @return Whether value was fully written. */ public boolean writeKeyCacheObject(KeyCacheObject obj, Message msg); From 4f8f36a25b507f3e17400ec02fafcbd0a26ba4a5 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 18:59:28 +0300 Subject: [PATCH 08/56] WIP --- .../direct/stream/DirectByteBufferStream.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java index 977272710ffec..74bdf561e60a9 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java @@ -37,6 +37,7 @@ import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.CacheObject; import org.apache.ignite.internal.processors.cache.CacheObjectContext; +import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheGroupIdMessage; import org.apache.ignite.internal.processors.cache.GridCacheIdMessage; import org.apache.ignite.internal.processors.cache.KeyCacheObject; @@ -2322,20 +2323,22 @@ private void readUuidRaw() { /** */ private void setContext(Message msg) { + GridCacheContext gcctx = null; + if (msg instanceof GridCacheIdMessage) - cotx.set(ctx.cache().context().cacheContext(((GridCacheIdMessage)msg).cacheId).cacheObjectContext()); + gcctx = ctx.cache().context().cacheContext(((GridCacheIdMessage)msg).cacheId); if (msg instanceof GridCacheGroupIdMessage) - cotx.set(ctx.cache().context().cacheContext(((GridCacheGroupIdMessage)msg).grpId).cacheObjectContext()); + gcctx = ctx.cache().context().cacheContext(((GridCacheGroupIdMessage)msg).grpId); + + if (gcctx != null) + cotx.set(gcctx.cacheObjectContext()); } /** */ private void removeContext(Message msg) { - if (msg instanceof GridCacheIdMessage | msg instanceof GridCacheGroupIdMessage) { - assert cotx.get() != null; - + if (msg instanceof GridCacheIdMessage | msg instanceof GridCacheGroupIdMessage) cotx.remove(); - } } /** */ From 8762e1d3203e86a964dd360e50e0c037759280dd Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 19:31:52 +0300 Subject: [PATCH 09/56] WIP --- .../processors/cache/CacheEntryPredicate.java | 14 ---------- .../cache/CacheEntryPredicateAdapter.java | 14 ---------- .../GridNearAtomicFullUpdateRequest.java | 22 ---------------- ...idNearAtomicSingleUpdateFilterRequest.java | 26 ------------------- .../cache/transactions/IgniteTxEntry.java | 13 ---------- 5 files changed, 89 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicate.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicate.java index 36312a1591135..d8c8e7083ee62 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicate.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicate.java @@ -17,7 +17,6 @@ package org.apache.ignite.internal.processors.cache; -import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.lang.IgnitePredicate; import org.apache.ignite.plugin.extensions.communication.Message; @@ -25,19 +24,6 @@ * */ public interface CacheEntryPredicate extends IgnitePredicate, Message { - /** - * @param ctx Context. - * @throws IgniteCheckedException If failed. - */ - public void prepareMarshal(GridCacheContext ctx) throws IgniteCheckedException; - - /** - * @param ctx Context. - * @param ldr Class loader. - * @throws IgniteCheckedException If failed. - */ - public void finishUnmarshal(GridCacheContext ctx, ClassLoader ldr) throws IgniteCheckedException; - /** * @param locked Entry locked */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateAdapter.java index 0c30dc615aa66..d41a3da341e63 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryPredicateAdapter.java @@ -18,7 +18,6 @@ package org.apache.ignite.internal.processors.cache; import java.util.Objects; -import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.binary.BinaryObject; import org.apache.ignite.internal.Order; import org.apache.ignite.internal.util.tostring.GridToStringInclude; @@ -118,17 +117,4 @@ public CacheEntryPredicateType type() { throw new IllegalStateException("Unknown cache entry predicate type: " + type); } - - /** {@inheritDoc} */ - @Override public void finishUnmarshal(GridCacheContext ctx, ClassLoader ldr) throws IgniteCheckedException { - if (type == CacheEntryPredicateType.VALUE) - val.finishUnmarshal(ctx.cacheObjectContext(), ldr); - } - - /** {@inheritDoc} */ - @Override public void prepareMarshal(GridCacheContext ctx) throws IgniteCheckedException { - if (type == CacheEntryPredicateType.VALUE) - val.prepareMarshal(ctx.cacheObjectContext()); - } - } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicFullUpdateRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicFullUpdateRequest.java index 62fcf3966d916..3bbd5092fef58 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicFullUpdateRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicFullUpdateRequest.java @@ -338,21 +338,6 @@ else if (conflictVers != null) prepareMarshalCacheObjects(keys, cctx); - if (filter != null) { - boolean hasFilter = false; - - for (CacheEntryPredicate p : filter) { - if (p != null) { - hasFilter = true; - - p.prepareMarshal(cctx); - } - } - - if (!hasFilter) - filter = null; - } - if (operation() == TRANSFORM) { // force addition of deployment info for entry processors if P2P is enabled globally. if (!addDepInfo && ctx.deploymentEnabled()) @@ -379,13 +364,6 @@ else if (conflictVers != null) finishUnmarshalCacheObjects(keys, cctx, ldr); - if (filter != null) { - for (CacheEntryPredicate p : filter) { - if (p != null) - p.finishUnmarshal(cctx, ldr); - } - } - if (operation() == TRANSFORM) { if (entryProcessors == null) entryProcessors = unmarshalCollection(entryProcessorsBytes, ctx, ldr); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateFilterRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateFilterRequest.java index 7b072491d4f89..4f8fff65142be 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateFilterRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateFilterRequest.java @@ -94,37 +94,11 @@ public GridNearAtomicSingleUpdateFilterRequest() { /** {@inheritDoc} */ @Override public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { super.prepareMarshal(ctx); - - GridCacheContext cctx = ctx.cacheContext(cacheId); - - if (filter != null) { - boolean hasFilter = false; - - for (CacheEntryPredicate p : filter) { - if (p != null) { - hasFilter = true; - - p.prepareMarshal(cctx); - } - } - - if (!hasFilter) - filter = null; - } } /** {@inheritDoc} */ @Override public void finishUnmarshal(GridCacheSharedContext ctx, ClassLoader ldr) throws IgniteCheckedException { super.finishUnmarshal(ctx, ldr); - - if (filter != null) { - GridCacheContext cctx = ctx.cacheContext(cacheId); - - for (CacheEntryPredicate p : filter) { - if (p != null) - p.finishUnmarshal(cctx, ldr); - } - } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java index 038afdc1ed376..5bae95fd3fa17 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java @@ -917,13 +917,6 @@ public void filtersSet(boolean filtersSet) { * @throws IgniteCheckedException If failed. */ public void marshal(GridCacheSharedContext ctx, boolean transferExpiry) throws IgniteCheckedException { - if (filters != null) { - for (CacheEntryPredicate p : filters) { - if (p != null) - p.prepareMarshal(this.ctx); - } - } - // Do not serialize filters if they are null. if (transformClosBytes == null && entryProcessorsCol != null) transformClosBytes = CU.marshal(this.ctx, entryProcessorsCol); @@ -1005,12 +998,6 @@ public void unmarshal( if (filters == null) filters = CU.empty0(); - else { - for (CacheEntryPredicate p : filters) { - if (p != null) - p.finishUnmarshal(this.ctx, clsLdr); - } - } key.finishUnmarshal(coctx, clsLdr); From 5f544a52d8585acc2de60c5ff67000be52c01113 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 19:36:16 +0300 Subject: [PATCH 10/56] WIP --- .../cache/CacheInvokeDirectResult.java | 27 ------------------- .../processors/cache/GridCacheReturn.java | 8 ------ 2 files changed, 35 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeDirectResult.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeDirectResult.java index 1276c6b63c82c..4490be4c1dfc9 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeDirectResult.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeDirectResult.java @@ -19,7 +19,6 @@ import javax.cache.processor.EntryProcessor; import javax.cache.processor.MutableEntry; -import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.Order; import org.apache.ignite.internal.managers.communication.ErrorMessage; import org.apache.ignite.internal.util.tostring.GridToStringInclude; @@ -111,19 +110,6 @@ public CacheObject result() { return ErrorMessage.error(errMsg); } - /** - * @param ctx Cache context. - * @throws IgniteCheckedException If failed. - */ - public void prepareMarshal(GridCacheContext ctx) throws IgniteCheckedException { - key.prepareMarshal(ctx.cacheObjectContext()); - - assert unprepareRes == null : "marshalResult() was not called for the result: " + this; - - if (res != null) - res.prepareMarshal(ctx.cacheObjectContext()); - } - /** * Converts the entry processor unprepared result to a cache object instance. * @@ -139,19 +125,6 @@ public void marshalResult(GridCacheContext ctx) { } } - /** - * @param ctx Cache context. - * @param ldr Class loader. - * @throws IgniteCheckedException If failed. - */ - public void finishUnmarshal(GridCacheContext ctx, ClassLoader ldr) throws IgniteCheckedException { - key.finishUnmarshal(ctx.cacheObjectContext(), ldr); - - if (res != null) - res.finishUnmarshal(ctx.cacheObjectContext(), ldr); - } - - /** {@inheritDoc} */ @Override public String toString() { return S.toString(CacheInvokeDirectResult.class, this); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java index 7c78a10a5cf48..2fa1d961a4543 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java @@ -337,11 +337,6 @@ public void prepareMarshal(GridCacheContext ctx) throws IgniteCheckedException { if (cacheObj != null) cacheObj.prepareMarshal(ctx.cacheObjectContext()); - - if (invokeRes && invokeResCol != null) { - for (CacheInvokeDirectResult res : invokeResCol) - res.prepareMarshal(ctx); - } } /** @@ -359,9 +354,6 @@ public void finishUnmarshal(GridCacheContext ctx, ClassLoader ldr) throws Ignite } if (invokeRes && invokeResCol != null) { - for (CacheInvokeDirectResult res : invokeResCol) - res.finishUnmarshal(ctx, ldr); - Map map0 = U.newHashMap(invokeResCol.size()); for (CacheInvokeDirectResult res : invokeResCol) { From 945af7486eca7fb7c86126d60b545a0eb427dd25 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 19:38:10 +0300 Subject: [PATCH 11/56] WIP --- .../internal/processors/cache/GridCacheEntryInfo.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryInfo.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryInfo.java index d8d710f62368f..6c86d4afc7d81 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryInfo.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryInfo.java @@ -216,11 +216,6 @@ public void marshal(GridCacheContext ctx) throws IgniteCheckedException { public void marshal(CacheObjectContext ctx) throws IgniteCheckedException { assert key != null; - key.prepareMarshal(ctx); - - if (val != null) - val.prepareMarshal(ctx); - if (expireTime == 0) expireTime = -1; else { @@ -250,11 +245,6 @@ public void unmarshal(GridCacheContext ctx, ClassLoader clsLdr) throws IgniteChe * @throws IgniteCheckedException If unmarshalling failed. */ public void unmarshal(CacheObjectContext ctx, ClassLoader clsLdr) throws IgniteCheckedException { - key.finishUnmarshal(ctx, clsLdr); - - if (val != null) - val.finishUnmarshal(ctx, clsLdr); - long remaining = expireTime; expireTime = remaining < 0 ? 0 : U.currentTimeMillis() + remaining; From 70fae6c6dddc348a113b12cd711e7c2c83a46981 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 19:39:14 +0300 Subject: [PATCH 12/56] WIP --- .../internal/processors/cache/GridCacheMapEntry.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java index da6f47073df88..5717ca5fb1015 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java @@ -282,15 +282,10 @@ protected void value(@Nullable CacheObject val) { lockEntry(); try { - key.prepareMarshal(cctx.cacheObjectContext()); - kb = key.valueBytes(cctx.cacheObjectContext()); - if (val != null) { - val.prepareMarshal(cctx.cacheObjectContext()); - + if (val != null) vb = val.valueBytes(cctx.cacheObjectContext()); - } extrasSize = extrasSize(); } From 684bb33b900558c5a06a93b675762867f09d7a8d Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 19:39:45 +0300 Subject: [PATCH 13/56] WIP --- .../internal/processors/cache/GridCacheMapEntry.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java index 5717ca5fb1015..da6f47073df88 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java @@ -282,10 +282,15 @@ protected void value(@Nullable CacheObject val) { lockEntry(); try { + key.prepareMarshal(cctx.cacheObjectContext()); + kb = key.valueBytes(cctx.cacheObjectContext()); - if (val != null) + if (val != null) { + val.prepareMarshal(cctx.cacheObjectContext()); + vb = val.valueBytes(cctx.cacheObjectContext()); + } extrasSize = extrasSize(); } From 304bc5ddb81684a903169a6d56654f69b4d6d318 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 19:44:01 +0300 Subject: [PATCH 14/56] WIP --- .../ignite/internal/processors/cache/GridCacheMessage.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java index 845265a3c2c60..3668fffd5a6e8 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java @@ -537,8 +537,6 @@ public final void prepareMarshalCacheObjects(@Nullable List Date: Thu, 2 Apr 2026 19:45:11 +0300 Subject: [PATCH 15/56] WIP --- .../ignite/internal/processors/cache/GridCacheReturn.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java index 2fa1d961a4543..6df0c9d4571b5 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java @@ -334,9 +334,6 @@ public void marshalResult(GridCacheContext ctx) { */ public void prepareMarshal(GridCacheContext ctx) throws IgniteCheckedException { assert !loc; - - if (cacheObj != null) - cacheObj.prepareMarshal(ctx.cacheObjectContext()); } /** @@ -347,11 +344,8 @@ public void prepareMarshal(GridCacheContext ctx) throws IgniteCheckedException { public void finishUnmarshal(GridCacheContext ctx, ClassLoader ldr) throws IgniteCheckedException { loc = true; - if (cacheObj != null) { - cacheObj.finishUnmarshal(ctx.cacheObjectContext(), ldr); - + if (cacheObj != null) v = ctx.cacheObjectContext().unwrapBinaryIfNeeded(cacheObj, true, false, ldr); - } if (invokeRes && invokeResCol != null) { Map map0 = U.newHashMap(invokeResCol.size()); From dd09a2f95bc832f027c587b02a0126ba8180a848 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 19:47:36 +0300 Subject: [PATCH 16/56] WIP --- .../GridDhtAtomicSingleUpdateRequest.java | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicSingleUpdateRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicSingleUpdateRequest.java index 20aad2f7dec8b..ffd950c8477d0 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicSingleUpdateRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicSingleUpdateRequest.java @@ -314,14 +314,6 @@ private void near(boolean near) { /** {@inheritDoc} */ @Override public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { super.prepareMarshal(ctx); - - GridCacheContext cctx = ctx.cacheContext(cacheId); - - prepareMarshalObject(key, cctx); - - prepareMarshalObject(val, cctx); - - prepareMarshalObject(prevVal, cctx); } /** {@inheritDoc} */ @@ -337,16 +329,6 @@ private void near(boolean near) { finishUnmarshalObject(prevVal, cctx, ldr); } - /** - * @param obj CacheObject to marshal - * @param ctx context - * @throws IgniteCheckedException if error - */ - private void prepareMarshalObject(CacheObject obj, GridCacheContext ctx) throws IgniteCheckedException { - if (obj != null) - obj.prepareMarshal(ctx.cacheObjectContext()); - } - /** * @param obj CacheObject un to marshal * @param ctx context From 90bd596b672dbcfcf78d8edf0db004883fb364bb Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 19:50:32 +0300 Subject: [PATCH 17/56] WIP --- .../distributed/near/CacheVersionedValue.java | 29 ------------------- .../near/GridNearSingleGetResponse.java | 4 --- .../near/GridNearTxPrepareResponse.java | 4 --- 3 files changed, 37 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/CacheVersionedValue.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/CacheVersionedValue.java index af5d90f84d2a2..969c803f0521e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/CacheVersionedValue.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/CacheVersionedValue.java @@ -17,11 +17,8 @@ package org.apache.ignite.internal.processors.cache.distributed.near; -import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.Order; import org.apache.ignite.internal.processors.cache.CacheObject; -import org.apache.ignite.internal.processors.cache.CacheObjectContext; -import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.internal.S; @@ -69,32 +66,6 @@ public CacheObject value() { return val; } - /** - * This method is called before the whole message is sent - * and is responsible for pre-marshalling state. - * - * @param ctx Cache object context. - * @throws IgniteCheckedException If failed. - */ - public void prepareMarshal(CacheObjectContext ctx) throws IgniteCheckedException { - if (val != null) - val.prepareMarshal(ctx); - } - - /** - * This method is called after the whole message is received - * and is responsible for unmarshalling state. - * - * @param ctx Context. - * @param ldr Class loader. - * @throws IgniteCheckedException If failed. - */ - public void finishUnmarshal(GridCacheContext ctx, ClassLoader ldr) throws IgniteCheckedException { - if (val != null) - val.finishUnmarshal(ctx.cacheObjectContext(), ldr); - } - - /** {@inheritDoc} */ @Override public String toString() { return S.toString(CacheVersionedValue.class, this); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearSingleGetResponse.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearSingleGetResponse.java index 73f72ec4c0247..b6f18409a0462 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearSingleGetResponse.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearSingleGetResponse.java @@ -153,8 +153,6 @@ public long futureId() { if (res instanceof CacheObject) prepareMarshalCacheObject((CacheObject)res, cctx); - else if (res instanceof CacheVersionedValue) - ((CacheVersionedValue)res).prepareMarshal(cctx.cacheObjectContext()); else if (res instanceof GridCacheEntryInfo) ((GridCacheEntryInfo)res).marshal(cctx); } @@ -169,8 +167,6 @@ else if (res instanceof GridCacheEntryInfo) if (res instanceof CacheObject) ((CacheObject)res).finishUnmarshal(cctx.cacheObjectContext(), ldr); - else if (res instanceof CacheVersionedValue) - ((CacheVersionedValue)res).finishUnmarshal(cctx, ldr); else if (res instanceof GridCacheEntryInfo) ((GridCacheEntryInfo)res).unmarshal(cctx, ldr); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareResponse.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareResponse.java index 646335209b86e..d6cd5974463fa 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareResponse.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareResponse.java @@ -253,8 +253,6 @@ public boolean hasOwnedValue(IgniteTxKey key) { GridCacheContext cacheCtx = ctx.cacheContext(entry.getKey().cacheId()); entry.getKey().prepareMarshal(cacheCtx); - - entry.getValue().prepareMarshal(cacheCtx.cacheObjectContext()); } } @@ -302,8 +300,6 @@ public boolean hasOwnedValue(IgniteTxKey key) { key.finishUnmarshal(cctx, ldr); - val.finishUnmarshal(cctx, ldr); - ownedVals.put(key, val); } } From 3c70db3c69cdf2603e102354912cce2b56ce34d5 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 19:51:11 +0300 Subject: [PATCH 18/56] WIP --- .../cache/query/GridCacheQueryRequest.java | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryRequest.java index 84813c40420c9..ddec87b120750 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryRequest.java @@ -21,7 +21,6 @@ import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.Order; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; -import org.apache.ignite.internal.processors.cache.CacheObjectContext; import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheDeployable; import org.apache.ignite.internal.processors.cache.GridCacheIdMessage; @@ -448,11 +447,6 @@ private static byte setDataPageScanEnabled(int flags, Boolean enabled) { idxQryDescBytes = CU.marshal(cctx, idxQryDesc); } - - if (!F.isEmpty(skipKeys)) { - for (KeyCacheObject k : skipKeys) - k.prepareMarshal(cctx.cacheObjectContext()); - } } /** {@inheritDoc} */ @@ -477,13 +471,6 @@ private static byte setDataPageScanEnabled(int flags, Boolean enabled) { if (idxQryDescBytes != null && idxQryDesc == null) idxQryDesc = U.unmarshal(mrsh, idxQryDescBytes, clsLdr); - - if (!F.isEmpty(skipKeys)) { - CacheObjectContext objCtx = ctx.cacheObjectContext(cacheId); - - for (KeyCacheObject k : skipKeys) - k.finishUnmarshal(objCtx, ldr); - } } /** {@inheritDoc} */ From 0815d09c79edf9c08e3647d63fa4ab2bae8c751a Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 19:53:20 +0300 Subject: [PATCH 19/56] WIP --- .../continuous/CacheContinuousQueryEntry.java | 34 ------------------- .../CacheContinuousQueryHandler.java | 9 +---- 2 files changed, 1 insertion(+), 42 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryEntry.java index d8dceadd18eb1..a686f3ccec7a6 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryEntry.java @@ -23,7 +23,6 @@ import org.apache.ignite.internal.managers.deployment.GridDeploymentInfo; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.CacheObject; -import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheDeployable; import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.util.tostring.GridToStringExclude; @@ -295,39 +294,6 @@ boolean isKeepBinary() { return (flags & KEEP_BINARY) != 0; } - /** - * @param cctx Cache context. - * @throws IgniteCheckedException In case of error. - */ - void prepareMarshal(GridCacheContext cctx) throws IgniteCheckedException { - if (key != null) - key.prepareMarshal(cctx.cacheObjectContext()); - - if (newVal != null) - newVal.prepareMarshal(cctx.cacheObjectContext()); - - if (oldVal != null) - oldVal.prepareMarshal(cctx.cacheObjectContext()); - } - - /** - * @param cctx Cache context. - * @param ldr Class loader. - * @throws IgniteCheckedException In case of error. - */ - void unmarshal(GridCacheContext cctx, @Nullable ClassLoader ldr) throws IgniteCheckedException { - if (!isFiltered()) { - if (key != null) - key.finishUnmarshal(cctx.cacheObjectContext(), ldr); - - if (newVal != null) - newVal.finishUnmarshal(cctx.cacheObjectContext(), ldr); - - if (oldVal != null) - oldVal.finishUnmarshal(cctx.cacheObjectContext(), ldr); - } - } - /** * @return Key. */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java index ee131f4db3ebb..793826b0b952d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java @@ -807,13 +807,8 @@ protected CacheEntryEventFilter getEventFilter0() { */ private void prepareEntry(GridCacheContext cctx, UUID nodeId, CacheContinuousQueryEntry entry) throws IgniteCheckedException { - if (cctx.kernalContext().config().isPeerClassLoadingEnabled() && cctx.discovery().node(nodeId) != null) { - entry.prepareMarshal(cctx); - + if (cctx.kernalContext().config().isPeerClassLoadingEnabled() && cctx.discovery().node(nodeId) != null) cctx.deploy().prepare(entry); - } - else - entry.prepareMarshal(cctx); } /** @@ -951,8 +946,6 @@ private void notifyCallback0(UUID nodeId, } } - e.unmarshal(cctx, ldr); - Collection> evts = handleEvent(ctx, e); if (evts != null && !evts.isEmpty()) From b2a51f81b89374e9fc6f8be6165be6f2375e01fc Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 19:53:54 +0300 Subject: [PATCH 20/56] WIP --- .../cache/query/continuous/CacheContinuousQueryHandler.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java index 793826b0b952d..a5d9757a0c66d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java @@ -929,8 +929,6 @@ private void notifyCallback0(UUID nodeId, for (CacheContinuousQueryEntry e : entries) { GridCacheDeploymentManager depMgr = cctx.deploy(); - ClassLoader ldr = depMgr.globalLoader(); - try { if (ctx.config().isPeerClassLoadingEnabled()) { GridDeploymentInfo depInfo = e.deployInfo(); From 15839efb002c09569f5e1deb321b1437aa5dc4f0 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 19:55:19 +0300 Subject: [PATCH 21/56] WIP --- .../cache/transactions/IgniteTxEntry.java | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java index 5bae95fd3fa17..136148ae0283c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java @@ -924,19 +924,12 @@ public void marshal(GridCacheSharedContext ctx, boolean transferExpiry) th if (transferExpiry) transferExpiryPlc = expiryPlc != null && expiryPlc != this.ctx.expiry(); - key.prepareMarshal(context().cacheObjectContext()); - - val.marshal(context()); - if (transferExpiryPlc) { if (expiryPlcBytes == null) expiryPlcBytes = CU.marshal(this.ctx, new IgniteExternalizableExpiryPolicy(expiryPlc)); } else expiryPlcBytes = null; - - if (oldVal != null) - oldVal.marshal(context()); } /** @@ -999,15 +992,8 @@ public void unmarshal( if (filters == null) filters = CU.empty0(); - key.finishUnmarshal(coctx, clsLdr); - - val.unmarshal(coctx, clsLdr); - if (expiryPlcBytes != null && expiryPlc == null) expiryPlc = U.unmarshal(ctx, expiryPlcBytes, U.resolveClassLoader(clsLdr, ctx.gridConfig())); - - if (hasOldValue()) - oldVal.unmarshal(coctx, clsLdr); } /** From 38e24ff5587f2aa6710fd55adef59967d54fbe46 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 19:59:55 +0300 Subject: [PATCH 22/56] WIP --- .../GridDistributedTxPrepareRequest.java | 8 ------ .../dht/GridDhtTxPrepareRequest.java | 7 +---- .../dht/GridDhtTxPrepareResponse.java | 18 ------------- .../near/GridNearTxPrepareResponse.java | 26 ------------------- .../cache/transactions/IgniteTxKey.java | 21 --------------- .../cache/transactions/TxLocksResponse.java | 7 +---- 6 files changed, 2 insertions(+), 85 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxPrepareRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxPrepareRequest.java index bd427bd47b56f..ce60de12e771a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxPrepareRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxPrepareRequest.java @@ -382,12 +382,6 @@ public void applicationAttributes(Map appAttrs) { marshalTx(reads, ctx); if (dhtVers != null && dhtVerKeys == null) { - for (IgniteTxKey key : dhtVers.keySet()) { - GridCacheContext cctx = ctx.cacheContext(key.cacheId()); - - key.prepareMarshal(cctx); - } - dhtVerKeys = dhtVers.keySet(); dhtVerVals = dhtVers.values(); } @@ -415,8 +409,6 @@ public void applicationAttributes(Map appAttrs) { while (keyIt.hasNext()) { IgniteTxKey key = keyIt.next(); - key.finishUnmarshal(ctx.cacheContext(key.cacheId()), ldr); - dhtVers.put(key, verIt.next()); } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareRequest.java index f8364dca6adb1..d07ee91af3fcc 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareRequest.java @@ -331,8 +331,6 @@ public boolean skipCompletedVersion() { for (IgniteTxKey key: ownedKeys) { GridCacheContext cctx = ctx.cacheContext(key.cacheId()); - key.prepareMarshal(cctx); - if (addDepInfo) prepareObject(key, cctx); } @@ -360,11 +358,8 @@ public boolean skipCompletedVersion() { GridCacheContext cacheCtx = ctx.cacheContext(key.cacheId()); - if (cacheCtx != null) { - key.finishUnmarshal(cacheCtx, ldr); - + if (cacheCtx != null) owned.put(key, valIter.next()); - } } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareResponse.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareResponse.java index 921f52790252b..ca95fab5b3bcf 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareResponse.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareResponse.java @@ -173,16 +173,6 @@ public void addPreloadEntry(GridCacheEntryInfo info) { @Override public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { super.prepareMarshal(ctx); - if (nearEvicted != null) { - for (IgniteTxKey key : nearEvicted) { - GridCacheContext cctx = ctx.cacheContext(key.cacheId()); - - // Can be null if client near cache was removed, in this case assume do not need prepareMarshal. - if (cctx != null) - key.prepareMarshal(cctx); - } - } - if (preloadEntries != null) { for (GridCacheEntryInfo info : preloadEntries) { GridCacheContext cctx = ctx.cacheContext(info.cacheId()); @@ -196,14 +186,6 @@ public void addPreloadEntry(GridCacheEntryInfo info) { @Override public void finishUnmarshal(GridCacheSharedContext ctx, ClassLoader ldr) throws IgniteCheckedException { super.finishUnmarshal(ctx, ldr); - if (nearEvicted != null) { - for (IgniteTxKey key : nearEvicted) { - GridCacheContext cctx = ctx.cacheContext(key.cacheId()); - - key.finishUnmarshal(cctx, ldr); - } - } - if (preloadEntries != null) { for (GridCacheEntryInfo info : preloadEntries) { GridCacheContext cctx = ctx.cacheContext(info.cacheId()); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareResponse.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareResponse.java index d6cd5974463fa..d1325580b2759 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareResponse.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareResponse.java @@ -248,12 +248,6 @@ public boolean hasOwnedValue(IgniteTxKey key) { ownedValKeys = ownedVals.keySet(); ownedValVals = ownedVals.values(); - - for (Map.Entry entry : ownedVals.entrySet()) { - GridCacheContext cacheCtx = ctx.cacheContext(entry.getKey().cacheId()); - - entry.getKey().prepareMarshal(cacheCtx); - } } if (retVal != null && retVal.cacheId() != 0) { @@ -263,14 +257,6 @@ public boolean hasOwnedValue(IgniteTxKey key) { retVal.prepareMarshal(cctx); } - - if (filterFailedKeys != null) { - for (IgniteTxKey key : filterFailedKeys) { - GridCacheContext cctx = ctx.cacheContext(key.cacheId()); - - key.prepareMarshal(cctx); - } - } } /** {@inheritDoc} */ @@ -294,12 +280,8 @@ public boolean hasOwnedValue(IgniteTxKey key) { while (keyIter.hasNext()) { IgniteTxKey key = keyIter.next(); - GridCacheContext cctx = ctx.cacheContext(key.cacheId()); - CacheVersionedValue val = valIter.next(); - key.finishUnmarshal(cctx, ldr); - ownedVals.put(key, val); } } @@ -311,14 +293,6 @@ public boolean hasOwnedValue(IgniteTxKey key) { retVal.finishUnmarshal(cctx, ldr); } - - if (filterFailedKeys != null) { - for (IgniteTxKey key : filterFailedKeys) { - GridCacheContext cctx = ctx.cacheContext(key.cacheId()); - - key.finishUnmarshal(cctx, ldr); - } - } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxKey.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxKey.java index 11b2a6f7c76b6..1645e9ce3d40c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxKey.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxKey.java @@ -17,9 +17,7 @@ package org.apache.ignite.internal.processors.cache.transactions; -import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.Order; -import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheIdMessage; import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.util.tostring.GridToStringInclude; @@ -58,25 +56,6 @@ public KeyCacheObject key() { return key; } - /** - * @param ctx Context. - * @throws IgniteCheckedException If failed. - */ - public void prepareMarshal(GridCacheContext ctx) throws IgniteCheckedException { - key.prepareMarshal(ctx.cacheObjectContext()); - } - - /** - * @param ctx Context. - * @param ldr Class loader. - * @throws IgniteCheckedException If failed. - */ - public void finishUnmarshal(GridCacheContext ctx, ClassLoader ldr) throws IgniteCheckedException { - assert key != null; - - key.finishUnmarshal(ctx.cacheObjectContext(), ldr); - } - /** {@inheritDoc} */ @Override public boolean equals(Object o) { if (this == o) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxLocksResponse.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxLocksResponse.java index 8ebbcbddbd031..d05478bd35bb4 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxLocksResponse.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxLocksResponse.java @@ -151,8 +151,6 @@ public void addKey(IgniteTxKey key) { for (Map.Entry> entry : nearTxKeyLocks.entrySet()) { IgniteTxKey key = entry.getKey(); - key.prepareMarshal(ctx.cacheContext(key.cacheId())); - nearTxKeysArr[i] = key; locksArr[i] = entry.getValue(); @@ -165,11 +163,8 @@ public void addKey(IgniteTxKey key) { int i = 0; - for (IgniteTxKey key : txKeys) { - key.prepareMarshal(ctx.cacheContext(key.cacheId())); - + for (IgniteTxKey key : txKeys) txKeysArr[i++] = key; - } } } From 562710d8193c7780c16ef5fed2ca66d22d1980e4 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 20:01:20 +0300 Subject: [PATCH 23/56] WIP --- .../transactions/TxEntryValueHolder.java | 22 ------------------- 1 file changed, 22 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxEntryValueHolder.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxEntryValueHolder.java index 98e5830cb3b46..425e4d88cdfeb 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxEntryValueHolder.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxEntryValueHolder.java @@ -17,11 +17,8 @@ package org.apache.ignite.internal.processors.cache.transactions; -import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.Order; import org.apache.ignite.internal.processors.cache.CacheObject; -import org.apache.ignite.internal.processors.cache.CacheObjectValueContext; -import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheOperation; import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.tostring.GridToStringInclude; @@ -119,25 +116,6 @@ public boolean hasReadValue() { return hasReadVal; } - /** - * @param ctx Cache context. - * @throws IgniteCheckedException If marshaling failed. - */ - public void marshal(GridCacheContext ctx) throws IgniteCheckedException { - if (hasWriteVal && val != null) - val.prepareMarshal(ctx.cacheObjectContext()); - } - - /** - * @param ctx Cache context. - * @param ldr Class loader. - * @throws IgniteCheckedException If unmarshalling failed. - */ - public void unmarshal(CacheObjectValueContext ctx, ClassLoader ldr) throws IgniteCheckedException { - if (hasWriteVal && val != null) - val.finishUnmarshal(ctx, ldr); - } - /** {@inheritDoc} */ @Override public String toString() { return S.toString(TxEntryValueHolder.class, this); From 6840ad1cb11881da887b265dc8242b73232d5751 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 20:03:54 +0300 Subject: [PATCH 24/56] WIP --- .../internal/processors/cache/GridCacheEntryInfo.java | 10 ---------- .../cache/distributed/near/GridNearGetFuture.java | 2 -- 2 files changed, 12 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryInfo.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryInfo.java index 6c86d4afc7d81..ac794d417792c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryInfo.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryInfo.java @@ -175,16 +175,6 @@ public void setDeleted(boolean deleted) { this.deleted = deleted; } - /** - * @param ctx Context. - * @param ldr Loader. - * @throws IgniteCheckedException If failed. - */ - public void unmarshalValue(GridCacheContext ctx, ClassLoader ldr) throws IgniteCheckedException { - if (val != null) - val.finishUnmarshal(ctx.cacheObjectContext(), ldr); - } - /** * @param ctx Cache object context. * @return Marshalled size. diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java index a8df9c74253c6..75ef1509bc4af 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java @@ -628,8 +628,6 @@ private Map loadEntries( for (GridCacheEntryInfo info : infos) { try { - info.unmarshalValue(cctx, cctx.deploy().globalLoader()); - // Entries available locally in DHT should not be loaded into near cache for reading. if (!cctx.affinity().keyLocalNode(info.key(), cctx.affinity().affinityTopologyVersion())) { GridNearCacheEntry entry = savedEntries.get(info.key()); From aff43592496690662999c026091f4d24bfe30ec4 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 20:08:55 +0300 Subject: [PATCH 25/56] WIP --- .../processors/cache/GridCacheMessage.java | 50 +------------------ .../GridCacheTtlUpdateRequest.java | 6 --- .../GridDistributedLockRequest.java | 4 -- .../GridDistributedLockResponse.java | 2 - .../distributed/GridNearUnlockRequest.java | 2 - .../distributed/dht/GridDhtUnlockRequest.java | 2 - .../dht/atomic/GridDhtAtomicNearResponse.java | 3 -- .../atomic/GridDhtAtomicUpdateRequest.java | 12 ----- .../atomic/GridDhtAtomicUpdateResponse.java | 7 --- .../GridNearAtomicFullUpdateRequest.java | 4 -- .../atomic/GridNearAtomicUpdateResponse.java | 6 --- .../distributed/dht/atomic/UpdateErrors.java | 6 --- .../preloader/GridDhtForceKeysRequest.java | 4 -- .../preloader/GridDhtForceKeysResponse.java | 3 -- 14 files changed, 2 insertions(+), 109 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java index 3668fffd5a6e8..fb79d662571f2 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMessage.java @@ -308,11 +308,8 @@ protected final void marshalInfo(GridCacheEntryInfo info, CacheObject val = info.value(); - if (val != null) { - val.finishUnmarshal(cacheObjCtx, ctx.deploy().globalLoader()); - + if (val != null) prepareObject(val.value(cacheObjCtx, false), ctx); - } } } } @@ -559,50 +556,7 @@ protected final void prepareMarshalCacheObjects(@Nullable Collection col, - GridCacheContext ctx, - ClassLoader ldr - ) throws IgniteCheckedException { - if (col == null) - return; - - int size = col.size(); - - for (int i = 0; i < size; i++) { - CacheObject obj = col.get(i); - - if (obj != null) - obj.finishUnmarshal(ctx.cacheObjectContext(), ldr); - } - } - - /** - * @param col Collection. - * @param ctx Context. - * @param ldr Class loader. - * @throws IgniteCheckedException If failed. - */ - protected final void finishUnmarshalCacheObjects(@Nullable Collection col, - GridCacheContext ctx, - ClassLoader ldr - ) throws IgniteCheckedException { - if (col == null) - return; - - for (CacheObject obj : col) { - if (obj != null) - obj.finishUnmarshal(ctx.cacheObjectContext(), ldr); - } - } - + /** * @param byteCol Collection to unmarshal. * @param ctx Context. diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheTtlUpdateRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheTtlUpdateRequest.java index c83e732f6181a..2aaf3e1bd12b2 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheTtlUpdateRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheTtlUpdateRequest.java @@ -170,12 +170,6 @@ public List nearVersions() { @Override public void finishUnmarshal(GridCacheSharedContext ctx, ClassLoader ldr) throws IgniteCheckedException { super.finishUnmarshal(ctx, ldr); - - GridCacheContext cctx = ctx.cacheContext(cacheId); - - finishUnmarshalCacheObjects(keys, cctx, ldr); - - finishUnmarshalCacheObjects(nearKeys, cctx, ldr); } /** {@inheritDoc} */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedLockRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedLockRequest.java index b02d75024fec5..04fec5ae42937 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedLockRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedLockRequest.java @@ -359,10 +359,6 @@ public long timeout() { /** {@inheritDoc} */ @Override public void finishUnmarshal(GridCacheSharedContext ctx, ClassLoader ldr) throws IgniteCheckedException { super.finishUnmarshal(ctx, ldr); - - GridCacheContext cctx = ctx.cacheContext(cacheId); - - finishUnmarshalCacheObjects(keys, cctx, ldr); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedLockResponse.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedLockResponse.java index cbf10745a7a19..877186405d499 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedLockResponse.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedLockResponse.java @@ -170,8 +170,6 @@ protected int valuesSize() { /** {@inheritDoc} */ @Override public void finishUnmarshal(GridCacheSharedContext ctx, ClassLoader ldr) throws IgniteCheckedException { super.finishUnmarshal(ctx, ldr); - - finishUnmarshalCacheObjects(vals, ctx.cacheContext(cacheId), ldr); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridNearUnlockRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridNearUnlockRequest.java index 2c55bfd642547..f5565895878f9 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridNearUnlockRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridNearUnlockRequest.java @@ -86,8 +86,6 @@ public void addKey(KeyCacheObject key) { /** {@inheritDoc} */ @Override public void finishUnmarshal(GridCacheSharedContext ctx, ClassLoader ldr) throws IgniteCheckedException { super.finishUnmarshal(ctx, ldr); - - finishUnmarshalCacheObjects(keys, ctx.cacheContext(cacheId), ldr); } /** {@inheritDoc} */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtUnlockRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtUnlockRequest.java index 8c5fc051a69e7..528fc1076da2c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtUnlockRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtUnlockRequest.java @@ -80,8 +80,6 @@ public void addNearKey(KeyCacheObject key) /** {@inheritDoc} */ @Override public void finishUnmarshal(GridCacheSharedContext ctx, ClassLoader ldr) throws IgniteCheckedException { super.finishUnmarshal(ctx, ldr); - - finishUnmarshalCacheObjects(nearKeys, ctx.cacheContext(cacheId), ldr); } /** {@inheritDoc} */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicNearResponse.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicNearResponse.java index f71e035bdac94..af44a5fcb9dd8 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicNearResponse.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicNearResponse.java @@ -182,9 +182,6 @@ public long futureId() { /** {@inheritDoc} */ @Override public void finishUnmarshal(GridCacheSharedContext ctx, ClassLoader ldr) throws IgniteCheckedException { super.finishUnmarshal(ctx, ldr); - - if (errs != null) - errs.finishUnmarshal(this, ctx.cacheContext(cacheId), ldr); } /** {@inheritDoc} */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateRequest.java index 4d06d1705daaf..d49c7a193cf16 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateRequest.java @@ -497,18 +497,6 @@ else if (conflictVers != null) @Override public void finishUnmarshal(GridCacheSharedContext ctx, ClassLoader ldr) throws IgniteCheckedException { super.finishUnmarshal(ctx, ldr); - GridCacheContext cctx = ctx.cacheContext(cacheId); - - finishUnmarshalCacheObjects(keys, cctx, ldr); - - finishUnmarshalCacheObjects(vals, cctx, ldr); - - finishUnmarshalCacheObjects(nearKeys, cctx, ldr); - - finishUnmarshalCacheObjects(nearVals, cctx, ldr); - - finishUnmarshalCacheObjects(prevVals, cctx, ldr); - if (forceTransformBackups) { if (entryProcessors == null) entryProcessors = unmarshalCollection(entryProcessorsBytes, ctx, ldr); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateResponse.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateResponse.java index a63354bc634fa..0cca67faca24b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateResponse.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicUpdateResponse.java @@ -136,13 +136,6 @@ public void nearEvicted(List nearEvicted) { /** {@inheritDoc} */ @Override public void finishUnmarshal(GridCacheSharedContext ctx, ClassLoader ldr) throws IgniteCheckedException { super.finishUnmarshal(ctx, ldr); - - GridCacheContext cctx = ctx.cacheContext(cacheId); - - finishUnmarshalCacheObjects(nearEvicted, cctx, ldr); - - if (errs != null) - errs.finishUnmarshal(this, cctx, ldr); } /** {@inheritDoc} */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicFullUpdateRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicFullUpdateRequest.java index 3bbd5092fef58..59c6427968028 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicFullUpdateRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicFullUpdateRequest.java @@ -362,8 +362,6 @@ else if (conflictVers != null) if (expiryPlcBytes != null && expiryPlc == null) expiryPlc = U.unmarshal(ctx, expiryPlcBytes, U.resolveClassLoader(ldr, ctx.gridConfig())); - finishUnmarshalCacheObjects(keys, cctx, ldr); - if (operation() == TRANSFORM) { if (entryProcessors == null) entryProcessors = unmarshalCollection(entryProcessorsBytes, ctx, ldr); @@ -371,8 +369,6 @@ else if (conflictVers != null) if (invokeArgsBytes != null && invokeArgs == null) invokeArgs = unmarshalInvokeArguments(invokeArgsBytes.toArray(new byte[invokeArgsBytes.size()][]), ctx, ldr); } - else - finishUnmarshalCacheObjects(vals, cctx, ldr); } /** {@inheritDoc} */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateResponse.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateResponse.java index a1103fb308d55..d82f7f9b8e51c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateResponse.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateResponse.java @@ -360,12 +360,6 @@ synchronized void addFailedKeys(Collection keys, Throwable e) { GridCacheContext cctx = ctx.cacheContext(cacheId); - if (errs != null) - errs.finishUnmarshal(this, cctx, ldr); - - if (nearUpdates != null) - finishUnmarshalCacheObjects(nearUpdates.nearValues(), cctx, ldr); - if (ret != null) ret.finishUnmarshal(cctx, ldr); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/UpdateErrors.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/UpdateErrors.java index 0e42f82082251..0a1848fd4c279 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/UpdateErrors.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/UpdateErrors.java @@ -120,12 +120,6 @@ void prepareMarshal(GridCacheMessage msg, GridCacheContext cctx) throws Ig msg.prepareMarshalCacheObjects(failedKeys, cctx); } - /** */ - void finishUnmarshal(GridCacheMessage msg, GridCacheContext cctx, ClassLoader ldr) throws IgniteCheckedException { - msg.finishUnmarshalCacheObjects(failedKeys, cctx, ldr); - } - - /** {@inheritDoc} */ @Override public String toString() { return S.toString(UpdateErrors.class, this); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtForceKeysRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtForceKeysRequest.java index 898ad4478f086..2b4c1d986d74e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtForceKeysRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtForceKeysRequest.java @@ -125,10 +125,6 @@ public Collection keys() { /** {@inheritDoc} */ @Override public void finishUnmarshal(GridCacheSharedContext ctx, ClassLoader ldr) throws IgniteCheckedException { super.finishUnmarshal(ctx, ldr); - - GridCacheContext cctx = ctx.cacheContext(cacheId); - - finishUnmarshalCacheObjects(keys, cctx, ldr); } /** {@inheritDoc} */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtForceKeysResponse.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtForceKeysResponse.java index cafcb5fa3e364..c5b5900fe847e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtForceKeysResponse.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtForceKeysResponse.java @@ -152,9 +152,6 @@ public void addInfo(GridCacheEntryInfo info) { GridCacheContext cctx = ctx.cacheContext(cacheId); - if (missedKeys != null) - finishUnmarshalCacheObjects(missedKeys, cctx, ldr); - if (infos != null) { for (GridCacheEntryInfo info : infos) info.unmarshal(cctx.cacheObjectContext(), ldr); From 066a941b92e172b8d26442b74af41025a97fc82d Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 20:10:14 +0300 Subject: [PATCH 26/56] WIP --- .../GridDhtAtomicSingleUpdateRequest.java | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicSingleUpdateRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicSingleUpdateRequest.java index ffd950c8477d0..e589692361f8f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicSingleUpdateRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicSingleUpdateRequest.java @@ -23,7 +23,6 @@ import org.apache.ignite.internal.Order; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.CacheObject; -import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheOperation; import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.processors.cache.KeyCacheObject; @@ -319,26 +318,6 @@ private void near(boolean near) { /** {@inheritDoc} */ @Override public void finishUnmarshal(GridCacheSharedContext ctx, ClassLoader ldr) throws IgniteCheckedException { super.finishUnmarshal(ctx, ldr); - - GridCacheContext cctx = ctx.cacheContext(cacheId); - - finishUnmarshalObject(key, cctx, ldr); - - finishUnmarshalObject(val, cctx, ldr); - - finishUnmarshalObject(prevVal, cctx, ldr); - } - - /** - * @param obj CacheObject un to marshal - * @param ctx context - * @param ldr class loader - * @throws IgniteCheckedException if error - */ - private void finishUnmarshalObject(@Nullable CacheObject obj, GridCacheContext ctx, - ClassLoader ldr) throws IgniteCheckedException { - if (obj != null) - obj.finishUnmarshal(ctx.cacheObjectContext(), ldr); } /** From 93b45ca36778a479b11b38fd7cf1c5f76c6bdf6a Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 20:10:34 +0300 Subject: [PATCH 27/56] WIP --- .../atomic/GridNearAtomicSingleUpdateRequest.java | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateRequest.java index 25b31b062c7c3..34edb238e0027 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateRequest.java @@ -28,7 +28,6 @@ import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.CacheEntryPredicate; import org.apache.ignite.internal.processors.cache.CacheObject; -import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheOperation; import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.processors.cache.GridCacheUtils; @@ -219,25 +218,11 @@ public GridNearAtomicSingleUpdateRequest() { /** {@inheritDoc} */ @Override public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { super.prepareMarshal(ctx); - - GridCacheContext cctx = ctx.cacheContext(cacheId); - - prepareMarshalCacheObject(key, cctx); - - if (val != null) - prepareMarshalCacheObject(val, cctx); } /** {@inheritDoc} */ @Override public void finishUnmarshal(GridCacheSharedContext ctx, ClassLoader ldr) throws IgniteCheckedException { super.finishUnmarshal(ctx, ldr); - - GridCacheContext cctx = ctx.cacheContext(cacheId); - - key.finishUnmarshal(cctx.cacheObjectContext(), ldr); - - if (val != null) - val.finishUnmarshal(cctx.cacheObjectContext(), ldr); } /** {@inheritDoc} */ From 52148a2bedc54cd6787d96b561d9374265a56826 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 20:11:55 +0300 Subject: [PATCH 28/56] WIP --- .../cache/distributed/near/GridNearSingleGetRequest.java | 6 ------ .../cache/distributed/near/GridNearSingleGetResponse.java | 4 +--- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearSingleGetRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearSingleGetRequest.java index 07ca1355fc0f0..e5c822040790b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearSingleGetRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearSingleGetRequest.java @@ -263,12 +263,6 @@ public boolean recovery() { /** {@inheritDoc} */ @Override public void finishUnmarshal(GridCacheSharedContext ctx, ClassLoader ldr) throws IgniteCheckedException { super.finishUnmarshal(ctx, ldr); - - assert key != null; - - GridCacheContext cctx = ctx.cacheContext(cacheId); - - key.finishUnmarshal(cctx.cacheObjectContext(), ldr); } /** {@inheritDoc} */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearSingleGetResponse.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearSingleGetResponse.java index b6f18409a0462..8aee353a775f7 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearSingleGetResponse.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearSingleGetResponse.java @@ -165,9 +165,7 @@ else if (res instanceof GridCacheEntryInfo) if (res != null) { GridCacheContext cctx = ctx.cacheContext(cacheId()); - if (res instanceof CacheObject) - ((CacheObject)res).finishUnmarshal(cctx.cacheObjectContext(), ldr); - else if (res instanceof GridCacheEntryInfo) + if (res instanceof GridCacheEntryInfo) ((GridCacheEntryInfo)res).unmarshal(cctx, ldr); } } From 53b2c3fa8b4a7520b675e346f79e4efa9728cd33 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 20:12:47 +0300 Subject: [PATCH 29/56] WIP --- .../cache/query/GridCacheQueryResponse.java | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryResponse.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryResponse.java index 6b295f2561182..7302b050e5407 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryResponse.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryResponse.java @@ -25,12 +25,10 @@ import org.apache.ignite.internal.Order; import org.apache.ignite.internal.cache.query.index.IndexQueryResultMeta; import org.apache.ignite.internal.managers.communication.ErrorMessage; -import org.apache.ignite.internal.processors.cache.CacheObjectContext; import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheDeployable; import org.apache.ignite.internal.processors.cache.GridCacheIdMessage; import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; -import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; @@ -154,22 +152,9 @@ public GridCacheQueryResponse(int cacheId, long reqId, Throwable err, boolean ad ClassLoader ldr0 = U.resolveClassLoader(ldr, ctx.gridConfig()); - CacheObjectContext cacheObjCtx = null; - for (byte[] bytes : byteCol) { Object obj = bytes == null ? null : marsh.unmarshal(bytes, ldr0); - if (obj instanceof Map.Entry) { - Object key = ((Map.Entry)obj).getKey(); - - if (key instanceof KeyCacheObject) { - if (cacheObjCtx == null) - cacheObjCtx = ctx.cacheContext(cacheId).cacheObjectContext(); - - ((KeyCacheObject)key).finishUnmarshal(cacheObjCtx, ldr0); - } - } - col.add((T)obj); } From b537fcef91fa2cbe3927d372b22bb7c58163dc5d Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 20:13:22 +0300 Subject: [PATCH 30/56] WIP --- .../processors/cache/transactions/TxLocksResponse.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxLocksResponse.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxLocksResponse.java index d05478bd35bb4..46cb9217a671c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxLocksResponse.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxLocksResponse.java @@ -177,8 +177,6 @@ public void addKey(IgniteTxKey key) { for (int i = 0; i < nearTxKeysArr.length; i++) { IgniteTxKey txKey = nearTxKeysArr[i]; - txKey.key().finishUnmarshal(ctx.cacheObjectContext(txKey.cacheId()), ldr); - txLocks().put(txKey, locksArr[i]); } @@ -189,11 +187,8 @@ public void addKey(IgniteTxKey key) { if (txKeysArr != null) { txKeys = U.newHashSet(txKeysArr.length); - for (IgniteTxKey txKey : txKeysArr) { - txKey.key().finishUnmarshal(ctx.cacheObjectContext(txKey.cacheId()), ldr); - + for (IgniteTxKey txKey : txKeysArr) txKeys.add(txKey); - } txKeysArr = null; } From 8e786bf7f0e31bb8d7b238ca036920b8a5f6ab7b Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 20:15:04 +0300 Subject: [PATCH 31/56] WIP --- .../dht/atomic/GridNearAtomicSingleUpdateFilterRequest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateFilterRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateFilterRequest.java index 4f8fff65142be..c5941eee9a9d0 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateFilterRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateFilterRequest.java @@ -24,7 +24,6 @@ import org.apache.ignite.internal.Order; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.CacheEntryPredicate; -import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheOperation; import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.util.typedef.internal.S; From 23282871b221803ec0bbf97bfdbb28d863f78c47 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 20:21:33 +0300 Subject: [PATCH 32/56] WIP --- .../cache/distributed/GridDistributedTxPrepareRequest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxPrepareRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxPrepareRequest.java index ce60de12e771a..10ff9af976149 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxPrepareRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxPrepareRequest.java @@ -26,7 +26,6 @@ import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteLogger; import org.apache.ignite.internal.Order; -import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.processors.cache.transactions.IgniteInternalTx; import org.apache.ignite.internal.processors.cache.transactions.IgniteTxEntry; From 9eb1fcf332d4eea6f58310a15c12ef6f96fee86b Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 22:45:09 +0300 Subject: [PATCH 33/56] WIP --- .../internal/MessageSerializerGenerator.java | 4 +- .../internal/direct/DirectMessageReader.java | 14 +- .../direct/stream/DirectByteBufferStream.java | 188 ++++++++++-------- .../communication/MessageReader.java | 7 +- .../direct/DirectMarshallingMessagesTest.java | 2 +- .../AbstractMessageSerializationTest.java | 2 +- .../communication/CompressedMessageTest.java | 2 +- 7 files changed, 127 insertions(+), 92 deletions(-) diff --git a/modules/codegen/src/main/java/org/apache/ignite/internal/MessageSerializerGenerator.java b/modules/codegen/src/main/java/org/apache/ignite/internal/MessageSerializerGenerator.java index 0e330f4dacfde..d147a23cd608e 100644 --- a/modules/codegen/src/main/java/org/apache/ignite/internal/MessageSerializerGenerator.java +++ b/modules/codegen/src/main/java/org/apache/ignite/internal/MessageSerializerGenerator.java @@ -694,9 +694,9 @@ else if (assignableFrom(type, type(MESSAGE_INTERFACE))) { throw new IllegalArgumentException(COMPRESSED_MSG_ERROR); if (compress) - returnFalseIfReadFailed(field, "reader.readMessage", "true"); + returnFalseIfReadFailed(field, "reader.readMessage", "msg", "true"); else - returnFalseIfReadFailed(field, "reader.readMessage"); + returnFalseIfReadFailed(field, "reader.readMessage", "msg"); } else if (assignableFrom(erasedType(type), type(Collection.class.getName()))) { diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageReader.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageReader.java index 71cd6723f933a..d05dfc7067787 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageReader.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectMessageReader.java @@ -332,7 +332,7 @@ public ByteBuffer getBuffer() { } /** {@inheritDoc} */ - @Nullable @Override public T readMessage(boolean compress) { + @Nullable @Override public T readMessage(Message encMsg, boolean compress) { DirectByteBufferStream stream = state.item().stream; T msg; @@ -340,10 +340,11 @@ public ByteBuffer getBuffer() { if (compress) msg = readCompressedMessageAndDeserialize( stream, - tmpReader -> tmpReader.state.item().stream.readMessage(tmpReader) + tmpReader -> tmpReader.state.item().stream.readMessage(encMsg, tmpReader), + encMsg ); else { - msg = stream.readMessage(this); + msg = stream.readMessage(encMsg, this); lastRead = stream.lastFinished(); } @@ -415,7 +416,8 @@ public ByteBuffer getBuffer() { if (compress) map = readCompressedMessageAndDeserialize( stream, - tmpReader -> tmpReader.state.item().stream.readMap(type, msg, tmpReader) + tmpReader -> tmpReader.state.item().stream.readMap(type, msg, tmpReader), + msg ); else { map = stream.readMap(type, msg, this); @@ -469,8 +471,8 @@ public ByteBuffer getBuffer() { } /** @return Deserialized object. */ - private T readCompressedMessageAndDeserialize(DirectByteBufferStream stream, Function fun) { - Message msg = stream.readMessage(this); + private T readCompressedMessageAndDeserialize(DirectByteBufferStream stream, Function fun, Message encMsg) { + Message msg = stream.readMessage(encMsg, this); lastRead = stream.lastFinished(); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java index 74bdf561e60a9..148da7825ecaf 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java @@ -96,7 +96,7 @@ public class DirectByteBufferStream { private static final boolean[] BOOLEAN_ARR_EMPTY = new boolean[0]; /** */ - private static final ThreadLocal cotx = new ThreadLocal<>(); + private static final ThreadLocal> coCtxs = new ThreadLocal<>(); /** */ private static final ArrayCreator BYTE_ARR_CREATOR = new ArrayCreator() { @@ -851,11 +851,11 @@ public void writeCacheObject(Message msg, CacheObject obj) { cacheObjState++; case 1: - setContext(msg); + CacheObjectContext ctx = setContext(msg); writeByteArray(obj.valueBytes(context())); - removeContext(msg); + removeContext(ctx); if (!lastFinished) return; @@ -887,11 +887,11 @@ public void writeKeyCacheObject(Message msg, KeyCacheObject keyObj) { cacheObjState++; case 1: - setContext(msg); + CacheObjectContext ctx = setContext(msg); writeByteArray(keyObj.valueBytes(context())); - removeContext(msg); + removeContext(ctx); if (!lastFinished) return; @@ -931,9 +931,13 @@ public void writeGridLongList(@Nullable GridLongList val) { */ public void writeMessage(Message msg, MessageWriter writer) { if (msg != null) { - if (buf.hasRemaining()) + if (buf.hasRemaining()) { + CacheObjectContext ctx = setContext(msg); + nestedWrite(writer, () -> msgFactory.serializer(msg.directType()).writeTo(msg, writer)); - else + + removeContext(ctx); + }else lastFinished = false; } else @@ -1509,11 +1513,11 @@ public KeyCacheObject readKeyCacheObject(Message msg) { } try { - setContext(msg); + CacheObjectContext ctx = setContext(msg); KeyCacheObject key = cacheObjProc.toKeyCacheObject(context(), cacheObjType, cacheObjArr); - removeContext(msg); + removeContext(ctx); if (keyCacheObjPart != -1) key.partition(keyCacheObjPart); @@ -1547,11 +1551,11 @@ public CacheObject readCacheObject(Message msg) { cacheObjState = 0; } - setContext(msg); + CacheObjectContext ctx = setContext(msg); CacheObject res = cacheObjProc.toCacheObject(context(), cacheObjType, cacheObjArr); - removeContext(msg); + removeContext(ctx); return res; } @@ -1567,9 +1571,10 @@ public GridLongList readGridLongList() { /** * @param reader Reader. + * @param encMsg Message. * @return Message. */ - public T readMessage(MessageReader reader) { + public T readMessage(Message encMsg, MessageReader reader) { if (!msgTypeDone) { if (buf.remaining() < Message.DIRECT_TYPE_SIZE) { lastFinished = false; @@ -1588,7 +1593,11 @@ public T readMessage(MessageReader reader) { try { reader.beforeNestedRead(); + CacheObjectContext ctx = setContext(encMsg); + lastFinished = msgFactory.serializer(msg.directType()).readFrom(msg, reader); + + removeContext(ctx); } finally { reader.afterNestedRead(lastFinished); @@ -2007,6 +2016,8 @@ T readArrayLE(ArrayCreator creator, int typeSize, int lenShift, long off) * @param writer Writer. */ protected void write(MessageType type, Message msg, Object val, MessageWriter writer) { + CacheObjectContext ctx = setContext(msg); + switch (type.type()) { case BYTE: writeByte((Byte)val); @@ -2151,6 +2162,8 @@ protected void write(MessageType type, Message msg, Object val, MessageWr default: throw new IllegalArgumentException("Unknown type: " + type); } + + removeContext(ctx); } /** Performs a nested write with proper writer state enter/exit handling. */ @@ -2171,93 +2184,100 @@ private void nestedWrite(MessageWriter writer, BooleanSupplier s) { * @return Value. */ protected Object read(MessageType type, Message msg, MessageReader reader) { - switch (type.type()) { - case BYTE: - return readByte(); + CacheObjectContext ctx = setContext(msg); + + try { + switch (type.type()) { + case BYTE: + return readByte(); - case SHORT: - return readShort(); + case SHORT: + return readShort(); - case INT: - return readInt(); + case INT: + return readInt(); - case LONG: - return readLong(); + case LONG: + return readLong(); - case FLOAT: - return readFloat(); + case FLOAT: + return readFloat(); - case DOUBLE: - return readDouble(); + case DOUBLE: + return readDouble(); - case CHAR: - return readChar(); + case CHAR: + return readChar(); - case BOOLEAN: - return readBoolean(); + case BOOLEAN: + return readBoolean(); - case BYTE_ARR: - return readByteArray(); + case BYTE_ARR: + return readByteArray(); - case SHORT_ARR: - return readShortArray(); + case SHORT_ARR: + return readShortArray(); - case INT_ARR: - return readIntArray(); + case INT_ARR: + return readIntArray(); - case LONG_ARR: - return readLongArray(); + case LONG_ARR: + return readLongArray(); - case FLOAT_ARR: - return readFloatArray(); + case FLOAT_ARR: + return readFloatArray(); - case DOUBLE_ARR: - return readDoubleArray(); + case DOUBLE_ARR: + return readDoubleArray(); - case CHAR_ARR: - return readCharArray(); + case CHAR_ARR: + return readCharArray(); - case BOOLEAN_ARR: - return readBooleanArray(); + case BOOLEAN_ARR: + return readBooleanArray(); - case STRING: - return readString(); + case STRING: + return readString(); - case BIT_SET: - return readBitSet(); + case BIT_SET: + return readBitSet(); - case UUID: - return readUuid(); + case UUID: + return readUuid(); - case IGNITE_UUID: - return readIgniteUuid(); + case IGNITE_UUID: + return readIgniteUuid(); - case AFFINITY_TOPOLOGY_VERSION: - return readAffinityTopologyVersion(); + case AFFINITY_TOPOLOGY_VERSION: + return readAffinityTopologyVersion(); - case KEY_CACHE_OBJECT: - return readKeyCacheObject(msg); + case KEY_CACHE_OBJECT: + return readKeyCacheObject(msg); - case CACHE_OBJECT: - return readCacheObject(msg); + case CACHE_OBJECT: + return readCacheObject(msg); - case GRID_LONG_LIST: - return readGridLongList(); + case GRID_LONG_LIST: + return readGridLongList(); - case MAP: - return nestedRead(reader, () -> reader.readMap((MessageMapType)type, msg)); + case MAP: + return nestedRead(reader, () -> reader.readMap((MessageMapType)type, msg)); - case COLLECTION: - return nestedRead(reader, () -> reader.readCollection((MessageCollectionType)type, msg)); + case COLLECTION: + return nestedRead(reader, () -> reader.readCollection((MessageCollectionType)type, msg)); - case ARRAY: - return nestedRead(reader, () -> reader.readObjectArray((MessageArrayType)type, msg)); + case ARRAY: + return nestedRead(reader, () -> reader.readObjectArray((MessageArrayType)type, msg)); - case MSG: - return readMessage(reader); + case MSG: + return readMessage(msg, reader); - default: - throw new IllegalArgumentException("Unknown type: " + type); + default: + throw new IllegalArgumentException("Unknown type: " + type); + } + } + finally { + removeContext(ctx); } } @@ -2322,7 +2342,7 @@ private void readUuidRaw() { } /** */ - private void setContext(Message msg) { + private CacheObjectContext setContext(Message msg) { GridCacheContext gcctx = null; if (msg instanceof GridCacheIdMessage) @@ -2331,19 +2351,31 @@ private void setContext(Message msg) { if (msg instanceof GridCacheGroupIdMessage) gcctx = ctx.cache().context().cacheContext(((GridCacheGroupIdMessage)msg).grpId); - if (gcctx != null) - cotx.set(gcctx.cacheObjectContext()); + if (gcctx != null) { + if (coCtxs.get() == null) + coCtxs.set(new ArrayList<>()); + + CacheObjectContext coCtx = gcctx.cacheObjectContext(); + + coCtxs.get().add(coCtx); + + return coCtx; + } + + return null; } /** */ - private void removeContext(Message msg) { - if (msg instanceof GridCacheIdMessage | msg instanceof GridCacheGroupIdMessage) - cotx.remove(); + private void removeContext(CacheObjectContext coCtx) { + if (coCtx != null) + coCtxs.get().remove(coCtx); } /** */ private CacheObjectContext context() { - return cotx.get(); + List list = coCtxs.get(); + + return list.get(list.size() - 1); } /** {@inheritDoc} */ diff --git a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java index 704f94befc49a..99582f47e705c 100644 --- a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java +++ b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java @@ -193,12 +193,13 @@ public default void setBuffer(ByteBuffer buf) { /** * Reads nested message. + * @param encMsg Message. * * @param Type of the message. * @return Message. */ - public default T readMessage() { - return readMessage(false); + public default T readMessage(Message encMsg) { + return readMessage(encMsg, false); } /** @@ -208,7 +209,7 @@ public default T readMessage() { * @param Type of the message. * @return Message. */ - public T readMessage(boolean compress); + public T readMessage(Message encMsg, boolean compress); /** * Reads {@link CacheObject}. diff --git a/modules/core/src/test/java/org/apache/ignite/internal/direct/DirectMarshallingMessagesTest.java b/modules/core/src/test/java/org/apache/ignite/internal/direct/DirectMarshallingMessagesTest.java index ba163f738eca5..0ec81af6cde37 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/direct/DirectMarshallingMessagesTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/direct/DirectMarshallingMessagesTest.java @@ -128,7 +128,7 @@ private T doMarshalUnmarshalChunked(T srcMsg) { reader.setBuffer(chunk); - resMsg = reader.readMessage(false); + resMsg = reader.readMessage(srcMsg, false); pos += chunk.position(); } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/AbstractMessageSerializationTest.java b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/AbstractMessageSerializationTest.java index b3714f37b7733..ac9df8b7aa0b7 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/AbstractMessageSerializationTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/AbstractMessageSerializationTest.java @@ -522,7 +522,7 @@ private void readField(Class type) { } /** {@inheritDoc} */ - @Override public T readMessage(boolean compress) { + @Override public T readMessage(Message encMsg, boolean compress) { readField(Message.class); return null; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/CompressedMessageTest.java b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/CompressedMessageTest.java index 4d05b5dde71ca..7716517772962 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/CompressedMessageTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/CompressedMessageTest.java @@ -98,7 +98,7 @@ public void testWriteReadHugeMessage() { reader.setBuffer(msgBuf); - Message readMsg = reader.readMessage(true); + Message readMsg = reader.readMessage(fullMsg, true); assertTrue(readMsg instanceof GridDhtPartitionsFullMessage); From 59c5cae97fc94709eedb3a1ba5a17d236ddf65b6 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 23:00:53 +0300 Subject: [PATCH 34/56] WIP --- .../ignite/internal/direct/stream/DirectByteBufferStream.java | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java index 148da7825ecaf..d623bfed26354 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java @@ -983,6 +983,7 @@ public void writeObjectArray(T[] arr, MessageArrayType type, Message msg, Me /** * @param col Collection. * @param type Type. + * @param msg Message. * @param writer Writer. */ public void writeCollection(Collection col, MessageCollectionType type, Message msg, MessageWriter writer) { From bb34106046ef0f2186b07b58a89e25fb2bd5a14b Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 23:02:04 +0300 Subject: [PATCH 35/56] WIP --- .../internal/direct/stream/DirectByteBufferStream.java | 7 ++++--- .../plugin/extensions/communication/MessageReader.java | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java index d623bfed26354..b9bc6f9d6e880 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java @@ -933,11 +933,12 @@ public void writeMessage(Message msg, MessageWriter writer) { if (msg != null) { if (buf.hasRemaining()) { CacheObjectContext ctx = setContext(msg); - + nestedWrite(writer, () -> msgFactory.serializer(msg.directType()).writeTo(msg, writer)); - + removeContext(ctx); - }else + } + else lastFinished = false; } else diff --git a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java index 99582f47e705c..a47cbc6e69e49 100644 --- a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java +++ b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java @@ -205,6 +205,7 @@ public default T readMessage(Message encMsg) { /** * Reads nested message. * + * @param encMsg Message. * @param compress Whether message should be decompressed. * @param Type of the message. * @return Message. From 65506d74bda0ece5accbd5be88bf2fd65712a522 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 23:35:33 +0300 Subject: [PATCH 36/56] WIP --- .../cache/distributed/dht/GridDhtCacheAdapter.java | 4 ++-- .../cache/distributed/near/CacheVersionedValue.java | 11 +++++++++-- .../distributed/near/GridNearTxPrepareResponse.java | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java index 7277db3ccd698..082977d06c096 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java @@ -1214,9 +1214,9 @@ protected void processNearSingleGetRequest(final UUID nodeId, final GridNearSing res0 = info; } else if (req.needVersion()) - res0 = new CacheVersionedValue(info.value(), info.version()); + res0 = new CacheVersionedValue(info.value(), info.version(), req.cacheId); else - res0 = new CacheVersionedValue(info.value(), null); + res0 = new CacheVersionedValue(info.value(), null, req.cacheId); } res = new GridNearSingleGetResponse( diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/CacheVersionedValue.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/CacheVersionedValue.java index 969c803f0521e..e71b310aefcb2 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/CacheVersionedValue.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/CacheVersionedValue.java @@ -19,6 +19,7 @@ import org.apache.ignite.internal.Order; import org.apache.ignite.internal.processors.cache.CacheObject; +import org.apache.ignite.internal.processors.cache.GridCacheIdMessage; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.internal.S; @@ -27,7 +28,7 @@ /** * Cache object and version. */ -public class CacheVersionedValue implements Message { +public class CacheVersionedValue extends GridCacheIdMessage implements Message { /** Value. */ @Order(0) @GridToStringInclude @@ -47,9 +48,10 @@ public CacheVersionedValue() { * @param val Cache value. * @param ver Cache version. */ - public CacheVersionedValue(CacheObject val, GridCacheVersion ver) { + public CacheVersionedValue(CacheObject val, GridCacheVersion ver, int cacheId) { this.val = val; this.ver = ver; + this.cacheId = cacheId; } /** @@ -66,6 +68,11 @@ public CacheObject value() { return val; } + /** {@inheritDoc} */ + @Override public boolean addDeploymentInfo() { + return false; + } + /** {@inheritDoc} */ @Override public String toString() { return S.toString(CacheVersionedValue.class, this); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareResponse.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareResponse.java index d1325580b2759..067275a21124b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareResponse.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareResponse.java @@ -196,7 +196,7 @@ public void addOwnedValue(IgniteTxKey key, GridCacheVersion ver, CacheObject val if (ownedVals == null) ownedVals = new HashMap<>(); - CacheVersionedValue oVal = new CacheVersionedValue(val, ver); + CacheVersionedValue oVal = new CacheVersionedValue(val, ver, key.cacheId); ownedVals.put(key, oVal); } From ab1ab7014cfd0856194344b397fe5542630f5087 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 2 Apr 2026 23:54:57 +0300 Subject: [PATCH 37/56] WIP --- .../processors/datastreamer/DataStreamerRequest.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerRequest.java index 750c748b2ac60..a56fb8ccae11c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerRequest.java @@ -23,6 +23,8 @@ import org.apache.ignite.configuration.DeploymentMode; import org.apache.ignite.internal.Order; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; +import org.apache.ignite.internal.processors.cache.GridCacheIdMessage; +import org.apache.ignite.internal.processors.cache.GridCacheUtils; import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.lang.IgniteUuid; @@ -33,7 +35,7 @@ /** * */ -public class DataStreamerRequest implements Message { +public class DataStreamerRequest extends GridCacheIdMessage implements Message { /** */ @Order(0) long reqId; @@ -162,6 +164,8 @@ public DataStreamerRequest( this.forceLocDep = forceLocDep; this.topVer = topVer; this.partId = partId; + + cacheId = GridCacheUtils.cacheId(cacheName); } /** @@ -269,6 +273,11 @@ public AffinityTopologyVersion topologyVersion() { return topVer; } + /** {@inheritDoc} */ + @Override public boolean addDeploymentInfo() { + return false; + } + /** * @return Partition ID. */ From 1a8c9cafcf901d3c23f8903ea6de37e6d336995a Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 3 Apr 2026 00:04:13 +0300 Subject: [PATCH 38/56] WIP --- .../processors/cache/GridCacheReturn.java | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java index 6df0c9d4571b5..208e171225abb 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java @@ -37,7 +37,7 @@ /** * Return value for cases where both, value and success flag need to be returned. */ -public class GridCacheReturn implements Message { +public class GridCacheReturn extends GridCacheIdMessage { /** Value. */ @GridToStringInclude(sensitive = true) private volatile Object v; @@ -61,10 +61,6 @@ public class GridCacheReturn implements Message { /** Local result flag, if non local then do not need unwrap cache objects. */ private boolean loc; - /** Cache Id. */ - @Order(4) - int cacheId; - /** * Empty constructor. */ @@ -285,13 +281,6 @@ else if (err instanceof UnregisteredBinaryTypeException) } } - /** - * @return Cache ID. - */ - public int cacheId() { - return cacheId; - } - /** * @param other Other result to merge with. */ @@ -362,6 +351,10 @@ public void finishUnmarshal(GridCacheContext ctx, ClassLoader ldr) throws Ignite } } + /** {@inheritDoc} */ + @Override public boolean addDeploymentInfo() { + return false; + } /** {@inheritDoc} */ @Override public String toString() { From 16e1480e917de46a0c37778168897d67d9fecd92 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 3 Apr 2026 00:12:15 +0300 Subject: [PATCH 39/56] WIP --- .../apache/ignite/internal/processors/cache/GridCacheReturn.java | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java index 208e171225abb..86a64fe6ea370 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java @@ -31,7 +31,6 @@ import org.apache.ignite.internal.util.typedef.internal.CU; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.plugin.extensions.communication.Message; import org.jetbrains.annotations.Nullable; /** From 0bf241803d338bbe45eb1c6dd3e6366fd16c82c7 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 3 Apr 2026 13:32:04 +0300 Subject: [PATCH 40/56] WIP --- .../org/apache/ignite/internal/binary/BinaryObjectImpl.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java index 50e85ff230899..426fa03841e55 100644 --- a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java +++ b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java @@ -193,6 +193,9 @@ public BinaryObjectImpl(BinaryContext ctx, byte[] arr, int start) { /** {@inheritDoc} */ @Override public byte[] valueBytes(CacheObjectValueContext ctx) throws IgniteCheckedException { + if (valBytes == null) + valBytes = valueBytesFromArray(ctx); + return valBytes; } From f01777a0a944338d4f324fe7cfeab27cd32e0463 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 3 Apr 2026 13:46:13 +0300 Subject: [PATCH 41/56] WIP --- .../processors/cache/GridCacheEntryInfo.java | 27 +++++++------------ 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryInfo.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryInfo.java index ac794d417792c..96c57d4cf9462 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryInfo.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryInfo.java @@ -23,12 +23,11 @@ import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.plugin.extensions.communication.Message; /** * Entry information that gets passed over wire. */ -public class GridCacheEntryInfo implements Message { +public class GridCacheEntryInfo extends GridCacheIdMessage { /** */ private static final int SIZE_OVERHEAD = 3 * 8 /* reference */ + 4 /* int */ + 2 * 8 /* long */ + 32 /* version */; @@ -37,24 +36,20 @@ public class GridCacheEntryInfo implements Message { @GridToStringInclude KeyCacheObject key; - /** Cache ID. */ - @Order(1) - int cacheId; - /** Cache value. */ - @Order(2) + @Order(1) CacheObject val; /** Time to live. */ - @Order(3) + @Order(2) long ttl; /** Expiration time. */ - @Order(4) + @Order(3) long expireTime; /** Entry version. */ - @Order(5) + @Order(4) GridCacheVersion ver; /** New flag. */ @@ -63,13 +58,6 @@ public class GridCacheEntryInfo implements Message { /** Deleted flag. */ private boolean deleted; - /** - * @return Cache ID. - */ - public int cacheId() { - return cacheId; - } - /** * @param cacheId Cache ID. */ @@ -244,6 +232,11 @@ public void unmarshal(CacheObjectContext ctx, ClassLoader clsLdr) throws IgniteC expireTime = 0; } + /** {@inheritDoc} */ + @Override public boolean addDeploymentInfo() { + return false; + } + /** {@inheritDoc} */ @Override public String toString() { return S.toString(GridCacheEntryInfo.class, this); From 9a22400b11ce15d162053bd9a22f33efa1b5fcd9 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 3 Apr 2026 17:14:40 +0300 Subject: [PATCH 42/56] WIP --- .../query/calcite/message/QueryTxEntry.java | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/QueryTxEntry.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/QueryTxEntry.java index 7961f589d83ef..56612e06d469e 100644 --- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/QueryTxEntry.java +++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/QueryTxEntry.java @@ -25,6 +25,7 @@ import org.apache.ignite.internal.Order; import org.apache.ignite.internal.processors.cache.CacheObject; import org.apache.ignite.internal.processors.cache.CacheObjectContext; +import org.apache.ignite.internal.processors.cache.GridCacheIdMessage; import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; @@ -38,21 +39,17 @@ * @see ExecutionContext#transactionChanges(int, int[], Function, Comparator) * @see QueryStartRequest#queryTransactionEntries() */ -public class QueryTxEntry implements CalciteMessage { - /** Cache id. */ - @Order(0) - int cacheId; - +public class QueryTxEntry extends GridCacheIdMessage implements CalciteMessage { /** Entry key. */ - @Order(1) + @Order(0) KeyCacheObject key; /** Entry value. */ - @Order(2) + @Order(1) CacheObject val; /** Entry version. */ - @Order(3) + @Order(2) GridCacheVersion ver; /** @@ -75,11 +72,6 @@ public QueryTxEntry(int cacheId, KeyCacheObject key, CacheObject val, GridCacheV this.ver = ver; } - /** @return Cache id. */ - public int cacheId() { - return cacheId; - } - /** @return Entry key. */ public KeyCacheObject key() { return key; @@ -95,6 +87,11 @@ public GridCacheVersion version() { return ver; } + /** {@inheritDoc} */ + @Override public boolean addDeploymentInfo() { + return false; + } + /** */ public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { CacheObjectContext coctx = ctx.cacheContext(cacheId).cacheObjectContext(); From a3e5f233957f04e47b682c0cd815cd7fe384ca60 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 3 Apr 2026 17:23:23 +0300 Subject: [PATCH 43/56] WIP --- .../continuous/CacheContinuousQueryEntry.java | 34 +++++++++++++++++++ .../CacheContinuousQueryHandler.java | 11 +++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryEntry.java index a686f3ccec7a6..d8dceadd18eb1 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryEntry.java @@ -23,6 +23,7 @@ import org.apache.ignite.internal.managers.deployment.GridDeploymentInfo; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.CacheObject; +import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheDeployable; import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.util.tostring.GridToStringExclude; @@ -294,6 +295,39 @@ boolean isKeepBinary() { return (flags & KEEP_BINARY) != 0; } + /** + * @param cctx Cache context. + * @throws IgniteCheckedException In case of error. + */ + void prepareMarshal(GridCacheContext cctx) throws IgniteCheckedException { + if (key != null) + key.prepareMarshal(cctx.cacheObjectContext()); + + if (newVal != null) + newVal.prepareMarshal(cctx.cacheObjectContext()); + + if (oldVal != null) + oldVal.prepareMarshal(cctx.cacheObjectContext()); + } + + /** + * @param cctx Cache context. + * @param ldr Class loader. + * @throws IgniteCheckedException In case of error. + */ + void unmarshal(GridCacheContext cctx, @Nullable ClassLoader ldr) throws IgniteCheckedException { + if (!isFiltered()) { + if (key != null) + key.finishUnmarshal(cctx.cacheObjectContext(), ldr); + + if (newVal != null) + newVal.finishUnmarshal(cctx.cacheObjectContext(), ldr); + + if (oldVal != null) + oldVal.finishUnmarshal(cctx.cacheObjectContext(), ldr); + } + } + /** * @return Key. */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java index a5d9757a0c66d..ee131f4db3ebb 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java @@ -807,8 +807,13 @@ protected CacheEntryEventFilter getEventFilter0() { */ private void prepareEntry(GridCacheContext cctx, UUID nodeId, CacheContinuousQueryEntry entry) throws IgniteCheckedException { - if (cctx.kernalContext().config().isPeerClassLoadingEnabled() && cctx.discovery().node(nodeId) != null) + if (cctx.kernalContext().config().isPeerClassLoadingEnabled() && cctx.discovery().node(nodeId) != null) { + entry.prepareMarshal(cctx); + cctx.deploy().prepare(entry); + } + else + entry.prepareMarshal(cctx); } /** @@ -929,6 +934,8 @@ private void notifyCallback0(UUID nodeId, for (CacheContinuousQueryEntry e : entries) { GridCacheDeploymentManager depMgr = cctx.deploy(); + ClassLoader ldr = depMgr.globalLoader(); + try { if (ctx.config().isPeerClassLoadingEnabled()) { GridDeploymentInfo depInfo = e.deployInfo(); @@ -944,6 +951,8 @@ private void notifyCallback0(UUID nodeId, } } + e.unmarshal(cctx, ldr); + Collection> evts = handleEvent(ctx, e); if (evts != null && !evts.isEmpty()) From 1af053903a48e41593be910da619551aace461d3 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 3 Apr 2026 18:31:39 +0300 Subject: [PATCH 44/56] WIP --- .../direct/stream/DirectByteBufferStream.java | 20 +++++++++++++---- .../SkipCacheObjectsMarshallingMessage.java | 22 +++++++++++++++++++ .../h2/twostep/msg/GridH2ValueMessage.java | 3 ++- 3 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/SkipCacheObjectsMarshallingMessage.java diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java index b9bc6f9d6e880..4c474972b55c4 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java @@ -56,6 +56,7 @@ import org.apache.ignite.plugin.extensions.communication.MessageReader; import org.apache.ignite.plugin.extensions.communication.MessageType; import org.apache.ignite.plugin.extensions.communication.MessageWriter; +import org.apache.ignite.plugin.extensions.communication.SkipCacheObjectsMarshallingMessage; import org.jetbrains.annotations.Nullable; import static org.apache.ignite.internal.util.GridUnsafe.BIG_ENDIAN; @@ -97,6 +98,10 @@ public class DirectByteBufferStream { /** */ private static final ThreadLocal> coCtxs = new ThreadLocal<>(); + + /** */ + private static final CacheObjectContext NULL_CACHE_CTX = + new CacheObjectContext(null, null, null,false,false, false, false); /** */ private static final ArrayCreator BYTE_ARR_CREATOR = new ArrayCreator() { @@ -2352,13 +2357,15 @@ private CacheObjectContext setContext(Message msg) { if (msg instanceof GridCacheGroupIdMessage) gcctx = ctx.cache().context().cacheContext(((GridCacheGroupIdMessage)msg).grpId); + + boolean skipMarsh = msg instanceof SkipCacheObjectsMarshallingMessage; - if (gcctx != null) { + if (gcctx != null || skipMarsh) { if (coCtxs.get() == null) coCtxs.set(new ArrayList<>()); - CacheObjectContext coCtx = gcctx.cacheObjectContext(); - + CacheObjectContext coCtx = skipMarsh ? NULL_CACHE_CTX : gcctx.cacheObjectContext(); + coCtxs.get().add(coCtx); return coCtx; @@ -2377,7 +2384,12 @@ private void removeContext(CacheObjectContext coCtx) { private CacheObjectContext context() { List list = coCtxs.get(); - return list.get(list.size() - 1); + CacheObjectContext cand = list.get(list.size() - 1); + + if (cand == NULL_CACHE_CTX) + return null; + + return cand; } /** {@inheritDoc} */ diff --git a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/SkipCacheObjectsMarshallingMessage.java b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/SkipCacheObjectsMarshallingMessage.java new file mode 100644 index 0000000000000..cb8c2c55b2d93 --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/SkipCacheObjectsMarshallingMessage.java @@ -0,0 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ignite.plugin.extensions.communication; + +/** */ +public interface SkipCacheObjectsMarshallingMessage { +} diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/msg/GridH2ValueMessage.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/msg/GridH2ValueMessage.java index c24857ef13a17..53f37f846b165 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/msg/GridH2ValueMessage.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/msg/GridH2ValueMessage.java @@ -20,12 +20,13 @@ import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.GridKernalContext; import org.apache.ignite.plugin.extensions.communication.Message; +import org.apache.ignite.plugin.extensions.communication.SkipCacheObjectsMarshallingMessage; import org.h2.value.Value; /** * Abstract message wrapper for H2 values. */ -public abstract class GridH2ValueMessage implements Message { +public abstract class GridH2ValueMessage implements Message, SkipCacheObjectsMarshallingMessage { /** * Gets H2 value. * From 6d9ba66ed2c5aabe63780b20eba92fbfc9047151 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 3 Apr 2026 18:40:54 +0300 Subject: [PATCH 45/56] WIP --- .../internal/direct/stream/DirectByteBufferStream.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java index 4c474972b55c4..3e0e389a020b5 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java @@ -100,8 +100,8 @@ public class DirectByteBufferStream { private static final ThreadLocal> coCtxs = new ThreadLocal<>(); /** */ - private static final CacheObjectContext NULL_CACHE_CTX = - new CacheObjectContext(null, null, null,false,false, false, false); + private static final CacheObjectContext NULL_CACHE_CTX = + new CacheObjectContext(null, null, null, false, false, false, false); /** */ private static final ArrayCreator BYTE_ARR_CREATOR = new ArrayCreator() { @@ -2367,7 +2367,7 @@ private CacheObjectContext setContext(Message msg) { CacheObjectContext coCtx = skipMarsh ? NULL_CACHE_CTX : gcctx.cacheObjectContext(); coCtxs.get().add(coCtx); - + return coCtx; } From 9341fd207c201425552a01cfb65bae3d726e394f Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 3 Apr 2026 18:45:02 +0300 Subject: [PATCH 46/56] WIP --- .../ignite/internal/direct/stream/DirectByteBufferStream.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java index 3e0e389a020b5..75a846a8d8c76 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java @@ -2384,8 +2384,8 @@ private void removeContext(CacheObjectContext coCtx) { private CacheObjectContext context() { List list = coCtxs.get(); - CacheObjectContext cand = list.get(list.size() - 1); - + CacheObjectContext cand = list.get(list.size() - 1); + if (cand == NULL_CACHE_CTX) return null; From 48bd658e185ac13cafda4c050532628ccdde6214 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 3 Apr 2026 21:40:16 +0300 Subject: [PATCH 47/56] WIP --- .../direct/stream/DirectByteBufferStream.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java index 75a846a8d8c76..645b94f8587b8 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java @@ -45,6 +45,7 @@ import org.apache.ignite.internal.util.GridLongList; import org.apache.ignite.internal.util.GridUnsafe; import org.apache.ignite.internal.util.tostring.GridToStringExclude; +import org.apache.ignite.internal.util.typedef.internal.CU; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgniteUuid; @@ -2352,11 +2353,19 @@ private void readUuidRaw() { private CacheObjectContext setContext(Message msg) { GridCacheContext gcctx = null; - if (msg instanceof GridCacheIdMessage) - gcctx = ctx.cache().context().cacheContext(((GridCacheIdMessage)msg).cacheId); + if (msg instanceof GridCacheIdMessage) { + int cacheId = ((GridCacheIdMessage)msg).cacheId(); + + if (cacheId != CU.UNDEFINED_CACHE_ID) + gcctx = ctx.cache().context().cacheContext(cacheId); + } - if (msg instanceof GridCacheGroupIdMessage) - gcctx = ctx.cache().context().cacheContext(((GridCacheGroupIdMessage)msg).grpId); + if (msg instanceof GridCacheGroupIdMessage) { + int groupId = ((GridCacheGroupIdMessage)msg).groupId(); + + if (groupId != CU.UNDEFINED_CACHE_ID) + gcctx = ctx.cache().context().cacheContext(groupId); + } boolean skipMarsh = msg instanceof SkipCacheObjectsMarshallingMessage; From 394f7f2a1c39b8e216b96fcd81dd7e140c06e6e1 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 3 Apr 2026 21:42:43 +0300 Subject: [PATCH 48/56] WIP --- .../ignite/internal/direct/stream/DirectByteBufferStream.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java index 645b94f8587b8..feeff8d8d702d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java @@ -2392,6 +2392,9 @@ private void removeContext(CacheObjectContext coCtx) { /** */ private CacheObjectContext context() { List list = coCtxs.get(); + + if (list.isEmpty()) + return null; CacheObjectContext cand = list.get(list.size() - 1); From 508c4d11053f6a973efc9dcd71e14a79e223c005 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 3 Apr 2026 22:01:00 +0300 Subject: [PATCH 49/56] WIP --- .../org/apache/ignite/internal/binary/BinaryObjectImpl.java | 2 ++ .../ignite/internal/direct/stream/DirectByteBufferStream.java | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java index 426fa03841e55..5c736737f320c 100644 --- a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java +++ b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java @@ -195,6 +195,8 @@ public BinaryObjectImpl(BinaryContext ctx, byte[] arr, int start) { @Override public byte[] valueBytes(CacheObjectValueContext ctx) throws IgniteCheckedException { if (valBytes == null) valBytes = valueBytesFromArray(ctx); + + ctx.waitMetadataWriteIfNeeded(typeId()); return valBytes; } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java index feeff8d8d702d..f283d43db115a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java @@ -2393,8 +2393,8 @@ private void removeContext(CacheObjectContext coCtx) { private CacheObjectContext context() { List list = coCtxs.get(); - if (list.isEmpty()) - return null; +// if (list.isEmpty()) +// return null; CacheObjectContext cand = list.get(list.size() - 1); From 51b2c39a497806fdd22359da5112c39d37c68403 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 3 Apr 2026 22:02:37 +0300 Subject: [PATCH 50/56] WIP --- .../internal/direct/stream/DirectByteBufferStream.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java index f283d43db115a..b0076051128f7 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java @@ -2361,10 +2361,10 @@ private CacheObjectContext setContext(Message msg) { } if (msg instanceof GridCacheGroupIdMessage) { - int groupId = ((GridCacheGroupIdMessage)msg).groupId(); + int grpId = ((GridCacheGroupIdMessage)msg).groupId(); - if (groupId != CU.UNDEFINED_CACHE_ID) - gcctx = ctx.cache().context().cacheContext(groupId); + if (grpId != CU.UNDEFINED_CACHE_ID) + gcctx = ctx.cache().context().cacheContext(grpId); } boolean skipMarsh = msg instanceof SkipCacheObjectsMarshallingMessage; @@ -2393,8 +2393,8 @@ private void removeContext(CacheObjectContext coCtx) { private CacheObjectContext context() { List list = coCtxs.get(); -// if (list.isEmpty()) -// return null; + if (list.isEmpty()) + return null; CacheObjectContext cand = list.get(list.size() - 1); From ac9ce1806034ec0cdb3aef843f8bd9dae8655736 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 3 Apr 2026 22:06:37 +0300 Subject: [PATCH 51/56] WIP --- .../ignite/internal/direct/stream/DirectByteBufferStream.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java index b0076051128f7..798738d16c706 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java @@ -2393,7 +2393,7 @@ private void removeContext(CacheObjectContext coCtx) { private CacheObjectContext context() { List list = coCtxs.get(); - if (list.isEmpty()) + if (list == null || list.isEmpty()) return null; CacheObjectContext cand = list.get(list.size() - 1); From 2d7942627d5b5a285a6fd8adb1c028405b85858f Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 3 Apr 2026 22:52:55 +0300 Subject: [PATCH 52/56] WIP --- .../calcite/message/QueryStartRequest.java | 5 ---- .../query/calcite/message/QueryTxEntry.java | 23 ------------------- .../apache/ignite/internal/TxEntriesInfo.java | 11 --------- 3 files changed, 39 deletions(-) diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/QueryStartRequest.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/QueryStartRequest.java index fe45e12a1c8b1..21c199161017d 100644 --- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/QueryStartRequest.java +++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/QueryStartRequest.java @@ -220,11 +220,6 @@ public long timeout() { params = U.unmarshal(ctx, paramsBytes, ldr); fragmentDesc.prepareUnmarshal(ctx); - - if (qryTxEntries != null) { - for (QueryTxEntry e : qryTxEntries) - e.prepareUnmarshal(ctx, ldr); - } } /** {@inheritDoc} */ diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/QueryTxEntry.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/QueryTxEntry.java index 56612e06d469e..c065b6317f32e 100644 --- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/QueryTxEntry.java +++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/QueryTxEntry.java @@ -20,13 +20,10 @@ import java.util.Collection; import java.util.Comparator; import java.util.function.Function; -import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.configuration.TransactionConfiguration; import org.apache.ignite.internal.Order; import org.apache.ignite.internal.processors.cache.CacheObject; -import org.apache.ignite.internal.processors.cache.CacheObjectContext; import org.apache.ignite.internal.processors.cache.GridCacheIdMessage; -import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; import org.apache.ignite.internal.processors.query.calcite.exec.ExecutionContext; @@ -92,26 +89,6 @@ public GridCacheVersion version() { return false; } - /** */ - public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { - CacheObjectContext coctx = ctx.cacheContext(cacheId).cacheObjectContext(); - - key.prepareMarshal(coctx); - - if (val != null) - val.prepareMarshal(coctx); - } - - /** */ - public void prepareUnmarshal(GridCacheSharedContext ctx, ClassLoader ldr) throws IgniteCheckedException { - CacheObjectContext coctx = ctx.cacheContext(cacheId).cacheObjectContext(); - - key.finishUnmarshal(coctx, ldr); - - if (val != null) - val.finishUnmarshal(coctx, ldr); - } - /** {@inheritDoc} */ @Override public MessageType type() { return MessageType.QUERY_TX_ENTRY; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/TxEntriesInfo.java b/modules/core/src/main/java/org/apache/ignite/internal/TxEntriesInfo.java index 150c8719d306a..10b8bfa9f2861 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/TxEntriesInfo.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/TxEntriesInfo.java @@ -20,7 +20,6 @@ import java.util.Collection; import java.util.HashSet; import java.util.Objects; -import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.managers.communication.GridIoMessageFactory; import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheMapEntry; @@ -66,16 +65,6 @@ public TxEntriesInfo() { return; } - try { - for (KeyCacheObject key : keys) - key.finishUnmarshal(cctx.cacheObjectContext(), null); - } - catch (IgniteCheckedException e) { - ctx.cluster().diagnosticLog().error("Failed to unmarshal key: " + e, e); - - sb.append("Failed to unmarshal key: ").append(e).append(U.nl()); - } - sb.append("Cache entries [cacheId=").append(cacheId) .append(", cacheName=").append(cctx.name()).append("]: "); From ba270ea70e2450421d191948bcb6bf01fbec0a54 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Sat, 4 Apr 2026 00:09:45 +0300 Subject: [PATCH 53/56] WIP --- .../direct/stream/DirectByteBufferStream.java | 45 ++++++++++--------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java index 798738d16c706..fff663fce0eec 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java @@ -367,6 +367,9 @@ public class DirectByteBufferStream { /** */ final GridKernalContext ctx; + /** */ + private final CacheObjectContext fakeCacheObjectCtx; + /** * Constructror for stream used for reading messages. * @@ -377,6 +380,8 @@ public DirectByteBufferStream(MessageFactory msgFactory, IgniteCacheObjectProces this.msgFactory = msgFactory; this.cacheObjProc = cacheObjProc; this.ctx = ctx; + + fakeCacheObjectCtx = new CacheObjectContext(ctx, null, null, false, false, false, false); } /** @@ -2351,31 +2356,21 @@ private void readUuidRaw() { /** */ private CacheObjectContext setContext(Message msg) { - GridCacheContext gcctx = null; + CacheObjectContext coCtx = null; - if (msg instanceof GridCacheIdMessage) { - int cacheId = ((GridCacheIdMessage)msg).cacheId(); - - if (cacheId != CU.UNDEFINED_CACHE_ID) - gcctx = ctx.cache().context().cacheContext(cacheId); - } + if (msg instanceof GridCacheIdMessage) + coCtx = resolveContext(((GridCacheIdMessage)msg).cacheId()); - if (msg instanceof GridCacheGroupIdMessage) { - int grpId = ((GridCacheGroupIdMessage)msg).groupId(); + if (msg instanceof GridCacheGroupIdMessage) + coCtx = resolveContext(((GridCacheGroupIdMessage)msg).groupId()); - if (grpId != CU.UNDEFINED_CACHE_ID) - gcctx = ctx.cache().context().cacheContext(grpId); - } - boolean skipMarsh = msg instanceof SkipCacheObjectsMarshallingMessage; - if (gcctx != null || skipMarsh) { + if (coCtx != null || skipMarsh) { if (coCtxs.get() == null) coCtxs.set(new ArrayList<>()); - CacheObjectContext coCtx = skipMarsh ? NULL_CACHE_CTX : gcctx.cacheObjectContext(); - - coCtxs.get().add(coCtx); + coCtxs.get().add(skipMarsh ? NULL_CACHE_CTX : coCtx); return coCtx; } @@ -2383,6 +2378,19 @@ private CacheObjectContext setContext(Message msg) { return null; } + private CacheObjectContext resolveContext(int cacheId) { + if (cacheId != CU.UNDEFINED_CACHE_ID) { + GridCacheContext gcCtx = ctx.cache().context().cacheContext(cacheId); + + if (gcCtx == null) + return fakeCacheObjectCtx; // Cache was removed. Avoiding failure. Should be handled by message handler. + else + return gcCtx.cacheObjectContext(); + } + else + return null; + } + /** */ private void removeContext(CacheObjectContext coCtx) { if (coCtx != null) @@ -2392,9 +2400,6 @@ private void removeContext(CacheObjectContext coCtx) { /** */ private CacheObjectContext context() { List list = coCtxs.get(); - - if (list == null || list.isEmpty()) - return null; CacheObjectContext cand = list.get(list.size() - 1); From 7313954e90dc03d1ca3b608606a864907b94ac89 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Sat, 4 Apr 2026 00:19:12 +0300 Subject: [PATCH 54/56] WIP --- .../org/apache/ignite/internal/ExchangeInfo.java | 2 +- .../ignite/internal/IgniteDiagnosticRequest.java | 6 +++--- .../org/apache/ignite/internal/TxEntriesInfo.java | 12 +++++++----- .../main/java/org/apache/ignite/internal/TxInfo.java | 2 +- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/ExchangeInfo.java b/modules/core/src/main/java/org/apache/ignite/internal/ExchangeInfo.java index 62c0a0fce7a36..1cea6641ff8b7 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/ExchangeInfo.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/ExchangeInfo.java @@ -25,7 +25,7 @@ import org.apache.ignite.internal.util.typedef.internal.U; /** */ -public final class ExchangeInfo extends IgniteDiagnosticRequest.DiagnosticBaseInfo { +public final class ExchangeInfo implements IgniteDiagnosticRequest.DiagnosticBaseInfo { /** */ @Order(0) AffinityTopologyVersion topVer; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticRequest.java index 18276f939b49a..40ff44b57993f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteDiagnosticRequest.java @@ -143,11 +143,11 @@ public long futureId() { } /** */ - public abstract static class DiagnosticBaseInfo implements Message { + public interface DiagnosticBaseInfo extends Message { /** * @param other Another info of the same type. */ - public void merge(DiagnosticBaseInfo other) { + default void merge(DiagnosticBaseInfo other) { // No-op. } @@ -155,6 +155,6 @@ public void merge(DiagnosticBaseInfo other) { * @param sb String builder. * @param ctx Grid context. */ - public abstract void appendInfo(StringBuilder sb, GridKernalContext ctx); + void appendInfo(StringBuilder sb, GridKernalContext ctx); } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/TxEntriesInfo.java b/modules/core/src/main/java/org/apache/ignite/internal/TxEntriesInfo.java index 10b8bfa9f2861..806106358366a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/TxEntriesInfo.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/TxEntriesInfo.java @@ -22,18 +22,15 @@ import java.util.Objects; import org.apache.ignite.internal.managers.communication.GridIoMessageFactory; import org.apache.ignite.internal.processors.cache.GridCacheContext; +import org.apache.ignite.internal.processors.cache.GridCacheIdMessage; import org.apache.ignite.internal.processors.cache.GridCacheMapEntry; import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.util.typedef.internal.U; /** */ -public final class TxEntriesInfo extends IgniteDiagnosticRequest.DiagnosticBaseInfo { +public final class TxEntriesInfo extends GridCacheIdMessage implements IgniteDiagnosticRequest.DiagnosticBaseInfo { /** */ @Order(0) - int cacheId; - - /** */ - @Order(1) Collection keys; /** @@ -101,4 +98,9 @@ public TxEntriesInfo() { @Override public int hashCode() { return Objects.hash(getClass(), cacheId); } + + /** {@inheritDoc} */ + @Override public boolean addDeploymentInfo() { + return false; + } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/TxInfo.java b/modules/core/src/main/java/org/apache/ignite/internal/TxInfo.java index 9158ead811c45..bf988350f30a2 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/TxInfo.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/TxInfo.java @@ -24,7 +24,7 @@ import org.apache.ignite.internal.util.typedef.internal.U; /** */ -public final class TxInfo extends IgniteDiagnosticRequest.DiagnosticBaseInfo { +public final class TxInfo implements IgniteDiagnosticRequest.DiagnosticBaseInfo { /** */ @Order(0) GridCacheVersion dhtVer; From 2d3d907ccc7896a8e36499c5719a06218ce40459 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Sat, 4 Apr 2026 00:50:44 +0300 Subject: [PATCH 55/56] WIP --- .../org/apache/ignite/internal/binary/BinaryObjectImpl.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java index 5c736737f320c..bd2b05ee5f151 100644 --- a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java +++ b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java @@ -193,10 +193,8 @@ public BinaryObjectImpl(BinaryContext ctx, byte[] arr, int start) { /** {@inheritDoc} */ @Override public byte[] valueBytes(CacheObjectValueContext ctx) throws IgniteCheckedException { - if (valBytes == null) + if (valBytes == null) valBytes = valueBytesFromArray(ctx); - - ctx.waitMetadataWriteIfNeeded(typeId()); return valBytes; } From fec4d8abc20f9ab8e15f88a9699781cb52922d93 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Sat, 4 Apr 2026 01:02:03 +0300 Subject: [PATCH 56/56] WIP --- .../ignite/internal/direct/stream/DirectByteBufferStream.java | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java index fff663fce0eec..16d2f41855feb 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/DirectByteBufferStream.java @@ -2378,6 +2378,7 @@ private CacheObjectContext setContext(Message msg) { return null; } + /** */ private CacheObjectContext resolveContext(int cacheId) { if (cacheId != CU.UNDEFINED_CACHE_ID) { GridCacheContext gcCtx = ctx.cache().context().cacheContext(cacheId);