You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by am...@apache.org on 2020/12/25 14:45:51 UTC

[ignite-3] 02/04: Minor.

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

amashenkov pushed a commit to branch gg-13618-asm
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit fbeed519ecfd4899c9e366fc771af0429b443923
Author: Andrew Mashenkov <an...@gmail.com>
AuthorDate: Tue Dec 22 17:01:00 2020 +0300

    Minor.
---
 .../marshaller/generator/SerializerGenerator.java  |   5 +-
 .../generator/TupleColumnAccessCodeGenerator.java  | 164 ++++-----------------
 .../benchmarks/SerializerBenchmarkTest.java        |   2 +-
 pom.xml                                            |   2 +
 4 files changed, 37 insertions(+), 136 deletions(-)

diff --git a/modules/commons/src/main/java/org/apache/ignite/internal/schema/marshaller/generator/SerializerGenerator.java b/modules/commons/src/main/java/org/apache/ignite/internal/schema/marshaller/generator/SerializerGenerator.java
index 33b8729..5621cbb 100644
--- a/modules/commons/src/main/java/org/apache/ignite/internal/schema/marshaller/generator/SerializerGenerator.java
+++ b/modules/commons/src/main/java/org/apache/ignite/internal/schema/marshaller/generator/SerializerGenerator.java
@@ -28,6 +28,7 @@ import com.squareup.javapoet.TypeSpec;
 import java.lang.invoke.MethodHandles;
 import java.lang.reflect.InvocationTargetException;
 import java.util.Objects;
+import java.util.concurrent.TimeUnit;
 import javax.annotation.processing.Generated;
 import javax.lang.model.element.Modifier;
 import jdk.jfr.Experimental;
