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