{"push_id":802021022,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"44c28abf120754c0175c65ffd3d4587a350b3798","before":"5548a254755bb84edae2768b94ab1816e1b49b91","commits":[{"sha":"44c28abf120754c0175c65ffd3d4587a350b3798","author":{"email":"5d14e010a5b345b784fd604efcc6cebb79f97468@gmail.com","name":"zsxwing"},"message":"[SPARK-10224] [STREAMING] Fix the issue that blockIntervalTimer won't call updateCurrentBuffer when stopping\n\n`blockIntervalTimer.stop(interruptTimer = false)` doesn't guarantee calling `updateCurrentBuffer`. So it's possible that `blockIntervalTimer` will exit when `updateCurrentBuffer` is not empty. Then the data in `currentBuffer` will be lost.\n\nTo reproduce it, you can add `Thread.sleep(200)` in this line (https://github.com/apache/spark/blob/69c9c177160e32a2fbc9b36ecc52156077fca6fc/streaming/src/main/scala/org/apache/spark/streaming/util/RecurringTimer.scala#L100) and run `StreamingContexSuite`.\nI cannot write a unit test to reproduce it because I cannot find an approach to force `RecurringTimer` suspend at this line for a few milliseconds.\n\nThere was a failure in Jenkins here: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/41455/console\n\nThis PR updates RecurringTimer to make sure `stop(interruptTimer = false)` will call `callback` at least once after the `stop` method is called.\n\nAuthor: zsxwing <zsxwing@gmail.com>\n\nCloses #8417 from zsxwing/SPARK-10224.","distinct":true,"url":"https://api.github.com/repos/apache/spark/commits/44c28abf120754c0175c65ffd3d4587a350b3798"}]}