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

anton-vinogradov pushed a commit to branch ignite-28938
in repository https://gitbox.apache.org/repos/asf/ignite.git

commit 74954d120c09e27bfc806682e7e5a617ed766fb8
Author: Anton Vinogradov <[email protected]>
AuthorDate: Mon Aug 3 19:55:29 2026 +0300

    IGNITE-28938 Self-review: check CustomMarshallingMessage on registration, 
drop unused imports, shorten javadocs
    
    Co-Authored-By: Claude Opus 5 <[email protected]>
---
 .../query/calcite/metadata/ColocationGroup.java    |  1 -
 .../ignite/internal/CustomMarshallingMessage.java  |  9 ++----
 .../ignite/internal/CustomWireFormMessage.java     | 10 +++---
 .../ignite/internal/MarshallableMessage.java       |  1 -
 .../communication/IgniteMessageFactoryImpl.java    |  6 ++--
 ...AbstractMarshallableMessageFactoryProvider.java | 37 ++++++++++++----------
 .../processors/cache/GridCacheEntryInfo.java       |  1 -
 .../preloader/GridDhtPartitionsFullMessage.java    |  1 -
 .../preloader/GridDhtPartitionsSingleMessage.java  |  1 -
 .../distributed/near/GridNearTxPrepareRequest.java |  1 -
 .../discovery/tcp/internal/TcpDiscoveryNode.java   |  3 +-
 11 files changed, 32 insertions(+), 39 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 1aeb5c77009..1187baa6b4b 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
