unicorn 1.0.2 → 1.1.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.
@@ -32,7 +32,6 @@ require 'tempfile'
32
32
  require 'fileutils'
33
33
  require 'logger'
34
34
  require 'unicorn'
35
- require 'unicorn_http'
36
35
 
37
36
  if ENV['DEBUG']
38
37
  require 'ruby-debug'
@@ -146,4 +146,28 @@ class TestSocketHelper < Test::Unit::TestCase
146
146
  sock_name(@unix_server)
147
147
  end
148
148
 
149
+ def test_tcp_defer_accept_default
150
+ port = unused_port @test_addr
151
+ name = "#@test_addr:#{port}"
152
+ sock = bind_listen(name)
153
+ cur = sock.getsockopt(Socket::SOL_TCP, TCP_DEFER_ACCEPT).unpack('i')[0]
154
+ assert cur >= 1
155
+ end if defined?(TCP_DEFER_ACCEPT)
156
+
157
+ def test_tcp_defer_accept_disable
158
+ port = unused_port @test_addr
159
+ name = "#@test_addr:#{port}"
160
+ sock = bind_listen(name, :tcp_defer_accept => false)
161
+ cur = sock.getsockopt(Socket::SOL_TCP, TCP_DEFER_ACCEPT).unpack('i')[0]
162
+ assert_equal 0, cur
163
+ end if defined?(TCP_DEFER_ACCEPT)
164
+
165
+ def test_tcp_defer_accept_nr
166
+ port = unused_port @test_addr
167
+ name = "#@test_addr:#{port}"
168
+ sock = bind_listen(name, :tcp_defer_accept => 60)
169
+ cur = sock.getsockopt(Socket::SOL_TCP, TCP_DEFER_ACCEPT).unpack('i')[0]
170
+ assert cur > 1
171
+ end if defined?(TCP_DEFER_ACCEPT)
172
+
149
173
  end
