You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Nikolay Izhikov (Jira)" <ji...@apache.org> on 2021/12/06 12:26:00 UTC

[jira] [Commented] (IGNITE-16057) Second read of array field from BinaryObject fail

    [ https://issues.apache.org/jira/browse/IGNITE-16057?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17453985#comment-17453985 ] 

Nikolay Izhikov commented on IGNITE-16057:
------------------------------------------

Reproducer with the usage of public API, only:

{code:java}

    /** */
    @Test
    public void testArrayFieldSeveralRead() throws Exception {
        try (Ignite ignite = startGrid(1)) {
            TestClass1[] expArr = new TestClass1[] {new TestClass1(), new TestClass1()};

            BinaryObject arrObj = ignite.binary().toBinary(new TestClsWithArray(expArr));

            for (int i = 0; i < 10; i++)
                Assert.assertArrayEquals(i + " iteration", expArr, unwrapBinariesInArray(arrObj.field("arr")));

            arrObj = ignite.binary().builder(TestClsWithArray.class.getName()).setField("arr", expArr).build();

            for (int i = 0; i < 10; i++)
                Assert.assertArrayEquals(i + " iteration", expArr, unwrapBinariesInArray(arrObj.field("arr")));
        }
        finally {
            clearBinaryMeta();
        }
    }
{code}

> Second read of array field from BinaryObject fail
> -------------------------------------------------
>
>                 Key: IGNITE-16057
>                 URL: https://issues.apache.org/jira/browse/IGNITE-16057
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Nikolay Izhikov
>            Priority: Blocker
>              Labels: ise
>
> Second read of array field fail and read some garbage.
> This happen because when object read with handle stream position don't move to the end of already deserialized object.
> So second array element is just random bytes from the middle of the stream.
> BinaryObjectBuilderAdditionalSelfTest
> {code:java}
>     /** */
>     @Test
>     public void testArrayFieldSeveralRead() throws Exception {
>         try (Ignite ignite = startGrid(1)) {
>             TestClass1[] expArr = new TestClass1[] {new TestClass1(), new TestClass1()};
>             BinaryObject arrObj = ignite.binary().toBinary(new TestClsWithArray(expArr));
>             for (int i = 0; i < 10; i++)
>                 Assert.assertArrayEquals(i + " iteration", expArr, PlatformUtils.unwrapBinariesInArray(arrObj.field("arr")));
>             arrObj = ignite.binary().builder(TestClsWithArray.class.getName()).setField("arr", expArr).build();
>             for (int i = 0; i < 10; i++)
>                 Assert.assertArrayEquals(i + " iteration", expArr, PlatformUtils.unwrapBinariesInArray(arrObj.field("arr")));
>         }
>         finally {
>             clearBinaryMeta();
>         }
>     }
>     /** Test class with array. */
>     public static class TestClsWithArray {
>         /** */
>         private final Object[] arr;
>         /** */
>         public TestClsWithArray(TestClass1[] arr) {
>             this.arr = arr;
>         }
>     }
> {code}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)