bixby-common 0.6.0 → 0.6.1
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 +3 -2
- data/Gemfile.lock +3 -3
- data/VERSION +1 -1
- data/bixby-common.gemspec +5 -4
- data/lib/bixby-common/util/signal.rb +3 -1
- data/lib/bixby-common/util/thread_dump.rb +5 -0
- data/lib/bixby-common/util/thread_pool.rb +6 -3
- data/lib/bixby-common/websocket/api_channel.rb +3 -3
- data/test/util/signal_test.rb +34 -0
- data/test/util/thread_pool_test.rb +6 -3
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f5f1fb87533cdcdfaba7bd9ba0532d0c6c1aed0
|
4
|
+
data.tar.gz: 1937a3c76c45d644396d17a9e75c6c1b38689686
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4208517467da1d40ee2c706a10ef794742d173fab1bfa669a9c48dcf94466e10d078c473d7bd0165c5516b3f0ba4d12307ddb0a0e35b2391ebb9edcdbeea1e13
|
7
|
+
data.tar.gz: 54a5a6c786e43aede794bbd0d70aa7468aa729fd5451c4d560c4e06281d4db0616f4f887a612f40c97b067bca8c842e665433345c9e4196e0dfa3c5fc0fcd6ab
|
data/.travis.yml
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
before_install:
|
2
|
+
- "gem install bundler --no-ri --no-rdoc"
|
2
3
|
- "curl -sL https://s3.bixby.io/wad > ~/wad"
|
3
4
|
- "chmod +x ~/wad"
|
4
5
|
install:
|
@@ -8,8 +9,8 @@ after_script: "rake coveralls"
|
|
8
9
|
|
9
10
|
language: ruby
|
10
11
|
rvm:
|
11
|
-
- 2.1.
|
12
|
-
-
|
12
|
+
- 2.1.5
|
13
|
+
- 2.2.0
|
13
14
|
|
14
15
|
branches:
|
15
16
|
only:
|
data/Gemfile.lock
CHANGED
@@ -24,7 +24,7 @@ GIT
|
|
24
24
|
|
25
25
|
GIT
|
26
26
|
remote: git://github.com/chetan/micron.git
|
27
|
-
revision:
|
27
|
+
revision: 576f6699e2a7ff1828ce5c333cc5fa433c0be380
|
28
28
|
specs:
|
29
29
|
micron (0.5.1)
|
30
30
|
ansi
|
@@ -56,7 +56,7 @@ GEM
|
|
56
56
|
remote: https://rubygems.org/
|
57
57
|
specs:
|
58
58
|
addressable (2.3.6)
|
59
|
-
ansi (1.
|
59
|
+
ansi (1.5.0)
|
60
60
|
awesome_print (1.6.1)
|
61
61
|
bixby-auth (0.1.1)
|
62
62
|
builder (3.2.2)
|
@@ -132,7 +132,7 @@ GEM
|
|
132
132
|
multi_json (~> 1.3)
|
133
133
|
multi_xml (~> 0.5)
|
134
134
|
rack (~> 1.2)
|
135
|
-
oj (2.11.
|
135
|
+
oj (2.11.4)
|
136
136
|
pry (0.10.1)
|
137
137
|
coderay (~> 1.1.0)
|
138
138
|
method_source (~> 0.8.1)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.6.
|
1
|
+
0.6.1
|
data/bixby-common.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: bixby-common 0.6.
|
5
|
+
# stub: bixby-common 0.6.1 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "bixby-common"
|
9
|
-
s.version = "0.6.
|
9
|
+
s.version = "0.6.1"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Chetan Sarva"]
|
14
|
-
s.date = "2015-01-
|
14
|
+
s.date = "2015-01-23"
|
15
15
|
s.description = "Bixby Common files/libs"
|
16
16
|
s.email = "chetan@pixelcop.net"
|
17
17
|
s.extra_rdoc_files = [
|
@@ -77,6 +77,7 @@ Gem::Specification.new do |s|
|
|
77
77
|
"test/util/http_client_test.rb",
|
78
78
|
"test/util/jsonify_test.rb",
|
79
79
|
"test/util/log_test.rb",
|
80
|
+
"test/util/signal_test.rb",
|
80
81
|
"test/util/thread_pool_test.rb",
|
81
82
|
"test/websocket/api_channel_test.rb",
|
82
83
|
"test/websocket/async_response_test.rb",
|
@@ -85,7 +86,7 @@ Gem::Specification.new do |s|
|
|
85
86
|
]
|
86
87
|
s.homepage = "http://github.com/chetan/bixby-common"
|
87
88
|
s.licenses = ["MIT"]
|
88
|
-
s.rubygems_version = "2.4.
|
89
|
+
s.rubygems_version = "2.4.5"
|
89
90
|
s.summary = "Bixby Common"
|
90
91
|
|
91
92
|
if s.respond_to? :specification_version then
|
@@ -15,6 +15,10 @@ module Bixby
|
|
15
15
|
|
16
16
|
# Prints a thread dump on ALRM signal
|
17
17
|
# kill -ALRM <pid>
|
18
|
+
#
|
19
|
+
# You can cancel the signal trap by saving the returned Thread and killing it
|
20
|
+
#
|
21
|
+
# @return [Thread]
|
18
22
|
def trap!
|
19
23
|
t = Bixby::Signal.trap("SIGALRM") do
|
20
24
|
write(LoggerIO.new(Logging.logger[ThreadDump]))
|
@@ -22,6 +26,7 @@ module Bixby
|
|
22
26
|
t[:_name] = "dumper [ignore me]"
|
23
27
|
|
24
28
|
Logging.logger[ThreadDump].info "Trapping SIGALRM: kill -ALRM #{Process.pid}"
|
29
|
+
return t
|
25
30
|
end
|
26
31
|
|
27
32
|
# Write thread dump to the given IO-like handle (must respond to #puts)
|
@@ -29,6 +29,7 @@ module Bixby
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def enqueue(command, block=nil)
|
32
|
+
logger.debug { "enqueue new task: #{command}" }
|
32
33
|
@input_queue.push(Task.new(command, block))
|
33
34
|
if command == :perform then
|
34
35
|
grow_pool
|
@@ -104,7 +105,7 @@ module Bixby
|
|
104
105
|
|
105
106
|
def expand(count)
|
106
107
|
@lock.synchronize do
|
107
|
-
|
108
|
+
logger.debug "expanding by #{count} threads (from #{@size})"
|
108
109
|
count.times do
|
109
110
|
create_worker
|
110
111
|
end
|
@@ -159,7 +160,7 @@ module Bixby
|
|
159
160
|
|
160
161
|
def create_worker
|
161
162
|
@lock.synchronize do
|
162
|
-
|
163
|
+
logger.debug "spawning new worker thread"
|
163
164
|
|
164
165
|
exit_handler = lambda { |worker, reason|
|
165
166
|
@lock.synchronize do
|
@@ -180,12 +181,14 @@ module Bixby
|
|
180
181
|
# Grow the pool by one if we have more jobs than idle workers
|
181
182
|
def grow_pool
|
182
183
|
@lock.synchronize do
|
183
|
-
|
184
|
+
logger.debug { "jobs: #{num_jobs}; busy: #{num_working}; idle: #{num_idle}" }
|
184
185
|
if @size < @max_size && num_jobs > 0 && num_jobs > num_idle then
|
185
186
|
space = @max_size-@size
|
186
187
|
jobs = num_jobs-num_idle
|
187
188
|
needed = space < jobs ? space : jobs
|
188
189
|
expand(needed)
|
190
|
+
else
|
191
|
+
logger.debug "NOT growing the pool!"
|
189
192
|
end
|
190
193
|
end
|
191
194
|
|
@@ -40,8 +40,6 @@ module Bixby
|
|
40
40
|
#
|
41
41
|
# @return [String] request id
|
42
42
|
def execute_async(json_request, &block)
|
43
|
-
logger.debug { "execute_async:\n#{json_request.to_s}" }
|
44
|
-
|
45
43
|
if json_request.kind_of? Request then
|
46
44
|
id, request = json_request.id, json_request
|
47
45
|
else
|
@@ -50,6 +48,8 @@ module Bixby
|
|
50
48
|
end
|
51
49
|
@responses[id] = AsyncResponse.new(id, &block)
|
52
50
|
|
51
|
+
logger.debug { request.type == "connect" ? "execute_async: CONNECT [#{id}]" : "execute_async: RPC [#{id}]\n#{request.to_s}" }
|
52
|
+
|
53
53
|
EM.next_tick {
|
54
54
|
ws.send(request.to_wire)
|
55
55
|
}
|
@@ -108,7 +108,7 @@ module Bixby
|
|
108
108
|
elsif req.type == "rpc_result" then
|
109
109
|
# Pass the result back to the caller
|
110
110
|
res = req.json_response
|
111
|
-
logger.debug { "RPC_RESULT for request id #{req.id}\n#{res}" }
|
111
|
+
logger.debug { "RPC_RESULT for request id [#{req.id}]\n#{res}" }
|
112
112
|
@responses[req.id].response = res
|
113
113
|
|
114
114
|
elsif req.type == "connect" then
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
module Bixby
|
4
|
+
module Test
|
5
|
+
class TestSignal < TestCase
|
6
|
+
|
7
|
+
def test_create_signal
|
8
|
+
|
9
|
+
foo = 0
|
10
|
+
thread = Bixby::Signal.trap("ALRM") do
|
11
|
+
foo += 1
|
12
|
+
end
|
13
|
+
|
14
|
+
assert thread.kind_of? Thread
|
15
|
+
assert thread.alive?
|
16
|
+
assert_equal 0, foo
|
17
|
+
|
18
|
+
Process.kill("ALRM", Process.pid)
|
19
|
+
sleep 0.01
|
20
|
+
assert_equal 1, foo
|
21
|
+
|
22
|
+
Process.kill("ALRM", Process.pid)
|
23
|
+
sleep 0.01
|
24
|
+
assert_equal 2, foo
|
25
|
+
|
26
|
+
assert thread.alive?
|
27
|
+
thread.kill
|
28
|
+
thread.join
|
29
|
+
refute thread.alive?
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -15,7 +15,7 @@ class TestThreadPool < TestCase
|
|
15
15
|
begin
|
16
16
|
puts "tearing down, shutting down pool"
|
17
17
|
@pool.shutdown
|
18
|
-
@pool.join(
|
18
|
+
@pool.join(0.1)
|
19
19
|
assert_equal 0, @pool.size
|
20
20
|
rescue Exception => ex
|
21
21
|
end
|
@@ -41,20 +41,23 @@ class TestThreadPool < TestCase
|
|
41
41
|
foo = []
|
42
42
|
4.times do |i|
|
43
43
|
@pool.perform do
|
44
|
+
logger.debug "running job #{i}, sleeping 10"
|
45
|
+
sleep 10
|
44
46
|
foo << "thread #{i}"
|
45
47
|
end
|
48
|
+
sleep 0.1
|
46
49
|
end
|
47
50
|
assert_equal 4, @pool.size
|
48
51
|
|
49
52
|
10.times do |i|
|
50
53
|
@pool.perform do
|
54
|
+
sleep 10
|
51
55
|
foo << "thread #{i}"
|
52
56
|
end
|
53
57
|
end
|
54
58
|
assert_equal 8, @pool.size
|
55
59
|
|
56
|
-
|
57
|
-
assert_equal 14, foo.size
|
60
|
+
# assert_equal 14, foo.size
|
58
61
|
end
|
59
62
|
|
60
63
|
def test_pool_shrinks_on_idle
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bixby-common
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chetan Sarva
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
11
|
+
date: 2015-01-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bixby-auth
|
@@ -272,6 +272,7 @@ files:
|
|
272
272
|
- test/util/http_client_test.rb
|
273
273
|
- test/util/jsonify_test.rb
|
274
274
|
- test/util/log_test.rb
|
275
|
+
- test/util/signal_test.rb
|
275
276
|
- test/util/thread_pool_test.rb
|
276
277
|
- test/websocket/api_channel_test.rb
|
277
278
|
- test/websocket/async_response_test.rb
|
@@ -297,7 +298,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
297
298
|
version: '0'
|
298
299
|
requirements: []
|
299
300
|
rubyforge_project:
|
300
|
-
rubygems_version: 2.4.
|
301
|
+
rubygems_version: 2.4.5
|
301
302
|
signing_key:
|
302
303
|
specification_version: 4
|
303
304
|
summary: Bixby Common
|