Repository: ignite Updated Branches: refs/heads/ignite-1917 1c71f2257 -> 1b48b5857
IGNITE-1917: Removed schema ID advance in case of serializable objects. Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/3f19b51b Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/3f19b51b Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/3f19b51b Branch: refs/heads/ignite-1917 Commit: 3f19b51b1c994760dfe2ad24a58bf7c94c6bf1ce Parents: 1c71f22 Author: vozerov-gridgain <[email protected]> Authored: Mon Nov 16 13:24:10 2015 +0300 Committer: vozerov-gridgain <[email protected]> Committed: Mon Nov 16 13:24:10 2015 +0300 ---------------------------------------------------------------------- .../internal/portable/BinaryFieldAccessor.java | 18 ++++++------ .../internal/portable/BinaryWriterExImpl.java | 29 +++++++++++++++++--- .../portable/PortableClassDescriptor.java | 2 ++ 3 files changed, 36 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/3f19b51b/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryFieldAccessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryFieldAccessor.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryFieldAccessor.java index 6ae2188..c93e369 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryFieldAccessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryFieldAccessor.java @@ -161,7 +161,7 @@ public abstract class BinaryFieldAccessor { /** {@inheritDoc} */ @Override public void write(Object obj, BinaryWriterExImpl writer) throws BinaryObjectException { - writer.writeFieldId(id); + writer.writeFieldIdNoSchemaUpdate(id); byte val = UNSAFE.getByte(obj, offset); @@ -191,7 +191,7 @@ public abstract class BinaryFieldAccessor { /** {@inheritDoc} */ @Override public void write(Object obj, BinaryWriterExImpl writer) throws BinaryObjectException { - writer.writeFieldId(id); + writer.writeFieldIdNoSchemaUpdate(id); boolean val = UNSAFE.getBoolean(obj, offset); @@ -221,7 +221,7 @@ public abstract class BinaryFieldAccessor { /** {@inheritDoc} */ @Override public void write(Object obj, BinaryWriterExImpl writer) throws BinaryObjectException { - writer.writeFieldId(id); + writer.writeFieldIdNoSchemaUpdate(id); short val = UNSAFE.getShort(obj, offset); @@ -251,7 +251,7 @@ public abstract class BinaryFieldAccessor { /** {@inheritDoc} */ @Override public void write(Object obj, BinaryWriterExImpl writer) throws BinaryObjectException { - writer.writeFieldId(id); + writer.writeFieldIdNoSchemaUpdate(id); char val = UNSAFE.getChar(obj, offset); @@ -281,7 +281,7 @@ public abstract class BinaryFieldAccessor { /** {@inheritDoc} */ @Override public void write(Object obj, BinaryWriterExImpl writer) throws BinaryObjectException { - writer.writeFieldId(id); + writer.writeFieldIdNoSchemaUpdate(id); int val = UNSAFE.getInt(obj, offset); @@ -311,7 +311,7 @@ public abstract class BinaryFieldAccessor { /** {@inheritDoc} */ @Override public void write(Object obj, BinaryWriterExImpl writer) throws BinaryObjectException { - writer.writeFieldId(id); + writer.writeFieldIdNoSchemaUpdate(id); long val = UNSAFE.getLong(obj, offset); @@ -341,7 +341,7 @@ public abstract class BinaryFieldAccessor { /** {@inheritDoc} */ @Override public void write(Object obj, BinaryWriterExImpl writer) throws BinaryObjectException { - writer.writeFieldId(id); + writer.writeFieldIdNoSchemaUpdate(id); float val = UNSAFE.getFloat(obj, offset); @@ -371,7 +371,7 @@ public abstract class BinaryFieldAccessor { /** {@inheritDoc} */ @Override public void write(Object obj, BinaryWriterExImpl writer) throws BinaryObjectException { - writer.writeFieldId(id); + writer.writeFieldIdNoSchemaUpdate(id); double val = UNSAFE.getDouble(obj, offset); @@ -413,7 +413,7 @@ public abstract class BinaryFieldAccessor { assert obj != null; assert writer != null; - writer.writeFieldId(id); + writer.writeFieldIdNoSchemaUpdate(id); Object val; http://git-wip-us.apache.org/repos/asf/ignite/blob/3f19b51b/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryWriterExImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryWriterExImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryWriterExImpl.java index fa258d9..003856a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryWriterExImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/BinaryWriterExImpl.java @@ -94,9 +94,6 @@ public class BinaryWriterExImpl implements BinaryWriter, BinaryRawWriterEx, Obje /** */ private final PortableContext ctx; - /** */ - private final int start; - /** Output stream. */ private final PortableOutputStream out; @@ -106,6 +103,9 @@ public class BinaryWriterExImpl implements BinaryWriter, BinaryRawWriterEx, Obje /** */ private int typeId; + /** */ + private final int start; + /** Raw offset position. */ private int rawOffPos; @@ -1671,7 +1671,28 @@ public class BinaryWriterExImpl implements BinaryWriter, BinaryRawWriterEx, Obje } /** - * @return Current schema ID. + * Write field ID without schema ID update. This method should be used when schema ID is stable because class + * is seializable. + * + * @param fieldId Field ID. + */ + public void writeFieldIdNoSchemaUpdate(int fieldId) { + int fieldOff = out.position() - start; + + schema.push(fieldId, fieldOff); + + fieldCnt++; + } + + /** + * @param schemaId Schema ID. + */ + public void schemaId(int schemaId) { + this.schemaId = schemaId; + } + + /** + * @return Schema ID. */ public int schemaId() { return schemaId; http://git-wip-us.apache.org/repos/asf/ignite/blob/3f19b51b/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 9502106..1817174 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 @@ -620,6 +620,8 @@ public class PortableClassDescriptor { for (BinaryFieldAccessor info : fields) info.write(obj, writer); + writer.schemaId(stableSchema.schemaId()); + writer.postWrite(userType); } finally {
