rainbows 1.0.0pre1 → 1.0.0

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.
data/.manifest CHANGED
@@ -164,6 +164,7 @@ t/t0015-working_directory.sh
164
164
  t/t0016-onenine-encoding-is-tricky.sh
165
165
  t/t0016.rb
166
166
  t/t0017-keepalive-timeout-zero.sh
167
+ t/t0018-reload-restore-settings.sh
167
168
  t/t0020-large-sendfile-response.sh
168
169
  t/t0021-sendfile-wrap-to_path.sh
169
170
  t/t0022-copy_stream-byte-range.sh
data/ChangeLog CHANGED
@@ -1,5 +1,72 @@
1
- ChangeLog from git://git.bogomips.org/rainbows.git (v0.97.0..v1.0.0pre1)
1
+ ChangeLog from git://git.bogomips.org/rainbows.git (v0.97.0..v1.0.0)
2
2
 
3
+ commit 9f185041fb7af4cda21ba2d547fd4d16d9b2e453
4
+ Author: Eric Wong <normalperson@yhbt.net>
5
+ Date: Thu Oct 28 08:42:09 2010 +0000
6
+
7
+ Rainbows! 1.0.0 - internal cleanups
8
+
9
+ This release is merely a milestone in our evolving internal API.
10
+ Use of kgio may result in performance improvements under Ruby
11
+ 1.9.2 with non-blocking I/O-intensive workloads.
12
+
13
+ The only bugfix is that SIGHUP reloads restores defaults on
14
+ unset settings. A similar fix is included in Unicorn 2.0.0
15
+ as well.
16
+
17
+ commit 015635f877084cc05a9e6e4c1430c70279d0a04e
18
+ Author: Eric Wong <normalperson@yhbt.net>
19
+ Date: Thu Oct 28 08:40:12 2010 +0000
20
+
21
+ tests: avoid race conditions on reload tests
22
+
23
+ We need to ensure the old worker is really dead before sending
24
+ requests after reloading.
25
+
26
+ commit b06c6b3ac214bc598d499c994884113d5b106e90
27
+ Author: Eric Wong <normalperson@yhbt.net>
28
+ Date: Thu Oct 28 08:29:53 2010 +0000
29
+
30
+ t0018: wait for old worker to be reaped
31
+
32
+ On busy machines, old workers may not shutdown quickly
33
+ enough and may still be processing requests.
34
+
35
+ commit f84f138233be0607b0151a5a28c3f9190ba336a2
36
+ Author: Eric Wong <normalperson@yhbt.net>
37
+ Date: Thu Oct 28 08:20:37 2010 +0000
38
+
39
+ rev+event_machine: small cleanups with new parser API
40
+
41
+ These allow for small reductions in the amount of variables
42
+ we have to manage, more changes coming with later Unicorns.
43
+
44
+ commit c4579db76b9ed5b0286fad852e798e8a890f093c
45
+ Author: Eric Wong <normalperson@yhbt.net>
46
+ Date: Thu Oct 28 02:17:25 2010 +0000
47
+
48
+ HUP reload restores defaults on unset settings
49
+
50
+ For consistency, changed settings are reset back to
51
+ their default values if they are removed or commented
52
+ out from the config file.
53
+
54
+ commit 83644e02068311c7ff9cdbc63efd4764d1518138
55
+ Author: Eric Wong <normalperson@yhbt.net>
56
+ Date: Wed Oct 27 23:52:28 2010 +0000
57
+
58
+ use Unicorn 2.0.0 final
59
+
60
+ Unicorn 2.0.0 has CPU wakeup reductions.
61
+
62
+ commit 2b9503566759678c9fbd7b01d1b5f487854208db
63
+ Author: Eric Wong <normalperson@yhbt.net>
64
+ Date: Tue Oct 26 21:36:02 2010 +0000
65
+
66
+ Rakefile: updates for prereleases
67
+
68
+ We do prereleases, now.
69
+
3
70
  commit a47cd4a7f392a76357ed4f3e458797ae1f9c8f25
