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 <[email protected]> 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(); /**
