about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2010-10-05 08:00:34 +0000
committerEric Wong <normalperson@yhbt.net>2010-10-05 08:00:34 +0000
commitfc820598da30509269ec84eeca598085ca296e38 (patch)
tree154845fae7123d4db8a2c1cac274e09c8369f23b
parent3d147e9bcd8f99c94900a00181692c2a09c3c3c9 (diff)
This hopefully makes things easier to read and follow.
-rw-r--r--lib/unicorn/util.rb106
1 files changed, 50 insertions, 56 deletions
diff --git a/lib/unicorn/util.rb b/lib/unicorn/util.rb
index 8ebdf05..82329eb 100644
--- a/lib/unicorn/util.rb
+++ b/lib/unicorn/util.rb
@@ -1,73 +1,67 @@
 # -*- encoding: binary -*-
 
-require 'fcntl'
+module Unicorn::Util
 
-module Unicorn
+# :stopdoc:
+  def self.is_log?(fp)
+    append_flags = File::WRONLY | File::APPEND
 
-  module Util
-    class << self
+    ! fp.closed? &&
+      fp.sync &&
+      fp.path[0] == ?/ &&
+      (fp.fcntl(Fcntl::F_GETFL) & append_flags) == append_flags
+    rescue IOError, Errno::EBADF
+      false
+  end
 
-      def is_log?(fp)
-        append_flags = File::WRONLY | File::APPEND
+  def self.chown_logs(uid, gid)
+    ObjectSpace.each_object(File) do |fp|
+      fp.chown(uid, gid) if is_log?(fp)
+    end
+  end
+# :startdoc:
 
-        ! fp.closed? &&
-          fp.sync &&
-          fp.path[0] == ?/ &&
-          (fp.fcntl(Fcntl::F_GETFL) & append_flags) == append_flags
-        rescue IOError, Errno::EBADF
-          false
-      end
+  # This reopens ALL logfiles in the process that have been rotated
+  # using logrotate(8) (without copytruncate) or similar tools.
+  # A +File+ object is considered for reopening if it is:
+  #   1) opened with the O_APPEND and O_WRONLY flags
+  #   2) opened with an absolute path (starts with "/")
+  #   3) the current open file handle does not match its original open path
+  #   4) unbuffered (as far as userspace buffering goes, not O_SYNC)
+  # Returns the number of files reopened
+  def self.reopen_logs
+    to_reopen = []
+    nr = 0
+    ObjectSpace.each_object(File) { |fp| is_log?(fp) and to_reopen << fp }
 
-      def chown_logs(uid, gid)
-        ObjectSpace.each_object(File) do |fp|
-          fp.chown(uid, gid) if is_log?(fp)
-        end
+    to_reopen.each do |fp|
+      orig_st = begin
+        fp.stat
+      rescue IOError, Errno::EBADF
+        next
       end
 
-      # This reopens ALL logfiles in the process that have been rotated
-      # using logrotate(8) (without copytruncate) or similar tools.
-      # A +File+ object is considered for reopening if it is:
-      #   1) opened with the O_APPEND and O_WRONLY flags
-      #   2) opened with an absolute path (starts with "/")
-      #   3) the current open file handle does not match its original open path
-      #   4) unbuffered (as far as userspace buffering goes, not O_SYNC)
-      # Returns the number of files reopened
-      def reopen_logs
-        to_reopen = []
-        nr = 0
-        ObjectSpace.each_object(File) { |fp| is_log?(fp) and to_reopen << fp }
-
-        to_reopen.each do |fp|
-          orig_st = begin
-            fp.stat
-          rescue IOError, Errno::EBADF
-            next
-          end
-
-          begin
-            b = File.stat(fp.path)
-            next if orig_st.ino == b.ino && orig_st.dev == b.dev
-          rescue Errno::ENOENT
-          end
-
-          begin
-            File.open(fp.path, 'a') { |tmpfp| fp.reopen(tmpfp) }
-            fp.sync = true
-            new_st = fp.stat
+      begin
+        b = File.stat(fp.path)
+        next if orig_st.ino == b.ino && orig_st.dev == b.dev
+      rescue Errno::ENOENT
+      end
 
-            # this should only happen in the master:
-            if orig_st.uid != new_st.uid || orig_st.gid != new_st.gid
-              fp.chown(orig_st.uid, orig_st.gid)
-            end
+      begin
+        File.open(fp.path, 'a') { |tmpfp| fp.reopen(tmpfp) }
+        fp.sync = true
+        new_st = fp.stat
 
-            nr += 1
-          rescue IOError, Errno::EBADF
-            # not much we can do...
-          end
+        # this should only happen in the master:
+        if orig_st.uid != new_st.uid || orig_st.gid != new_st.gid
+          fp.chown(orig_st.uid, orig_st.gid)
         end
 
-        nr
+        nr += 1
+      rescue IOError, Errno::EBADF
+        # not much we can do...
       end
     end
+    nr
   end
 end