raindrops RubyGem user+dev discussion/patches/pulls/bugs/help
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* [ANN] raindrops 0.10.0 - minor feature updates
@ 2012-06-19  8:33  7% Eric Wong
  0 siblings, 0 replies; 3+ results
From: Eric Wong @ 2012-06-19  8:33 UTC (permalink / raw)
  To: raindrops

Changes:

Improvements to the Unix domain socket handling and small
bugfixes throughout.

Support for the "unix_diag" facility in Linux 3.3+ is planned
but not yet implemented (patches to raindrops@librelist.org
appreciated)

Brian Corrigan (1):
      resolve symlinks to Unix domain sockets

Eric Wong (6):
      unix_listener_stats follows and remembers symlinks
      middleware/proxy: favor __send__ for method dispatch
      unix: show zero-value stats for idle listeners
      test_watcher: fix incorrect request/date comparison
      watcher: sort index of listener listing
      watcher: do not require Rack::Head for HEAD response

See "git log v0.9.0..v0.10.0" for full details

* http://raindrops.bogomips.org/
* raindrops@librelist.org
* git://bogomips.org/raindrops.git
* http://raindrops.bogomips.org/NEWS.atom.xml

-- 
Eric Wong


^ permalink raw reply	[relevance 7%]

* [PATCH] unix: show zero-value stats for idle listeners
@ 2012-06-13  1:39  6% Eric Wong
  0 siblings, 0 replies; 3+ results
From: Eric Wong @ 2012-06-13  1:39 UTC (permalink / raw)
  To: raindrops

When unix_listener_stats is called without arguments, it should
still match the behavior of tcp_listener_stats and return
ListenerStats object with zero values.

This allows callers to iterate through the results to find the
pathnames of all the Unix domain sockets in in listen mode.
---
  Pushed to "master" git://bogomips.org/raindrops

  I'm thinking about releasing raindrops v0.10.0 soon.

  I probably won't have time to use unix_diag functionality in the
  Linux 3.3 kernel.  I'm also lacking motivation since it'll be a
  while before Linux 3.3 is widely-available on servers, and I'm
  still supporting raindrops on 2.6.18 kernels :<

  Brian Corrigan (1):
        resolve symlinks to Unix domain sockets

  Eric Wong (3):
        unix_listener_stats follows and remembers symlinks
        middleware/proxy: favor __send__ for method dispatch
        unix: show zero-value stats for idle listeners

 lib/raindrops/linux.rb | 14 ++++++++++----
 test/test_linux.rb     | 11 +++++++++++
 2 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/lib/raindrops/linux.rb b/lib/raindrops/linux.rb
index 1752b8a..7cfb653 100644
--- a/lib/raindrops/linux.rb
+++ b/lib/raindrops/linux.rb
@@ -54,14 +54,20 @@ module Raindrops::Linux
         Regexp.escape(path)
       end
     end
