Module: ResqueSerial::Lockable

Included in:
SyncJob
Defined in:
lib/resque-serial/lockable.rb

Instance Method Summary collapse

Instance Method Details

#around_perform_lock(*args) ⇒ Object



38
39
40
41
42
# File 'lib/resque-serial/lockable.rb', line 38

def around_perform_lock(*args)
  yield
ensure
  clear_lock(*args)
end

#before_perform_lock(*args) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/resque-serial/lockable.rb', line 20

def before_perform_lock(*args)
  if lock_key *args
    if Resque.redis.setnx get_lock(*args), true
      Resque.redis.expire get_lock(*args), lock_timeout
    else
      sleep requeue_perform_delay

      Resque.enqueue self, *args

      raise Resque::Job::DontPerform
    end
  end
end

#clear_lock(*args) ⇒ Object



34
35
36
# File 'lib/resque-serial/lockable.rb', line 34

def clear_lock(*args)
  Resque.redis.del(get_lock(*args))
end

#get_lock(*args) ⇒ Object



12
13
14
# File 'lib/resque-serial/lockable.rb', line 12

def get_lock(*args)
  "lock:"+lock_key(*args).to_s
end

#lock_key(*args) ⇒ Object

Raises:

  • (NotImplementedError)


8
9
10
# File 'lib/resque-serial/lockable.rb', line 8

def lock_key(*args)
  raise NotImplementedError
end

#lock_timeoutObject



4
5
6
# File 'lib/resque-serial/lockable.rb', line 4

def lock_timeout
  3600
end

#on_failure_lock(exception, *args) ⇒ Object



44
45
46
# File 'lib/resque-serial/lockable.rb', line 44

def on_failure_lock(exception, *args)
  clear_lock(*args)
end

#requeue_perform_delayObject



16
17
18
# File 'lib/resque-serial/lockable.rb', line 16

def requeue_perform_delay
  1.0
end