Remove resque_rescheduler as it was killing our app servers (receiving

http requests).

Revert "retry less"

This reverts commit 7784156e3b.

Revert "supress resque retries"

This reverts commit 80cdcd4edd.

Revert "Retry federation if remote pod is down"

This reverts commit bcbc86e502.

Conflicts:

	app/models/jobs/http_multi.rb
This commit is contained in:
danielgrippi 2011-11-07 12:37:54 -08:00
parent 9d91b70f9d
commit 6f7c9e9301
9 changed files with 30 additions and 66 deletions

View file

@ -71,8 +71,6 @@ gem 'ruby-oembed'
gem 'resque', '1.10.0' gem 'resque', '1.10.0'
gem 'resque-ensure-connected' gem 'resque-ensure-connected'
gem 'resque-timeout', '1.0.0' gem 'resque-timeout', '1.0.0'
gem 'resque-scheduler'
gem 'resque-retry'
gem 'SystemTimer', '1.2.1', :platforms => :ruby_18 gem 'SystemTimer', '1.2.1', :platforms => :ruby_18
# reporting # reporting

View file

@ -375,13 +375,6 @@ GEM
resque-ensure-connected (0.1.0) resque-ensure-connected (0.1.0)
activerecord (>= 2.3.5) activerecord (>= 2.3.5)
resque (~> 1.10.0) resque (~> 1.10.0)
resque-retry (0.1.0)
resque (>= 1.8.0)
resque-scheduler (>= 1.8.0)
resque-scheduler (1.9.9)
redis (>= 2.0.1)
resque (>= 1.8.0)
rufus-scheduler
resque-timeout (1.0.0) resque-timeout (1.0.0)
resque (~> 1.0) resque (~> 1.0)
rest-client (1.6.1) rest-client (1.6.1)
@ -423,8 +416,6 @@ GEM
archive-tar-minitar (>= 0.5.2) archive-tar-minitar (>= 0.5.2)
rubyntlm (0.1.1) rubyntlm (0.1.1)
rubyzip (0.9.4) rubyzip (0.9.4)
rufus-scheduler (2.0.11)
tzinfo (>= 0.3.23)
sass (3.1.7) sass (3.1.7)
selenium-webdriver (2.7.0) selenium-webdriver (2.7.0)
childprocess (>= 0.2.1) childprocess (>= 0.2.1)
@ -536,8 +527,6 @@ DEPENDENCIES
redcarpet (= 2.0.0b5) redcarpet (= 2.0.0b5)
resque (= 1.10.0) resque (= 1.10.0)
resque-ensure-connected resque-ensure-connected
resque-retry
resque-scheduler
resque-timeout (= 1.0.0) resque-timeout (= 1.0.0)
rest-client (= 1.6.1) rest-client (= 1.6.1)
roxml! roxml!

View file

@ -3,24 +3,16 @@
# the COPYRIGHT file. # the COPYRIGHT file.
require 'uri' require 'uri'
require 'resque-retry'
require File.join(Rails.root, 'lib/hydra_wrapper') require File.join(Rails.root, 'lib/hydra_wrapper')
module Jobs module Jobs
class HttpMulti < Base class HttpMulti < Base
extend Resque::Plugins::ExponentialBackoff
@queue = :http @queue = :http
@backoff_strategy = [10.minutes,
3.hours,
12.hours,
2.days]
def self.args_for_retry(user_id, encoded_object_xml, person_ids, dispatcher_class_as_string) MAX_RETRIES = 3
[user_id, encoded_object_xml, @failed_people, dispatcher_class_as_string]
end
def self.perform(user_id, encoded_object_xml, person_ids, dispatcher_class_as_string) def self.perform(user_id, encoded_object_xml, person_ids, dispatcher_class_as_string, retry_count=0)
user = User.find(user_id) user = User.find(user_id)
people = Person.where(:id => person_ids) people = Person.where(:id => person_ids)
@ -30,16 +22,17 @@ module Jobs
hydra.enqueue_batch hydra.enqueue_batch
hydra.run hydra.run
@failed_people = hydra.failed_people unless hydra.failed_people.empty?
if retry_count < MAX_RETRIES
unless @failed_people.empty? Resque.enqueue(Jobs::HttpMulti, user_id, encoded_object_xml, hydra.failed_people, dispatcher_class_as_string, retry_count + 1 )
if self.retry_limit_reached?
msg = "event=http_multi_abandon sender_id=#{user_id} failed_recipient_ids='[#{@failed_people.join(', ')}]'"
Rails.logger.info(msg)
else else
raise 'retry' Rails.logger.info("event=http_multi_abandon sender_id=#{user_id} failed_recipient_ids='[#{person_ids.join(', ')}] '")
end end
end end
end end
end end
end end

View file

@ -6,11 +6,7 @@ require File.join(Rails.root, 'lib/postzord/receiver/public')
module Jobs module Jobs
class ReceiveUnencryptedSalmon < Base class ReceiveUnencryptedSalmon < Base
extend Resque::Plugins::ExponentialBackoff
@queue = :receive @queue = :receive
@backoff_strategy = [20.minutes,
1.day]
def self.perform(xml) def self.perform(xml)
receiver = Postzord::Receiver::Public.new(xml) receiver = Postzord::Receiver::Public.new(xml)

