You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sd...@apache.org on 2023/04/04 17:24:56 UTC

[ignite-3] branch ignite-19220 created (now 1ac11759e1)

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

sdanilov pushed a change to branch ignite-19220
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


      at 1ac11759e1 IGNITE-19220 Prohibit marking NetworkMessage with Marshallable

This branch includes the following new commits:

     new 1ac11759e1 IGNITE-19220 Prohibit marking NetworkMessage with Marshallable

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[ignite-3] 01/01: IGNITE-19220 Prohibit marking NetworkMessage with Marshallable

Posted by sd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sdanilov pushed a commit to branch ignite-19220
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit 1ac11759e1e37c1e05264961d27d1aaa9a3b58ef
Author: Semyon Danilov <sa...@yandex.ru>
AuthorDate: Tue Apr 4 21:24:48 2023 +0400

    IGNITE-19220 Prohibit marking NetworkMessage with Marshallable
---
 .../processor/messages/MessageImplGenerator.java   | 12 +++++++++-
 .../processor/TransferableObjectProcessorTest.java | 11 +++++++++
 ...essageWithMarshallableNetworkMessageField.java} | 28 +++++-----------------
 .../ignite/raft/jraft/rpc/ActionRequest.java       |  2 --
 4 files changed, 28 insertions(+), 25 deletions(-)

diff --git a/modules/network-annotation-processor/src/main/java/org/apache/ignite/internal/network/processor/messages/MessageImplGenerator.java b/modules/network-annotation-processor/src/main/java/org/apache/ignite/internal/network/processor/messages/MessageImplGenerator.java
index 84e63cc954..beb830318c 100644
--- a/modules/network-annotation-processor/src/main/java/org/apache/ignite/internal/network/processor/messages/MessageImplGenerator.java
+++ b/modules/network-annotation-processor/src/main/java/org/apache/ignite/internal/network/processor/messages/MessageImplGenerator.java
@@ -48,6 +48,7 @@ import javax.lang.model.type.TypeMirror;
 import javax.tools.Diagnostic;
 import org.apache.ignite.internal.network.processor.MessageClass;
 import org.apache.ignite.internal.network.processor.MessageGroupWrapper;
+import org.apache.ignite.internal.network.processor.ProcessingException;
 import org.apache.ignite.internal.network.processor.TypeUtils;
 import org.apache.ignite.internal.tostring.IgniteToStringInclude;
 import org.apache.ignite.internal.tostring.S;
@@ -102,7 +103,8 @@ public class MessageImplGenerator {
 
         // create a field and a getter implementation for every getter in the message interface
         for (ExecutableElement getter : getters) {
-            var getterReturnType = TypeName.get(getter.getReturnType());
+            TypeMirror getterType = getter.getReturnType();
+            TypeName getterReturnType = TypeName.get(getterType);
 
             String getterName = getter.getSimpleName().toString();
 
@@ -111,6 +113,14 @@ public class MessageImplGenerator {
                     .addModifiers(Modifier.PRIVATE);
 
             boolean isMarshallable = getter.getAnnotation(Marshallable.class) != null;
+            boolean isMessage = typeUtils.isSubType(getterType, NetworkMessage.class);
+
+            if (isMarshallable && isMessage) {
+                String error =
+                        "Failed to process " + message.className() + ": " + getterName + " is both NetworkMessage and @Marshallable";
+
+                throw new ProcessingException(error);
+            }
 
             if (!isMarshallable) {
                 fieldBuilder.addModifiers(Modifier.FINAL);
diff --git a/modules/network/src/test/java/org/apache/ignite/internal/network/processor/TransferableObjectProcessorTest.java b/modules/network/src/test/java/org/apache/ignite/internal/network/processor/TransferableObjectProcessorTest.java
index ec119c6ab5..bb7c0346ba 100644
--- a/modules/network/src/test/java/org/apache/ignite/internal/network/processor/TransferableObjectProcessorTest.java
+++ b/modules/network/src/test/java/org/apache/ignite/internal/network/processor/TransferableObjectProcessorTest.java
@@ -249,6 +249,17 @@ public class TransferableObjectProcessorTest {
         );
     }
 
+    /**
+     * Tests that compilation fails if message's field is both {@link NetworkMessage} and marked
+     * as {@link org.apache.ignite.network.annotations.Marshallable}.
+     */
+    @Test
+    void testFieldBothNetworkMessageAndMarkedMarshallable() {
+        Compilation compilation = compile("MessageWithMarshallableNetworkMessageField");
+
+        assertThat(compilation).hadErrorContaining("msgField is both NetworkMessage and @Marshallable");
+    }
+
     /**
      * Compiles the given network message.
      */
diff --git a/modules/raft/src/main/java/org/apache/ignite/raft/jraft/rpc/ActionRequest.java b/modules/network/src/test/resources/org/apache/ignite/internal/network/processor/MessageWithMarshallableNetworkMessageField.java
similarity index 62%
copy from modules/raft/src/main/java/org/apache/ignite/raft/jraft/rpc/ActionRequest.java
copy to modules/network/src/test/resources/org/apache/ignite/internal/network/processor/MessageWithMarshallableNetworkMessageField.java
index 4781447a2a..07f49676b0 100644
--- a/modules/raft/src/main/java/org/apache/ignite/raft/jraft/rpc/ActionRequest.java
+++ b/modules/network/src/test/resources/org/apache/ignite/internal/network/processor/MessageWithMarshallableNetworkMessageField.java
@@ -15,31 +15,15 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.raft.jraft.rpc;
+package org.apache.ignite.internal.network.processor;
 
+import org.apache.ignite.internal.network.message.ScaleCubeMessage;
+import org.apache.ignite.network.NetworkMessage;
 import org.apache.ignite.network.annotations.Marshallable;
 import org.apache.ignite.network.annotations.Transferable;
-import org.apache.ignite.internal.raft.Command;
-import org.apache.ignite.raft.jraft.RaftMessageGroup;
 
-/**
- * Submit an action to a replication group.
- */
-@Transferable(value = RaftMessageGroup.RpcActionMessageGroup.ACTION_REQUEST)
-public interface ActionRequest extends Message {
-    /**
-     * @return Group id.
-     */
-    String groupId();
-
-    /**
-     * @return Action's command.
-     */
+@Transferable(1)
+public interface MessageWithMarshallableNetworkMessageField extends NetworkMessage {
     @Marshallable
-    Command command();
-
-    /**
-     * @return {@code True} for linearizable reading.
-     */
-    boolean readOnlySafe();
+    ScaleCubeMessage msgField();
 }
diff --git a/modules/raft/src/main/java/org/apache/ignite/raft/jraft/rpc/ActionRequest.java b/modules/raft/src/main/java/org/apache/ignite/raft/jraft/rpc/ActionRequest.java
index 4781447a2a..b88c6be05a 100644
--- a/modules/raft/src/main/java/org/apache/ignite/raft/jraft/rpc/ActionRequest.java
+++ b/modules/raft/src/main/java/org/apache/ignite/raft/jraft/rpc/ActionRequest.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.raft.jraft.rpc;
 
-import org.apache.ignite.network.annotations.Marshallable;
 import org.apache.ignite.network.annotations.Transferable;
 import org.apache.ignite.internal.raft.Command;
 import org.apache.ignite.raft.jraft.RaftMessageGroup;
@@ -35,7 +34,6 @@ public interface ActionRequest extends Message {
     /**
      * @return Action's command.
      */
-    @Marshallable
     Command command();
 
     /**