Skip to content

Commit

Permalink
Use an actor to auto extend visibility timeout
Browse files Browse the repository at this point in the history
Removing defer meant that the timer never got a chance to run, therefore
it needs its own actor.
  • Loading branch information
gshutler committed Jun 5, 2015
1 parent 019dd69 commit 82e888a
Showing 1 changed file with 15 additions and 4 deletions.
19 changes: 15 additions & 4 deletions lib/shoryuken/processor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,14 @@ def process(queue, sqs_msg)

private

def auto_visibility_timeout(queue, sqs_msg, worker_class)
if worker_class.auto_visibility_timeout?
class MessageVisibilityExtender
include Celluloid
include Util

def auto_extend(queue, sqs_msg, worker_class)
queue_visibility_timeout = Shoryuken::Client.queues(queue).visibility_timeout

timer = every(queue_visibility_timeout - 5) do
every(queue_visibility_timeout - 5) do
begin
logger.debug "Extending message #{worker_name(worker_class, sqs_msg)}/#{queue}/#{sqs_msg.message_id} visibility timeout by #{queue_visibility_timeout}s."

Expand All @@ -47,8 +50,16 @@ def auto_visibility_timeout(queue, sqs_msg, worker_class)
end
end
end
end

def visibility_actor
@visibility_actor ||= MessageVisibilityExtender.new_link
end

def auto_visibility_timeout(queue, sqs_msg, worker_class)
return unless worker_class.auto_visibility_timeout?

timer
visibility_actor.auto_extend(queue, sqs_msg, worker_class)
end

def get_body(worker_class, sqs_msg)
Expand Down

0 comments on commit 82e888a

Please sign in to comment.