Remove timeout middleware and worker option, fixes #862

This commit is contained in:
Mike Perham 2013-04-18 09:11:49 -07:00
parent 1b5c16c684
commit 7e094567a5
8 changed files with 18 additions and 36 deletions

View File

@ -1,3 +1,10 @@
2.11.0
-----------
- Remove **timeout** support from `sidekiq_options`. Ruby's timeout
is inherently unsafe in a multi-threaded application and was causing
stability problems for many. See http://bit.ly/OtYpK
2.10.1
-----------

View File

@ -7,11 +7,6 @@ require 'sidekiq/redis_connection'
require 'sidekiq/util'
require 'sidekiq/api'
require 'sidekiq/extensions/class_methods'
require 'sidekiq/extensions/action_mailer'
require 'sidekiq/extensions/active_record'
require 'sidekiq/rails' if defined?(::Rails::Engine)
require 'multi_json'
module Sidekiq
@ -43,7 +38,7 @@ module Sidekiq
# Configuration for Sidekiq server, use like:
#
# Sidekiq.configure_server do |config|
# config.redis = { :namespace => 'myapp', :size => 25, :url => 'redis://myhost:8877/mydb' }
# config.redis = { :namespace => 'myapp', :size => 25, :url => 'redis://myhost:8877/0' }
# config.server_middleware do |chain|
# chain.add MyServerHook
# end
@ -56,7 +51,7 @@ module Sidekiq
# Configuration for Sidekiq client, use like:
#
# Sidekiq.configure_client do |config|
# config.redis = { :namespace => 'myapp', :size => 1, :url => 'redis://myhost:8877/mydb' }
# config.redis = { :namespace => 'myapp', :size => 1, :url => 'redis://myhost:8877/0' }
# end
def self.configure_client
yield self unless server?
@ -115,3 +110,9 @@ module Sidekiq
end
end
require 'sidekiq/extensions/class_methods'
require 'sidekiq/extensions/action_mailer'
require 'sidekiq/extensions/active_record'
require 'sidekiq/rails' if defined?(::Rails::Engine)

View File

@ -11,9 +11,6 @@ module Sidekiq
# UserMailer.delay_until(5.days.from_now).send_welcome_email(new_user)
class DelayedMailer
include Sidekiq::Worker
# I think it's reasonable to assume that emails should take less
# than 30 seconds to send.
sidekiq_options :timeout => 30
def perform(yml)
(target, method_name, args) = YAML.load(yml)

View File

@ -1,21 +0,0 @@
require 'timeout'
module Sidekiq
module Middleware
module Server
class Timeout
def call(worker, msg, queue)
if msg['timeout'] && msg['timeout'].to_i != 0
::Timeout.timeout(msg['timeout'].to_i) do
yield
end
else
yield
end
end
end
end
end
end

View File

@ -4,7 +4,6 @@ require 'sidekiq/util'
require 'sidekiq/middleware/server/active_record'
require 'sidekiq/middleware/server/retry_jobs'
require 'sidekiq/middleware/server/logging'
require 'sidekiq/middleware/server/timeout'
module Sidekiq
##
@ -20,7 +19,6 @@ module Sidekiq
m.add Middleware::Server::Logging
m.add Middleware::Server::RetryJobs
m.add Middleware::Server::ActiveRecord
m.add Middleware::Server::Timeout
end
end

View File

@ -1,3 +1,3 @@
module Sidekiq
VERSION = "2.10.1"
VERSION = "2.11.0"
end

View File

@ -51,11 +51,11 @@ module Sidekiq
#
# :queue - use a named queue for this Worker, default 'default'
# :retry - enable the RetryJobs middleware for this Worker, default *true*
# :timeout - timeout the perform method after N seconds, default *nil*
# :backtrace - whether to save any error backtrace in the retry payload to display in web UI,
# can be true, false or an integer number of lines to save, default *false*
def sidekiq_options(opts={})
self.sidekiq_options_hash = get_sidekiq_options.merge((opts || {}).stringify_keys)
::Sidekiq.logger.warn("#{self.name} - :timeout is unsafe and support has been removed from Sidekiq, see http://bit.ly/OtYpK for details")
end
DEFAULT_OPTIONS = { 'retry' => true, 'queue' => 'default' }

View File

@ -99,7 +99,7 @@ class TestClient < MiniTest::Unit::TestCase
class QueuedWorker
include Sidekiq::Worker
sidekiq_options :queue => :flimflam, :timeout => 1
sidekiq_options :queue => :flimflam
end
it 'enqueues to the named queue' do