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/10/27 15:32:06 UTC

[01/11] ignite git commit: IGNITE-1770: Write raw-only flag.

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 <vo...@gridgain.com>
Authored: Tue Oct 27 15:29:52 2015 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
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);
 


[07/11] ignite git commit: IGNITE-1770: Cache ID mapper.

Posted by vo...@apache.org.
IGNITE-1770: Cache ID mapper.


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

Branch: refs/heads/ignite-1770
Commit: d48d77629678f4989b266fb00ded178e4c5b75e8
Parents: 6d9dea3
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Tue Oct 27 16:35:23 2015 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Tue Oct 27 16:35:23 2015 +0300

----------------------------------------------------------------------
 .../ignite/internal/portable/PortableWriterExImpl.java   | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/d48d7762/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 a629010..382b2f9 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
@@ -22,6 +22,7 @@ import org.apache.ignite.internal.portable.streams.PortableHeapOutputStream;
 import org.apache.ignite.internal.portable.streams.PortableOutputStream;
 import org.apache.ignite.internal.util.typedef.internal.A;
 import org.apache.ignite.portable.PortableException;
+import org.apache.ignite.portable.PortableIdMapper;
 import org.apache.ignite.portable.PortableRawWriter;
 import org.apache.ignite.portable.PortableWriter;
 import org.jetbrains.annotations.Nullable;
@@ -128,6 +129,9 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
     /** Amount of written fields. */
     private int fieldCnt;
 
+    /** ID mapper. */
+    private PortableIdMapper idMapper;
+
     /**
      * @param ctx Context.
      */
@@ -1639,7 +1643,7 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
 
     /** {@inheritDoc} */
     @Override public void writeByte(int v) throws IOException {
-        doWriteByte((byte)v);
+        doWriteByte((byte) v);
     }
 
     /** {@inheritDoc} */
@@ -1683,7 +1687,10 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
             throw new PortableException("Individual field can't be written after raw writer is acquired " +
                 "via rawWriter() method. Consider fixing serialization logic for class: " + cls.getName());
 
-        int id = ctx.fieldId(typeId, fieldName);
+        if (idMapper == null)
+            idMapper = ctx.idMapper(typeId);
+
+        int id = idMapper.fieldId(typeId, fieldName);
 
         writeFieldId(id);
 


[02/11] ignite git commit: IGNITE-1770: Read raw-only flag.

Posted by vo...@apache.org.
IGNITE-1770: Read 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/ea23354e
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/ea23354e
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/ea23354e

Branch: refs/heads/ignite-1770
Commit: ea23354ea602f3ed935522f0c5986b44654ae923
Parents: 39cc376
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Tue Oct 27 15:36:52 2015 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Tue Oct 27 15:36:52 2015 +0300

----------------------------------------------------------------------
 .../portable/PortablePositionReadable.java        |  8 ++++++++
 .../ignite/internal/portable/PortableUtils.java   |  5 +++--
 .../portable/builder/PortableBuilderReader.java   | 12 +++++++-----
 .../streams/PortableAbstractInputStream.java      | 18 ++++++++++++++++++
 .../portable/streams/PortableHeapInputStream.java | 10 ++++++++++
 .../streams/PortableOffheapInputStream.java       | 10 ++++++++++
 .../memory/PlatformBigEndianInputStreamImpl.java  |  5 +++++
 .../platform/memory/PlatformInputStreamImpl.java  | 10 ++++++++++
 8 files changed, 71 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/ea23354e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortablePositionReadable.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortablePositionReadable.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortablePositionReadable.java
