You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2015/11/05 09:06:37 UTC

[2/5] ignite git commit: IGNITE-1816: WIP.

IGNITE-1816: WIP.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/f3e774b3
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/f3e774b3
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/f3e774b3

Branch: refs/heads/ignite-1816
Commit: f3e774b3d768cf5ae7395d7983d7cae8b5ac5bcb
Parents: adcce88
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Wed Nov 4 15:15:28 2015 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Wed Nov 4 15:15:28 2015 +0300

----------------------------------------------------------------------
 .../portable/PortableClassDescriptor.java       | 11 +++--
 .../internal/portable/PortableContext.java      |  7 +++
 .../ignite/internal/portable/PortableUtils.java | 46 +++++++++++---------
 .../internal/portable/PortableWriterExImpl.java | 31 ++++++-------
 .../portable/builder/PortableBuilderImpl.java   |  4 +-
 5 files changed, 56 insertions(+), 43 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/f3e774b3/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableClassDescriptor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableClassDescriptor.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableClassDescriptor.java
index aa72017..a1c308e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableClassDescriptor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableClassDescriptor.java
@@ -675,7 +675,6 @@ public class PortableClassDescriptor {
 
         PortableUtils.writeHeader(
             writer,
-            userType,
             registered ? typeId : GridPortableMarshaller.UNREGISTERED_TYPE_ID,
             obj instanceof CacheObjectImpl ? 0 : obj.hashCode(),
             registered ? null : cls.getName()
@@ -710,6 +709,9 @@ public class PortableClassDescriptor {
         try {
             Constructor<?> ctor = U.forceEmptyConstructor(cls);
 
+            if (ctor == null)
+                throw new PortableException("Failed to find empty constructor for class: " + cls.getName());
+
             ctor.setAccessible(true);
 
             return ctor;
@@ -732,11 +734,8 @@ public class PortableClassDescriptor {
             Method writeObj = cls.getDeclaredMethod("writeObject", ObjectOutputStream.class);
             Method readObj = cls.getDeclaredMethod("readObject", ObjectInputStream.class);
 
-            if (!Modifier.isStatic(writeObj.getModifiers()) && !Modifier.isStatic(readObj.getModifiers()) &&
-                writeObj.getReturnType() == void.class && readObj.getReturnType() == void.class)
-                use = true;
-            else
-                use = false;
+            use = !Modifier.isStatic(writeObj.getModifiers()) && !Modifier.isStatic(readObj.getModifiers()) &&
+                writeObj.getReturnType() == void.class && readObj.getReturnType() == void.class;
         }
         catch (NoSuchMethodException e) {
             use = false;

http://git-wip-us.apache.org/repos/asf/ignite/blob/f3e774b3/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java
index e61cba7..970aeea 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java
@@ -850,6 +850,13 @@ public class PortableContext implements Externalizable {
     }
 
     /**
+     * @return Whether field IDs should be skipped in footer or not.
+     */
+    public boolean isNoFieldIds() {
+        return false; // TODO: IGNITE-1816: Take from config.
+    }
+
+    /**
      * @return Whether to convert string to UTF8 bytes.
      */
     public boolean isConvertString() {

http://git-wip-us.apache.org/repos/asf/ignite/blob/f3e774b3/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableUtils.java
index fae952c..d8dc380 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableUtils.java
@@ -120,40 +120,47 @@ public class PortableUtils {
     public static final int OFFSET_4 = 4;
 
     /**
-     * Write flags.
+     * Check if user type flag is set.
      *
-     * @param writer Writer.
-     * @param userType User type flag.
+     * @param flags Flags.
+     * @return {@code True} if set.
      */
-    public static void writeFlags(PortableWriterExImpl writer, boolean userType) {
-        short val = 0;
-
-        if (userType)
-            val |= FLAG_USR_TYP;
-
-        writer.doWriteShort(val);
+    public static boolean isUserType(short flags) {
+        return isFlagSet(flags, FLAG_USR_TYP);
     }
 
     /**
-     * Check if user type flag is set.
+     * Check if raw-only flag is set.
      *
      * @param flags Flags.
      * @return {@code True} if set.
      */
-    public static boolean isUserType(short flags) {
-        return (flags & FLAG_USR_TYP) == FLAG_USR_TYP;
+    public static boolean isRawOnly(short flags) {
+        return isFlagSet(flags, FLAG_RAW_ONLY);
     }
 
     /**
-     * Check if raw-only flag is set.
+     * Check if "no-field-ids" flag is set.
      *
      * @param flags Flags.
      * @return {@code True} if set.
      */
-    public static boolean isRawOnly(short flags) {
-        return (flags & FLAG_RAW_ONLY) == FLAG_RAW_ONLY;
+    public static boolean isNoFieldIds(short flags) {
+        return isFlagSet(flags, FLAG_NO_FIELD_IDS);
+    }
+
+    /**
+     * Check whether particular flag is set.
+     *
+     * @param flags Flags.
+     * @param flag Flag.
+     * @return {@code True} if flag is set in flags.
+     */
+    private static boolean isFlagSet(short flags, short flag) {
+        return (flags & flag) == flag;
     }
 
+
     /**
      *
      */
@@ -554,18 +561,17 @@ public class PortableUtils {
      * Write portable header.
      *
      * @param writer Writer.
-     * @param usrTyp User type flag.
      * @param typeId Type ID.
      * @param hashCode Hash code.
      * @param clsName Class name (optional).
      * @return Position where length should be written.
      */
-    public static int writeHeader(PortableWriterExImpl writer, boolean usrTyp, int typeId, int hashCode,
-        @Nullable String clsName) {
+    public static int writeHeader(PortableWriterExImpl writer, int typeId, int hashCode, @Nullable String clsName) {
         writer.doWriteByte(GridPortableMarshaller.OBJ);
         writer.doWriteByte(GridPortableMarshaller.PROTO_VER);
 
-        PortableUtils.writeFlags(writer, usrTyp);
+        // Skip flags, they will be written in post-write step.
+        writer.position(writer.position() + 2);
 
         writer.doWriteInt(typeId);
         writer.doWriteInt(hashCode);

http://git-wip-us.apache.org/repos/asf/ignite/blob/f3e774b3/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableWriterExImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableWriterExImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableWriterExImpl.java
index 542c897..e7ec826 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableWriterExImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableWriterExImpl.java
@@ -90,7 +90,7 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
     /** Length: integer. */
     private static final int LEN_INT = 4;
 
-    /** */
+    /** Initial capacity. */
     private static final int INIT_CAP = 1024;
 
     /** FNV1 hash offset basis. */
@@ -333,6 +333,7 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
 
     /**
      * Perform post-write activity. This includes:
+     * - writing flags;
      * - writing object length;
      * - writing schema offset;
      * - writing schema to the tail.
@@ -340,6 +341,11 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
      * @param userType User type flag.
      */
     public void postWrite(boolean userType) {
+        short flags = userType ? PortableUtils.FLAG_USR_TYP : 0;
+
+        if (ctx.isNoFieldIds())
+            flags |= PortableUtils.FLAG_NO_FIELD_IDS;
+
         if (schema != null) {
             // Write schema ID.
             out.writeInt(start + SCHEMA_ID_POS, schemaId);
@@ -354,28 +360,23 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
             if (rawOffPos != 0)
                 out.writeInt(rawOffPos - start);
 
-            if (offsetByteCnt == PortableUtils.OFFSET_1) {
-                int flags = (userType ? PortableUtils.FLAG_USR_TYP : 0) | PortableUtils.FLAG_OFFSET_ONE_BYTE;
-
-                out.writeShort(start + FLAGS_POS, (short)flags);
-            }
-            else if (offsetByteCnt == PortableUtils.OFFSET_2) {
-                int flags = (userType ? PortableUtils.FLAG_USR_TYP : 0) | PortableUtils.FLAG_OFFSET_TWO_BYTES;
-
-                out.writeShort(start + FLAGS_POS, (short)flags);
-            }
+            if (offsetByteCnt == PortableUtils.OFFSET_1)
+                flags |= PortableUtils.FLAG_OFFSET_ONE_BYTE;
+            else if (offsetByteCnt == PortableUtils.OFFSET_2)
+                flags |= PortableUtils.FLAG_OFFSET_TWO_BYTES;
         }
         else {
             // Write raw-only flag is needed.
-            int flags = (userType ? PortableUtils.FLAG_USR_TYP : 0) | PortableUtils.FLAG_RAW_ONLY;
-
-            out.writeShort(start + FLAGS_POS, (short)flags);
+            flags |= PortableUtils.FLAG_RAW_ONLY;
 
             // If there are no schema, we are free to write raw offset to schema offset.
             out.writeInt(start + SCHEMA_OR_RAW_OFF_POS, (rawOffPos == 0 ? out.position() : rawOffPos) - start);
         }
 
-        // 5. Write length.
+        // Write flags as we know them at this point.
+        out.writeShort(start + FLAGS_POS, flags);
+
+        // Write length.
         out.writeInt(start + TOTAL_LEN_POS, out.position() - start);
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/f3e774b3/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderImpl.java
index 89bb3ff..104eb4c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderImpl.java
@@ -205,10 +205,10 @@ public class PortableBuilderImpl implements PortableBuilder {
     void serializeTo(PortableWriterExImpl writer, PortableBuilderSerializer serializer) {
         try {
             PortableUtils.writeHeader(writer,
-                true,
                 registeredType ? typeId : UNREGISTERED_TYPE_ID,
                 hashCode,
-                registeredType ? null : clsNameToWrite);
+                registeredType ? null : clsNameToWrite
+            );
 
             Set<Integer> remainsFlds = null;