You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@beam.apache.org by "Minbo Bae (Jira)" <ji...@apache.org> on 2022/03/28 13:07:00 UTC
[jira] [Created] (BEAM-14187) NullPointerException or IllegalStateException at IsmReaderImpl in Dataflow
Minbo Bae created BEAM-14187:
--------------------------------
Summary: NullPointerException or IllegalStateException at IsmReaderImpl in Dataflow
Key: BEAM-14187
URL: https://issues.apache.org/jira/browse/BEAM-14187
Project: Beam
Issue Type: Bug
Components: runner-dataflow
Reporter: Minbo Bae
h6. Problem
Dataflow Java batch jobs with large side input intermittently throws {{NullPointerException}} or {{{}IllegalStateException{}}}.
* [NullPointerException|https://gist.githubusercontent.com/baeminbo/459e283eadbc7752c9f23616b52d958a/raw/f0480b8eaff590fb3f3ae2ab98ddce7dd3b4a237/npe.png] happens at [IsmReaderImpl.overKeyComponents|https://github.com/apache/beam/blob/v2.37.0/runners/google-cloud-dataflow-java/worker/src/main/java/org/apache/beam/runners/dataflow/worker/IsmReaderImpl.java#L217]:
* [IllegalStateException|https://gist.githubusercontent.com/baeminbo/459e283eadbc7752c9f23616b52d958a/raw/f0480b8eaff590fb3f3ae2ab98ddce7dd3b4a237/IllegalStateException.png] happens at [IsmReaderImpl. initializeForKeyedRead |https://github.com/apache/beam/blob/v2.37.0/runners/google-cloud-dataflow-java/worker/src/main/java/org/apache/beam/runners/dataflow/worker/IsmReaderImpl.java#L500].
(all error logs in the Dataflow job is [here|https://gist.githubusercontent.com/baeminbo/459e283eadbc7752c9f23616b52d958a/raw/f0480b8eaff590fb3f3ae2ab98ddce7dd3b4a237/downloaded-logs-20220327-171955.json].)
h6. Hypothesis
The {{initializeForKeyedRead}} is not synchronized. Multiple threads can enter the method so that initialize the index for the same shard and update {{indexPerShard}} without synchronization. And, the {{overKeyComponents}} also accesses {{indexPerShard}} without synchronization. As {{indexPerShard}} is just a {{HashMap}} which is not thread-safe, it can cause {{NullPointerException}} and {{IllegalStateException}} above.
h6. Suggestion
I think it can fix this issue if we change the type of {{indexPerShard}} to a thread-safe map (e.g. {{ConcurrentHashMap}}).
--
This message was sent by Atlassian Jira
(v8.20.1#820001)