This is an automated email from the ASF dual-hosted git repository.

shishkovilja pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 851caa72919 IGNITE-28046 Use MessageSerializer for 
MetadataUpdateProposedMessage (#12855)
851caa72919 is described below

commit 851caa72919a9382fb3086da72d58526b0916a1c
Author: Dmitry Werner <[email protected]>
AuthorDate: Tue Apr 14 12:25:40 2026 +0500

    IGNITE-28046 Use MessageSerializer for MetadataUpdateProposedMessage 
(#12855)
---
 .../ignite/internal/CoreMessagesProvider.java      |  2 +
 .../binary/MetadataUpdateProposedMessage.java      | 67 ++++++++++++++--------
 .../main/resources/META-INF/classnames.properties  |  1 -
 3 files changed, 46 insertions(+), 24 deletions(-)

diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/CoreMessagesProvider.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/CoreMessagesProvider.java
index bde852c5e98..635348f0a98 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/CoreMessagesProvider.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/CoreMessagesProvider.java
@@ -70,6 +70,7 @@ import 
org.apache.ignite.internal.processors.cache.binary.MetadataRemoveProposed
 import 
org.apache.ignite.internal.processors.cache.binary.MetadataRequestMessage;
 import 
org.apache.ignite.internal.processors.cache.binary.MetadataResponseMessage;
 import 
org.apache.ignite.internal.processors.cache.binary.MetadataUpdateAcceptedMessage;
+import 
org.apache.ignite.internal.processors.cache.binary.MetadataUpdateProposedMessage;
 import 
org.apache.ignite.internal.processors.cache.distributed.GridCacheTtlUpdateRequest;
 import 
org.apache.ignite.internal.processors.cache.distributed.GridCacheTxRecoveryRequest;
 import 
org.apache.ignite.internal.processors.cache.distributed.GridCacheTxRecoveryResponse;
@@ -418,6 +419,7 @@ public class CoreMessagesProvider implements 
MessageFactoryProvider {
         withNoSchema(WalStateFinishMessage.class);
         withNoSchema(WalStateProposeMessage.class);
         withNoSchema(MetadataUpdateAcceptedMessage.class);
+        withNoSchema(MetadataUpdateProposedMessage.class);
         withNoSchema(TxTimeoutOnPartitionMapExchangeChangeMessage.class);
         withNoSchema(UserAcceptedMessage.class);
         withNoSchema(UserProposedMessage.class);
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/MetadataUpdateProposedMessage.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/MetadataUpdateProposedMessage.java
index b73be5f2c13..9cbc6688860 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/MetadataUpdateProposedMessage.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/MetadataUpdateProposedMessage.java
@@ -17,21 +17,27 @@
 package org.apache.ignite.internal.processors.cache.binary;
 
 import java.util.UUID;
+import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.binary.BinaryObjectException;
+import org.apache.ignite.internal.Order;
 import org.apache.ignite.internal.binary.BinaryMetadata;
 import org.apache.ignite.internal.binary.BinaryMetadataHandler;
+import org.apache.ignite.internal.managers.communication.ErrorMessage;
 import org.apache.ignite.internal.managers.discovery.DiscoveryCustomMessage;
 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.plugin.extensions.communication.MarshallableMessage;
 import org.jetbrains.annotations.Nullable;
 
 /**
  * <b>MetadataUpdateProposedMessage</b> and {@link 
MetadataUpdateAcceptedMessage} messages make a basis for
  * discovery-based protocol for exchanging {@link BinaryMetadata metadata} 
describing objects in binary format stored in Ignite caches.
- *
+ * <p>
  * All interactions with binary metadata are performed through {@link 
BinaryMetadataHandler}
  * interface implemented in {@link CacheObjectBinaryProcessorImpl} processor.
- *
+ * <p>
  * Protocol works as follows:
  * <ol>
  * <li>
@@ -67,33 +73,45 @@ import org.jetbrains.annotations.Nullable;
  * it gets blocked until {@link MetadataUpdateAcceptedMessage} arrives with 
<b>accepted version</b>
  * equals to <b>pending version</b> of this metadata to the moment when is was 
initially read by the thread.
  */
-public final class MetadataUpdateProposedMessage implements 
DiscoveryCustomMessage {
+public final class MetadataUpdateProposedMessage implements 
DiscoveryCustomMessage, MarshallableMessage {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** */
-    private final IgniteUuid id = IgniteUuid.randomUuid();
+    @Order(0)
+    IgniteUuid id;
 
     /** Node UUID which initiated metadata update. */
-    private final UUID origNodeId;
+    @Order(1)
+    UUID origNodeId;
 
     /** */
     private BinaryMetadata metadata;
 
+    /** Serialized {@link #metadata}. */
+    @Order(2)
+    byte[] metadataBytes;
+
     /** Metadata type id. */
-    private final int typeId;
+    @Order(3)
+    int typeId;
 
     /** Metadata version which is pending for update. */
-    private int pendingVer;
+    @Order(4)
+    int pendingVer;
 
     /** Metadata version which is already accepted by entire cluster. */
-    private int acceptedVer;
-
-    /** Message acceptance status. */
-    private ProposalStatus status = ProposalStatus.SUCCESSFUL;
+    @Order(5)
+    int acceptedVer;
 
     /** */
-    private BinaryObjectException err;
+    @Order(6)
+    @Nullable ErrorMessage errMsg;
+
+    /** Constructor. */
+    public MetadataUpdateProposedMessage() {
+        // No-op.
+    }
 
     /**
      * @param metadata   {@link BinaryMetadata} requested to be updated.
@@ -103,6 +121,7 @@ public final class MetadataUpdateProposedMessage implements 
DiscoveryCustomMessa
         assert origNodeId != null;
         assert metadata != null;
 
+        id = IgniteUuid.randomUuid();
         this.origNodeId = origNodeId;
 
         this.metadata = metadata;
@@ -120,7 +139,7 @@ public final class MetadataUpdateProposedMessage implements 
DiscoveryCustomMessa
      * {@inheritDoc}
      */
     @Nullable @Override public DiscoveryCustomMessage ackMessage() {
-        return (status == ProposalStatus.SUCCESSFUL) ? new 
MetadataUpdateAcceptedMessage(typeId, pendingVer) : null;
+        return !rejected() ? new MetadataUpdateAcceptedMessage(typeId, 
pendingVer) : null;
     }
 
     /**
@@ -134,22 +153,21 @@ public final class MetadataUpdateProposedMessage 
implements DiscoveryCustomMessa
      * @param err Error caused this update to be rejected.
      */
     void markRejected(BinaryObjectException err) {
-        status = ProposalStatus.REJECTED;
-        this.err = err;
+        errMsg = new ErrorMessage(err);
     }
 
     /**
      *
      */
     boolean rejected() {
-        return status == ProposalStatus.REJECTED;
+        return errMsg != null;
     }
 
     /**
      *
      */
     BinaryObjectException rejectionError() {
-        return err;
+        return (BinaryObjectException)ErrorMessage.error(errMsg);
     }
 
     /**
@@ -208,13 +226,16 @@ public final class MetadataUpdateProposedMessage 
implements DiscoveryCustomMessa
         return typeId;
     }
 
-    /** Message acceptance status. */
-    private enum ProposalStatus {
-        /** */
-        SUCCESSFUL,
+    /** {@inheritDoc} */
+    @Override public void prepareMarshal(Marshaller marsh) throws 
IgniteCheckedException {
+        if (metadata != null)
+            metadataBytes = U.marshal(marsh, metadata);
+    }
 
-        /** */
-        REJECTED
+    /** {@inheritDoc} */
+    @Override public void finishUnmarshal(Marshaller marsh, ClassLoader ldr) 
throws IgniteCheckedException {
+        if (metadataBytes != null)
+            metadata = U.unmarshal(marsh, metadataBytes, ldr);
     }
 
     /** {@inheritDoc} */
diff --git a/modules/core/src/main/resources/META-INF/classnames.properties 
b/modules/core/src/main/resources/META-INF/classnames.properties
index f4dd2f86118..977f9ddbf68 100644
--- a/modules/core/src/main/resources/META-INF/classnames.properties
+++ b/modules/core/src/main/resources/META-INF/classnames.properties
@@ -1030,7 +1030,6 @@ 
org.apache.ignite.internal.processors.cache.binary.MetadataRequestMessage
 org.apache.ignite.internal.processors.cache.binary.MetadataResponseMessage
 
org.apache.ignite.internal.processors.cache.binary.MetadataUpdateAcceptedMessage
 
org.apache.ignite.internal.processors.cache.binary.MetadataUpdateProposedMessage
-org.apache.ignite.internal.processors.cache.binary.MetadataUpdateProposedMessage$ProposalStatus
 
org.apache.ignite.internal.processors.cache.binary.MetadataUpdateResult$ResultType
 
org.apache.ignite.internal.processors.cache.datastructures.CacheDataStructuresManager$BlockSetCallable
 
org.apache.ignite.internal.processors.cache.datastructures.CacheDataStructuresManager$QueueHeaderPredicate

Reply via email to