rainbows 4.0.0 → 4.1.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/bin/rainbows +3 -2
- data/lib/rainbows.rb +2 -14
- data/lib/rainbows/client.rb +0 -25
- data/lib/rainbows/const.rb +1 -1
- data/lib/rainbows/fiber/coolio/methods.rb +1 -1
- data/lib/rainbows/fiber/io/methods.rb +1 -1
- data/lib/rainbows/process_client.rb +20 -1
- data/lib/rainbows/socket_proxy.rb +8 -0
- data/rainbows.gemspec +2 -2
- data/t/t0044-autopush.sh +2 -2
- metadata +7 -7
data/GIT-VERSION-GEN
CHANGED
data/bin/rainbows
CHANGED
@@ -8,7 +8,7 @@ ENV["RACK_ENV"] ||= "development"
|
|
8
8
|
rackup_opts = Unicorn::Configurator::RACKUP
|
9
9
|
options = rackup_opts[:options]
|
10
10
|
|
11
|
-
|
11
|
+
op = OptionParser.new("", 24, ' ') do |opts|
|
12
12
|
cmd = File.basename($0)
|
13
13
|
opts.banner = "Usage: #{cmd} " \
|
14
14
|
"[ruby options] [#{cmd} options] [rackup config file]"
|
@@ -106,7 +106,8 @@ opts = OptionParser.new("", 24, ' ') do |opts|
|
|
106
106
|
opts.parse! ARGV
|
107
107
|
end
|
108
108
|
|
109
|
-
app = Unicorn.builder(ARGV[0] || 'config.ru',
|
109
|
+
app = Unicorn.builder(ARGV[0] || 'config.ru', op)
|
110
|
+
op = nil
|
110
111
|
|
111
112
|
if $DEBUG
|
112
113
|
require 'pp'
|
data/lib/rainbows.rb
CHANGED
@@ -1,20 +1,8 @@
|
|
1
1
|
# -*- encoding: binary -*-
|
2
2
|
require 'kgio'
|
3
3
|
require 'unicorn'
|
4
|
-
|
5
|
-
Unicorn::SocketHelper::DEFAULTS
|
6
|
-
# the value passed to TCP_DEFER_ACCEPT actually matters in Linux 2.6.32+
|
7
|
-
:tcp_defer_accept => 60,
|
8
|
-
|
9
|
-
# keep-alive performance sucks without this due to
|
10
|
-
# write(headers)-write(body)-read
|
11
|
-
# because we always write headers and bodies with two calls
|
12
|
-
:tcp_nodelay => true,
|
13
|
-
|
14
|
-
# we always want to send our headers out ASAP since Rainbows!
|
15
|
-
# is designed for apps that could trickle out the body slowly
|
16
|
-
:tcp_nopush => false,
|
17
|
-
})
|
4
|
+
# the value passed to TCP_DEFER_ACCEPT actually matters in Linux 2.6.32+
|
5
|
+
Unicorn::SocketHelper::DEFAULTS[:tcp_defer_accept] = 60
|
18
6
|
|
19
7
|
# See http://rainbows.rubyforge.org/ for documentation
|
20
8
|
module Rainbows
|
data/lib/rainbows/client.rb
CHANGED
@@ -1,34 +1,9 @@
|
|
1
1
|
# -*- encoding: binary -*-
|
2
2
|
# :enddoc:
|
3
|
-
require "io/wait"
|
4
3
|
|
5
4
|
# this class is used for most synchronous concurrency models
|
6
5
|
class Rainbows::Client < Kgio::Socket
|
7
6
|
include Rainbows::ProcessClient
|
8
|
-
Rainbows.config!(self, :keepalive_timeout)
|
9
|
-
|
10
|
-
def read_expire
|
11
|
-
Time.now + KEEPALIVE_TIMEOUT
|
12
|
-
end
|
13
|
-
|
14
|
-
def kgio_wait_readable
|
15
|
-
wait KEEPALIVE_TIMEOUT
|
16
|
-
end
|
17
|
-
|
18
|
-
# used for reading headers (respecting keepalive_timeout)
|
19
|
-
def timed_read(buf)
|
20
|
-
expire = nil
|
21
|
-
begin
|
22
|
-
case rv = kgio_tryread(CLIENT_HEADER_BUFFER_SIZE, buf)
|
23
|
-
when :wait_readable
|
24
|
-
return if expire && expire < Time.now
|
25
|
-
expire ||= read_expire
|
26
|
-
kgio_wait_readable
|
27
|
-
else
|
28
|
-
return rv
|
29
|
-
end
|
30
|
-
end while true
|
31
|
-
end
|
32
7
|
|
33
8
|
alias write kgio_write
|
34
9
|
end
|
data/lib/rainbows/const.rb
CHANGED
@@ -7,7 +7,26 @@ module Rainbows::ProcessClient
|
|
7
7
|
NULL_IO = Unicorn::HttpRequest::NULL_IO
|
8
8
|
RACK_INPUT = Unicorn::HttpRequest::RACK_INPUT
|
9
9
|
IC = Unicorn::HttpRequest.input_class
|
10
|
-
Rainbows.config!(self, :client_header_buffer_size)
|
10
|
+
Rainbows.config!(self, :client_header_buffer_size, :keepalive_timeout)
|
11
|
+
|
12
|
+
def read_expire
|
13
|
+
Time.now + KEEPALIVE_TIMEOUT
|
14
|
+
end
|
15
|
+
|
16
|
+
# used for reading headers (respecting keepalive_timeout)
|
17
|
+
def timed_read(buf)
|
18
|
+
expire = nil
|
19
|
+
begin
|
20
|
+
case rv = kgio_tryread(CLIENT_HEADER_BUFFER_SIZE, buf)
|
21
|
+
when :wait_readable
|
22
|
+
return if expire && expire < Time.now
|
23
|
+
expire ||= read_expire
|
24
|
+
kgio_wait_readable(KEEPALIVE_TIMEOUT)
|
25
|
+
else
|
26
|
+
return rv
|
27
|
+
end
|
28
|
+
end while true
|
29
|
+
end
|
11
30
|
|
12
31
|
def process_loop
|
13
32
|
@hp = hp = Rainbows::HttpParser.new
|
@@ -18,6 +18,14 @@ module Rainbows::SocketProxy
|
|
18
18
|
to_io.kgio_trywrite(buf)
|
19
19
|
end
|
20
20
|
|
21
|
+
def kgio_tryread(size, buf = "")
|
22
|
+
to_io.kgio_tryread(size, buf)
|
23
|
+
end
|
24
|
+
|
25
|
+
def kgio_wait_readable(timeout = nil)
|
26
|
+
to_io.kgio_wait_readable(timeout)
|
27
|
+
end
|
28
|
+
|
21
29
|
def timed_read(buf)
|
22
30
|
to_io.timed_read(buf)
|
23
31
|
end
|
data/rainbows.gemspec
CHANGED
@@ -24,8 +24,8 @@ Gem::Specification.new do |s|
|
|
24
24
|
# we want a newer Rack for a valid HeaderHash#each
|
25
25
|
s.add_dependency(%q<rack>, ['~> 1.1'])
|
26
26
|
|
27
|
-
# kgio has
|
28
|
-
s.add_dependency(%q<kgio>, ['~> 2.
|
27
|
+
# kgio 2.5 has kgio_wait_* methods that take optional timeout args
|
28
|
+
s.add_dependency(%q<kgio>, ['~> 2.5'])
|
29
29
|
|
30
30
|
# we need Unicorn for the HTTP parser and process management
|
31
31
|
s.add_dependency(%q<unicorn>, ["~> 4.0"])
|
data/t/t0044-autopush.sh
CHANGED
@@ -49,8 +49,8 @@ check_TCP_CORK () {
|
|
49
49
|
done
|
50
50
|
|
51
51
|
test 2 -eq $(grep TCP_CORK $strace_out | wc -l)
|
52
|
-
fgrep 'SOL_TCP, TCP_CORK, [0],
|
53
|
-
fgrep 'SOL_TCP, TCP_CORK, [1],
|
52
|
+
fgrep 'SOL_TCP, TCP_CORK, [0],' $strace_out
|
53
|
+
fgrep 'SOL_TCP, TCP_CORK, [1],' $strace_out
|
54
54
|
}
|
55
55
|
|
56
56
|
t_begin "setup and start" && {
|
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: 59
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 4
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 4.0.0
|
10
|
+
version: 4.1.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: 2011-
|
18
|
+
date: 2011-07-30 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: rack
|
@@ -40,11 +40,11 @@ dependencies:
|
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
hash:
|
43
|
+
hash: 9
|
44
44
|
segments:
|
45
45
|
- 2
|
46
|
-
-
|
47
|
-
version: "2.
|
46
|
+
- 5
|
47
|
+
version: "2.5"
|
48
48
|
type: :runtime
|
49
49
|
version_requirements: *id002
|
50
50
|
- !ruby/object:Gem::Dependency
|