[
https://issues.apache.org/jira/browse/FLINK-13702?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16962906#comment-16962906
]
Dawid Wysakowicz commented on FLINK-13702:
------------------------------------------
I had a look at this issue and I think the problem is not in the
{{BaseMapSerializer}} but in the {{LazyBinaryFormat}} class.
The method {{LazyBinaryFormat#ensureMaterialized}} is not thread safe.
Therefore e.g. when two threads call {{getSizeInBytes}}, the first one starts
materializing the {{BinaryString}} and sets the {{segments}} first, but before
it updates the {{sizeInBytes}} field the second thread calls {{getSizeInBytes}}
and assumes it has already been materialized (segments were set) so it just
returns the sizeInBytes value which is equal to {{-1}} as it was not yet
updated.
A potential solution to the problem would be to synchronize the
{{LazyBinaryFormat#ensureMaterialized}} method. Unfortunately, it has a
potential performance penalty. Do you think the {{BinaryFormat}} classes should
be thread safe? I think they should. Or were they supposed to work only in a
single threaded context? If it is the latter we need to update the
{{BaseMapSerializerTest.testDuplicate}} to perform a copy of the input item
before serializing it (in {{SerializerTestBase.SerializerRunner#run}}).
[~tzulitai] WDYT about the changes to the {{SerializerTestBase}}? Does it make
sense to add the copy anyways?
WDYT? [~lzljs3620320] [~jark]
> BaseMapSerializerTest.testDuplicate fails on Travis
> ---------------------------------------------------
>
> Key: FLINK-13702
> URL: https://issues.apache.org/jira/browse/FLINK-13702
> Project: Flink
> Issue Type: Bug
> Components: Table SQL / Planner
> Affects Versions: 1.10.0
> Reporter: Till Rohrmann
> Assignee: Dawid Wysakowicz
> Priority: Critical
> Labels: test-stability
>
> The {{BaseMapSerializerTest.testDuplicate}} fails on Travis with an
> {{java.lang.IndexOutOfBoundsException}}.
> https://api.travis-ci.org/v3/job/570973199/log.txt
--
This message was sent by Atlassian Jira
(v8.3.4#803005)