perfectqueue 0.8.46 → 0.8.47

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: e091df346ddc80d849184494788572dbbe07919e
4
- data.tar.gz: 40533e8a9adf12acc69d85273675ba9043743c8b
3
+ metadata.gz: 68a42f45b43150785b9c0a0ad1e6757da6b8104f
4
+ data.tar.gz: 64b1df2f881992eaf48f1811b323966c35cdfccd
5
5
  SHA512:
6
- metadata.gz: 253f1165eebc079a3ad181add6e6a516bb3457000de54172470a62a8ac26335208a1bbb135df77b1a8ad28ad82103426d8321f70954f357a5b94c410b6e7e15c
7
- data.tar.gz: d37142ec6e8927b4708bb8f223d61ac3a5618ebccfae7b70239612883e0a1739c69c4910c2cc4390de12756268cad248ea34cdb2300a213e6bf348b87cf3a33c
6
+ metadata.gz: aa3effbb36e362da777ef15ab8aba0feb76471d150e7ae887cf299d90cf48d785f90b3f976907ad0e0fe6256ea7dd4bfa5198676e931a581778aae5c3dcfb677
7
+ data.tar.gz: 4235badb3ba5fdc97d570e14fed8c3d405c7b9d5fe98ee7962b7df3bc2bfef730a275aef241418d61fdc1d9a02e0b8401a8e5979a53af21c59428bd2be5ab5d3
data/.travis.yml CHANGED
@@ -12,5 +12,9 @@ before_script:
12
12
 
13
13
  sudo: false
14
14
 
15
+ matrix:
16
+ allow_failures:
17
+ - rvm: ruby-head
18
+
15
19
  notifications:
16
20
  webhooks: http://td-beda.herokuapp.com/travisci_callback
data/ChangeLog CHANGED
@@ -1,3 +1,8 @@
1
+ == 2016-04-15 version 0.8.47
2
+
3
+ * require libraries before fork to help CoW
4
+ * add FORCE INDEX to acquiring UPDATE query to avoid wrong index
5
+
1
6
  == 2016-03-23 version 0.8.46
2
7
 
3
8
  * Introduce new timeout model
data/lib/perfectqueue.rb CHANGED
@@ -16,45 +16,39 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
- module PerfectQueue
20
- require 'json'
21
- require 'thread' # Mutex, CoditionVariable
19
+ require 'json'
20
+ require 'thread' # Mutex, CoditionVariable
21
+ require 'zlib'
22
+ require 'stringio'
23
+ require 'sequel'
24
+ require 'logger'
25
+ require 'fcntl'
22
26
 
23
- {
24
- :Application => 'perfectqueue/application',
25
- :Backend => 'perfectqueue/backend',
26
- :BackendHelper => 'perfectqueue/backend',
27
- :BlockingFlag => 'perfectqueue/blocking_flag',
28
- :Client => 'perfectqueue/client',
29
- :DaemonsLogger => 'perfectqueue/daemons_logger',
30
- :Engine => 'perfectqueue/engine',
31
- :Model => 'perfectqueue/model',
32
- :Queue => 'perfectqueue/queue',
33
- :Runner => 'perfectqueue/runner',
34
- :Task => 'perfectqueue/task',
35
- :TaskWithMetadata => 'perfectqueue/task',
36
- :AcquiredTask => 'perfectqueue/task',
37
- :TaskMetadata => 'perfectqueue/task_metadata',
38
- :TaskMonitor => 'perfectqueue/task_monitor',
39
- :TaskMetadataAccessors => 'perfectqueue/task_metadata',
40
- :TaskStatus => 'perfectqueue/task_status',
41
- :Worker => 'perfectqueue/worker',
42
- :Supervisor => 'perfectqueue/supervisor',
43
- # SignalQueue is obsolete because it does not run with ruby >= 2.0.0.
44
- # See ddbf04c9 and use SignalThread instead.
45
- :SignalQueue => 'perfectqueue/signal_queue',
46
- :SignalThread => 'perfectqueue/signal_thread',
47
- :VERSION => 'perfectqueue/version',
48
- }.each_pair {|k,v|
49
- autoload k, File.expand_path(v, File.dirname(__FILE__))
50
- }
51
- [
52
- 'perfectqueue/multiprocess',
53
- 'perfectqueue/error',
54
- ].each {|v|
55
- require File.expand_path(v, File.dirname(__FILE__))
56
- }
27
+ require_relative 'perfectqueue/application'
28
+ require_relative 'perfectqueue/backend'
29
+ require_relative 'perfectqueue/backend/rdb_compat'
30
+ require_relative 'perfectqueue/blocking_flag'
31
+ require_relative 'perfectqueue/client'
32
+ require_relative 'perfectqueue/daemons_logger'
33
+ require_relative 'perfectqueue/engine'
34
+ require_relative 'perfectqueue/model'
35
+ require_relative 'perfectqueue/queue'
36
+ require_relative 'perfectqueue/runner'
37
+ require_relative 'perfectqueue/task_monitor'
38
+ require_relative 'perfectqueue/task_metadata'
39
+ require_relative 'perfectqueue/task_status'
40
+ require_relative 'perfectqueue/task'
41
+ require_relative 'perfectqueue/worker'
42
+ require_relative 'perfectqueue/supervisor'
43
+ require_relative 'perfectqueue/signal_thread'
44
+ require_relative 'perfectqueue/version'
45
+ require_relative 'perfectqueue/multiprocess/thread_processor'
46
+ require_relative 'perfectqueue/multiprocess/child_process'
47
+ require_relative 'perfectqueue/multiprocess/child_process_monitor'
48
+ require_relative 'perfectqueue/multiprocess/fork_processor'
49
+ require_relative 'perfectqueue/error'
57
50
 
