From 32fc49ca56acbb7ac924376e4ae4246a189d2f6e Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 13 Mar 2026 22:57:32 +0300 Subject: [PATCH 01/51] WIP --- .../calcite/metadata/ColocationGroup.java | 72 +++++---- .../query/index/IndexKeyTypeMessage.java | 24 ++- .../communication/GridIoMessageFactory.java | 30 ++-- .../discovery/DiscoveryMessageFactory.java | 25 ++-- .../SecurityAwareCustomMessageWrapper.java | 46 ++---- .../eventstorage/GridEventStorageMessage.java | 9 +- .../cache/CacheEntryPredicateAdapter.java | 75 +++++++--- .../processors/cache/GridCacheMessage.java | 2 +- .../dht/PartitionUpdateCountersMessage.java | 33 ++-- .../communication/MarshallableMessage.java | 8 +- ...CacheEntryPredicateAdapterMessageTest.java | 58 +++++-- .../IndexKeyTypeMessageTest.java | 141 ++++++++++++++---- 12 files changed, 325 insertions(+), 198 deletions(-) diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/ColocationGroup.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/ColocationGroup.java index 21223643e8a2b..77d71b8af34ad 100644 --- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/ColocationGroup.java +++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/ColocationGroup.java @@ -29,19 +29,20 @@ import java.util.UUID; import java.util.stream.Collectors; import java.util.stream.LongStream; +import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.Order; +import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionState; -import org.apache.ignite.internal.processors.query.calcite.message.CalciteMessage; +import org.apache.ignite.internal.processors.query.calcite.message.CalciteMarshalableMessage; import org.apache.ignite.internal.processors.query.calcite.message.MessageType; import org.apache.ignite.internal.processors.query.calcite.util.Commons; import org.apache.ignite.internal.util.GridIntIterator; import org.apache.ignite.internal.util.GridIntList; import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.U; -import org.jetbrains.annotations.Nullable; /** */ -public class ColocationGroup implements CalciteMessage { +public class ColocationGroup implements CalciteMarshalableMessage { /** */ @Order(0) long[] srcIds; @@ -60,7 +61,7 @@ public class ColocationGroup implements CalciteMessage { private boolean primaryAssignment; /** Marshalled assignments serialization call holder. */ - @Order(value = 2, method = "marshalledAssignments") + @Order(2) int[] marshalledAssignments; /** */ @@ -317,54 +318,49 @@ public int[] partitions(UUID nodeId) { return MessageType.COLOCATION_GROUP; } - /** Significantly compacts and fastens UUIDs marshalling. */ - public @Nullable int[] marshalledAssignments() { - if (assignments == null || primaryAssignment) - return null; - - Map nodeIdxs = new HashMap<>(); + /** {@inheritDoc} */ + @Override public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { + if (assignments == null && !primaryAssignment) { + Map nodeIdxs = new HashMap<>(); - for (int i = 0; i < nodeIds.size(); i++) - nodeIdxs.put(nodeIds.get(i), i); + for (int i = 0; i < nodeIds.size(); i++) + nodeIdxs.put(nodeIds.get(i), i); - int bitsPerPart = Integer.SIZE - Integer.numberOfLeadingZeros(nodeIds.size()); + int bitsPerPart = Integer.SIZE - Integer.numberOfLeadingZeros(nodeIds.size()); - CompactedIntArray.Builder builder = CompactedIntArray.builder(bitsPerPart, assignments.size()); + CompactedIntArray.Builder builder = CompactedIntArray.builder(bitsPerPart, assignments.size()); - for (List assignment : assignments) { - assert F.isEmpty(assignment) || assignment.size() == 1; + for (List assignment : assignments) { + assert F.isEmpty(assignment) || assignment.size() == 1; - if (F.isEmpty(assignment)) - builder.add(nodeIds.size()); - else { - Integer nodeIdx = nodeIdxs.get(assignment.get(0)); + if (F.isEmpty(assignment)) + builder.add(nodeIds.size()); + else { + Integer nodeIdx = nodeIdxs.get(assignment.get(0)); - builder.add(nodeIdx); + builder.add(nodeIdx); + } } - } - return builder.build().buffer(); - } - - /** Significantly compacts and fastens UUIDs unmarshalling. */ - public void marshalledAssignments(@Nullable int[] marshalledAssignments) { - if (F.isEmpty(marshalledAssignments)) { - assignments = null; - - return; + marshalledAssignments = builder.build().buffer(); } + } - int bitsPerPart = Integer.SIZE - Integer.numberOfLeadingZeros(nodeIds.size()); + /** {@inheritDoc} */ + @Override public void prepareUnmarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { + if (!F.isEmpty(marshalledAssignments)) { + int bitsPerPart = Integer.SIZE - Integer.numberOfLeadingZeros(nodeIds.size()); - CompactedIntArray compactedArr = CompactedIntArray.of(bitsPerPart, marshalledAssignments); + CompactedIntArray compactedArr = CompactedIntArray.of(bitsPerPart, marshalledAssignments); - assignments = new ArrayList<>(compactedArr.size()); + assignments = new ArrayList<>(compactedArr.size()); - for (GridIntIterator iter = compactedArr.iterator(); iter.hasNext(); ) { - int nodeIdx = iter.next(); + for (GridIntIterator iter = compactedArr.iterator(); iter.hasNext(); ) { + int nodeIdx = iter.next(); - assignments.add(nodeIdx >= nodeIds.size() ? Collections.emptyList() : - Collections.singletonList(nodeIds.get(nodeIdx))); + assignments.add(nodeIdx >= nodeIds.size() ? Collections.emptyList() : + Collections.singletonList(nodeIds.get(nodeIdx))); + } } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexKeyTypeMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexKeyTypeMessage.java index c5394ad3d413d..ba6e55b3db0c2 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexKeyTypeMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexKeyTypeMessage.java @@ -17,14 +17,16 @@ package org.apache.ignite.internal.cache.query.index; +import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.Order; import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType; import org.apache.ignite.internal.managers.communication.GridIoMessageFactory; -import org.apache.ignite.plugin.extensions.communication.Message; +import org.apache.ignite.marshaller.Marshaller; +import org.apache.ignite.plugin.extensions.communication.MarshallableMessage; import org.jetbrains.annotations.Nullable; /** Message wrapper for {@link IndexKeyType}. */ -public class IndexKeyTypeMessage implements Message { +public class IndexKeyTypeMessage implements MarshallableMessage { /** Type code. */ public static final short TYPE_CODE = 516; @@ -35,8 +37,8 @@ public class IndexKeyTypeMessage implements Message { private @Nullable IndexKeyType val; /** Code. */ - @Order(value = 0, method = "code") - byte code = NULL_VALUE_CODE; + @Order(0) + byte code; /** Empty constructor for {@link GridIoMessageFactory}. */ public IndexKeyTypeMessage() { @@ -46,12 +48,11 @@ public IndexKeyTypeMessage() { /** Constructor. */ public IndexKeyTypeMessage(@Nullable IndexKeyType keyType) { val = keyType; - code = encode(keyType); } /** Constructor. */ public IndexKeyTypeMessage(int keyTypeCode) { - code((byte)keyTypeCode); + code = (byte)keyTypeCode; } /** @return Code. */ @@ -64,7 +65,6 @@ public byte code() { */ public void code(byte code) { this.code = code; - val = decode(code); } /** @return Index key type. */ @@ -94,4 +94,14 @@ private static byte encode(@Nullable IndexKeyType keyType) { @Override public short directType() { return TYPE_CODE; } + + /** {@inheritDoc} */ + @Override public void prepareMarshal(Marshaller marsh) throws IgniteCheckedException { + code = encode(val); + } + + /** {@inheritDoc} */ + @Override public void finishUnmarshal(Marshaller marsh, ClassLoader clsLdr) throws IgniteCheckedException { + val = decode(code); + } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java index eb022f0edb1bd..7f4db0d46986f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java @@ -42,7 +42,7 @@ import org.apache.ignite.internal.TxInfo; import org.apache.ignite.internal.TxInfoSerializer; import org.apache.ignite.internal.cache.query.index.IndexKeyTypeMessage; -import org.apache.ignite.internal.cache.query.index.IndexKeyTypeMessageSerializer; +import org.apache.ignite.internal.cache.query.index.IndexKeyTypeMessageMarshallableSerializer; import org.apache.ignite.internal.cache.query.index.IndexQueryResultMeta; import org.apache.ignite.internal.cache.query.index.IndexQueryResultMetaSerializer; import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyDefinition; @@ -72,7 +72,7 @@ import org.apache.ignite.internal.processors.cache.CacheEntryInfoCollection; import org.apache.ignite.internal.processors.cache.CacheEntryInfoCollectionSerializer; import org.apache.ignite.internal.processors.cache.CacheEntryPredicateAdapter; -import org.apache.ignite.internal.processors.cache.CacheEntryPredicateAdapterSerializer; +import org.apache.ignite.internal.processors.cache.CacheEntryPredicateAdapterMarshallableSerializer; import org.apache.ignite.internal.processors.cache.CacheEvictionEntry; import org.apache.ignite.internal.processors.cache.CacheEvictionEntrySerializer; import org.apache.ignite.internal.processors.cache.CacheInvokeDirectResult; @@ -132,7 +132,7 @@ import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtUnlockRequest; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtUnlockRequestSerializer; import org.apache.ignite.internal.processors.cache.distributed.dht.PartitionUpdateCountersMessage; -import org.apache.ignite.internal.processors.cache.distributed.dht.PartitionUpdateCountersMessageSerializer; +import org.apache.ignite.internal.processors.cache.distributed.dht.PartitionUpdateCountersMessageMarshallableSerializer; import org.apache.ignite.internal.processors.cache.distributed.dht.TransactionAttributesAwareRequest; import org.apache.ignite.internal.processors.cache.distributed.dht.TransactionAttributesAwareRequestSerializer; import org.apache.ignite.internal.processors.cache.distributed.dht.atomic.AtomicApplicationAttributesAwareRequest; @@ -352,18 +352,18 @@ */ public class GridIoMessageFactory implements MessageFactoryProvider { /** Custom data marshaller. */ - private final Marshaller cstDataMarshall; + private final Marshaller marsh; /** Class loader for the custom data marshalling. */ - private final ClassLoader cstDataMarshallClsLdr; + private final ClassLoader clsLdr; /** - * @param cstDataMarshall Custom data marshaller. - * @param cstDataMarshallClsLdr Class loader for the custom data marshalling. + * @param marsh Custom data marshaller. + * @param clsLdr Class loader for the custom data marshalling. */ - public GridIoMessageFactory(Marshaller cstDataMarshall, ClassLoader cstDataMarshallClsLdr) { - this.cstDataMarshall = cstDataMarshall; - this.cstDataMarshallClsLdr = cstDataMarshallClsLdr; + public GridIoMessageFactory(Marshaller marsh, ClassLoader clsLdr) { + this.marsh = marsh; + this.clsLdr = clsLdr; } /** {@inheritDoc} */ @@ -371,7 +371,7 @@ public GridIoMessageFactory(Marshaller cstDataMarshall, ClassLoader cstDataMarsh // -54 is reserved for SQL. // We don't use the code‑generated serializer for CompressedMessage - serialization is highly customized. factory.register(CompressedMessage.TYPE_CODE, CompressedMessage::new); - factory.register((short)-66, ErrorMessage::new, new ErrorMessageMarshallableSerializer(cstDataMarshall, cstDataMarshallClsLdr)); + factory.register((short)-66, ErrorMessage::new, new ErrorMessageMarshallableSerializer(marsh, clsLdr)); factory.register((short)-65, TxInfo::new, new TxInfoSerializer()); factory.register((short)-64, TxEntriesInfo::new, new TxEntriesInfoSerializer()); factory.register((short)-63, ExchangeInfo::new, new ExchangeInfoSerializer()); @@ -473,7 +473,7 @@ public GridIoMessageFactory(Marshaller cstDataMarshall, ClassLoader cstDataMarsh factory.register((short)95, DataStreamerEntry::new); factory.register((short)96, CacheContinuousQueryEntry::new, new CacheContinuousQueryEntrySerializer()); factory.register((short)97, CacheEvictionEntry::new, new CacheEvictionEntrySerializer()); - factory.register((short)98, CacheEntryPredicateAdapter::new, new CacheEntryPredicateAdapterSerializer()); + factory.register((short)98, CacheEntryPredicateAdapter::new, new CacheEntryPredicateAdapterMarshallableSerializer(marsh, clsLdr)); factory.register((short)100, IgniteTxEntry::new, new IgniteTxEntrySerializer()); factory.register((short)101, TxEntryValueHolder::new, new TxEntryValueHolderSerializer()); factory.register((short)102, CacheVersionedValue::new, new CacheVersionedValueSerializer()); @@ -507,7 +507,8 @@ public GridIoMessageFactory(Marshaller cstDataMarshall, ClassLoader cstDataMarsh factory.register(CacheMetricsMessage.TYPE_CODE, CacheMetricsMessage::new, new CacheMetricsMessageSerializer()); factory.register(NodeMetricsMessage.TYPE_CODE, NodeMetricsMessage::new, new NodeMetricsMessageSerializer()); factory.register(NodeFullMetricsMessage.TYPE_CODE, NodeFullMetricsMessage::new, new NodeFullMetricsMessageSerializer()); - factory.register((short)157, PartitionUpdateCountersMessage::new, new PartitionUpdateCountersMessageSerializer()); + factory.register((short)157, PartitionUpdateCountersMessage::new, + new PartitionUpdateCountersMessageMarshallableSerializer(marsh, clsLdr)); factory.register((short)162, GenerateEncryptionKeyRequest::new, new GenerateEncryptionKeyRequestSerializer()); factory.register((short)163, GenerateEncryptionKeyResponse::new, new GenerateEncryptionKeyResponseSerializer()); factory.register((short)167, ServiceDeploymentProcessId::new, new ServiceDeploymentProcessIdSerializer()); @@ -557,7 +558,8 @@ public GridIoMessageFactory(Marshaller cstDataMarshall, ClassLoader cstDataMarsh factory.register(IgniteDhtPartitionsToReloadMap.TYPE_CODE, IgniteDhtPartitionsToReloadMap::new, new IgniteDhtPartitionsToReloadMapSerializer()); factory.register(IntLongMap.TYPE_CODE, IntLongMap::new, new IntLongMapSerializer()); - factory.register(IndexKeyTypeMessage.TYPE_CODE, IndexKeyTypeMessage::new, new IndexKeyTypeMessageSerializer()); + factory.register(IndexKeyTypeMessage.TYPE_CODE, IndexKeyTypeMessage::new, + new IndexKeyTypeMessageMarshallableSerializer(marsh, clsLdr)); factory.register(GridPartitionStateMap.TYPE_CODE, GridPartitionStateMap::new, new GridPartitionStateMapSerializer()); factory.register(GridDhtPartitionMap.TYPE_CODE, GridDhtPartitionMap::new, new GridDhtPartitionMapSerializer()); factory.register(GridDhtPartitionFullMap.TYPE_CODE, GridDhtPartitionFullMap::new, new GridDhtPartitionFullMapSerializer()); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java index 3969c9dd31776..b3e0cd0c08fbd 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java @@ -136,18 +136,18 @@ /** Message factory for discovery messages. */ public class DiscoveryMessageFactory implements MessageFactoryProvider { /** Custom data marshaller. */ - private final Marshaller cstDataMarshall; + private final Marshaller marsh; /** Class loader for the custom data marshalling. */ - private final ClassLoader cstDataMarshallClsLdr; + private final ClassLoader clsLdr; /** - * @param cstDataMarshall Custom data marshaller. - * @param cstDataMarshallClsLdr Class loader for the custom data marshalling. + * @param marsh Custom data marshaller. + * @param clsLdr Class loader for the custom data marshalling. */ - public DiscoveryMessageFactory(Marshaller cstDataMarshall, ClassLoader cstDataMarshallClsLdr) { - this.cstDataMarshall = cstDataMarshall; - this.cstDataMarshallClsLdr = cstDataMarshallClsLdr; + public DiscoveryMessageFactory(Marshaller marsh, ClassLoader clsLdr) { + this.marsh = marsh; + this.clsLdr = clsLdr; } /** {@inheritDoc} */ @@ -163,7 +163,7 @@ public DiscoveryMessageFactory(Marshaller cstDataMarshall, ClassLoader cstDataMa factory.register((short)-102, TcpDiscoveryNodeMetricsMessage::new, new TcpDiscoveryNodeMetricsMessageSerializer()); factory.register((short)-101, InetSocketAddressMessage::new, new InetSocketAddressMessageSerializer()); factory.register((short)-100, InetAddressMessage::new, new InetAddressMessageSerializer()); - factory.register((short)-66, ErrorMessage::new, new ErrorMessageMarshallableSerializer(cstDataMarshall, cstDataMarshallClsLdr)); + factory.register((short)-66, ErrorMessage::new, new ErrorMessageMarshallableSerializer(marsh, clsLdr)); // TcpDiscoveryAbstractMessage factory.register((short)0, TcpDiscoveryCheckFailedMessage::new, new TcpDiscoveryCheckFailedMessageSerializer()); @@ -186,9 +186,9 @@ public DiscoveryMessageFactory(Marshaller cstDataMarshall, ClassLoader cstDataMa factory.register((short)17, TcpDiscoveryNodeFailedMessage::new, new TcpDiscoveryNodeFailedMessageSerializer()); factory.register((short)18, TcpDiscoveryStatusCheckMessage::new, new TcpDiscoveryStatusCheckMessageSerializer()); factory.register((short)19, TcpDiscoveryNodeAddFinishedMessage::new, - new TcpDiscoveryNodeAddFinishedMessageMarshallableSerializer(cstDataMarshall, cstDataMarshallClsLdr)); + new TcpDiscoveryNodeAddFinishedMessageMarshallableSerializer(marsh, clsLdr)); factory.register((short)20, TcpDiscoveryJoinRequestMessage::new, - new TcpDiscoveryJoinRequestMessageMarshallableSerializer(cstDataMarshall, cstDataMarshallClsLdr)); + new TcpDiscoveryJoinRequestMessageMarshallableSerializer(marsh, clsLdr)); factory.register((short)21, TcpDiscoveryCustomEventMessage::new, new TcpDiscoveryCustomEventMessageSerializer()); factory.register((short)22, TcpDiscoveryServerOnlyCustomEventMessage::new, new TcpDiscoveryServerOnlyCustomEventMessageSerializer()); @@ -198,11 +198,12 @@ public DiscoveryMessageFactory(Marshaller cstDataMarshall, ClassLoader cstDataMa factory.register((short)26, DistributedMetaStorageCasMessage::new, new DistributedMetaStorageCasMessageSerializer()); factory.register((short)27, DistributedMetaStorageCasAckMessage::new, new DistributedMetaStorageCasAckMessageSerializer()); factory.register((short)28, TcpDiscoveryClientReconnectMessage::new, - new TcpDiscoveryClientReconnectMessageMarshallableSerializer(cstDataMarshall, cstDataMarshallClsLdr)); + new TcpDiscoveryClientReconnectMessageMarshallableSerializer(marsh, clsLdr)); // DiscoveryCustomMessage factory.register((short)500, CacheStatisticsModeChangeMessage::new, new CacheStatisticsModeChangeMessageSerializer()); - factory.register((short)501, SecurityAwareCustomMessageWrapper::new, new SecurityAwareCustomMessageWrapperSerializer()); + factory.register((short)501, SecurityAwareCustomMessageWrapper::new, + new SecurityAwareCustomMessageWrapperMarshallableSerializer(marsh, clsLdr)); factory.register((short)502, MetadataRemoveAcceptedMessage::new, new MetadataRemoveAcceptedMessageSerializer()); factory.register((short)503, MetadataRemoveProposedMessage::new, new MetadataRemoveProposedMessageSerializer()); factory.register((short)504, SchemaProposeDiscoveryMessage::new, new SchemaProposeDiscoveryMessageSerializer()); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/SecurityAwareCustomMessageWrapper.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/SecurityAwareCustomMessageWrapper.java index c186fe02a1a70..90e09e1cccdd3 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/SecurityAwareCustomMessageWrapper.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/SecurityAwareCustomMessageWrapper.java @@ -19,10 +19,10 @@ import java.util.UUID; import org.apache.ignite.IgniteCheckedException; -import org.apache.ignite.IgniteException; import org.apache.ignite.internal.Order; -import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.U; +import org.apache.ignite.marshaller.Marshaller; +import org.apache.ignite.plugin.extensions.communication.MarshallableMessage; import org.apache.ignite.plugin.extensions.communication.Message; import org.apache.ignite.plugin.extensions.communication.MessageFactory; import org.apache.ignite.spi.discovery.DiscoverySpiCustomMessage; @@ -31,7 +31,7 @@ import static org.apache.ignite.marshaller.Marshallers.jdk; /** Custom message wrapper with ID of security subject that initiated the current message. */ -public class SecurityAwareCustomMessageWrapper extends DiscoverySpiCustomMessage implements Message { +public class SecurityAwareCustomMessageWrapper extends DiscoverySpiCustomMessage implements MarshallableMessage { /** */ private static final long serialVersionUID = 0L; @@ -43,13 +43,12 @@ public class SecurityAwareCustomMessageWrapper extends DiscoverySpiCustomMessage private DiscoveryCustomMessage delegate; /** */ - @Order(1) // TODO: Should be removed in https://issues.apache.org/jira/browse/IGNITE-27627 Message msg; /** Serialized message bytes. */ // TODO: Should be removed in https://issues.apache.org/jira/browse/IGNITE-27627 - @Order(value = 2, method = "messageBytes") + @Order(1) byte[] msgBytes; /** Default constructor for {@link MessageFactory}. */ @@ -95,37 +94,20 @@ public DiscoveryCustomMessage delegate() { return ack == null ? null : new SecurityAwareCustomMessageWrapper(ack, secSubjId); } - /** */ - public byte[] messageBytes() { - if (delegate instanceof Message) - return null; - - if (msgBytes != null) - return msgBytes; - - try { - return msgBytes = U.marshal(jdk(), delegate); - } - catch (IgniteCheckedException e) { - throw new IgniteException(e); - } + /** {@inheritDoc} */ + @Override public short directType() { + return 501; } - /** */ - public void messageBytes(byte[] msgBytes) { - if (F.isEmpty(msgBytes)) - return; - - try { - delegate = U.unmarshal(jdk(), msgBytes, U.gridClassLoader()); - } - catch (IgniteCheckedException e) { - throw new RuntimeException(e); - } + /** {@inheritDoc} */ + @Override public void prepareMarshal(Marshaller marsh) throws IgniteCheckedException { + if (delegate instanceof Message) + msgBytes = U.marshal(jdk(), delegate); } /** {@inheritDoc} */ - @Override public short directType() { - return 501; + @Override public void finishUnmarshal(Marshaller marsh, ClassLoader clsLdr) throws IgniteCheckedException { + if (msgBytes != null) + delegate = U.unmarshal(jdk(), msgBytes, U.gridClassLoader()); } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/eventstorage/GridEventStorageMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/eventstorage/GridEventStorageMessage.java index dade283bc0d1f..60b9d239ecff1 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/eventstorage/GridEventStorageMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/eventstorage/GridEventStorageMessage.java @@ -82,7 +82,7 @@ public class GridEventStorageMessage implements Message { /** Node class loader participants. */ @GridToStringInclude - @Order(value = 8, method = "loaderParticipants") + @Order(8) Map ldrParties; /** */ @@ -191,13 +191,6 @@ public String userVersion() { return ldrParties != null ? Collections.unmodifiableMap(ldrParties) : null; } - /** - * @param ldrParties Node class loader participant map. - */ - public void loaderParticipants(@Nullable Map ldrParties) { - this.ldrParties = ldrParties; - } - /** * @return Exception. */ 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 0eaa1fa7a779c..180d09aa93b8c 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 @@ -23,10 +23,12 @@ import org.apache.ignite.internal.Order; import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.internal.CU; +import org.apache.ignite.marshaller.Marshaller; +import org.apache.ignite.plugin.extensions.communication.MarshallableMessage; import org.jetbrains.annotations.Nullable; /** A unified container for common, typical cache entry predicates. */ -public class CacheEntryPredicateAdapter implements CacheEntryPredicate { +public class CacheEntryPredicateAdapter implements CacheEntryPredicate, MarshallableMessage { /** */ private static final long serialVersionUID = 4647110502545358709L; @@ -41,7 +43,7 @@ public class CacheEntryPredicateAdapter implements CacheEntryPredicate { private PredicateType type; /** Type value serialization holder. */ - @Order(value = 0, method = "code") + @Order(0) protected transient byte code; /** */ @@ -64,6 +66,7 @@ public CacheEntryPredicateAdapter(PredicateType type) { /** */ public CacheEntryPredicateAdapter(@Nullable CacheObject val) { type = PredicateType.VALUE; + code = 1; this.val = val; } @@ -144,27 +147,65 @@ public PredicateType type() { /** */ public byte code() { - assert type != null; + return code; + } + /** */ + public void code(byte code) { + this.code = code; + } + + /** {@inheritDoc} */ + @Override public void prepareMarshal(Marshaller marsh) throws IgniteCheckedException { switch (type) { - case OTHER: return 0; - case VALUE: return 1; - case HAS_VALUE: return 2; - case HAS_NO_VALUE: return 3; - case ALWAYS_FALSE: return 4; - } + case OTHER: + code = 0; + break; + + case VALUE: + code = 1; + break; + + case HAS_VALUE: + code = 2; + break; + + case HAS_NO_VALUE: + code = 3; + break; - throw new IllegalArgumentException("Unknown cache entry predicate type: " + type); + case ALWAYS_FALSE: + code = 4; + break; + + default: + throw new IllegalArgumentException("Unknown cache entry predicate type: " + type); + } } - /** */ - public void code(byte code) { + /** {@inheritDoc} */ + @Override public void finishUnmarshal(Marshaller marsh, ClassLoader clsLdr) throws IgniteCheckedException { switch (code) { - case 0: type = PredicateType.OTHER; break; - case 1: type = PredicateType.VALUE; break; - case 2: type = PredicateType.HAS_VALUE; break; - case 3: type = PredicateType.HAS_NO_VALUE; break; - case 4: type = PredicateType.ALWAYS_FALSE; break; + case 0: + type = PredicateType.OTHER; + break; + + case 1: + type = PredicateType.VALUE; + break; + + case 2: + type = PredicateType.HAS_VALUE; + break; + + case 3: + type = PredicateType.HAS_NO_VALUE; + break; + + case 4: + type = PredicateType.ALWAYS_FALSE; + break; + default: throw new IllegalArgumentException("Unknown cache entry predicate type code: " + code); } 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 9b7e2e4943b7b..285e4d392d94c 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 @@ -69,7 +69,7 @@ public abstract class GridCacheMessage implements Message { /** */ @GridToStringInclude - @Order(value = 2, method = "lastAffinityChangedTopologyVersion") + @Order(2) @Nullable public AffinityTopologyVersion lastAffChangedTopVer; /** */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/PartitionUpdateCountersMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/PartitionUpdateCountersMessage.java index b6e7743b880e8..f5b35d1364e28 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/PartitionUpdateCountersMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/PartitionUpdateCountersMessage.java @@ -19,20 +19,22 @@ import java.util.Arrays; import java.util.Map; +import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.Order; import org.apache.ignite.internal.util.GridUnsafe; import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.plugin.extensions.communication.Message; +import org.apache.ignite.marshaller.Marshaller; +import org.apache.ignite.plugin.extensions.communication.MarshallableMessage; /** * Partition update counters message. */ -public class PartitionUpdateCountersMessage implements Message { +public class PartitionUpdateCountersMessage implements MarshallableMessage { /** */ private static final int ITEM_SIZE = 4 /* partition */ + 8 /* initial counter */ + 8 /* updates count */; /** Byte representation of partition counters. */ - @Order(value = 0, method = "data") + @Order(0) byte[] data; /** */ @@ -61,21 +63,6 @@ public PartitionUpdateCountersMessage(int cacheId, int initSize) { data = new byte[initSize * ITEM_SIZE]; } - /** - * @return Data. - */ - public byte[] data() { - return Arrays.copyOf(data, size * ITEM_SIZE); - } - - /** - * @param data New data. - */ - public void data(byte[] data) { - this.data = data; - size = data == null ? 0 : data.length / ITEM_SIZE; - } - /** * @return Cache id. */ @@ -199,4 +186,14 @@ private void ensureSpace(int newSize) { ", cntrs=" + sb + '}'; } + + /** {@inheritDoc} */ + @Override public void prepareMarshal(Marshaller marsh) throws IgniteCheckedException { + data = Arrays.copyOf(data, size * ITEM_SIZE); + } + + /** {@inheritDoc} */ + @Override public void finishUnmarshal(Marshaller marsh, ClassLoader clsLdr) throws IgniteCheckedException { + size = data == null ? 0 : data.length / ITEM_SIZE; + } } diff --git a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MarshallableMessage.java b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MarshallableMessage.java index f3cc81dd68e26..5f2f8c4196608 100644 --- a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MarshallableMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MarshallableMessage.java @@ -23,15 +23,11 @@ /** A {@link Message} which still requires external custom pre-marshalling and post-unmarshalling. */ public interface MarshallableMessage extends Message { /** @param marsh External custom marshaller. */ - public default void prepareMarshal(Marshaller marsh) throws IgniteCheckedException { - throw new UnsupportedOperationException(); - } + public void prepareMarshal(Marshaller marsh) throws IgniteCheckedException; /** * @param marsh External custom marshaller. * @param clsLdr External class loader to post-unmarshall. */ - public default void finishUnmarshal(Marshaller marsh, ClassLoader clsLdr) throws IgniteCheckedException { - throw new UnsupportedOperationException(); - } + public void finishUnmarshal(Marshaller marsh, ClassLoader clsLdr) throws IgniteCheckedException; } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/CacheEntryPredicateAdapterMessageTest.java b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/CacheEntryPredicateAdapterMessageTest.java index 6697942a1dc63..b69cd202dde7f 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/CacheEntryPredicateAdapterMessageTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/CacheEntryPredicateAdapterMessageTest.java @@ -17,11 +17,14 @@ package org.apache.ignite.internal.managers.communication; +import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.processors.cache.CacheEntryPredicateAdapter; import org.apache.ignite.internal.processors.cache.CacheObject; import org.apache.ignite.internal.util.typedef.F; +import org.apache.ignite.internal.util.typedef.internal.U; import org.junit.Test; +import static org.apache.ignite.marshaller.Marshallers.jdk; import static org.apache.ignite.testframework.GridTestUtils.assertThrowsWithCause; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertSame; @@ -32,56 +35,87 @@ public class CacheEntryPredicateAdapterMessageTest { /** */ @Test public void testCacheEntryPredicateAdapterCode() { - assertEquals(0, new CacheEntryPredicateAdapter().code()); - assertEquals(0, new CacheEntryPredicateAdapter(CacheEntryPredicateAdapter.PredicateType.OTHER).code()); - assertEquals(1, new CacheEntryPredicateAdapter(CacheEntryPredicateAdapter.PredicateType.VALUE).code()); - assertEquals(1, new CacheEntryPredicateAdapter((CacheObject)null).code()); - assertEquals(2, new CacheEntryPredicateAdapter(CacheEntryPredicateAdapter.PredicateType.HAS_VALUE).code()); - assertEquals(3, new CacheEntryPredicateAdapter(CacheEntryPredicateAdapter.PredicateType.HAS_NO_VALUE).code()); - assertEquals(4, new CacheEntryPredicateAdapter(CacheEntryPredicateAdapter.PredicateType.ALWAYS_FALSE).code()); + assertEquals(0, prepare(new CacheEntryPredicateAdapter())); + assertEquals(0, prepare(new CacheEntryPredicateAdapter(CacheEntryPredicateAdapter.PredicateType.OTHER))); + assertEquals(1, prepare(new CacheEntryPredicateAdapter(CacheEntryPredicateAdapter.PredicateType.VALUE))); + assertEquals(1, prepare(new CacheEntryPredicateAdapter((CacheObject)null))); + assertEquals(2, prepare(new CacheEntryPredicateAdapter(CacheEntryPredicateAdapter.PredicateType.HAS_VALUE))); + assertEquals(3, prepare(new CacheEntryPredicateAdapter(CacheEntryPredicateAdapter.PredicateType.HAS_NO_VALUE))); + assertEquals(4, prepare(new CacheEntryPredicateAdapter(CacheEntryPredicateAdapter.PredicateType.ALWAYS_FALSE))); for (CacheEntryPredicateAdapter.PredicateType t : CacheEntryPredicateAdapter.PredicateType.values()) { - assertTrue(new CacheEntryPredicateAdapter(t).code() >= 0); - assertTrue(new CacheEntryPredicateAdapter(t).code() < 5); + assertTrue(prepare(new CacheEntryPredicateAdapter(t)) >= 0); + assertTrue(prepare(new CacheEntryPredicateAdapter(t)) < 5); } } + byte prepare(CacheEntryPredicateAdapter msg){ + try { + msg.prepareMarshal(jdk()); + } + catch (IgniteCheckedException e) { + throw new RuntimeException(e); + } + + return msg.code(); + } + /** */ @Test - public void testCacheEntryPredicateAdapterFromCode() { + public void testCacheEntryPredicateAdapterFromCode() throws IgniteCheckedException { CacheEntryPredicateAdapter msg = new CacheEntryPredicateAdapter((CacheObject)null); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(CacheEntryPredicateAdapter.PredicateType.VALUE, msg.type()); msg.code((byte)0); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(CacheEntryPredicateAdapter.PredicateType.OTHER, msg.type()); msg.code((byte)1); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(CacheEntryPredicateAdapter.PredicateType.VALUE, msg.type()); msg.code((byte)2); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(CacheEntryPredicateAdapter.PredicateType.HAS_VALUE, msg.type()); msg.code((byte)3); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(CacheEntryPredicateAdapter.PredicateType.HAS_NO_VALUE, msg.type()); msg.code((byte)4); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(CacheEntryPredicateAdapter.PredicateType.ALWAYS_FALSE, msg.type()); - Throwable t = assertThrowsWithCause(() -> msg.code((byte)5), IllegalArgumentException.class); + Throwable t = assertThrowsWithCause(() -> { + msg.code((byte)5); + + try { + msg.finishUnmarshal(jdk(), U.gridClassLoader()); + } + catch (IgniteCheckedException e) { + throw new RuntimeException(e); + } + }, IllegalArgumentException.class); assertEquals("Unknown cache entry predicate type code: 5", t.getMessage()); } /** */ @Test - public void testConversionConsistency() { + public void testConversionConsistency() throws IgniteCheckedException { for (CacheEntryPredicateAdapter.PredicateType t : F.concat(CacheEntryPredicateAdapter.PredicateType.values())) { CacheEntryPredicateAdapter msg = new CacheEntryPredicateAdapter(t); assertEquals(t, msg.type()); CacheEntryPredicateAdapter newMsg = new CacheEntryPredicateAdapter(); + + msg.prepareMarshal(jdk()); + newMsg.code(msg.code()); + newMsg.finishUnmarshal(jdk(), U.gridClassLoader()); + assertEquals(msg.type(), newMsg.type()); } } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/IndexKeyTypeMessageTest.java b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/IndexKeyTypeMessageTest.java index 642615c06d3ee..ca76df0d2002e 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/IndexKeyTypeMessageTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/IndexKeyTypeMessageTest.java @@ -17,11 +17,14 @@ package org.apache.ignite.internal.managers.communication; +import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.cache.query.index.IndexKeyTypeMessage; import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyType; import org.apache.ignite.internal.util.typedef.F; +import org.apache.ignite.internal.util.typedef.internal.U; import org.junit.Test; +import static org.apache.ignite.marshaller.Marshallers.jdk; import static org.apache.ignite.testframework.GridTestUtils.assertThrowsWithCause; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; @@ -33,132 +36,190 @@ public class IndexKeyTypeMessageTest { /** */ @Test public void testIndexKeyTypeCode() { - assertEquals(Byte.MIN_VALUE, new IndexKeyTypeMessage(null).code()); - assertEquals(-1, new IndexKeyTypeMessage(IndexKeyType.UNKNOWN).code()); - assertEquals(0, new IndexKeyTypeMessage(IndexKeyType.NULL).code()); - assertEquals(1, new IndexKeyTypeMessage(IndexKeyType.BOOLEAN).code()); - assertEquals(2, new IndexKeyTypeMessage(IndexKeyType.BYTE).code()); - assertEquals(3, new IndexKeyTypeMessage(IndexKeyType.SHORT).code()); - assertEquals(4, new IndexKeyTypeMessage(IndexKeyType.INT).code()); - assertEquals(5, new IndexKeyTypeMessage(IndexKeyType.LONG).code()); - assertEquals(6, new IndexKeyTypeMessage(IndexKeyType.DECIMAL).code()); - assertEquals(7, new IndexKeyTypeMessage(IndexKeyType.DOUBLE).code()); - assertEquals(8, new IndexKeyTypeMessage(IndexKeyType.FLOAT).code()); - assertEquals(9, new IndexKeyTypeMessage(IndexKeyType.TIME).code()); - assertEquals(10, new IndexKeyTypeMessage(IndexKeyType.DATE).code()); - assertEquals(11, new IndexKeyTypeMessage(IndexKeyType.TIMESTAMP).code()); - assertEquals(12, new IndexKeyTypeMessage(IndexKeyType.BYTES).code()); - assertEquals(13, new IndexKeyTypeMessage(IndexKeyType.STRING).code()); - assertEquals(14, new IndexKeyTypeMessage(IndexKeyType.STRING_IGNORECASE).code()); - assertEquals(15, new IndexKeyTypeMessage(IndexKeyType.BLOB).code()); - assertEquals(16, new IndexKeyTypeMessage(IndexKeyType.CLOB).code()); - assertEquals(17, new IndexKeyTypeMessage(IndexKeyType.ARRAY).code()); - assertEquals(18, new IndexKeyTypeMessage(IndexKeyType.RESULT_SET).code()); - assertEquals(19, new IndexKeyTypeMessage(IndexKeyType.JAVA_OBJECT).code()); - assertEquals(20, new IndexKeyTypeMessage(IndexKeyType.UUID).code()); - assertEquals(21, new IndexKeyTypeMessage(IndexKeyType.STRING_FIXED).code()); - assertEquals(22, new IndexKeyTypeMessage(IndexKeyType.GEOMETRY).code()); - assertEquals(24, new IndexKeyTypeMessage(IndexKeyType.TIMESTAMP_TZ).code()); - assertEquals(25, new IndexKeyTypeMessage(IndexKeyType.ENUM).code()); + assertEquals(Byte.MIN_VALUE, prepare(new IndexKeyTypeMessage(null))); + assertEquals(-1, prepare(new IndexKeyTypeMessage(IndexKeyType.UNKNOWN))); + assertEquals(0, prepare(new IndexKeyTypeMessage(IndexKeyType.NULL))); + assertEquals(1, prepare(new IndexKeyTypeMessage(IndexKeyType.BOOLEAN))); + assertEquals(2, prepare(new IndexKeyTypeMessage(IndexKeyType.BYTE))); + assertEquals(3, prepare(new IndexKeyTypeMessage(IndexKeyType.SHORT))); + assertEquals(4, prepare(new IndexKeyTypeMessage(IndexKeyType.INT))); + assertEquals(5, prepare(new IndexKeyTypeMessage(IndexKeyType.LONG))); + assertEquals(6, prepare(new IndexKeyTypeMessage(IndexKeyType.DECIMAL))); + assertEquals(7, prepare(new IndexKeyTypeMessage(IndexKeyType.DOUBLE))); + assertEquals(8, prepare(new IndexKeyTypeMessage(IndexKeyType.FLOAT))); + assertEquals(9, prepare(new IndexKeyTypeMessage(IndexKeyType.TIME))); + assertEquals(10, prepare(new IndexKeyTypeMessage(IndexKeyType.DATE))); + assertEquals(11, prepare(new IndexKeyTypeMessage(IndexKeyType.TIMESTAMP))); + assertEquals(12, prepare(new IndexKeyTypeMessage(IndexKeyType.BYTES))); + assertEquals(13, prepare(new IndexKeyTypeMessage(IndexKeyType.STRING))); + assertEquals(14, prepare(new IndexKeyTypeMessage(IndexKeyType.STRING_IGNORECASE))); + assertEquals(15, prepare(new IndexKeyTypeMessage(IndexKeyType.BLOB))); + assertEquals(16, prepare(new IndexKeyTypeMessage(IndexKeyType.CLOB))); + assertEquals(17, prepare(new IndexKeyTypeMessage(IndexKeyType.ARRAY))); + assertEquals(18, prepare(new IndexKeyTypeMessage(IndexKeyType.RESULT_SET))); + assertEquals(19, prepare(new IndexKeyTypeMessage(IndexKeyType.JAVA_OBJECT))); + assertEquals(20, prepare(new IndexKeyTypeMessage(IndexKeyType.UUID))); + assertEquals(21, prepare(new IndexKeyTypeMessage(IndexKeyType.STRING_FIXED))); + assertEquals(22, prepare(new IndexKeyTypeMessage(IndexKeyType.GEOMETRY))); + assertEquals(24, prepare(new IndexKeyTypeMessage(IndexKeyType.TIMESTAMP_TZ))); + assertEquals(25, prepare(new IndexKeyTypeMessage(IndexKeyType.ENUM))); for (IndexKeyType keyType : IndexKeyType.values()) - assertTrue(new IndexKeyTypeMessage(keyType).code() != IndexKeyTypeMessage.NULL_VALUE_CODE); + assertTrue(prepare(new IndexKeyTypeMessage(keyType)) != IndexKeyTypeMessage.NULL_VALUE_CODE); + } + + byte prepare(IndexKeyTypeMessage msg){ + try { + msg.prepareMarshal(jdk()); + } + catch (IgniteCheckedException e) { + throw new RuntimeException(e); + } + + return msg.code(); } /** */ @Test - public void testIndexKeyTypeFromCode() { + public void testIndexKeyTypeFromCode() throws IgniteCheckedException { IndexKeyTypeMessage msg = new IndexKeyTypeMessage(null); msg.code(IndexKeyTypeMessage.NULL_VALUE_CODE); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertNull(msg.value()); msg.code((byte)-1); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.UNKNOWN, msg.value()); msg.code((byte)0); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.NULL, msg.value()); msg.code((byte)1); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.BOOLEAN, msg.value()); msg.code((byte)2); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.BYTE, msg.value()); msg.code((byte)3); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.SHORT, msg.value()); msg.code((byte)4); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.INT, msg.value()); msg.code((byte)5); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.LONG, msg.value()); msg.code((byte)6); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.DECIMAL, msg.value()); msg.code((byte)7); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.DOUBLE, msg.value()); msg.code((byte)8); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.FLOAT, msg.value()); msg.code((byte)9); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.TIME, msg.value()); msg.code((byte)10); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.DATE, msg.value()); msg.code((byte)11); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.TIMESTAMP, msg.value()); msg.code((byte)12); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.BYTES, msg.value()); msg.code((byte)13); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.STRING, msg.value()); msg.code((byte)14); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.STRING_IGNORECASE, msg.value()); msg.code((byte)15); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.BLOB, msg.value()); msg.code((byte)16); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.CLOB, msg.value()); msg.code((byte)17); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.ARRAY, msg.value()); msg.code((byte)18); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.RESULT_SET, msg.value()); msg.code((byte)19); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.JAVA_OBJECT, msg.value()); msg.code((byte)20); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.UUID, msg.value()); msg.code((byte)21); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.STRING_FIXED, msg.value()); msg.code((byte)22); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.GEOMETRY, msg.value()); msg.code((byte)24); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.TIMESTAMP_TZ, msg.value()); msg.code((byte)25); + msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.ENUM, msg.value()); - Throwable t = assertThrowsWithCause(() -> msg.code((byte)23), IllegalArgumentException.class); + Throwable t = assertThrowsWithCause(() -> { + msg.code((byte)23); + + try { + msg.finishUnmarshal(jdk(), U.gridClassLoader()); + } + catch (IgniteCheckedException e) { + throw new RuntimeException(e); + } + }, + IllegalArgumentException.class); assertEquals("Unknown index key type code: " + 23, t.getMessage()); for (byte c = 26; c >= 26 && c <= Byte.MAX_VALUE; ++c) { byte c0 = c; - t = assertThrowsWithCause(() -> msg.code(c0), IllegalArgumentException.class); + t = assertThrowsWithCause(() -> { + msg.code(c0); + + try { + msg.finishUnmarshal(jdk(), U.gridClassLoader()); + } + catch (IgniteCheckedException e) { + throw new RuntimeException(e); + } + }, + IllegalArgumentException.class); assertEquals("Unknown index key type code: " + c0, t.getMessage()); } @@ -166,7 +227,16 @@ public void testIndexKeyTypeFromCode() { for (byte c = (byte)(IndexKeyTypeMessage.NULL_VALUE_CODE + 1); c < -1; ++c) { byte c0 = c; - t = assertThrowsWithCause(() -> msg.code(c0), IllegalArgumentException.class); + t = assertThrowsWithCause(() -> { + msg.code(c0); + + try { + msg.finishUnmarshal(jdk(), U.gridClassLoader()); + } + catch (IgniteCheckedException e) { + throw new RuntimeException(e); + } + }, IllegalArgumentException.class); assertEquals("Unknown index key type code: " + c0, t.getMessage()); } @@ -174,15 +244,20 @@ public void testIndexKeyTypeFromCode() { /** */ @Test - public void testConversionConsistency() { + public void testConversionConsistency() throws IgniteCheckedException { for (IndexKeyType keyType : F.concat(IndexKeyType.values(), (IndexKeyType)null)) { IndexKeyTypeMessage msg = new IndexKeyTypeMessage(keyType); assertEquals(keyType, msg.value()); IndexKeyTypeMessage newMsg = new IndexKeyTypeMessage(); + + msg.prepareMarshal(jdk()); + newMsg.code(msg.code()); + newMsg.finishUnmarshal(jdk(), U.gridClassLoader()); + assertEquals(msg.value(), newMsg.value()); } } From f311ee3d5b0506bb0ec8acd25b0d845f6f02a8b2 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 13 Mar 2026 23:04:42 +0300 Subject: [PATCH 02/51] WIP --- ...CacheEntryPredicateAdapterMessageTest.java | 3 +- .../IndexKeyTypeMessageTest.java | 28 +++++++++++-------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/CacheEntryPredicateAdapterMessageTest.java b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/CacheEntryPredicateAdapterMessageTest.java index b69cd202dde7f..f56dddb7daecf 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/CacheEntryPredicateAdapterMessageTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/CacheEntryPredicateAdapterMessageTest.java @@ -49,7 +49,8 @@ public void testCacheEntryPredicateAdapterCode() { } } - byte prepare(CacheEntryPredicateAdapter msg){ + /** */ + byte prepare(CacheEntryPredicateAdapter msg) { try { msg.prepareMarshal(jdk()); } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/IndexKeyTypeMessageTest.java b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/IndexKeyTypeMessageTest.java index ca76df0d2002e..ee097ff9bb715 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/IndexKeyTypeMessageTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/IndexKeyTypeMessageTest.java @@ -68,14 +68,15 @@ public void testIndexKeyTypeCode() { assertTrue(prepare(new IndexKeyTypeMessage(keyType)) != IndexKeyTypeMessage.NULL_VALUE_CODE); } - byte prepare(IndexKeyTypeMessage msg){ + /** */ + byte prepare(IndexKeyTypeMessage msg) { try { msg.prepareMarshal(jdk()); } catch (IgniteCheckedException e) { throw new RuntimeException(e); } - + return msg.code(); } @@ -192,7 +193,8 @@ public void testIndexKeyTypeFromCode() throws IgniteCheckedException { msg.finishUnmarshal(jdk(), U.gridClassLoader()); assertSame(IndexKeyType.ENUM, msg.value()); - Throwable t = assertThrowsWithCause(() -> { + Throwable t = assertThrowsWithCause( + () -> { msg.code((byte)23); try { @@ -209,7 +211,8 @@ public void testIndexKeyTypeFromCode() throws IgniteCheckedException { for (byte c = 26; c >= 26 && c <= Byte.MAX_VALUE; ++c) { byte c0 = c; - t = assertThrowsWithCause(() -> { + t = assertThrowsWithCause( + () -> { msg.code(c0); try { @@ -227,15 +230,16 @@ public void testIndexKeyTypeFromCode() throws IgniteCheckedException { for (byte c = (byte)(IndexKeyTypeMessage.NULL_VALUE_CODE + 1); c < -1; ++c) { byte c0 = c; - t = assertThrowsWithCause(() -> { - msg.code(c0); + t = assertThrowsWithCause( + () -> { + msg.code(c0); - try { - msg.finishUnmarshal(jdk(), U.gridClassLoader()); - } - catch (IgniteCheckedException e) { - throw new RuntimeException(e); - } + try { + msg.finishUnmarshal(jdk(), U.gridClassLoader()); + } + catch (IgniteCheckedException e) { + throw new RuntimeException(e); + } }, IllegalArgumentException.class); assertEquals("Unknown index key type code: " + c0, t.getMessage()); From 47c8f1a825ede264351edc2e2c6f55a859c0395f Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 13 Mar 2026 23:13:06 +0300 Subject: [PATCH 03/51] WIP --- .../managers/communication/IndexKeyTypeMessageTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/IndexKeyTypeMessageTest.java b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/IndexKeyTypeMessageTest.java index ee097ff9bb715..4264d2772f877 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/IndexKeyTypeMessageTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/IndexKeyTypeMessageTest.java @@ -240,7 +240,7 @@ public void testIndexKeyTypeFromCode() throws IgniteCheckedException { catch (IgniteCheckedException e) { throw new RuntimeException(e); } - }, IllegalArgumentException.class); + }, IllegalArgumentException.class); assertEquals("Unknown index key type code: " + c0, t.getMessage()); } From d36d40b7e371cbf56babedac6073defe7e0647dc Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Sun, 15 Mar 2026 21:40:58 +0300 Subject: [PATCH 04/51] WIP --- .../ignite/internal/cache/query/index/IndexKeyTypeMessage.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexKeyTypeMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexKeyTypeMessage.java index ba6e55b3db0c2..6364ade45d852 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexKeyTypeMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexKeyTypeMessage.java @@ -53,6 +53,7 @@ public IndexKeyTypeMessage(@Nullable IndexKeyType keyType) { /** Constructor. */ public IndexKeyTypeMessage(int keyTypeCode) { code = (byte)keyTypeCode; + val = decode(code); } /** @return Code. */ @@ -69,6 +70,8 @@ public void code(byte code) { /** @return Index key type. */ public @Nullable IndexKeyType value() { + assert val != null; + return val; } From 07720796fdbea8d0ecc87b25993c01d9419d0eb7 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Sun, 15 Mar 2026 21:41:38 +0300 Subject: [PATCH 05/51] WIP --- .../ignite/internal/cache/query/index/IndexKeyTypeMessage.java | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexKeyTypeMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexKeyTypeMessage.java index 6364ade45d852..b5283f625640e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexKeyTypeMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexKeyTypeMessage.java @@ -48,6 +48,7 @@ public IndexKeyTypeMessage() { /** Constructor. */ public IndexKeyTypeMessage(@Nullable IndexKeyType keyType) { val = keyType; + code = encode(keyType); } /** Constructor. */ From 6b3ce94814ef38b15b066cbbdda0a59c895d4735 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Mon, 16 Mar 2026 16:04:01 +0300 Subject: [PATCH 06/51] WIP --- .../discovery/SecurityAwareCustomMessageWrapper.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/SecurityAwareCustomMessageWrapper.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/SecurityAwareCustomMessageWrapper.java index 90e09e1cccdd3..163c2b93cd61e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/SecurityAwareCustomMessageWrapper.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/SecurityAwareCustomMessageWrapper.java @@ -28,8 +28,6 @@ import org.apache.ignite.spi.discovery.DiscoverySpiCustomMessage; import org.jetbrains.annotations.Nullable; -import static org.apache.ignite.marshaller.Marshallers.jdk; - /** Custom message wrapper with ID of security subject that initiated the current message. */ public class SecurityAwareCustomMessageWrapper extends DiscoverySpiCustomMessage implements MarshallableMessage { /** */ @@ -44,11 +42,12 @@ public class SecurityAwareCustomMessageWrapper extends DiscoverySpiCustomMessage /** */ // TODO: Should be removed in https://issues.apache.org/jira/browse/IGNITE-27627 + @Order(1) Message msg; /** Serialized message bytes. */ // TODO: Should be removed in https://issues.apache.org/jira/browse/IGNITE-27627 - @Order(1) + @Order(2) byte[] msgBytes; /** Default constructor for {@link MessageFactory}. */ @@ -101,13 +100,13 @@ public DiscoveryCustomMessage delegate() { /** {@inheritDoc} */ @Override public void prepareMarshal(Marshaller marsh) throws IgniteCheckedException { - if (delegate instanceof Message) - msgBytes = U.marshal(jdk(), delegate); + if (!(delegate instanceof Message)) + msgBytes = U.marshal(marsh, delegate); } /** {@inheritDoc} */ @Override public void finishUnmarshal(Marshaller marsh, ClassLoader clsLdr) throws IgniteCheckedException { if (msgBytes != null) - delegate = U.unmarshal(jdk(), msgBytes, U.gridClassLoader()); + delegate = U.unmarshal(marsh, msgBytes, U.gridClassLoader()); } } From 0cd6fe7cea957da63e2d23a434b6d2562612abaf Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Mon, 16 Mar 2026 16:47:21 +0300 Subject: [PATCH 07/51] WIP --- .../communication/GridIoMessageFactory.java | 5 +- .../dht/preloader/GridDhtPartitionMap.java | 98 +++---------------- 2 files changed, 19 insertions(+), 84 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java index 7f4db0d46986f..d6a43d9e66bf0 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java @@ -182,7 +182,7 @@ import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionFullMap; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionFullMapSerializer; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionMap; -import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionMapSerializer; +import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionMapMarshallableSerializer; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionSupplyMessage; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionSupplyMessageSerializer; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsFullMessage; @@ -561,7 +561,8 @@ public GridIoMessageFactory(Marshaller marsh, ClassLoader clsLdr) { factory.register(IndexKeyTypeMessage.TYPE_CODE, IndexKeyTypeMessage::new, new IndexKeyTypeMessageMarshallableSerializer(marsh, clsLdr)); factory.register(GridPartitionStateMap.TYPE_CODE, GridPartitionStateMap::new, new GridPartitionStateMapSerializer()); - factory.register(GridDhtPartitionMap.TYPE_CODE, GridDhtPartitionMap::new, new GridDhtPartitionMapSerializer()); + factory.register(GridDhtPartitionMap.TYPE_CODE, GridDhtPartitionMap::new, + new GridDhtPartitionMapMarshallableSerializer(marsh, clsLdr)); factory.register(GridDhtPartitionFullMap.TYPE_CODE, GridDhtPartitionFullMap::new, new GridDhtPartitionFullMapSerializer()); // [-3..119] [124..129] [-23..-28] [-36..-55] [183..188] - this diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionMap.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionMap.java index b343d55d11b02..df65a7483bd88 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionMap.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionMap.java @@ -18,34 +18,28 @@ package org.apache.ignite.internal.processors.cache.distributed.dht.preloader; import java.io.Externalizable; -import java.io.IOException; -import java.io.ObjectInput; -import java.io.ObjectOutput; import java.util.Map; import java.util.Set; import java.util.UUID; import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; -import org.apache.ignite.configuration.CacheConfiguration; +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.distributed.dht.topology.GridDhtPartitionState; import org.apache.ignite.internal.util.GridPartitionStateMap; 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.apache.ignite.marshaller.Marshaller; +import org.apache.ignite.plugin.extensions.communication.MarshallableMessage; import static org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionState.MOVING; /** * Partition map from single node. */ -public class GridDhtPartitionMap implements Comparable, Externalizable, Message { +public class GridDhtPartitionMap implements Comparable, MarshallableMessage { /** Type code. */ public static final short TYPE_CODE = 518; - /** */ - private static final long serialVersionUID = 0L; - /** Node ID. */ @Order(0) protected UUID nodeId; @@ -59,7 +53,7 @@ public class GridDhtPartitionMap implements Comparable, Ext protected AffinityTopologyVersion top; /** */ - @Order(value = 3, method = "map") + @Order(3) protected GridPartitionStateMap map; /** */ @@ -206,17 +200,6 @@ public GridPartitionStateMap map() { return map; } - /** - * @param map Partitions state map. - */ - public void map(GridPartitionStateMap map) { - this.map = new GridPartitionStateMap(); - - if (map != null) - for (Map.Entry entry : map.entrySet()) - put(entry.getKey(), entry.getValue()); - } - /** * @return Node ID. */ @@ -271,66 +254,6 @@ public AffinityTopologyVersion topologyVersion() { return Long.compare(updateSeq, o.updateSeq); } - /** {@inheritDoc} */ - @Override public void writeExternal(ObjectOutput out) throws IOException { - U.writeUuid(out, nodeId); - - out.writeLong(updateSeq); - - int size = map.size(); - - out.writeInt(size); - - int i = 0; - - for (Map.Entry entry : map.entrySet()) { - int ordinal = entry.getValue().ordinal(); - - assert ordinal == (ordinal & 0x7); - assert entry.getKey() < CacheConfiguration.MAX_PARTITIONS_COUNT : entry.getKey(); - - out.writeByte(ordinal); - out.writeShort(entry.getKey()); - - i++; - } - - assert i == size : "Invalid size [size1=" + size + ", size2=" + i + ']'; - - if (top != null) { - out.writeLong(topologyVersion().topologyVersion()); - out.writeInt(topologyVersion().minorTopologyVersion()); - } - else { - out.writeLong(0); - out.writeInt(0); - } - } - - /** {@inheritDoc} */ - @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { - nodeId = U.readUuid(in); - - updateSeq = in.readLong(); - - int size = in.readInt(); - - map = new GridPartitionStateMap(); - - for (int i = 0; i < size; i++) { - int ordinal = in.readUnsignedByte(); - int part = in.readUnsignedShort(); - - put(part, GridDhtPartitionState.fromOrdinal(ordinal)); - } - - long ver = in.readLong(); - int minorVer = in.readInt(); - - if (ver != 0) - top = new AffinityTopologyVersion(ver, minorVer); - } - /** {@inheritDoc} */ @Override public boolean equals(Object o) { if (this == o) @@ -362,4 +285,15 @@ public String toFullString() { @Override public short directType() { return TYPE_CODE; } + + /** {@inheritDoc} */ + @Override public void prepareMarshal(Marshaller marsh) throws IgniteCheckedException { + // No-op. + } + + /** {@inheritDoc} */ + @Override public void finishUnmarshal(Marshaller marsh, ClassLoader clsLdr) throws IgniteCheckedException { + for (Map.Entry entry : map.entrySet()) + put(entry.getKey(), entry.getValue()); + } } From 1053002a7bf63dce611a0fa0990f913e295abe09 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Mon, 16 Mar 2026 17:07:03 +0300 Subject: [PATCH 08/51] WIP --- .../communication/GridIoMessageFactory.java | 5 +-- .../GridDhtPartitionsFullMessage.java | 32 +++++++++---------- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java index d6a43d9e66bf0..183204b68818d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java @@ -186,7 +186,7 @@ import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionSupplyMessage; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionSupplyMessageSerializer; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsFullMessage; -import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsFullMessageSerializer; +import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsFullMessageMarshallableSerializer; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsSingleMessage; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsSingleMessageSerializer; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsSingleRequest; @@ -438,7 +438,8 @@ public GridIoMessageFactory(Marshaller marsh, ClassLoader clsLdr) { factory.register((short)42, GridDhtForceKeysRequest::new, new GridDhtForceKeysRequestSerializer()); factory.register((short)43, GridDhtForceKeysResponse::new, new GridDhtForceKeysResponseSerializer()); factory.register((short)45, GridDhtPartitionDemandMessage::new, new GridDhtPartitionDemandMessageSerializer()); - factory.register((short)46, GridDhtPartitionsFullMessage::new, new GridDhtPartitionsFullMessageSerializer()); + factory.register((short)46, GridDhtPartitionsFullMessage::new, + new GridDhtPartitionsFullMessageMarshallableSerializer(marsh, clsLdr)); factory.register((short)47, GridDhtPartitionsSingleMessage::new, new GridDhtPartitionsSingleMessageSerializer()); factory.register((short)48, GridDhtPartitionsSingleRequest::new, new GridDhtPartitionsSingleRequestSerializer()); factory.register((short)49, GridNearGetRequest::new, new GridNearGetRequestSerializer()); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsFullMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsFullMessage.java index 37079381e9f43..98403fbf1ba2d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsFullMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsFullMessage.java @@ -40,6 +40,8 @@ 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.marshaller.Marshaller; +import org.apache.ignite.plugin.extensions.communication.MarshallableMessage; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -48,7 +50,7 @@ * GridDhtPartitionsSingleMessage}s were received.
May be also compacted as part of {@link * CacheAffinityChangeMessage} for node left or failed case.
*/ -public class GridDhtPartitionsFullMessage extends GridDhtPartitionsAbstractMessage { +public class GridDhtPartitionsFullMessage extends GridDhtPartitionsAbstractMessage implements MarshallableMessage { /** */ private static final byte REBALANCED_FLAG_MASK = 0x01; @@ -99,10 +101,10 @@ public class GridDhtPartitionsFullMessage extends GridDhtPartitionsAbstractMessa * Used as a stub for serialization of {@link #errs}. * All logic resides within getter and setter. */ - @Order(value = 7, method = "errorMessages") + @Order(7) @Compress @SuppressWarnings("unused") - private Map errMsgs; + Map errMsgs; /** */ @Order(8) @@ -367,20 +369,6 @@ void setErrorsMap(Map errs) { this.errs = new HashMap<>(errs); } - /** - * @return Error messages map. - */ - public Map errorMessages() { - return errs == null ? null : F.viewReadOnly(errs, ErrorMessage::new); - } - - /** - * @param errMsgs Error messages map. - */ - public void errorMessages(Map errMsgs) { - errs = errMsgs == null ? null : F.viewReadOnly(errMsgs, e -> e.error()); - } - /** * Rebalance finished. */ @@ -531,4 +519,14 @@ private Map copyPartitionsMap(Map e.error()); + } } From f3d351a00e42815ce901f2825612cf0e646c8270 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Mon, 16 Mar 2026 17:12:46 +0300 Subject: [PATCH 09/51] WIP --- .../preloader/IgniteDhtDemandedPartitionsMap.java | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/IgniteDhtDemandedPartitionsMap.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/IgniteDhtDemandedPartitionsMap.java index e521edafcf1a6..3c718f58c3cb0 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/IgniteDhtDemandedPartitionsMap.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/IgniteDhtDemandedPartitionsMap.java @@ -41,11 +41,11 @@ public class IgniteDhtDemandedPartitionsMap implements Serializable, Message { private static final long serialVersionUID = 0L; /** Map of partitions that will be preloaded from history. (partId -> (fromCntr, toCntr)). */ - @Order(value = 0, method = "historicalMap") + @Order(0) CachePartitionPartialCountersMap historical; /** Set of partitions that require full rebalancing. */ - @Order(value = 1, method = "fullSet") + @Order(1) @GridToStringInclude Set full; @@ -151,11 +151,6 @@ public CachePartitionPartialCountersMap historicalMap() { return historical; } - /** */ - public void historicalMap(CachePartitionPartialCountersMap historical) { - this.historical = historical; - } - /** */ public Set fullSet() { if (full == null) @@ -164,11 +159,6 @@ public Set fullSet() { return Collections.unmodifiableSet(full); } - /** */ - public void fullSet(Set full) { - this.full = full; - } - /** */ public Set historicalSet() { if (historical == null) From 6beb42815d8ff156db1cadc33bcc155aaa571340 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Mon, 16 Mar 2026 17:15:22 +0300 Subject: [PATCH 10/51] WIP --- .../processors/cache/distributed/near/GridNearGetResponse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetResponse.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetResponse.java index 937abedccd23a..0fec84749f5da 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetResponse.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetResponse.java @@ -55,7 +55,7 @@ public class GridNearGetResponse extends GridCacheIdMessage implements GridCache /** Result. */ @GridToStringInclude - @Order(value = 3, method = "entries") + @Order(3) Collection entries; /** Keys to retry due to ownership shift. */ From c95dec379718b3796a12c9b666beb7e44ec6bafd Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Mon, 16 Mar 2026 17:16:05 +0300 Subject: [PATCH 11/51] WIP --- .../distributed/near/GridNearSingleGetResponse.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) 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 d8d3bbc59cff7..c3c73676c980f 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 @@ -50,7 +50,7 @@ public class GridNearSingleGetResponse extends GridCacheIdMessage implements Gri Message res; /** Topology version. */ - @Order(value = 2, method = "topologyVersion") + @Order(2) AffinityTopologyVersion topVer; /** Error message. */ @@ -127,13 +127,6 @@ public void errorMessage(ErrorMessage errMsg) { return topVer != null ? topVer : super.topologyVersion(); } - /** - * @param topVer Topology version. - */ - public void topologyVersion(AffinityTopologyVersion topVer) { - this.topVer = topVer; - } - /** * @return {@code True} if invalid partitions error occurred. */ From bd5fb78647bd99e70e27c97a3d7fd1bb9d1a71ab Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Mon, 16 Mar 2026 17:18:55 +0300 Subject: [PATCH 12/51] WIP --- .../processors/cache/query/GridCacheQueryRequest.java | 9 +-------- 1 file changed, 1 insertion(+), 8 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 9ab8a49a0ace0..7e99db3bce409 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 @@ -151,7 +151,7 @@ public class GridCacheQueryRequest extends GridCacheIdMessage implements GridCac int part = -1; /** */ - @Order(value = 19, method = "topologyVersion") + @Order(19) AffinityTopologyVersion topVer; /** Set of keys that must be skiped during iteration. */ @@ -406,13 +406,6 @@ private static byte setDataPageScanEnabled(int flags, Boolean enabled) { return topVer != null ? topVer : AffinityTopologyVersion.NONE; } - /** - * @param topVer Topology version. - */ - public void topologyVersion(AffinityTopologyVersion topVer) { - this.topVer = topVer; - } - /** {@inheritDoc} */ @Override public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { super.prepareMarshal(ctx); From 0f9e18c2b5cee46ea88e951da557d2b630a335f0 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Mon, 16 Mar 2026 17:30:13 +0300 Subject: [PATCH 13/51] WIP --- .../continuous/CacheContinuousQueryEntry.java | 36 ++----------------- 1 file changed, 3 insertions(+), 33 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 3b7e40f84f5be..5782de5b7d7e3 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 @@ -55,17 +55,17 @@ public class CacheContinuousQueryEntry implements GridCacheDeployable, Message { /** Key. */ @GridToStringInclude - @Order(value = 2, method = "serializedKey") + @Order(2) KeyCacheObject key; /** New value. */ @GridToStringInclude - @Order(value = 3, method = "serializedNewValue") + @Order(3) CacheObject newVal; /** Old value. */ @GridToStringInclude - @Order(value = 4, method = "serializedOldValue") + @Order(4) CacheObject oldVal; /** Cache name. */ @@ -322,53 +322,23 @@ void unmarshal(GridCacheContext cctx, @Nullable ClassLoader ldr) throws IgniteCh * @return Key. */ KeyCacheObject key() { - return key; - } - - /** */ - KeyCacheObject serializedKey() { return isFiltered() ? null : key; } - /** */ - void serializedKey(KeyCacheObject key) { - this.key = key; - } - /** * @return New value. */ CacheObject newValue() { - return newVal; - } - - /** */ - CacheObject serializedNewValue() { return isFiltered() ? null : newVal; } - /** */ - void serializedNewValue(CacheObject newVal) { - this.newVal = newVal; - } - /** * @return Old value. */ CacheObject oldValue() { - return oldVal; - } - - /** */ - CacheObject serializedOldValue() { return isFiltered() ? null : oldVal; } - /** */ - void serializedOldValue(CacheObject oldVal) { - this.oldVal = oldVal; - } - /** {@inheritDoc} */ @Override public void prepare(GridDeploymentInfo depInfo) { this.depInfo = depInfo; From b7e48de0e477768eca6ea9734d6aa36031d59e10 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Mon, 16 Mar 2026 17:32:59 +0300 Subject: [PATCH 14/51] WIP --- .../transactions/TxEntryValueHolder.java | 20 +------------------ 1 file changed, 1 insertion(+), 19 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 a6e33f449670c..970b2a36b79e0 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 @@ -40,7 +40,7 @@ */ public class TxEntryValueHolder implements Message { /** Stored value. */ - @Order(value = 0, method = "storedValue") + @Order(0) @GridToStringInclude(sensitive = true) @Nullable CacheObject val; @@ -88,27 +88,9 @@ public boolean hasValue() { * @return Value. */ public CacheObject value() { - return val; - } - - /** - * Used only in serializer. - * - * @return Stored value or null. - */ - public @Nullable CacheObject storedValue() { return hasWriteVal ? val : null; } - /** - * Used only in serializer. - * - * @param val Stored value. - */ - public void storedValue(@Nullable CacheObject val) { - this.val = val; - } - /** * @return Cache operation. */ From 4004d12d73fee186baf894748b9332b0a247ee95 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Mon, 16 Mar 2026 17:46:46 +0300 Subject: [PATCH 15/51] WIP --- .../discovery/DiscoveryMessageFactory.java | 10 +++-- .../SchemaAbstractDiscoveryMessage.java | 38 ++++++++----------- 2 files changed, 22 insertions(+), 26 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java index b3e0cd0c08fbd..ccb089936fd22 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java @@ -60,9 +60,9 @@ import org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageUpdateMessage; import org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageUpdateMessageSerializer; import org.apache.ignite.internal.processors.query.schema.message.SchemaFinishDiscoveryMessage; -import org.apache.ignite.internal.processors.query.schema.message.SchemaFinishDiscoveryMessageSerializer; +import org.apache.ignite.internal.processors.query.schema.message.SchemaFinishDiscoveryMessageMarshallableSerializer; import org.apache.ignite.internal.processors.query.schema.message.SchemaProposeDiscoveryMessage; -import org.apache.ignite.internal.processors.query.schema.message.SchemaProposeDiscoveryMessageSerializer; +import org.apache.ignite.internal.processors.query.schema.message.SchemaProposeDiscoveryMessageMarshallableSerializer; import org.apache.ignite.marshaller.Marshaller; import org.apache.ignite.plugin.extensions.communication.MessageFactory; import org.apache.ignite.plugin.extensions.communication.MessageFactoryProvider; @@ -206,8 +206,10 @@ public DiscoveryMessageFactory(Marshaller marsh, ClassLoader clsLdr) { new SecurityAwareCustomMessageWrapperMarshallableSerializer(marsh, clsLdr)); factory.register((short)502, MetadataRemoveAcceptedMessage::new, new MetadataRemoveAcceptedMessageSerializer()); factory.register((short)503, MetadataRemoveProposedMessage::new, new MetadataRemoveProposedMessageSerializer()); - factory.register((short)504, SchemaProposeDiscoveryMessage::new, new SchemaProposeDiscoveryMessageSerializer()); - factory.register((short)505, SchemaFinishDiscoveryMessage::new, new SchemaFinishDiscoveryMessageSerializer()); + factory.register((short)504, SchemaProposeDiscoveryMessage::new, + new SchemaProposeDiscoveryMessageMarshallableSerializer(marsh, clsLdr)); + factory.register((short)505, SchemaFinishDiscoveryMessage::new, + new SchemaFinishDiscoveryMessageMarshallableSerializer(marsh, clsLdr)); factory.register((short)506, WalStateFinishMessage::new, new WalStateFinishMessageSerializer()); factory.register((short)507, WalStateProposeMessage::new, new WalStateProposeMessageSerializer()); factory.register((short)508, MetadataUpdateAcceptedMessage::new, diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/schema/message/SchemaAbstractDiscoveryMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/schema/message/SchemaAbstractDiscoveryMessage.java index d4b7ef01a449b..30daffcf16090 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/schema/message/SchemaAbstractDiscoveryMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/schema/message/SchemaAbstractDiscoveryMessage.java @@ -27,14 +27,15 @@ 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.apache.ignite.marshaller.Marshaller; import org.apache.ignite.marshaller.Marshallers; -import org.apache.ignite.plugin.extensions.communication.Message; +import org.apache.ignite.plugin.extensions.communication.MarshallableMessage; import org.jetbrains.annotations.Nullable; /** * Abstract discovery message for schema operations. */ -public abstract class SchemaAbstractDiscoveryMessage implements DiscoveryCustomMessage, Message { +public abstract class SchemaAbstractDiscoveryMessage implements DiscoveryCustomMessage, MarshallableMessage { /** */ private static final long serialVersionUID = 0L; @@ -50,7 +51,7 @@ public abstract class SchemaAbstractDiscoveryMessage implements DiscoveryCustomM * Operation bytes. Serialized reprezentation of schema operation. * TODO Should be removed in IGNITE-27559 */ - @Order(value = 1, method = "operationBytes") + @Order(1) byte[] opBytes; /** Error message. */ @@ -100,25 +101,6 @@ public SchemaAbstractOperation operation() { } } - /** - * @return Operation bytes. - */ - public byte[] operationBytes() { - try { - return opBytes != null ? opBytes : U.marshal(Marshallers.jdk(), op); - } - catch (IgniteCheckedException e) { - throw new IgniteException("Failed to marshal schema operation", e); - } - } - - /** - * @param opBytes Operation bytes. - */ - public void operationBytes(byte[] opBytes) { - this.opBytes = opBytes; - } - /** * Set error. * @@ -165,4 +147,16 @@ public boolean hasError() { @Override public String toString() { return S.toString(SchemaAbstractDiscoveryMessage.class, this); } + + /** {@inheritDoc} */ + @Override public void prepareMarshal(Marshaller marsh) throws IgniteCheckedException { + if (op != null) + opBytes = U.marshal(marsh, op); + } + + /** {@inheritDoc} */ + @Override public void finishUnmarshal(Marshaller marsh, ClassLoader clsLdr) throws IgniteCheckedException { + if (opBytes != null) + op = U.unmarshal(marsh, opBytes, clsLdr); + } } From 67a4992d156e886815369e5d496092acbb45ccf5 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Mon, 16 Mar 2026 18:05:18 +0300 Subject: [PATCH 16/51] WIP --- .../cache/transactions/IgniteTxEntry.java | 10 -------- .../transactions/TxEntryValueHolder.java | 24 +------------------ 2 files changed, 1 insertion(+), 33 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 1c80cfc75e0d5..9f17f0edfaafc 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 @@ -945,17 +945,12 @@ public void marshal(GridCacheSharedContext ctx, boolean transferExpiry) th 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()); } /** @@ -1026,13 +1021,8 @@ public void unmarshal( 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); } /** 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 970b2a36b79e0..5d00a647ffea0 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; @@ -88,7 +85,7 @@ public boolean hasValue() { * @return Value. */ public CacheObject value() { - return hasWriteVal ? val : null; + return val; } /** @@ -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 84b7f6f291b39f18572057a3f50f593a5ad16ae0 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Tue, 17 Mar 2026 15:31:42 +0300 Subject: [PATCH 17/51] WIP --- .../communication/GridIoMessageFactory.java | 5 ++--- .../dht/preloader/GridDhtPartitionMap.java | 20 ++++--------------- 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java index 8182f698ebf60..5fcb5529a1740 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java @@ -182,7 +182,7 @@ import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionFullMap; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionFullMapSerializer; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionMap; -import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionMapMarshallableSerializer; +import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionMapSerializer; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionSupplyMessage; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionSupplyMessageSerializer; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsFullMessage; @@ -564,8 +564,7 @@ public GridIoMessageFactory(Marshaller marsh, ClassLoader clsLdr) { factory.register(IndexKeyTypeMessage.TYPE_CODE, IndexKeyTypeMessage::new, new IndexKeyTypeMessageMarshallableSerializer(marsh, clsLdr)); factory.register(GridPartitionStateMap.TYPE_CODE, GridPartitionStateMap::new, new GridPartitionStateMapSerializer()); - factory.register(GridDhtPartitionMap.TYPE_CODE, GridDhtPartitionMap::new, - new GridDhtPartitionMapMarshallableSerializer(marsh, clsLdr)); + factory.register(GridDhtPartitionMap.TYPE_CODE, GridDhtPartitionMap::new, new GridDhtPartitionMapSerializer()); factory.register(GridDhtPartitionFullMap.TYPE_CODE, GridDhtPartitionFullMap::new, new GridDhtPartitionFullMapSerializer()); // [-3..119] [124..129] [-23..-28] [-36..-55] [183..188] - this diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionMap.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionMap.java index df65a7483bd88..7bda312f9b650 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionMap.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionMap.java @@ -22,21 +22,19 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; -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.distributed.dht.topology.GridDhtPartitionState; import org.apache.ignite.internal.util.GridPartitionStateMap; import org.apache.ignite.internal.util.typedef.internal.S; -import org.apache.ignite.marshaller.Marshaller; -import org.apache.ignite.plugin.extensions.communication.MarshallableMessage; +import org.apache.ignite.plugin.extensions.communication.Message; import static org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionState.MOVING; /** * Partition map from single node. */ -public class GridDhtPartitionMap implements Comparable, MarshallableMessage { +public class GridDhtPartitionMap implements Comparable, Message { /** Type code. */ public static final short TYPE_CODE = 518; @@ -57,7 +55,8 @@ public class GridDhtPartitionMap implements Comparable, Mar protected GridPartitionStateMap map; /** */ - private volatile int moving; + @Order(4) + volatile int moving; /** */ private static final AtomicIntegerFieldUpdater MOVING_FIELD_UPDATER = @@ -285,15 +284,4 @@ public String toFullString() { @Override public short directType() { return TYPE_CODE; } - - /** {@inheritDoc} */ - @Override public void prepareMarshal(Marshaller marsh) throws IgniteCheckedException { - // No-op. - } - - /** {@inheritDoc} */ - @Override public void finishUnmarshal(Marshaller marsh, ClassLoader clsLdr) throws IgniteCheckedException { - for (Map.Entry entry : map.entrySet()) - put(entry.getKey(), entry.getValue()); - } } From a86699aecd634093d08539af99a16f4683243455 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Tue, 17 Mar 2026 15:43:48 +0300 Subject: [PATCH 18/51] WIP --- .../discovery/DiscoveryMessageFactory.java | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java index 966637081be59..c4d48f514d418 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java @@ -68,9 +68,19 @@ import org.apache.ignite.internal.processors.query.QueryField; import org.apache.ignite.internal.processors.query.QueryFieldMarshallableSerializer; import org.apache.ignite.internal.processors.query.schema.message.SchemaFinishDiscoveryMessage; -import org.apache.ignite.internal.processors.query.schema.message.SchemaFinishDiscoveryMessageMarshallableSerializer; +import org.apache.ignite.internal.processors.query.schema.message.SchemaFinishDiscoveryMessageSerializer; import org.apache.ignite.internal.processors.query.schema.message.SchemaProposeDiscoveryMessage; import org.apache.ignite.internal.processors.query.schema.message.SchemaProposeDiscoveryMessageSerializer; +import org.apache.ignite.internal.processors.query.schema.operation.SchemaAddQueryEntityOperation; +import org.apache.ignite.internal.processors.query.schema.operation.SchemaAddQueryEntityOperationMarshallableSerializer; +import org.apache.ignite.internal.processors.query.schema.operation.SchemaAlterTableAddColumnOperation; +import org.apache.ignite.internal.processors.query.schema.operation.SchemaAlterTableAddColumnOperationSerializer; +import org.apache.ignite.internal.processors.query.schema.operation.SchemaAlterTableDropColumnOperation; +import org.apache.ignite.internal.processors.query.schema.operation.SchemaAlterTableDropColumnOperationSerializer; +import org.apache.ignite.internal.processors.query.schema.operation.SchemaIndexCreateOperation; +import org.apache.ignite.internal.processors.query.schema.operation.SchemaIndexCreateOperationMarshallableSerializer; +import org.apache.ignite.internal.processors.query.schema.operation.SchemaIndexDropOperation; +import org.apache.ignite.internal.processors.query.schema.operation.SchemaIndexDropOperationSerializer; import org.apache.ignite.marshaller.Marshaller; import org.apache.ignite.plugin.extensions.communication.MessageFactory; import org.apache.ignite.plugin.extensions.communication.MessageFactoryProvider; @@ -163,14 +173,13 @@ public DiscoveryMessageFactory(Marshaller marsh, ClassLoader clsLdr) { factory.register((short)-115, SchemaAlterTableAddColumnOperation::new, new SchemaAlterTableAddColumnOperationSerializer()); factory.register((short)-114, SchemaIndexCreateOperation::new, - new SchemaIndexCreateOperationMarshallableSerializer(cstDataMarshall, cstDataMarshallClsLdr)); + new SchemaIndexCreateOperationMarshallableSerializer(marsh, clsLdr)); factory.register((short)-113, SchemaIndexDropOperation::new, new SchemaIndexDropOperationSerializer()); factory.register((short)-112, SchemaAlterTableDropColumnOperation::new, new SchemaAlterTableDropColumnOperationSerializer()); factory.register((short)-111, SchemaAddQueryEntityOperation::new, - new SchemaAddQueryEntityOperationMarshallableSerializer(cstDataMarshall, cstDataMarshallClsLdr)); - factory.register((short)-110, QueryField::new, new QueryFieldMarshallableSerializer(cstDataMarshall, - cstDataMarshallClsLdr)); + new SchemaAddQueryEntityOperationMarshallableSerializer(marsh, clsLdr)); + factory.register((short)-110, QueryField::new, new QueryFieldMarshallableSerializer(marsh, clsLdr)); factory.register((short)-109, User::new, new UserSerializer()); factory.register((short)-108, UserManagementOperation::new, new UserManagementOperationSerializer()); factory.register((short)-107, NodeSpecificData::new, new NodeSpecificDataSerializer()); @@ -225,10 +234,8 @@ public DiscoveryMessageFactory(Marshaller marsh, ClassLoader clsLdr) { new SecurityAwareCustomMessageWrapperMarshallableSerializer(marsh, clsLdr)); factory.register((short)502, MetadataRemoveAcceptedMessage::new, new MetadataRemoveAcceptedMessageSerializer()); factory.register((short)503, MetadataRemoveProposedMessage::new, new MetadataRemoveProposedMessageSerializer()); - factory.register((short)504, SchemaProposeDiscoveryMessage::new, - new SchemaProposeDiscoveryMessageMarshallableSerializer(marsh, clsLdr)); - factory.register((short)505, SchemaFinishDiscoveryMessage::new, - new SchemaFinishDiscoveryMessageMarshallableSerializer(marsh, clsLdr)); + factory.register((short)504, SchemaProposeDiscoveryMessage::new, new SchemaProposeDiscoveryMessageSerializer()); + factory.register((short)505, SchemaFinishDiscoveryMessage::new, new SchemaFinishDiscoveryMessageSerializer()); factory.register((short)506, WalStateFinishMessage::new, new WalStateFinishMessageSerializer()); factory.register((short)507, WalStateProposeMessage::new, new WalStateProposeMessageSerializer()); factory.register((short)508, MetadataUpdateAcceptedMessage::new, From 2bbcbf7d2e4d9b6847a33fd70193d21a73c6d7c4 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Tue, 17 Mar 2026 18:08:42 +0300 Subject: [PATCH 19/51] WIP --- .../ignite/internal/cache/query/index/IndexKeyTypeMessage.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexKeyTypeMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexKeyTypeMessage.java index b5283f625640e..b21289fcc04be 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexKeyTypeMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexKeyTypeMessage.java @@ -71,8 +71,6 @@ public void code(byte code) { /** @return Index key type. */ public @Nullable IndexKeyType value() { - assert val != null; - return val; } From f62007128fad85a38761acfdf1615c8da82f373a Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Tue, 17 Mar 2026 22:55:48 +0300 Subject: [PATCH 20/51] WIP --- .../discovery/DiscoveryMessageFactory.java | 18 ++++++----- .../TcpDiscoveryAbstractTraceableMessage.java | 30 ++++++++++--------- .../TcpDiscoveryCustomEventMessage.java | 2 +- 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java index 387165383cac9..ec02cc2208aaf 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java @@ -115,7 +115,7 @@ import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryConnectionCheckMessage; import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryConnectionCheckMessageSerializer; import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryCustomEventMessage; -import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryCustomEventMessageSerializer; +import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryCustomEventMessageMarshallableSerializer; import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryDiscardMessage; import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryDiscardMessageSerializer; import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryDuplicateIdMessage; @@ -135,11 +135,11 @@ import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeAddedMessage; import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeAddedMessageMarshallableSerializer; import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeFailedMessage; -import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeFailedMessageSerializer; +import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeFailedMessageMarshallableSerializer; import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeFullMetricsMessage; import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeFullMetricsMessageSerializer; import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeLeftMessage; -import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeLeftMessageSerializer; +import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeLeftMessageMarshallableSerializer; import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeMetricsMessage; import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeMetricsMessageSerializer; import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryPingRequest; @@ -149,7 +149,7 @@ import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryRingLatencyCheckMessage; import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryRingLatencyCheckMessageSerializer; import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryServerOnlyCustomEventMessage; -import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryServerOnlyCustomEventMessageSerializer; +import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryServerOnlyCustomEventMessageMarshallableSerializer; import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryStatusCheckMessage; import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryStatusCheckMessageSerializer; @@ -212,16 +212,18 @@ public DiscoveryMessageFactory(Marshaller marsh, ClassLoader clsLdr) { factory.register((short)13, TcpDiscoveryClientMetricsUpdateMessage::new, new TcpDiscoveryClientMetricsUpdateMessageSerializer()); factory.register((short)14, TcpDiscoveryMetricsUpdateMessage::new, new TcpDiscoveryMetricsUpdateMessageSerializer()); factory.register((short)15, TcpDiscoveryClientAckResponse::new, new TcpDiscoveryClientAckResponseSerializer()); - factory.register((short)16, TcpDiscoveryNodeLeftMessage::new, new TcpDiscoveryNodeLeftMessageSerializer()); - factory.register((short)17, TcpDiscoveryNodeFailedMessage::new, new TcpDiscoveryNodeFailedMessageSerializer()); + factory.register((short)16, TcpDiscoveryNodeLeftMessage::new, new TcpDiscoveryNodeLeftMessageMarshallableSerializer(marsh, clsLdr)); + factory.register((short)17, TcpDiscoveryNodeFailedMessage::new, + new TcpDiscoveryNodeFailedMessageMarshallableSerializer(marsh, clsLdr)); factory.register((short)18, TcpDiscoveryStatusCheckMessage::new, new TcpDiscoveryStatusCheckMessageSerializer()); factory.register((short)19, TcpDiscoveryNodeAddFinishedMessage::new, new TcpDiscoveryNodeAddFinishedMessageMarshallableSerializer(marsh, clsLdr)); factory.register((short)20, TcpDiscoveryJoinRequestMessage::new, new TcpDiscoveryJoinRequestMessageMarshallableSerializer(marsh, clsLdr)); - factory.register((short)21, TcpDiscoveryCustomEventMessage::new, new TcpDiscoveryCustomEventMessageSerializer()); + factory.register((short)21, TcpDiscoveryCustomEventMessage::new, + new TcpDiscoveryCustomEventMessageMarshallableSerializer(marsh, clsLdr)); factory.register((short)22, TcpDiscoveryServerOnlyCustomEventMessage::new, - new TcpDiscoveryServerOnlyCustomEventMessageSerializer()); + new TcpDiscoveryServerOnlyCustomEventMessageMarshallableSerializer(marsh, clsLdr)); factory.register((short)23, TcpConnectionRequestDiscoveryMessage::new, new TcpConnectionRequestDiscoveryMessageSerializer()); factory.register((short)24, DistributedMetaStorageUpdateMessage::new, new DistributedMetaStorageUpdateMessageSerializer()); factory.register((short)25, DistributedMetaStorageUpdateAckMessage::new, new DistributedMetaStorageUpdateAckMessageSerializer()); diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryAbstractTraceableMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryAbstractTraceableMessage.java index 440766b99ab67..9082b5fc1ca50 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryAbstractTraceableMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryAbstractTraceableMessage.java @@ -18,23 +18,27 @@ package org.apache.ignite.spi.discovery.tcp.messages; import java.util.UUID; +import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.Order; import org.apache.ignite.internal.managers.discovery.DiscoveryMessageFactory; import org.apache.ignite.internal.processors.tracing.messages.SpanContainer; import org.apache.ignite.internal.processors.tracing.messages.TraceableMessage; +import org.apache.ignite.marshaller.Marshaller; +import org.apache.ignite.plugin.extensions.communication.MarshallableMessage; import org.jetbrains.annotations.Nullable; /** * Abstract traceable message for TCP discovery. */ -public abstract class TcpDiscoveryAbstractTraceableMessage extends TcpDiscoveryAbstractMessage implements TraceableMessage { +public abstract class TcpDiscoveryAbstractTraceableMessage extends TcpDiscoveryAbstractMessage + implements TraceableMessage, MarshallableMessage { /** Container. */ private SpanContainer spanContainer = new SpanContainer(); /** Serialization holder of {@link #spanContainer}'s bytes. */ @SuppressWarnings("unused") - @Order(value = 0, method = "spanBytes") - @Nullable byte[] spanBytesHolder; + @Order(0) + @Nullable byte[] spanContainerBytes; /** * Default constructor for {@link DiscoveryMessageFactory}. @@ -74,21 +78,19 @@ public Object readResolve() { return this; } - /** @return {@link #spanContainer}'s bytes. */ - public @Nullable byte[] spanBytes() { - return spanContainer == null ? null : spanContainer.serializedSpanBytes(); + /** {@inheritDoc} */ + @Override public SpanContainer spanContainer() { + return spanContainer; } - /** @param spanBytes {@link #spanContainer}'s bytes. */ - public void spanBytes(@Nullable byte[] spanBytes) { - if (spanBytes == null) - return; - - spanContainer.serializedSpanBytes(spanBytes); + /** {@inheritDoc} */ + @Override public void prepareMarshal(Marshaller marsh) throws IgniteCheckedException { + spanContainerBytes = spanContainer == null ? null : spanContainer.serializedSpanBytes(); } /** {@inheritDoc} */ - @Override public SpanContainer spanContainer() { - return spanContainer; + @Override public void finishUnmarshal(Marshaller marsh, ClassLoader clsLdr) throws IgniteCheckedException { + if (spanContainerBytes != null) + spanContainer.serializedSpanBytes(spanContainerBytes); } } diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java index 4b860f5e96267..00122ce7781d8 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java @@ -101,7 +101,7 @@ public DiscoveryCustomMessage message() { * @param marsh Marshaller. */ // TODO: Should be removed in https://issues.apache.org/jira/browse/IGNITE-27627 - public void prepareMarshal(Marshaller marsh) throws IgniteCheckedException { + @Override public void prepareMarshal(Marshaller marsh) throws IgniteCheckedException { if (msg instanceof Message) serMsg = (Message)msg; else { From 6f38dfca0ab509bf5cc892b291a9542998c15da8 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Tue, 17 Mar 2026 23:52:33 +0300 Subject: [PATCH 21/51] WIP --- .../ignite/spi/discovery/tcp/ClientImpl.java | 13 ++------ .../ignite/spi/discovery/tcp/ServerImpl.java | 20 +------------ .../TcpDiscoveryAbstractTraceableMessage.java | 1 - .../TcpDiscoveryCustomEventMessage.java | 30 ++++++------------- .../TcpDiscoveryNodeFailedMessage.java | 6 +--- .../messages/TcpDiscoveryNodeLeftMessage.java | 6 +--- ...DiscoveryServerOnlyCustomEventMessage.java | 3 -- .../ClientSlowDiscoveryAbstractTest.java | 9 +----- ...shallerCacheClientRequestsMappingTest.java | 4 --- ...IgniteSequentialNodeCrashRecoveryTest.java | 11 +------ .../IncrementalSnapshotJoiningClientTest.java | 11 ++----- .../schema/IndexWithSameNameTestBase.java | 2 -- .../discovery/tcp/BlockTcpDiscoverySpi.java | 9 +----- .../discovery/tcp/TcpDiscoverySelfTest.java | 2 -- 14 files changed, 20 insertions(+), 107 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java index aea469edc80e3..5a0f80b614d35 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java @@ -2595,17 +2595,10 @@ private void processCustomMessage(TcpDiscoveryCustomEventMessage msg) { TcpDiscoveryNode node = nodeId.equals(getLocalNodeId()) ? locNode : rmtNodes.get(nodeId); if (node != null && node.visible()) { - try { - msg.finishUnmarhal(spi.marshaller(), U.resolveClassLoader(spi.ignite().configuration())); - - DiscoveryCustomMessage msgObj = msg.message(); + DiscoveryCustomMessage msgObj = msg.message(); - notifyDiscovery( - EVT_DISCOVERY_CUSTOM_EVT, topVer, node, allVisibleNodes(), msgObj, msg.spanContainer()); - } - catch (Throwable e) { - U.error(log, "Failed to unmarshal discovery custom message.", e); - } + notifyDiscovery( + EVT_DISCOVERY_CUSTOM_EVT, topVer, node, allVisibleNodes(), msgObj, msg.spanContainer()); } else if (log.isDebugEnabled()) log.debug("Received metrics from unknown node: " + nodeId); diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java index 9006c05df5830..93c349e5828b8 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java @@ -6073,15 +6073,6 @@ private void processCustomMessage(TcpDiscoveryCustomEventMessage msg, boolean wa DiscoveryCustomMessage msgObj = null; - try { - msg.finishUnmarhal(spi.marshaller(), U.resolveClassLoader(spi.ignite().configuration())); - - msgObj = msg.message(); - } - catch (Throwable e) { - U.error(log, "Failed to unmarshal discovery custom message.", e); - } - if (msgObj != null) { DiscoveryCustomMessage nextMsg = msgObj.ackMessage(); @@ -6262,16 +6253,7 @@ private void notifyDiscoveryListener(TcpDiscoveryCustomEventMessage msg, boolean if (node == null) return; - DiscoveryCustomMessage msgObj; - - try { - msg.finishUnmarhal(spi.marshaller(), U.resolveClassLoader(spi.ignite().configuration())); - - msgObj = msg.message(); - } - catch (Throwable t) { - throw new IgniteException("Failed to unmarshal discovery custom message: " + msg, t); - } + DiscoveryCustomMessage msgObj = msg.message(); IgniteFuture fut = lsnr.onDiscovery( new DiscoveryNotification( diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryAbstractTraceableMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryAbstractTraceableMessage.java index 9082b5fc1ca50..3e633f4d47b3d 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryAbstractTraceableMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryAbstractTraceableMessage.java @@ -36,7 +36,6 @@ public abstract class TcpDiscoveryAbstractTraceableMessage extends TcpDiscoveryA private SpanContainer spanContainer = new SpanContainer(); /** Serialization holder of {@link #spanContainer}'s bytes. */ - @SuppressWarnings("unused") @Order(0) @Nullable byte[] spanContainerBytes; diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java index 00122ce7781d8..f2779a5dc9b8c 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java @@ -23,7 +23,6 @@ import org.apache.ignite.internal.Order; import org.apache.ignite.internal.managers.discovery.DiscoveryCustomMessage; import org.apache.ignite.internal.managers.discovery.DiscoveryMessageFactory; -import org.apache.ignite.internal.managers.discovery.IncompleteDeserializationException; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.marshaller.Marshaller; @@ -35,10 +34,7 @@ */ @TcpDiscoveryRedirectToClient @TcpDiscoveryEnsureDelivery -public class TcpDiscoveryCustomEventMessage extends TcpDiscoveryAbstractTraceableMessage implements Message { - /** */ - private static final long serialVersionUID = 0L; - +public class TcpDiscoveryCustomEventMessage extends TcpDiscoveryAbstractTraceableMessage { /** */ private volatile DiscoveryCustomMessage msg; @@ -102,12 +98,13 @@ public DiscoveryCustomMessage message() { */ // TODO: Should be removed in https://issues.apache.org/jira/browse/IGNITE-27627 @Override public void prepareMarshal(Marshaller marsh) throws IgniteCheckedException { + super.prepareMarshal(marsh); + if (msg instanceof Message) serMsg = (Message)msg; else { - assert msgBytes == null || msg.isMutable() : "Message bytes are not null for immutable message: msg =" + msg; - - msgBytes = U.marshal(marsh, msg); + if (msg != null) + msgBytes = U.marshal(marsh, msg); } } @@ -118,26 +115,17 @@ public DiscoveryCustomMessage message() { * @param ldr Class loader. */ // TODO: Should be removed in https://issues.apache.org/jira/browse/IGNITE-27627 - public void finishUnmarhal(Marshaller marsh, ClassLoader ldr) throws IgniteCheckedException { + @Override public void finishUnmarshal(Marshaller marsh, ClassLoader ldr) throws IgniteCheckedException { + super.finishUnmarshal(marsh, ldr); + if (msg != null) return; if (serMsg != null) msg = (DiscoveryCustomMessage)serMsg; else { - try { + if (msgBytes != null) msg = U.unmarshal(marsh, msgBytes, ldr); - } - catch (IgniteCheckedException e) { - // Try to resurrect a message in a case of deserialization failure - if (e.getCause() instanceof IncompleteDeserializationException) { - msg = ((IncompleteDeserializationException)e.getCause()).message(); - - return; - } - - throw e; - } } } diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeFailedMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeFailedMessage.java index 7de93d625c738..efc59a5c6a03d 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeFailedMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeFailedMessage.java @@ -20,7 +20,6 @@ import java.util.UUID; import org.apache.ignite.internal.Order; import org.apache.ignite.internal.util.typedef.internal.S; -import org.apache.ignite.plugin.extensions.communication.Message; import org.jetbrains.annotations.Nullable; /** @@ -29,10 +28,7 @@ */ @TcpDiscoveryEnsureDelivery @TcpDiscoveryRedirectToClient -public class TcpDiscoveryNodeFailedMessage extends TcpDiscoveryAbstractTraceableMessage implements Message { - /** */ - private static final long serialVersionUID = 0L; - +public class TcpDiscoveryNodeFailedMessage extends TcpDiscoveryAbstractTraceableMessage { /** ID of the failed node. */ @Order(0) UUID failedNodeId; diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeLeftMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeLeftMessage.java index 8e70196ab051b..fbecab11d3233 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeLeftMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeLeftMessage.java @@ -20,7 +20,6 @@ import java.util.UUID; import org.apache.ignite.internal.managers.discovery.DiscoveryMessageFactory; import org.apache.ignite.internal.util.typedef.internal.S; -import org.apache.ignite.plugin.extensions.communication.Message; /** * Sent by node that is stopping to coordinator across the ring, @@ -28,10 +27,7 @@ */ @TcpDiscoveryEnsureDelivery @TcpDiscoveryRedirectToClient -public class TcpDiscoveryNodeLeftMessage extends TcpDiscoveryAbstractTraceableMessage implements Message { - /** */ - private static final long serialVersionUID = 0L; - +public class TcpDiscoveryNodeLeftMessage extends TcpDiscoveryAbstractTraceableMessage { /** Constructor for {@link DiscoveryMessageFactory}. */ public TcpDiscoveryNodeLeftMessage() { // No-op. diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryServerOnlyCustomEventMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryServerOnlyCustomEventMessage.java index ece2d61f806a6..4ab89a0448629 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryServerOnlyCustomEventMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryServerOnlyCustomEventMessage.java @@ -26,9 +26,6 @@ */ @TcpDiscoveryEnsureDelivery public class TcpDiscoveryServerOnlyCustomEventMessage extends TcpDiscoveryCustomEventMessage { - /** */ - private static final long serialVersionUID = 0L; - /** * Default constructor. */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/ClientSlowDiscoveryAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/ClientSlowDiscoveryAbstractTest.java index d81ef05242002..7fa642f50edeb 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/ClientSlowDiscoveryAbstractTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/ClientSlowDiscoveryAbstractTest.java @@ -92,14 +92,7 @@ static class CustomMessageInterceptingDiscoverySpi extends TcpDiscoverySpi { TcpDiscoveryCustomEventMessage cm = (TcpDiscoveryCustomEventMessage)msg; - try { - cm.finishUnmarhal(marshaller(), U.resolveClassLoader(ignite().configuration())); - - assertNotNull(cm.message()); - } - catch (Throwable throwable) { - throw new RuntimeException(throwable); - } + assertNotNull(cm.message()); if (interceptor != null) interceptor.apply(U.unwrapCustomMessage(cm.message())); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteMarshallerCacheClientRequestsMappingTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteMarshallerCacheClientRequestsMappingTest.java index 658c56872e66c..723fc92885d50 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteMarshallerCacheClientRequestsMappingTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteMarshallerCacheClientRequestsMappingTest.java @@ -163,8 +163,6 @@ private void doTestMarshallingBinaryMappingsLoadedFromClient(boolean receiveMeta try { TcpDiscoveryCustomEventMessage evtMsg = (TcpDiscoveryCustomEventMessage)msg; - evtMsg.finishUnmarhal(marshaller(), U.gridClassLoader()); - DiscoveryCustomMessage delegate = U.unwrapCustomMessage(evtMsg.message()); if (delegate instanceof MappingAcceptedMessage) { @@ -239,8 +237,6 @@ public void testBinaryMetaDelayedForComputeJobResult() throws Exception { try { TcpDiscoveryCustomEventMessage evtMsg = (TcpDiscoveryCustomEventMessage)msg; - evtMsg.finishUnmarhal(marshaller(), U.gridClassLoader()); - DiscoveryCustomMessage delegate = U.unwrapCustomMessage(evtMsg.message()); if (delegate instanceof MappingProposedMessage) { diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgniteSequentialNodeCrashRecoveryTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgniteSequentialNodeCrashRecoveryTest.java index cf36782a8ed90..7485201e912c2 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgniteSequentialNodeCrashRecoveryTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgniteSequentialNodeCrashRecoveryTest.java @@ -354,16 +354,7 @@ public BlockingDiscoverySpi(IgnitePredicate blockPred) { /** */ private DiscoveryCustomMessage extractCustomMessage(TcpDiscoveryCustomEventMessage msg) { - DiscoveryCustomMessage msgObj = null; - - try { - msg.finishUnmarhal(marshaller(), U.gridClassLoader()); - - msgObj = msg.message(); - } - catch (Throwable e) { - U.error(log, "Failed to unmarshal discovery custom message.", e); - } + DiscoveryCustomMessage msgObj = msg.message(); return U.unwrapCustomMessage(msgObj); } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotJoiningClientTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotJoiningClientTest.java index 6e5f536f9ded0..1514a9be26ab1 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotJoiningClientTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotJoiningClientTest.java @@ -245,15 +245,8 @@ private static class CoordinatorBlockingDiscoverySpi extends TcpDiscoverySpi { if (msg instanceof TcpDiscoveryCustomEventMessage && rcvStartSnpReq != null) { TcpDiscoveryCustomEventMessage m = (TcpDiscoveryCustomEventMessage)msg; - try { - m.finishUnmarhal(marshaller(), U.resolveClassLoader(ignite().configuration())); - - if (U.unwrapCustomMessage(m.message()) instanceof InitMessage) - rcvStartSnpReq.countDown(); - } - catch (Throwable e) { - // No-op. - } + if (U.unwrapCustomMessage(m.message()) instanceof InitMessage) + rcvStartSnpReq.countDown(); } } } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/query/schema/IndexWithSameNameTestBase.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/query/schema/IndexWithSameNameTestBase.java index 7fd83a98ef7a2..dc1fa890b6e9d 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/query/schema/IndexWithSameNameTestBase.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/query/schema/IndexWithSameNameTestBase.java @@ -313,8 +313,6 @@ public static class SchemaFinishListeningTcpDiscoverySpi extends TcpDiscoverySpi try { TcpDiscoveryCustomEventMessage evtMsg = (TcpDiscoveryCustomEventMessage)msg; - evtMsg.finishUnmarhal(marshaller(), U.gridClassLoader()); - DiscoveryCustomMessage discoCustomMsg = U.unwrapCustomMessage(evtMsg.message()); if (discoCustomMsg instanceof SchemaFinishDiscoveryMessage) { diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/BlockTcpDiscoverySpi.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/BlockTcpDiscoverySpi.java index 020d5f78f2319..cf4cde729a156 100644 --- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/BlockTcpDiscoverySpi.java +++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/BlockTcpDiscoverySpi.java @@ -53,14 +53,7 @@ private synchronized void apply(ClusterNode addr, TcpDiscoveryAbstractMessage ms TcpDiscoveryCustomEventMessage cm = (TcpDiscoveryCustomEventMessage)msg; - try { - cm.finishUnmarhal(marshaller(), U.gridClassLoader()); - - assertNotNull(cm.message()); - } - catch (Throwable throwable) { - throw new RuntimeException(throwable); - } + assertNotNull(cm.message()); if (clo != null) clo.apply(addr, U.unwrapCustomMessage(cm.message())); diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java index 24559bdb1f6a4..42ef570613429 100644 --- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java @@ -2609,8 +2609,6 @@ private static class TestCustomerEventAckSpi extends TcpDiscoverySpi { try { TcpDiscoveryCustomEventMessage evtMsg = (TcpDiscoveryCustomEventMessage)msg; - evtMsg.finishUnmarhal(marshaller(), U.gridClassLoader()); - DiscoveryCustomMessage custMsg = U.unwrapCustomMessage(evtMsg.message()); if (custMsg instanceof StartRoutineAckDiscoveryMessage) { From 2eda80de868026a4c2d2d24348e6373074d7bebd Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Wed, 18 Mar 2026 00:49:17 +0300 Subject: [PATCH 22/51] WIP --- .../ignite/spi/discovery/tcp/ClientImpl.java | 13 +++++++++--- .../ignite/spi/discovery/tcp/ServerImpl.java | 20 ++++++++++++++++++- .../ClientSlowDiscoveryAbstractTest.java | 9 ++++++++- ...shallerCacheClientRequestsMappingTest.java | 4 ++++ ...IgniteSequentialNodeCrashRecoveryTest.java | 11 +++++++++- .../IncrementalSnapshotJoiningClientTest.java | 11 ++++++++-- .../schema/IndexWithSameNameTestBase.java | 2 ++ .../discovery/tcp/BlockTcpDiscoverySpi.java | 9 ++++++++- .../discovery/tcp/TcpDiscoverySelfTest.java | 2 ++ 9 files changed, 72 insertions(+), 9 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java index 5a0f80b614d35..4ee318ba2f3ff 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java @@ -2595,10 +2595,17 @@ private void processCustomMessage(TcpDiscoveryCustomEventMessage msg) { TcpDiscoveryNode node = nodeId.equals(getLocalNodeId()) ? locNode : rmtNodes.get(nodeId); if (node != null && node.visible()) { - DiscoveryCustomMessage msgObj = msg.message(); + try { + msg.finishUnmarshal(spi.marshaller(), U.resolveClassLoader(spi.ignite().configuration())); + + DiscoveryCustomMessage msgObj = msg.message(); - notifyDiscovery( - EVT_DISCOVERY_CUSTOM_EVT, topVer, node, allVisibleNodes(), msgObj, msg.spanContainer()); + notifyDiscovery( + EVT_DISCOVERY_CUSTOM_EVT, topVer, node, allVisibleNodes(), msgObj, msg.spanContainer()); + } + catch (Throwable e) { + U.error(log, "Failed to unmarshal discovery custom message.", e); + } } else if (log.isDebugEnabled()) log.debug("Received metrics from unknown node: " + nodeId); diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java index 93c349e5828b8..476db0a2aa97c 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java @@ -6073,6 +6073,15 @@ private void processCustomMessage(TcpDiscoveryCustomEventMessage msg, boolean wa DiscoveryCustomMessage msgObj = null; + try { + msg.finishUnmarshal(spi.marshaller(), U.resolveClassLoader(spi.ignite().configuration())); + + msgObj = msg.message(); + } + catch (Throwable e) { + U.error(log, "Failed to unmarshal discovery custom message.", e); + } + if (msgObj != null) { DiscoveryCustomMessage nextMsg = msgObj.ackMessage(); @@ -6253,7 +6262,16 @@ private void notifyDiscoveryListener(TcpDiscoveryCustomEventMessage msg, boolean if (node == null) return; - DiscoveryCustomMessage msgObj = msg.message(); + DiscoveryCustomMessage msgObj; + + try { + msg.finishUnmarshal(spi.marshaller(), U.resolveClassLoader(spi.ignite().configuration())); + + msgObj = msg.message(); + } + catch (Throwable t) { + throw new IgniteException("Failed to unmarshal discovery custom message: " + msg, t); + } IgniteFuture fut = lsnr.onDiscovery( new DiscoveryNotification( diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/ClientSlowDiscoveryAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/ClientSlowDiscoveryAbstractTest.java index 7fa642f50edeb..fd6c6f9e4befd 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/ClientSlowDiscoveryAbstractTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/ClientSlowDiscoveryAbstractTest.java @@ -92,7 +92,14 @@ static class CustomMessageInterceptingDiscoverySpi extends TcpDiscoverySpi { TcpDiscoveryCustomEventMessage cm = (TcpDiscoveryCustomEventMessage)msg; - assertNotNull(cm.message()); + try { + cm.finishUnmarshal(marshaller(), U.resolveClassLoader(ignite().configuration())); + + assertNotNull(cm.message()); + } + catch (Throwable throwable) { + throw new RuntimeException(throwable); + } if (interceptor != null) interceptor.apply(U.unwrapCustomMessage(cm.message())); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteMarshallerCacheClientRequestsMappingTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteMarshallerCacheClientRequestsMappingTest.java index 723fc92885d50..fe4a0eeb70809 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteMarshallerCacheClientRequestsMappingTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteMarshallerCacheClientRequestsMappingTest.java @@ -163,6 +163,8 @@ private void doTestMarshallingBinaryMappingsLoadedFromClient(boolean receiveMeta try { TcpDiscoveryCustomEventMessage evtMsg = (TcpDiscoveryCustomEventMessage)msg; + evtMsg.finishUnmarshal(marshaller(), U.gridClassLoader()); + DiscoveryCustomMessage delegate = U.unwrapCustomMessage(evtMsg.message()); if (delegate instanceof MappingAcceptedMessage) { @@ -237,6 +239,8 @@ public void testBinaryMetaDelayedForComputeJobResult() throws Exception { try { TcpDiscoveryCustomEventMessage evtMsg = (TcpDiscoveryCustomEventMessage)msg; + evtMsg.finishUnmarshal(marshaller(), U.gridClassLoader()); + DiscoveryCustomMessage delegate = U.unwrapCustomMessage(evtMsg.message()); if (delegate instanceof MappingProposedMessage) { diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgniteSequentialNodeCrashRecoveryTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgniteSequentialNodeCrashRecoveryTest.java index 7485201e912c2..b6162d71da137 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgniteSequentialNodeCrashRecoveryTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgniteSequentialNodeCrashRecoveryTest.java @@ -354,7 +354,16 @@ public BlockingDiscoverySpi(IgnitePredicate blockPred) { /** */ private DiscoveryCustomMessage extractCustomMessage(TcpDiscoveryCustomEventMessage msg) { - DiscoveryCustomMessage msgObj = msg.message(); + DiscoveryCustomMessage msgObj = null; + + try { + msg.finishUnmarshal(marshaller(), U.gridClassLoader()); + + msgObj = msg.message(); + } + catch (Throwable e) { + U.error(log, "Failed to unmarshal discovery custom message.", e); + } return U.unwrapCustomMessage(msgObj); } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotJoiningClientTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotJoiningClientTest.java index 1514a9be26ab1..fd42dc16fbf41 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotJoiningClientTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotJoiningClientTest.java @@ -245,8 +245,15 @@ private static class CoordinatorBlockingDiscoverySpi extends TcpDiscoverySpi { if (msg instanceof TcpDiscoveryCustomEventMessage && rcvStartSnpReq != null) { TcpDiscoveryCustomEventMessage m = (TcpDiscoveryCustomEventMessage)msg; - if (U.unwrapCustomMessage(m.message()) instanceof InitMessage) - rcvStartSnpReq.countDown(); + try { + m.finishUnmarshal(marshaller(), U.resolveClassLoader(ignite().configuration())); + + if (U.unwrapCustomMessage(m.message()) instanceof InitMessage) + rcvStartSnpReq.countDown(); + } + catch (Throwable e) { + // No-op. + } } } } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/query/schema/IndexWithSameNameTestBase.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/query/schema/IndexWithSameNameTestBase.java index dc1fa890b6e9d..e37cee61fc560 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/query/schema/IndexWithSameNameTestBase.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/query/schema/IndexWithSameNameTestBase.java @@ -313,6 +313,8 @@ public static class SchemaFinishListeningTcpDiscoverySpi extends TcpDiscoverySpi try { TcpDiscoveryCustomEventMessage evtMsg = (TcpDiscoveryCustomEventMessage)msg; + evtMsg.finishUnmarshal(marshaller(), U.gridClassLoader()); + DiscoveryCustomMessage discoCustomMsg = U.unwrapCustomMessage(evtMsg.message()); if (discoCustomMsg instanceof SchemaFinishDiscoveryMessage) { diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/BlockTcpDiscoverySpi.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/BlockTcpDiscoverySpi.java index cf4cde729a156..00ed5f205abd4 100644 --- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/BlockTcpDiscoverySpi.java +++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/BlockTcpDiscoverySpi.java @@ -53,7 +53,14 @@ private synchronized void apply(ClusterNode addr, TcpDiscoveryAbstractMessage ms TcpDiscoveryCustomEventMessage cm = (TcpDiscoveryCustomEventMessage)msg; - assertNotNull(cm.message()); + try { + cm.finishUnmarshal(marshaller(), U.gridClassLoader()); + + assertNotNull(cm.message()); + } + catch (Throwable throwable) { + throw new RuntimeException(throwable); + } if (clo != null) clo.apply(addr, U.unwrapCustomMessage(cm.message())); diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java index 42ef570613429..95494a0bcdb30 100644 --- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java @@ -2609,6 +2609,8 @@ private static class TestCustomerEventAckSpi extends TcpDiscoverySpi { try { TcpDiscoveryCustomEventMessage evtMsg = (TcpDiscoveryCustomEventMessage)msg; + evtMsg.finishUnmarshal(marshaller(), U.gridClassLoader()); + DiscoveryCustomMessage custMsg = U.unwrapCustomMessage(evtMsg.message()); if (custMsg instanceof StartRoutineAckDiscoveryMessage) { From b621137d65f88dc7ec7f12adbaf23de07e71fa98 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Wed, 18 Mar 2026 01:02:45 +0300 Subject: [PATCH 23/51] WIP --- .../cache/transactions/IgniteTxEntry.java | 10 +++++++++ .../transactions/TxEntryValueHolder.java | 22 +++++++++++++++++++ 2 files changed, 32 insertions(+) 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 9f17f0edfaafc..1c80cfc75e0d5 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 @@ -945,12 +945,17 @@ public void marshal(GridCacheSharedContext ctx, boolean transferExpiry) th 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()); } /** @@ -1021,8 +1026,13 @@ public void unmarshal( 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); } /** 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 5d00a647ffea0..13601b32a910c 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,8 +17,11 @@ 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; @@ -116,6 +119,25 @@ 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 7952ee0639fde79ef41675fc7c494c5bdf522773 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Wed, 18 Mar 2026 01:42:32 +0300 Subject: [PATCH 24/51] WIP --- .../java/org/apache/ignite/internal/MarshallerContextImpl.java | 2 -- modules/core/src/main/resources/META-INF/classnames.properties | 1 - 2 files changed, 3 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java index 9191ceddfb1c2..8fa94b71df7b5 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java @@ -45,7 +45,6 @@ import org.apache.ignite.compute.ComputeTaskSession; import org.apache.ignite.internal.executor.GridExecutorService; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionFullMap; -import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionMap; import org.apache.ignite.internal.processors.cache.persistence.filename.SharedFileTree; import org.apache.ignite.internal.processors.closure.GridClosureProcessor; import org.apache.ignite.internal.processors.marshaller.MappedName; @@ -146,7 +145,6 @@ public MarshallerContextImpl(@Nullable Collection plugins, Ignit }); checkHasClassName(GridDhtPartitionFullMap.class.getName(), ldr, CLS_NAMES_FILE); - checkHasClassName(GridDhtPartitionMap.class.getName(), ldr, CLS_NAMES_FILE); checkHasClassName(HashMap.class.getName(), ldr, JDK_CLS_NAMES_FILE); } catch (IOException e) { diff --git a/modules/core/src/main/resources/META-INF/classnames.properties b/modules/core/src/main/resources/META-INF/classnames.properties index 5f22afc2a7217..1ccc32d1d2d43 100644 --- a/modules/core/src/main/resources/META-INF/classnames.properties +++ b/modules/core/src/main/resources/META-INF/classnames.properties @@ -1172,7 +1172,6 @@ org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPar org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionDemander$RebalanceFutureState org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionExchangeId org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionFullMap -org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionMap org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionSupplyMessage org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsAbstractMessage org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture$2 From 303873abc7330d8b54913cb27b61f3536d176a82 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Wed, 18 Mar 2026 01:52:26 +0300 Subject: [PATCH 25/51] WIP --- .../core/src/main/resources/META-INF/classnames.properties | 4 ---- 1 file changed, 4 deletions(-) diff --git a/modules/core/src/main/resources/META-INF/classnames.properties b/modules/core/src/main/resources/META-INF/classnames.properties index 1ccc32d1d2d43..24e62e77db8d4 100644 --- a/modules/core/src/main/resources/META-INF/classnames.properties +++ b/modules/core/src/main/resources/META-INF/classnames.properties @@ -2269,7 +2269,6 @@ org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryClientPingRequest org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryClientPingResponse org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryClientReconnectMessage org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryConnectionCheckMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryCustomEventMessage org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryDiscardMessage org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryDummyWakeupMessage org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryDuplicateIdMessage @@ -2282,12 +2281,9 @@ org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryMetricsUpdateMessage$Me org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryMetricsUpdateMessage$MetricsSet$1 org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeAddFinishedMessage org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeAddedMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeFailedMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeLeftMessage org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryPingRequest org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryPingResponse org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryRingLatencyCheckMessage -org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryServerOnlyCustomEventMessage org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryStatusCheckMessage org.apache.ignite.spi.encryption.keystore.KeystoreEncryptionKey org.apache.ignite.spi.systemview.view.ComputeJobView$ComputeJobState From 7ab6e8a3811eae427c6248ec93393664dd61370e Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Wed, 18 Mar 2026 02:01:48 +0300 Subject: [PATCH 26/51] Revert "WIP" This reverts commit 303873abc7330d8b54913cb27b61f3536d176a82. --- .../core/src/main/resources/META-INF/classnames.properties | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/core/src/main/resources/META-INF/classnames.properties b/modules/core/src/main/resources/META-INF/classnames.properties index 24e62e77db8d4..1ccc32d1d2d43 100644 --- a/modules/core/src/main/resources/META-INF/classnames.properties +++ b/modules/core/src/main/resources/META-INF/classnames.properties @@ -2269,6 +2269,7 @@ org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryClientPingRequest org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryClientPingResponse org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryClientReconnectMessage org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryConnectionCheckMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryCustomEventMessage org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryDiscardMessage org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryDummyWakeupMessage org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryDuplicateIdMessage @@ -2281,9 +2282,12 @@ org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryMetricsUpdateMessage$Me org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryMetricsUpdateMessage$MetricsSet$1 org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeAddFinishedMessage org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeAddedMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeFailedMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeLeftMessage org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryPingRequest org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryPingResponse org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryRingLatencyCheckMessage +org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryServerOnlyCustomEventMessage org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryStatusCheckMessage org.apache.ignite.spi.encryption.keystore.KeystoreEncryptionKey org.apache.ignite.spi.systemview.view.ComputeJobView$ComputeJobState From d74d60650c8fc2cef60a50dae995212a3f125de8 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Wed, 18 Mar 2026 02:01:54 +0300 Subject: [PATCH 27/51] WIP --- .../discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java | 3 +++ .../discovery/tcp/messages/TcpDiscoveryNodeFailedMessage.java | 3 +++ .../discovery/tcp/messages/TcpDiscoveryNodeLeftMessage.java | 3 +++ .../tcp/messages/TcpDiscoveryServerOnlyCustomEventMessage.java | 3 +++ 4 files changed, 12 insertions(+) diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java index f2779a5dc9b8c..57dbccee731ee 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java @@ -35,6 +35,9 @@ @TcpDiscoveryRedirectToClient @TcpDiscoveryEnsureDelivery public class TcpDiscoveryCustomEventMessage extends TcpDiscoveryAbstractTraceableMessage { + /** */ + private static final long serialVersionUID = 0L; + /** */ private volatile DiscoveryCustomMessage msg; diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeFailedMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeFailedMessage.java index efc59a5c6a03d..7e08ac134def7 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeFailedMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeFailedMessage.java @@ -29,6 +29,9 @@ @TcpDiscoveryEnsureDelivery @TcpDiscoveryRedirectToClient public class TcpDiscoveryNodeFailedMessage extends TcpDiscoveryAbstractTraceableMessage { + /** */ + private static final long serialVersionUID = 0L; + /** ID of the failed node. */ @Order(0) UUID failedNodeId; diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeLeftMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeLeftMessage.java index fbecab11d3233..c307c5c3cc5d2 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeLeftMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeLeftMessage.java @@ -28,6 +28,9 @@ @TcpDiscoveryEnsureDelivery @TcpDiscoveryRedirectToClient public class TcpDiscoveryNodeLeftMessage extends TcpDiscoveryAbstractTraceableMessage { + /** */ + private static final long serialVersionUID = 0L; + /** Constructor for {@link DiscoveryMessageFactory}. */ public TcpDiscoveryNodeLeftMessage() { // No-op. diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryServerOnlyCustomEventMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryServerOnlyCustomEventMessage.java index 4ab89a0448629..ece2d61f806a6 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryServerOnlyCustomEventMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryServerOnlyCustomEventMessage.java @@ -26,6 +26,9 @@ */ @TcpDiscoveryEnsureDelivery public class TcpDiscoveryServerOnlyCustomEventMessage extends TcpDiscoveryCustomEventMessage { + /** */ + private static final long serialVersionUID = 0L; + /** * Default constructor. */ From 050f4ed6fe9c31ff09a9feebe3b46000de94f472 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Wed, 18 Mar 2026 18:45:14 +0300 Subject: [PATCH 28/51] WIP --- .../calcite/metadata/ColocationGroup.java | 55 ++++++++++--------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/ColocationGroup.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/ColocationGroup.java index 77d71b8af34ad..7b9ebca872226 100644 --- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/ColocationGroup.java +++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/ColocationGroup.java @@ -320,47 +320,52 @@ public int[] partitions(UUID nodeId) { /** {@inheritDoc} */ @Override public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { - if (assignments == null && !primaryAssignment) { - Map nodeIdxs = new HashMap<>(); + if (assignments == null || primaryAssignment) + marshalledAssignments = null; - for (int i = 0; i < nodeIds.size(); i++) - nodeIdxs.put(nodeIds.get(i), i); + Map nodeIdxs = new HashMap<>(); - int bitsPerPart = Integer.SIZE - Integer.numberOfLeadingZeros(nodeIds.size()); + for (int i = 0; i < nodeIds.size(); i++) + nodeIdxs.put(nodeIds.get(i), i); - CompactedIntArray.Builder builder = CompactedIntArray.builder(bitsPerPart, assignments.size()); + int bitsPerPart = Integer.SIZE - Integer.numberOfLeadingZeros(nodeIds.size()); - for (List assignment : assignments) { - assert F.isEmpty(assignment) || assignment.size() == 1; + CompactedIntArray.Builder builder = CompactedIntArray.builder(bitsPerPart, assignments.size()); - if (F.isEmpty(assignment)) - builder.add(nodeIds.size()); - else { - Integer nodeIdx = nodeIdxs.get(assignment.get(0)); + for (List assignment : assignments) { + assert F.isEmpty(assignment) || assignment.size() == 1; - builder.add(nodeIdx); - } - } + if (F.isEmpty(assignment)) + builder.add(nodeIds.size()); + else { + Integer nodeIdx = nodeIdxs.get(assignment.get(0)); - marshalledAssignments = builder.build().buffer(); + builder.add(nodeIdx); + } } + + marshalledAssignments = builder.build().buffer(); } /** {@inheritDoc} */ @Override public void prepareUnmarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { - if (!F.isEmpty(marshalledAssignments)) { - int bitsPerPart = Integer.SIZE - Integer.numberOfLeadingZeros(nodeIds.size()); + if (F.isEmpty(marshalledAssignments)) { + assignments = null; - CompactedIntArray compactedArr = CompactedIntArray.of(bitsPerPart, marshalledAssignments); + return; + } - assignments = new ArrayList<>(compactedArr.size()); + int bitsPerPart = Integer.SIZE - Integer.numberOfLeadingZeros(nodeIds.size()); - for (GridIntIterator iter = compactedArr.iterator(); iter.hasNext(); ) { - int nodeIdx = iter.next(); + CompactedIntArray compactedArr = CompactedIntArray.of(bitsPerPart, marshalledAssignments); - assignments.add(nodeIdx >= nodeIds.size() ? Collections.emptyList() : - Collections.singletonList(nodeIds.get(nodeIdx))); - } + assignments = new ArrayList<>(compactedArr.size()); + + for (GridIntIterator iter = compactedArr.iterator(); iter.hasNext(); ) { + int nodeIdx = iter.next(); + + assignments.add(nodeIdx >= nodeIds.size() ? Collections.emptyList() : + Collections.singletonList(nodeIds.get(nodeIdx))); } } From 4dd9cf747c231a30384b548bc97bbe39338fd453 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Wed, 18 Mar 2026 18:58:25 +0300 Subject: [PATCH 29/51] WIP --- .../processors/query/calcite/metadata/ColocationGroup.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/ColocationGroup.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/ColocationGroup.java index 7b9ebca872226..a17cca5272942 100644 --- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/ColocationGroup.java +++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/ColocationGroup.java @@ -320,9 +320,12 @@ public int[] partitions(UUID nodeId) { /** {@inheritDoc} */ @Override public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { - if (assignments == null || primaryAssignment) + if (assignments == null || primaryAssignment) { marshalledAssignments = null; + return; + } + Map nodeIdxs = new HashMap<>(); for (int i = 0; i < nodeIds.size(); i++) From e698f64af6a45b4e8d50d1849ba5e85bb0a31525 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Wed, 18 Mar 2026 20:06:45 +0300 Subject: [PATCH 30/51] WIP --- .../calcite/metadata/FragmentDescription.java | 16 +++++++++++++--- .../calcite/metadata/FragmentMapping.java | 18 ++++++++++++++++-- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/FragmentDescription.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/FragmentDescription.java index dce4f0f5d2f6a..9fd11185d4c1e 100644 --- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/FragmentDescription.java +++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/FragmentDescription.java @@ -21,6 +21,7 @@ import java.util.List; 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.cache.GridCacheSharedContext; import org.apache.ignite.internal.processors.query.calcite.message.CalciteMarshalableMessage; @@ -118,10 +119,15 @@ public void remoteSources0(Map remoteSources0) { } /** {@inheritDoc} */ - @Override public void prepareMarshal(GridCacheSharedContext ctx) { - if (target != null) + @Override public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { + if (target != null) { target = target.explicitMapping(); + target.prepareMarshal(ctx); + } + + mapping.prepareMarshal(ctx); + if (remoteSources0 == null && remoteSources != null) { remoteSources0 = U.newHashMap(remoteSources.size()); @@ -131,7 +137,11 @@ public void remoteSources0(Map remoteSources0) { } /** {@inheritDoc} */ - @Override public void prepareUnmarshal(GridCacheSharedContext ctx) { + @Override public void prepareUnmarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { + target.prepareUnmarshal(ctx); + + mapping.prepareUnmarshal(ctx); + if (remoteSources == null && remoteSources0 != null) { remoteSources = U.newHashMap(remoteSources0.size()); diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/FragmentMapping.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/FragmentMapping.java index 14efc043a3186..910b990476b8b 100644 --- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/FragmentMapping.java +++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/FragmentMapping.java @@ -23,8 +23,10 @@ import java.util.UUID; import java.util.function.Supplier; import java.util.stream.Collectors; +import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.Order; -import org.apache.ignite.internal.processors.query.calcite.message.CalciteMessage; +import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; +import org.apache.ignite.internal.processors.query.calcite.message.CalciteMarshalableMessage; import org.apache.ignite.internal.processors.query.calcite.message.MessageType; import org.apache.ignite.internal.processors.query.calcite.util.Commons; import org.apache.ignite.internal.util.typedef.F; @@ -34,7 +36,7 @@ /** * */ -public class FragmentMapping implements CalciteMessage { +public class FragmentMapping implements CalciteMarshalableMessage { /** */ @Order(0) List colocationGrps; @@ -177,4 +179,16 @@ public FragmentMapping explicitMapping(Set srcIds) { @Override public MessageType type() { return MessageType.FRAGMENT_MAPPING; } + + /** {@inheritDoc} */ + @Override public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { + for (ColocationGroup grp : colocationGrps) + grp.prepareMarshal(ctx); + } + + /** {@inheritDoc} */ + @Override public void prepareUnmarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { + for (ColocationGroup grp : colocationGrps) + grp.prepareUnmarshal(ctx); + } } From 1e14f2dc2e0bfde15392c7cfc29a3764bf928180 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 19 Mar 2026 16:11:40 +0300 Subject: [PATCH 31/51] WIP --- .../processors/query/calcite/metadata/FragmentDescription.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/FragmentDescription.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/FragmentDescription.java index 9fd11185d4c1e..ebba0459e4f34 100644 --- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/FragmentDescription.java +++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/FragmentDescription.java @@ -126,7 +126,8 @@ public void remoteSources0(Map remoteSources0) { target.prepareMarshal(ctx); } - mapping.prepareMarshal(ctx); + if (mapping != null) + mapping.prepareMarshal(ctx); if (remoteSources0 == null && remoteSources != null) { remoteSources0 = U.newHashMap(remoteSources.size()); From a4fce17c73a0a2c8d87cb97301ab38c8358d09da Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 19 Mar 2026 16:45:04 +0300 Subject: [PATCH 32/51] WIP --- .../query/calcite/metadata/ColocationGroup.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/ColocationGroup.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/ColocationGroup.java index a17cca5272942..3e4f800158900 100644 --- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/ColocationGroup.java +++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/ColocationGroup.java @@ -320,11 +320,8 @@ public int[] partitions(UUID nodeId) { /** {@inheritDoc} */ @Override public void prepareMarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { - if (assignments == null || primaryAssignment) { - marshalledAssignments = null; - + if (assignments == null || primaryAssignment) return; - } Map nodeIdxs = new HashMap<>(); @@ -352,11 +349,8 @@ public int[] partitions(UUID nodeId) { /** {@inheritDoc} */ @Override public void prepareUnmarshal(GridCacheSharedContext ctx) throws IgniteCheckedException { - if (F.isEmpty(marshalledAssignments)) { - assignments = null; - + if (F.isEmpty(marshalledAssignments)) return; - } int bitsPerPart = Integer.SIZE - Integer.numberOfLeadingZeros(nodeIds.size()); From 7ca94c0865589e560b8be2e7e3ebee6c235f8c35 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 19 Mar 2026 17:26:34 +0300 Subject: [PATCH 33/51] WIP --- .../internal/managers/discovery/DiscoveryMessageFactory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java index 98f9efffb0b78..252166d76251b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java @@ -175,7 +175,7 @@ public DiscoveryMessageFactory(Marshaller marsh, ClassLoader clsLdr) { /** {@inheritDoc} */ @Override public void registerAll(MessageFactory factory) { factory.register((short)-200, TcpDiscoveryCollectionMessage::new, - new TcpDiscoveryCollectionMessageMarshallableSerializer(cstDataMarshall, cstDataMarshallClsLdr)); + new TcpDiscoveryCollectionMessageMarshallableSerializer(marsh, clsLdr)); factory.register((short)-115, SchemaAlterTableAddColumnOperation::new, new SchemaAlterTableAddColumnOperationSerializer()); From 48b671311f1353570312fbdb61f32b87a18528bc Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 19 Mar 2026 17:29:48 +0300 Subject: [PATCH 34/51] WIP --- modules/core/src/test/resources/codegen/TestMessage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/core/src/test/resources/codegen/TestMessage.java b/modules/core/src/test/resources/codegen/TestMessage.java index 3e9812f905d40..727a8c7d17c44 100644 --- a/modules/core/src/test/resources/codegen/TestMessage.java +++ b/modules/core/src/test/resources/codegen/TestMessage.java @@ -62,7 +62,7 @@ public class TestMessage implements Message { @Order(10) BitSet bitSet; - @Order(value = 11, method = "overridenFieldMethod") + @Order(value = 11) private String field; @Order(12) From c6ed7007e935f8356cac8ea9c353fddfb1fec207 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 19 Mar 2026 17:34:00 +0300 Subject: [PATCH 35/51] WIP --- .../ignite/internal/MessageProcessor.java | 2 - .../internal/MessageSerializerGenerator.java | 76 ++++++------------- .../org/apache/ignite/internal/Order.java | 4 - 3 files changed, 24 insertions(+), 58 deletions(-) diff --git a/modules/codegen/src/main/java/org/apache/ignite/internal/MessageProcessor.java b/modules/codegen/src/main/java/org/apache/ignite/internal/MessageProcessor.java index f6cf23d4b7190..46dbd39dac8f4 100644 --- a/modules/codegen/src/main/java/org/apache/ignite/internal/MessageProcessor.java +++ b/modules/codegen/src/main/java/org/apache/ignite/internal/MessageProcessor.java @@ -54,8 +54,6 @@ *
    *
  • The target class must implement the {@code Message} interface.
  • *
  • Each field to be serialized must be annotated with {@code @Order}.
  • - *
  • If {@link Order#method()} attribute was set, then each serializing field - * must have a getter named {@code method()} and a setter named {@code method(value)}.
  • *
* *

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 723adfd985253..fef259eec6a08 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 @@ -31,7 +31,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.Set; import java.util.TreeSet; import java.util.UUID; @@ -53,7 +52,6 @@ import javax.tools.JavaFileObject; import javax.tools.StandardLocation; import org.apache.ignite.internal.systemview.SystemViewRowAttributeWalkerProcessor; -import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.SB; import org.jetbrains.annotations.Nullable; @@ -390,9 +388,7 @@ private void readField(VariableElement field, int opt) throws Exception { * @param field Field to generate write code. */ private void returnFalseIfWriteFailed(VariableElement field) throws Exception { - String methodName = field.getAnnotation(Order.class).method(); - - String getExpr = F.isEmpty(methodName) ? field.getSimpleName().toString() : methodName + "()"; + String getExpr = field.getSimpleName().toString(); TypeMirror type = field.asType(); @@ -557,18 +553,12 @@ private void returnFalseIfWriteFailed(Collection code, String accessor, private void returnFalseIfWriteFailed(Collection code, VariableElement field, String accessor, @Nullable String... args) { String argsStr = String.join(", ", args); - String methodName = field.getAnnotation(Order.class).method(); - - if (Objects.equals(methodName, "")) { - if (type.equals(field.getEnclosingElement())) - code.add(identedLine("if (!%s(msg.%s))", accessor, argsStr)); - else { - // Field has to be requested from a super class object. - code.add(identedLine("if (!%s(((%s)msg).%s))", accessor, field.getEnclosingElement().getSimpleName(), argsStr)); - } - } - else + if (type.equals(field.getEnclosingElement())) code.add(identedLine("if (!%s(msg.%s))", accessor, argsStr)); + else { + // Field has to be requested from a super class object. + code.add(identedLine("if (!%s(((%s)msg).%s))", accessor, field.getEnclosingElement().getSimpleName(), argsStr)); + } indent++; @@ -586,19 +576,13 @@ private void returnFalseIfEnumWriteFailed( String writerCall, String mapperCall, String fieldGetterCall) { - String methodName = field.getAnnotation(Order.class).method(); - - if (Objects.equals(methodName, "")) { - if (type.equals(field.getEnclosingElement())) - code.add(identedLine("if (!%s(%s(msg.%s)))", writerCall, mapperCall, fieldGetterCall)); - else { - // Field has to be requested from a super class object. - code.add(identedLine("if (!%s(%s(((%s)msg).%s)))", - writerCall, mapperCall, field.getEnclosingElement().getSimpleName(), fieldGetterCall)); - } - } - else + if (type.equals(field.getEnclosingElement())) code.add(identedLine("if (!%s(%s(msg.%s)))", writerCall, mapperCall, fieldGetterCall)); + else { + // Field has to be requested from a super class object. + code.add(identedLine("if (!%s(%s(((%s)msg).%s)))", + writerCall, mapperCall, field.getEnclosingElement().getSimpleName(), fieldGetterCall)); + } indent++; @@ -895,19 +879,13 @@ private PrimitiveType unboxedType(TypeMirror type) { private void returnFalseIfReadFailed(VariableElement field, String mtd, String... args) { String argsStr = String.join(", ", args); - String methodName = field.getAnnotation(Order.class).method(); - - if (Objects.equals(methodName, "")) { - if (type.equals(field.getEnclosingElement())) - read.add(identedLine("msg.%s = %s(%s);", field.getSimpleName().toString(), mtd, argsStr)); - else { - // Field has to be requested from a super class object. - read.add(identedLine("((%s)msg).%s = %s(%s);", - field.getEnclosingElement().getSimpleName(), field.getSimpleName().toString(), mtd, argsStr)); - } + if (type.equals(field.getEnclosingElement())) + read.add(identedLine("msg.%s = %s(%s);", field.getSimpleName().toString(), mtd, argsStr)); + else { + // Field has to be requested from a super class object. + read.add(identedLine("((%s)msg).%s = %s(%s);", + field.getEnclosingElement().getSimpleName(), field.getSimpleName().toString(), mtd, argsStr)); } - else - read.add(identedLine("msg.%s(%s(%s));", methodName, mtd, argsStr)); read.add(EMPTY); @@ -933,19 +911,13 @@ private void returnFalseIfEnumReadFailed(VariableElement field, String mapperDec else readOp = line("%s(%s, reader.readByte())", mapperDecodeCallStmnt, enumValuesFieldName); - String methodName = field.getAnnotation(Order.class).method(); - - if (Objects.equals(methodName, "")) { - if (type.equals(field.getEnclosingElement())) - read.add(identedLine("msg.%s = %s;", field.getSimpleName().toString(), readOp)); - else { - // Field has to be requested from a super class object. - read.add(identedLine("((%s)msg).%s = %s;", - field.getEnclosingElement().getSimpleName(), field.getSimpleName().toString(), readOp)); - } + if (type.equals(field.getEnclosingElement())) + read.add(identedLine("msg.%s = %s;", field.getSimpleName().toString(), readOp)); + else { + // Field has to be requested from a super class object. + read.add(identedLine("((%s)msg).%s = %s;", + field.getEnclosingElement().getSimpleName(), field.getSimpleName().toString(), readOp)); } - else - read.add(identedLine("msg.%s(%s);", methodName, readOp)); read.add(EMPTY); diff --git a/modules/codegen/src/main/java/org/apache/ignite/internal/Order.java b/modules/codegen/src/main/java/org/apache/ignite/internal/Order.java index d24214baa8884..0e4562537c435 100644 --- a/modules/codegen/src/main/java/org/apache/ignite/internal/Order.java +++ b/modules/codegen/src/main/java/org/apache/ignite/internal/Order.java @@ -29,7 +29,6 @@ * Fields annotated with {@code @Order} are processed in ascending order of their index. *

By default, it is assumed that getters and setters are named as the annotated fields, * e.g. field 'val' should have getters and satters with name 'val' (according Ignite's to code-style). - * If you need to override this behavior, you can specify their name in the {@link #method} attribute. *

This annotation must be used on non-static fields, and access to those fields * should be performed strictly through corresponding getter and setter methods * following the naming convention: {@code fieldName()} for getter and {@code fieldName(Type)} for setter. @@ -39,7 +38,4 @@ public @interface Order { /** @return Order of the field. */ int value(); - - /** @return Getter and setter name. */ - String method() default ""; } From 0d0445632fce4992b2f6cf7e3b5e78d7994e7712 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 19 Mar 2026 19:48:25 +0300 Subject: [PATCH 36/51] WIP --- .../TestMarshallableMessageMarshallableSerializer.java | 4 ++-- modules/core/src/test/resources/codegen/TestMessage.java | 2 +- .../src/test/resources/codegen/TestMessageSerializer.java | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/core/src/test/resources/codegen/TestMarshallableMessageMarshallableSerializer.java b/modules/core/src/test/resources/codegen/TestMarshallableMessageMarshallableSerializer.java index 80602f050ee7d..97aef08f2f02c 100644 --- a/modules/core/src/test/resources/codegen/TestMarshallableMessageMarshallableSerializer.java +++ b/modules/core/src/test/resources/codegen/TestMarshallableMessageMarshallableSerializer.java @@ -51,7 +51,7 @@ public TestMarshallableMessageMarshallableSerializer(Marshaller marshaller, Clas msg.prepareMarshal(marshaller); } catch (IgniteCheckedException e) { - throw new IgniteException("Failed to marshal object", e); + throw new IgniteException("Failed to marshal object" + msg.getClass().getSimpleName(), e); } writer.onHeaderWritten(); @@ -112,7 +112,7 @@ public TestMarshallableMessageMarshallableSerializer(Marshaller marshaller, Clas msg.finishUnmarshal(marshaller, clsLdr); } catch (IgniteCheckedException e) { - throw new IgniteException("Failed to unmarshal object", e); + throw new IgniteException("Failed to unmarshal object" + msg.getClass().getSimpleName(), e); } return true; diff --git a/modules/core/src/test/resources/codegen/TestMessage.java b/modules/core/src/test/resources/codegen/TestMessage.java index 727a8c7d17c44..6f3ef5eb1353a 100644 --- a/modules/core/src/test/resources/codegen/TestMessage.java +++ b/modules/core/src/test/resources/codegen/TestMessage.java @@ -63,7 +63,7 @@ public class TestMessage implements Message { BitSet bitSet; @Order(value = 11) - private String field; + String field; @Order(12) KeyCacheObject keyCacheObject; diff --git a/modules/core/src/test/resources/codegen/TestMessageSerializer.java b/modules/core/src/test/resources/codegen/TestMessageSerializer.java index 130b838a6da6b..825928b57d327 100644 --- a/modules/core/src/test/resources/codegen/TestMessageSerializer.java +++ b/modules/core/src/test/resources/codegen/TestMessageSerializer.java @@ -116,7 +116,7 @@ public class TestMessageSerializer implements MessageSerializer { writer.incrementState(); case 11: - if (!writer.writeString(msg.overridenFieldMethod())) + if (!writer.writeString(msg.field)) return false; writer.incrementState(); @@ -235,7 +235,7 @@ public class TestMessageSerializer implements MessageSerializer { reader.incrementState(); case 11: - msg.overridenFieldMethod(reader.readString()); + msg.field = reader.readString(); if (!reader.isLastRead()) return false; From b4a16bd6fe7a3aae4673d7b6ec6fc48671c43b33 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 19 Mar 2026 20:57:17 +0300 Subject: [PATCH 37/51] WIP --- .../query/continuous/CacheContinuousQueryEntry.java | 6 +++--- .../IgniteCacheContinuousQueryImmutableEntryTest.java | 10 +++++----- 2 files changed, 8 insertions(+), 8 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 5782de5b7d7e3..4fa6e331b0aae 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 @@ -322,21 +322,21 @@ void unmarshal(GridCacheContext cctx, @Nullable ClassLoader ldr) throws IgniteCh * @return Key. */ KeyCacheObject key() { - return isFiltered() ? null : key; + return key; } /** * @return New value. */ CacheObject newValue() { - return isFiltered() ? null : newVal; + return newVal; } /** * @return Old value. */ CacheObject oldValue() { - return isFiltered() ? null : oldVal; + return oldVal; } /** {@inheritDoc} */ 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..39411801bd2a7 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 @@ -134,7 +134,7 @@ public void testEventAvailabilityScope() throws Exception { * */ @Test - public void testCacheContinuousQueryEntrySerialization() { + public void testCacheContinuousQueryEntrySerialization() throws Exception { CacheContinuousQueryEntry e0 = new CacheContinuousQueryEntry( 1, EventType.UPDATED, @@ -166,7 +166,7 @@ public void testCacheContinuousQueryEntrySerialization() { CacheContinuousQueryEntry e1 = new CacheContinuousQueryEntry(); - final DirectMessageReader reader = new DirectMessageReader(msgFactory, null); + final DirectMessageReader reader = new DirectMessageReader(msgFactory, startGrid(0).context().cacheObjects()); reader.setBuffer(ByteBuffer.wrap(buf.array())); @@ -181,11 +181,11 @@ public void testCacheContinuousQueryEntrySerialization() { assertEquals(e0.updateCounter(), e1.updateCounter()); // Key and value shouldn't be serialized in case an event is filtered. - assertNull(e1.key()); + assertNotNull(e1.key()); assertNotNull(e0.key()); - assertNull(e1.oldValue()); + assertNotNull(e1.oldValue()); assertNotNull(e0.oldValue()); - assertNull(e1.newValue()); + assertNotNull(e1.newValue()); assertNotNull(e0.newValue()); } From 48b44f814246d5bb5738d6699848d1d0dffcd7c9 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 19 Mar 2026 21:06:37 +0300 Subject: [PATCH 38/51] WIP --- .../continuous/CacheContinuousQueryEntry.java | 35 ------------------- .../CacheContinuousQueryHandler.java | 9 +---- 2 files changed, 1 insertion(+), 43 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 4fa6e331b0aae..4194e46acb3cb 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 @@ -18,12 +18,10 @@ package org.apache.ignite.internal.processors.cache.query.continuous; import javax.cache.event.EventType; -import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.Order; 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; @@ -285,39 +283,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 1ebae16bfd9d6a657a4ad8febe62deae18156a08 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 19 Mar 2026 21:06:55 +0300 Subject: [PATCH 39/51] WIP --- .../IgniteCacheContinuousQueryImmutableEntryTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 39411801bd2a7..89ab25dc4b1ec 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 @@ -179,8 +179,7 @@ public void testCacheContinuousQueryEntrySerialization() throws Exception { assertEquals(e0.isKeepBinary(), e1.isKeepBinary()); assertEquals(e0.partition(), e1.partition()); assertEquals(e0.updateCounter(), e1.updateCounter()); - - // Key and value shouldn't be serialized in case an event is filtered. + assertNotNull(e1.key()); assertNotNull(e0.key()); assertNotNull(e1.oldValue()); From 9cc14867b200893bac3867b487f88032a8bba425 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 19 Mar 2026 21:26:35 +0300 Subject: [PATCH 40/51] WIP --- .../communication/GridIoMessageFactory.java | 4 +- .../continuous/CacheContinuousQueryEntry.java | 42 ++++++++++++++++--- ...acheContinuousQueryImmutableEntryTest.java | 11 ++--- 3 files changed, 45 insertions(+), 12 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java index 5fcb5529a1740..e4ab6d187523a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java @@ -246,7 +246,7 @@ import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryBatchAck; import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryBatchAckSerializer; import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryEntry; -import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryEntrySerializer; +import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryEntryMarshallableSerializer; import org.apache.ignite.internal.processors.cache.transactions.IgniteTxEntry; import org.apache.ignite.internal.processors.cache.transactions.IgniteTxEntrySerializer; import org.apache.ignite.internal.processors.cache.transactions.IgniteTxKey; @@ -474,7 +474,7 @@ public GridIoMessageFactory(Marshaller marsh, ClassLoader clsLdr) { factory.register((short)93, CacheInvokeDirectResult::new, new CacheInvokeDirectResultSerializer()); factory.register((short)94, IgniteTxKey::new, new IgniteTxKeySerializer()); factory.register((short)95, DataStreamerEntry::new, new DataStreamerEntrySerializer()); - factory.register((short)96, CacheContinuousQueryEntry::new, new CacheContinuousQueryEntrySerializer()); + factory.register((short)96, CacheContinuousQueryEntry::new, new CacheContinuousQueryEntryMarshallableSerializer(marsh, clsLdr)); factory.register((short)97, CacheEvictionEntry::new, new CacheEvictionEntrySerializer()); factory.register((short)98, CacheEntryPredicateAdapter::new, new CacheEntryPredicateAdapterMarshallableSerializer(marsh, clsLdr)); factory.register((short)100, IgniteTxEntry::new, new IgniteTxEntrySerializer()); 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 4194e46acb3cb..40e0863bca046 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.processors.cache.query.continuous; import javax.cache.event.EventType; +import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.Order; import org.apache.ignite.internal.managers.deployment.GridDeploymentInfo; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; @@ -27,13 +28,14 @@ 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.plugin.extensions.communication.Message; +import org.apache.ignite.marshaller.Marshaller; +import org.apache.ignite.plugin.extensions.communication.MarshallableMessage; import org.jetbrains.annotations.Nullable; /** * Continuous query entry. */ -public class CacheContinuousQueryEntry implements GridCacheDeployable, Message { +public class CacheContinuousQueryEntry implements GridCacheDeployable, MarshallableMessage { /** */ private static final byte BACKUP_ENTRY = 0b0001; @@ -53,19 +55,25 @@ public class CacheContinuousQueryEntry implements GridCacheDeployable, Message { /** Key. */ @GridToStringInclude - @Order(2) KeyCacheObject key; + @Order(2) + byte[] keyBytes; + /** New value. */ @GridToStringInclude - @Order(3) CacheObject newVal; + @Order(3) + byte[] newValBytes; + /** Old value. */ @GridToStringInclude - @Order(4) CacheObject oldVal; + @Order(4) + byte[] oldValBytes; + /** Cache name. */ @Order(5) int cacheId; @@ -323,4 +331,28 @@ CacheObject oldValue() { @Override public String toString() { return S.toString(CacheContinuousQueryEntry.class, this); } + + @Override public void prepareMarshal(Marshaller marsh) throws IgniteCheckedException { + if (!isFiltered()) { + if (key != null) + keyBytes = marsh.marshal(key); + + if (newVal != null) + newValBytes = marsh.marshal(newVal); + + if (oldVal != null) + oldValBytes = marsh.marshal(oldVal); + } + } + + @Override public void finishUnmarshal(Marshaller marsh, ClassLoader clsLdr) throws IgniteCheckedException { + if (keyBytes != null) + key = marsh.unmarshal(keyBytes, clsLdr); + + if (newVal != null) + newVal = marsh.unmarshal(newValBytes, clsLdr); + + if (oldVal != null) + oldVal = marsh.unmarshal(oldValBytes, clsLdr); + } } 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 89ab25dc4b1ec..12210f2681482 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() throws Exception { CacheContinuousQueryEntry e1 = new CacheContinuousQueryEntry(); - final DirectMessageReader reader = new DirectMessageReader(msgFactory, startGrid(0).context().cacheObjects()); + final DirectMessageReader reader = new DirectMessageReader(msgFactory, null); reader.setBuffer(ByteBuffer.wrap(buf.array())); @@ -179,12 +179,13 @@ public void testCacheContinuousQueryEntrySerialization() throws Exception { assertEquals(e0.isKeepBinary(), e1.isKeepBinary()); assertEquals(e0.partition(), e1.partition()); assertEquals(e0.updateCounter(), e1.updateCounter()); - - assertNotNull(e1.key()); + + // Key and value shouldn't be serialized in case an event is filtered. + assertNull(e1.key()); assertNotNull(e0.key()); - assertNotNull(e1.oldValue()); + assertNull(e1.oldValue()); assertNotNull(e0.oldValue()); - assertNotNull(e1.newValue()); + assertNull(e1.newValue()); assertNotNull(e0.newValue()); } From 47361a52d8e46ec493a572a8912b7e8dce5ffa1f Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 19 Mar 2026 21:34:37 +0300 Subject: [PATCH 41/51] WIP --- .../cache/query/continuous/CacheContinuousQueryEntry.java | 5 +++++ 1 file changed, 5 insertions(+) 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 40e0863bca046..11ae3d94517a7 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 @@ -57,6 +57,7 @@ public class CacheContinuousQueryEntry implements GridCacheDeployable, Marshalla @GridToStringInclude KeyCacheObject key; + /** */ @Order(2) byte[] keyBytes; @@ -64,6 +65,7 @@ public class CacheContinuousQueryEntry implements GridCacheDeployable, Marshalla @GridToStringInclude CacheObject newVal; + /** */ @Order(3) byte[] newValBytes; @@ -71,6 +73,7 @@ public class CacheContinuousQueryEntry implements GridCacheDeployable, Marshalla @GridToStringInclude CacheObject oldVal; + /** */ @Order(4) byte[] oldValBytes; @@ -332,6 +335,7 @@ CacheObject oldValue() { return S.toString(CacheContinuousQueryEntry.class, this); } + /** {@inheritDoc} */ @Override public void prepareMarshal(Marshaller marsh) throws IgniteCheckedException { if (!isFiltered()) { if (key != null) @@ -345,6 +349,7 @@ CacheObject oldValue() { } } + /** {@inheritDoc} */ @Override public void finishUnmarshal(Marshaller marsh, ClassLoader clsLdr) throws IgniteCheckedException { if (keyBytes != null) key = marsh.unmarshal(keyBytes, clsLdr); From fe59852a042addaba27d90d65da9788a4f41e103 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 19 Mar 2026 21:47:31 +0300 Subject: [PATCH 42/51] WIP --- .../IgniteCacheContinuousQueryImmutableEntryTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 12210f2681482..e75ed12f40019 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 @@ -134,7 +134,7 @@ public void testEventAvailabilityScope() throws Exception { * */ @Test - public void testCacheContinuousQueryEntrySerialization() throws Exception { + public void testCacheContinuousQueryEntrySerialization() { CacheContinuousQueryEntry e0 = new CacheContinuousQueryEntry( 1, EventType.UPDATED, From d5ab0858db7381fc6cda75354772e2448984dd6a Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 19 Mar 2026 22:20:52 +0300 Subject: [PATCH 43/51] Revert "WIP" This reverts commit 48b44f814246d5bb5738d6699848d1d0dffcd7c9. --- .../continuous/CacheContinuousQueryEntry.java | 34 +++++++++++++++++++ .../CacheContinuousQueryHandler.java | 9 ++++- 2 files changed, 42 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 11ae3d94517a7..b0ec206e41308 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 793826b0b952d..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); } /** @@ -946,6 +951,8 @@ private void notifyCallback0(UUID nodeId, } } + e.unmarshal(cctx, ldr); + Collection> evts = handleEvent(ctx, e); if (evts != null && !evts.isEmpty()) From 80b0123bbb4800767a479812a27b37f315be3281 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 19 Mar 2026 22:51:16 +0300 Subject: [PATCH 44/51] WIP --- .../messages/TcpDiscoveryCustomEventMessage.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java index 57dbccee731ee..6006bb2d9829c 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java @@ -23,6 +23,7 @@ import org.apache.ignite.internal.Order; import org.apache.ignite.internal.managers.discovery.DiscoveryCustomMessage; import org.apache.ignite.internal.managers.discovery.DiscoveryMessageFactory; +import org.apache.ignite.internal.managers.discovery.IncompleteDeserializationException; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.marshaller.Marshaller; @@ -127,8 +128,19 @@ public DiscoveryCustomMessage message() { if (serMsg != null) msg = (DiscoveryCustomMessage)serMsg; else { - if (msgBytes != null) + try { msg = U.unmarshal(marsh, msgBytes, ldr); + } + catch (IgniteCheckedException e) { + // Try to resurrect a message in a case of deserialization failure + if (e.getCause() instanceof IncompleteDeserializationException) { + msg = ((IncompleteDeserializationException)e.getCause()).message(); + + return; + } + + throw e; + } } } From a2a79c478b5c7a94411cc10e2c513a44db7397b8 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Thu, 19 Mar 2026 23:00:58 +0300 Subject: [PATCH 45/51] WIP --- .../cache/query/continuous/CacheContinuousQueryEntry.java | 4 ++-- 1 file changed, 2 insertions(+), 2 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 b0ec206e41308..85e2dc147f43f 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 @@ -388,10 +388,10 @@ CacheObject oldValue() { if (keyBytes != null) key = marsh.unmarshal(keyBytes, clsLdr); - if (newVal != null) + if (newValBytes != null) newVal = marsh.unmarshal(newValBytes, clsLdr); - if (oldVal != null) + if (oldValBytes != null) oldVal = marsh.unmarshal(oldValBytes, clsLdr); } } From 862c8a1de5ffb8b814c9818678adb6e0411ad62d Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 20 Mar 2026 16:29:24 +0300 Subject: [PATCH 46/51] WIP --- .../discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java index 6006bb2d9829c..5ac1523f0a0a8 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java @@ -129,7 +129,8 @@ public DiscoveryCustomMessage message() { msg = (DiscoveryCustomMessage)serMsg; else { try { - msg = U.unmarshal(marsh, msgBytes, ldr); + if (msgBytes != null) + msg = U.unmarshal(marsh, msgBytes, ldr); } catch (IgniteCheckedException e) { // Try to resurrect a message in a case of deserialization failure From 1880afbc4e551a1b2e14be0e99b72738e7d5260f Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 20 Mar 2026 17:17:00 +0300 Subject: [PATCH 47/51] WIP --- .../internal/util/distributed/SingleNodeMessage.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/distributed/SingleNodeMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/util/distributed/SingleNodeMessage.java index b5bfe29d1dd42..2ef8c2e167c19 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/distributed/SingleNodeMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/distributed/SingleNodeMessage.java @@ -46,7 +46,7 @@ public class SingleNodeMessage implements Message { int type; /** Single node response. */ - @Order(value = 2, method = "response") + @Order(value = 2) private Message resp; /** Error. */ @@ -93,11 +93,6 @@ public R response() { return (R)resp; } - /** @param resp Response. */ - public void response(R resp) { - this.resp = resp; - } - /** @return {@code True} if finished with error. */ public boolean hasError() { return errMsg != null; From e498ac4b3a58f6e2e1650d4275060d4af38c0359 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 20 Mar 2026 17:18:08 +0300 Subject: [PATCH 48/51] WIP --- .../managers/discovery/DiscoveryMessageFactory.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java index f7fb357ad94d0..69800247c4b5a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java @@ -296,16 +296,15 @@ public DiscoveryMessageFactory(Marshaller marsh, ClassLoader clsLdr) { factory.register((short)522, DataStreamerUpdatesHandlerResult::new, new DataStreamerUpdatesHandlerResultSerializer()); factory.register((short)523, SnapshotCheckResponse::new, new SnapshotCheckResponseSerializer()); factory.register((short)524, IncrementalSnapshotVerifyResult::new, - new IncrementalSnapshotVerifyResultMarshallableSerializer(cstDataMarshall, cstDataMarshallClsLdr)); + new IncrementalSnapshotVerifyResultMarshallableSerializer(marsh, clsLdr)); factory.register((short)525, SnapshotRestoreOperationResponse::new, - new SnapshotRestoreOperationResponseMarshallableSerializer(cstDataMarshall, cstDataMarshallClsLdr)); - factory.register((short)526, SnapshotMetadataResponse::new, - new SnapshotMetadataResponseMarshallableSerializer(cstDataMarshall, cstDataMarshallClsLdr)); + new SnapshotRestoreOperationResponseMarshallableSerializer(marsh, clsLdr)); + factory.register((short)526, SnapshotMetadataResponse::new, new SnapshotMetadataResponseMarshallableSerializer(marsh, clsLdr)); factory.register((short)527, SnapshotCheckPartitionHashesResponse::new, - new SnapshotCheckPartitionHashesResponseMarshallableSerializer(cstDataMarshall, cstDataMarshallClsLdr)); + new SnapshotCheckPartitionHashesResponseMarshallableSerializer(marsh, clsLdr)); factory.register((short)528, SnapshotCheckHandlersResponse::new, new SnapshotCheckHandlersResponseSerializer()); factory.register((short)529, SnapshotCheckHandlersNodeResponse::new, new SnapshotCheckHandlersNodeResponseSerializer()); factory.register((short)530, SnapshotPartitionsVerifyHandlerResponse::new, - new SnapshotPartitionsVerifyHandlerResponseMarshallableSerializer(cstDataMarshall, cstDataMarshallClsLdr)); + new SnapshotPartitionsVerifyHandlerResponseMarshallableSerializer(marsh, clsLdr)); } } From 78520cb7db7443f242bdc86a40f6a54fcfddb5f3 Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 20 Mar 2026 17:20:05 +0300 Subject: [PATCH 49/51] WIP --- .../communication/GridIoMessageFactory.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java index 50d1d585d64bb..978f4e0f584ad 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java @@ -429,13 +429,13 @@ public GridIoMessageFactory(Marshaller marsh, ClassLoader clsLdr) { factory.register((short)6, GridTaskSessionRequest::new, new GridTaskSessionRequestSerializer()); factory.register((short)7, GridCheckpointRequest::new, new GridCheckpointRequestSerializer()); factory.register((short)8, GridIoMessage::new, - new GridIoMessageMarshallableSerializer(cstDataMarshall, cstDataMarshallClsLdr)); + new GridIoMessageMarshallableSerializer(marsh, clsLdr)); factory.register((short)9, GridIoUserMessage::new, new GridIoUserMessageSerializer()); factory.register((short)10, GridDeploymentInfoBean::new, new GridDeploymentInfoBeanSerializer()); factory.register((short)11, GridDeploymentRequest::new, new GridDeploymentRequestSerializer()); factory.register((short)12, GridDeploymentResponse::new, new GridDeploymentResponseSerializer()); factory.register((short)13, GridEventStorageMessage::new, - new GridEventStorageMessageMarshallableSerializer(cstDataMarshall, cstDataMarshallClsLdr)); + new GridEventStorageMessageMarshallableSerializer(marsh, clsLdr)); factory.register((short)16, GridCacheTxRecoveryRequest::new, new GridCacheTxRecoveryRequestSerializer()); factory.register((short)17, GridCacheTxRecoveryResponse::new, new GridCacheTxRecoveryResponseSerializer()); factory.register((short)18, IndexQueryResultMeta::new, new IndexQueryResultMetaSerializer()); @@ -545,7 +545,7 @@ public GridIoMessageFactory(Marshaller marsh, ClassLoader clsLdr) { factory.register(GridQueryKillRequest.TYPE_CODE, GridQueryKillRequest::new, new GridQueryKillRequestSerializer()); factory.register(GridQueryKillResponse.TYPE_CODE, GridQueryKillResponse::new, new GridQueryKillResponseSerializer()); factory.register(GridIoSecurityAwareMessage.TYPE_CODE, GridIoSecurityAwareMessage::new, - new GridIoSecurityAwareMessageMarshallableSerializer(cstDataMarshall, cstDataMarshallClsLdr)); + new GridIoSecurityAwareMessageMarshallableSerializer(marsh, clsLdr)); factory.register(SessionChannelMessage.TYPE_CODE, SessionChannelMessage::new, new SessionChannelMessageSerializer()); factory.register(SingleNodeMessage.TYPE_CODE, SingleNodeMessage::new, new SingleNodeMessageSerializer()); factory.register((short)177, TcpInverseConnectionResponseMessage::new, new TcpInverseConnectionResponseMessageSerializer()); @@ -597,17 +597,16 @@ public GridIoMessageFactory(Marshaller marsh, ClassLoader clsLdr) { factory.register((short)522, DataStreamerUpdatesHandlerResult::new, new DataStreamerUpdatesHandlerResultSerializer()); factory.register((short)523, SnapshotCheckResponse::new, new SnapshotCheckResponseSerializer()); factory.register((short)524, IncrementalSnapshotVerifyResult::new, - new IncrementalSnapshotVerifyResultMarshallableSerializer(cstDataMarshall, cstDataMarshallClsLdr)); + new IncrementalSnapshotVerifyResultMarshallableSerializer(marsh, clsLdr)); factory.register((short)525, SnapshotRestoreOperationResponse::new, - new SnapshotRestoreOperationResponseMarshallableSerializer(cstDataMarshall, cstDataMarshallClsLdr)); - factory.register((short)526, SnapshotMetadataResponse::new, - new SnapshotMetadataResponseMarshallableSerializer(cstDataMarshall, cstDataMarshallClsLdr)); + new SnapshotRestoreOperationResponseMarshallableSerializer(marsh, clsLdr)); + factory.register((short)526, SnapshotMetadataResponse::new, new SnapshotMetadataResponseMarshallableSerializer(marsh, clsLdr)); factory.register((short)527, SnapshotCheckPartitionHashesResponse::new, - new SnapshotCheckPartitionHashesResponseMarshallableSerializer(cstDataMarshall, cstDataMarshallClsLdr)); + new SnapshotCheckPartitionHashesResponseMarshallableSerializer(marsh, clsLdr)); factory.register((short)528, SnapshotCheckHandlersResponse::new, new SnapshotCheckHandlersResponseSerializer()); factory.register((short)529, SnapshotCheckHandlersNodeResponse::new, new SnapshotCheckHandlersNodeResponseSerializer()); factory.register((short)530, SnapshotPartitionsVerifyHandlerResponse::new, - new SnapshotPartitionsVerifyHandlerResponseMarshallableSerializer(cstDataMarshall, cstDataMarshallClsLdr)); + new SnapshotPartitionsVerifyHandlerResponseMarshallableSerializer(marsh, clsLdr)); // [-3..119] [124..129] [-23..-28] [-36..-55] [183..188] - this // [120..123] - DR From 8146f4e3d1c92fd08454fbffc73c824dee38ee0f Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 20 Mar 2026 17:21:24 +0300 Subject: [PATCH 50/51] WIP --- .../ignite/internal/util/distributed/SingleNodeMessage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/distributed/SingleNodeMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/util/distributed/SingleNodeMessage.java index 2ef8c2e167c19..3457d980c47c7 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/distributed/SingleNodeMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/distributed/SingleNodeMessage.java @@ -47,7 +47,7 @@ public class SingleNodeMessage implements Message { /** Single node response. */ @Order(value = 2) - private Message resp; + Message resp; /** Error. */ @Order(3) From a8d038dbf0b7d1b17b55a2e484a8b63b697cad6e Mon Sep 17 00:00:00 2001 From: Anton Vinogradov Date: Fri, 20 Mar 2026 18:01:10 +0300 Subject: [PATCH 51/51] WIP --- .../managers/discovery/SecurityAwareCustomMessageWrapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/SecurityAwareCustomMessageWrapper.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/SecurityAwareCustomMessageWrapper.java index 163c2b93cd61e..97d798b66b699 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/SecurityAwareCustomMessageWrapper.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/SecurityAwareCustomMessageWrapper.java @@ -107,6 +107,6 @@ public DiscoveryCustomMessage delegate() { /** {@inheritDoc} */ @Override public void finishUnmarshal(Marshaller marsh, ClassLoader clsLdr) throws IgniteCheckedException { if (msgBytes != null) - delegate = U.unmarshal(marsh, msgBytes, U.gridClassLoader()); + delegate = U.unmarshal(marsh, msgBytes, clsLdr); } }