Skip to content

Commit

Permalink
Merge pull request sidekiq#2473 from pik/develop
Browse files Browse the repository at this point in the history
Do not perform redundant job look-up on delete for SortedEntry
  • Loading branch information
mperham committed Aug 16, 2015
2 parents 1da7c3c + 90f5059 commit 5fd0217
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 32 deletions.
46 changes: 22 additions & 24 deletions lib/sidekiq/api.rb
Expand Up @@ -369,11 +369,15 @@ def at
end

def delete
@parent.delete(score, jid)
if @value
@parent.delete_by_value(@parent.name, @value)
else
@parent.delete_by_jid(score, jid)
end
end

def reschedule(at)
@parent.delete(score, jid)
delete
@parent.schedule(at, item)
end

Expand Down Expand Up @@ -519,36 +523,30 @@ def find_job(jid)
self.detect { |j| j.jid == jid }
end

def delete(score, jid = nil)
if jid
elements = Sidekiq.redis do |conn|
conn.zrangebyscore(name, score, score)
end
def delete_by_value(name, value)
Sidekiq.redis do |conn|
ret = conn.zrem(name, value)
@_size -= 1 if ret
ret
end
end

elements_with_jid = elements.map do |element|
def delete_by_jid(score, jid)
Sidekiq.redis do |conn|
elements = conn.zrangebyscore(name, score, score)
elements.each do |element|
message = Sidekiq.load_json(element)

if message["jid"] == jid
_, @_size = Sidekiq.redis do |conn|
conn.multi do
conn.zrem(name, element)
conn.zcard name
end
end
end
end
elements_with_jid.count != 0
else
count, @_size = Sidekiq.redis do |conn|
conn.multi do
conn.zremrangebyscore(name, score, score)
conn.zcard name
ret = conn.zrem(name, element)
@_size -= 1 if ret
break ret
end
false
end
count != 0
end
end

alias_method :delete, :delete_by_jid
end

##
Expand Down
14 changes: 6 additions & 8 deletions test/test_api.rb
Expand Up @@ -346,14 +346,12 @@ class ApiWorker
assert_in_delta Time.now.to_f, retri.at.to_f, 0.02
end

it 'can delete multiple retries from score' do
same_time = Time.now.to_f
add_retry('bob1', same_time)
add_retry('bob2', same_time)
r = Sidekiq::RetrySet.new
assert_equal 2, r.size
Sidekiq::RetrySet.new.delete(same_time)
assert_equal 0, r.size
it 'requires a jid to delete an entry' do
start_time = Time.now.to_f
add_retry('bob2', Time.now.to_f)
assert_raises(ArgumentError) do
Sidekiq::RetrySet.new.delete(start_time)
end
end

it 'can delete a single retry from score and jid' do
Expand Down

0 comments on commit 5fd0217

Please sign in to comment.