rainbows 4.3.1 → 4.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/GIT-VERSION-GEN +1 -1
- data/lib/rainbows/configurator.rb +1 -1
- data/lib/rainbows/const.rb +1 -1
- data/lib/rainbows/coolio/client.rb +6 -1
- data/lib/rainbows/epoll.rb +1 -1
- data/lib/rainbows/epoll/client.rb +1 -1
- data/lib/rainbows/fiber_pool.rb +1 -1
- data/lib/rainbows/http_server.rb +2 -1
- data/lib/rainbows/stream_response_epoll.rb +23 -1
- data/lib/rainbows/stream_response_epoll/client.rb +2 -1
- data/lib/rainbows/thread_timeout.rb +9 -0
- data/lib/rainbows/xepoll_thread_pool/client.rb +1 -1
- data/lib/rainbows/xepoll_thread_spawn/client.rb +1 -1
- data/t/t0501-cramp-rainsocket.sh +1 -1
- data/t/test_isolate.rb +7 -7
- metadata +6 -6
data/GIT-VERSION-GEN
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# This module adds \Rainbows! to the
|
4
4
|
# {Unicorn::Configurator}[http://unicorn.bogomips.org/Unicorn/Configurator.html]
|
5
5
|
# \Rainbows!-specific configuration options must be inside a the Rainbows!
|
6
|
-
# block, otherwise Unicorn::Configurator directives may be used
|
6
|
+
# block, otherwise Unicorn::Configurator directives may be used anywhere
|
7
7
|
# in the file.
|
8
8
|
#
|
9
9
|
# Rainbows! do
|
data/lib/rainbows/const.rb
CHANGED
@@ -69,7 +69,12 @@ class Rainbows::Coolio::Client < Coolio::IO
|
|
69
69
|
end
|
70
70
|
|
71
71
|
def timeout?
|
72
|
-
nil == @deferred && @_write_buffer.empty?
|
72
|
+
if nil == @deferred && @_write_buffer.empty?
|
73
|
+
@_io.shutdown
|
74
|
+
true
|
75
|
+
else
|
76
|
+
false
|
77
|
+
end
|
73
78
|
end
|
74
79
|
|
75
80
|
# used for streaming sockets and pipes
|
data/lib/rainbows/epoll.rb
CHANGED
@@ -16,7 +16,7 @@ require 'sendfile'
|
|
16
16
|
# When serving static files, this is extremely unfair and optimized
|
17
17
|
# for throughput at the expense of fairness. This is not an issue
|
18
18
|
# if you're not serving static files, or if your working set is
|
19
|
-
# small enough to
|
19
|
+
# small enough to always be in your kernel page cache. This concurrency
|
20
20
|
# model may starve clients if you have slow disks and large static files.
|
21
21
|
#
|
22
22
|
# === RubyGem Requirements
|
data/lib/rainbows/fiber_pool.rb
CHANGED
data/lib/rainbows/http_server.rb
CHANGED
@@ -18,7 +18,8 @@ class Rainbows::HttpServer < Unicorn::HttpServer
|
|
18
18
|
@logger = Unicorn::Configurator::DEFAULTS[:logger]
|
19
19
|
super(app, options)
|
20
20
|
defined?(@use) or self.use = Rainbows::Base
|
21
|
-
@worker_connections ||=
|
21
|
+
@worker_connections ||= 50
|
22
|
+
@worker_connections = 1 if @use == :Base
|
22
23
|
end
|
23
24
|
|
24
25
|
# Add one second to the timeout since our fchmod heartbeat is less
|
@@ -67,9 +67,31 @@ module Rainbows::StreamResponseEpoll
|
|
67
67
|
end while true
|
68
68
|
end
|
69
69
|
end
|
70
|
-
ep_client.close if ep_client
|
71
70
|
ensure
|
72
71
|
body.respond_to?(:close) and body.close
|
72
|
+
if ep_client
|
73
|
+
ep_client.close
|
74
|
+
else
|
75
|
+
socket.shutdown
|
76
|
+
socket.close
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# once a client is accepted, it is processed in its entirety here
|
81
|
+
# in 3 easy steps: read request, call app, write app response
|
82
|
+
def process_client(client)
|
83
|
+
status, headers, body = @app.call(env = @request.read(client))
|
84
|
+
|
85
|
+
if 100 == status.to_i
|
86
|
+
client.write(Unicorn::Const::EXPECT_100_RESPONSE)
|
87
|
+
env.delete(Unicorn::Const::HTTP_EXPECT)
|
88
|
+
status, headers, body = @app.call(env)
|
89
|
+
end
|
90
|
+
@request.headers? or headers = nil
|
91
|
+
http_response_write(client, status, headers, body)
|
92
|
+
rescue => e
|
93
|
+
handle_error(client, e)
|
73
94
|
end
|
95
|
+
|
74
96
|
# :startdoc:
|
75
97
|
end
|
@@ -19,7 +19,7 @@ class Rainbows::StreamResponseEpoll::Client
|
|
19
19
|
|
20
20
|
def initialize(io, unwritten)
|
21
21
|
@closed = false
|
22
|
-
@to_io = io
|
22
|
+
@to_io = io
|
23
23
|
@wr_queue = [ unwritten.dup ]
|
24
24
|
EP.set(self, OUT)
|
25
25
|
end
|
@@ -50,6 +50,7 @@ class Rainbows::StreamResponseEpoll::Client
|
|
50
50
|
|
51
51
|
def on_write_complete
|
52
52
|
if @closed
|
53
|
+
@to_io.shutdown
|
53
54
|
@to_io.close
|
54
55
|
N.decr(0, 1)
|
55
56
|
end
|
@@ -44,6 +44,15 @@ require 'thread'
|
|
44
44
|
# does not expose a monotonic clock for users, so don't change
|
45
45
|
# the system time while this is running. All servers should be
|
46
46
|
# running ntpd anyways.
|
47
|
+
#
|
48
|
+
# "ensure" clauses may not fire properly or be interrupted during
|
49
|
+
# execution, so do not mix this module with code which relies on "ensure".
|
50
|
+
# (This is also true for the "Timeout" module in the Ruby standard library)
|
51
|
+
#
|
52
|
+
# "recursive locking" ThreadError exceptions may occur if
|
53
|
+
# ThreadTimeout fires while a Mutex is locked (because "ensure"
|
54
|
+
# clauses may not fire properly).
|
55
|
+
|
47
56
|
class Rainbows::ThreadTimeout
|
48
57
|
|
49
58
|
# :stopdoc:
|
@@ -77,7 +77,7 @@ module Rainbows::XEpollThreadPool::Client
|
|
77
77
|
LOCK.synchronize do
|
78
78
|
KATO.delete_if { |client, time| time < ot and defer << client }
|
79
79
|
end
|
80
|
-
defer.each { |io| io.closed? or io.
|
80
|
+
defer.each { |io| io.closed? or io.shutdown }
|
81
81
|
end
|
82
82
|
@@last_expire = now
|
83
83
|
end
|
@@ -33,7 +33,7 @@ module Rainbows::XEpollThreadSpawn::Client
|
|
33
33
|
Rainbows.at_quit do
|
34
34
|
clients = nil
|
35
35
|
LOCK.synchronize { clients = KATO.keys; KATO.clear }
|
36
|
-
clients.each { |io| io.closed? or io.
|
36
|
+
clients.each { |io| io.closed? or io.shutdown }
|
37
37
|
end
|
38
38
|
@@last_expire = Time.now
|
39
39
|
|
data/t/t0501-cramp-rainsocket.sh
CHANGED
@@ -25,7 +25,7 @@ t_begin "setup and start" && {
|
|
25
25
|
}
|
26
26
|
|
27
27
|
t_begin "wait for server to say hello to us" && {
|
28
|
-
ok=$((curl --no-buffer -sS http://$listen/ || :) | \
|
28
|
+
ok=$( (curl --no-buffer -sS http://$listen/ || :) | \
|
29
29
|
(tr -d '\0\0377' || :) | \
|
30
30
|
awk '/Hello from the Server/ { print "ok"; exit 0 }')
|
31
31
|
|
data/t/test_isolate.rb
CHANGED
@@ -16,29 +16,29 @@ $stdout.reopen($stderr)
|
|
16
16
|
lock = File.open(__FILE__, "rb")
|
17
17
|
lock.flock(File::LOCK_EX)
|
18
18
|
Isolate.now!(opts) do
|
19
|
-
gem 'kgio', '2.
|
19
|
+
gem 'kgio', '2.7.4'
|
20
20
|
gem 'kcar', '0.3.0'
|
21
|
-
gem 'raindrops', '0.
|
22
|
-
gem 'unicorn', '4.1
|
21
|
+
gem 'raindrops', '0.10.0'
|
22
|
+
gem 'unicorn', '4.3.1'
|
23
23
|
|
24
24
|
if engine == "ruby"
|
25
25
|
gem 'sendfile', '1.1.0'
|
26
26
|
gem 'cool.io', '1.1.0'
|
27
27
|
|
28
28
|
gem 'eventmachine', '0.12.10'
|
29
|
-
gem 'sinatra', '1.2
|
30
|
-
gem 'async_sinatra', '0.
|
29
|
+
gem 'sinatra', '1.3.2'
|
30
|
+
gem 'async_sinatra', '1.0.0'
|
31
31
|
|
32
32
|
gem 'neverblock', '0.1.6.2'
|
33
33
|
end
|
34
34
|
|
35
35
|
if defined?(::Fiber) && engine == "ruby"
|
36
36
|
gem 'revactor', '0.1.5'
|
37
|
-
gem 'rack-fiber_pool', '0.9.
|
37
|
+
gem 'rack-fiber_pool', '0.9.2'
|
38
38
|
end
|
39
39
|
|
40
40
|
if RUBY_PLATFORM =~ /linux/
|
41
|
-
gem 'sleepy_penguin', '3.0
|
41
|
+
gem 'sleepy_penguin', '3.1.0'
|
42
42
|
|
43
43
|
# is 2.6.32 new enough?
|
44
44
|
gem 'io_splice', '4.1.1' if `uname -r`.strip > '2.6.32'
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rainbows
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 47
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 4
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 4.
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
version: 4.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Rainbows! hackers
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2012-08-18 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: rack
|
@@ -465,7 +465,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
465
465
|
requirements: []
|
466
466
|
|
467
467
|
rubyforge_project: rainbows
|
468
|
-
rubygems_version: 1.8.
|
468
|
+
rubygems_version: 1.8.24
|
469
469
|
signing_key:
|
470
470
|
specification_version: 3
|
471
471
|
summary: "- Unicorn for sleepy apps and slow clients"
|