51
+ module PerfectQueue
58
52
  def self.open(config, &block)
59
53
  c = Client.new(config)
60
54
  begin
@@ -19,17 +19,8 @@
19
19
  module PerfectQueue
20
20
  module Backend
21
21
  def self.new_backend(client, config)
22
- case config[:type]
23
- when nil
24
- raise ConfigError, "'type' option is not set"
25
- when 'rdb_compat'
26
- require_backend('rdb_compat')
27
- RDBCompatBackend.new(client, config)
28
- end
29
- end
30
-
31
- def self.require_backend(fname)
32
- require File.expand_path("backend/#{fname}", File.dirname(__FILE__))
22
+ raise ConfigError, "'type' must be 'rdb_compat'" if config[:type] != 'rdb_compat'
23
+ RDBCompatBackend.new(client, config)
33
24
  end
34
25
  end
35
26
 
@@ -46,4 +37,3 @@ module PerfectQueue
46
37
  end
47
38
  end
48
39
  end
49
-
@@ -39,7 +39,6 @@ module PerfectQueue
39
39
  def initialize(client, config)
40
40
  super
41
41
 
42
- require 'sequel'
43
42
  url = config[:url]
44
43
  @table = config[:table]
45
44
  unless @table
@@ -170,8 +169,6 @@ SQL
170
169
 
171
170
  def compress_data(data, compression)
172
171
  if compression == 'gzip'
173
- require 'zlib'
174
- require 'stringio'
175
172
  io = StringIO.new
176
173
  io.set_encoding(Encoding::ASCII_8BIT)
177
174
  gz = Zlib::GzipWriter.new(io)
@@ -243,7 +240,7 @@ SQL
243
240
  return nil
244
241
  end
245
242
 
246
- sql = "UPDATE `#{@table}` SET timeout=? WHERE timeout <= ? AND id IN ("
243
+ sql = "UPDATE `#{@table}` FORCE INDEX (PRIMARY) SET timeout=? WHERE timeout <= ? AND id IN ("
247
244
  params = [sql, next_timeout, now]
248
245
  tasks.each {|t| params << t.key }
249
246
  sql << (1..tasks.size).map { '?' }.join(',')
@@ -410,8 +407,6 @@ SQL
410
407
  # automatic gzip decompression
411
408
  d.force_encoding('ASCII-8BIT') if d.respond_to?(:force_encoding)
412
409
  if d[0, 2] == GZIP_MAGIC_BYTES
413
- require 'zlib'
414
- require 'stringio'
415
410
  compression = 'gzip'
416
411
  gz = Zlib::GzipReader.new(StringIO.new(d))
417
412
  begin
@@ -20,7 +20,6 @@ module PerfectQueue
20
20
 
21
21
  class BlockingFlag
22
22
  def initialize
23
- require 'thread'
24
23
  @set = false
25
24
  @mutex = Mutex.new
26
25
  @cond = ConditionVariable.new
@@ -18,8 +18,6 @@
18
18
 
19
19
  module PerfectQueue
20
20
 
21
- require 'logger'
22
-
23
21
  class DaemonsLogger < Logger
24
22
  def initialize(dev, shift_age=0, shift_size=1048576)
25
23
  @stdout_hook = false
@@ -24,7 +24,6 @@ module PerfectQueue
24
24
  @runner = runner
25
25
  @processor_id = processor_id
26
26
 
27
- require 'fcntl'
28
27
  @stop = false
29
28
  @cpm = nil
30
29
  @last_fork_time = 0
@@ -19,8 +19,6 @@ module PerfectQueue
19
19
 
20
20
  class SignalThread < Thread
21
21
  def initialize(&block)
22
- require 'thread'
23
-
24
22
  @handlers = {}
25
23
 