-    paths = /^\w+: \d+ \d+ 00000000 \d+ (\d+)\s+\d+ (#{paths.join('|')})$/n
+    paths = /^\w+: \d+ \d+ (\d+) \d+ (\d+)\s+\d+ (#{paths.join('|')})$/n
 
     # no point in pread since we can't stat for size on this file
     File.read(*PROC_NET_UNIX_ARGS).scan(paths) do |s|
       path = s[-1]
-      case s[0].to_i
-      when 2 then rv[path].queued += 1
-      when 3 then rv[path].active += 1
+      case s[0]
+      when "00000000" # client sockets
+        case s[1].to_i
+        when 2 then rv[path].queued += 1
+        when 3 then rv[path].active += 1
+        end
+      else
+        # listeners, vivify empty stats
+        rv[path]
       end
     end
 
diff --git a/test/test_linux.rb b/test/test_linux.rb
index a84eecf..0e79a86 100644
--- a/test/test_linux.rb
+++ b/test/test_linux.rb
@@ -67,6 +67,17 @@ class TestLinux < Test::Unit::TestCase
     assert_equal 1, stats[tmp.path].queued
   end
 
+  def test_unix_all_unused
+    tmp = Tempfile.new("\xde\xad\xbe\xef") # valid path, really :)
+    File.unlink(tmp.path)
+    us = UNIXServer.new(tmp.path)
+    stats = unix_listener_stats
+    assert stats.keys.include?(tmp.path), stats.inspect
+
+    assert_equal 0, stats[tmp.path].active
+    assert_equal 0, stats[tmp.path].queued
+  end
+
   def test_unix_resolves_symlinks
     tmp = Tempfile.new("\xde\xad\xbe\xef") # valid path, really :)
     File.unlink(tmp.path)
-- 
Eric Wong


^ permalink raw reply related	[relevance 6%]

* [PATCH] unix_listener_stats follows and remembers symlinks
  @ 2012-06-06  0:56 14%         ` Eric Wong
  0 siblings, 0 replies; 3+ results
From: Eric Wong @ 2012-06-06  0:56 UTC (permalink / raw)
  To: raindrops

Eric Wong <normalperson@yhbt.net> wrote:
> However, I think the way unix_listener_stats behaves can pose
> some confusing usability problems with symlinks

I think the following patch should improve usability with
symlinks and unix_listener_stats:

>From bd7236fe23c4388d2fa42a4f836aca3c796dabab Mon Sep 17 00:00:00 2001
From: Eric Wong <normalperson@yhbt.net>
Date: Tue, 5 Jun 2012 17:49:43 -0700
Subject: [PATCH] unix_listener_stats follows and remembers symlinks

Teach unix_listener_stats to remember the symlink path
it followed and have it point to the same object as the
resolved (real) socket path.

This allows the case where looking up stats by symlinks
works if the symlink is given to unix_listener_stats:

  File.symlink("/real/path/of.sock", "/path/to/link.sock")
  stats = unix_listener_stats(["/path/to/link.sock"])
  stats["/path/to/link.sock"] => # same as stats["/real/path/of.sock"]
---
 lib/raindrops/linux.rb |  9 +++++++--
 test/test_linux.rb     | 20 +++++++++++---------
 2 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/lib/raindrops/linux.rb b/lib/raindrops/linux.rb
index a198253..1752b8a 100644
--- a/lib/raindrops/linux.rb
+++ b/lib/raindrops/linux.rb
@@ -43,9 +43,14 @@ module Raindrops::Linux
     else
       paths = paths.map do |path|
         path = path.dup
-        path = Pathname.new(path).realpath.to_s
         path.force_encoding(Encoding::BINARY) if defined?(Encoding)
-        rv[path]
+        if File.symlink?(path)
+          link = path
+          path = Pathname.new(link).realpath.to_s
+          rv[link] = rv[path] # vivify ListenerStats
+        else
+          rv[path] # vivify ListenerStats
+        end
         Regexp.escape(path)
       end
     end
diff --git a/test/test_linux.rb b/test/test_linux.rb
index 81463c9..a84eecf 100644
--- a/test/test_linux.rb
+++ b/test/test_linux.rb
@@ -73,24 +73,26 @@ class TestLinux < Test::Unit::TestCase
     us = UNIXServer.new(tmp.path)
 
     # Create a symlink
-    destination = Tempfile.new("somethingelse")
-    destination.unlink # We need an available name, not an actual file
-    link = File.symlink(tmp, destination)
+    link = Tempfile.new("somethingelse")
+    File.unlink(link.path) # We need an available name, not an actual file
+    File.symlink(tmp.path, link.path)
 
     @to_close << UNIXSocket.new(tmp.path)
     stats = unix_listener_stats
-    assert_equal 0, stats[link.path].active
-    assert_equal 1, stats[link.path].queued
+    assert_equal 0, stats[tmp.path].active
+    assert_equal 1, stats[tmp.path].queued
 
-    @to_close << UNIXSocket.new(tmp.path)
-    stats = unix_listener_stats
+    @to_close << UNIXSocket.new(link.path)
+    stats = unix_listener_stats([link.path])
     assert_equal 0, stats[link.path].active
     assert_equal 2, stats[link.path].queued
 
+    assert_equal stats[link.path].object_id, stats[tmp.path].object_id
+
     @to_close << us.accept
     stats = unix_listener_stats
-    assert_equal 1, stats[link.path].active
-    assert_equal 1, stats[link.path].queued
+    assert_equal 1, stats[tmp.path].active
+    assert_equal 1, stats[tmp.path].queued
   end
 
   def test_tcp
-- 


^ permalink raw reply related	[relevance 14%]

Results 1-3 of 3 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2012-06-05 15:46     [PATCH] Raindrops currently fails when provided a symlink to a socket. As this is a common practice for many deployment tools (Vlad, etc.) this patch adds support for finding the realpath prior to looking the socket up in /proc/net/unix Brian Corrigan
2012-06-05 17:57     ` [PATCH] Eric Wong
2012-06-05 23:59       ` [PATCH] Brian Corrigan
2012-06-06  0:15         ` [PATCH] Eric Wong
2012-06-06  0:49           ` [PATCH] Eric Wong
2012-06-06  0:56 14%         ` [PATCH] unix_listener_stats follows and remembers symlinks Eric Wong
2012-06-13  1:39  6% [PATCH] unix: show zero-value stats for idle listeners Eric Wong
2012-06-19  8:33  7% [ANN] raindrops 0.10.0 - minor feature updates Eric Wong

Code repositories for project(s) associated with this public inbox

	https://yhbt.net/raindrops.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).