4
71
  Author: Eric Wong <normalperson@yhbt.net>
5
72
  Date: Tue Oct 26 21:26:03 2010 +0000
data/GIT-VERSION-FILE CHANGED
@@ -1 +1 @@
1
- GIT_VERSION = 1.0.0pre1
1
+ GIT_VERSION = 1.0.0
data/GIT-VERSION-GEN CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/bin/sh
2
2
 
3
3
  GVF=GIT-VERSION-FILE
4
- DEF_VER=v1.0.0pre1.GIT
4
+ DEF_VER=v1.0.0.GIT
5
5
 
6
6
  LF='
7
7
  '
data/NEWS CHANGED
@@ -1,3 +1,21 @@
1
+ === 1.0.0 / 2010-10-28 09:01 UTC
2
+
3
+ This release is merely a milestone in our evolving internal API.
4
+ Use of kgio may result in performance improvements under Ruby
5
+ 1.9.2 with non-blocking I/O-intensive workloads.
6
+
7
+ The only bugfix is that SIGHUP reloads restores defaults on
8
+ unset settings. A similar fix is included in Unicorn 2.0.0
9
+ as well.
10
+
11
+ === 1.0.0pre1 / 2010-10-26 21:33 UTC
12
+
13
+ Mostly internal changes for kgio (and Unicorn) integration.
14
+ There should be no (supported) user-visible changes from
15
+ Rainbows! 0.97.0. kgio should improve performance for
16
+ concurrency models that use non-blocking I/O internally,
17
+ especially under Ruby 1.9.2
18
+
1
19
  === 0.97.0 / 2010-08-28 19:46 UTC
2
20
 
3
21
  We now depend on Unicorn 1.1.3 to avoid race conditions during
data/Rakefile CHANGED
@@ -7,7 +7,7 @@ autoload :Tempfile, 'tempfile'
7
7
  def tags
8
8
  timefmt = '%Y-%m-%dT%H:%M:%SZ'
9
9
  @tags ||= `git tag -l`.split(/\n/).map do |tag|
10
- if %r{\Av[\d\.]+\z} =~ tag
10
+ if %r{\Av[\d\.]+} =~ tag
11
11
  header, subject, body = `git cat-file tag #{tag}`.split(/\n\n/, 3)
12
12
  header = header.split(/\n/)
13
13
  tagger = header.grep(/\Atagger /).first
@@ -192,7 +192,11 @@ task :fm_update do
192
192
  "changelog" => changelog,
193
193
  },
194
194
  }.to_json
195
- Net::HTTP.start(uri.host, uri.port) do |http|
196
- p http.post(uri.path, req, {'Content-Type'=>'application/json'})
195
+ if ! changelog.strip.empty? && version =~ %r{\A[\d\.]+\d+\z}
196
+ Net::HTTP.start(uri.host, uri.port) do |http|
197
+ p http.post(uri.path, req, {'Content-Type'=>'application/json'})
198
+ end
199
+ else
200
+ warn "not updating freshmeat for v#{version}"
197
201
  end
198
202
  end
@@ -2,7 +2,7 @@
2
2
  # :enddoc:
3
3
  module Rainbows::Const
4
4
 
5
- RAINBOWS_VERSION = '1.0.0pre1'
5
+ RAINBOWS_VERSION = '1.0.0'
6
6
 
7
7
  include Unicorn::Const
8
8
 
@@ -14,10 +14,10 @@ module Rainbows::EvCore
14
14
  ASYNC_CLOSE = "async.close".freeze
15
15
 
16
16
  def post_init
17
- @env = {}
18
17
  @hp = HttpParser.new
18
+ @env = @hp.env
19
+ @buf = @hp.buf
19
20
  @state = :headers # [ :body [ :trailers ] ] :app_call :close
20
- @buf = ""
21
21
  end
22
22
 
