diff options
author | Ryan LaNeve <ryan.laneve@aciss.com> | 2013-01-24 15:15:24 -0500 |
---|---|---|
committer | Ryan LaNeve <ryan.laneve@aciss.com> | 2013-01-25 10:42:57 -0500 |
commit | 8a65229b3548a421ca6e7c41a819b40d50f7e162 (patch) | |
tree | b762df8aa5346c9b8b069d61e95b4c764445a24a | |
parent | 639b0a8715074a166eb9ef4252e4f2b5ae5e2c84 (diff) | |
download | gitlab-ce-8a65229b3548a421ca6e7c41a819b40d50f7e162.tar.gz |
Updates project to process web hooks async via sidekiq.
A new queue of "project_web_hook" is used to process web hooks asynchronously, allowing each to succeed/fail (and be retried) independently.
(Basically, project web hooks now process the same as system hooks.)
-rw-r--r-- | Procfile | 2 | ||||
-rw-r--r-- | app/models/project.rb | 2 | ||||
-rw-r--r-- | app/models/web_hook.rb | 4 | ||||
-rw-r--r-- | app/workers/project_web_hook_worker.rb | 9 | ||||
-rw-r--r-- | lib/tasks/sidekiq.rake | 2 |
5 files changed, 16 insertions, 3 deletions
@@ -1,2 +1,2 @@ web: bundle exec unicorn_rails -p $PORT -worker: bundle exec sidekiq -q post_receive,mailer,system_hook,common,default +worker: bundle exec sidekiq -q post_receive,mailer,system_hook,project_web_hook,common,default diff --git a/app/models/project.rb b/app/models/project.rb index e521dfc93da..cb6986ce43d 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -340,7 +340,7 @@ class Project < ActiveRecord::Base end def execute_hooks(data) - hooks.each { |hook| hook.execute(data) } + hooks.each { |hook| hook.async_execute(data) } end def execute_services(data) diff --git a/app/models/web_hook.rb b/app/models/web_hook.rb index df58fa93b7e..efa27f31982 100644 --- a/app/models/web_hook.rb +++ b/app/models/web_hook.rb @@ -34,4 +34,8 @@ class WebHook < ActiveRecord::Base basic_auth: {username: parsed_url.user, password: parsed_url.password}) end end + + def async_execute(data) + Sidekiq::Client.enqueue(ProjectWebHookWorker, id, data) + end end diff --git a/app/workers/project_web_hook_worker.rb b/app/workers/project_web_hook_worker.rb new file mode 100644 index 00000000000..9f9b9b1df5f --- /dev/null +++ b/app/workers/project_web_hook_worker.rb @@ -0,0 +1,9 @@ +class ProjectWebHookWorker + include Sidekiq::Worker + + sidekiq_options queue: :project_web_hook + + def perform(hook_id, data) + WebHook.find(hook_id).execute data + end +end diff --git a/lib/tasks/sidekiq.rake b/lib/tasks/sidekiq.rake index 01da919d7f8..0d2ec6f332c 100644 --- a/lib/tasks/sidekiq.rake +++ b/lib/tasks/sidekiq.rake @@ -6,7 +6,7 @@ namespace :sidekiq do desc "GITLAB | Start sidekiq" task :start do - run "nohup bundle exec sidekiq -q post_receive,mailer,system_hook,common,default -e #{Rails.env} -P #{pidfile} >> #{Rails.root.join("log", "sidekiq.log")} 2>&1 &" + run "nohup bundle exec sidekiq -q post_receive,mailer,system_hook,project_web_hook,common,default -e #{Rails.env} -P #{pidfile} >> #{Rails.root.join("log", "sidekiq.log")} 2>&1 &" end def pidfile |