26
24
  @mutex = Mutex.new
@@ -1,3 +1,3 @@
1
1
  module PerfectQueue
2
- VERSION = "0.8.46"
2
+ VERSION = "0.8.47"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: perfectqueue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.46
4
+ version: 0.8.47
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-23 00:00:00.000000000 Z
11
+ date: 2016-04-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sequel
@@ -112,14 +112,12 @@ files:
112
112
  - lib/perfectqueue/engine.rb
113
113
  - lib/perfectqueue/error.rb
114
114
  - lib/perfectqueue/model.rb
115
- - lib/perfectqueue/multiprocess.rb
116
115
  - lib/perfectqueue/multiprocess/child_process.rb
117
116
  - lib/perfectqueue/multiprocess/child_process_monitor.rb
118
117
  - lib/perfectqueue/multiprocess/fork_processor.rb
119
118
  - lib/perfectqueue/multiprocess/thread_processor.rb
120
119
  - lib/perfectqueue/queue.rb
121
120
  - lib/perfectqueue/runner.rb
122
- - lib/perfectqueue/signal_queue.rb
123
121
  - lib/perfectqueue/signal_thread.rb
124
122
  - lib/perfectqueue/supervisor.rb
125
123
  - lib/perfectqueue/task.rb
@@ -202,3 +200,4 @@ test_files:
202
200
  - spec/task_metadata_spec.rb
203
201
  - spec/task_monitor_spec.rb
204
202
  - spec/task_spec.rb
203
+ has_rdoc: false
@@ -1,31 +0,0 @@
1
- #
2
- # PerfectQueue
3
- #
4
- # Copyright (C) 2012-2013 Sadayuki Furuhashi
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- module PerfectQueue
20
- module Multiprocess
21
- {
22
- :ChildProcess => 'multiprocess/child_process',
23
- :ChildProcessMonitor => 'multiprocess/child_process_monitor',
24
- :ForkProcessor => 'multiprocess/fork_processor',
25
- :ThreadProcessor => 'multiprocess/thread_processor',
26
- }.each_pair {|k,v|
27
- autoload k, File.expand_path(v, File.dirname(__FILE__))
28
- }
29
- end
30
- end
31
-
@@ -1,122 +0,0 @@
1
- #
2
- # PerfectQueue
3
- #
4
- # Copyright (C) 2012-2013 Sadayuki Furuhashi
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- module PerfectQueue
20
-
21
- # SignalQueue is obsolete because it does not run with ruby >= 2.0.0.
22
- # See ddbf04c9 and use SignalThread instead.
23
- class SignalQueue
24
- def self.start(&block)
25
- st = new(&block)
26
- st.start
27
- return st
28
- end
29
-
30
- def initialize(&block)
31
- require 'thread'
32
-
33
- @handlers = {}
34
- @queue = []
35
- @mutex = Mutex.new
36
- @cond = ConditionVariable.new
37
- @finished = false
38
-
39
- block.call(self) if block
40
- end
41
-
42
- def trap(sig, command=nil, &block)
43
- sig = sig.to_sym
44
- old = @handlers[sig]
45
-
46
- if block
47
- Kernel.trap(sig) do
48
- enqueue(sig)
49
- end
50
- @handlers[sig] = block
51
-
52
- else
53
- Kernel.trap(sig, command)
54
- @handlers.delete(sig)
55
- end
56
-
57
- old
58
- end
59
-
60
- def start
61
- @thread = Thread.new(&method(:run))
62
- end
63
-
64
- def join
65
- @thread.join
66
- end
67
-
68
- def stop
69
- @finished = true
70
- enqueue(nil) # TODO causes recursive lock?
71
- end
72
-
73
- def shutdown
74
- stop
75
- join
76
- end
77
-
78
- def run
79
- @owner_thread = Thread.current
80
- until @finished
81
- h = nil
82
- @mutex.synchronize do
83
- while @queue.empty?
84
- @cond.wait(@mutex, 0.5)
85
- end
86
- sig = @queue.shift
87
- if sig == nil
88
- @finished = true
89
- else
90
- h = @handlers[sig]
91
- end
92
- end
93
-
94
- begin
95
- h.call if h
96
- rescue
97
- STDERR.print "#{$!}\n"
98
- $!.backtrace.each {|bt|
99
- STDERR.print "\t#{bt}\n"
100
- STDERR.flush
101
- }
102
- end
103
- end
104
- end
105
-
106
- private
107
- def enqueue(sig)
108
- if Thread.current == @owner_thread
109
- @queue << sig
110
- if @mutex.locked?
111
- @cond.signal
112
- end
113
- else
114
- @mutex.synchronize do
115
- @queue << sig
116
- @cond.signal
117
- end
118
- end
119
- end
120
- end
121
-
122
- end