23
23
  # graceful exit, like SIGQUIT
@@ -47,7 +47,8 @@ module Rainbows::EvCore
47
47
  def on_read(data)
48
48
  case @state
49
49
  when :headers
50
- @hp.headers(@env, @buf << data) or return
50
+ @buf << data
51
+ @hp.parse or return
51
52
  @state = :body
52
53
  len = @hp.content_length
53
54
  if len == 0
@@ -94,7 +94,6 @@ module Rainbows::EventMachine
94
94
  alive = @hp.keepalive? && G.alive && G.kato > 0
95
95
  em_write_response(response, alive)
96
96
  if alive
97
- @env.clear
98
97
  @hp.reset
99
98
  @state = :headers
100
99
  if @buf.empty?
@@ -24,8 +24,6 @@ class Rainbows::HttpServer < Unicorn::HttpServer
24
24
  G.quit! # let the master reopen and refork us
25
25
  end
26
26
 
27
- #:stopdoc:
28
- #
29
27
  # Add one second to the timeout since our fchmod heartbeat is less
30
28
  # precise (and must be more conservative) than Unicorn does. We
31
29
  # handle many clients per process and can't chmod on every
@@ -35,7 +33,23 @@ class Rainbows::HttpServer < Unicorn::HttpServer
35
33
  def timeout=(nr)
36
34
  @timeout = nr + 1
37
35
  end
38
- #:startdoc:
36
+
37
+ def load_config!
38
+ use :Base
39
+ G.kato = 5
40
+ Rainbows.max_bytes = 1024 * 1024
41
+ @worker_connections = nil
42
+ super
43
+ @worker_connections ||= Rainbows::MODEL_WORKER_CONNECTIONS[@use]
44
+ end
45
+
46
+ def ready_pipe=(v)
47
+ # hacky hook got force Rainbows! to load modules only in workers
48
+ if @master_pid && @master_pid == Process.ppid
49
+ extend(Rainbows.const_get(@use))
50
+ end
51
+ super
52
+ end
39
53
 
40
54
  def use(*args)
41
55
  model = args.shift or return @use
@@ -49,7 +63,6 @@ class Rainbows::HttpServer < Unicorn::HttpServer
49
63
 
50
64
  Module === mod or
51
65
  raise ArgumentError, "concurrency model #{model.inspect} not supported"
52
- extend(mod)
53
66
  args.each do |opt|
54
67
  case opt
55
68
  when Hash; O.update(opt)
@@ -61,11 +74,8 @@ class Rainbows::HttpServer < Unicorn::HttpServer
61
74
  new_defaults = {
62
75
  'rainbows.model' => (@use = model.to_sym),
63
76
  'rack.multithread' => !!(model.to_s =~ /Thread/),
77
+ 'rainbows.autochunk' => [:Rev,:EventMachine,:NeverBlock].include?(@use),
64
78
  }
65
- case @use
66
- when :Rev, :EventMachine, :NeverBlock
67
- new_defaults['rainbows.autochunk'] = true
68
- end
69
79
  Rainbows::Const::RACK_DEFAULTS.update(new_defaults)
70
80
  end
71
81
 
@@ -31,8 +31,11 @@ module Rainbows
31
31
  raise ArgumentError, "pool_size must a be an Integer > 0"
32
32
  mod = Rainbows.const_get(O[:backend])
33
33
  require "never_block" # require EM first since we need a higher version
34
- G.server.extend(mod)
35
- G.server.extend(Core)
34
+ end
35
+
36
+ def self.extended(klass)
37
+ klass.extend(Rainbows.const_get(O[:backend])) # EventMachine
38
+ klass.extend(Core)
36
39
  end
37
40
 
38
41
  module Core # :nodoc: all
@@ -109,7 +109,6 @@ module Rainbows
109
109
 
110
110
  rev_write_response(response, alive = @hp.keepalive? && G.alive)
111
111
  return quit unless alive && :close != @state
