diff --git a/lib/sidekiq/cli.rb b/lib/sidekiq/cli.rb index 127fbe54..df5c90d7 100644 --- a/lib/sidekiq/cli.rb +++ b/lib/sidekiq/cli.rb @@ -18,8 +18,8 @@ module Sidekiq FOREVER = 2_000_000_000 def run - ::Sidekiq::Client.redis = Sidekiq::RedisConnection.create(@options[:server], @options[:namespace]) - manager_redis = Sidekiq::RedisConnection.create(@options[:server], @options[:namespace], false) + Sidekiq::Client.redis = RedisConnection.create(:url => @options[:server], :namespace => @options[:namespace], :use_pool => true) + manager_redis = RedisConnection.create(:url => @options[:server], :namespace => @options[:namespace]) manager = Sidekiq::Manager.new(manager_redis, @options) begin log 'Starting processing, hit Ctrl-C to stop' diff --git a/lib/sidekiq/client.rb b/lib/sidekiq/client.rb index ddb9bbe4..819afc75 100644 --- a/lib/sidekiq/client.rb +++ b/lib/sidekiq/client.rb @@ -22,9 +22,8 @@ module Sidekiq @redis = redis end - def self.ignore_duplicate_jobs=(value) - @ignore_duplicate_jobs = value - if @ignore_duplicate_jobs + def self.ignore_duplicate_jobs=(ignore) + if ignore middleware.register do use Middleware::Client::UniqueJobs, Client.redis end diff --git a/lib/sidekiq/redis_connection.rb b/lib/sidekiq/redis_connection.rb index 587b2eb8..9950e836 100644 --- a/lib/sidekiq/redis_connection.rb +++ b/lib/sidekiq/redis_connection.rb @@ -3,37 +3,21 @@ require 'redis/namespace' module Sidekiq class RedisConnection - def self.create(url = nil, namespace = nil, pool = true) - @namespace = namespace ? namespace : nil - @url = url ? url : nil - - if pool - ConnectionPool.new { connect } - else - connect - end + def self.create(options={}) + url = options[:url] || ENV['REDISTOGO_URL'] || 'redis://localhost:6379/0' + client = build_client(url, options[:namespace]) + return ConnectionPool.new { client } if options[:use_pool] + client end - def self.connect + def self.build_client(url, namespace) + client = Redis.connect(:url => url) if namespace - Redis::Namespace.new(namespace, :redis => redis_connection) + Redis::Namespace.new(namespace, :redis => client) else - redis_connection + client end end - - def self.namespace - @namespace - end - - def self.url - @url || ENV['REDISTOGO_URL'] || 'redis://localhost:6379/0' - end - - private - - def self.redis_connection - Redis.connect(:url => url) - end + private_class_method :build_client end end diff --git a/test/test_manager.rb b/test/test_manager.rb index fea2e325..1e44c6d7 100644 --- a/test/test_manager.rb +++ b/test/test_manager.rb @@ -6,7 +6,7 @@ require 'connection_pool' class TestManager < MiniTest::Unit::TestCase describe 'with redis' do before do - Sidekiq::Client.redis = @redis = Sidekiq::RedisConnection.create('redis://localhost/sidekiq_test', nil, false) + Sidekiq::Client.redis = @redis = Sidekiq::RedisConnection.create(:url => 'redis://localhost/sidekiq_test') @redis.flushdb $processed = 0 end @@ -25,7 +25,7 @@ class TestManager < MiniTest::Unit::TestCase Sidekiq::Client.push(:foo, 'class' => IntegrationWorker, 'args' => [1, 2]) q = TimedQueue.new - redis = Sidekiq::RedisConnection.create('redis://localhost/sidekiq_test', nil, false) + redis = Sidekiq::RedisConnection.create(:url => 'redis://localhost/sidekiq_test') mgr = Sidekiq::Manager.new(redis, :queues => [:foo]) mgr.when_done do |_| q << 'done' if $processed == 2