Skip to content

Commit

Permalink
feature: increase lock timeout for unique jobs (#92)
Browse files Browse the repository at this point in the history
  • Loading branch information
artofhuman authored Feb 1, 2017
1 parent 6ea2b1c commit a87da05
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 11 deletions.
4 changes: 4 additions & 0 deletions lib/resque/integration/unique.rb
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,10 @@ def enqueued?(*args)
end
end

def lock_timeout
3.days
end

# Returns true if resque job is in locked state
def locked?(*args)
key = lock(nil, *args)
Expand Down
64 changes: 53 additions & 11 deletions spec/resque/integration_spec.rb
Original file line number Diff line number Diff line change
@@ -1,20 +1,62 @@
# coding: utf-8

require 'spec_helper'

describe Resque::Integration, '#unique?' do
let(:job) { Class.new }
before { job.send :include, Resque::Integration }
RSpec.describe Resque::Integration do
describe '#unique?' do
let(:job) { Class.new }
before { job.send :include, Resque::Integration }

subject { job }

context 'when #unique is not called' do
it { should_not be_unique }
end

subject { job }
context 'when #unique is called' do
before { job.unique }

context 'when #unique is not called' do
it { should_not be_unique }
it { should be_unique }
end
end

context 'when #unique is called' do
before { job.unique }
describe 'enqueue' do
context 'when job is uniq' do
class UniqueJob
include Resque::Integration

queue :test
unique
end

it 'enqueues only one job' do
UniqueJob.enqueue(param: 'one')

Timecop.travel(10.hours.since) do
UniqueJob.enqueue(param: 'one')

expect(Resque.peek(:test, 0, 100).size).to eq(1)
end
end

it 'enqueues two jobs with differ args' do
UniqueJob.enqueue(param: 'one')

Timecop.travel(10.hours.since) do
UniqueJob.enqueue(param: 'two')

expect(Resque.peek(:test, 0, 100).size).to eq(2)
end
end

it 'enqueues two jobs after expire lock timeout' do
UniqueJob.enqueue(param: 'one')

Timecop.travel(4.days.since) do
UniqueJob.enqueue(param: 'one')

it { should be_unique }
expect(Resque.peek(:test, 0, 100).size).to eq(2)
end
end
end
end
end
end

0 comments on commit a87da05

Please sign in to comment.