yan zhou created FLINK-9524:
-------------------------------
Summary: NPE from ProcTimeBoundedRangeOver.scala
Key: FLINK-9524
URL: https://issues.apache.org/jira/browse/FLINK-9524
Project: Flink
Issue Type: Bug
Components: Table API & SQL
Affects Versions: 1.5.0
Reporter: yan zhou
Attachments: npe_from_ProcTimeBoundedRangeOver.txt
The class _ProcTimeBoundedRangeOver_ would throws NPE _minRetentionTime_ and
_maxRetentionTime_ are set to greater then 1.
Please see [^npe_from_ProcTimeBoundedRangeOver.txt] for the detail of
exception. Below is a short description the cause:
* When the first event for a key arrives, the cleanup time is registered with
_timerservice_ and recorded in _cleanupTimeState_. If the second event with
same key arrives before the cleanup time, the value in _cleanupTimeState_ is
updated and a new timer is registered to _timerService_. So now we have two
registered timers for cleanup. One is registered because of the first event,
the other for the second event.
* However, when _onTimer_ method is fired for the first cleanup timer, the
_cleanupTimeStates_ value has already been updated to second cleanup time. So
it will bypass the _needToCleanupState_ check, and yet run through the remained
code of _onTimer_ (which is intended to update the accumulator and emit output)
and cause NPE.
_RowTimeBoundedRangeOver_ has very similar logic with
_ProcTimeBoundedRangeOver. But_ It won't cause NPE by the same reason. To avoid
the exception, it simply add a null check before running the logic for updating
accumulator.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)