@@ -36,7 +36,7 @@ Gem::Specification.new do |s|
36
36
  s.homepage = %q{http://unicorn.bogomips.org/}
37
37
 
38
38
  summary = %q{Rack HTTP server for fast clients and Unix}
39
- s.rdoc_options = [ "-t", "Unicorn: #{summary}" ]
39
+ s.rdoc_options = [ "-Na", "-t", "Unicorn: #{summary}" ]
40
40
  s.require_paths = %w(lib ext)
41
41
  s.rubyforge_project = %q{mongrel}
42
42
  s.summary = summary
@@ -49,7 +49,7 @@ Gem::Specification.new do |s|
49
49
  # *strongly* recommended for security reasons.
50
50
  s.add_dependency(%q<rack>)
51
51
 
52
- s.add_development_dependency('isolate', '~> 3.0.0')
52
+ s.add_development_dependency('isolate', '~> 2.0.2')
53
53
 
54
54
  # s.licenses = %w(GPLv2 Ruby) # licenses= method is not in older RubyGems
55
55
  end
metadata CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
+ - 1
8
9
  - 0
9
- - 2
10
- version: 1.0.2
10
+ version: 1.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Unicorn hackers
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-27 00:00:00 +00:00
18
+ date: 2010-07-08 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -40,12 +40,12 @@ dependencies:
40
40
  requirements:
41
41
  - - ~>
42
42
  - !ruby/object:Gem::Version
43
- hash: 7
43
+ hash: 11
44
44
  segments:
45
- - 3
46
- - 0
45
+ - 2
47
46
  - 0
48
- version: 3.0.0
47
+ - 2
48
+ version: 2.0.2
49
49
  type: :development
50
50
  version_requirements: *id002
51
51
  description: |-
@@ -169,7 +169,6 @@ files:
169
169
  - t/bin/utee
170
170
  - t/env.ru
171
171
  - t/my-tap-lib.sh
172
- - t/pid.ru
173
172
  - t/rails3-app/.gitignore
174
173
  - t/rails3-app/Gemfile
175
174
  - t/rails3-app/Rakefile
@@ -210,9 +209,6 @@ files:
210
209
  - t/t0006-reopen-logs.sh
211
210
  - t/t0006.ru
212
211
  - t/t0007-working_directory_no_embed_cli.sh
213
- - t/t0008-back_out_of_upgrade.sh
214
- - t/t0009-winch_ttin.sh
215
- - t/t0012-reload-empty-config.sh
216
212
  - t/t0300-rails3-basic.sh
217
213
  - t/t0301-rails3-missing-config-ru.sh
218
214
  - t/t0302-rails3-alt-working_directory.sh
@@ -321,6 +317,7 @@ licenses: []
321
317
 
322
318
  post_install_message:
323
319
  rdoc_options:
320
+ - -Na
324
321
  - -t
325
322
  - "Unicorn: Rack HTTP server for fast clients and Unix"
326
323
  require_paths:
data/t/pid.ru DELETED
@@ -1,3 +0,0 @@
1
- use Rack::ContentLength
2
- use Rack::ContentType, "text/plain"
3
- run lambda { |env| [ 200, {}, [ "#$$\n" ] ] }
@@ -1,110 +0,0 @@
1
- #!/bin/sh
2
- . ./test-lib.sh
3
- t_plan 13 "backout of USR2 upgrade"
4
-
5
- worker_wait_start () {
6
- test xSTART = x"$(cat $fifo)"
7
- unicorn_pid=$(cat $pid)
8
- }
9
-
10
- t_begin "setup and start" && {
11
- unicorn_setup
12
- rm -f $pid.oldbin
13
-
14
- cat >> $unicorn_config <<EOF
15
- after_fork do |server, worker|
16
- # test script will block while reading from $fifo,
17
- # so notify the script on the first worker we spawn
18
- # by opening the FIFO
19
- if worker.nr == 0
20
- File.open("$fifo", "wb") { |fp| fp.syswrite "START" }
21
- end
22
- end
23
- EOF
24
- unicorn -D -c $unicorn_config pid.ru
25
- worker_wait_start
26
- orig_master_pid=$unicorn_pid
27
- }
28
-
29
- t_begin "read original worker pid" && {
30
- orig_worker_pid=$(curl -sSf http://$listen/)
31
- test -n "$orig_worker_pid" && kill -0 $orig_worker_pid
32
- }
33
-
34
- t_begin "upgrade to new master" && {
35
- kill -USR2 $orig_master_pid
36
- }
37
-
38
- t_begin "kill old worker" && {
39
- kill -WINCH $orig_master_pid
40
- }
41
-
42
- t_begin "wait for new worker to start" && {
43
- worker_wait_start
44
- test $unicorn_pid -ne $orig_master_pid
45
- new_master_pid=$unicorn_pid
46
- }
47
-
48
- t_begin "old master pid is stashed in $pid.oldbin" && {
49
- test -s "$pid.oldbin"
50
- test $orig_master_pid -eq $(cat $pid.oldbin)
51
- }
52
-
53
- t_begin "ensure old worker is no longer running" && {
54
- i=0
55
- while kill -0 $orig_worker_pid 2>/dev/null
56
- do
57
- i=$(( $i + 1 ))
58
- test $i -lt 600 || die "timed out"
59
- sleep 1
60
- done
61
- }
62
-
63
- t_begin "capture pid of new worker" && {
64
- new_worker_pid=$(curl -sSf http://$listen/)
65
- }
66
-
67
- t_begin "reload old master process" && {
68
- kill -HUP $orig_master_pid
69
- worker_wait_start
70
- }
71
-
72
- t_begin "gracefully kill new master and ensure it dies" && {
73
- kill -QUIT $new_master_pid
74
- i=0
75
- while kill -0 $new_worker_pid 2>/dev/null
76
- do
77
- i=$(( $i + 1 ))
78
- test $i -lt 600 || die "timed out"
79
- sleep 1
80
- done
81
- }
82
-
83
- t_begin "ensure $pid.oldbin does not exist" && {
84
- i=0
85
- while test -s $pid.oldbin
86
- do
87
- i=$(( $i + 1 ))
88
- test $i -lt 600 || die "timed out"
89
- sleep 1
90
- done
91
- while ! test -s $pid
92
- do
93
- i=$(( $i + 1 ))
94
- test $i -lt 600 || die "timed out"
95
- sleep 1
96
- done
97
- }
98
-
99
- t_begin "ensure $pid is correct" && {
100
- cur_master_pid=$(cat $pid)
101
- test $orig_master_pid -eq $cur_master_pid
102
- }
103
-
104
- t_begin "killing succeeds" && {
105
- kill $orig_master_pid
106
- }
107
-
108
- dbgcat r_err
109
-
110
- t_done
@@ -1,59 +0,0 @@
1
- #!/bin/sh
2
- . ./test-lib.sh
3
- t_plan 8 "SIGTTIN succeeds after SIGWINCH"
4
-
5
- t_begin "setup and start" && {
6
- unicorn_setup
7
- cat >> $unicorn_config <<EOF
8
- after_fork do |server, worker|
9
- # test script will block while reading from $fifo,
10
- File.open("$fifo", "wb") { |fp| fp.syswrite worker.nr.to_s }
11
- end
12
- EOF
13
- unicorn -D -c $unicorn_config pid.ru
14
- unicorn_wait_start
15
- test 0 -eq $(cat $fifo) || die "worker.nr != 0"
16
- }
17
-
18
- t_begin "read worker pid" && {
19
- orig_worker_pid=$(curl -sSf http://$listen/)
20
- test -n "$orig_worker_pid" && kill -0 $orig_worker_pid
21
- }
22
-
23
- t_begin "stop all workers" && {
24
- kill -WINCH $unicorn_pid
25
- }
26
-
27
- # we have to do this next step before delivering TTIN
28
- # signals aren't guaranteed to delivered in order
29
- t_begin "wait for worker to die" && {
30
- i=0
31
- while kill -0 $orig_worker_pid 2>/dev/null
32
- do
33
- i=$(( $i + 1 ))
34
- test $i -lt 600 || die "timed out"
35
- sleep 1
36
- done
37
- }
38
-
39
- t_begin "start one worker back up" && {
40
- kill -TTIN $unicorn_pid
41
- }
42
-
43
- t_begin "wait for new worker to start" && {
44
- test 0 -eq $(cat $fifo) || die "worker.nr != 0"
45
- new_worker_pid=$(curl -sSf http://$listen/)
46
- test -n "$new_worker_pid" && kill -0 $new_worker_pid
47
- test $orig_worker_pid -ne $new_worker_pid || \
48
- die "worker wasn't replaced"
49
- }
50
-
51
- t_begin "killing succeeds" && {
52
- kill $unicorn_pid
53
- }
54
-
55
- t_begin "check stderr" && check_stderr
56
-
57
- dbgcat r_err
58
-
59
- t_done
@@ -1,82 +0,0 @@
1
- #!/bin/sh
2
- . ./test-lib.sh
3
- t_plan 9 "reloading unset config resets defaults"
4
-
5
- t_begin "setup and start" && {
6
- unicorn_setup
7
- rtmpfiles unicorn_config_orig before_reload after_reload
8
- cat $unicorn_config > $unicorn_config_orig
9
- cat >> $unicorn_config <<EOF
10
- logger Logger.new(STDOUT)
11
- preload_app true
12
- timeout 0x7fffffff
13
- worker_processes 2
14
- after_fork { |s,w| }
15
- \$dump_cfg = lambda { |fp,srv|
16
- defaults = Unicorn::Configurator::DEFAULTS
17
- defaults.keys.map { |x| x.to_s }.sort.each do |key|
18
- next if key =~ %r{\Astd(?:err|out)_path\z}
19
- key = key.to_sym
20
- def_value = defaults[key]
21
- srv_value = srv.__send__(key)
22
- fp << "#{key}|#{srv_value}|#{def_value}\\n"
23
- end
24
- }
25
- before_fork { |s,w|
26
- File.open("$before_reload", "a") { |fp| \$dump_cfg.call(fp, s) }
27
- }
28
- before_exec { |s| }
29
- EOF
30
- unicorn -D -c $unicorn_config env.ru
31
- unicorn_wait_start
32
- }
33
-
34
- t_begin "ensure worker is started" && {
35
- curl -sSf http://$listen/ > $tmp
36
- }
37
-
38
- t_begin "replace config file with original(-ish)" && {
39
- grep -v ^pid < $unicorn_config_orig > $unicorn_config
40
- cat >> $unicorn_config <<EOF
41
- before_fork { |s,w|
42
- File.open("$after_reload", "a") { |fp| \$dump_cfg.call(fp, s) }
43
- }
44
- EOF
45
- }
46
-
47
- t_begin "reload signal succeeds" && {
48
- kill -HUP $unicorn_pid
49
- while ! egrep '(done|error) reloading' $r_err >/dev/null
50
- do
51
- sleep 1
52
- done
53
-
54
- grep 'done reloading' $r_err >/dev/null
55
- }
56
-
57
- t_begin "ensure worker is started" && {
58
- curl -sSf http://$listen/ > $tmp
59
- }
60
-
61
- t_begin "pid file no longer exists" && {
62
- if test -f $pid
63
- then
64
- die "pid=$pid should not exist"
65
- fi
66
- }
67
-
68
- t_begin "killing succeeds" && {
69
- kill $unicorn_pid
70
- }
71
-
72
- t_begin "check stderr" && {
73
- check_stderr
74
- }
75
-
76
- t_begin "ensure reloading restored settings" && {
77
- awk < $after_reload -F'|' '
78
- $1 != "before_fork" && $2 != $3 { print $0; exit(1) }
79
- '
80
- }
81
-
82
- t_done