unicorn 1.1.2 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
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.1.2.GIT
4
+ DEF_VER=v1.1.3.GIT
5
5
 
6
6
  LF='
7
7
  '
data/Rakefile CHANGED
@@ -207,7 +207,7 @@ task :isolate do
207
207
  status.success? or abort status.inspect
208
208
 
209
209
  # pure Ruby gems can be shared across all Rubies
210
- %w(3.0.0.beta4).each do |rails_ver|
210
+ %w(3.0.0.rc2).each do |rails_ver|
211
211
  opts[:path] = "tmp/isolate/rails-#{rails_ver}"
212
212
  pid = fork { Isolate.now!(opts) { gem 'rails', rails_ver } }
213
213
  _, status = Process.waitpid2(pid)
data/bin/unicorn CHANGED
@@ -10,8 +10,9 @@ host, port = Unicorn::Const::DEFAULT_HOST, Unicorn::Const::DEFAULT_PORT
10
10
  set_listener = false
11
11
 
12
12
  opts = OptionParser.new("", 24, ' ') do |opts|
13
- opts.banner = "Usage: #{File.basename($0)} " \
14
- "[ruby options] [unicorn options] [rackup config file]"
13
+ cmd = File.basename($0)
14
+ opts.banner = "Usage: #{cmd} " \
15
+ "[ruby options] [#{cmd} options] [rackup config file]"
15
16
 
16
17
  opts.separator "Ruby options:"
17
18
 
@@ -39,7 +40,7 @@ opts = OptionParser.new("", 24, ' ') do |opts|
39
40
  require library
40
41
  end
41
42
 
42
- opts.separator "Unicorn options:"
43
+ opts.separator "#{cmd} options:"
43
44
 
44
45
  # some of these switches exist for rackup command-line compatibility,
45
46
 
@@ -100,7 +101,7 @@ opts = OptionParser.new("", 24, ' ') do |opts|
100
101
  end
101
102
 
102
103
  opts.on_tail("-v", "--version", "Show version") do
103
- puts "unicorn v#{Unicorn::Const::UNICORN_VERSION}"
104
+ puts "#{cmd} v#{Unicorn::Const::UNICORN_VERSION}"
104
105
  exit
105
106
  end
106
107
 
data/bin/unicorn_rails CHANGED
@@ -100,7 +100,7 @@ opts = OptionParser.new("", 24, ' ') do |opts|
100
100
  end
101
101
 
102
102
  opts.on_tail("-v", "--version", "Show version") do
103
- puts " v#{Unicorn::Const::UNICORN_VERSION}"
103
+ puts "#{cmd} v#{Unicorn::Const::UNICORN_VERSION}"
104
104
  exit
105
105
  end
106
106
 
data/lib/unicorn.rb CHANGED
@@ -423,10 +423,12 @@ module Unicorn
423
423
  respawn = false
424
424
  logger.info "gracefully stopping all workers"
425
425
  kill_each_worker(:QUIT)
426
+ self.worker_processes = 0
426
427
  else
427
428
  logger.info "SIGWINCH ignored because we're not daemonized"
428
429
  end
429
430
  when :TTIN
431
+ respawn = true
430
432
  self.worker_processes += 1
431
433
  when :TTOU
432
434
  self.worker_processes -= 1 if self.worker_processes > 0
data/lib/unicorn/const.rb CHANGED
@@ -8,8 +8,8 @@ module Unicorn
8
8
  # Symbols did not really improve things much compared to constants.
9
9
  module Const
10
10
 
11
- # The current version of Unicorn, currently 1.1.2
12
- UNICORN_VERSION="1.1.2"
11
+ # The current version of Unicorn, currently 1.1.3
12
+ UNICORN_VERSION="1.1.3"
13
13
 
14
14
  DEFAULT_HOST = "0.0.0.0" # default TCP listen host address
15
15
  DEFAULT_PORT = 8080 # default TCP listen port
data/lib/unicorn/util.rb CHANGED
@@ -24,6 +24,8 @@ module Unicorn
24
24
  fp.sync &&
25
25
  fp.path[0] == ?/ &&
26
26
  (fp.fcntl(Fcntl::F_GETFL) & append_flags) == append_flags
27
+ rescue IOError, Errno::EBADF
28
+ false
27
29
  end
28
30
 
29
31
  def chown_logs(uid, gid)
@@ -46,20 +48,32 @@ module Unicorn
46
48
  ObjectSpace.each_object(File) { |fp| is_log?(fp) and to_reopen << fp }
47
49
 
48
50
  to_reopen.each do |fp|
49
- orig_st = fp.stat
51
+ orig_st = begin
52
+ fp.stat
53
+ rescue IOError, Errno::EBADF
54
+ next
55
+ end
56
+
50
57
  begin
51
58
  b = File.stat(fp.path)
52
59
  next if orig_st.ino == b.ino && orig_st.dev == b.dev
53
60
  rescue Errno::ENOENT
54
61
  end
55
62
 
56
- File.open(fp.path, 'a') { |tmpfp| fp.reopen(tmpfp) }
57
- fp.sync = true
58
- new_st = fp.stat
59
- if orig_st.uid != new_st.uid || orig_st.gid != new_st.gid
60
- fp.chown(orig_st.uid, orig_st.gid)
63
+ begin
64
+ File.open(fp.path, 'a') { |tmpfp| fp.reopen(tmpfp) }
65
+ fp.sync = true
66
+ new_st = fp.stat
67
+
68
+ # this should only happen in the master:
69
+ if orig_st.uid != new_st.uid || orig_st.gid != new_st.gid
70
+ fp.chown(orig_st.uid, orig_st.gid)
71
+ end
72
+
73
+ nr += 1
74
+ rescue IOError, Errno::EBADF
75
+ # not much we can do...
61
76
  end
62
- nr += 1
63
77
  end
64
78
 
65
79
  nr
data/t/rails3-app/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
- # gem 'rails', '3.0.0.beta3'
3
+ # gem 'rails', '3.0.0.rc2'
4
4
 
5
5
  # Bundle edge Rails instead:
6
6
  # gem 'rails', :git => 'git://github.com/rails/rails.git'
@@ -0,0 +1,59 @@
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
data/t/test-rails3.sh CHANGED
@@ -1,5 +1,5 @@
1
1
  . ./test-lib.sh
2
- RAILS_VERSION=${RAILS_VERSION-3.0.0.beta4}
2
+ RAILS_VERSION=${RAILS_VERSION-3.0.0.rc2}
3
3
  case $RUBY_VERSION in
4
4
  1.8.7|1.9.2) ;;
5
5
  *)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unicorn
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 1
9
- - 2
10
- version: 1.1.2
9
+ - 3
10
+ version: 1.1.3
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-07-13 00:00:00 +00:00
18
+ date: 2010-08-28 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -211,6 +211,7 @@ files:
211
211
  - t/t0006.ru
212
212
  - t/t0007-working_directory_no_embed_cli.sh
213
213
  - t/t0008-back_out_of_upgrade.sh
214
+ - t/t0009-winch_ttin.sh
214
215
  - t/t0300-rails3-basic.sh
215
216
  - t/t0301-rails3-missing-config-ru.sh
216
217
  - t/t0302-rails3-alt-working_directory.sh