promise_pool 0.9.1 → 0.9.2
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/.travis.yml +5 -6
- data/CHANGES.md +7 -0
- data/Gemfile +0 -4
- data/README.md +1 -1
- data/lib/promise_pool/promise.rb +9 -1
- data/lib/promise_pool/thread_pool.rb +5 -1
- data/lib/promise_pool/version.rb +1 -1
- data/promise_pool.gemspec +4 -4
- data/test/test_promise.rb +4 -1
- data/test/test_thread_pool.rb +10 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d72f3c8230b78d9d0a71cf5c3e6d40afc13d47d45fa298c2d62ba7213fa6794d
|
4
|
+
data.tar.gz: f08eda0aac764cba80db426bea6dc3422ab9a1c6fa77d9901d7600740321a3a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a15b87acc00a537d50c9c37ef78dbb6197bd9717abdd61799c984943fa9bbf778175f16f837620516dfe80a0a09e9323c7c584a54ab55763c0a6c3472c1ba2c
|
7
|
+
data.tar.gz: a918d00de8bea336034b597c5bd64d8de37135e85e0f3df9b8327c653c3b1869cafd07a8232b10ceab85243dab0132a85dde41bc7828a80f4f73e9760afe1867
|
data/.travis.yml
CHANGED
@@ -2,17 +2,16 @@ sudo: false
|
|
2
2
|
language: ruby
|
3
3
|
|
4
4
|
install: 'gem install bundler; bundle install --retry=3'
|
5
|
+
before_script: unset CI
|
5
6
|
script: 'ruby -vr bundler/setup -S rake test'
|
6
7
|
|
7
8
|
matrix:
|
8
9
|
include:
|
9
|
-
- rvm: 2.2
|
10
|
-
- rvm: 2.3
|
11
10
|
- rvm: 2.4
|
11
|
+
env: RUBYOPT=--enable-frozen-string-literal
|
12
|
+
- rvm: 2.5
|
13
|
+
env: RUBYOPT=--enable-frozen-string-literal
|
12
14
|
- rvm: ruby-head
|
15
|
+
env: RUBYOPT=--enable-frozen-string-literal
|
13
16
|
- rvm: jruby
|
14
17
|
env: JRUBY_OPTS=--debug
|
15
|
-
- rvm: rbx
|
16
|
-
|
17
|
-
allow_failures:
|
18
|
-
- rvm: rbx
|
data/CHANGES.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# CHANGES
|
2
2
|
|
3
|
+
## promise_pool 0.9.2 -- 2018-07-21
|
4
|
+
|
5
|
+
* Added `Promise#started?` so we could pick the promise is starting or not.
|
6
|
+
* Potentially fixed an exception when the promise is not scheduled yet timed
|
7
|
+
out. It's unlikely to happen but it should be fine now.
|
8
|
+
* Added `ThreadPool#queue_size` to peek the size of the queue.
|
9
|
+
|
3
10
|
## promise_pool 0.9.1 -- 2018-03-20
|
4
11
|
|
5
12
|
* Introduced PromisePool::Future.resolve to convert nested futures
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -29,7 +29,7 @@ and improve modularity for both rest-core and promise_pool.
|
|
29
29
|
|
30
30
|
## REQUIREMENTS:
|
31
31
|
|
32
|
-
* Tested with MRI (official CRuby)
|
32
|
+
* Tested with MRI (official CRuby) and JRuby.
|
33
33
|
* gem [timers][]
|
34
34
|
|
35
35
|
[timers]: https://github.com/celluloid/timers
|
data/lib/promise_pool/promise.rb
CHANGED
@@ -99,6 +99,10 @@ module PromisePool
|
|
99
99
|
resolved
|
100
100
|
end
|
101
101
|
|
102
|
+
def started?
|
103
|
+
!!working_thread
|
104
|
+
end
|
105
|
+
|
102
106
|
protected
|
103
107
|
attr_accessor :value, :error, :result, :resolved, :callbacks,
|
104
108
|
:timer, :condv, :mutex, :task, :thread
|
@@ -152,7 +156,7 @@ module PromisePool
|
|
152
156
|
mutex.synchronize do
|
153
157
|
if resolved?
|
154
158
|
# do nothing if it's already done
|
155
|
-
elsif t =
|
159
|
+
elsif t = working_thread
|
156
160
|
t.raise(timer.error) # raise Timeout::Error to working thread
|
157
161
|
else
|
158
162
|
# task was queued and never started, just cancel it and
|
@@ -163,6 +167,10 @@ module PromisePool
|
|
163
167
|
end
|
164
168
|
end
|
165
169
|
|
170
|
+
def working_thread
|
171
|
+
thread || (task && task.thread)
|
172
|
+
end
|
173
|
+
|
166
174
|
# log user callback error, should never raise
|
167
175
|
def log_callback_error err
|
168
176
|
warn "#{self.class}: ERROR: #{err}\n from #{err.backtrace.inspect}"
|
@@ -24,11 +24,15 @@ module PromisePool
|
|
24
24
|
workers.size
|
25
25
|
end
|
26
26
|
|
27
|
+
def queue_size
|
28
|
+
queue.size
|
29
|
+
end
|
30
|
+
|
27
31
|
def defer promise_mutex, &job
|
28
32
|
mutex.synchronize do
|
29
33
|
task = Task.new(job, promise_mutex)
|
30
34
|
queue << task
|
31
|
-
spawn_worker if waiting <
|
35
|
+
spawn_worker if waiting < queue_size && workers.size < max_size
|
32
36
|
task
|
33
37
|
end
|
34
38
|
end
|
data/lib/promise_pool/version.rb
CHANGED
data/promise_pool.gemspec
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: promise_pool 0.9.
|
2
|
+
# stub: promise_pool 0.9.2 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "promise_pool".freeze
|
6
|
-
s.version = "0.9.
|
6
|
+
s.version = "0.9.2"
|
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 = ["Lin Jen-Shin (godfat)".freeze]
|
11
|
-
s.date = "2018-
|
11
|
+
s.date = "2018-07-21"
|
12
12
|
s.description = "promise_pool is a promise implementation backed by threads or threads pool.".freeze
|
13
13
|
s.email = ["godfat (XD) godfat.org".freeze]
|
14
14
|
s.files = [
|
@@ -38,7 +38,7 @@ Gem::Specification.new do |s|
|
|
38
38
|
"test/test_timer.rb".freeze]
|
39
39
|
s.homepage = "https://github.com/godfat/promise_pool".freeze
|
40
40
|
s.licenses = ["Apache-2.0".freeze]
|
41
|
-
s.rubygems_version = "2.7.
|
41
|
+
s.rubygems_version = "2.7.7".freeze
|
42
42
|
s.summary = "promise_pool is a promise implementation backed by threads or threads pool.".freeze
|
43
43
|
s.test_files = [
|
44
44
|
"test/test_future.rb".freeze,
|
data/test/test_promise.rb
CHANGED
@@ -95,11 +95,14 @@ describe PromisePool::Promise do
|
|
95
95
|
would 'work, fulfill, yield' do
|
96
96
|
value = 'body'
|
97
97
|
flag = 0
|
98
|
-
promise = Promise.new
|
98
|
+
promise = Promise.new
|
99
|
+
promise.should.not.started?
|
100
|
+
promise.defer do
|
99
101
|
flag.should.eq 0
|
100
102
|
flag += 1
|
101
103
|
value
|
102
104
|
end
|
105
|
+
promise.should.started?
|
103
106
|
promise.yield.should.eq value
|
104
107
|
promise.send(:value).should.eq value
|
105
108
|
promise.send(:result).should.eq value
|
data/test/test_thread_pool.rb
CHANGED
@@ -26,18 +26,27 @@ describe PromisePool::ThreadPool do
|
|
26
26
|
would 'call in thread pool if pool_size > 0' do
|
27
27
|
flag = 0
|
28
28
|
rd, wr = IO.pipe
|
29
|
+
@promise.should.not.started?
|
30
|
+
@pool.queue_size.should.eq 0
|
29
31
|
defer do
|
32
|
+
@promise.should.started?
|
33
|
+
@pool.queue_size.should.eq 1
|
30
34
|
rd.gets
|
31
35
|
flag.should.eq 0
|
32
36
|
flag += 1
|
33
37
|
raise 'nnf'
|
34
38
|
end
|
39
|
+
@pool.queue_size.should.eq 1
|
35
40
|
p1 = Promise.new
|
36
41
|
p1.defer(@pool) do # block until promise #0 is done because max_size == 1
|
42
|
+
p1.should.started?
|
43
|
+
@pool.queue_size.should.eq 0
|
37
44
|
flag.should.eq 1
|
38
45
|
flag += 1
|
39
46
|
raise 'boom'
|
40
47
|
end
|
48
|
+
@pool.queue_size.should.eq 2
|
49
|
+
p1.should.not.started?
|
41
50
|
wr.puts # start promise #0
|
42
51
|
|
43
52
|
# even if we're not yielding, the block should still be resolved,
|
@@ -46,5 +55,6 @@ describe PromisePool::ThreadPool do
|
|
46
55
|
expect.raise(RuntimeError){ @promise.yield }.message.should.eq 'nnf'
|
47
56
|
|
48
57
|
flag.should.eq 2
|
58
|
+
@pool.queue_size.should.eq 0
|
49
59
|
end
|
50
60
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: promise_pool
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lin Jen-Shin (godfat)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: timers
|
@@ -76,7 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
76
76
|
version: '0'
|
77
77
|
requirements: []
|
78
78
|
rubyforge_project:
|
79
|
-
rubygems_version: 2.7.
|
79
|
+
rubygems_version: 2.7.7
|
80
80
|
signing_key:
|
81
81
|
specification_version: 4
|
82
82
|
summary: promise_pool is a promise implementation backed by threads or threads pool.
|