[ 
https://issues.apache.org/jira/browse/SAMZA-2463?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Bharath Kumarasubramanian updated SAMZA-2463:
---------------------------------------------
    Fix Version/s: 1.4

> Duplicate firings of processing timers
> --------------------------------------
>
>                 Key: SAMZA-2463
>                 URL: https://issues.apache.org/jira/browse/SAMZA-2463
>             Project: Samza
>          Issue Type: Bug
>            Reporter: Bharath Kumarasubramanian
>            Assignee: Bharath Kumarasubramanian
>            Priority: Major
>             Fix For: 1.4
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> In EpochTimeScheduler, the `removeReadyTimers`  returns the timers that are 
> ready to be fired and also remove them from local book-keeping. We operate on 
> the SetView returned by entrySet() to remove the timers. Since the iterator 
> of the SetView is weakly consistent, there is possibilities in timers 
> surviving the remove and results in duplicate timers being fired.
> The following logs illustrate one scenario in which a timer survived the 
> remove and ended up getting fired again along with the timers that were ready 
> subsequently.
> {code:java}
> Run 1
> <!-- List of timers ready to be fired --> 
> removing key: org.apache.beam.runners.samza.runtime.KeyedTimerData@6c00212c
> removing key: org.apache.beam.runners.samza.runtime.KeyedTimerData@1c2b5bf4
> removing key: org.apache.beam.runners.samza.runtime.KeyedTimerData@1322770f
> removing key: org.apache.beam.runners.samza.runtime.KeyedTimerData@8773354e
> removing key: org.apache.beam.runners.samza.runtime.KeyedTimerData@23eaee2a
> removing key: org.apache.beam.runners.samza.runtime.KeyedTimerData@c49a26d8
> removing key: org.apache.beam.runners.samza.runtime.KeyedTimerData@440d4e3f
> removing key: org.apache.beam.runners.samza.runtime.KeyedTimerData@6347daf8
> removing key: org.apache.beam.runners.samza.runtime.KeyedTimerData@582fd8b8
> removing key: org.apache.beam.runners.samza.runtime.KeyedTimerData@bebe094b
> removing key: org.apache.beam.runners.samza.runtime.KeyedTimerData@56e7e7dc
> removing key: org.apache.beam.runners.samza.runtime.KeyedTimerData@f00ad0a7
> <!-- Snapshot of timers slotted to removed and returned to run loop -->
> Removing timers for : 
> [TimerKey{key=org.apache.beam.runners.samza.runtime.KeyedTimerData@582fd8b8, 
> time='1582080923250'}, 
> TimerKey{key=org.apache.beam.runners.samza.runtime.KeyedTimerData@c49a26d8, 
> time='1582080923250'}, 
> TimerKey{key=org.apache.beam.runners.samza.runtime.KeyedTimerData@8773354e, 
> time='1582080923250'}, 
> TimerKey{key=org.apache.beam.runners.samza.runtime.KeyedTimerData@23eaee2a, 
> time='1582080923250'}, 
> TimerKey{key=org.apache.beam.runners.samza.runtime.KeyedTimerData@1c2b5bf4, 
> time='1582080923250'}, 
> TimerKey{key=org.apache.beam.runners.samza.runtime.KeyedTimerData@56e7e7dc, 
> time='1582080923250'}, 
> TimerKey{key=org.apache.beam.runners.samza.runtime.KeyedTimerData@6c00212c, 
> time='1582080923250'}, 
> TimerKey{key=org.apache.beam.runners.samza.runtime.KeyedTimerData@bebe094b, 
> time='1582080923250'}, 
> TimerKey{key=org.apache.beam.runners.samza.runtime.KeyedTimerData@f00ad0a7, 
> time='1582080923250'}, 
> TimerKey{key=org.apache.beam.runners.samza.runtime.KeyedTimerData@1322770f, 
> time='1582080923250'}, 
> TimerKey{key=org.apache.beam.runners.samza.runtime.KeyedTimerData@440d4e3f, 
> time='1582080923250'}, 
> TimerKey{key=org.apache.beam.runners.samza.runtime.KeyedTimerData@6347daf8, 
> time='1582080923250'}]
> <!-- Size of the snapshot returned to run loop -->
> Timers to be fired: 12
> Run 2
> <!-- List of timers ready to be fired --> 
> removing key: org.apache.beam.runners.samza.runtime.KeyedTimerData@b6e279f2
> removing key: org.apache.beam.runners.samza.runtime.KeyedTimerData@a020aa78
> removing key: org.apache.beam.runners.samza.runtime.KeyedTimerData@57e4b472
> removing key: org.apache.beam.runners.samza.runtime.KeyedTimerData@6ac30e4e
> removing key: org.apache.beam.runners.samza.runtime.KeyedTimerData@47d4a0d5
> <!-- Snapshot of timers slotted to removed and returned to run loop -->
> Removing timers for : 
> [TimerKey{key=org.apache.beam.runners.samza.runtime.KeyedTimerData@b6e279f2, 
> time='1582080923441'}, 
> TimerKey{key=org.apache.beam.runners.samza.runtime.KeyedTimerData@6ac30e4e, 
> time='1582080923441'}, 
> TimerKey{key=org.apache.beam.runners.samza.runtime.KeyedTimerData@47d4a0d5, 
> time='1582080923441'}, 
> TimerKey{key=org.apache.beam.runners.samza.runtime.KeyedTimerData@f00ad0a7, 
> time='1582080923250'}, 
> TimerKey{key=org.apache.beam.runners.samza.runtime.KeyedTimerData@a020aa78, 
> time='1582080923441'}, 
> TimerKey{key=org.apache.beam.runners.samza.runtime.KeyedTimerData@57e4b472, 
> time='1582080923441'}]
> <!-- Size of the snapshot returned to run loop -->
> Timers to be fired: 6 {code}
>  
> Instead of removing all the snapshot from the local ready timers using 
> entrySet().removeAll(), we remove each timer from the map directly.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to