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);