index 8536f70..7e8d9d3 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortablePositionReadable.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortablePositionReadable.java
@@ -22,6 +22,14 @@ package org.apache.ignite.internal.portable;
  */
 public interface PortablePositionReadable {
     /**
+     * Read short at the given position.
+     *
+     * @param pos Position.
+     * @return Value.
+     */
+    public short readShortPositioned(int pos);
+
+    /**
      * Read integer at the given position.
      *
      * @param pos Position.

http://git-wip-us.apache.org/repos/asf/ignite/blob/ea23354e/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 56b81af..823b0e1 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
@@ -626,9 +626,10 @@ public class PortableUtils {
      */
     public static int rawOffsetAbsolute(PortablePositionReadable in, int start) {
         int len = length(in, start);
-        int schemaId = in.readIntPositioned(start + GridPortableMarshaller.SCHEMA_ID_POS);
 
-        if (schemaId == 0)
+        short flags = in.readShortPositioned(start + GridPortableMarshaller.FLAGS_POS);
+
+        if (PortableUtils.isRawOnly(flags))
             // No schema, raw offset is located on schema offset position.
             return in.readIntPositioned(start + GridPortableMarshaller.SCHEMA_OR_RAW_OFF_POS);
         else {

http://git-wip-us.apache.org/repos/asf/ignite/blob/ea23354e/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderReader.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderReader.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderReader.java
index ab3c2a6..b999cde 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderReader.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderReader.java
@@ -131,11 +131,13 @@ public class PortableBuilderReader implements PortablePositionReadable {
         return PRIM.readByte(arr, pos);
     }
 
-    /**
-     * @param pos Position in the source array.
-     * @return Read int value.
-     */
-    public int readIntPositioned(int pos) {
+    /** {@inheritDoc} */
+    @Override public short readShortPositioned(int pos) {
+        return PRIM.readShort(arr, pos);
+    }
+
+    /** {@inheritDoc} */
+    @Override public int readIntPositioned(int pos) {
         return PRIM.readInt(arr, pos);
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ea23354e/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableAbstractInputStream.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableAbstractInputStream.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableAbstractInputStream.java
index 00d5658..7dbee92 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableAbstractInputStream.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableAbstractInputStream.java
@@ -158,6 +158,16 @@ public abstract class PortableAbstractInputStream extends PortableAbstractStream
     }
 
     /** {@inheritDoc} */
+    @Override public short readShortPositioned(int pos) {
+        int delta = pos + 2 - this.pos;
+
+        if (delta > 0)
+            ensureEnoughData(delta);
+
+        return readShortPositioned0(pos);
+    }
+
+    /** {@inheritDoc} */
     @Override public int readIntPositioned(int pos) {
         int delta = pos + 4 - this.pos;
 
@@ -334,6 +344,14 @@ public abstract class PortableAbstractInputStream extends PortableAbstractStream
     protected abstract long readLongFast();
 
     /**
+     * Internal routine for positioned short value read.
+     *
+     * @param pos Position.
+     * @return Int value.
+     */
+    protected abstract short readShortPositioned0(int pos);
+
+    /**
      * Internal routine for positioned int value read.
      *
      * @param pos Position.

http://git-wip-us.apache.org/repos/asf/ignite/blob/ea23354e/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableHeapInputStream.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableHeapInputStream.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableHeapInputStream.java
index d5618b3..adfeaad 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableHeapInputStream.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableHeapInputStream.java
@@ -123,6 +123,16 @@ public final class PortableHeapInputStream extends PortableAbstractInputStream {
     }
 
     /** {@inheritDoc} */
+    @Override protected short readShortPositioned0(int pos) {
+        short res = UNSAFE.getShort(data, BYTE_ARR_OFF + pos);
+
+        if (!LITTLE_ENDIAN)
+            res = Short.reverseBytes(res);
+
+        return res;
+    }
+
+    /** {@inheritDoc} */
     @Override protected int readIntPositioned0(int pos) {
         int res = UNSAFE.getInt(data, BYTE_ARR_OFF + pos);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ea23354e/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableOffheapInputStream.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableOffheapInputStream.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableOffheapInputStream.java
index 187ded5..75bffb9 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableOffheapInputStream.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/streams/PortableOffheapInputStream.java
@@ -113,6 +113,16 @@ public class PortableOffheapInputStream extends PortableAbstractInputStream {
     }
 
     /** {@inheritDoc} */
+    @Override protected short readShortPositioned0(int pos) {
+        short res = UNSAFE.getShort(ptr + pos);
+
+        if (!LITTLE_ENDIAN)
+            res = Short.reverseBytes(res);
+
+        return res;
+    }
+
+    /** {@inheritDoc} */
     @Override protected int readIntPositioned0(int pos) {
         int res = UNSAFE.getInt(ptr + pos);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ea23354e/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformBigEndianInputStreamImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformBigEndianInputStreamImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformBigEndianInputStreamImpl.java
index b25471d..a4d711e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformBigEndianInputStreamImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformBigEndianInputStreamImpl.java
@@ -65,6 +65,11 @@ public class PlatformBigEndianInputStreamImpl extends PlatformInputStreamImpl {
     }
 
     /** {@inheritDoc} */
+    @Override public short readShortPositioned(int pos) {
+        return Short.reverseBytes(super.readShortPositioned(pos));
+    }
+
+    /** {@inheritDoc} */
     @Override public int readIntPositioned(int pos) {
         return Integer.reverseBytes(super.readIntPositioned(pos));
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ea23354e/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformInputStreamImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformInputStreamImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformInputStreamImpl.java
index 68af0e7..68b4141 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformInputStreamImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/memory/PlatformInputStreamImpl.java
@@ -146,6 +146,16 @@ public class PlatformInputStreamImpl implements PlatformInputStream {
     }
 
     /** {@inheritDoc} */
+    @Override public short readShortPositioned(int pos) {
+        int delta = pos + 2 - this.pos;
+
+        if (delta > 0)
+            ensureEnoughData(delta);
+
+        return UNSAFE.getShort(data + pos);
+    }
+
+    /** {@inheritDoc} */
     @Override public int readIntPositioned(int pos) {
         int delta = pos + 4 - this.pos;
 


[03/11] ignite git commit: IGNITE-1770: Schema ID for reflective classes.

Posted by vo...@apache.org.
IGNITE-1770: Schema ID for reflective classes.


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

Branch: refs/heads/ignite-1770
Commit: 0e491349352159b2041692000fdb0fe88308bbdf
Parents: ea23354
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Tue Oct 27 15:42:16 2015 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Tue Oct 27 15:42:16 2015 +0300

----------------------------------------------------------------------
 .../internal/portable/PortableClassDescriptor.java  | 16 +++++++++++++---
 .../internal/portable/PortableWriterExImpl.java     |  7 +------
 .../portable/builder/PortableBuilderImpl.java       |  2 +-
 3 files changed, 15 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/0e491349/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 25ec856..9fe04f4 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
@@ -81,6 +81,9 @@ public class PortableClassDescriptor {
     /** */
     private final Collection<FieldInfo> fields;
 
+    /** Schema ID for constant-time lookup. */
+    private final int schemaId;
+
     /** */
     private final Method writeReplaceMtd;
 
@@ -141,6 +144,8 @@ public class PortableClassDescriptor {
         this.keepDeserialized = keepDeserialized;
         this.registered = registered;
 
+        int schemaId = 0;
+
         excluded = MarshallerExclusions.isExcluded(cls);
 
         useOptMarshaller = !predefined && initUseOptimizedMarshallerFlag();
@@ -233,6 +238,9 @@ public class PortableClassDescriptor {
 
                             if (metaDataEnabled)
                                 fieldsMeta.put(name, fieldInfo.fieldMode().typeName());
+
+                            // Track schema ID.
+                            schemaId = 31 * schemaId + fieldId;
                         }
                     }
                 }
@@ -252,6 +260,8 @@ public class PortableClassDescriptor {
             readResolveMtd = null;
             writeReplaceMtd = null;
         }
+
+        this.schemaId = schemaId;
     }
 
     /**
@@ -515,7 +525,7 @@ public class PortableClassDescriptor {
                     else
                         ((PortableMarshalAware)obj).writePortable(writer);
 
-                    writer.postWrite(userType);
+                    writer.postWrite(schemaId, userType);
 
                     if (obj.getClass() != PortableMetaDataImpl.class
                         && ctx.isMetaDataChanged(typeId, writer.metaDataHashSum())) {
@@ -543,7 +553,7 @@ public class PortableClassDescriptor {
                         throw new PortableException("Failed to write Externalizable object: " + obj, e);
                     }
 
-                    writer.postWrite(userType);
+                    writer.postWrite(schemaId, userType);
                 }
 
                 break;
@@ -553,7 +563,7 @@ public class PortableClassDescriptor {
                     for (FieldInfo info : fields)
                         info.write(obj, writer);
 
-                    writer.postWrite(userType);
+                    writer.postWrite(schemaId, userType);
                 }
 
                 break;

http://git-wip-us.apache.org/repos/asf/ignite/blob/0e491349/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 f2af9d4..6e4c430 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
@@ -125,9 +125,6 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
     // TODO: Optimize.
     private List<Integer> schema;
 
-    /** Schema ID. */
-    private int schemaId;
-
     /**
      * @param ctx Context.
      */
@@ -319,7 +316,7 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
      *
      * @param userType User type flag.
      */
-    public void postWrite(boolean userType) {
+    public void postWrite(int schemaId, boolean userType) {
         if (schema != null) {
             // Write schema ID.
             out.writeInt(start + SCHEMA_ID_POS, schemaId);
@@ -1714,8 +1711,6 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
 
         schema.add(id);
         schema.add(off);
-
-        schemaId = 31 * schemaId + id;
     }
 
      /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/0e491349/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 90104e3..fa0ddde 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
@@ -376,7 +376,7 @@ public class PortableBuilderImpl implements PortableBuilder {
             reader.position(start + PortableUtils.length(reader, start));
         }
 
-        writer.postWrite(true);
+        writer.postWrite(0, true);
     }
 
     /** {@inheritDoc} */


[05/11] ignite git commit: IGNITE-1770: WIP.

Posted by vo...@apache.org.
IGNITE-1770: WIP.


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

Branch: refs/heads/ignite-1770
Commit: 92c6b290f311174a73e5d9b44b835993e84d515a
Parents: 0b0b4d7
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Tue Oct 27 15:56:34 2015 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Tue Oct 27 15:56:34 2015 +0300

----------------------------------------------------------------------
 .../internal/portable/PortableReaderExImpl.java | 30 --------------------
 1 file changed, 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/92c6b290/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 203c991..12ec418 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
@@ -2527,36 +2527,6 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
 
         // TODO: Opto.
 
-//        int searchPos = in.position();
-//
-//        while (searchPos < searchTail) {
-//            int id0 = in.readInt(searchPos);
-//
-//            if (id0 == id)
-//                return searchPos + 8;
-//
-//            int len = in.readInt(searchPos + 4);
-//
-//            searchPos += (8 + len);
-//        }
-//
-//        if (in.position() != searchHead) {
-//            searchPos = searchHead;
-//
-//            while (searchPos < in.position()) {
-//                int id0 = in.readInt(searchPos);
-//
-//                if (id0 == id)
-//                    return searchPos + 8;
-//
-//                int len = in.readInt(searchPos + 4);
-//
-//                searchPos += (8 + len);
-//            }
-//        }
-//
-//        return -1;
-
         while (true) {
             if (searchHead >= searchTail)
                 return false;


[11/11] ignite git commit: IGNITE-1770: WIP.

Posted by vo...@apache.org.
IGNITE-1770: WIP.


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

Branch: refs/heads/ignite-1770
Commit: 67e62fc7bf3dc703969ff31e6a9712dad3c04d34
Parents: 920e755
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Tue Oct 27 17:22:53 2015 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Tue Oct 27 17:22:53 2015 +0300

----------------------------------------------------------------------
 .../org/apache/ignite/internal/portable/PortableReaderExImpl.java  | 2 --
 1 file changed, 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/67e62fc7/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 1da288b..861e649 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
@@ -2529,8 +2529,6 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
         int searchHead = footerStart;
         int searchTail = footerEnd;
 
-        // TODO: Opto.
-
         while (true) {
             if (searchHead >= searchTail)
                 return false;


[09/11] ignite git commit: IGNITE-1770: Optimized PortableReaderContext.

Posted by vo...@apache.org.
IGNITE-1770: Optimized PortableReaderContext.


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

Branch: refs/heads/ignite-1770
Commit: f6fc097c116b99d711719566538158c1d98b34e8
Parents: 0dfdaca
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Tue Oct 27 17:10:11 2015 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Tue Oct 27 17:10:11 2015 +0300

----------------------------------------------------------------------
 .../portable/PortableReaderContext.java         | 118 +++++--------------
 .../java/org/apache/ignite/MyBenchmark.java     |  14 +--
 2 files changed, 35 insertions(+), 97 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/f6fc097c/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableReaderContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableReaderContext.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableReaderContext.java
index 0141d70..51fc407 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableReaderContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableReaderContext.java
@@ -25,11 +25,11 @@ import org.apache.ignite.portable.PortableObject;
 import org.jetbrains.annotations.Nullable;
 
 /**
- * Reader context.
- */
+* Reader context.
+*/
 class PortableReaderContext {
     /** */
-    private Map<Integer, Object> oHandles;
+    private Object oHandles;
 
     /** */
     private Map<Integer, PortableObject> poHandles;
@@ -38,13 +38,24 @@ class PortableReaderContext {
      * @param handle Handle.
      * @param obj Object.
      */
+    @SuppressWarnings("unchecked")
     void setObjectHandler(int handle, Object obj) {
         assert obj != null;
 
         if (oHandles == null)
-            oHandles = new HashMap<>(3, 1.0f);
+            oHandles = new IgniteBiTuple(handle, obj);
+        else if (oHandles instanceof IgniteBiTuple) {
+            Map map = new HashMap(3, 1.0f);
+
+            IgniteBiTuple t = (IgniteBiTuple)oHandles;
 
-        oHandles.put(handle, obj);
+            map.put(t.getKey(), t.getValue());
+            map.put(handle, obj);
+
+            oHandles = map;
+        }
+        else
+            ((Map)oHandles).put(handle, obj);
     }
 
     /**
@@ -65,7 +76,18 @@ class PortableReaderContext {
      * @return Object.
      */
     @Nullable Object getObjectByHandle(int handle) {
-        return oHandles != null ? oHandles.get(handle) : null;
+        if (oHandles != null) {
+            if (oHandles instanceof IgniteBiTuple) {
+                IgniteBiTuple t = (IgniteBiTuple)oHandles;
+
+                if ((int)t.get1() == handle)
+                    return t.get2();
+            }
+            else
+                return ((Map)oHandles).get(handle);
+        }
+
+        return null;
     }
 
     /**
@@ -81,87 +103,3 @@ class PortableReaderContext {
         return S.toString(PortableReaderContext.class, this);
     }
 }
-
-
-// TODO: Opto
-///**
-//* Reader context.
-//*/
-//class PortableReaderContext {
-//    /** */
-//    private Object oHandles;
-//
-//    /** */
-//    private Map<Integer, PortableObject> poHandles;
-//
-//    /**
-//     * @param handle Handle.
-//     * @param obj Object.
-//     */
-//    @SuppressWarnings("unchecked")
-//    void setObjectHandler(int handle, Object obj) {
-//        assert obj != null;
-//
-//        if (oHandles == null) {
-//            oHandles = new IgniteBiTuple(handle, obj);
-//        }
-//        else if (oHandles instanceof Map) {
-//            ((Map)oHandles).put(handle, obj);
-//        }
-//        else {
-//            Map map = new HashMap(3, 1.0f);
-//
-//            IgniteBiTuple t = (IgniteBiTuple)oHandles;
-//
-//            map.put(t.getKey(), t.getValue());
-//            map.put(handle, obj);
-//
-//            oHandles = map;
-//        }
-//    }
-//
-//    /**
-//     * @param handle Handle.
-//     * @param po Portable object.
-//     */
-//    void setPortableHandler(int handle, PortableObject po) {
-//        assert po != null;
-//
-//        if (poHandles == null)
-//            poHandles = new HashMap<>(3, 1.0f);
-//
-//        poHandles.put(handle, po);
-//    }
-//
-//    /**
-//     * @param handle Handle.
-//     * @return Object.
-//     */
-//    @Nullable Object getObjectByHandle(int handle) {
-//        if (oHandles != null) {
-//            if (oHandles instanceof IgniteBiTuple) {
-//                IgniteBiTuple t = (IgniteBiTuple)oHandles;
-//
-//                if (t.get1().equals(handle))
-//                    return t.get2();
-//            }
-//            else
-//                return ((Map)oHandles).get(handle);
-//        }
-//
-//        return null;
-//    }
-//
-//    /**
-//     * @param handle Handle.
-//     * @return Object.
-//     */
-//    @Nullable PortableObject getPortableByHandle(int handle) {
-//        return poHandles != null ? poHandles.get(handle) : null;
-//    }
-//
-//    /** {@inheritDoc} */
-//    @Override public String toString() {
-//        return S.toString(PortableReaderContext.class, this);
-//    }
-//}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/f6fc097c/modules/microbench/src/main/java/org/apache/ignite/MyBenchmark.java
----------------------------------------------------------------------
diff --git a/modules/microbench/src/main/java/org/apache/ignite/MyBenchmark.java b/modules/microbench/src/main/java/org/apache/ignite/MyBenchmark.java
index 2c5deb1..9eba07a 100644
--- a/modules/microbench/src/main/java/org/apache/ignite/MyBenchmark.java
+++ b/modules/microbench/src/main/java/org/apache/ignite/MyBenchmark.java
@@ -110,16 +110,16 @@ public class MyBenchmark {
         System.out.println(data.length);
     }
 
-    @Benchmark
-    public byte[] testAddressWrite() throws Exception {
-        return marsh.marshal(new Address());
-    }
-
 //    @Benchmark
-//    public Address testAddressRead() throws Exception {
-//        return marsh.unmarshal(marshAddrBytes, null);
+//    public byte[] testAddressWrite() throws Exception {
+//        return marsh.marshal(new Address());
 //    }
 
+    @Benchmark
+    public Address testAddressRead() throws Exception {
+        return marsh.unmarshal(marshAddrBytes, null);
+    }
+
     private static final Address addr = new Address();
 
     public static void main(String[] args) throws Exception {


[10/11] ignite git commit: IGNITE-1770: Optimization: cached ID mapper.

Posted by vo...@apache.org.
IGNITE-1770: Optimization: cached ID mapper.


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

Branch: refs/heads/ignite-1770
Commit: 920e755d0d630267d1b085209685f59a16014022
Parents: f6fc097
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Tue Oct 27 17:12:06 2015 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Tue Oct 27 17:12:06 2015 +0300

----------------------------------------------------------------------
 .../ignite/internal/portable/PortableReaderExImpl.java      | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/920e755d/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 7dc1b21..1da288b 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
@@ -26,6 +26,7 @@ import org.apache.ignite.internal.util.typedef.internal.SB;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteBiTuple;
 import org.apache.ignite.portable.PortableException;
+import org.apache.ignite.portable.PortableIdMapper;
 import org.apache.ignite.portable.PortableInvalidClassException;
 import org.apache.ignite.portable.PortableObject;
 import org.apache.ignite.portable.PortableRawReader;
@@ -152,6 +153,9 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
     /** Footer end. */
     private int footerEnd;
 
+    /** ID mapper. */
+    private PortableIdMapper idMapper;
+
     /**
      * @param ctx Context.
      * @param arr Array.
@@ -2509,7 +2513,10 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
 
         assert typeId != UNREGISTERED_TYPE_ID;
 
-        return ctx.fieldId(typeId, name);
+        if (idMapper == null)
+            idMapper = ctx.idMapper(typeId);
+
+        return idMapper.fieldId(typeId, name);
     }
 
     /**


[04/11] ignite git commit: IGNITE-1770: Schema ID for reflective classes.

Posted by vo...@apache.org.
IGNITE-1770: Schema ID for reflective classes.


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

Branch: refs/heads/ignite-1770
Commit: 0b0b4d7973ca83759533de525e8f790f5d82fed5
Parents: 0e49134
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Tue Oct 27 15:54:31 2015 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Tue Oct 27 15:54:31 2015 +0300

----------------------------------------------------------------------
 .../java/org/apache/ignite/internal/portable/PortableUtils.java  | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/0b0b4d79/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 823b0e1..38b6e6c 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
@@ -578,9 +578,9 @@ public class PortableUtils {
      * @return Footer start.
      */
     public static int footerStartRelative(PortablePositionReadable in, int start) {
-        int schemaId = in.readIntPositioned(start + GridPortableMarshaller.SCHEMA_ID_POS);
+        short flags = in.readShortPositioned(start + GridPortableMarshaller.FLAGS_POS);
 
-        if (schemaId == 0)
+        if (PortableUtils.isRawOnly(flags))
             // No schema, footer start equals to object end.
             return length(in, start);
         else


[08/11] ignite git commit: IGNITE-1770: WIP.

Posted by vo...@apache.org.
IGNITE-1770: WIP.


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

Branch: refs/heads/ignite-1770
Commit: 0dfdaca0dc03dace74925235ddaabf99cdf3a642
Parents: d48d776
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Tue Oct 27 16:58:12 2015 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Tue Oct 27 16:58:12 2015 +0300

----------------------------------------------------------------------
 .../java/org/apache/ignite/internal/portable/PortableContext.java | 2 --
 .../org/apache/ignite/internal/portable/PortableReaderExImpl.java | 3 ---
 2 files changed, 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/0dfdaca0/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 009aec6..b0405ac 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
@@ -625,8 +625,6 @@ public class PortableContext implements Externalizable {
         if (userTypes.containsKey(typeId) || predefinedTypes.containsKey(typeId))
             return DFLT_ID_MAPPER;
 
-        // TODO: Opto: comment above.
-
         return BASIC_CLS_ID_MAPPER;
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/0dfdaca0/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 12ec418..7dc1b21 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
@@ -1626,9 +1626,6 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
 
             in.position(in.position() + strLen);
 
-            // TODO: Opto.
-            //in.position(in.position() + strLen);
-
             return res;
         }
         else


[06/11] ignite git commit: IGNITE-1770: Optimized schema tracking during write.

Posted by vo...@apache.org.
IGNITE-1770: Optimized schema tracking during write.


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

Branch: refs/heads/ignite-1770
Commit: 6d9dea39b92184cf1206df267808775ca840072e
Parents: 92c6b29
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Tue Oct 27 16:28:37 2015 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Tue Oct 27 16:28:37 2015 +0300

----------------------------------------------------------------------
 .../internal/portable/PortableWriterExImpl.java | 110 +++++++++++++++----
 .../java/org/apache/ignite/MyBenchmark.java     |  10 +-
 2 files changed, 94 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/6d9dea39/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 6e4c430..a629010 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
@@ -32,11 +32,9 @@ import java.lang.reflect.InvocationTargetException;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.sql.Timestamp;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
 import java.util.IdentityHashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
@@ -94,6 +92,9 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
     /** */
     private static final int INIT_CAP = 1024;
 
+    /** Thread-local schema. */
+    private static final ThreadLocal<SchemaHolder> SCHEMA = new ThreadLocal<>();
+
     /** */
     private final PortableContext ctx;
 
@@ -121,9 +122,11 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
     /** Output stream. */
     private PortableOutputStream out;
 
-    /** Field infos. */
-    // TODO: Optimize.
-    private List<Integer> schema;
+    /** Schema. */
+    private SchemaHolder schema;
+
+    /** Amount of written fields. */
+    private int fieldCnt;
 
     /**
      * @param ctx Context.
@@ -325,8 +328,7 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
             out.writeInt(start + SCHEMA_OR_RAW_OFF_POS, out.position() - start);
 
             // Write the schema.
-            for (Integer val : schema)
-                out.writeInt(val);
+            schema.writeAndPop(this, fieldCnt);
 
             // Write raw offset if needed.
             if (rawOffPos != 0)
@@ -1694,23 +1696,21 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
      * @param fieldId Field ID.
      */
     public void writeFieldId(int fieldId) {
-        int off = out.position() - start;
+        int fieldOff = out.position() - start;
 
-        saveFieldInfo(fieldId, off);
-    }
+        if (schema == null) {
+            schema = SCHEMA.get();
 
-     /**
-      * Save field info.
-      *
-      * @param id Field ID.
-      * @param off Offset starting from object head.
-      */
-    private void saveFieldInfo(int id, int off) {
-        if (schema == null)
-            schema = new ArrayList<>(2);
+            if (schema == null) {
+                schema = new SchemaHolder();
+
+                SCHEMA.set(schema);
+            }
+        }
 
-        schema.add(id);
-        schema.add(off);
+        schema.push(fieldId, fieldOff);
+
+        fieldCnt++;
     }
 
      /**
@@ -1751,4 +1751,72 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
     public PortableContext context() {
         return ctx;
     }
+
+    /**
+     * Schema holder.
+     */
+    private static class SchemaHolder {
+        /** Grow step. */
+        private static final int GROW_STEP = 16;
+
+        /** Maximum stable size. */
+        private static final int MAX_SIZE = 256;
+
+        /** Data. */
+        private int[] data;
+
+        /** Index. */
+        private int idx;
+
+        /**
+         * Constructor.
+         */
+        public SchemaHolder() {
+            data = new int[GROW_STEP];
+        }
+
+        /**
+         * Push another frame.
+         *
+         * @param id Field ID.
+         * @param off Field offset.
+         */
+        public void push(int id, int off) {
+            if (idx == data.length) {
+                int[] data0 = new int[data.length + GROW_STEP];
+
+                System.arraycopy(data, 0, data0, 0, data.length);
+
+                data = data0;
+            }
+
+            data[idx] = id;
+            data[idx + 1] = off;
+
+            idx += 2;
+        }
+
+        /**
+         * Write collected frames and pop them.
+         *
+         * @param writer Writer.
+         * @param cnt Count.
+         */
+        public void writeAndPop(PortableWriterExImpl writer, int cnt) {
+            int startIdx = idx - cnt * 2;
+
+            assert startIdx >= 0;
+
+            for (int idx0 = startIdx; idx0 < idx;) {
+                writer.writeInt(data[idx0++]);
+                writer.writeInt(data[idx0++]);
+            }
+
+            idx = startIdx;
+
+            // Shrink data array if needed.
+            if (idx == 0 && data.length > MAX_SIZE)
+                data = new int[MAX_SIZE];
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/6d9dea39/modules/microbench/src/main/java/org/apache/ignite/MyBenchmark.java
----------------------------------------------------------------------
diff --git a/modules/microbench/src/main/java/org/apache/ignite/MyBenchmark.java b/modules/microbench/src/main/java/org/apache/ignite/MyBenchmark.java
index 030342d..2c5deb1 100644
--- a/modules/microbench/src/main/java/org/apache/ignite/MyBenchmark.java
+++ b/modules/microbench/src/main/java/org/apache/ignite/MyBenchmark.java
@@ -123,12 +123,12 @@ public class MyBenchmark {
     private static final Address addr = new Address();
 
     public static void main(String[] args) throws Exception {
-        setup();
-        while (true)
-            marsh.unmarshal(marshAddrBytes, null);
+//        setup();
+//        while (true)
+//            marsh.unmarshal(marshAddrBytes, null);
 
-//        Options opts = new OptionsBuilder().include(MyBenchmark.class.getSimpleName()).build();
-//        new Runner(opts).run();
+        Options opts = new OptionsBuilder().include(MyBenchmark.class.getSimpleName()).build();
+        new Runner(opts).run();
     }
 
     enum Sex { MALE, FEMALE }