@@ -38,7 +38,6 @@ 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.apache.ignite.marshaller.Marshaller;
 
 /** */
 public class ColocationGroup implements CustomWireFormMessage {
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/CustomMarshallingMessage.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/CustomMarshallingMessage.java
index 9730ff0347b..0bb1a6ecbef 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/CustomMarshallingMessage.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/CustomMarshallingMessage.java
@@ -17,15 +17,12 @@
 
 package org.apache.ignite.internal;
 
-import org.apache.ignite.marshaller.Marshaller;
 import org.apache.ignite.plugin.extensions.communication.Message;
 
 /**
- * A {@link Message} that takes part in marshalling itself, so the generated 
companion has a step to call. What that
- * step is differs: {@link MarshallableMessage} turns fields into bytes with a 
{@link Marshaller},
- * {@link CustomWireFormMessage} only reshapes its own fields. Everything that 
treats both the same way - the check
- * against {@link 
org.apache.ignite.plugin.extensions.communication.NonMarshallableMessage}, 
requiring the generated
- * marshaller to exist - refers to this interface.
+ * A {@link Message} with a marshalling step of its own, so its generated 
companion always has something to call.
+ * The step is either {@link MarshallableMessage} or {@link 
CustomWireFormMessage}; code that does not care which
+ * refers to this interface.
  */
 public interface CustomMarshallingMessage extends Message {
     // No-op.
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/CustomWireFormMessage.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/CustomWireFormMessage.java
index 0ed63001d01..e2abc0ce410 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/CustomWireFormMessage.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/CustomWireFormMessage.java
@@ -19,17 +19,15 @@ package org.apache.ignite.internal;
 
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.marshaller.Marshaller;
-import org.apache.ignite.plugin.extensions.communication.Message;
 
 /**
- * A {@link CustomMarshallingMessage} that converts its own fields to and from 
the form that goes on the wire: copying a value into the
- * field that is actually sent, packing bits, recalculating a TTL. Unlike 
{@link MarshallableMessage} it needs no {@link Marshaller}
- * to do that.
+ * A message that converts its own fields to and from the form that goes on 
the wire: copying a value into the field
+ * that is actually sent, packing bits, recalculating a TTL. Needs no {@link 
Marshaller} for that.
  */
 public interface CustomWireFormMessage extends CustomMarshallingMessage {
-    /** Converts the fields into the form that goes on the wire. Called before 
sending. */
+    /** Called before sending. */
     public void toWireForm() throws IgniteCheckedException;
 
-    /** Converts the fields back from the form they arrived in. Called after 
receiving. */
+    /** Called after receiving. */
     public void fromWireForm() throws IgniteCheckedException;
 }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/MarshallableMessage.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/MarshallableMessage.java
index 99ec4e25457..c8c95b8aae0 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/MarshallableMessage.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/MarshallableMessage.java
@@ -19,7 +19,6 @@ package org.apache.ignite.internal;
 
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.marshaller.Marshaller;
-import org.apache.ignite.plugin.extensions.communication.Message;
 
 /** A {@link CustomMarshallingMessage} whose step needs a {@link Marshaller}. 
*/
 public interface MarshallableMessage extends CustomMarshallingMessage {
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/IgniteMessageFactoryImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/IgniteMessageFactoryImpl.java
index a44bbf2706e..57ff0bcaf7a 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/IgniteMessageFactoryImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/IgniteMessageFactoryImpl.java
@@ -19,7 +19,7 @@ package org.apache.ignite.internal.managers.communication;
 
 import java.lang.reflect.Array;
 import org.apache.ignite.IgniteException;
-import org.apache.ignite.internal.MarshallableMessage;
+import org.apache.ignite.internal.CustomMarshallingMessage;
 import org.apache.ignite.internal.processors.cache.DeployableMessage;
 import org.apache.ignite.internal.processors.cache.GridCacheMessage;
 import org.apache.ignite.internal.processors.cache.GridCacheMessageDeployer;
@@ -92,8 +92,8 @@ public class IgniteMessageFactoryImpl<M extends Message, CM 
extends GridCacheMes
         try {
             Message msg = serializer.createMessage();
 
-            if (marshaller == null && msg instanceof MarshallableMessage) {
-                throw new IgniteException("Failed to register a message: it 
implements MarshallableMessage but no" +
+            if (marshaller == null && msg instanceof CustomMarshallingMessage) 
{
+                throw new IgniteException("Failed to register a message: it 
implements CustomMarshallingMessage but no" +
                     " marshaller is provided [directType=" + directType +
                     ", cls=" + msg.getClass().getName() + ']');
             }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/plugin/AbstractMarshallableMessageFactoryProvider.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/plugin/AbstractMarshallableMessageFactoryProvider.java
index cc2f1b4bde0..83cd19578a4 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/plugin/AbstractMarshallableMessageFactoryProvider.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/plugin/AbstractMarshallableMessageFactoryProvider.java
@@ -69,39 +69,32 @@ public abstract class 
AbstractMarshallableMessageFactoryProvider implements Mess
 
     /** */
     private static <T extends Message> void register(IgniteMessageFactory 
factory, Class<T> cls, short id, Marshaller marsh) {
-        MessageSerializer<T> serializer = loadGenerated(cls, "Serializer", 
null, true);
+        MessageSerializer<T> serializer = loadGenerated(cls, "Serializer", 
null);
 
-        // A CustomMarshallingMessage always gets a generated marshaller (its 
own step alone is a statement), so the
-        // absence of one is a build problem. For the rest the generator skips 
statement-free
-        // marshallers, so absence legitimately means "nothing to marshal"; 
the message and its companions ship in the
-        // same jar, hence a missing class cannot be a packaging accident that 
spares the (required) serializer.
         MessageMarshaller<T> marshaller = 
NonMarshallableMessage.class.isAssignableFrom(cls)
             ? null
-            : loadGenerated(cls, "Marshaller", marsh, 
CustomMarshallingMessage.class.isAssignableFrom(cls));
+            : loadGenerated(cls, "Marshaller", marsh);
 
-        // Deployers are generated for GridCacheMessage subclasses only, so 
the class lookup is skipped for the rest;
-        // a DeployableMessage left without a deployer is then rejected at 
registration.
+        // Deployers exist for GridCacheMessage only; a DeployableMessage left 
without one is rejected at registration.
         GridCacheMessageDeployer<?> deployer = 
GridCacheMessage.class.isAssignableFrom(cls)
-            ? loadGenerated(cls, "Deployer", null, false)
+            ? loadGenerated(cls, "Deployer", null)
             : null;
 
         factory.register(id, serializer, marshaller, deployer);
     }
 
     /**
-     * Instantiates the generated companion class {@code 
<message>Serializer/Marshaller/Deployer}. Only the marshaller
-     * companion ever takes a {@code Marshaller}, and only when the message 
has fields to marshal with one, so
-     * {@code marsh} is {@code null} for the other two. Constructor lookups, 
including missing companions, are cached
-     * per message class in {@link #COMPANIONS}.
+     * Instantiates the generated {@code 
<message>Serializer/Marshaller/Deployer}. Only the marshaller may take a
+     * {@code Marshaller}, so {@code marsh} is {@code null} for the other two. 
Lookups are cached in {@link #COMPANIONS}.
      *
-     * @return the companion, or {@code null} when it is not generated and 
{@code required} is {@code false}.
+     * @return the companion, or {@code null} when it is not generated and not 
required.
      */
     @SuppressWarnings("unchecked")
-    private static <T> @Nullable T loadGenerated(Class<?> cls, String suffix, 
@Nullable Marshaller marsh, boolean required) {
+    private static <T> @Nullable T loadGenerated(Class<?> cls, String suffix, 
@Nullable Marshaller marsh) {
         Constructor<?> ctor = COMPANIONS.get(cls).ctor(suffix);
 
         if (ctor == null) {
-            if (required) {
+            if (required(cls, suffix)) {
                 throw new IgniteException("No " + cls.getSimpleName() + suffix 
+ " found for " + cls.getName() +
                     ". Either the class is not processed by codegen or the 
generated sources are stale," +
                     " try 'mvn clean install'.");
@@ -121,6 +114,18 @@ public abstract class 
AbstractMarshallableMessageFactoryProvider implements Mess
         }
     }
 
+    /**
+     * Every message gets a serializer, and a {@link CustomMarshallingMessage} 
always gets a marshaller, so a missing
+     * one means a broken build. The other companions are generated only when 
there is something to do, so their
+     * absence is normal.
+     *
+     * @return {@code true} if {@code cls} must have the {@code suffix} 
companion.
+     */
+    private static boolean required(Class<?> cls, String suffix) {
+        return "Serializer".equals(suffix)
+            || ("Marshaller".equals(suffix) && 
CustomMarshallingMessage.class.isAssignableFrom(cls));
+    }
+
     /** @return the sole public constructor of the generated companion {@code 
<message><suffix>}, or {@code null} when it does not exist. */
     private static @Nullable Constructor<?> companionCtor(Class<?> cls, String 
suffix) {
         try {
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryInfo.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryInfo.java
index f7e8dca7b0d..a66c48fa5b0 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryInfo.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryInfo.java
@@ -25,7 +25,6 @@ import 
org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
 import org.apache.ignite.internal.util.tostring.GridToStringInclude;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.marshaller.Marshaller;
 import org.apache.ignite.plugin.extensions.communication.CacheIdAware;
 
 /**
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 f1e8f1d4275..4e16d10e9e9 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,7 +40,6 @@ 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.marshaller.Marshaller;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsSingleMessage.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsSingleMessage.java
index 05796597d1c..f877b734f5a 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsSingleMessage.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsSingleMessage.java
@@ -31,7 +31,6 @@ import 
org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
 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.jetbrains.annotations.Nullable;
 
 /**
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareRequest.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareRequest.java
index 2f5964237a1..947f479baa4 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareRequest.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareRequest.java
@@ -34,7 +34,6 @@ 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.jetbrains.annotations.Nullable;
 
 /**
diff --git 
a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java
 
b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java
index 88f588e80c2..4956ac8fd0c 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java
@@ -35,8 +35,8 @@ import org.apache.ignite.cache.CacheMetrics;
 import org.apache.ignite.cluster.ClusterMetrics;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.ClusterMetricsSnapshot;
-import org.apache.ignite.internal.IgniteNodeAttributes;
 import org.apache.ignite.internal.CustomWireFormMessage;
+import org.apache.ignite.internal.IgniteNodeAttributes;
 import org.apache.ignite.internal.Marshalled;
 import org.apache.ignite.internal.Order;
 import org.apache.ignite.internal.managers.discovery.IgniteClusterNode;
@@ -49,7 +49,6 @@ import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.apache.ignite.lang.IgniteProductVersion;
-import org.apache.ignite.marshaller.Marshaller;
 import org.apache.ignite.spi.discovery.DiscoveryMetricsProvider;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.jetbrains.annotations.Nullable;

Reply via email to