jiggler 0.1.0.rc4 → 0.1.0.rc5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +37 -200
- data/bin/jiggler +1 -1
- data/lib/jiggler/at_least_once/acknowledger.rb +43 -0
- data/lib/jiggler/at_least_once/fetcher.rb +93 -0
- data/lib/jiggler/at_most_once/acknowledger.rb +21 -0
- data/lib/jiggler/at_most_once/fetcher.rb +46 -0
- data/lib/jiggler/base_acknowledger.rb +11 -0
- data/lib/jiggler/base_fetcher.rb +14 -0
- data/lib/jiggler/cleaner.rb +14 -5
- data/lib/jiggler/cli.rb +3 -2
- data/lib/jiggler/config.rb +48 -4
- data/lib/jiggler/launcher.rb +9 -3
- data/lib/jiggler/manager.rb +26 -2
- data/lib/jiggler/retrier.rb +8 -10
- data/lib/jiggler/scheduled/enqueuer.rb +1 -1
- data/lib/jiggler/scheduled/poller.rb +38 -26
- data/lib/jiggler/scheduled/requeuer.rb +57 -0
- data/lib/jiggler/server.rb +7 -0
- data/lib/jiggler/stats/collection.rb +3 -2
- data/lib/jiggler/stats/monitor.rb +2 -2
- data/lib/jiggler/summary.rb +8 -1
- data/lib/jiggler/support/helper.rb +17 -3
- data/lib/jiggler/version.rb +1 -1
- data/lib/jiggler/web.rb +0 -2
- data/lib/jiggler/worker.rb +21 -36
- data/spec/examples.txt +96 -79
- data/spec/fixtures/config/jiggler.yml +2 -2
- data/spec/jiggler/at_least_once/acknowledger_spec.rb +30 -0
- data/spec/jiggler/at_least_once/fetcher_spec.rb +69 -0
- data/spec/jiggler/at_most_once/fetcher_spec.rb +33 -0
- data/spec/jiggler/cleaner_spec.rb +11 -1
- data/spec/jiggler/cli_spec.rb +5 -7
- data/spec/jiggler/config_spec.rb +45 -3
- data/spec/jiggler/core_spec.rb +2 -0
- data/spec/jiggler/job_spec.rb +4 -4
- data/spec/jiggler/launcher_spec.rb +60 -54
- data/spec/jiggler/manager_spec.rb +50 -41
- data/spec/jiggler/retrier_spec.rb +3 -1
- data/spec/jiggler/scheduled/requeuer_spec.rb +57 -0
- data/spec/jiggler/stats/monitor_spec.rb +3 -2
- data/spec/jiggler/summary_spec.rb +19 -5
- data/spec/jiggler/worker_spec.rb +11 -15
- data/spec/spec_helper.rb +7 -0
- metadata +18 -3
data/spec/examples.txt
CHANGED
@@ -1,79 +1,96 @@
|
|
1
|
-
example_id
|
2
|
-
|
3
|
-
./spec/jiggler/
|
4
|
-
./spec/jiggler/
|
5
|
-
./spec/jiggler/
|
6
|
-
./spec/jiggler/
|
7
|
-
./spec/jiggler/cleaner_spec.rb[1:
|
8
|
-
./spec/jiggler/cleaner_spec.rb[1:
|
9
|
-
./spec/jiggler/cleaner_spec.rb[1:
|
10
|
-
./spec/jiggler/cleaner_spec.rb[1:
|
11
|
-
./spec/jiggler/cleaner_spec.rb[1:
|
12
|
-
./spec/jiggler/cleaner_spec.rb[1:
|
13
|
-
./spec/jiggler/cleaner_spec.rb[1:
|
14
|
-
./spec/jiggler/
|
15
|
-
./spec/jiggler/
|
16
|
-
./spec/jiggler/
|
17
|
-
./spec/jiggler/
|
18
|
-
./spec/jiggler/
|
19
|
-
./spec/jiggler/cli_spec.rb[1:1:
|
20
|
-
./spec/jiggler/cli_spec.rb[1:1:2:
|
21
|
-
./spec/jiggler/cli_spec.rb[1:1:2:
|
22
|
-
./spec/jiggler/cli_spec.rb[1:1:2:
|
23
|
-
./spec/jiggler/cli_spec.rb[1:1:2:
|
24
|
-
./spec/jiggler/cli_spec.rb[1:1:
|
25
|
-
./spec/jiggler/cli_spec.rb[1:1:
|
26
|
-
./spec/jiggler/cli_spec.rb[1:1:
|
27
|
-
./spec/jiggler/cli_spec.rb[1:1:
|
28
|
-
./spec/jiggler/cli_spec.rb[1:1:
|
29
|
-
./spec/jiggler/
|
30
|
-
./spec/jiggler/
|
31
|
-
./spec/jiggler/
|
32
|
-
./spec/jiggler/
|
33
|
-
./spec/jiggler/
|
34
|
-
./spec/jiggler/
|
35
|
-
./spec/jiggler/
|
36
|
-
./spec/jiggler/
|
37
|
-
./spec/jiggler/
|
38
|
-
./spec/jiggler/
|
39
|
-
./spec/jiggler/
|
40
|
-
./spec/jiggler/
|
41
|
-
./spec/jiggler/
|
42
|
-
./spec/jiggler/
|
43
|
-
./spec/jiggler/
|
44
|
-
./spec/jiggler/
|
45
|
-
./spec/jiggler/
|
46
|
-
./spec/jiggler/
|
47
|
-
./spec/jiggler/
|
48
|
-
./spec/jiggler/
|
49
|
-
./spec/jiggler/
|
50
|
-
./spec/jiggler/
|
51
|
-
./spec/jiggler/
|
52
|
-
./spec/jiggler/
|
53
|
-
./spec/jiggler/
|
54
|
-
./spec/jiggler/
|
55
|
-
./spec/jiggler/
|
56
|
-
./spec/jiggler/
|
57
|
-
./spec/jiggler/
|
58
|
-
./spec/jiggler/
|
59
|
-
./spec/jiggler/
|
60
|
-
./spec/jiggler/
|
61
|
-
./spec/jiggler/
|
62
|
-
./spec/jiggler/
|
63
|
-
./spec/jiggler/
|
64
|
-
./spec/jiggler/
|
65
|
-
./spec/jiggler/
|
66
|
-
./spec/jiggler/
|
67
|
-
./spec/jiggler/
|
68
|
-
./spec/jiggler/
|
69
|
-
./spec/jiggler/
|
70
|
-
./spec/jiggler/
|
71
|
-
./spec/jiggler/
|
72
|
-
./spec/jiggler/
|
73
|
-
./spec/jiggler/
|
74
|
-
./spec/jiggler/
|
75
|
-
./spec/jiggler/
|
76
|
-
./spec/jiggler/
|
77
|
-
./spec/jiggler/
|
78
|
-
./spec/jiggler/
|
79
|
-
./spec/jiggler/
|
1
|
+
example_id | status | run_time |
|
2
|
+
-------------------------------------------------------- | ------ | --------------- |
|
3
|
+
./spec/jiggler/at_least_once/acknowledger_spec.rb[1:1:1] | passed | 0.50773 seconds |
|
4
|
+
./spec/jiggler/at_least_once/fetcher_spec.rb[1:1:1] | passed | 2.57 seconds |
|
5
|
+
./spec/jiggler/at_least_once/fetcher_spec.rb[1:1:2] | passed | 2.57 seconds |
|
6
|
+
./spec/jiggler/at_most_once/fetcher_spec.rb[1:1:1] | passed | 0.00698 seconds |
|
7
|
+
./spec/jiggler/cleaner_spec.rb[1:1:1] | passed | 0.001 seconds |
|
8
|
+
./spec/jiggler/cleaner_spec.rb[1:2:1] | passed | 0.00234 seconds |
|
9
|
+
./spec/jiggler/cleaner_spec.rb[1:3:1] | passed | 0.00152 seconds |
|
10
|
+
./spec/jiggler/cleaner_spec.rb[1:4:1] | passed | 0.00101 seconds |
|
11
|
+
./spec/jiggler/cleaner_spec.rb[1:5:1] | passed | 0.00129 seconds |
|
12
|
+
./spec/jiggler/cleaner_spec.rb[1:6:1] | passed | 0.00148 seconds |
|
13
|
+
./spec/jiggler/cleaner_spec.rb[1:7:1] | passed | 0.00127 seconds |
|
14
|
+
./spec/jiggler/cleaner_spec.rb[1:8:1] | passed | 0.00112 seconds |
|
15
|
+
./spec/jiggler/cleaner_spec.rb[1:9:1] | passed | 0.00112 seconds |
|
16
|
+
./spec/jiggler/cleaner_spec.rb[1:9:2] | passed | 0.00136 seconds |
|
17
|
+
./spec/jiggler/cleaner_spec.rb[1:10:1] | passed | 0.00169 seconds |
|
18
|
+
./spec/jiggler/cleaner_spec.rb[1:11:1] | passed | 0.00218 seconds |
|
19
|
+
./spec/jiggler/cli_spec.rb[1:1:1:1] | passed | 0.00053 seconds |
|
20
|
+
./spec/jiggler/cli_spec.rb[1:1:2:1] | passed | 0.01037 seconds |
|
21
|
+
./spec/jiggler/cli_spec.rb[1:1:2:2] | passed | 0.00119 seconds |
|
22
|
+
./spec/jiggler/cli_spec.rb[1:1:2:3] | passed | 0.00048 seconds |
|
23
|
+
./spec/jiggler/cli_spec.rb[1:1:2:4] | passed | 0.00109 seconds |
|
24
|
+
./spec/jiggler/cli_spec.rb[1:1:2:5] | passed | 0.00049 seconds |
|
25
|
+
./spec/jiggler/cli_spec.rb[1:1:2:6] | passed | 0.00053 seconds |
|
26
|
+
./spec/jiggler/cli_spec.rb[1:1:2:7] | passed | 0.00046 seconds |
|
27
|
+
./spec/jiggler/cli_spec.rb[1:1:2:8] | passed | 0.00313 seconds |
|
28
|
+
./spec/jiggler/cli_spec.rb[1:1:2:9] | passed | 0.00137 seconds |
|
29
|
+
./spec/jiggler/cli_spec.rb[1:1:3:1] | passed | 0.0004 seconds |
|
30
|
+
./spec/jiggler/cli_spec.rb[1:1:3:2] | passed | 0.00049 seconds |
|
31
|
+
./spec/jiggler/cli_spec.rb[1:1:3:3] | passed | 0.0007 seconds |
|
32
|
+
./spec/jiggler/cli_spec.rb[1:1:3:4] | passed | 0.001 seconds |
|
33
|
+
./spec/jiggler/cli_spec.rb[1:1:3:5] | passed | 0.00044 seconds |
|
34
|
+
./spec/jiggler/config_spec.rb[1:1:1] | passed | 0.00056 seconds |
|
35
|
+
./spec/jiggler/config_spec.rb[1:1:2:1] | passed | 0.00026 seconds |
|
36
|
+
./spec/jiggler/config_spec.rb[1:1:2:2:1] | passed | 0.00046 seconds |
|
37
|
+
./spec/jiggler/config_spec.rb[1:1:2:3:1] | passed | 0.0004 seconds |
|
38
|
+
./spec/jiggler/config_spec.rb[1:1:3] | passed | 0.00029 seconds |
|
39
|
+
./spec/jiggler/config_spec.rb[1:1:4] | passed | 0.00026 seconds |
|
40
|
+
./spec/jiggler/core_spec.rb[1:1:1] | passed | 0.00057 seconds |
|
41
|
+
./spec/jiggler/job_spec.rb[1:1:1:1] | passed | 0.00009 seconds |
|
42
|
+
./spec/jiggler/job_spec.rb[1:1:2:1] | passed | 0.00009 seconds |
|
43
|
+
./spec/jiggler/job_spec.rb[1:2:1] | passed | 0.00056 seconds |
|
44
|
+
./spec/jiggler/job_spec.rb[1:3:1] | passed | 0.00106 seconds |
|
45
|
+
./spec/jiggler/job_spec.rb[1:4:1] | passed | 0.00049 seconds |
|
46
|
+
./spec/jiggler/job_spec.rb[1:4:2] | passed | 0.0005 seconds |
|
47
|
+
./spec/jiggler/job_spec.rb[1:5:1] | passed | 0.00054 seconds |
|
48
|
+
./spec/jiggler/launcher_spec.rb[1:1:1:1] | passed | 0.00018 seconds |
|
49
|
+
./spec/jiggler/launcher_spec.rb[1:1:2:1] | passed | 2.02 seconds |
|
50
|
+
./spec/jiggler/launcher_spec.rb[1:1:3:1] | passed | 2.03 seconds |
|
51
|
+
./spec/jiggler/launcher_spec.rb[1:1:4:1] | passed | 2.04 seconds |
|
52
|
+
./spec/jiggler/launcher_spec.rb[1:2:1:1] | passed | 0.00274 seconds |
|
53
|
+
./spec/jiggler/launcher_spec.rb[1:2:2:1] | passed | 2.1 seconds |
|
54
|
+
./spec/jiggler/launcher_spec.rb[1:2:3:1] | passed | 2.03 seconds |
|
55
|
+
./spec/jiggler/launcher_spec.rb[1:2:4:1] | passed | 2.03 seconds |
|
56
|
+
./spec/jiggler/manager_spec.rb[1:1:1] | passed | 0.00041 seconds |
|
57
|
+
./spec/jiggler/manager_spec.rb[1:1:2:1] | passed | 0.50391 seconds |
|
58
|
+
./spec/jiggler/manager_spec.rb[1:1:3:1] | passed | 1.51 seconds |
|
59
|
+
./spec/jiggler/manager_spec.rb[1:1:4:1] | passed | 3.51 seconds |
|
60
|
+
./spec/jiggler/manager_spec.rb[1:2:1] | passed | 0.00178 seconds |
|
61
|
+
./spec/jiggler/manager_spec.rb[1:2:2:1] | passed | 0.50337 seconds |
|
62
|
+
./spec/jiggler/manager_spec.rb[1:2:3:1] | passed | 2.02 seconds |
|
63
|
+
./spec/jiggler/manager_spec.rb[1:2:4:1] | passed | 2.5 seconds |
|
64
|
+
./spec/jiggler/redis_store_spec.rb[1:1:1] | passed | 0.00024 seconds |
|
65
|
+
./spec/jiggler/redis_store_spec.rb[1:1:2:1] | passed | 0.00017 seconds |
|
66
|
+
./spec/jiggler/retrier_spec.rb[1:1:1:1] | passed | 0.00332 seconds |
|
67
|
+
./spec/jiggler/retrier_spec.rb[1:1:1:2] | passed | 0.00339 seconds |
|
68
|
+
./spec/jiggler/retrier_spec.rb[1:1:2:1] | passed | 0.00062 seconds |
|
69
|
+
./spec/jiggler/scheduled/enqueuer_spec.rb[1:1:1] | passed | 0.00562 seconds |
|
70
|
+
./spec/jiggler/scheduled/enqueuer_spec.rb[1:1:2] | passed | 0.00476 seconds |
|
71
|
+
./spec/jiggler/scheduled/enqueuer_spec.rb[1:1:3] | passed | 0.00294 seconds |
|
72
|
+
./spec/jiggler/scheduled/enqueuer_spec.rb[1:2:1] | passed | 0.03586 seconds |
|
73
|
+
./spec/jiggler/scheduled/poller_spec.rb[1:1:1] | passed | 1.02 seconds |
|
74
|
+
./spec/jiggler/scheduled/poller_spec.rb[1:2:1] | passed | 1 second |
|
75
|
+
./spec/jiggler/scheduled/requeuer_spec.rb[1:1:1] | passed | 0.00526 seconds |
|
76
|
+
./spec/jiggler/scheduled/requeuer_spec.rb[1:2:1] | passed | 0.00699 seconds |
|
77
|
+
./spec/jiggler/scheduled/requeuer_spec.rb[1:3:1] | passed | 0.00995 seconds |
|
78
|
+
./spec/jiggler/stats/monitor_spec.rb[1:1:1] | passed | 1.03 seconds |
|
79
|
+
./spec/jiggler/stats/monitor_spec.rb[1:2:1] | passed | 1.08 seconds |
|
80
|
+
./spec/jiggler/summary_spec.rb[1:1:1] | passed | 0.01425 seconds |
|
81
|
+
./spec/jiggler/summary_spec.rb[1:1:2] | passed | 2.04 seconds |
|
82
|
+
./spec/jiggler/summary_spec.rb[1:1:3:1] | passed | 0.00683 seconds |
|
83
|
+
./spec/jiggler/summary_spec.rb[1:2:1] | passed | 1.01 seconds |
|
84
|
+
./spec/jiggler/summary_spec.rb[1:3:1] | passed | 1.01 seconds |
|
85
|
+
./spec/jiggler/summary_spec.rb[1:4:1] | passed | 0.00434 seconds |
|
86
|
+
./spec/jiggler/web_spec.rb[1:1:1] | passed | 0.00015 seconds |
|
87
|
+
./spec/jiggler/web_spec.rb[1:1:2] | passed | 0.00016 seconds |
|
88
|
+
./spec/jiggler/web_spec.rb[1:2:1] | passed | 0.00011 seconds |
|
89
|
+
./spec/jiggler/web_spec.rb[1:2:2] | passed | 0.0001 seconds |
|
90
|
+
./spec/jiggler/web_spec.rb[1:3:1] | passed | 0.00182 seconds |
|
91
|
+
./spec/jiggler/web_spec.rb[1:3:2] | passed | 0.00015 seconds |
|
92
|
+
./spec/jiggler/worker_spec.rb[1:1:1] | passed | 1 second |
|
93
|
+
./spec/jiggler/worker_spec.rb[1:1:2] | passed | 1.02 seconds |
|
94
|
+
./spec/jiggler/worker_spec.rb[1:1:3] | passed | 1.01 seconds |
|
95
|
+
./spec/jiggler/worker_spec.rb[1:2:1] | passed | 0.00751 seconds |
|
96
|
+
./spec/jiggler/worker_spec.rb[1:3:1:1] | passed | 0.50368 seconds |
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe Jiggler::AtLeastOnce::Acknowledger do
|
4
|
+
let(:config) do
|
5
|
+
Jiggler::Config.new(
|
6
|
+
concurrency: 1,
|
7
|
+
timeout: 1,
|
8
|
+
poller_enabled: false,
|
9
|
+
queues: ['fetcher_queue'],
|
10
|
+
mode: :at_least_once
|
11
|
+
)
|
12
|
+
end
|
13
|
+
let(:acknowledger) { Jiggler::AtLeastOnce::Acknowledger.new(config) }
|
14
|
+
let(:job) { Jiggler::AtLeastOnce::Fetcher::CurrentJob.new(args: 'args', reserve_queue: 'ack_queue') }
|
15
|
+
|
16
|
+
describe '#start' do
|
17
|
+
it 'acks the job' do
|
18
|
+
acknowledger.ack(job)
|
19
|
+
expect(job).to receive(:ack)
|
20
|
+
task = Async do
|
21
|
+
Async do
|
22
|
+
acknowledger.start
|
23
|
+
end
|
24
|
+
sleep(0.5)
|
25
|
+
acknowledger.terminate
|
26
|
+
end
|
27
|
+
task.wait
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe Jiggler::AtLeastOnce::Fetcher do
|
4
|
+
describe '#fetch' do
|
5
|
+
let(:config) do
|
6
|
+
Jiggler::Config.new(
|
7
|
+
concurrency: 1,
|
8
|
+
timeout: 1,
|
9
|
+
poller_enabled: false,
|
10
|
+
queues: ['fetcher_queue'],
|
11
|
+
mode: :at_least_once
|
12
|
+
)
|
13
|
+
end
|
14
|
+
let(:uuid) { "#{SecureRandom.hex(3)}-test" }
|
15
|
+
let(:reserve_queue) { 'jiggler:list:fetcher_queue:in_progress:' + uuid }
|
16
|
+
let(:collection) { Jiggler::Stats::Collection.new(uuid, uuid) }
|
17
|
+
let(:fetcher) { Jiggler::AtLeastOnce::Fetcher.new(config, collection) }
|
18
|
+
|
19
|
+
after { config.cleaner.prune_all }
|
20
|
+
|
21
|
+
it 'fetches current job' do
|
22
|
+
MyJob.with_options(queue: 'fetcher_queue').enqueue
|
23
|
+
job = nil
|
24
|
+
task = Async do
|
25
|
+
Async do
|
26
|
+
fetcher.start
|
27
|
+
end
|
28
|
+
sleep(0.5)
|
29
|
+
job = fetcher.fetch
|
30
|
+
fetcher.suspend
|
31
|
+
end
|
32
|
+
task.wait
|
33
|
+
args = Oj.load(job.args)
|
34
|
+
|
35
|
+
expect(job.queue).to eq('jiggler:list:fetcher_queue')
|
36
|
+
expect(job.reserve_queue).to eq(reserve_queue)
|
37
|
+
|
38
|
+
expect(args['name']).to eq('MyJob')
|
39
|
+
expect(args['jid']).to be_a(String)
|
40
|
+
expect(args['retries']).to be 0
|
41
|
+
expect(args['args']).to eq([])
|
42
|
+
config.with_sync_redis do |conn|
|
43
|
+
expect(conn.call('LLEN', reserve_queue)).to eq(1)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'ack removes the job from reserve queue' do
|
48
|
+
MyJob.with_options(queue: 'fetcher_queue').enqueue
|
49
|
+
job = nil
|
50
|
+
task = Async do
|
51
|
+
Async do
|
52
|
+
fetcher.start
|
53
|
+
end
|
54
|
+
sleep(0.5)
|
55
|
+
job = fetcher.fetch
|
56
|
+
fetcher.suspend
|
57
|
+
end
|
58
|
+
task.wait
|
59
|
+
|
60
|
+
config.with_sync_redis do |conn|
|
61
|
+
expect(conn.call('LLEN', reserve_queue)).to eq(1)
|
62
|
+
end
|
63
|
+
job.ack
|
64
|
+
config.with_sync_redis do |conn|
|
65
|
+
expect(conn.call('LLEN', reserve_queue)).to eq(0)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe Jiggler::AtMostOnce::Fetcher do
|
4
|
+
describe '#fetch' do
|
5
|
+
let(:config) do
|
6
|
+
Jiggler::Config.new(
|
7
|
+
concurrency: 1,
|
8
|
+
timeout: 1,
|
9
|
+
poller_enabled: false,
|
10
|
+
queues: ['fetcher_queue'],
|
11
|
+
mode: :at_most_once
|
12
|
+
)
|
13
|
+
end
|
14
|
+
let(:uuid) { "#{SecureRandom.hex(3)}-test" }
|
15
|
+
let(:collection) { Jiggler::Stats::Collection.new(uuid, uuid) }
|
16
|
+
let(:fetcher) { Jiggler::AtMostOnce::Fetcher.new(config, collection) }
|
17
|
+
|
18
|
+
after { config.cleaner.prune_all }
|
19
|
+
|
20
|
+
it 'fetches current job' do
|
21
|
+
MyJob.with_options(queue: 'fetcher_queue').enqueue
|
22
|
+
|
23
|
+
job = Sync { fetcher.fetch }
|
24
|
+
args = Oj.load(job.args)
|
25
|
+
|
26
|
+
expect(job.queue).to eq('jiggler:list:fetcher_queue')
|
27
|
+
expect(args['name']).to eq('MyJob')
|
28
|
+
expect(args['jid']).to be_a(String)
|
29
|
+
expect(args['retries']).to be 0
|
30
|
+
expect(args['args']).to eq([])
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -9,7 +9,6 @@ RSpec.describe Jiggler::Cleaner do
|
|
9
9
|
)
|
10
10
|
end
|
11
11
|
let(:cleaner) { described_class.new(config) }
|
12
|
-
after(:all) { Jiggler.config.cleaner.prune_all }
|
13
12
|
|
14
13
|
describe '#prune_failures_counter' do
|
15
14
|
it 'prunes the failures counter' do
|
@@ -138,6 +137,16 @@ RSpec.describe Jiggler::Cleaner do
|
|
138
137
|
expect(conn.call('LRANGE', 'jiggler:list:cleaner-test-0', 0, -1)).to be_empty
|
139
138
|
end
|
140
139
|
end
|
140
|
+
|
141
|
+
it 'prunes in_progress queues' do
|
142
|
+
config.client_redis_pool.acquire do |conn|
|
143
|
+
conn.call('LPUSH', 'jiggler:list:cleaner-test-0:in-progress:1', '{}')
|
144
|
+
end
|
145
|
+
cleaner.prune_all_queues
|
146
|
+
config.client_redis_pool.acquire do |conn|
|
147
|
+
expect(conn.call('LRANGE', 'jiggler:list:cleaner-test-0:in-progress:1', 0, -1)).to be_empty
|
148
|
+
end
|
149
|
+
end
|
141
150
|
end
|
142
151
|
|
143
152
|
describe '#prune_queue' do
|
@@ -151,6 +160,7 @@ RSpec.describe Jiggler::Cleaner do
|
|
151
160
|
expect(conn.call('LRANGE', 'jiggler:list:cleaner-test-1', 0, -1)).to be_empty
|
152
161
|
expect(conn.call('LRANGE', 'jiggler:list:cleaner-test-2', 0, -1)).to eq(['{}'])
|
153
162
|
end
|
163
|
+
config.cleaner.prune_all
|
154
164
|
end
|
155
165
|
end
|
156
166
|
|
data/spec/jiggler/cli_spec.rb
CHANGED
@@ -20,12 +20,13 @@ RSpec.describe Jiggler::CLI do
|
|
20
20
|
before { cli.instance_variable_set(:@config, Jiggler::Config.new(verbose: true)) }
|
21
21
|
after { cli.instance_variable_set(:@config, Jiggler::Config.new) }
|
22
22
|
let(:path) { './spec/fixtures/config/jiggler.yml' }
|
23
|
+
let(:jobs_file) { './spec/fixtures/jobs' }
|
23
24
|
|
24
25
|
it 'fetches config file' do
|
25
26
|
cli.parse_and_init(['-C', path])
|
26
27
|
expect(cli.config[:config_file]).to eq(path)
|
27
28
|
expect(cli.config[:concurrency]).to be 1
|
28
|
-
expect(cli.config[:queues]).to eq(['users', 'blep'])
|
29
|
+
expect(cli.config[:queues]).to eq([['users', 0], ['blep', 3]])
|
29
30
|
end
|
30
31
|
|
31
32
|
it 'fetches concurrency' do
|
@@ -39,8 +40,8 @@ RSpec.describe Jiggler::CLI do
|
|
39
40
|
end
|
40
41
|
|
41
42
|
it 'fetches require' do
|
42
|
-
cli.parse_and_init(['-r',
|
43
|
-
expect(cli.config[:require]).to eq(
|
43
|
+
cli.parse_and_init(['-r', jobs_file])
|
44
|
+
expect(cli.config[:require]).to eq(jobs_file)
|
44
45
|
end
|
45
46
|
|
46
47
|
it 'fetches timeout' do
|
@@ -77,10 +78,7 @@ RSpec.describe Jiggler::CLI do
|
|
77
78
|
it { expect { cli.parse_and_init(['-c', 'invalid']) }.to raise_error(ArgumentError) }
|
78
79
|
it { expect { cli.parse_and_init(['-c', '-1']) }.to raise_error(ArgumentError) }
|
79
80
|
it { expect { cli.parse_and_init(['-t', 'yo']) }.to raise_error(ArgumentError) }
|
80
|
-
it
|
81
|
-
cli.parse_and_init(['-r', 'test.rb'])
|
82
|
-
expect { cli.send(:load_app) }.to raise_error(SystemExit)
|
83
|
-
end
|
81
|
+
it { expect { cli.parse_and_init(['-r', 'test.rb']) }.to raise_error(SystemExit) }
|
84
82
|
it { expect { cli.parse_and_init(['-q', 'in:va:lid']) }.to raise_error(ArgumentError) }
|
85
83
|
end
|
86
84
|
end
|
data/spec/jiggler/config_spec.rb
CHANGED
@@ -31,14 +31,56 @@ RSpec.describe Jiggler::Config do
|
|
31
31
|
expect(config[:poll_interval]).to be 5
|
32
32
|
expect(config[:client_async]).to be false
|
33
33
|
end
|
34
|
+
|
35
|
+
context 'for internal lists' do
|
36
|
+
it 'generates prefixes' do
|
37
|
+
expect(config.queues_data).to eq ({
|
38
|
+
'test' => {
|
39
|
+
priority: 0,
|
40
|
+
list: 'jiggler:list:test'
|
41
|
+
},
|
42
|
+
'test2' => {
|
43
|
+
priority: 0,
|
44
|
+
list: 'jiggler:list:test2'
|
45
|
+
}
|
46
|
+
})
|
47
|
+
expect(config.sorted_lists).to eq ['jiggler:list:test', 'jiggler:list:test2']
|
48
|
+
end
|
34
49
|
|
35
|
-
|
36
|
-
|
50
|
+
context 'when queues are not specified' do
|
51
|
+
let(:config) { Jiggler::Config.new }
|
52
|
+
it 'sets default queue' do
|
53
|
+
expect(config.queues_data).to eq ({
|
54
|
+
'default' => {
|
55
|
+
priority: 0,
|
56
|
+
list: 'jiggler:list:default'
|
57
|
+
}
|
58
|
+
})
|
59
|
+
expect(config.sorted_lists).to eq ['jiggler:list:default']
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'when quesues are specified with priorities' do
|
64
|
+
let(:config) { Jiggler::Config.new(queues: [['test',1],['test2',4]]) }
|
65
|
+
it 'respects priority' do
|
66
|
+
expect(config.queues_data).to eq ({
|
67
|
+
'test' => {
|
68
|
+
priority: 1,
|
69
|
+
list: 'jiggler:list:test'
|
70
|
+
},
|
71
|
+
'test2' => {
|
72
|
+
priority: 4,
|
73
|
+
list: 'jiggler:list:test2'
|
74
|
+
}
|
75
|
+
})
|
76
|
+
expect(config.sorted_lists).to eq ['jiggler:list:test2', 'jiggler:list:test']
|
77
|
+
end
|
78
|
+
end
|
37
79
|
end
|
38
80
|
|
39
81
|
it 'gets redis options for server' do
|
40
82
|
expect(config.redis_options).to eq(
|
41
|
-
concurrency:
|
83
|
+
concurrency: 8,
|
42
84
|
async: true,
|
43
85
|
redis_url: 'redis://localhost:6379'
|
44
86
|
)
|
data/spec/jiggler/core_spec.rb
CHANGED
@@ -29,6 +29,8 @@ RSpec.describe 'Core' do
|
|
29
29
|
expect(Jiggler.config[:queues]).to eq %w[foo bar]
|
30
30
|
expect(Jiggler.config[:require]).to eq 'foo'
|
31
31
|
expect(Jiggler.config[:environment]).to eq 'bar'
|
32
|
+
# reset config
|
33
|
+
Jiggler.instance_variable_set(:@config, nil)
|
32
34
|
end
|
33
35
|
end
|
34
36
|
end
|
data/spec/jiggler/job_spec.rb
CHANGED
@@ -17,10 +17,6 @@ RSpec.describe Jiggler::Job do
|
|
17
17
|
context 'on default' do
|
18
18
|
let(:job) { MyJob.new }
|
19
19
|
|
20
|
-
before do
|
21
|
-
MyJob.job_options # reset to default
|
22
|
-
end
|
23
|
-
|
24
20
|
it 'has correct attrs' do
|
25
21
|
expect(job.class.queue).to eq 'default'
|
26
22
|
expect(job.class.retries).to be 0
|
@@ -36,6 +32,10 @@ RSpec.describe Jiggler::Job do
|
|
36
32
|
MyJob.job_options(queue: 'custom', retries: 3, retry_queue: 'custom_retry')
|
37
33
|
end
|
38
34
|
|
35
|
+
after do
|
36
|
+
MyJob.job_options # reset to default
|
37
|
+
end
|
38
|
+
|
39
39
|
it 'has correct attrs' do
|
40
40
|
expect(job.class.queue).to eq 'custom'
|
41
41
|
expect(job.class.retries).to be 3
|
@@ -1,66 +1,72 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
RSpec.describe Jiggler::Launcher do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
describe '#start' do
|
20
|
-
it 'starts the launcher' do
|
21
|
-
task = Async do
|
22
|
-
Async do
|
23
|
-
expect(launcher.send(:manager)).to receive(:start).and_call_original
|
24
|
-
expect(launcher.send(:poller)).to receive(:start).and_call_original
|
25
|
-
expect(launcher.send(:monitor)).to receive(:start).and_call_original
|
26
|
-
launcher.start
|
4
|
+
[:at_most_once, :at_least_once].each do |mode|
|
5
|
+
context "with #{mode} mode" do
|
6
|
+
let(:config) do
|
7
|
+
Jiggler::Config.new(
|
8
|
+
concurrency: 1,
|
9
|
+
timeout: 1,
|
10
|
+
server_mode: true,
|
11
|
+
mode: mode
|
12
|
+
)
|
13
|
+
end
|
14
|
+
let(:launcher) { described_class.new(config) }
|
15
|
+
|
16
|
+
describe '#initialize' do
|
17
|
+
it 'sets correct attrs' do
|
18
|
+
expect(launcher.config).to eq config
|
27
19
|
end
|
28
|
-
sleep(1)
|
29
|
-
launcher.stop
|
30
20
|
end
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
21
|
+
|
22
|
+
describe '#start' do
|
23
|
+
it 'starts the launcher' do
|
24
|
+
task = Async do
|
25
|
+
Async do
|
26
|
+
expect(launcher.send(:manager)).to receive(:start).and_call_original
|
27
|
+
expect(launcher.send(:poller)).to receive(:start).and_call_original
|
28
|
+
expect(launcher.send(:monitor)).to receive(:start).and_call_original
|
29
|
+
launcher.start
|
30
|
+
end
|
31
|
+
sleep(1)
|
32
|
+
launcher.stop
|
33
|
+
end
|
34
|
+
task.wait
|
43
35
|
end
|
44
|
-
sleep(1)
|
45
|
-
launcher.suspend
|
46
36
|
end
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
37
|
+
|
38
|
+
describe '#suspend' do
|
39
|
+
it 'suspends the launcher' do
|
40
|
+
task = Async do
|
41
|
+
Async do
|
42
|
+
expect(launcher.send(:manager)).to receive(:suspend).twice.and_call_original
|
43
|
+
expect(launcher.send(:poller)).to receive(:terminate).and_call_original
|
44
|
+
expect(launcher.send(:monitor)).to receive(:terminate).and_call_original
|
45
|
+
launcher.start
|
46
|
+
end
|
47
|
+
sleep(1)
|
48
|
+
launcher.suspend
|
49
|
+
launcher.stop
|
50
|
+
end
|
51
|
+
task.wait
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe '#stop' do
|
56
|
+
it 'stops the launcher' do
|
57
|
+
task = Async do
|
58
|
+
Async do
|
59
|
+
expect(launcher.send(:manager)).to receive(:terminate).and_call_original
|
60
|
+
expect(launcher.send(:poller)).to receive(:terminate).and_call_original
|
61
|
+
expect(launcher.send(:monitor)).to receive(:terminate).and_call_original
|
62
|
+
launcher.start
|
63
|
+
end
|
64
|
+
sleep(1)
|
65
|
+
launcher.stop
|
66
|
+
end
|
67
|
+
task.wait
|
59
68
|
end
|
60
|
-
sleep(1)
|
61
|
-
launcher.stop
|
62
69
|
end
|
63
|
-
task.wait
|
64
70
|
end
|
65
71
|
end
|
66
72
|
end
|