workhorse 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: da01b73fc0a4be6598393d2c4b0fbbd917c83233
4
- data.tar.gz: 637033b135c6f8fb1c4ad178c05954ba3d495a22
3
+ metadata.gz: 988bad51b4a7ea3316129ee6119d4a4ad5412cb5
4
+ data.tar.gz: 188a0a4f98ec7ae2a144de341764547ccec7d76a
5
5
  SHA512:
6
- metadata.gz: cb5a848ac259293e090c931d3faed8baa23a96087a5724802855340f60a85256e0da57ca30c4b2b600694330fa35d760f2320cd41a6ed3f7a2c88b253f50c8ed
7
- data.tar.gz: 8d20351d7fcd8bde6f05eb186efd3b9f64e488d1e3da91b62b489e2564b6df7a2a23983cdb74243c1fc086ec97d504088a2ee5b430b661feb8c2c08065205651
6
+ metadata.gz: 0f04fd7e1a186d9ffd196a803e2e251c71812e922e4bd1f5b7f8ceb21b2d816c8b031b4c031bde83de5dc210df362d88e2af5593ea94c6f8b9531d42b3e9cd0b
7
+ data.tar.gz: a1253139820afa9e4035b85c61ed663e8f8caf6eefa3aec2c040ad3e36e5859d195c3bed6133d46c07fb9751af766e78db1252e6f6fb4857095429dfffefc100
data/.rubocop.yml CHANGED
@@ -82,3 +82,6 @@ Style/ClassAndModuleChildren:
82
82
 
83
83
  Style/NumericPredicate:
84
84
  Enabled: false
85
+
86
+ Layout/IndentHeredoc:
87
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Workhorse Change log
2
2
 
3
+ ## 0.3.1 – 2018-02-22
4
+
5
+ * Adds support for Ruby >= 2.0.0 / Rails >= 3.2
6
+
3
7
  ## 0.3.0 – 2017-12-27
4
8
 
5
9
  ### Added
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2017 Sitrox
3
+ Copyright (c) 2018 Sitrox
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -33,6 +33,8 @@ What it does not do:
33
33
 
34
34
  ### Requirements
35
35
 
36
+ * Ruby `>= 2.0.0`
37
+ * Rails `>= 3.2`
36
38
  * A database and table handler that properly supports row-level locking (such as
37
39
  MySQL with InnoDB, PostgreSQL, or Oracle).
38
40
  * If you are planning on using the daemons handler:
@@ -148,26 +150,26 @@ achieving regular execution:
148
150
 
