This is an automated email from the ASF dual-hosted git repository. ilyak pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push: new ea41746 IGNITE-8635 Add a Method to Inspect BinaryObject Size - Fixes #8868. ea41746 is described below commit ea417467df05d98ca69a08de02c358b0f81bb6f5 Author: Atri Sharma <atri.j...@gmail.com> AuthorDate: Tue Mar 16 15:36:17 2021 +0300 IGNITE-8635 Add a Method to Inspect BinaryObject Size - Fixes #8868. Signed-off-by: Ilya Kasnacheev <ilya.kasnach...@gmail.com> --- .../main/java/org/apache/ignite/binary/BinaryObject.java | 6 ++++++ .../ignite/internal/binary/BinaryEnumObjectImpl.java | 14 ++++++++++++++ .../apache/ignite/internal/binary/BinaryObjectImpl.java | 5 +++++ .../ignite/internal/binary/BinaryObjectOffheapImpl.java | 5 +++++ .../apache/ignite/internal/binary/BinaryEnumsSelfTest.java | 1 + .../binary/BinaryFooterOffsetsAbstractSelfTest.java | 2 ++ .../ignite/internal/binary/BinaryMarshallerSelfTest.java | 1 + 7 files changed, 34 insertions(+) diff --git a/modules/core/src/main/java/org/apache/ignite/binary/BinaryObject.java b/modules/core/src/main/java/org/apache/ignite/binary/BinaryObject.java index d6ac766..b525793 100644 --- a/modules/core/src/main/java/org/apache/ignite/binary/BinaryObject.java +++ b/modules/core/src/main/java/org/apache/ignite/binary/BinaryObject.java @@ -181,4 +181,10 @@ public interface BinaryObject extends Serializable, Cloneable { * @throws BinaryObjectException If object is not enum. */ public String enumName() throws BinaryObjectException; + + /** + * Get the size of the object + * @return Size of the object + */ + public int size(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java index b8a3bc2..c09cda1 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java @@ -473,4 +473,18 @@ public class BinaryEnumObjectImpl implements BinaryObjectEx, Externalizable, Cac return reader.afterMessageRead(BinaryEnumObjectImpl.class); } + + /** {@inheritDoc} */ + @Override public int size() { + if (valBytes == null) { + try { + valBytes = U.marshal(ctx.marshaller(), this); + } + catch (IgniteCheckedException e) { + throw U.convertException(e); + } + } + + return BinaryPrimitives.readInt(valBytes, ord + GridBinaryMarshaller.TOTAL_LEN_POS); + } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java index 6b4eea2..ef654cc 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java @@ -936,6 +936,11 @@ public final class BinaryObjectImpl extends BinaryObjectExImpl implements Extern } /** {@inheritDoc} */ + @Override public int size() { + return length(); + } + + /** {@inheritDoc} */ @Override public String toString() { if (arr == null || ctx == null) return "BinaryObjectImpl [arr= " + (arr != null) + ", ctx=" + (ctx != null) + ", start=" + start + "]"; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java index b9ff9c2..a35683e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java @@ -519,6 +519,11 @@ public class BinaryObjectOffheapImpl extends BinaryObjectExImpl implements Exter // No-op. } + /** {@inheritDoc} */ + @Override public int size() { + return length(); + } + /** * @return Deserialized value. */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryEnumsSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryEnumsSelfTest.java index 6140c9c..b4b7207 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryEnumsSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryEnumsSelfTest.java @@ -255,6 +255,7 @@ public class BinaryEnumsSelfTest extends GridCommonAbstractTest { BinaryEnumObjectImpl binEnum = new BinaryEnumObjectImpl(binCtx, bytes); + assertEquals(srcBinEnum.size(), binEnum.size()); assertEquals(clsName, binEnum.className()); assertEquals(typeId, binEnum.typeId()); assertEquals(ord, binEnum.enumOrdinal()); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFooterOffsetsAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFooterOffsetsAbstractSelfTest.java index f9b894c..53211c5 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFooterOffsetsAbstractSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryFooterOffsetsAbstractSelfTest.java @@ -136,6 +136,8 @@ public abstract class BinaryFooterOffsetsAbstractSelfTest extends GridCommonAbst BinaryObjectExImpl portObj = toBinary(marsh, obj); + assertEquals(portObj.size(), portObj.length()); + // 1. Test binary object content. assert portObj.hasField("field1"); assert portObj.hasField("field2"); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java index ab2fa88..f48bf9a 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java @@ -2644,6 +2644,7 @@ public class BinaryMarshallerSelfTest extends GridCommonAbstractTest { obj.array().length); assertTrue(offheapObj.equals(offheapObj)); + assertEquals(offheapObj.size(), obj.size()); assertFalse(offheapObj.equals(null)); assertFalse(offheapObj.equals("str")); assertTrue(offheapObj.equals(obj));