{"push_id":1289791399,"size":8,"distinct_size":7,"ref":"refs/heads/5.0.0-enhancements","head":"5205349d56688030fa2b1b39bd8df81071cf8238","before":"351bb89956d132e97c06bcf4dcc1ac6daa55bf86","commits":[{"sha":"b7ab3a2d23b5afb438c666ab7abfcdb370d8a8f3","author":{"name":"Mike Jensen","email":"9fd3ea15cdd52cde0197ff360bf3ca4946235016@threadly.org"},"message":"4.7.2 Release: FutureUtils improvements\n\nSmall patch release to include three small improvements in FutureUtils:\n* Added FutureUtils.cancelIncompleteFuturesIfAnyFail.  This takes in a collection of futures, and will add a listener to each one so that if any fail in failure then will all be canceled.  This is a common pattern to avoid doing unnecessary work when you need the results from multiple individual tasks.\n* Performance improvements with `makeFailureListFuture` and `makeResultListFuture` when provided lots of canceled futures.  If using `FutureUtils.cancelIncompleteFutures` on a large collection of futures, and then using `makeFailureListFuture` or `makeResultListFuture` would result in a lot of unnecessarily load as we optimistically try to pull the results from the canceled futures.  Instead we check for this condition to avoid having an exception constructed and thrown as a way of communicating the state.\n* Behavior improvement when future canceled from FutureUtils.makeResultListFuture.  Previously if a future was canceled this would be treated just like any other error, potentially resulting in the returned future throwing an ExecutionException.  Worse yet this canceled future may have hidden a more interesting error from one of the futures.  Now if one or more futures are canceled, but NO futures end in error, then the returned future will also be canceled.  If one or more futures is canceled, but at least one future IS in error, then we will ignore the canceled conditions and fail the returned future with the more interesting failure.  This is a huge benefit in traceability for issues.","distinct":false,"url":"https://api.github.com/repos/threadly/threadly/commits/b7ab3a2d23b5afb438c666ab7abfcdb370d8a8f3"},{"sha":"60e2ec250033327dc8ec6183abf9f497dae26286","author":{"name":"Mike Jensen","email":"9fd3ea15cdd52cde0197ff360bf3ca4946235016@threadly.org"},"message":"Removal of deprecated API's for version 5.0.0","distinct":true,"url":"https://api.github.com/repos/threadly/threadly/commits/60e2ec250033327dc8ec6183abf9f497dae26286"},{"sha":"bf70a4023e1c7d60a6947e3a2586026550c4e811","author":{"name":"Mike Jensen","email":"9fd3ea15cdd52cde0197ff360bf3ca4946235016@threadly.org"},"message":"Update eclipse settings and gradle build for java 8 development","distinct":true,"url":"https://api.github.com/repos/threadly/threadly/commits/bf70a4023e1c7d60a6947e3a2586026550c4e811"},{"sha":"8469cebed0ac5e5187a4c3ca4fee8864b0e252ef","author":{"name":"Mike Jensen","email":"9fd3ea15cdd52cde0197ff360bf3ca4946235016@threadly.org"},"message":"WatchdogCache: use computeIfAbsent for producing watchdogs","distinct":true,"url":"https://api.github.com/repos/threadly/threadly/commits/8469cebed0ac5e5187a4c3ca4fee8864b0e252ef"},{"sha":"470155a58e0d6a8a6ccdef0b4d2e48a68dd28611","author":{"name":"Mike Jensen","email":"9fd3ea15cdd52cde0197ff360bf3ca4946235016@threadly.org"},"message":"Added \"SortUtils\"\n\nThis replaces the deprecated `ListUtils`, and the internal `TaskListUtils`.\nUsing lambda's to provide a better interface into using this search/insertion algorithm with collections of different types of data.","distinct":true,"url":"https://api.github.com/repos/threadly/threadly/commits/470155a58e0d6a8a6ccdef0b4d2e48a68dd28611"},{"sha":"be72b130b1abe62e3c4a3f1ade69c8e7e4f07f9c","author":{"name":"Jeremy Mizell","email":"0759a18f49ee1df7a584f50249537712cd71ae90@ottercove.net"},"message":"Allow interceptors to accept an lambda\n\nChanged abstract interceptor class to allow submission of a lambda as task modifier.\nClasses can still be extended and wrapTask overiden and to handle task interception.","distinct":true,"url":"https://api.github.com/repos/threadly/threadly/commits/be72b130b1abe62e3c4a3f1ade69c8e7e4f07f9c"},{"sha":"50c132638ac086a636448488a8b63f7f6575928b","author":{"name":"Mike Jensen","email":"9fd3ea15cdd52cde0197ff360bf3ca4946235016@threadly.org"},"message":"TestCondition: Allow construction with lambda\n\nChanging this from an abstract class it now allows construction with a lambda for the condition supplier.\nIn switching to use this style in a lot of our own unit tests we were able to save a sizable amount of code.","distinct":true,"url":"https://api.github.com/repos/threadly/threadly/commits/50c132638ac086a636448488a8b63f7f6575928b"},{"sha":"5205349d56688030fa2b1b39bd8df81071cf8238","author":{"name":"Mike Jensen","email":"9fd3ea15cdd52cde0197ff360bf3ca4946235016@threadly.org"},"message":"Better error handling around interceptor construction\n\nBetter verification around constructing interceptors.\nVerifying at construction time that an implementation is provided, and if the default constructor is used change what would be a `NullPointerException` into a `RuntimeException` with a helpful message.","distinct":true,"url":"https://api.github.com/repos/threadly/threadly/commits/5205349d56688030fa2b1b39bd8df81071cf8238"}]}
{"actor":{"display_login":"jentfoo"}}