149
151
  ```ruby
150
152
  #!/usr/bin/env ruby
151
-
153
+
152
154
  require './config/environment'
153
-
155
+
154
156
  Workhorse::Daemon::ShellHandler.run do
155
157
  worker = Workhorse::Worker.new(pool_size: 5, polling_interval: 10, logger: Rails.logger)
156
158
  scheduler = Rufus::Scheduler.new
157
-
159
+
158
160
  worker.start
159
-
161
+
160
162
  scheduler.cron '0/10 * * * *' do
161
163
  Workhorse.enqueue Workhorse::Jobs::CleanupSucceededJobs.new
162
164
  end
163
-
165
+
164
166
  Signal.trap 'TERM' do
165
167
  scheduler.shutdown
166
168
  Thread.new do
167
169
  worker.shutdown
168
170
  end.join
169
171
  end
170
-
172
+
171
173
  scheduler.join
172
174
  worker.wait
173
175
  end
@@ -248,4 +250,4 @@ Please consult the [FAQ](FAQ.md).
248
250
 
249
251
  ## Copyright
250
252
 
251
- Copyright © 2017 Sitrox. See `LICENSE` for further details.
253
+ Copyright © 2018 Sitrox. See `LICENSE` for further details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.3.1
@@ -1,9 +1,9 @@
1
- class CreateTableJobs < ActiveRecord::Migration[4.2]
1
+ class CreateTableJobs < ActiveRecord::Migration
2
2
  def change
3
3
  create_table :jobs, force: true do |t|
4
4
  t.string :state, null: false, default: 'waiting'
5
5
  t.string :queue, null: true
6
- t.text :handler, null: false, limit: 4_294_967_295
6
+ t.blob :handler, null: false, limit: 4_294_967_295
7
7
 
8
8
  t.string :locked_by
9
9
  t.datetime :locked_at
data/lib/workhorse.rb CHANGED
@@ -5,6 +5,9 @@ require 'active_record'
5
5
  require 'workhorse/enqueuer'
6
6
 
7
7
  module Workhorse
8
+ # Check if the available Arel version is greater or equal than 7.0.0
9
+ AREL_GTE_7 = Gem::Version.new(Arel::VERSION) >= Gem::Version.new('7.0.0')
10
+
8
11
  extend Workhorse::Enqueuer
9
12
 
10
13
  @set_up = false
@@ -16,12 +19,12 @@ module Workhorse
16
19
  || fail('No performer is associated with the current thread. This method must always be called inside of a job.')
17
20
  end
18
21
 
19
- cattr_accessor :tx_callback
22
+ mattr_accessor :tx_callback
20
23
  self.tx_callback = proc do |&block|
21
24
  ActiveRecord::Base.transaction(&block)
22
25
  end
23
26
 
24
- cattr_accessor :perform_jobs_in_tx
27
+ mattr_accessor :perform_jobs_in_tx
25
28
  self.perform_jobs_in_tx = true
26
29
 
27
30
  def self.setup
@@ -41,36 +41,36 @@ module Workhorse
41
41
  end
42
42
 
43
43
  def self.usage
44
- warn <<~USAGE
45
- Usage: #{$PROGRAM_NAME} start|stop|status|watch|restart|usage
44
+ warn <<USAGE
45
+ Usage: #{$PROGRAM_NAME} start|stop|status|watch|restart|usage
46
46
 
47
- Options:
47
+ Options:
48
48
 
49
- start
50
- Start the daemon
49
+ start
50
+ Start the daemon
51
51
 
52
- stop
53
- Stop the daemon
52
+ stop
53
+ Stop the daemon
54
54
 
55
- status
56
- Query the status of the daemon. Exit with status 1 if any worker is
57
- not running.
55
+ status
56
+ Query the status of the daemon. Exit with status 1 if any worker is
57
+ not running.
58
58
 
59
- watch
60
- Checks the status (running or stopped) and whether it is as
61
- expected. Starts the daemon if it is expected to run but is not.
59
+ watch
60
+ Checks the status (running or stopped) and whether it is as
61
+ expected. Starts the daemon if it is expected to run but is not.
62
62
 
63
- restart
64
- Shortcut for consecutive 'stop' and 'start'.
63
+ restart
64
+ Shortcut for consecutive 'stop' and 'start'.
65
65
 
66
- usage
67
- Show this message
66
+ usage
67
+ Show this message
68
68
 
69
- Exit status:
70
- 0 if OK,
71
- 1 if at least one worker has an unexpected status,
72
- 99 on all other errors.
73
- USAGE
69
+ Exit status:
70
+ 0 if OK,
71
+ 1 if at least one worker has an unexpected status,
72
+ 99 on all other errors.
73
+ USAGE
74
74
  end
75
75
  end
76
76
  end
@@ -122,7 +122,11 @@ module Workhorse
122
122
  union_query_sql += ') subselect'
123
123
 
124
124
  # Create a new SelectManager to work with, using the UNION as data source
125
- select = Arel::SelectManager.new(Arel.sql(union_query_sql))
125
+ if AREL_GTE_7
126
+ select = Arel::SelectManager.new(Arel.sql(union_query_sql))
127
+ else
128
+ select = Arel::SelectManager.new(ActiveRecord::Base, Arel.sql(union_query_sql))
129
+ end
126
130
  select = order(select.project(Arel.star))
127
131
 
128
132
  # Limit number of records
@@ -186,7 +190,8 @@ module Workhorse
186
190
  # Restrict queues that are currently in progress
187
191
  bad_queries_select = table.project(table[:queue])
188
192
  .where(table[:state].in(%i[locked running]))
189
- .distinct
193
+ # .distinct is not chainable in older Arel versions
194
+ bad_queries_select.distinct
190
195
  select = select.where(table[:queue].not_in(bad_queries_select))
191
196
 
192
197
  # Restrict queues to valid ones as indicated by the options given to the
data/workhorse.gemspec CHANGED
@@ -1,16 +1,16 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: workhorse 0.3.0 ruby lib
2
+ # stub: workhorse 0.3.1 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "workhorse".freeze
6
- s.version = "0.3.0"
6
+ s.version = "0.3.1"
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib".freeze]
10
10
  s.authors = ["Sitrox".freeze]
11
- s.date = "2017-12-27"
11
+ s.date = "2018-02-22"
12
12
  s.files = [".gitignore".freeze, ".releaser_config".freeze, ".rubocop.yml".freeze, ".travis.yml".freeze, "CHANGELOG.md".freeze, "FAQ.md".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "RUBY_VERSION".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/rubocop".freeze, "lib/generators/workhorse/install_generator.rb".freeze, "lib/generators/workhorse/templates/bin/workhorse.rb".freeze, "lib/generators/workhorse/templates/config/initializers/workhorse.rb".freeze, "lib/generators/workhorse/templates/create_table_jobs.rb".freeze, "lib/workhorse.rb".freeze, "lib/workhorse/daemon.rb".freeze, "lib/workhorse/daemon/shell_handler.rb".freeze, "lib/workhorse/db_job.rb".freeze, "lib/workhorse/enqueuer.rb".freeze, "lib/workhorse/jobs/cleanup_succeeded_jobs.rb".freeze, "lib/workhorse/jobs/run_rails_op.rb".freeze, "lib/workhorse/performer.rb".freeze, "lib/workhorse/poller.rb".freeze, "lib/workhorse/pool.rb".freeze, "lib/workhorse/worker.rb".freeze, "test/lib/db_schema.rb".freeze, "test/lib/jobs.rb".freeze, "test/lib/test_helper.rb".freeze, "test/workhorse/enqueuer_test.rb".freeze, "test/workhorse/performer_test.rb".freeze, "test/workhorse/poller_test.rb".freeze, "test/workhorse/pool_test.rb".freeze, "test/workhorse/worker_test.rb".freeze, "workhorse.gemspec".freeze]
13
- s.rubygems_version = "2.7.2".freeze
13
+ s.rubygems_version = "2.6.6".freeze
14
14
  s.summary = "Multi-threaded job backend with database queuing for ruby.".freeze
15
15
  s.test_files = ["test/lib/db_schema.rb".freeze, "test/lib/jobs.rb".freeze, "test/lib/test_helper.rb".freeze, "test/workhorse/enqueuer_test.rb".freeze, "test/workhorse/performer_test.rb".freeze, "test/workhorse/poller_test.rb".freeze, "test/workhorse/pool_test.rb".freeze, "test/workhorse/worker_test.rb".freeze]
16
16
 
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: workhorse
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sitrox
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-27 00:00:00.000000000 Z
11
+ date: 2018-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.3'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
@@ -56,98 +56,98 @@ dependencies:
56
56
  name: minitest
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: mysql2
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ~>
74
74
  - !ruby/object:Gem::Version
75
75
  version: 0.3.13
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ~>
81
81
  - !ruby/object:Gem::Version
82
82
  version: 0.3.13
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: benchmark-ips
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - '>='
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">="
94
+ - - '>='
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: activesupport
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ">="
101
+ - - '>='
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ">="
108
+ - - '>='
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: activerecord
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ">="
115
+ - - '>='
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ">="
122
+ - - '>='
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: schemacop
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - "~>"
129
+ - - ~>
130
130
  - !ruby/object:Gem::Version
131
131
  version: '2.0'
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - "~>"
136
+ - - ~>
137
137
  - !ruby/object:Gem::Version
138
138
  version: '2.0'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: concurrent-ruby
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - ">="
143
+ - - '>='
144
144
  - !ruby/object:Gem::Version
145
145
  version: '0'
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - ">="
150
+ - - '>='
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  description:
@@ -156,10 +156,10 @@ executables: []
156
156
  extensions: []
157
157
  extra_rdoc_files: []
158
158
  files:
159
- - ".gitignore"
160
- - ".releaser_config"
161
- - ".rubocop.yml"
162
- - ".travis.yml"
159
+ - .gitignore
160
+ - .releaser_config
161
+ - .rubocop.yml
162
+ - .travis.yml
163
163
  - CHANGELOG.md
164
164
  - FAQ.md
165
165
  - Gemfile
@@ -202,17 +202,17 @@ require_paths:
202
202
  - lib
203
203
  required_ruby_version: !ruby/object:Gem::Requirement
204
204
  requirements:
205
- - - ">="
205
+ - - '>='
206
206
  - !ruby/object:Gem::Version
207
207
  version: '0'
208
208
  required_rubygems_version: !ruby/object:Gem::Requirement
209
209
  requirements:
210
- - - ">="
210
+ - - '>='
211
211
  - !ruby/object:Gem::Version
212
212
  version: '0'
213
213
  requirements: []
214
214
  rubyforge_project:
215
- rubygems_version: 2.6.14
215
+ rubygems_version: 2.0.14
216
216
  signing_key:
217
217
  specification_version: 4
218
218
  summary: Multi-threaded job backend with database queuing for ruby.