perfectqueue 0.8.38 → 0.8.39

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ Yzg4Njg1ZTRkYTgzMmRhZTJiZjhjODAyYzhiMmJjMmY3MTVkODIxMA==
5
+ data.tar.gz: !binary |-
6
+ MmRiYzNmYjVjZmQ3MTljNTE2MDIwNGRmN2FjMmU0OTUyYzAzMTgzZg==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ MDk4ODEzNWI1NGU1ZTUxMjgyYTQwYzRkY2UxNzZmYzlkMDc0MTlkMDc3ZTM4
10
+ MDM0MGJiMmJmN2Y3MmY4NDg5MjNhZDc0ZTQ3ZDY0YmZlMTA2MTI2ZDc0YTM3
11
+ YTUzMzM4N2Y4YzllOTU2NjVkNDBiYjAxMzlkMGUxNDRlMjI2ODk=
12
+ data.tar.gz: !binary |-
13
+ YzZiZDViYjg2MjY3NjdjOTVjOTY4YTMwZTYyOWE0ZDI0YWYxM2M2MThjYTU3
14
+ NGI5NGIwOWY5ZDQyZGVlNzczNGQ0YzhhZWY3NjA3NTExYzFlNTI1NzY3OWE5
15
+ M2I1ZTBkOTI3NGUwNmE5MGJmMTM4MzJhYjI4M2NjNWFhNjgzNjM=
@@ -221,50 +221,43 @@ SQL
221
221
 
222
222
  tasks = []
223
223
 
224
- connect {
225
- if @cleanup_interval_count <= 0
224
+ if @cleanup_interval_count <= 0
225
+ connect_locked {
226
226
  @db["DELETE FROM `#{@table}` WHERE timeout <= ? AND created_at IS NULL", now].delete
227
227
  @cleanup_interval_count = @cleanup_interval
228
- end
229
-
230
- @db.transaction do
231
- if @table_lock
232
- @db[@table_lock].update
233
- end
234
-
235
- tasks = []
236
- @db.fetch(@sql, now, now, max_acquire) {|row|
237
- attributes = create_attributes(nil, row)
238
- task_token = Token.new(row[:id])
239
- task = AcquiredTask.new(@client, row[:id], attributes, task_token)
240
- tasks.push task
228
+ }
229
+ end
241
230
 
242
- if @prefetch_break_types.include?(attributes[:type])
243
- break
244
- end
245
- }
231
+ connect_locked {
232
+ tasks = []
233
+ @db.fetch(@sql, now, now, max_acquire) {|row|
234
+ attributes = create_attributes(nil, row)
235
+ task_token = Token.new(row[:id])
236
+ task = AcquiredTask.new(@client, row[:id], attributes, task_token)
237
+ tasks.push task
246
238
 
247
- if tasks.empty?
248
- return nil
239
+ if @prefetch_break_types.include?(attributes[:type])
240
+ break
249
241
  end
242
+ }
250
243
 
251
- sql = "UPDATE `#{@table}` SET timeout=? WHERE id IN ("
252
- params = [sql, next_timeout]
253
- tasks.each {|t| params << t.key }
254
- sql << (1..tasks.size).map { '?' }.join(',')
255
- sql << ") AND created_at IS NOT NULL"
256
-
257
- n = @db[*params].update
258
- if n != tasks.size
259
- # TODO table lock doesn't work. error?
260
- end
244
+ if tasks.empty?
245
+ return nil
246
+ end
261
247
 
262
- @cleanup_interval_count -= 1
248
+ sql = "UPDATE `#{@table}` SET timeout=? WHERE id IN ("
249
+ params = [sql, next_timeout]
250
+ tasks.each {|t| params << t.key }
251
+ sql << (1..tasks.size).map { '?' }.join(',')
252
+ sql << ") AND created_at IS NOT NULL"
263
253
 
264
- if @use_connection_pooling && @table_unlock
265
- @db[@table_unlock].update
266
- end
254
+ n = @db[*params].update
255
+ if n != tasks.size
256
+ # TODO table lock doesn't work. error?
267
257
  end
258
+
259
+ @cleanup_interval_count -= 1
260
+
268
261
  return tasks
269
262
  }
270
263
  end
@@ -341,6 +334,28 @@ SQL
341
334
  end
342
335
 
343
336
  protected
337
+ def connect_locked(&block)
338
+ connect {
339
+ locked = false
340
+
341
+ begin
342
+ @db.transaction do
343
+ if @table_lock
344
+ @db[@table_lock].update
345
+ locked = true
346
+ end
347
+
348
+ return block.call
349
+ end
350
+
351
+ ensure
352
+ if @use_connection_pooling && locked
353
+ @db[@table_unlock].update
354
+ end
355
+ end
356
+ }
357
+ end
358
+
344
359
  def connect(&block)
345
360
  now = Time.now.to_i
346
361
  @mutex.synchronize do
@@ -1,3 +1,3 @@
1
1
  module PerfectQueue
2
- VERSION = "0.8.38"
2
+ VERSION = "0.8.39"
3
3
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: perfectqueue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.38
5
- prerelease:
4
+ version: 0.8.39
6
5
  platform: ruby
7
6
  authors:
8
7
  - Sadayuki Furuhashi
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-05-29 00:00:00.000000000 Z
11
+ date: 2014-09-05 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: sequel
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
@@ -62,7 +55,6 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: simplecov
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ~>
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ~>
76
67
  - !ruby/object:Gem::Version
@@ -78,7 +69,6 @@ dependencies:
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: sqlite3
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - ~>
84
74
  - !ruby/object:Gem::Version
@@ -86,7 +76,6 @@ dependencies:
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
80
  - - ~>
92
81
  - !ruby/object:Gem::Version
@@ -145,33 +134,26 @@ files:
145
134
  homepage: https://github.com/treasure-data/perfectqueue
146
135
  licenses:
147
136
  - Apache 2.0
137
+ metadata: {}
148
138
  post_install_message:
149
139
  rdoc_options: []
150
140
  require_paths:
151
141
  - lib
152
142
  required_ruby_version: !ruby/object:Gem::Requirement
153
- none: false
154
143
  requirements:
155
144
  - - ! '>='
156
145
  - !ruby/object:Gem::Version
157
146
  version: '0'
158
- segments:
159
- - 0
160
- hash: -3420430891342513756
161
147
  required_rubygems_version: !ruby/object:Gem::Requirement
162
- none: false
163
148
  requirements:
164
149
  - - ! '>='
165
150
  - !ruby/object:Gem::Version
166
151
  version: '0'
167
- segments:
168
- - 0
169
- hash: -3420430891342513756
170
152
  requirements: []
171
153
  rubyforge_project:
172
- rubygems_version: 1.8.24
154
+ rubygems_version: 2.2.2
173
155
  signing_key:
174
- specification_version: 3
156
+ specification_version: 4
175
157
  summary: Highly available distributed cron built on RDBMS
176
158
  test_files:
177
159
  - spec/queue_spec.rb