This is an automated email from the ASF dual-hosted git repository.
sergeychugunov 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 e74bb482111 IGNITE-25968 Use MessageSerializer for FragmentDescription
(#12204)
e74bb482111 is described below
commit e74bb482111a7d479f5439e908c89f3fb2e59918
Author: Maksim Davydov <[email protected]>
AuthorDate: Mon Sep 1 12:00:52 2025 +0300
IGNITE-25968 Use MessageSerializer for FragmentDescription (#12204)
---
modules/calcite/pom.xml | 6 +
.../calcite/message/CalciteMessageFactory.java | 9 +-
.../query/calcite/message/MessageType.java | 26 +-
.../calcite/metadata/FragmentDescription.java | 122 ++-----
.../internal/MessageSerializerGenerator.java | 23 ++
.../org/apache/ignite/internal/GridDirectMap.java | 3 +
.../extensions/communication/MessageReader.java | 1 +
.../internal/codegen/MessageProcessorTest.java | 14 +
.../src/test/resources/codegen/TestMapMessage.java | 278 +++++++++++++++
.../codegen/TestMapMessageSerializer.java | 373 +++++++++++++++++++++
10 files changed, 760 insertions(+), 95 deletions(-)
diff --git a/modules/calcite/pom.xml b/modules/calcite/pom.xml
index a90c1ffc3c5..366ca77711e 100644
--- a/modules/calcite/pom.xml
+++ b/modules/calcite/pom.xml
@@ -72,6 +72,12 @@
<version>${calcite.version}</version>
</dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>ignite-codegen2</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
<dependency>
<groupId>org.apache.calcite</groupId>
<artifactId>calcite-linq4j</artifactId>
diff --git
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/CalciteMessageFactory.java
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/CalciteMessageFactory.java
index 687d38c3e06..f78b7e39959 100644
---
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/CalciteMessageFactory.java
+++
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/CalciteMessageFactory.java
@@ -28,8 +28,13 @@ public class CalciteMessageFactory implements
MessageFactoryProvider {
/** {@inheritDoc} */
@SuppressWarnings({"unchecked", "rawtypes"})
@Override public void registerAll(MessageFactory factory) {
- for (MessageType type : MessageType.values())
- factory.register(type.directType(), (Supplier)type.factory());
+ for (MessageType type : MessageType.values()) {
+ // TODO: Temporary check — remove once all inheritors have
migrated to the new serialization framework
+ if (type.serializer() != null)
+ factory.register(type.directType(), (Supplier)type.factory(),
type.serializer());
+ else
+ factory.register(type.directType(), (Supplier)type.factory());
+ }
}
/**
diff --git
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/MessageType.java
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/MessageType.java
index 56b57c385c7..9492d66d650 100644
---
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/MessageType.java
+++
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/message/MessageType.java
@@ -18,9 +18,11 @@
package org.apache.ignite.internal.processors.query.calcite.message;
import java.util.function.Supplier;
+import org.apache.ignite.internal.codegen.FragmentDescriptionSerializer;
import
org.apache.ignite.internal.processors.query.calcite.metadata.ColocationGroup;
import
org.apache.ignite.internal.processors.query.calcite.metadata.FragmentDescription;
import
org.apache.ignite.internal.processors.query.calcite.metadata.FragmentMapping;
+import org.apache.ignite.plugin.extensions.communication.MessageSerializer;
/**
*
@@ -57,7 +59,7 @@ public enum MessageType {
COLOCATION_GROUP(351, ColocationGroup::new),
/** */
- FRAGMENT_DESCRIPTION(352, FragmentDescription::new),
+ FRAGMENT_DESCRIPTION(352, FragmentDescription::new, new
FragmentDescriptionSerializer()),
/** */
QUERY_TX_ENTRY(353, QueryTxEntry::new);
@@ -68,14 +70,29 @@ public enum MessageType {
/** */
private final Supplier<CalciteMessage> factory;
+ /** */
+ private MessageSerializer serializer;
+
/**
* @param directType Message direct type.
+ * @param factory Message factory.
*/
MessageType(int directType, Supplier<CalciteMessage> factory) {
this.directType = directType;
this.factory = factory;
}
+ /**
+ * @param directType Message direct type.
+ * @param factory Message factory.
+ * @param serializer Message serializer.
+ */
+ MessageType(int directType, Supplier<CalciteMessage> factory,
MessageSerializer serializer) {
+ this.directType = directType;
+ this.factory = factory;
+ this.serializer = serializer;
+ }
+
/**
* @return Message direct type;
*/
@@ -89,4 +106,11 @@ public enum MessageType {
public Supplier<CalciteMessage> factory() {
return factory;
}
+
+ /**
+ * @return Message serializer.
+ */
+ public MessageSerializer serializer() {
+ return serializer;
+ }
}
diff --git
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/FragmentDescription.java
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/FragmentDescription.java
index fdb5a39578f..47d6b63b751 100644
---
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/FragmentDescription.java
+++
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/FragmentDescription.java
@@ -17,41 +17,37 @@
package org.apache.ignite.internal.processors.query.calcite.metadata;
-import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
-import org.apache.ignite.internal.GridDirectMap;
-import org.apache.ignite.internal.GridDirectTransient;
+import org.apache.ignite.internal.Order;
import org.apache.ignite.internal.processors.cache.GridCacheSharedContext;
import
org.apache.ignite.internal.processors.query.calcite.message.MarshalableMessage;
import org.apache.ignite.internal.processors.query.calcite.message.MessageType;
import org.apache.ignite.internal.util.UUIDCollectionMessage;
import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.plugin.extensions.communication.Message;
-import
org.apache.ignite.plugin.extensions.communication.MessageCollectionItemType;
-import org.apache.ignite.plugin.extensions.communication.MessageReader;
-import org.apache.ignite.plugin.extensions.communication.MessageWriter;
/** */
public class FragmentDescription implements MarshalableMessage {
/** */
+ @Order(0)
private long fragmentId;
/** */
+ @Order(1)
private FragmentMapping mapping;
/** */
- private ColocationGroup target;
+ @Order(2) // TODO: Remove this field (and MarshallableMessage interface)
once IGNITE-26133 is completed
+ private Map<Long, UUIDCollectionMessage> remoteSources0;
/** */
- @GridDirectTransient
- private Map<Long, List<UUID>> remoteSources;
+ @Order(3)
+ private ColocationGroup target;
/** */
- @GridDirectMap(keyType = Long.class, valueType = Message.class)
- private Map<Long, UUIDCollectionMessage> remoteSources0;
+ private Map<Long, List<UUID>> remoteSources;
/** */
public FragmentDescription() {
@@ -71,6 +67,11 @@ public class FragmentDescription implements
MarshalableMessage {
return fragmentId;
}
+ /** */
+ public void fragmentId(long fragmentId) {
+ this.fragmentId = fragmentId;
+ }
+
/** */
public List<UUID> nodeIds() {
return mapping.nodeIds();
@@ -81,6 +82,11 @@ public class FragmentDescription implements
MarshalableMessage {
return target;
}
+ /** */
+ public void target(ColocationGroup target) {
+ this.target = target;
+ }
+
/** */
public Map<Long, List<UUID>> remotes() {
return remoteSources;
@@ -91,92 +97,24 @@ public class FragmentDescription implements
MarshalableMessage {
return mapping;
}
- /** {@inheritDoc} */
- @Override public MessageType type() {
- return MessageType.FRAGMENT_DESCRIPTION;
+ /** */
+ public void mapping(FragmentMapping mapping) {
+ this.mapping = mapping;
}
- /** {@inheritDoc} */
- @Override public boolean writeTo(ByteBuffer buf, MessageWriter writer) {
- writer.setBuffer(buf);
-
- if (!writer.isHeaderWritten()) {
- if (!writer.writeHeader(directType()))
- return false;
-
- writer.onHeaderWritten();
- }
-
- switch (writer.state()) {
- case 0:
- if (!writer.writeLong(fragmentId))
- return false;
-
- writer.incrementState();
-
- case 1:
- if (!writer.writeMessage(mapping))
- return false;
-
- writer.incrementState();
-
- case 2:
- if (!writer.writeMap(remoteSources0,
MessageCollectionItemType.LONG, MessageCollectionItemType.MSG))
- return false;
-
- writer.incrementState();
-
- case 3:
- if (!writer.writeMessage(target))
- return false;
-
- writer.incrementState();
-
- }
+ /** */
+ public Map<Long, UUIDCollectionMessage> remoteSources0() {
+ return remoteSources0;
+ }
- return true;
+ /** */
+ public void remoteSources0(Map<Long, UUIDCollectionMessage>
remoteSources0) {
+ this.remoteSources0 = remoteSources0;
}
/** {@inheritDoc} */
- @Override public boolean readFrom(ByteBuffer buf, MessageReader reader) {
- reader.setBuffer(buf);
-
- switch (reader.state()) {
- case 0:
- fragmentId = reader.readLong();
-
- if (!reader.isLastRead())
- return false;
-
- reader.incrementState();
-
- case 1:
- mapping = reader.readMessage();
-
- if (!reader.isLastRead())
- return false;
-
- reader.incrementState();
-
- case 2:
- remoteSources0 =
reader.readMap(MessageCollectionItemType.LONG, MessageCollectionItemType.MSG,
false);
-
- if (!reader.isLastRead())
- return false;
-
- reader.incrementState();
-
- case 3:
- target = reader.readMessage();
-
- if (!reader.isLastRead())
- return false;
-
- reader.incrementState();
-
- }
-
- return true;
+ @Override public MessageType type() {
+ return MessageType.FRAGMENT_DESCRIPTION;
}
/** {@inheritDoc} */
diff --git
a/modules/codegen2/src/main/java/org/apache/ignite/internal/MessageSerializerGenerator.java
b/modules/codegen2/src/main/java/org/apache/ignite/internal/MessageSerializerGenerator.java
index 930bbcf9ee3..1e26d38c451 100644
---
a/modules/codegen2/src/main/java/org/apache/ignite/internal/MessageSerializerGenerator.java
+++
b/modules/codegen2/src/main/java/org/apache/ignite/internal/MessageSerializerGenerator.java
@@ -30,6 +30,7 @@ import java.util.BitSet;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.UUID;
import javax.annotation.processing.FilerException;
@@ -351,6 +352,18 @@ class MessageSerializerGenerator {
else if (sameType(type,
"org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion"))
returnFalseIfWriteFailed(write,
"writer.writeAffinityTopologyVersion", getExpr);
+ else if (assignableFrom(erasedType(type),
type(Map.class.getName()))) {
+ List<? extends TypeMirror> typeArgs =
((DeclaredType)type).getTypeArguments();
+
+ assert typeArgs.size() == 2;
+
+
imports.add("org.apache.ignite.plugin.extensions.communication.MessageCollectionItemType");
+
+ returnFalseIfWriteFailed(write, "writer.writeMap", getExpr,
+ "MessageCollectionItemType." +
messageCollectionItemType(typeArgs.get(0)),
+ "MessageCollectionItemType." +
messageCollectionItemType(typeArgs.get(1)));
+ }
+
else if (assignableFrom(type, type(MESSAGE_INTERFACE)))
returnFalseIfWriteFailed(write, "writer.writeMessage",
getExpr);
@@ -464,6 +477,16 @@ class MessageSerializerGenerator {
else if (sameType(type,
"org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion"))
returnFalseIfReadFailed(name,
"reader.readAffinityTopologyVersion");
+ else if (assignableFrom(erasedType(type),
type(Map.class.getName()))) {
+ List<? extends TypeMirror> typeArgs =
((DeclaredType)type).getTypeArguments();
+
+ assert typeArgs.size() == 2;
+
+ returnFalseIfReadFailed(name, "reader.readMap",
+ "MessageCollectionItemType." +
messageCollectionItemType(typeArgs.get(0)),
+ "MessageCollectionItemType." +
messageCollectionItemType(typeArgs.get(1)), "false");
+ }
+
else if (assignableFrom(type, type(MESSAGE_INTERFACE)))
returnFalseIfReadFailed(name, "reader.readMessage");
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/GridDirectMap.java
b/modules/core/src/main/java/org/apache/ignite/internal/GridDirectMap.java
index de42211e1f0..8bddc4756d5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/GridDirectMap.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/GridDirectMap.java
@@ -24,9 +24,12 @@ import java.lang.annotation.Target;
/**
* Annotates map fields.
+ * Deprecated as not needed for new messages. See {@link Order} and {@link
MessageProcessor} for details on how message
+ * serialization code is generated.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
+@Deprecated
public @interface GridDirectMap {
/**
* @return Key type.
diff --git
a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java
b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java
index 868df4f397d..6d0ac9d191c 100644
---
a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java
+++
b/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/MessageReader.java
@@ -222,6 +222,7 @@ public interface MessageReader {
* @param <M> Type of the red map.
* @return Map.
*/
+ // TODO: IGNITE-26329 — switch to the new readMap method without the flag
parameter
public <M extends Map<?, ?>> M readMap(MessageCollectionItemType keyType,
MessageCollectionItemType valType, boolean linked);
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/codegen/MessageProcessorTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/codegen/MessageProcessorTest.java
index a9d653ff3e6..f83be0324b1 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/codegen/MessageProcessorTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/codegen/MessageProcessorTest.java
@@ -66,6 +66,20 @@ public class MessageProcessorTest {
.hasSourceEquivalentTo(javaFile("TestCollectionsMessageSerializer.java"));
}
+ /** */
+ @Test
+ public void testMapMessage() {
+ Compilation compilation = compile("TestMapMessage.java");
+
+ assertThat(compilation).succeeded();
+
+ assertEquals(1, compilation.generatedSourceFiles().size());
+
+ assertThat(compilation)
+
.generatedSourceFile("org.apache.ignite.internal.codegen.TestMapMessageSerializer")
+ .hasSourceEquivalentTo(javaFile("TestMapMessageSerializer.java"));
+ }
+
/** */
@Test
public void testEmptyMessage() {
diff --git a/modules/core/src/test/resources/codegen/TestMapMessage.java
b/modules/core/src/test/resources/codegen/TestMapMessage.java
new file mode 100644
index 00000000000..3d81c27f297
--- /dev/null
+++ b/modules/core/src/test/resources/codegen/TestMapMessage.java
@@ -0,0 +1,278 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal;
+
+import java.util.BitSet;
+import java.util.Map;
+import java.util.UUID;
+import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
+import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
+import org.apache.ignite.lang.IgniteUuid;
+import org.apache.ignite.plugin.extensions.communication.Message;
+
+public class TestMapMessage implements Message {
+ @Order(0)
+ private Map<boolean[], Long> booleanArrayBoxedLongMap;
+
+ @Order(1)
+ private Map<byte[], boolean[]> byteArrayBooleanArrayMap;
+
+ @Order(2)
+ private Map<short[], byte[]> shortArrayByteArrayMap;
+
+ @Order(3)
+ private Map<int[], short[]> intArrayShortArrayMap;
+
+ @Order(4)
+ private Map<long[], int[]> longArrayIntArrayMap;
+
+ @Order(5)
+ private Map<char[], long[]> charArrayLongArrayMap;
+
+ @Order(6)
+ private Map<float[], char[]> floatArrayCharArrayMap;
+
+ @Order(7)
+ private Map<double[], float[]> doubleArrayFloatArrayMap;
+
+ @Order(8)
+ private Map<String, double[]> stringDoubleArrayMap;
+
+ @Order(9)
+ private Map<UUID, String> uuidStringMap;
+
+ @Order(10)
+ private Map<BitSet, UUID> bitSetUuidMap;
+
+ @Order(11)
+ private Map<IgniteUuid, BitSet> igniteUuidBitSetMap;
+
+ @Order(12)
+ private Map<AffinityTopologyVersion, IgniteUuid>
affTopVersionIgniteUuidMap;
+
+ @Order(13)
+ private Map<Boolean, AffinityTopologyVersion> boxedBooleanAffTopVersionMap;
+
+ @Order(14)
+ private Map<Byte, Boolean> boxedByteBoxedBooleanMap;
+
+ @Order(15)
+ private Map<Short, Byte> boxedShortBoxedByteMap;
+
+ @Order(16)
+ private Map<Integer, Short> boxedIntBoxedShortMap;
+
+ @Order(17)
+ private Map<Long, Integer> boxedLongBoxedIntMap;
+
+ @Order(18)
+ private Map<Character, Long> boxedCharBoxedLongMap;
+
+ @Order(19)
+ private Map<Float, Character> boxedFloatBoxedCharMap;
+
+ @Order(20)
+ private Map<Double, Float> boxedDoubleBoxedFloatMap;
+
+ @Order(21)
+ private Map<GridCacheVersion, Double> messageBoxedDoubleMap;
+
+ public Map<boolean[], Long> booleanArrayBoxedLongMap() {
+ return booleanArrayBoxedLongMap;
+ }
+
+ public void booleanArrayBoxedLongMap(Map<boolean[], Long>
booleanArrayBoxedLongMap) {
+ this.booleanArrayBoxedLongMap = booleanArrayBoxedLongMap;
+ }
+
+ public Map<byte[], boolean[]> byteArrayBooleanArrayMap() {
+ return byteArrayBooleanArrayMap;
+ }
+
+ public void byteArrayBooleanArrayMap(Map<byte[], boolean[]>
byteArrayBooleanArrayMap) {
+ this.byteArrayBooleanArrayMap = byteArrayBooleanArrayMap;
+ }
+
+ public Map<short[], byte[]> shortArrayByteArrayMap() {
+ return shortArrayByteArrayMap;
+ }
+
+ public void shortArrayByteArrayMap(Map<short[], byte[]>
shortArrayByteArrayMap) {
+ this.shortArrayByteArrayMap = shortArrayByteArrayMap;
+ }
+
+ public Map<int[], short[]> intArrayShortArrayMap() {
+ return intArrayShortArrayMap;
+ }
+
+ public void intArrayShortArrayMap(Map<int[], short[]>
intArrayShortArrayMap) {
+ this.intArrayShortArrayMap = intArrayShortArrayMap;
+ }
+
+ public Map<long[], int[]> longArrayIntArrayMap() {
+ return longArrayIntArrayMap;
+ }
+
+ public void longArrayIntArrayMap(Map<long[], int[]> longArrayIntArrayMap) {
+ this.longArrayIntArrayMap = longArrayIntArrayMap;
+ }
+
+ public Map<char[], long[]> charArrayLongArrayMap() {
+ return charArrayLongArrayMap;
+ }
+
+ public void charArrayLongArrayMap(Map<char[], long[]>
charArrayLongArrayMap) {
+ this.charArrayLongArrayMap = charArrayLongArrayMap;
+ }
+
+ public Map<float[], char[]> floatArrayCharArrayMap() {
+ return floatArrayCharArrayMap;
+ }
+
+ public void floatArrayCharArrayMap(Map<float[], char[]>
floatArrayCharArrayMap) {
+ this.floatArrayCharArrayMap = floatArrayCharArrayMap;
+ }
+
+ public Map<double[], float[]> doubleArrayFloatArrayMap() {
+ return doubleArrayFloatArrayMap;
+ }
+
+ public void doubleArrayFloatArrayMap(Map<double[], float[]>
doubleArrayFloatArrayMap) {
+ this.doubleArrayFloatArrayMap = doubleArrayFloatArrayMap;
+ }
+
+ public Map<String, double[]> stringDoubleArrayMap() {
+ return stringDoubleArrayMap;
+ }
+
+ public void stringDoubleArrayMap(Map<String, double[]>
stringDoubleArrayMap) {
+ this.stringDoubleArrayMap = stringDoubleArrayMap;
+ }
+
+ public Map<UUID, String> uuidStringMap() {
+ return uuidStringMap;
+ }
+
+ public void uuidStringMap(Map<UUID, String> uuidStringMap) {
+ this.uuidStringMap = uuidStringMap;
+ }
+
+ public Map<BitSet, UUID> bitSetUuidMap() {
+ return bitSetUuidMap;
+ }
+
+ public void bitSetUuidMap(Map<BitSet, UUID> bitSetUuidMap) {
+ this.bitSetUuidMap = bitSetUuidMap;
+ }
+
+ public Map<IgniteUuid, BitSet> igniteUuidBitSetMap() {
+ return igniteUuidBitSetMap;
+ }
+
+ public void igniteUuidBitSetMap(Map<IgniteUuid, BitSet>
igniteUuidBitSetMap) {
+ this.igniteUuidBitSetMap = igniteUuidBitSetMap;
+ }
+
+ public Map<AffinityTopologyVersion, IgniteUuid>
affTopVersionIgniteUuidMap() {
+ return affTopVersionIgniteUuidMap;
+ }
+
+ public void affTopVersionIgniteUuidMap(Map<AffinityTopologyVersion,
IgniteUuid> affTopVersionIgniteUuidMap) {
+ affTopVersionIgniteUuidMap = affTopVersionIgniteUuidMap;
+ }
+
+ public Map<Boolean, AffinityTopologyVersion>
boxedBooleanAffTopVersionMap() {
+ return boxedBooleanAffTopVersionMap;
+ }
+
+ public void boxedBooleanAffTopVersionMap(Map<Boolean,
AffinityTopologyVersion> boxedBooleanAffTopVersionMap) {
+ this.boxedBooleanAffTopVersionMap = boxedBooleanAffTopVersionMap;
+ }
+
+ public Map<Byte, Boolean> boxedByteBoxedBooleanMap() {
+ return boxedByteBoxedBooleanMap;
+ }
+
+ public void boxedByteBoxedBooleanMap(Map<Byte, Boolean>
boxedByteBoxedBooleanMap) {
+ this.boxedByteBoxedBooleanMap = boxedByteBoxedBooleanMap;
+ }
+
+ public Map<Short, Byte> boxedShortBoxedByteMap() {
+ return boxedShortBoxedByteMap;
+ }
+
+ public void boxedShortBoxedByteMap(Map<Short, Byte>
boxedShortBoxedByteMap) {
+ this.boxedShortBoxedByteMap = boxedShortBoxedByteMap;
+ }
+
+ public Map<Integer, Short> boxedIntBoxedShortMap() {
+ return boxedIntBoxedShortMap;
+ }
+
+ public void boxedIntBoxedShortMap(Map<Integer, Short>
boxedIntBoxedShortMap) {
+ this.boxedIntBoxedShortMap = boxedIntBoxedShortMap;
+ }
+
+ public Map<Long, Integer> boxedLongBoxedIntMap() {
+ return boxedLongBoxedIntMap;
+ }
+
+ public void boxedLongBoxedIntMap(Map<Long, Integer> boxedLongBoxedIntMap) {
+ this.boxedLongBoxedIntMap = boxedLongBoxedIntMap;
+ }
+
+ public Map<Character, Long> boxedCharBoxedLongMap() {
+ return boxedCharBoxedLongMap;
+ }
+
+ public void boxedCharBoxedLongMap(Map<Character, Long>
boxedCharBoxedLongMap) {
+ this.boxedCharBoxedLongMap = boxedCharBoxedLongMap;
+ }
+
+ public Map<Float, Character> boxedFloatBoxedCharMap() {
+ return boxedFloatBoxedCharMap;
+ }
+
+ public void boxedFloatBoxedCharMap(Map<Float, Character>
boxedFloatBoxedCharMap) {
+ this.boxedFloatBoxedCharMap = boxedFloatBoxedCharMap;
+ }
+
+ public Map<Double, Float> boxedDoubleBoxedFloatMap() {
+ return boxedDoubleBoxedFloatMap;
+ }
+
+ public void boxedDoubleBoxedFloatMap(Map<Double, Float>
boxedDoubleBoxedFloatMap) {
+ this.boxedDoubleBoxedFloatMap = boxedDoubleBoxedFloatMap;
+ }
+
+ public Map<GridCacheVersion, Double> messageBoxedDoubleMap() {
+ return messageBoxedDoubleMap;
+ }
+
+ public void messageBoxedDoubleMap(Map<GridCacheVersion, Double>
messageBoxedDoubleMap) {
+ messageBoxedDoubleMap = messageBoxedDoubleMap;
+ }
+
+ public short directType() {
+ return 0;
+ }
+
+ public void onAckReceived() {
+ // No-op.
+ }
+}
diff --git
a/modules/core/src/test/resources/codegen/TestMapMessageSerializer.java
b/modules/core/src/test/resources/codegen/TestMapMessageSerializer.java
new file mode 100644
index 00000000000..d782b5088f1
--- /dev/null
+++ b/modules/core/src/test/resources/codegen/TestMapMessageSerializer.java
@@ -0,0 +1,373 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.codegen;
+
+import java.nio.ByteBuffer;
+import org.apache.ignite.plugin.extensions.communication.Message;
+import org.apache.ignite.plugin.extensions.communication.MessageSerializer;
+import org.apache.ignite.plugin.extensions.communication.MessageWriter;
+import org.apache.ignite.plugin.extensions.communication.MessageReader;
+import
org.apache.ignite.plugin.extensions.communication.MessageCollectionItemType;
+import org.apache.ignite.internal.TestMapMessage;
+import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
+
+/**
+ * This class is generated automatically.
+ *
+ * @see org.apache.ignite.internal.MessageProcessor
+ */
+public class TestMapMessageSerializer implements MessageSerializer {
+ /** */
+ @Override public boolean writeTo(Message m, ByteBuffer buf, MessageWriter
writer) {
+ TestMapMessage msg = (TestMapMessage)m;
+
+ writer.setBuffer(buf);
+
+ if (!writer.isHeaderWritten()) {
+ if (!writer.writeHeader(msg.directType()))
+ return false;
+
+ writer.onHeaderWritten();
+ }
+
+ switch (writer.state()) {
+ case 0:
+ if (!writer.writeMap(msg.booleanArrayBoxedLongMap(),
MessageCollectionItemType.BOOLEAN_ARR, MessageCollectionItemType.LONG))
+ return false;
+
+ writer.incrementState();
+
+ case 1:
+ if (!writer.writeMap(msg.byteArrayBooleanArrayMap(),
MessageCollectionItemType.BYTE_ARR, MessageCollectionItemType.BOOLEAN_ARR))
+ return false;
+
+ writer.incrementState();
+
+ case 2:
+ if (!writer.writeMap(msg.shortArrayByteArrayMap(),
MessageCollectionItemType.SHORT_ARR, MessageCollectionItemType.BYTE_ARR))
+ return false;
+
+ writer.incrementState();
+
+ case 3:
+ if (!writer.writeMap(msg.intArrayShortArrayMap(),
MessageCollectionItemType.INT_ARR, MessageCollectionItemType.SHORT_ARR))
+ return false;
+
+ writer.incrementState();
+
+ case 4:
+ if (!writer.writeMap(msg.longArrayIntArrayMap(),
MessageCollectionItemType.LONG_ARR, MessageCollectionItemType.INT_ARR))
+ return false;
+
+ writer.incrementState();
+
+ case 5:
+ if (!writer.writeMap(msg.charArrayLongArrayMap(),
MessageCollectionItemType.CHAR_ARR, MessageCollectionItemType.LONG_ARR))
+ return false;
+
+ writer.incrementState();
+
+ case 6:
+ if (!writer.writeMap(msg.floatArrayCharArrayMap(),
MessageCollectionItemType.FLOAT_ARR, MessageCollectionItemType.CHAR_ARR))
+ return false;
+
+ writer.incrementState();
+
+ case 7:
+ if (!writer.writeMap(msg.doubleArrayFloatArrayMap(),
MessageCollectionItemType.DOUBLE_ARR, MessageCollectionItemType.FLOAT_ARR))
+ return false;
+
+ writer.incrementState();
+
+ case 8:
+ if (!writer.writeMap(msg.stringDoubleArrayMap(),
MessageCollectionItemType.STRING, MessageCollectionItemType.DOUBLE_ARR))
+ return false;
+
+ writer.incrementState();
+
+ case 9:
+ if (!writer.writeMap(msg.uuidStringMap(),
MessageCollectionItemType.UUID, MessageCollectionItemType.STRING))
+ return false;
+
+ writer.incrementState();
+
+ case 10:
+ if (!writer.writeMap(msg.bitSetUuidMap(),
MessageCollectionItemType.BIT_SET, MessageCollectionItemType.UUID))
+ return false;
+
+ writer.incrementState();
+
+ case 11:
+ if (!writer.writeMap(msg.igniteUuidBitSetMap(),
MessageCollectionItemType.IGNITE_UUID, MessageCollectionItemType.BIT_SET))
+ return false;
+
+ writer.incrementState();
+
+ case 12:
+ if (!writer.writeMap(msg.affTopVersionIgniteUuidMap(),
MessageCollectionItemType.AFFINITY_TOPOLOGY_VERSION,
MessageCollectionItemType.IGNITE_UUID))
+ return false;
+
+ writer.incrementState();
+
+ case 13:
+ if (!writer.writeMap(msg.boxedBooleanAffTopVersionMap(),
MessageCollectionItemType.BOOLEAN,
MessageCollectionItemType.AFFINITY_TOPOLOGY_VERSION))
+ return false;
+
+ writer.incrementState();
+
+ case 14:
+ if (!writer.writeMap(msg.boxedByteBoxedBooleanMap(),
MessageCollectionItemType.BYTE, MessageCollectionItemType.BOOLEAN))
+ return false;
+
+ writer.incrementState();
+
+ case 15:
+ if (!writer.writeMap(msg.boxedShortBoxedByteMap(),
MessageCollectionItemType.SHORT, MessageCollectionItemType.BYTE))
+ return false;
+
+ writer.incrementState();
+
+ case 16:
+ if (!writer.writeMap(msg.boxedIntBoxedShortMap(),
MessageCollectionItemType.INT, MessageCollectionItemType.SHORT))
+ return false;
+
+ writer.incrementState();
+
+ case 17:
+ if (!writer.writeMap(msg.boxedLongBoxedIntMap(),
MessageCollectionItemType.LONG, MessageCollectionItemType.INT))
+ return false;
+
+ writer.incrementState();
+
+ case 18:
+ if (!writer.writeMap(msg.boxedCharBoxedLongMap(),
MessageCollectionItemType.CHAR, MessageCollectionItemType.LONG))
+ return false;
+
+ writer.incrementState();
+
+ case 19:
+ if (!writer.writeMap(msg.boxedFloatBoxedCharMap(),
MessageCollectionItemType.FLOAT, MessageCollectionItemType.CHAR))
+ return false;
+
+ writer.incrementState();
+
+ case 20:
+ if (!writer.writeMap(msg.boxedDoubleBoxedFloatMap(),
MessageCollectionItemType.DOUBLE, MessageCollectionItemType.FLOAT))
+ return false;
+
+ writer.incrementState();
+
+ case 21:
+ if (!writer.writeMap(msg.messageBoxedDoubleMap(),
MessageCollectionItemType.MSG, MessageCollectionItemType.DOUBLE))
+ return false;
+
+ writer.incrementState();
+
+ }
+
+ return true;
+ }
+
+ /** */
+ @Override public boolean readFrom(Message m, ByteBuffer buf, MessageReader
reader) {
+ TestMapMessage msg = (TestMapMessage)m;
+
+ reader.setBuffer(buf);
+
+ switch (reader.state()) {
+ case 0:
+
msg.booleanArrayBoxedLongMap(reader.readMap(MessageCollectionItemType.BOOLEAN_ARR,
MessageCollectionItemType.LONG, false));
+
+ if (!reader.isLastRead())
+ return false;
+
+ reader.incrementState();
+
+ case 1:
+
msg.byteArrayBooleanArrayMap(reader.readMap(MessageCollectionItemType.BYTE_ARR,
MessageCollectionItemType.BOOLEAN_ARR, false));
+
+ if (!reader.isLastRead())
+ return false;
+
+ reader.incrementState();
+
+ case 2:
+
msg.shortArrayByteArrayMap(reader.readMap(MessageCollectionItemType.SHORT_ARR,
MessageCollectionItemType.BYTE_ARR, false));
+
+ if (!reader.isLastRead())
+ return false;
+
+ reader.incrementState();
+
+ case 3:
+
msg.intArrayShortArrayMap(reader.readMap(MessageCollectionItemType.INT_ARR,
MessageCollectionItemType.SHORT_ARR, false));
+
+ if (!reader.isLastRead())
+ return false;
+
+ reader.incrementState();
+
+ case 4:
+
msg.longArrayIntArrayMap(reader.readMap(MessageCollectionItemType.LONG_ARR,
MessageCollectionItemType.INT_ARR, false));
+
+ if (!reader.isLastRead())
+ return false;
+
+ reader.incrementState();
+
+ case 5:
+
msg.charArrayLongArrayMap(reader.readMap(MessageCollectionItemType.CHAR_ARR,
MessageCollectionItemType.LONG_ARR, false));
+
+ if (!reader.isLastRead())
+ return false;
+
+ reader.incrementState();
+
+ case 6:
+
msg.floatArrayCharArrayMap(reader.readMap(MessageCollectionItemType.FLOAT_ARR,
MessageCollectionItemType.CHAR_ARR, false));
+
+ if (!reader.isLastRead())
+ return false;
+
+ reader.incrementState();
+
+ case 7:
+
msg.doubleArrayFloatArrayMap(reader.readMap(MessageCollectionItemType.DOUBLE_ARR,
MessageCollectionItemType.FLOAT_ARR, false));
+
+ if (!reader.isLastRead())
+ return false;
+
+ reader.incrementState();
+
+ case 8:
+
msg.stringDoubleArrayMap(reader.readMap(MessageCollectionItemType.STRING,
MessageCollectionItemType.DOUBLE_ARR, false));
+
+ if (!reader.isLastRead())
+ return false;
+
+ reader.incrementState();
+
+ case 9:
+
msg.uuidStringMap(reader.readMap(MessageCollectionItemType.UUID,
MessageCollectionItemType.STRING, false));
+
+ if (!reader.isLastRead())
+ return false;
+
+ reader.incrementState();
+
+ case 10:
+
msg.bitSetUuidMap(reader.readMap(MessageCollectionItemType.BIT_SET,
MessageCollectionItemType.UUID, false));
+
+ if (!reader.isLastRead())
+ return false;
+
+ reader.incrementState();
+
+ case 11:
+
msg.igniteUuidBitSetMap(reader.readMap(MessageCollectionItemType.IGNITE_UUID,
MessageCollectionItemType.BIT_SET, false));
+
+ if (!reader.isLastRead())
+ return false;
+
+ reader.incrementState();
+
+ case 12:
+
msg.affTopVersionIgniteUuidMap(reader.readMap(MessageCollectionItemType.AFFINITY_TOPOLOGY_VERSION,
MessageCollectionItemType.IGNITE_UUID, false));
+
+ if (!reader.isLastRead())
+ return false;
+
+ reader.incrementState();
+
+ case 13:
+
msg.boxedBooleanAffTopVersionMap(reader.readMap(MessageCollectionItemType.BOOLEAN,
MessageCollectionItemType.AFFINITY_TOPOLOGY_VERSION, false));
+
+ if (!reader.isLastRead())
+ return false;
+
+ reader.incrementState();
+
+ case 14:
+
msg.boxedByteBoxedBooleanMap(reader.readMap(MessageCollectionItemType.BYTE,
MessageCollectionItemType.BOOLEAN, false));
+
+ if (!reader.isLastRead())
+ return false;
+
+ reader.incrementState();
+
+ case 15:
+
msg.boxedShortBoxedByteMap(reader.readMap(MessageCollectionItemType.SHORT,
MessageCollectionItemType.BYTE, false));
+
+ if (!reader.isLastRead())
+ return false;
+
+ reader.incrementState();
+
+ case 16:
+
msg.boxedIntBoxedShortMap(reader.readMap(MessageCollectionItemType.INT,
MessageCollectionItemType.SHORT, false));
+
+ if (!reader.isLastRead())
+ return false;
+
+ reader.incrementState();
+
+ case 17:
+
msg.boxedLongBoxedIntMap(reader.readMap(MessageCollectionItemType.LONG,
MessageCollectionItemType.INT, false));
+
+ if (!reader.isLastRead())
+ return false;
+
+ reader.incrementState();
+
+ case 18:
+
msg.boxedCharBoxedLongMap(reader.readMap(MessageCollectionItemType.CHAR,
MessageCollectionItemType.LONG, false));
+
+ if (!reader.isLastRead())
+ return false;
+
+ reader.incrementState();
+
+ case 19:
+
msg.boxedFloatBoxedCharMap(reader.readMap(MessageCollectionItemType.FLOAT,
MessageCollectionItemType.CHAR, false));
+
+ if (!reader.isLastRead())
+ return false;
+
+ reader.incrementState();
+
+ case 20:
+
msg.boxedDoubleBoxedFloatMap(reader.readMap(MessageCollectionItemType.DOUBLE,
MessageCollectionItemType.FLOAT, false));
+
+ if (!reader.isLastRead())
+ return false;
+
+ reader.incrementState();
+
+ case 21:
+
msg.messageBoxedDoubleMap(reader.readMap(MessageCollectionItemType.MSG,
MessageCollectionItemType.DOUBLE, false));
+
+ if (!reader.isLastRead())
+ return false;
+
+ reader.incrementState();
+
+ }
+
+ return true;
+ }
+}