Repository: ignite
Updated Branches:
  refs/heads/ignite-1770 b5abaee06 -> 67e62fc7b


IGNITE-1770: Write raw-only flag.


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

Branch: refs/heads/ignite-1770
Commit: 39cc376dea799dbbcebe44e92454b905c9793836
Parents: b5abaee
Author: vozerov-gridgain <[email protected]>
Authored: Tue Oct 27 15:29:52 2015 +0300
Committer: vozerov-gridgain <[email protected]>
Committed: Tue Oct 27 15:29:52 2015 +0300

----------------------------------------------------------------------
 .../portable/PortableClassDescriptor.java       |  6 +++---
 .../internal/portable/PortableReaderExImpl.java |  2 +-
 .../ignite/internal/portable/PortableUtils.java | 21 +++++++++++---------
 .../internal/portable/PortableWriterExImpl.java | 19 +++++++++++++-----
 .../portable/builder/PortableBuilderImpl.java   |  3 ++-
 .../streams/PortableAbstractOutputStream.java   | 15 ++++++++++++++
 .../streams/PortableHeapOutputStream.java       |  8 ++++++++
 .../streams/PortableOffheapOutputStream.java    |  8 ++++++++
 .../portable/streams/PortableOutputStream.java  |  8 ++++++++
 .../PlatformBigEndianOutputStreamImpl.java      |  5 +++++
 .../memory/PlatformOutputStreamImpl.java        |  7 +++++++
 11 files changed, 83 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/39cc376d/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 05e5fba..25ec856 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
