about summary refs log tree commit homepage
DateCommit message (Collapse)
2011-03-16raindrops 0.5.0 - more Linux extras! v0.5.0
Portable changes: * Raindrops are now resizable within the limits of system page size * Raindrops::Middleware proxies +to_path+ in response bodies * More documentation Linux-only changes: * Raindrops::LastDataRecv[1] Rack application * Raindrops::Watcher[2] Rack application * Raindrops::TCP_Info[3] class for capturing TCP connection stats * IPv6 support for inet_diag * faster inet_diag stats for multiple sockets There is also a demo server running the Watcher and Middleware components. It's capped to 30 concurrent users, so go easy on it: Raindrops::Watcher: http://raindrops-demo.bogomips.org/ Raindrops::Middleware: http://raindrops-demo.bogomips.org/_raindrops [1] http://raindrops.bogomips.org/Raindrops/LastDataRecv.html [2] http://raindrops.bogomips.org/Raindrops/Watcher.html [3] http://raindrops.bogomips.org/Raindrops/TCP_Info.html
2011-03-16watcher: retry on empty stats
Those will cause Aggregate to raise Errno::EDOM
2011-03-16test_raindrops_gc: disable by default
It takes too long
2011-03-16test_linux_all_tcp_listen_stats_leak: fix for 1.8
Apparently 1.8 Test::Unit doesn't like empty test classes
2011-03-17rdoc: document the demo URLs
2011-03-17watcher_demo: add more listeners to the mix
git is on 9418 and my cgit UNIX domain socket
2011-03-17inet_diag: properly deal with INADDR_ANY binds
Oops :x This was totally broken with the all-listener filter.
2011-03-17linux-listener-stats: all means all (UNIX and TCP listeners)
No more splitting all TCP or all UNIX listeners
2011-03-17update examples for http://raindrops-demo.bogomips.org/
Whee!
2011-03-17watcher: properly stream responses for <= HTTP/1.0
nginx makes HTTP/1.0 requests and expects HTTP/1.1 responses
2011-03-16update examples for Rack/Zbatery
2011-03-16doc: fix documentation for Raindrops::InetDiagSocket class
2011-03-16add Watcher Rack application
It does streaming!
2011-03-15linux-listener-stats: use timerfd if available
It is more accurate than sleep and doesn't require calculating times
2011-03-14linux: avoid Array#first/Array#last
More confusing for me, actually...
2011-03-14linux: unix_listener_stats may scan all paths
This matches behavior of the TCP version.
2011-03-14linux-listener-stats: allow -a for all TCP sockets
Sometimes we want more of them
2011-03-12inet_diag: switch to inet_pton() for translation
getaddrinfo() needs to get a list of available interfaces from the kernel with every single call (since ipv6 could've been modprobed), so it's a waste of syscalls.
2011-03-12allow reusing netlink socket for inet_diag
No need to waste resources on creating/destroying a socket.
2011-03-12inet_diag: fix signedness warnings on 32-bit
I thought my compiler would be smarter :<
2011-03-12inet_diag: no need to specify family
The way we dump, we dump it all, it seems.
2011-03-12inet_diag: fix up IPv6 address stringification
This means we can read multiple addresses at once, even IPv6 ones.
2011-03-12tests: remove unused_port function
It's not needed since we don't care to rebind sockets
2011-03-12inet_diag: fall back on IPv6 lookups
It's slow, but at least it works.
2011-03-12inet_diag: fold all_tcp_listener_stats into tcp_listener_stats
No reason to have an extra method. This also speeds up the multi-listener case for tcp_listener_stats since it avoids expensive sendmsg() syscalls.
2011-03-12inet_diag: small reorganization
2011-03-12inet_diag: do not set unblocking function
netlink is fast and predictable in response times, so permitting interrupts would just complicate things and lead to errors.
2011-03-12move st_table cleanup
Fewer places to check for errors, we think.
2011-03-12inet_diag: stricter IPv6 address parsing
Be stricter about invalid inputs.
2011-03-11linux: method for dumping all TCP listener stats
This is a work-in-progress and will probably be modified before the next release.
2011-03-11inet_diag: force the use of 32-bit counters
64-bit counters are unnecessarily large for tracking active or queued connections until we have IP_ROFLSCALE support :>
2011-03-11inet_diag: fixup braindamage from refactoring
Oops :x
2011-03-11cleanup struct initialization to avoid ifdefs
Too hard to maintain.
2011-03-11use unsigned values for all counters
We can't have negative values
2011-03-11inet_diag: cleanup unnecessarily large struct
We don't care for this address.
2011-03-11inet_diag: fixup broken assertion
Oops, strings are always true :x
2011-03-11inet_diag: factor out prep code
We're going to experiment with something...
2011-03-11doc: more rdoc updates for Linux users
Yes we love Linux more than other systems :>
2011-03-11the core Raindrops class is portable, yes it is
OK, not to non-Unix but I'll never care :>
2011-03-11tcp_info: more documentation on last_data_recv
It's useful, yes.
2011-03-10.document: remove non-existent reference
raindrops_ext.c never existed :o
2011-03-10tests: only do the GC test on MRI
"Advanced" GCs are typically less aggressive and typically allow much more memory to be used.
2011-03-10fix stupid typo in Raindrops#size=
Oops, it could give the GC problems.
2011-03-10tests: ensure munmap() in children don't muck up the parent
Raindrops is designed to work with forking servers after all.
2011-03-11support for Raindrops#size= and Raindrops#evaporate!
This allows limited resizing of the Raindrops memory area since we always over-allocate due to the required page aligment for mmap. It would be nice if mremap() worked with MAP_SHARED, but it does not and triggers a bus error when attempting to access the new area. ref: https://bugzilla.kernel.org/show_bug.cgi?id=8691
2011-03-10rdoc: 100% documentation coverage!
Of course, RDoc doesn't know quantity vs quality :)
2011-03-10test_middleware_unicorn: GC is aggressive!
Oops, don't let GC close our listener before Unicorn can inherit it.
2011-03-09experiment with Bundler for dev dependencies
It seems nice
2011-03-09disable aggregate/pmq stuff under 1.8
POSIX message queues needs native threads to function.
2011-03-09aggregate/pmq: we need a Mutex to protect fcntl() locks
fcntl() locks are per-process, so we also need something to protect individual threads within a process from stepping over each other.