112
- @env.clear
113
112
  @hp.reset
114
113
  @state = :headers
115
114
  disable if enabled?
@@ -131,7 +130,7 @@ module Rainbows
131
130
  when :close
132
131
  close if @_write_buffer.empty?
133
132
  when :headers
134
- if @hp.headers(@env, @buf)
133
+ if @hp.parse
135
134
  app_call
136
135
  else
137
136
  unless enabled?
@@ -24,7 +24,6 @@ module Rainbows
24
24
  rev_write_response(response, alive)
25
25
  return quit unless alive && :close != @state
26
26
 
27
- @env.clear
28
27
  @hp.reset
29
28
  @state = :headers
30
29
  end
data/rainbows.gemspec CHANGED
@@ -44,7 +44,7 @@ Gem::Specification.new do |s|
44
44
  s.add_dependency(%q<rack>, ['~> 1.1'])
45
45
 
46
46
  # we need Unicorn for the HTTP parser and process management
47
- s.add_dependency(%q<unicorn>, ["~> 2.0.0pre3"])
47
+ s.add_dependency(%q<unicorn>, ["~> 2.0.0"])
48
48
  s.add_development_dependency(%q<isolate>, "~> 3.0.0")
49
49
 
50
50
  # optional runtime dependencies depending on configuration