@@ -515,7 +515,7 @@ public class PortableClassDescriptor {
                     else
                         ((PortableMarshalAware)obj).writePortable(writer);
 
-                    writer.postWrite();
+                    writer.postWrite(userType);
 
                     if (obj.getClass() != PortableMetaDataImpl.class
                         && ctx.isMetaDataChanged(typeId, 
writer.metaDataHashSum())) {
@@ -543,7 +543,7 @@ public class PortableClassDescriptor {
                         throw new PortableException("Failed to write 
Externalizable object: " + obj, e);
                     }
 
-                    writer.postWrite();
+                    writer.postWrite(userType);
                 }
 
                 break;
@@ -553,7 +553,7 @@ public class PortableClassDescriptor {
                     for (FieldInfo info : fields)
                         info.write(obj, writer);
 
-                    writer.postWrite();
+                    writer.postWrite(userType);
                 }
 
                 break;

http://git-wip-us.apache.org/repos/asf/ignite/blob/39cc376d/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableReaderExImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableReaderExImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableReaderExImpl.java
index 0037dcc..203c991 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableReaderExImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableReaderExImpl.java
@@ -1714,7 +1714,7 @@ public class PortableReaderExImpl implements 
PortableReader, PortableRawReaderEx
 
                 PortableUtils.checkProtocolVersion(in.readByte());
 
-                boolean userType = 
PortableUtils.isUserType(PortableUtils.readFlags(this));
+                boolean userType = PortableUtils.isUserType(this.readShort());
 
                 // Skip typeId and hash code.
                 in.position(in.position() + 8);

http://git-wip-us.apache.org/repos/asf/ignite/blob/39cc376d/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 5dc7d22..56b81af 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
@@ -95,7 +95,10 @@ public class PortableUtils {
     private static final Collection<Class<?>> PORTABLE_CLS = new HashSet<>();
 
     /** Flag: user type. */
-    private static final short FLAG_USR_TYP = 0x1;
+    public static final short FLAG_USR_TYP = 0x1;
+
+    /** Flag: only raw data exists. */
+    public static final short FLAG_RAW_ONLY = 0x2;
 
     /**
      * Write flags.
@@ -113,23 +116,23 @@ public class PortableUtils {
     }
 
     /**
-     * Read flags.
+     * Check if user type flag is set.
      *
-     * @param reader Reader.
-     * @return Flags.
+     * @param flags Flags.
+     * @return {@code True} if set.
      */
-    public static short readFlags(PortableReaderExImpl reader) {
-        return reader.readShort();
+    public static boolean isUserType(short flags) {
+        return (flags & FLAG_USR_TYP) == 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 (flags & FLAG_RAW_ONLY) == FLAG_RAW_ONLY;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/39cc376d/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 d3be134..f2af9d4 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
@@ -57,6 +57,7 @@ import static 
org.apache.ignite.internal.portable.GridPortableMarshaller.DOUBLE;
 import static 
org.apache.ignite.internal.portable.GridPortableMarshaller.DOUBLE_ARR;
 import static org.apache.ignite.internal.portable.GridPortableMarshaller.ENUM;
 import static 
org.apache.ignite.internal.portable.GridPortableMarshaller.ENUM_ARR;
+import static 
org.apache.ignite.internal.portable.GridPortableMarshaller.FLAGS_POS;
 import static org.apache.ignite.internal.portable.GridPortableMarshaller.FLOAT;
 import static 
org.apache.ignite.internal.portable.GridPortableMarshaller.FLOAT_ARR;
 import static org.apache.ignite.internal.portable.GridPortableMarshaller.INT;
@@ -315,8 +316,10 @@ public class PortableWriterExImpl implements 
PortableWriter, PortableRawWriterEx
      * - writing schema ID;
      * - writing schema offset;
      * - writing schema to the tail.
+     *
+     * @param userType User type flag.
      */
-    public void postWrite() {
+    public void postWrite(boolean userType) {
         if (schema != null) {
             // Write schema ID.
             out.writeInt(start + SCHEMA_ID_POS, schemaId);
@@ -332,9 +335,15 @@ public class PortableWriterExImpl implements 
PortableWriter, PortableRawWriterEx
             if (rawOffPos != 0)
                 out.writeInt(rawOffPos - start);
         }
-        else
+        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);
+
             // 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.
         out.writeInt(start + TOTAL_LEN_POS, out.position() - start);
@@ -1636,17 +1645,17 @@ public class PortableWriterExImpl implements 
PortableWriter, PortableRawWriterEx
 
     /** {@inheritDoc} */
     @Override public void writeShort(int v) throws IOException {
-        doWriteShort((short)v);
+        doWriteShort((short) v);
     }
 
     /** {@inheritDoc} */
     @Override public void writeChar(int v) throws IOException {
-        doWriteChar((char)v);
+        doWriteChar((char) v);
     }
 
     /** {@inheritDoc} */
     @Override public void write(int b) throws IOException {
-        doWriteByte((byte)b);
+        doWriteByte((byte) b);
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/39cc376d/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 1e12827..90104e3 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
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.portable.builder;
 
+import org.apache.ignite.internal.portable.PortableClassDescriptor;
 import org.apache.ignite.internal.portable.PortableContext;
 import org.apache.ignite.internal.portable.PortableObjectImpl;
 import org.apache.ignite.internal.portable.PortableObjectOffheapImpl;
@@ -375,7 +376,7 @@ public class PortableBuilderImpl implements PortableBuilder 
{
             reader.position(start + PortableUtils.length(reader, start));
         }
 
-        writer.postWrite();
+        writer.postWrite(true);
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/39cc376d/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableAbstractOutputStream.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableAbstractOutputStream.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableAbstractOutputStream.java
index 78f46ca..c943682 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableAbstractOutputStream.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableAbstractOutputStream.java
@@ -120,6 +120,13 @@ public abstract class PortableAbstractOutputStream extends 
PortableAbstractStrea
     }
 
     /** {@inheritDoc} */
+    @Override public void writeShort(int pos, short val) {
+        ensureCapacity(pos + 2);
+
+        writeShortPositioned(pos, val);
+    }
+
+    /** {@inheritDoc} */
     @Override public void writeInt(int pos, int val) {
         ensureCapacity(pos + 4);
 
@@ -307,6 +314,14 @@ public abstract class PortableAbstractOutputStream extends 
PortableAbstractStrea
     protected abstract void writeLongFast(long val);
 
     /**
+     * Write short value to the given position.
+     *
+     * @param pos Position.
+     * @param val Value.
+     */
+    protected abstract void writeShortPositioned(int pos, short val);
+
+    /**
      * Write int value to the given position.
      *
      * @param pos Position.

http://git-wip-us.apache.org/repos/asf/ignite/blob/39cc376d/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableHeapOutputStream.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableHeapOutputStream.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableHeapOutputStream.java
index 2abb69c..208ad33 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableHeapOutputStream.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableHeapOutputStream.java
@@ -147,6 +147,14 @@ public final class PortableHeapOutputStream extends 
PortableAbstractOutputStream
     }
 
     /** {@inheritDoc} */
+    @Override protected void writeShortPositioned(int pos, short val) {
+        if (!LITTLE_ENDIAN)
+            val = Short.reverseBytes(val);
+
+        UNSAFE.putShort(data, BYTE_ARR_OFF + pos, val);
+    }
+
+    /** {@inheritDoc} */
     @Override protected void writeIntPositioned(int pos, int val) {
         if (!LITTLE_ENDIAN)
             val = Integer.reverseBytes(val);

http://git-wip-us.apache.org/repos/asf/ignite/blob/39cc376d/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableOffheapOutputStream.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableOffheapOutputStream.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableOffheapOutputStream.java
index 0deef90..430a176 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableOffheapOutputStream.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableOffheapOutputStream.java
@@ -125,6 +125,14 @@ public class PortableOffheapOutputStream extends 
PortableAbstractOutputStream {
     }
 
     /** {@inheritDoc} */
+    @Override protected void writeShortPositioned(int pos, short val) {
+        if (!LITTLE_ENDIAN)
+            val = Short.reverseBytes(val);
+
+        UNSAFE.putShort(ptr + pos, val);
+    }
+
+    /** {@inheritDoc} */
     @Override protected void writeIntPositioned(int pos, int val) {
         if (!LITTLE_ENDIAN)
             val = Integer.reverseBytes(val);

http://git-wip-us.apache.org/repos/asf/ignite/blob/39cc376d/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableOutputStream.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableOutputStream.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableOutputStream.java
index 745f9ee..0e25b12 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableOutputStream.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableOutputStream.java
@@ -85,6 +85,14 @@ public interface PortableOutputStream extends 
PortableStream, AutoCloseable {
     public void writeInt(int val);
 
     /**
+     * Write short value at the given position.
+     *
+     * @param pos Position.
+     * @param val Value.
+     */
+    public void writeShort(int pos, short val);
+
+    /**
      * Write int value to the given position.
      *
      * @param pos Position.

http://git-wip-us.apache.org/repos/asf/ignite/blob/39cc376d/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformBigEndianOutputStreamImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformBigEndianOutputStreamImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformBigEndianOutputStreamImpl.java
index 0f6ccbc..e5fd71b 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformBigEndianOutputStreamImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformBigEndianOutputStreamImpl.java
@@ -99,6 +99,11 @@ public class PlatformBigEndianOutputStreamImpl extends 
PlatformOutputStreamImpl
     }
 
     /** {@inheritDoc} */
+    @Override public void writeShort(int pos, short val) {
+        super.writeShort(pos, Short.reverseBytes(val));
+    }
+
+    /** {@inheritDoc} */
     @Override public void writeInt(int pos, int val) {
         super.writeInt(pos, Integer.reverseBytes(val));
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/39cc376d/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformOutputStreamImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformOutputStreamImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformOutputStreamImpl.java
index 13c3dd3..16b1567 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformOutputStreamImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformOutputStreamImpl.java
@@ -120,6 +120,13 @@ public class PlatformOutputStreamImpl implements 
PlatformOutputStream {
     }
 
     /** {@inheritDoc} */
+    @Override public void writeShort(int pos, short val) {
+        ensureCapacity(pos + 2);
+
+        UNSAFE.putShort(data + pos, val);
+    }
+
+    /** {@inheritDoc} */
     @Override public void writeInt(int pos, int val) {
         ensureCapacity(pos + 4);
 

Reply via email to