* [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).