[ 
https://issues.apache.org/jira/browse/FLINK-9524?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16516155#comment-16516155
 ] 

ASF GitHub Bot commented on FLINK-9524:
---------------------------------------

GitHub user yzandrew opened a pull request:

    https://github.com/apache/flink/pull/6180

    [FLINK-9524][Table API & SQL] check whether a clean-up timer is expeired in 
ProcTimeBoundedRangeOver…

    … to prevent NPE
    
    ## What is the purpose of the change
    This pull request solve the bug that causes NPE in 
ProcTimeBoundedRangeOver. Now the onTimer method will check whether the timer 
is a expired clean-up timer.
    
    ## Brief change log
    - ProcTimeBoundedRangeOver check whether the timer is a expired clean-up 
timer. It's done by a null check against the elements within rowMapState. If 
it's null, it means the timer is an expired clean-up timer and bypass the 
remained logic. 
    
    
    ## Verifying this change
    This change is a trivial rework / code cleanup without any test coverage.
    
    ## Does this pull request potentially affect one of the following parts:
      - Dependencies (does it add or upgrade a dependency): no
      - The public API, i.e., is any changed class annotated with 
`@Public(Evolving)`: no
      - The serializers: no
      - The runtime per-record code paths (performance sensitive): no
      - Anything that affects deployment or recovery: JobManager (and its 
components), Checkpointing, Yarn/Mesos, ZooKeeper: no
      - The S3 file system connector: no
    
    ## Documentation
      - Does this pull request introduce a new feature? no
      - If yes, how is the feature documented? not applicable


You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/yzandrew/flink master

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/flink/pull/6180.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #6180
    
----
commit 719bdebf6bdb0e3e3f9aa0acd0bb98040a259a59
Author: yan.zhou <yzhou@...>
Date:   2018-06-18T18:42:29Z

    [FLINK-9524] check whether a clean-up timer is expeired in 
ProcTimeBoundedRangeOver to prevent NPE

----


> NPE from ProcTimeBoundedRangeOver.scala
> ---------------------------------------
>
>                 Key: FLINK-9524
>                 URL: https://issues.apache.org/jira/browse/FLINK-9524
>             Project: Flink
>          Issue Type: Bug
>          Components: Table API &amp; SQL
>    Affects Versions: 1.5.0
>            Reporter: yan zhou
>            Assignee: yan zhou
>            Priority: Major
>         Attachments: npe_from_ProcTimeBoundedRangeOver.txt
>
>
> The class _ProcTimeBoundedRangeOver_ would throws NPE if _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 of 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