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

anton-vinogradov 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 f902ab43b7d IGNITE-28516 Use MessageSerializer for 
DynamicCacheChangeRequest (#13032)
f902ab43b7d is described below

commit f902ab43b7d0ddf3eb4ddb71c8ef1f0e4d9402ff
Author: Vladimir Steshin <[email protected]>
AuthorDate: Mon Apr 20 16:56:12 2026 +0300

    IGNITE-28516 Use MessageSerializer for DynamicCacheChangeRequest (#13032)
---
 .../ignite/internal/CoreMessagesProvider.java      |   6 +-
 .../cache/CacheConfigurationEnrichment.java        |  16 ++-
 .../processors/cache/ClusterCachesInfo.java        |   2 +-
 .../processors/cache/DynamicCacheChangeBatch.java  |  24 +---
 .../cache/DynamicCacheChangeRequest.java           | 133 ++++++++++++++++-----
 .../processors/cache/GridCacheProcessor.java       |   4 +-
 6 files changed, 126 insertions(+), 59 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 6de2f7f3e1c..cb076954ad8 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
@@ -48,6 +48,7 @@ import 
org.apache.ignite.internal.processors.authentication.UserManagementOperat
 import 
org.apache.ignite.internal.processors.authentication.UserManagementOperationFinishedMessage;
 import 
org.apache.ignite.internal.processors.authentication.UserProposedMessage;
 import org.apache.ignite.internal.processors.cache.CacheAffinityChangeMessage;
+import 
org.apache.ignite.internal.processors.cache.CacheConfigurationEnrichment;
 import org.apache.ignite.internal.processors.cache.CacheEntryPredicateAdapter;
 import org.apache.ignite.internal.processors.cache.CacheEvictionEntry;
 import org.apache.ignite.internal.processors.cache.CacheInvokeDirectResult;
@@ -56,6 +57,7 @@ import 
org.apache.ignite.internal.processors.cache.CacheStatisticsModeChangeMess
 import 
org.apache.ignite.internal.processors.cache.ClientCacheChangeDiscoveryMessage;
 import 
org.apache.ignite.internal.processors.cache.ClientCacheChangeDummyDiscoveryMessage;
 import org.apache.ignite.internal.processors.cache.DynamicCacheChangeBatch;
+import org.apache.ignite.internal.processors.cache.DynamicCacheChangeRequest;
 import org.apache.ignite.internal.processors.cache.ExchangeFailureMessage;
 import org.apache.ignite.internal.processors.cache.GridCacheEntryInfo;
 import org.apache.ignite.internal.processors.cache.GridCacheReturn;
@@ -628,7 +630,7 @@ public class CoreMessagesProvider implements 
MessageFactoryProvider {
         withNoSchema(ChangeCacheEncryptionRequest.class);
         withNoSchema(MasterKeyChangeRequest.class);
 
-        // [13000 - 13300]: Control, diagnostincs and other messages.
+        // [13000 - 13300]: Control, configuration, diagnostincs and other 
messages.
         msgIdx = 13000;
         withSchema(GridEventStorageMessage.class);
         withNoSchema(ChangeGlobalStateMessage.class);
@@ -636,6 +638,8 @@ public class CoreMessagesProvider implements 
MessageFactoryProvider {
         withSchema(IgniteDiagnosticRequest.class);
         withNoSchema(IgniteDiagnosticResponse.class);
         withNoSchema(WalStateAckMessage.class);
+        withNoSchema(CacheConfigurationEnrichment.class);
+        withNoSchemaResolvedClassLoader(DynamicCacheChangeRequest.class);
 
         assert msgIdx <= MAX_MESSAGE_ID;
     }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheConfigurationEnrichment.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheConfigurationEnrichment.java
index c5cbe055d3b..c12c40b4f63 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheConfigurationEnrichment.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheConfigurationEnrichment.java
@@ -20,8 +20,11 @@ package org.apache.ignite.internal.processors.cache;
 import java.io.Serializable;
 import java.util.Map;
 import java.util.Set;
+import org.apache.ignite.internal.CoreMessagesProvider;
+import org.apache.ignite.internal.Order;
 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;
 
 /**
  * Object that contains serialized values for fields marked with {@link 
org.apache.ignite.configuration.SerializeSeparately}
@@ -29,16 +32,23 @@ import org.apache.ignite.internal.util.typedef.internal.S;
  * This object is needed to exchange and store shrinked cache configurations 
to avoid possible {@link ClassNotFoundException} errors
  * during deserialization on nodes where some specific class may not exist.
  */
-public class CacheConfigurationEnrichment implements Serializable {
+public class CacheConfigurationEnrichment implements Message, Serializable {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** Field name -> Field serialized value. */
-    private final Map<String, byte[]> enrichFields;
+    @Order(0)
+    Map<String, byte[]> enrichFields;
 
     /** Field name -> Field value class name. */
     @GridToStringInclude
-    private final Map<String, String> fieldClassNames;
+    @Order(1)
+    Map<String, String> fieldClassNames;
+
+    /** Empty constructor for {@link CoreMessagesProvider}. */
+    public CacheConfigurationEnrichment() {
+        // No-op.
+    }
 
     /**
      * Creates a new instance of CacheConfigurationEnrichment.
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
index 562a33ab352..987be04ea2f 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
@@ -1161,7 +1161,7 @@ public class ClusterCachesInfo {
             req.initiatingNodeId(),
             req.deploymentId(),
             req.encryptionKey(),
-            req.encryptionKeyId(),
+            req.encryptionKeyId() < 0 ? null : req.encryptionKeyId(),
             req.cacheConfigurationEnrichment()
         );
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/DynamicCacheChangeBatch.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/DynamicCacheChangeBatch.java
index 0fc8cc5d9dd..c90c02aa79b 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/DynamicCacheChangeBatch.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/DynamicCacheChangeBatch.java
@@ -19,8 +19,6 @@ package org.apache.ignite.internal.processors.cache;
 
 import java.util.Collection;
 import java.util.Set;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.internal.MarshallableMessage;
 import org.apache.ignite.internal.Order;
 import org.apache.ignite.internal.managers.discovery.DiscoCache;
 import org.apache.ignite.internal.managers.discovery.DiscoveryCustomMessage;
@@ -31,26 +29,22 @@ import 
org.apache.ignite.internal.util.tostring.GridToStringExclude;
 import org.apache.ignite.internal.util.tostring.GridToStringInclude;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteUuid;
-import org.apache.ignite.marshaller.Marshaller;
+import org.apache.ignite.plugin.extensions.communication.Message;
 import org.jetbrains.annotations.Nullable;
 
 /**
  * Cache change batch.
  */
-public class DynamicCacheChangeBatch implements DiscoveryCustomMessage, 
MarshallableMessage {
+public class DynamicCacheChangeBatch implements DiscoveryCustomMessage, 
Message {
     /** Discovery custom message ID. */
     @Order(0)
     IgniteUuid id;
 
     /** Change requests. */
     @GridToStringInclude
-    Collection<DynamicCacheChangeRequest> reqs;
-
-    /** JDK Serialized version of reqs. */
     @Order(1)
-    byte[] requestsBytes;
+    Collection<DynamicCacheChangeRequest> reqs;
 
     /** Cache updates to be executed on exchange. */
     private ExchangeActions exchangeActions;
@@ -172,18 +166,6 @@ public class DynamicCacheChangeBatch implements 
DiscoveryCustomMessage, Marshall
         this.startCaches = startCaches;
     }
 
-    /** {@inheritDoc} */
-    @Override public void prepareMarshal(Marshaller marsh) throws 
IgniteCheckedException {
-        if (reqs != null)
-            requestsBytes = U.marshal(marsh, reqs);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void finishUnmarshal(Marshaller marsh, ClassLoader 
clsLdr) throws IgniteCheckedException {
-        if (requestsBytes != null)
-            reqs = U.unmarshal(marsh, requestsBytes, clsLdr);
-    }
-
     /** {@inheritDoc} */
     @Override public String toString() {
         return S.toString(DynamicCacheChangeBatch.class, this);
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/DynamicCacheChangeRequest.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/DynamicCacheChangeRequest.java
index a91ac73f95f..79c2f7d90bf 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/DynamicCacheChangeRequest.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/DynamicCacheChangeRequest.java
@@ -19,96 +19,139 @@ package org.apache.ignite.internal.processors.cache;
 
 import java.io.Serializable;
 import java.util.UUID;
+import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.NearCacheConfiguration;
+import org.apache.ignite.internal.CoreMessagesProvider;
 import org.apache.ignite.internal.GridKernalContext;
+import org.apache.ignite.internal.MarshallableMessage;
+import org.apache.ignite.internal.Order;
 import org.apache.ignite.internal.processors.query.QuerySchema;
 import org.apache.ignite.internal.util.tostring.GridToStringExclude;
 import org.apache.ignite.internal.util.typedef.T2;
+import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteUuid;
+import org.apache.ignite.marshaller.Marshaller;
 import org.jetbrains.annotations.Nullable;
 
 /**
  * Cache start/stop request.
  */
-public class DynamicCacheChangeRequest implements Serializable {
+public class DynamicCacheChangeRequest implements MarshallableMessage, 
Serializable {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** */
-    private UUID reqId;
+    @Order(0)
+    UUID reqId;
 
     /** Start ID. */
-    private IgniteUuid deploymentId;
+    @Order(1)
+    IgniteUuid deploymentId;
 
     /** Stop cache name. */
     @GridToStringExclude
-    private String cacheName;
+    @Order(2)
+    String cacheName;
 
     /** Cache start configuration. */
     @GridToStringExclude
-    private CacheConfiguration startCfg;
+    private CacheConfiguration<?, ?> startCfg;
+
+    /** Bytes of {@link #startCfg}. */
+    @Order(3)
+    byte[] cfgBytes;
 
     /** Cache type. */
-    private CacheType cacheType;
+    @Order(4)
+    CacheType cacheType;
 
     /** Near node ID in case if near cache is being started. */
-    private UUID initiatingNodeId;
+    @Order(5)
+    UUID initiatingNodeId;
 
     /** Near cache configuration. */
     @GridToStringExclude
-    private NearCacheConfiguration nearCacheCfg;
+    private NearCacheConfiguration<?, ?> nearCacheCfg;
+
+    /** Bytes of {@link #nearCacheCfg}. */
+    @Order(6)
+    byte[] nearCfgBytes;
 
     /** Start only client cache, do not start data nodes. */
-    private boolean clientStartOnly;
+    @Order(7)
+    boolean clientStartOnly;
 
     /** Stop flag. */
-    private boolean stop;
+    @Order(8)
+    boolean stop;
 
     /** Restart flag. */
-    private boolean restart;
+    @Order(9)
+    boolean restart;
 
     /** Finalize update counters flag. */
-    private boolean finalizePartitionCounters;
+    @Order(10)
+    boolean finalizePartitionCounters;
 
     /** Restart operation id. */
-    private IgniteUuid restartId;
+    @Order(11)
+    IgniteUuid restartId;
 
     /** Cache active on start or not*/
-    private boolean disabledAfterStart;
+    @Order(12)
+    boolean disabledAfterStart;
 
     /** Cache data destroy flag. Setting to <code>true</code> will cause 
removing all cache data.*/
-    private boolean destroy;
+    @Order(13)
+    boolean destroy;
 
     /** Whether cache was created through SQL. */
-    private boolean sql;
+    @Order(14)
+    boolean sql;
 
     /** Fail if exists flag. */
-    private boolean failIfExists;
+    @Order(15)
+    boolean failIfExists;
 
     /** Template configuration flag. */
-    private boolean template;
+    @Order(16)
+    boolean template;
 
     /** Reset lost partitions flag. */
-    private boolean resetLostPartitions;
+    @Order(17)
+    boolean resetLostPartitions;
 
     /** Dynamic schema. */
-    private QuerySchema schema;
+    QuerySchema schema;
 
-    /** */
-    private transient boolean locallyConfigured;
+    /** Bytes of {@link #schema}. */
+    @Order(18)
+    byte[] schemaBytes;
+
+    /** Is transient. */
+    private boolean locallyConfigured;
 
     /** Encryption key. */
-    @Nullable private byte[] encKey;
+    @Order(19)
+    @Nullable byte[] encKey;
 
     /** Id of encryption key. */
-    @Nullable private Integer encKeyId;
+    @Order(20)
+    int encKeyId;
 
     /** Master key digest. */
-    @Nullable private byte[] masterKeyDigest;
+    @Order(21)
+    @Nullable byte[] masterKeyDigest;
 
     /** Cache configuration enrichment. */
-    private CacheConfigurationEnrichment cacheCfgEnrichment;
+    @Order(22)
+    CacheConfigurationEnrichment cacheCfgEnrichment;
+
+    /** Empty constructor for {@link CoreMessagesProvider}. */
+    public DynamicCacheChangeRequest() {
+        // No-op.
+    }
 
     /**
      * @param reqId Unique request ID.
@@ -123,6 +166,32 @@ public class DynamicCacheChangeRequest implements 
Serializable {
         this.initiatingNodeId = initiatingNodeId;
     }
 
+    /** {@inheritDoc} */
+    @Override public void prepareMarshal(Marshaller marsh) throws 
IgniteCheckedException {
+        cfgBytes = U.marshal(marsh, startCfg);
+
+        if (nearCacheCfg != null)
+            nearCfgBytes = U.marshal(marsh, nearCacheCfg);
+
+        if (schema != null)
+            schemaBytes = U.marshal(marsh, schema);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void finishUnmarshal(Marshaller marsh, ClassLoader 
clsLdr) throws IgniteCheckedException {
+        startCfg = U.unmarshal(marsh, cfgBytes, clsLdr);
+
+        if (nearCfgBytes != null)
+            nearCacheCfg = U.unmarshal(marsh, nearCfgBytes, clsLdr);
+
+        if (schemaBytes != null)
+            schema = U.unmarshal(marsh, schemaBytes, clsLdr);
+
+        cfgBytes = null;
+        nearCfgBytes = null;
+        schemaBytes = null;
+    }
+
     /**
      * @param ctx Context.
      * @param cacheName Cache name.
@@ -338,28 +407,28 @@ public class DynamicCacheChangeRequest implements 
Serializable {
     /**
      * @return Near cache configuration.
      */
-    public NearCacheConfiguration nearCacheConfiguration() {
+    public NearCacheConfiguration<?, ?> nearCacheConfiguration() {
         return nearCacheCfg;
     }
 
     /**
      * @param nearCacheCfg Near cache configuration.
      */
-    public void nearCacheConfiguration(NearCacheConfiguration nearCacheCfg) {
+    public void nearCacheConfiguration(NearCacheConfiguration<?, ?> 
nearCacheCfg) {
         this.nearCacheCfg = nearCacheCfg;
     }
 
     /**
      * @return Cache configuration.
      */
-    public CacheConfiguration startCacheConfiguration() {
+    public CacheConfiguration<?, ?> startCacheConfiguration() {
         return startCfg;
     }
 
     /**
      * @param startCfg Cache configuration.
      */
-    public void startCacheConfiguration(CacheConfiguration startCfg) {
+    public void startCacheConfiguration(CacheConfiguration<?, ?> startCfg) {
         this.startCfg = startCfg;
 
         if (startCfg.getNearConfiguration() != null)
@@ -485,14 +554,14 @@ public class DynamicCacheChangeRequest implements 
Serializable {
      *
      * @param encKeyId Encryption key id.
      */
-    public void encryptionKeyId(@Nullable Integer encKeyId) {
+    public void encryptionKeyId(int encKeyId) {
         this.encKeyId = encKeyId;
     }
 
     /**
      * @return Encryption key id.
      */
-    @Nullable public Integer encryptionKeyId() {
+    @Nullable public int encryptionKeyId() {
         return encKeyId;
     }
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
index d6fdf2b2485..369e3627a94 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
@@ -5087,7 +5087,9 @@ public class GridCacheProcessor extends 
GridProcessorAdapter {
 
         req.encryptionKey(encKey);
 
-        req.encryptionKeyId(encKeyId);
+        assert encKeyId == null || encKeyId >= 0;
+
+        req.encryptionKeyId(encKeyId == null ? -1 : encKeyId);
 
         req.restartId(restartId);
 

Reply via email to