@@ -70,8 +71,8 @@ public class SerializerGenerator implements SerializerFactory {
             generation = System.nanoTime() - generation;
 
             //TODO: pass code to logger on trace level.
-//            System.out.println("Serializer code generated in " + TimeUnit.NANOSECONDS.toMicros(generation) + "us");
-//                        System.out.println(javaFile.toString());
+            System.out.println("Serializer code generated in " + TimeUnit.NANOSECONDS.toMicros(generation) + "us");
+                        System.out.println(javaFile.toString());
 
             // Compile.
             long compilation = System.nanoTime();
diff --git a/modules/commons/src/main/java/org/apache/ignite/internal/schema/marshaller/generator/TupleColumnAccessCodeGenerator.java b/modules/commons/src/main/java/org/apache/ignite/internal/schema/marshaller/generator/TupleColumnAccessCodeGenerator.java
index 54fd30f..51186de 100644
--- a/modules/commons/src/main/java/org/apache/ignite/internal/schema/marshaller/generator/TupleColumnAccessCodeGenerator.java
+++ b/modules/commons/src/main/java/org/apache/ignite/internal/schema/marshaller/generator/TupleColumnAccessCodeGenerator.java
@@ -18,116 +18,14 @@
 package org.apache.ignite.internal.schema.marshaller.generator;
 
 import com.squareup.javapoet.CodeBlock;
-import java.lang.invoke.MethodHandle;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.MethodType;
 import java.util.BitSet;
 import java.util.UUID;
-import org.apache.ignite.internal.schema.Tuple;
-import org.apache.ignite.internal.schema.TupleAssembler;
 import org.apache.ignite.internal.schema.marshaller.BinaryMode;
 
 /**
  * Tuple access code generator.
  */
 public class TupleColumnAccessCodeGenerator {
-    /** Tuple method handler. */
-    public static final MethodHandle READ_BYTE;
-    /** Tuple method handler. */
-    public static final MethodHandle READ_SHORT;
-    /** Tuple method handler. */
-    public static final MethodHandle READ_INT;
-    /** Tuple method handler. */
-    public static final MethodHandle READ_LONG;
-    /** Tuple method handler. */
-    public static final MethodHandle READ_FLOAT;
-    /** Tuple method handler. */
-    public static final MethodHandle READ_DOUBLE;
-    /** Tuple method handler. */
-    public static final MethodHandle READ_BYTE_BOXED;
-    /** Tuple method handler. */
-    public static final MethodHandle READ_SHORT_BOXED;
-    /** Tuple method handler. */
-    public static final MethodHandle READ_INT_BOXED;
-    /** Tuple method handler. */
-    public static final MethodHandle READ_LONG_BOXED;
-    /** Tuple method handler. */
-    public static final MethodHandle READ_FLOAT_BOXED;
-    /** Tuple method handler. */
-    public static final MethodHandle READ_DOUBLE_BOXED;
-    /** Tuple method handler. */
-    public static final MethodHandle READ_UUID;
-    /** Tuple method handler. */
-    public static final MethodHandle READ_BITSET;
-    /** Tuple method handler. */
-    public static final MethodHandle READ_STRING;
-    /** Tuple method handler. */
-    public static final MethodHandle READ_BYTE_ARR;
-
-    /** Tuple assembler method handler. */
-    public static final MethodHandle WRITE_NULL;
-    /** Tuple assembler method handler. */
-    public static final MethodHandle WRITE_BYTE;
-    /** Tuple assembler method handler. */
-    public static final MethodHandle WRITE_SHORT;
-    /** Tuple assembler method handler. */
-    public static final MethodHandle WRITE_INT;
-    /** Tuple assembler method handler. */
-    public static final MethodHandle WRITE_LONG;
-    /** Tuple assembler method handler. */
-    public static final MethodHandle WRITE_FLOAT;
-    /** Tuple assembler method handler. */
-    public static final MethodHandle WRITE_DOUBLE;
-    /** Tuple assembler method handler. */
-    public static final MethodHandle WRITE_UUID;
-    /** Tuple assembler method handler. */
-    public static final MethodHandle WRITE_BITSET;
-    /** Tuple assembler method handler. */
-    public static final MethodHandle WRITE_STRING;
-    /** Tuple assembler method handler. */
-    public static final MethodHandle WRITE_BYTE_ARR;
-
-    /**
-     * Initializes static handlers.
-     */
-    static {
-        try {
-            MethodHandles.Lookup lookup = MethodHandles.lookup();
-
-            READ_BYTE = lookup.findVirtual(Tuple.class, "byteValue", MethodType.methodType(byte.class, int.class));
-            READ_SHORT = lookup.findVirtual(Tuple.class, "shortValue", MethodType.methodType(short.class, int.class));
-            READ_INT = lookup.findVirtual(Tuple.class, "intValue", MethodType.methodType(int.class, int.class));
-            READ_LONG = lookup.findVirtual(Tuple.class, "longValue", MethodType.methodType(long.class, int.class));
-            READ_FLOAT = lookup.findVirtual(Tuple.class, "floatValue", MethodType.methodType(float.class, int.class));
-            READ_DOUBLE = lookup.findVirtual(Tuple.class, "doubleValue", MethodType.methodType(double.class, int.class));
-            READ_BYTE_BOXED = lookup.findVirtual(Tuple.class, "byteValueBoxed", MethodType.methodType(Byte.class, int.class));
-            READ_SHORT_BOXED = lookup.findVirtual(Tuple.class, "shortValueBoxed", MethodType.methodType(Short.class, int.class));
-            READ_INT_BOXED = lookup.findVirtual(Tuple.class, "intValueBoxed", MethodType.methodType(Integer.class, int.class));
-            READ_LONG_BOXED = lookup.findVirtual(Tuple.class, "longValueBoxed", MethodType.methodType(Long.class, int.class));
-            READ_FLOAT_BOXED = lookup.findVirtual(Tuple.class, "floatValueBoxed", MethodType.methodType(Float.class, int.class));
-            READ_DOUBLE_BOXED = lookup.findVirtual(Tuple.class, "doubleValueBoxed", MethodType.methodType(Double.class, int.class));
-            READ_UUID = lookup.findVirtual(Tuple.class, "uuidValue", MethodType.methodType(UUID.class, int.class));
-            READ_BITSET = lookup.findVirtual(Tuple.class, "bitmaskValue", MethodType.methodType(BitSet.class, int.class));
-            READ_STRING = lookup.findVirtual(Tuple.class, "stringValue", MethodType.methodType(String.class, int.class));
-            READ_BYTE_ARR = lookup.findVirtual(Tuple.class, "bytesValue", MethodType.methodType(byte[].class, int.class));
-
-            WRITE_NULL = lookup.findVirtual(TupleAssembler.class, "appendNull", MethodType.methodType(void.class));
-            WRITE_BYTE = lookup.findVirtual(TupleAssembler.class, "appendByte", MethodType.methodType(void.class, byte.class));
-            WRITE_SHORT = lookup.findVirtual(TupleAssembler.class, "appendShort", MethodType.methodType(void.class, short.class));
-            WRITE_INT = lookup.findVirtual(TupleAssembler.class, "appendInt", MethodType.methodType(void.class, int.class));
-            WRITE_LONG = lookup.findVirtual(TupleAssembler.class, "appendLong", MethodType.methodType(void.class, long.class));
-            WRITE_FLOAT = lookup.findVirtual(TupleAssembler.class, "appendFloat", MethodType.methodType(void.class, float.class));
-            WRITE_DOUBLE = lookup.findVirtual(TupleAssembler.class, "appendDouble", MethodType.methodType(void.class, double.class));
-            WRITE_UUID = lookup.findVirtual(TupleAssembler.class, "appendUuid", MethodType.methodType(void.class, UUID.class));
-            WRITE_BITSET = lookup.findVirtual(TupleAssembler.class, "appendBitmask", MethodType.methodType(void.class, BitSet.class));
-            WRITE_STRING = lookup.findVirtual(TupleAssembler.class, "appendString", MethodType.methodType(void.class, String.class));
-            WRITE_BYTE_ARR = lookup.findVirtual(TupleAssembler.class, "appendBytes", MethodType.methodType(void.class, byte[].class));
-        }
-        catch (NoSuchMethodException | IllegalAccessException e) {
-            throw new IllegalStateException(e);
-        }
-    }
-
     /**
      * @param mode Binary mode.
      * @param colIdx Column index in schema.
@@ -136,47 +34,47 @@ public class TupleColumnAccessCodeGenerator {
     static TupleColumnAccessCodeGenerator createAccessor(BinaryMode mode, int colIdx) {
         switch (mode) {
             case P_BYTE:
-                return new TupleColumnAccessCodeGenerator("READ_BYTE", "WRITE_BYTE", byte.class, colIdx);
+                return new TupleColumnAccessCodeGenerator("byteValue", "appendByte", byte.class, colIdx);
             case P_SHORT:
-                return new TupleColumnAccessCodeGenerator("READ_SHORT", "WRITE_SHORT", short.class, colIdx);
+                return new TupleColumnAccessCodeGenerator("shortValue", "appendShort", short.class, colIdx);
             case P_INT:
-                return new TupleColumnAccessCodeGenerator("READ_INT", "WRITE_INT", int.class, colIdx);
+                return new TupleColumnAccessCodeGenerator("intValue", "appendInt", int.class, colIdx);
             case P_LONG:
-                return new TupleColumnAccessCodeGenerator("READ_LONG", "WRITE_LONG", long.class, colIdx);
+                return new TupleColumnAccessCodeGenerator("longValue", "appendLong", long.class, colIdx);
             case P_FLOAT:
-                return new TupleColumnAccessCodeGenerator("READ_FLOAT", "WRITE_FLOAT", float.class, colIdx);
+                return new TupleColumnAccessCodeGenerator("floatValue", "appendFloat", float.class, colIdx);
             case P_DOUBLE:
-                return new TupleColumnAccessCodeGenerator("READ_DOUBLE", "WRITE_DOUBLE", double.class, colIdx);
+                return new TupleColumnAccessCodeGenerator("doubleValue", "appendDouble", double.class, colIdx);
             case BYTE:
-                return new TupleColumnAccessCodeGenerator("READ_BYTE_BOXED", "WRITE_BYTE", Byte.class, byte.class, colIdx);
+                return new TupleColumnAccessCodeGenerator("byteValueBoxed", "appendByte", Byte.class, byte.class, colIdx);
             case SHORT:
-                return new TupleColumnAccessCodeGenerator("READ_SHORT_BOXED", "WRITE_SHORT", Short.class, short.class, colIdx);
+                return new TupleColumnAccessCodeGenerator("shortValueBoxed", "appendShort", Short.class, short.class, colIdx);
             case INT:
-                return new TupleColumnAccessCodeGenerator("READ_INT_BOXED", "WRITE_INT", Integer.class, int.class, colIdx);
+                return new TupleColumnAccessCodeGenerator("intValueBoxed", "appendInt", Integer.class, int.class, colIdx);
             case LONG:
-                return new TupleColumnAccessCodeGenerator("READ_LONG_BOXED", "WRITE_LONG", Long.class, long.class, colIdx);
+                return new TupleColumnAccessCodeGenerator("longValueBoxed", "appendLong", Long.class, long.class, colIdx);
             case FLOAT:
-                return new TupleColumnAccessCodeGenerator("READ_FLOAT_BOXED", "WRITE_FLOAT", Float.class, float.class, colIdx);
+                return new TupleColumnAccessCodeGenerator("floatValueBoxed", "appendFloat", Float.class, float.class, colIdx);
             case DOUBLE:
-                return new TupleColumnAccessCodeGenerator("READ_DOUBLE_BOXED", "WRITE_DOUBLE", Double.class, double.class, colIdx);
+                return new TupleColumnAccessCodeGenerator("doubleValueBoxed", "appendDouble", Double.class, double.class, colIdx);
             case STRING:
-                return new TupleColumnAccessCodeGenerator("READ_STRING", "WRITE_STRING", String.class, colIdx);
+                return new TupleColumnAccessCodeGenerator("stringValue", "appendString", String.class, colIdx);
             case UUID:
-                return new TupleColumnAccessCodeGenerator("READ_UUID", "WRITE_UUID", UUID.class, colIdx);
+                return new TupleColumnAccessCodeGenerator("uuidValue", "appendUuid", UUID.class, colIdx);
             case BYTE_ARR:
-                return new TupleColumnAccessCodeGenerator("READ_BYTE_ARR", "WRITE_BYTE_ARR", byte[].class, colIdx);
+                return new TupleColumnAccessCodeGenerator("bytesValue", "appendBytes", byte[].class, colIdx);
             case BITSET:
-                return new TupleColumnAccessCodeGenerator("READ_BITSET", "WRITE_BITSET", BitSet.class, colIdx);
+                return new TupleColumnAccessCodeGenerator("bitmaskValue", "appendBitmask", BitSet.class, colIdx);
         }
 
         throw new IllegalStateException("Unsupported binary mode: " + mode);
     }
 
     /** Reader handle name. */
-    private final String readHandleName;
+    private final String readMethodName;
 
     /** Writer handle name. */
-    private final String writeHandleName;
+    private final String writeMethodName;
 
     /** Mapped value type. */
     private final Class<?> mappedType;
@@ -190,28 +88,28 @@ public class TupleColumnAccessCodeGenerator {
     /**
      * Constructor.
      *
-     * @param readHandleName Reader handle name.
-     * @param writeHandleName Writer handle name.
+     * @param readMethodName Reader handle name.
+     * @param writeMethodName Writer handle name.
      * @param mappedType Mapped value type.
      * @param colIdx Column index in schema.
      */
-    TupleColumnAccessCodeGenerator(String readHandleName, String writeHandleName, Class<?> mappedType, int colIdx) {
-        this(readHandleName, writeHandleName, mappedType, mappedType, colIdx);
+    TupleColumnAccessCodeGenerator(String readMethodName, String writeMethodName, Class<?> mappedType, int colIdx) {
+        this(readMethodName, writeMethodName, mappedType, mappedType, colIdx);
     }
 
     /**
      * Constructor.
      *
-     * @param readHandleName Reader handle name.
-     * @param writeHandleName Writer handle name.
+     * @param readMethodName Reader handle name.
+     * @param writeMethodName Writer handle name.
      * @param mappedType Mapped value type.
      * @param writeArgType Write method argument type.
      * @param colIdx Column index in schema.
      */
-    TupleColumnAccessCodeGenerator(String readHandleName, String writeHandleName, Class<?> mappedType,
+    TupleColumnAccessCodeGenerator(String readMethodName, String writeMethodName, Class<?> mappedType,
         Class<?> writeArgType, int colIdx) {
-        this.readHandleName = readHandleName;
-        this.writeHandleName = writeHandleName;
+        this.readMethodName = readMethodName;
+        this.writeMethodName = writeMethodName;
         this.colIdx = colIdx;
         this.mappedType = mappedType;
         this.writeArgType = writeArgType;
@@ -229,7 +127,7 @@ public class TupleColumnAccessCodeGenerator {
      * @return Code that reads column value from tuple.
      */
     public CodeBlock read(String tuple) {
-        return CodeBlock.of("($T)$T.$L.invokeExact($L, $L)", mappedType, TupleColumnAccessCodeGenerator.class, readHandleName, tuple, colIdx);
+        return CodeBlock.of("($T)$L.$L($L)", mappedType, tuple, readMethodName, colIdx);
     }
 
     /**
@@ -239,15 +137,15 @@ public class TupleColumnAccessCodeGenerator {
      */
     public CodeBlock write(String asmVar, String valExpr) {
         if (mappedType.isPrimitive())
-            return CodeBlock.builder().addStatement("$T.$L.invokeExact($L, ($T)$L)", TupleColumnAccessCodeGenerator.class, writeHandleName, asmVar, writeArgType, valExpr).build();
+            return CodeBlock.builder().addStatement("$L.$L(($T)$L)", asmVar, writeMethodName, writeArgType, valExpr).build();
         else {
             return CodeBlock.builder()
                 .add("{\n").indent()
                 .addStatement("Object fVal")
                 .beginControlFlow("if((fVal = $L) == null)", valExpr)
-                .addStatement("$T.WRITE_NULL.invokeExact($L)", TupleColumnAccessCodeGenerator.class, asmVar)
+                .addStatement("$L.appendNull()", asmVar)
                 .nextControlFlow("else")
-                .addStatement("$T.$L.invokeExact($L, ($T)fVal)", TupleColumnAccessCodeGenerator.class, writeHandleName, asmVar, writeArgType)
+                .addStatement("$L.$L(($T)fVal)", asmVar, writeMethodName, writeArgType)
                 .endControlFlow()
                 .unindent()
                 .add("}\n")
diff --git a/modules/commons/src/test/java/org/apache/ignite/internal/benchmarks/SerializerBenchmarkTest.java b/modules/commons/src/test/java/org/apache/ignite/internal/benchmarks/SerializerBenchmarkTest.java
index a6b893a..d92825a 100644
--- a/modules/commons/src/test/java/org/apache/ignite/internal/benchmarks/SerializerBenchmarkTest.java
+++ b/modules/commons/src/test/java/org/apache/ignite/internal/benchmarks/SerializerBenchmarkTest.java
@@ -71,7 +71,7 @@ public class SerializerBenchmarkTest {
     private Factory<?> objectFactory;
 
     /** Object fields count. */
-    @Param({"0", "1", "10", "100"})
+    @Param({/*"0", "1", */"10", "100"})
     public int fieldsCount;
 
     /** Serializer. */
diff --git a/pom.xml b/pom.xml
index 23d7483..26ab8c3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -58,6 +58,8 @@
 
         <!-- Maven plugins -->
         <maven.compiler.release>11</maven.compiler.release>
+        <maven.compiler.source>11</maven.compiler.source> <!-- Requires for correct compilation in IDEA. -->
+        <maven.compiler.target>11</maven.compiler.target>
 
         <maven.compiler.plugin.version>3.8.1</maven.compiler.plugin.version>
         <maven.surefire.plugin.version>3.0.0-M4</maven.surefire.plugin.version>