Announce: perlbal-1.2

Brad Fitzpatrick brad at danga.com
Mon Mar 7 18:06:56 PST 2005


Weird... thanks!  what client sends that?

I've /never/ seen that on LiveJournal, and I'd expect us to get every
browser, eventually.

We can fix, though.

- Brad


On Tue, 8 Mar 2005, Russ Garrett wrote:

> Nice, just put it live (with the usual absolutely no testing), and it
> seems to be working a treat. One thing I have noticed however, is that
> we're getting a few of these (about 1 per second):
>
> @40000000422d078931385d5c Argument "156;charset=utf-8" isn't numeric in
> addition (+) at /usr/local/lib/perl/5.8.4/Perlbal/XS/HTTPHeaders.pm line 98.
> @40000000422d078b068f5fec Argument "156;charset=utf-8" isn't numeric in
> addition (+) at /usr/local/lib/perl/5.8.4/Perlbal/XS/HTTPHeaders.pm line 98.
> @40000000422d078e2682e8dc Argument "156;charset=utf-8" isn't numeric in
> addition (+) at /usr/local/lib/perl/5.8.4/Perlbal/XS/HTTPHeaders.pm line 98.
> @40000000422d078f3aa1aa9c Argument "312;charset=utf-8" isn't numeric in
> addition (+) at /usr/local/lib/perl/5.8.4/Perlbal/XS/HTTPHeaders.pm line 98.
>
> Looks like your parsing code isn't coping with this issue (when clients
> append "charset=utf-8" to the content-length??).
>
> I need to do some pretty graphs of the stats.
>
> Russ
>
> Brad Fitzpatrick wrote:
>
> >Hello!
> >
> >New release of Perlbal.  (shit, it's been like 5 months!)
> >
> >We've been busy, though.  Changelog below.
> >
> >Required:
> >
> >  http://www.danga.com/dist/Danga-Socket/Danga-Socket-1.38.tar.gz
> >  http://www.danga.com/dist/Perlbal/Perlbal-1.2.tar.gz
> >
> >Optional:
> >
> >  This provides a fast implementation of header parsing which is the
> >  main CPU hog in Perlbal.
> >
> >  http://www.danga.com/dist/Perlbal/Perlbal-XS-HTTPHeaders-0.15.tar.gz
> >
> >  To enable it, on the management port, or in your config file:
> >
> >     xs enable headers
> >
> >  You can turn it on/off at runtime to compare CPU usage.
> >
> >Credits:
> >
> >  Mark Smith <junior at danga.com> is the main hacker on Perlbal nowadays,
> >  and he's solely responsible for the new XS Header parsing code.  I'm
> >  mostly the suit (well, t-shirt) that tells him what to do.
> >
> >Changelog since 1.0.1:
> >
> >    -- add new stats command 'nodes' that shows information on each node that we've
> >       been connecting to -- last connect time, last attempt time, a breakdown of
> >       the last 500 status codes returned, etc
> >
> >    -- add ability to use new Danga::Socket profiling; 'profile on', 'profile data'
> >       to see the info so far, and 'profile off' to disable it
> >
> >    -- graceful shutdown now flags sockets that are busy to die so they die when
> >       they're done with their current connection
> >
> >    -- sockets in persist_wait now get closed immediately during a graceful shutdown
> >
> >    -- fix handling of OPTIONS responses; used to do its own state clearing but
> >       it now uses the next_request method as it should
> >
> >    -- fix bug with determination of keep-alive in http 1.1 case specifying
> >       a connection: close header
> >
> >    -- added 'uptime' management command to track how long Perlbal has been up
> >
> >    -- new config commands: HEADER INSERT <svc> <header>: <value> and HEADER
> >       REMOVE <svc> <header> which will insert and remove headers from user
> >       requests before they're sent to backend proxy nodes.
> >
> >    -- add dependency to Net::Netmask; now you can specify trusted_upstream_proxies
> >       on a service (SET service.trusted_upstream_proxies = 10.0.0.0/8, etc)
> >       which will allow requests from that range to set X-Forwarded-For, X-Host,
> >       and X-Forwarded-Host headers.
> >
> >    -- fixed a bug that caused connections to hang when the backend responded
> >       before the user was done sending data
> >
> >    -- reset some variables that weren't being reset: read_buf, read_ahead, read_size
> >
> >    -- "proc" management command shows user and system CPU usage for Perlbal
> >       this run, as well as a delta since the last time you ran "proc"
> >
> >    -- added Perlbal::XS interface for modules to use; also 'xs' management
> >       command to see the status of XS modules
> >
> >    -- bug in PalImg caused crash on files with no length (or when another
> >       error occurs that causes no data to be sent to new_gif_palette function)
> >
> >    -- ReproxyManager would sometimes let closed backends back into the pool
> >       and hand them off to clients, fixed to check for that
> >
> >    -- new policy: you don't muck around with the internals of other classes.
> >       notably, clients don't change the internals of a backend and backends
> >       don't change the internals of a client.  this was causing all sorts of
> >       problems because nobody was cleaning up properly.  (especially with regard
> >       to "who is my backend's client" type questions.)
> >
> >    -- fixed up code that did its own keep-alive checks to use the HTTPHeaders
> >       functions so that in the future every part of the code stays up to date
> >
> >    -- Perlbal::Socket now has the option to keep track of all objects that
> >       are created.  new command to management interface 'leaks' will show
> >       all objects currently in memory.  turn this functionality on by enabling
> >       the TRACK_OBJECTS constant in Perlbal::Socket.
> >
> >    -- split keep-alive logic into request and response methods and cleared
> >       up how that works
> >
> >    -- rewrote reproxy URI support.  new class Perlbal::ReproxyManager does all
> >       of the work relating to reproxies.  it's basically a service class but
> >       stripped down and dealing with single endpoints instead of pools.  much
> >       much much more robust under heavy load.  (Junior, Brad)
> >
> >    -- now that we support persistent connections, the 'queues' command didn't
> >       have an accurate time; added ClientProxy member last_request_time so
> >       we can accurately tell how long requests have been waiting for
> >
> >    -- Danga::Socket got an overhaul; close and steal_socket now share a lot
> >       of code by calling _cleanup.  some more paranoia on making sure the
> >       object isn't already closed when we try to do things.
> >
> >    -- lots more paranoia in close events and event_err handling for backends
> >
> >    -- added tracking mode for helping look for leaked objects; records a
> >       backtrace of every object created.  "server track_obj = 0/1" to enable
> >       or disable it, and then "tracking" in a management interface to see.
> >
> >    -- made Perlbal::objctor/objdtor take an object as their first parameter.
> >       much faster than using caller().
> >
> >    -- fix Highpri plugin to not check hosts for high priority values when
> >       the host isn't defined
> >
> >    -- made Palimg plugin far more paranoid about errors, and also uses new
> >       ClientHTTPBase scratch area for keeping track of data instead of using
> >       headers (which are generally slower)
> >
> >    -- fixed bug in HTTPHeaders that set_version would inadvertently
> >       run into when used on a header created through new_response
> >
> >    -- ClientProxy class now supports persistence; set persist_client on
> >       the proxy service in order to enable it.
> >
> >    -- Palimg plugin now supports fallback to web server mode if the
> >       requested URI doesn't fit our desired pattern
> >
> >    -- did some cleanup; made a bunch of HTTPHeaders accesses use the
> >       accessor methods instead of referencing into the object's private
> >       store of data
> >
> >    -- fixed a crash caused by calling getsockname/getpeername on sockets
> >       that have been undefined after having been stolen during an internal
> >       redirect to another webserver
> >
> >    -- fixed _simple_response to not return a body if we're serving
> >       to a HEAD request
> >
> >    -- bug fix: don't send Not-Modified responses to requests for dynamic
> >       directory listings.  it was messing up persistent connections
> >       since the directory serving code didn't get passed down whether we
> >       were sending a body or not.  and not modifies on directories are hard:
> >       modify time isn't altogether useful.  (file sizes could change)
> >
> >       this still does not-modifieds on indirect index.html directory
> >       requests, because _serve_request ends up eventually calling
> >       _serve_request on a different URI.  (brad)
> >
> >    -- added BSD::Resource as dependency to Makefile.PL (brad)
> >
> >    -- fixed 304 Not Modified responses to not send Content-Length
> >       and Content-Type headers.  (jr)
> >
> >
> >- Brad
> >
> >
> >
>
>


More information about the perlbal mailing list