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