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)

Reply via email to