@@ -29,12 +29,8 @@ t_begin "introduce syntax error in rackup file" && {
29
29
  t_begin "reload signal succeeds" && {
30
30
  kill -HUP $rainbows_pid
31
31
  rainbows_wait_start
32
- while ! egrep '(done|error) reloading' $r_err >/dev/null
33
- do
34
- sleep 1
35
- done
36
-
37
- grep 'error reloading' $r_err >/dev/null
32
+ wait_for_reload $r_err error
33
+ wait_for_reap
38
34
  > $r_err
39
35
  }
40
36
 
@@ -30,12 +30,8 @@ t_begin "modify rackup file" && {
30
30
  t_begin "reload signal succeeds" && {
31
31
  kill -HUP $rainbows_pid
32
32
  rainbows_wait_start
33
- while ! egrep '(done|error) reloading' < $r_err >/dev/null
34
- do
35
- sleep 1
36
- done
37
-
38
- grep 'done reloading' $r_err >/dev/null
33
+ wait_for_reload
34
+ wait_for_reap
39
35
  }
40
36
 
41
37
  t_begin "hit with curl" && {
@@ -0,0 +1,53 @@
1
+ #!/bin/sh
2
+ . ./test-lib.sh
3
+ t_plan 8 "reload restore settings for $model"
4
+
5
+ t_begin "setup and start" && {
6
+ rtmpfiles orig_config
7
+ rainbows_setup
8
+ cat $unicorn_config > $orig_config
9
+ rainbows -D -c $unicorn_config -l $listen env.ru
10
+ rainbows_wait_start
11
+ }
12
+
13
+ t_begin "HTTP request confirms we're running the correct model" && {
14
+ curl -sSfv http://$listen/ | grep "\"rainbows.model\"=>:$model"
15
+ }
16
+
17
+ t_begin "clobber config and reload" && {
18
+ cat > $unicorn_config <<EOF
19
+ stderr_path "$r_err"
20
+ EOF
21
+ kill -HUP $rainbows_pid
22
+ wait_for_reload
23
+ wait_for_reap
24
+ }
25
+
26
+ t_begin "HTTP request confirms we're on the default model" && {
27
+ curl -sSfv http://$listen/ | \
28
+ grep "\"rainbows.model\"=>:Base" >/dev/null
29
+ }
30
+
31
+ t_begin "restore config and reload" && {
32
+ cat $orig_config > $unicorn_config
33
+ > $r_err
34
+ kill -HUP $rainbows_pid
35
+ rainbows_wait_start
36
+ wait_for_reload
37
+ wait_for_reap
38
+ }
39
+
40
+ t_begin "HTTP request confirms we're back on the correct model" && {
41
+ curl -sSfv http://$listen/ | \
42
+ grep "\"rainbows.model\"=>:$model" >/dev/null
43
+ }
44
+
45
+ t_begin "killing succeeds" && {
46
+ kill $rainbows_pid
47
+ }
48
+
49
+ t_begin "check stderr" && {
50
+ check_stderr
51
+ }
52
+
53
+ t_done
data/t/test-lib.sh CHANGED
@@ -148,6 +148,31 @@ rainbows_wait_start () {
148
148
  rainbows_pid=$(cat $pid)
149
149
  }
150
150
 
151
+ wait_for_reload () {
152
+ case $# in
153
+ 0) err_log=$r_err status=done ;;
154
+ 1) err_log=$1 status=done ;;
155
+ 2) err_log=$1 status=$2 ;;
156
+ esac
157
+ while ! egrep '(done|error) reloading' < $err_log >/dev/null
158
+ do
159
+ sleep 1
160
+ done
161
+ grep "$status reloading" $err_log >/dev/null
162
+ }
163
+
164
+ wait_for_reap () {
165
+ case $# in
166
+ 0) err_log=$r_err ;;
167
+ 1) err_log=$1 ;;
168
+ esac
169
+
170
+ while ! grep reaped < $err_log >/dev/null
171
+ do
172
+ sleep 1
173
+ done
174
+ }
175
+
151
176
  rsha1 () {
152
177
  _cmd="$(which sha1sum 2>/dev/null || :)"
153
178
  test -n "$_cmd" || _cmd="$(which openssl 2>/dev/null || :) sha1"
data/t/test_isolate.rb CHANGED
@@ -16,7 +16,7 @@ $stdout.reopen($stderr)
16
16
  Isolate.now!(opts) do
17
17
  gem 'rack', '1.1.0' # Cramp currently requires ~> 1.1.0
18
18
  gem 'kgio', '1.3.1'
19
- gem 'unicorn', '2.0.0pre3'
19
+ gem 'unicorn', '2.0.0'
20
20
  gem 'kcar', '0.1.1'
21
21
 
22
22
  if engine == "ruby"
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: -766259895
5
- prerelease: true
4
+ hash: 23
5
+ prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 0pre1
10
- version: 1.0.0pre1
9
+ - 0
10
+ version: 1.0.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: 2010-10-26 00:00:00 +00:00
18
+ date: 2010-10-28 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -41,12 +41,12 @@ dependencies:
41
41
  requirements:
42
42
  - - ~>
43
43
  - !ruby/object:Gem::Version
44
- hash: -766259860
44
+ hash: 15
45
45
  segments:
46
46
  - 2
47
47
  - 0
48
- - 0pre3
49
- version: 2.0.0pre3
48
+ - 0
49
+ version: 2.0.0
50
50
  type: :runtime
51
51
  version_requirements: *id002
52
52
  - !ruby/object:Gem::Dependency
@@ -321,6 +321,7 @@ files:
321
321
  - t/t0016-onenine-encoding-is-tricky.sh
322
322
  - t/t0016.rb
323
323
  - t/t0017-keepalive-timeout-zero.sh
324
+ - t/t0018-reload-restore-settings.sh
324
325
  - t/t0020-large-sendfile-response.sh
325
326
  - t/t0021-sendfile-wrap-to_path.sh
326
327
  - t/t0022-copy_stream-byte-range.sh
@@ -383,14 +384,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
383
384
  required_rubygems_version: !ruby/object:Gem::Requirement
384
385
  none: false
385
386
  requirements:
386
- - - ">"
387
+ - - ">="
387
388
  - !ruby/object:Gem::Version
388
- hash: 25
389
+ hash: 3
389
390
  segments:
390
- - 1
391
- - 3
392
- - 1
393
- version: 1.3.1
391
+ - 0
392
+ version: "0"
394
393
  requirements: []
395
394
 
396
395
  rubyforge_project: rainbows