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

nizhikov 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 141bbff8aa6 IGNITE-27733 Generate serdes code for BaselineNode (#12689)
141bbff8aa6 is described below

commit 141bbff8aa66638b9826b55a6564ba1d717df50e
Author: Nikolay <[email protected]>
AuthorDate: Wed Feb 4 14:56:47 2026 +0300

    IGNITE-27733 Generate serdes code for BaselineNode (#12689)
---
 .../internal/idto/IDTOSerializerGenerator.java     | 103 +++++++++++++--------
 .../idto/IgniteDataTransferObjectProcessor.java    |   1 -
 .../internal/management/baseline/BaselineNode.java |  32 +------
 3 files changed, 69 insertions(+), 67 deletions(-)

diff --git 
a/modules/codegen2/src/main/java/org/apache/ignite/internal/idto/IDTOSerializerGenerator.java
 
b/modules/codegen2/src/main/java/org/apache/ignite/internal/idto/IDTOSerializerGenerator.java
index f7fa1f034bf..92c622b5332 100644
--- 
a/modules/codegen2/src/main/java/org/apache/ignite/internal/idto/IDTOSerializerGenerator.java
+++ 
b/modules/codegen2/src/main/java/org/apache/ignite/internal/idto/IDTOSerializerGenerator.java
@@ -36,7 +36,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.UUID;
-import java.util.function.Function;
+import java.util.function.BiFunction;
 import javax.annotation.processing.FilerException;
 import javax.annotation.processing.ProcessingEnvironment;
 import javax.lang.model.element.Element;
@@ -55,6 +55,7 @@ import javax.tools.Diagnostic;
 import javax.tools.JavaFileObject;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.lang.IgniteBiTuple;
+import org.jetbrains.annotations.NotNull;
 
 import static org.apache.ignite.internal.MessageSerializerGenerator.NL;
 import static org.apache.ignite.internal.MessageSerializerGenerator.TAB;
@@ -80,23 +81,23 @@ public class IDTOSerializerGenerator {
 
     /** */
     private static final IgniteBiTuple<String, String> OBJECT_SERDES =
-        F.t("out.writeObject(obj.${f});", "obj.${f} = (${c})in.readObject();");
+        F.t("out.writeObject(obj.${f});", "(${c})in.readObject()");
 
     /** */
     private static final IgniteBiTuple<String, String> STR_STR_MAP =
-        F.t("U.writeStringMap(out, obj.${f});", "obj.${f} = 
U.readStringMap(in);");
+        F.t("U.writeStringMap(out, obj.${f});", "U.readStringMap(in)");
 
     /** Type name to write/read code for the type. */
     private static final Map<String, IgniteBiTuple<String, String>> 
TYPE_SERDES = new HashMap<>();
 
     {
-        TYPE_SERDES.put(boolean.class.getName(), 
F.t("out.writeBoolean(obj.${f});", "obj.${f} = in.readBoolean();"));
-        TYPE_SERDES.put(byte.class.getName(), F.t("out.write(obj.${f});", 
"obj.${f} = in.read();"));
-        TYPE_SERDES.put(short.class.getName(), 
F.t("out.writeShort(obj.${f});", "obj.${f} = in.readShort();"));
-        TYPE_SERDES.put(int.class.getName(), F.t("out.writeInt(obj.${f});", 
"obj.${f} = in.readInt();"));
-        TYPE_SERDES.put(long.class.getName(), F.t("out.writeLong(obj.${f});", 
"obj.${f} = in.readLong();"));
-        TYPE_SERDES.put(float.class.getName(), 
F.t("out.writeFloat(obj.${f});", "obj.${f} = in.readFloat();"));
-        TYPE_SERDES.put(double.class.getName(), 
F.t("out.writeDouble(obj.${f});", "obj.${f} = in.readDouble();"));
+        TYPE_SERDES.put(boolean.class.getName(), 
F.t("out.writeBoolean(obj.${f});", "in.readBoolean()"));
+        TYPE_SERDES.put(byte.class.getName(), F.t("out.write(obj.${f});", 
"in.read()"));
+        TYPE_SERDES.put(short.class.getName(), 
F.t("out.writeShort(obj.${f});", "in.readShort()"));
+        TYPE_SERDES.put(int.class.getName(), F.t("out.writeInt(obj.${f});", 
"in.readInt()"));
+        TYPE_SERDES.put(long.class.getName(), F.t("out.writeLong(obj.${f});", 
"in.readLong()"));
+        TYPE_SERDES.put(float.class.getName(), 
F.t("out.writeFloat(obj.${f});", "in.readFloat()"));
+        TYPE_SERDES.put(double.class.getName(), 
F.t("out.writeDouble(obj.${f});", "in.readDouble()"));
 
         TYPE_SERDES.put(Boolean.class.getName(), OBJECT_SERDES);
         TYPE_SERDES.put(Byte.class.getName(), OBJECT_SERDES);
@@ -109,40 +110,40 @@ public class IDTOSerializerGenerator {
         TYPE_SERDES.put(Exception.class.getName(), OBJECT_SERDES);
         TYPE_SERDES.put(Object.class.getName(), OBJECT_SERDES);
 
-        TYPE_SERDES.put(String.class.getName(), F.t("U.writeString(out, 
obj.${f});", "obj.${f} = U.readString(in);"));
-        TYPE_SERDES.put(UUID.class.getName(), F.t("U.writeUuid(out, 
obj.${f});", "obj.${f} = U.readUuid(in);"));
-        TYPE_SERDES.put("org.apache.ignite.lang.IgniteUuid", 
F.t("U.writeIgniteUuid(out, obj.${f});", "obj.${f} = U.readIgniteUuid(in);"));
+        TYPE_SERDES.put(String.class.getName(), F.t("U.writeString(out, 
obj.${f});", "U.readString(in)"));
+        TYPE_SERDES.put(UUID.class.getName(), F.t("U.writeUuid(out, 
obj.${f});", "U.readUuid(in)"));
+        TYPE_SERDES.put("org.apache.ignite.lang.IgniteUuid", 
F.t("U.writeIgniteUuid(out, obj.${f});", "U.readIgniteUuid(in)"));
         
TYPE_SERDES.put("org.apache.ignite.internal.processors.cache.version.GridCacheVersion",
 OBJECT_SERDES);
         TYPE_SERDES.put("org.apache.ignite.lang.IgniteProductVersion", 
OBJECT_SERDES);
         TYPE_SERDES.put("org.apache.ignite.internal.binary.BinaryMetadata", 
OBJECT_SERDES);
         
TYPE_SERDES.put("org.apache.ignite.internal.management.cache.PartitionKey", 
OBJECT_SERDES);
         
TYPE_SERDES.put("org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion",
 OBJECT_SERDES);
         TYPE_SERDES.put("org.apache.ignite.cache.CacheMode",
-            F.t("out.writeByte(CacheMode.toCode(obj.${f}));", "obj.${f} = 
CacheMode.fromCode(in.readByte());"));
-
-        TYPE_SERDES.put(TreeMap.class.getName(), F.t("U.writeMap(out, 
obj.${f});", "obj.${f} = U.readTreeMap(in);"));
-        TYPE_SERDES.put(LinkedHashMap.class.getName(), F.t("U.writeMap(out, 
obj.${f});", "obj.${f} = U.readLinkedMap(in);"));
-        TYPE_SERDES.put(Map.class.getName(), F.t("U.writeMap(out, obj.${f});", 
"obj.${f} = U.readMap(in);"));
-        TYPE_SERDES.put(Collection.class.getName(), 
F.t("U.writeCollection(out, obj.${f});", "obj.${f} = U.readCollection(in);"));
-        TYPE_SERDES.put(List.class.getName(), F.t("U.writeCollection(out, 
obj.${f});", "obj.${f} = U.readList(in);"));
-        TYPE_SERDES.put(Set.class.getName(), F.t("U.writeCollection(out, 
obj.${f});", "obj.${f} = U.readSet(in);"));
+            F.t("out.writeByte(CacheMode.toCode(obj.${f}));", 
"CacheMode.fromCode(in.readByte())"));
+
+        TYPE_SERDES.put(TreeMap.class.getName(), F.t("U.writeMap(out, 
obj.${f});", "U.readTreeMap(in)"));
+        TYPE_SERDES.put(LinkedHashMap.class.getName(), F.t("U.writeMap(out, 
obj.${f});", "U.readLinkedMap(in)"));
+        TYPE_SERDES.put(Map.class.getName(), F.t("U.writeMap(out, obj.${f});", 
"U.readMap(in)"));
+        TYPE_SERDES.put(Collection.class.getName(), 
F.t("U.writeCollection(out, obj.${f});", "U.readCollection(in)"));
+        TYPE_SERDES.put(List.class.getName(), F.t("U.writeCollection(out, 
obj.${f});", "U.readList(in)"));
+        TYPE_SERDES.put(Set.class.getName(), F.t("U.writeCollection(out, 
obj.${f});", "U.readSet(in)"));
     }
 
     /** Write/Read code for enum. */
     private static final IgniteBiTuple<String, String> ENUM_SERDES =
-        F.t("U.writeEnum(out, obj.${f});", "obj.${f} = U.readEnum(in, 
${c}.class);");
+        F.t("U.writeEnum(out, obj.${f});", "U.readEnum(in, ${c}.class)");
 
     /** Write/Read code for array. */
     private static final IgniteBiTuple<String, String> OBJ_ARRAY_SERDES =
-        F.t("U.writeArray(out, obj.${f});", "obj.${f} = U.readArray(in, 
${c}.class);");
+        F.t("U.writeArray(out, obj.${f});", "U.readArray(in, ${c}.class)");
 
     /** Type name to write/read code for the array of type. */
     private static final Map<String, IgniteBiTuple<String, String>> 
ARRAY_TYPE_SERDES = new HashMap<>();
 
     {
-        ARRAY_TYPE_SERDES.put(byte.class.getName(), F.t("U.writeByteArray(out, 
obj.${f});", "obj.${f} = U.readByteArray(in);"));
-        ARRAY_TYPE_SERDES.put(int.class.getName(), F.t("U.writeIntArray(out, 
obj.${f});", "obj.${f} = U.readIntArray(in);"));
-        ARRAY_TYPE_SERDES.put(long.class.getName(), F.t("U.writeLongArray(out, 
obj.${f});", "obj.${f} = U.readLongArray(in);"));
+        ARRAY_TYPE_SERDES.put(byte.class.getName(), F.t("U.writeByteArray(out, 
obj.${f});", "U.readByteArray(in)"));
+        ARRAY_TYPE_SERDES.put(int.class.getName(), F.t("U.writeIntArray(out, 
obj.${f});", "U.readIntArray(in)"));
+        ARRAY_TYPE_SERDES.put(long.class.getName(), F.t("U.writeLongArray(out, 
obj.${f});", "U.readLongArray(in)"));
         ARRAY_TYPE_SERDES.put(String.class.getName(), OBJ_ARRAY_SERDES);
         ARRAY_TYPE_SERDES.put(UUID.class.getName(), OBJ_ARRAY_SERDES);
     }
@@ -292,7 +293,7 @@ public class IDTOSerializerGenerator {
         code.add("/** {@inheritDoc} */");
         code.add("@Override public void writeExternal(" + clsName + " obj, 
ObjectOutput out) throws IOException {");
 
-        fieldsSerdes(flds, IgniteBiTuple::get1).forEach(line -> code.add(TAB + 
line));
+        fieldsSerdes(flds, (t, noNull) -> t.get1()).forEach(line -> 
code.add(TAB + line));
 
         code.add("}");
 
@@ -305,7 +306,32 @@ public class IDTOSerializerGenerator {
 
         code.add("/** {@inheritDoc} */");
         code.add("@Override public void readExternal(" + clsName + " obj, 
ObjectInput in) throws IOException, ClassNotFoundException {");
-        fieldsSerdes(flds, IgniteBiTuple::get2).forEach(line -> code.add(TAB + 
line));
+        fieldsSerdes(flds, (t, notNull) -> {
+            String pattern = "obj.${f} = " + t.get2() + ";";
+
+            if (notNull) {
+                /**
+                 * Intention here to change `obj.field = U.readSomething();` 
line to:
+                 * ```
+                 *    Type field0 = U.readSomething();
+                 *    if (field0 != null)
+                 *        obj.field = field0;
+                 * ```
+                 * We want to respect @NotNull annotation and keep default 
value.
+                 */
+                pattern = pattern.replaceAll("obj.\\$\\{f}", "\\${c} \\${f}0");
+                pattern += "\nif (${f}0 != null)\n" + TAB + "obj.${f} = 
${f}0;";
+            }
+
+            return pattern;
+        }).forEach(line -> {
+            if (line.indexOf('\n') != -1) {
+                for (String line0 : line.split("\n"))
+                    code.add(TAB + line0);
+            }
+            else
+                code.add(TAB + line);
+        });
         code.add("}");
 
         return code;
@@ -318,7 +344,7 @@ public class IDTOSerializerGenerator {
      */
     private List<String> fieldsSerdes(
         List<VariableElement> flds,
-        Function<IgniteBiTuple<String, String>, String> lineProvider
+        BiFunction<IgniteBiTuple<String, String>, Boolean, String> lineProvider
     ) {
         TypeMirror dtoCls = 
env.getElementUtils().getTypeElement(DTO_CLASS).asType();
 
@@ -328,12 +354,14 @@ public class IDTOSerializerGenerator {
             TypeMirror type = fld.asType();
             TypeMirror comp = null;
 
+            boolean notNull = type.toString().startsWith("@" + 
NotNull.class.getName());
+
             IgniteBiTuple<String, String> serDes = null;
 
             if (env.getTypeUtils().isAssignable(type, dtoCls))
                 serDes = OBJECT_SERDES;
             else if (type.getKind() == TypeKind.TYPEVAR)
-                serDes = F.t("out.writeObject(obj.${f});", "obj.${f} = 
in.readObject();");
+                serDes = F.t("out.writeObject(obj.${f});", "in.readObject()");
             else if (type.getKind() == TypeKind.ARRAY) {
                 comp = ((ArrayType)type).getComponentType();
 
@@ -365,15 +393,14 @@ public class IDTOSerializerGenerator {
                 }
             }
 
-            if (serDes != null) {
-                String pattern = lineProvider.apply(serDes);
-
-                code.add(pattern
-                    .replaceAll("\\$\\{f}", fld.getSimpleName().toString())
-                    .replaceAll("\\$\\{c}", simpleClassName(comp == null ? 
type : comp)));
-            }
-            else
+            if (serDes == null)
                 throw new IllegalStateException("Unsupported type: " + type);
+
+            String pattern = lineProvider.apply(serDes, notNull);
+
+            code.add(pattern
+                .replaceAll("\\$\\{f}", fld.getSimpleName().toString())
+                .replaceAll("\\$\\{c}", simpleClassName(comp == null ? type : 
comp)));
         }
 
         return code;
diff --git 
a/modules/codegen2/src/main/java/org/apache/ignite/internal/idto/IgniteDataTransferObjectProcessor.java
 
b/modules/codegen2/src/main/java/org/apache/ignite/internal/idto/IgniteDataTransferObjectProcessor.java
index 6756770d64b..5c830f1781d 100644
--- 
a/modules/codegen2/src/main/java/org/apache/ignite/internal/idto/IgniteDataTransferObjectProcessor.java
+++ 
b/modules/codegen2/src/main/java/org/apache/ignite/internal/idto/IgniteDataTransferObjectProcessor.java
@@ -72,7 +72,6 @@ public class IgniteDataTransferObjectProcessor extends 
AbstractProcessor {
 
     /** Currently unsupported classes. */
     private static final Set<String> UNSUPPORTED = Set.of(
-        "org.apache.ignite.internal.management.baseline.BaselineNode",
         "org.apache.ignite.internal.processors.cache.CacheMetricsSnapshot",
         
"org.apache.ignite.internal.commandline.cache.check_indexes_inline_size.CheckIndexInlineSizesResult",
         "org.apache.ignite.internal.management.cache.ContentionJobResult",
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/management/baseline/BaselineNode.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/management/baseline/BaselineNode.java
index 574e449e0b8..3313f0dc31b 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/management/baseline/BaselineNode.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/management/baseline/BaselineNode.java
@@ -17,9 +17,6 @@
 
 package org.apache.ignite.internal.management.baseline;
 
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
 import java.net.InetAddress;
 import java.util.Collection;
 import java.util.Collections;
@@ -27,7 +24,6 @@ import java.util.Map;
 import org.apache.ignite.internal.dto.IgniteDataTransferObject;
 import org.apache.ignite.internal.managers.discovery.IgniteClusterNode;
 import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.internal.util.typedef.internal.U;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
@@ -39,19 +35,19 @@ public class BaselineNode extends IgniteDataTransferObject {
     private static final long serialVersionUID = 0L;
 
     /** */
-    private String consistentId;
+    String consistentId;
 
     /** */
-    private Map<String, Object> attrs;
+    Map<String, Object> attrs;
 
     /** */
-    private @Nullable Long order;
+    @Nullable Long order;
 
     /**
      * Resolved list of (ip, hostname) pairs
      * (if ip has no resolved host, hostname will be the string representation 
of ip).
      */
-    private @NotNull Collection<ResolvedAddresses> addrs = 
Collections.emptyList();
+    @NotNull Collection<ResolvedAddresses> addrs = Collections.emptyList();
 
     /**
      * Default constructor.
@@ -106,26 +102,6 @@ public class BaselineNode extends IgniteDataTransferObject 
{
         return addrs;
     }
 
-    /** {@inheritDoc} */
-    @Override protected void writeExternalData(ObjectOutput out) throws 
IOException {
-        U.writeString(out, consistentId);
-        U.writeMap(out, attrs);
-        out.writeObject(order);
-        U.writeCollection(out, addrs);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void readExternalData(ObjectInput in) throws 
IOException, ClassNotFoundException {
-        consistentId = U.readString(in);
-        attrs = U.readMap(in);
-        order = (Long)in.readObject();
-
-        Collection<ResolvedAddresses> inputAddrs = U.readCollection(in);
-
-        if (inputAddrs != null)
-            addrs = inputAddrs;
-    }
-
     /** {@inheritDoc} */
     @Override public String toString() {
         return S.toString(BaselineNode.class, this);

Reply via email to