Process web hooks via queue
Created by: rlaneve
Currently, if a project has multiple web hooks and one fails, the rest are not processed. In version 4.0 and earlier, the failure of a web hook would fail the entire post-receive processing. The post-receive could be retried via the resque UI, but doing so would re-process the entire post-receive, including the creation of an events table entry, potentially updating a merge request, and re-firing all web hooks. As of 4.1 and the switch to sidekiq, the retry is automatic.
The suggested enhancement is to process web hooks the same way system hooks are processed: asynchronously via a dedicated queue. Doing so would stop an individual web hook failure from affecting any other web hooks, and allow for retrying a failed web hook with no other affects on the system (i.e., no more duplicate events table entries).
(pull request coming)