View file

@ -1,8 +1,4 @@
require 'resque' require 'resque'
require 'resque_scheduler'
require 'resque/scheduler'
require 'resque-retry'
require 'resque/failure/redis'
Resque::Plugins::Timeout.timeout = 300 Resque::Plugins::Timeout.timeout = 300
@ -13,9 +9,6 @@ if !AppConfig.single_process_mode?
elsif AppConfig[:redis_url] elsif AppConfig[:redis_url]
Resque.redis = Redis.new(:host => AppConfig[:redis_url], :port => 6379) Resque.redis = Redis.new(:host => AppConfig[:redis_url], :port => 6379)
end end
Resque::Failure::MultipleWithRetrySuppression.classes = [Resque::Failure::Redis]
Resque::Failure.backend = Resque::Failure::MultipleWithRetrySuppression
end end
if AppConfig.single_process_mode? if AppConfig.single_process_mode?

View file

@ -22,14 +22,11 @@ module ResqueJobLogging
backtrace = application_trace(error) backtrace = application_trace(error)
log_string << "app_backtrace='#{backtrace.join(";")}' " log_string << "app_backtrace='#{backtrace.join(";")}' "
notify_hoptoad(error, args) if AppConfig[:hoptoad_api_key].present? notify_hoptoad(error, args) if AppConfig[:hoptoad_api_key].present?
do_log = !self.respond_to?('retry_limit_reached?') || self.retry_limit_reached?
else else
log_string += "status=complete " log_string += "status=complete "
do_log = true
end end
Rails.logger.info(log_string) if do_log Rails.logger.info(log_string)
raise error if error raise error if error
end end

View file

@ -1,12 +1,8 @@
require 'resque/tasks' require 'resque/tasks'
require 'resque_scheduler/tasks'
task "resque:setup" do task "resque:setup" do
require File.join(File.dirname(__FILE__), '..', '..', 'config', 'environment') require File.join(File.dirname(__FILE__), '..', '..', 'config', 'environment')
Rails.logger.info("event=resque_setup rails_env=#{Rails.env}") Rails.logger.info("event=resque_setup rails_env=#{Rails.env}")
require 'resque_scheduler'
require 'resque/scheduler'
end end
desc "Alias for resque:work (To run workers on Heroku)" desc "Alias for resque:work (To run workers on Heroku)"

View file

@ -28,18 +28,29 @@ describe Jobs::HttpMulti do
Typhoeus::Hydra.stub!(:new).and_return(@hydra) Typhoeus::Hydra.stub!(:new).and_return(@hydra)
people_ids = @people.map{ |p| p.id } people_ids = @people.map{ |p| p.id }
lambda { Jobs::HttpMulti.perform(bob.id, @post_xml, people_ids, "Postzord::Dispatcher::Private")
Jobs::HttpMulti.perform(bob.id, @post_xml, people_ids, "Postzord::Dispatcher::Private")
}.should_not raise_error
end end
it 'retries' do it 'retries' do
person = @people[0] person = @people[0]
@hydra.stub(:post, person.receive_url).and_return(@failed_response) @hydra.stub(:post, person.receive_url).and_return(@failed_response)
Typhoeus::Hydra.stub!(:new).and_return(@hydra) Typhoeus::Hydra.stub!(:new).and_return(@hydra)
lambda {
Jobs::HttpMulti.perform(bob.id, @post_xml, [person.id], "Postzord::Dispatcher::Private") Resque.should_receive(:enqueue).with(Jobs::HttpMulti, bob.id, @post_xml, [person.id], anything, 1).once
}.should raise_error /retry/ Jobs::HttpMulti.perform(bob.id, @post_xml, [person.id], "Postzord::Dispatcher::Private")
end
it 'max retries' do
person = @people[0]
@hydra.stub(:post, person.receive_url).and_return(@failed_response)
Typhoeus::Hydra.stub!(:new).and_return(@hydra)
Resque.should_not_receive(:enqueue)
Jobs::HttpMulti.perform(bob.id, @post_xml, [person.id], "Postzord::Dispatcher::Private", 3)
end end
it 'generates encrypted xml for people' do it 'generates encrypted xml for people' do
@ -65,12 +76,7 @@ describe Jobs::HttpMulti do
Typhoeus::Hydra.stub!(:new).and_return(@hydra) Typhoeus::Hydra.stub!(:new).and_return(@hydra)
begin Jobs::HttpMulti.perform(bob.id, @post_xml, [person.id], "Postzord::Dispatcher::Private")
Jobs::HttpMulti.perform(bob.id, @post_xml, [person.id], "Postzord::Dispatcher::Private")
rescue RuntimeError => e
e.message == 'retry'
end
person.reload person.reload
person.url.should == "https://remote.net/" person.url.should == "https://remote.net/"
end end

View file

@ -1,11 +1,7 @@
module Resque module Resque
def enqueue(klass, *args) def enqueue(klass, *args)
if $process_queue if $process_queue
begin klass.send(:perform, *args)
klass.send(:perform, *args)
rescue RuntimeError => e
e.message == 'retry'
end
else else
true true
end end