Minbo Bae created BEAM-14189:
--------------------------------

             Summary: NullPointerException or IllegalStateException at 
IsmReaderImpl in Dataflow
                 Key: BEAM-14189
                 URL: https://issues.apache.org/jira/browse/BEAM-14189
             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)

Reply via email to