Merge pull request #23 from dsteinbrunner/patch-2
[perlbal.git] / CHANGES
blob6c7bcba88817009b9ac47513883b1cf5ae0523e0
1     -- Fix Test::More 0.94 (Which is our required version) testing problems.
2        (Jonathan Steinert <hachi@kuiki.net>)
4     -- Fix (loopback/localhost) connection failures on some BSD machines.
5        (Jonathan Steinert <hachi@kuiki.net>)
7 1.80: 2012-02-26
9     -- FLV streaming plugin (Gosuke Miyashita <gosukenator@gmail.com>)
11     -- New Throttle plugin (Adam Thomason <thomason@reticulatedsplines.net>)
13     -- Force keepalives off when we haven't finished reading a request body, but we
14        are already sending a response. (Jonathan Steinert <hachi@kuiki.net>)
16     -- Add support for Content-MD5 checking on PUT requests to web server services.
17        (Eric Wong <normalperson@yhbt.net>)
19     -- Include an XFFExtras plugin that can add X-Forwarded-Port and X-Forwarded-Proto
20        headers to help proxy backends construct canonical URLs with less configuration.
21        (RT 60260) (Jonathan Steinert <hachi@kuiki.net>)
23     -- Fix perlbal-check's age calculation to get the maximum age of queues across all
24        Perlbals. (Abe Hassan <ahassan@saymedia.com>)
26     -- Add DEFAULT command to allow setting default values for later service tunables
27        (Mark Smith <mark@qq.is>)
29     -- Change IO::Socket::SSL version requirement error to reflect what we actually
30        require. (Jonathan Steinert <hachi@kuiki.net>)
32     -- Completely redo the deps list for perlbal. This addresses an issue exposed when
33        LWP was split into component modules (RT 68490) , plus other subtle issues we've
34        been ignoring or unaware of. (Jonathan Steinert <hachi@kuiki.net>)
36     -- Stop loading Storable, we don't use it (Jonathan Steinert <hachi@kuiki.net>)
38     -- Switch Devel::Peek to an optional requirement (Jonathan Steinert <hachi@kuiki.net>)
40     -- Change perlbal-check to use IO::Socket::INET, not just IO::Socket
41        (Jonathan Steinert <hachi@kuiki.net>)
43     -- Can use PERLBAL_REMOVE_FIELDS=1 to disable fields and improve performance
44        (Nicolas Rochelemagne <nicolas.rochelemagne@cpanel.net>)
46     -- Optimize handling of SET for bool values
47        (Nicolas Rochelemagne <nicolas.rochelemagne@cpanel.net>)
49 1.79: 2011-06-15
51     -- Make SSL sockets time out if they go stale, like we claimed was
52        fixed two versions ago, but this time we also clean up the FDs too.
53        (Jonathan Steinert <hachi@kuiki.net>)
55     -- fix DELETE's failing if using IO::AIO 3.7 or newer (dormando <dormando@rydia.net>)
57     -- ship perlbal-check with perlbal. (dormando <dormando@rydia.net>)
59 1.78: 2011-01-22
61     -- Fix corruption of idle socket handlers introduced by SSL fix in 1.77.
63 1.77: 2011-01-15
65     -- Import of the documentation project:
66        http://news.perlfoundation.org/2010/12/perlbal-documentation---final.html
67        (José Castro and Bruno Martins)
69     -- Make SSL sockets time out if they go stale during SSL negotiation. Fixes a
70        visible socket/object leak that slows down the server.
72     -- Refactor socket cleanup, might work better in environments that embed Perlbal.
74 1.76: 2010-06-17
76     -- Allow "0" as a HEADER ADD/SET value (Andreas Koenig)
78     -- Cap our read buffers before AIO file operations to 1MB, this will prevent
79        memory over-use on systems with slow disks for PUT, or buffered upload temp
80        files. Assuming you system is fast enough to keep up with the writes this
81        will not harm upload speeds.
83 1.75: 2010-04-02
85     -- Stop doubleforking on daemonization. Seems useless and triggered a bug
86        with newer IO::AIO's.
88     -- Fix tests on OSX. (plugin loader doesn't play nicely with a case-
89        insensitive filesystem)
91     -- added links to http://contributing.appspot.com/perlbal
93 1.74: 2010-03-20
95     -- Change headers->headers_list method to return original case for PP
97     -- Add Slaven Rezic's SSL Client cert verification patch.
99     -- Change all the example configs to use a lower port
100        (Andreas J Koenig <andreas.j.koenig@gmail.com>)
102     -- Fix typo in help for MIME command (Jeremy James <jeremy.james@gmail.com>)
104     -- Allow HEADER command on all service roles
106     -- Switch Redirect plugin to use ->send_full_response, which fixes
107        keep-alive handling for this plugin.
109     -- Add a ClientHTTPBase method ->send_full_response, which is intended
110        as a plugin's interface to send full http responses back while still
111        having perlbal handle things like keepalives correctly.
113     -- Make keep-alive results during reproxy work even if the initial
114        response doesn't have a content-length.
116     -- Fix SSL socket close race crash.  (Jab <jk@ciphron.de>)
118     -- Make service selectors have the 'observed_ip' concept available to
119        them.
121     -- Add extra_config awareness for plugin added tunables to dumpconfig.
123     -- Plugins may now use the $set argument of add_tunable's interface
124        to automatically set an extra_config value from within a setter
125        override. Previously this would result in an error.
127     -- Split the persist_client_timeout into two other options;
128        persist_client_idle_timeout and idle_timeout. Depricate and
129        add compatability for the old option.
131     -- Silence a warning in PERLBAL_DEBUG >= 4 that we really don't
132        need to see.
134     -- Fix chained service selectors to have their 'start_http_request'
135        hook to be called.
137     -- Fix reproxy to not skip urls when the previous URL is a 'failure'
138        HTTP status response. IE. don't skip the second url when the first
139        one is a 404.
141     -- Don't require a space after the HTTP status in responses. In some
142        situations a server may not give it.
144     -- Perlbal::log should act the same whether it is calling syslog or
145        printf. Make it a little more DWIM.
147     -- Let's make SSL clients work with service selectors, and even
148        chained service selectors, when serving static files.
150     -- Fix a fields glitch in Perlbal::Cache which would sometimes
151        cause errors and abnormal shutdown.
153 1.73: 2009-10-05
155     -- Add 'dumpconfig' command and related framework.
156        *** BETA FEATURE STATUS ***
158     -- Fix obscure race condition (spontaneously closed keepalives
159        after POST requests, Andreas J Koenig)
161     -- make Perlbal::Test be more robust and only use free ports.
162        (Bart van der Schans <herengracht@gmail.com>)
164     -- Make Content-Range replies work (Ask Bjørn Hansen) 
166     -- Make Redirect plugin more standards compliant (Ask Bjørn Hansen)
168     -- Fix X-REPROXY-FILE to work with SSL connections (Greg Denton)
170     -- Syslog as 'crit' rather than 'critical' (noticed by Richard Bronosky)
172     -- Allow zero byte PUT requests (in normal PUT situations)
174     -- Fix for serving files from the filesystem over SSL (Greg Denton) 
176     -- Beginnings of IPv6 support.  You can now set 'listen' to just a port
177        number and if you have IPv6 setup, have IO::Socket::INET6, and have
178        Danga::Socket 1.61, it'll listen on both IPv6 and IPv4 on that port.
179        (the equivalent to 0.0.0.0).  By default, with the old required syntax
180        of 'listen' being n.n.n.n:port, that'll force IPv4 mode and there are
181        no changes.  Even without IPv6 support, you can now listen on a port
182        without specifying e.g. 0.0.0.0:80.  Currently unimplemented: listening
183        on specific IPv6 addresses, connecting to IPv6 backends, etc.
184        (Brad Fitzpatrick <brad@danga.com>)
186     -- support filenames with +'s in webserver mode (Jordi Funollet).
188     -- change the VHost plugin to treat 'www.example.com.' and
189        'www.example.com' the same. (Ask)
191     -- silence warnings when things that look like variables on comment lines
192        in config input.
194     -- silence warnings from mgmt system when showing an object that doesn't
195        have a listening socket.
197     -- don't fail on t/90-accesscontrol.t if Net::Netmask isn't
198        installed. (Boris Zentner <bzm@2bz.de>)
200 1.72: 2008-09-21
202     -- Removed version check in Plugin/Include.pm
204     -- No other changes; fixing CPAN upload.
206 1.71: 2008-09-13
208     -- SECURITY: Remote crash reported by Dan Conlon, patched perlbal to send
209        error on negative content length to prevent this.
211     -- Move manage_multi() from test script into Perlbal::Test class.
213     -- Add documentation to Perlbal::Test.
215     -- Fix building the package on debian.
217     -- Lots of typo corrections in documentation and comments from Nick Andrew
219     -- Add SERVER crash_backtrace= setting, to make a crash of perlbal report
220        a backtrace along with the error message.
222     -- Add backend_send_verify and backend_read_verify hooks to make custom
223        verification methods possible.
225     -- Add BackendHTTP method 'verify_success' and adjust code to follow
226        this. Intended for use with the above hooks.
228     -- Add a 'scratch' field to BackendHTTP objects so plugins can store
229        per-backend scratch data.
231 1.70: 2008-03-08
233     -- SECURITY: patch from Jeremey James <jbj@forbidden.co.uk> to not crash
234        on zero byte chunked upload when buffered uploads are enabled.
236     -- on successful write, update Perlbal::Socket's alive_time, so slowly
237        reproxied writes don't timeout the connection and kill it.  Patch
238        from Jonty <jonty@last.fm>.  r765
240     -- Perl 5.10 support.  Patch from Andy Armstrong <andy@hexten.net>.
241        Disclaimer: at least the tests all pass now, but no real-world use yet.
242        Should be fine, though.  Please report your success to the mailing list
243        and/or brad@danga.com.
245     -- Add Include plugin by Eamon Daly <edaly@nextwavemedia.com>; plugin
246        allows you to use "INCLUDE = /etc/conf.d/*" or "INCLUDE = /foo.conf"
247        to bring in more config; can be nested.
249     -- SECURITY: Previously a single upward directory traversal was possible
250        when concat get was enabled. This behavior has been fixed in code to
251        match with standard file serving.
253     -- Fix 'No such pseudo-hash field "high_priority"' issue in Stats plugin
254        (Eamon Daly and Jonty Wareing)
256     -- Support for "anonymous services", for API callers that really don't
257        care what their service is called but just want to get hold of a
258        Service object. These aren't really anonymous, but they have suitably
259        ugly names that no sane human should ever conflict with them.
261     -- add some new methods that make it a little nicer to embed Perlbal
262        in another application that uses Danga::Socket. Some refactoring
263        was done to avoid duplicate code between the "end-user" way and the
264        API way.
266     -- Chained selectors.  from Jeremy James <jbj@forbidden.co.uk>.
268     -- add "cgilike" plugin which offers a simple API very loosely based on
269        mod_perl for handling responses
271     -- add HTTPHeaders method set_request_uri so plugins can modify the uri
272        being requested
274     -- access control test
276     -- add option to AccessControl plugin to use observed_ip_string instead
278     -- add observed_ip_string method to perlbal sockets, allowing http
279        connections to set an observed ip string when an upstream proxy is
280        trusted.
282     -- add blind_proxy option, which disables appending to the end of the
283        X-Forwarded-For header when connections arrive from a trusted proxy.
285     -- make socket closing more verbose when Perlbal::DEBUG is set
287     -- verify_backend_path configuration option
289     -- don't overwrite $^P, allows use of perl debugger on perlbal.
291 1.60: 2007-10-23
293     -- accept LFLF to end HTTP request headers, instead of just
294        CRLFCRLF.  easier monitoring with netcat & other popular
295        webservers accept LFLF anyway.  (Paul Baker)
297     -- SHUTDOWN GRACEFUL [timeout] - now accepts optional timeout
298        parameter to force shutdown after that period in seconds
300     -- make SSL non-blocking
302     -- make persist_client_timeout service tunable apply to the max_idle_time
303        value used to kill sockets that are idle
305     -- add Vpath plugin for selectors; can select on URI regex now
307     -- add ability to set default_service on selector services; any
308        request that is not caught by a selector plugin instead gets
309        routed to the defined default service
311     -- add MIME [ LIST | REMOVE <ext> | SET <ext> <mime> ] command for
312        managing the internal list of mime-types
314     -- return an error when trying to use HEADER command on a
315        service that isn't of role reverse_proxy
317     -- add hook to attach when a service selector is getting a client
318        returned to it.
320     -- fixed huge memory leak in Stats plugin
322     -- Fix t/15-webserver.t to not fail once in a while (timing glitch)
324     -- Fix handling of a proxy response that doesn't have a Reason-Phrase
325        on the HTTP status line.
327     -- Update 'queues' management command to output information about low
328        priority queue, now that we use it.
330     -- the buffered upload rate test should pass more reliably now.  some
331        people reported it sporadically (or often) failing before
333     -- new per-service configuration value: persist_client_timeout -
334        timeout in seconds for HTTP keep-alives to the end user
335        (defaults to 30 seconds)
337     -- new server configuration value: pidfile - for managing an internal
338        pidfile.
340 1.59: 2007-05-22
342     -- only call die_gracefully on a socket if it CAN die_graceully.  fixes
343        shutdown graceful on mogstored, which has things betsides subclasses
344        of Perlbal::Socket in its Danga::Socket event loop
346     -- WARNING:  removed Linux::AIO support.  go get IO::AIO 1.6 at least if
347        you use webserver mode or reproxy files or do buffered uploads.
349 1.58: 2007-05-11
351     -- plugin reload support, if plugin supports it.  plugin must implement
352            sub can_reload { 1 }
353        and optionally:
354            sub pre_reload_unload { ... }
355        (which is called before the ->unload, module reload, and ->load)
356        new management command is:
357            reload <plugin_name>
359 1.57: 2007-04-26
361     -- make ClientHTTP (webserver mode) support transfer-encoding
362        "chunked" PUTs, when PUTs are already enabled.  useful
363        for things like MogileFS, where writing clients may not
364        know the final length ahead of time to predeclare in the
365        Content-Length request header.
367     -- Add the client_ip to the X-Forwarded-For header when the
368        upstream is "trusted" (Ask Bjoern Hansen).
370 1.56: 2007-04-16
372     -- make HTML proper in ClientManage interface Jacques Marneweck
373        <jacques@powertrip.co.za>
375     -- fix "make test" on OS X.  Radu Greab <radu@yx.ro> and
376        Chuck Remes <cremes.devlist@mac.com> fixed & confirmed.
378     -- let accesscontrol plugin have a new match action, "queue_low",
379        to make a match force a request onto the low-priotity queue.
380        this match action is in addition to the two previous ones
381        (allow and deny).
383     -- start of work on making BackendHTTPs be abstract, dispatching
384        to a child process over a socketpair which speaks HTTP on
385        stdin/stdout.  Unfinished.  To be polished in future.
387     -- new hook "make_low_priority", like "make_high_priority"
389 1.55: 2007-03-21
391     -- add plugin that returns 304 automatically on incoming requests
392        with If-Modified-Since header and matching a regular expression
393        on the Host header. (for hostnames serving immutable resources,
394        where if client has ANY version, it's the correct one.)  see:
395        example conf at conf/not-modified-plugin.conf
397     -- do HEAD to reproxied hosts, if client did a HEAD (Radu Greab
398        <radu@yx.ro>)
400     -- fix race+crash in buffered upload writing/purging
402 1.54: 2007-02-05
404     -- supported for "Transfer-Encoding: chunked" requests (HTTP/1.1 feature)
405        as well as the "Expect: 100-continue", which generally accompany
406        chunked requests.  requires "buffered_uploads" be enabled.  see
407        doc/http-versions.txt for details.
409 1.53: 2006-12-05
411     -- fix a crash as reported on mailing lists, with backends not
412        releasing references to clientproxies when coming through
413        service selectors, and backends then timing out, crashing
414        the server.
416     -- if backend sends x-reproxy-url and HTTP 204 No Content, upgrade
417        that to a 200 when sending to the client.
419     -- let non-Perlbal::Socket Danga::Socket objects exist without
420        crashing in cleanup handler (allows use of Gearman::Client::Async
421        in plugins)
423 1.52: 2006-11-13
425     -- fix crash in buffered uploads when *::AIO doesn't write everything
426        to disk that's requested of it.  we were unshifting back onto the
427        write queue a scalar, not a scalarref.
429     -- AIO channels.  from the code:
431        "prevents all AIO threads from being consumed by requests for same
432         failing/overloaded disk by isolating them into separate 'channels' in
433         parent process and not dispatching more than the max in-flight count
434         allows.  think of a channel as a named queue.  or in reality, a disk."
436     -- allow setting of SO_SNDBUF on a per-service level
438 1.51: 2006-10-04
440     -- set alive_time during slow PUTs.  was causing problems
441        replicating large files in mogile, hitting fake idle timeout.
443     -- pipelining HTTP injection fix.
445     -- include Host header to reproxy backends
446            patch by Jonty Wareing <jonty.wareing@gmail.com>
448 1.50: 2006-09-08
450     -- add in optional Devel::Gladiator usage for memory tracking
452     -- fix memory leaks in concatenanted GETs on error cases
454     -- fixes to run / run better on OS X (Artur Bergman)
456 1.49: 2006-08-30
458     -- Very basic help hints command, simply dumps all possible commands.
460     -- Add another statistic for reproxy caches, the current size of a particular
461        service's cache, maximum size, and fill percentage.
463 1.48: 2006-08-18
465     -- optionally cache in-process the results of X-Reproxy-URL reponses
467 1.47: 2006-08-15
469     -- concatenanted GETs sent 304 Not Modified w/ content-lengths.  should
470        be without.  fixed.  also including t/17-webserver-concat which forgot
471        to be checked into svn/MANIFEST earlier
473 1.46: 2006-08-10
475     -- fix Mart's broken win32 support that broke Unix, part 2:  syslog when
476        daemonized.  TODO: test case should test daemonization mode.
478 1.45: 2006-08-10
480     -- fix Mart's broken win32 support that broke Unix.  TODO:  test to raise/check
481        fd limit so this doesn't happen again on unix.
483 1.44: 2006-08-10
485     -- allow a no-op ?foo at the end of concatenated-get URLs, so they'd be of
486        the form:  http://host/dir??file1,file2,file3?noopsection.  the no-op
487        section is good for cache-busting, putting in, say, the modtime of the
488        newest file, forcing browsers like safari (who over-cache) to reload.
490     -- set a mime-type other than text/plain on concatenated-get requests,
491        only falling back to text/plain if none of files have a known mime type.
492        in practice a request is all css or all js, so match is found by looking
493        at 1st file.  this is required since mozilla won't show CSS if not text/css.
495     -- actually be able to start up using 'perlbal' command.  test
496        suite passed before, but moving $VERSION into Perlbal.pm
497        had quitely broke it all.
499 1.43: 2006-08-09
501     -- there's a case where offset gets past end of file in static file
502        code, but very rarely.  sendfile handles this w/ an error that
503        we dealt with, but the new readahead code didn't and crashed.
504        working around for now, until root cause is found for offset
505        going past.
507     -- eliminate some warnings in error cases.  only really affects noise
508        in test suite
510     -- work better on win32
512     -- added the ability for plugins to create custom service roles and
513        add custom configuration options to services, demo is available
514        as conf/echoservice.conf and lib/Perlbal/Plugin/EchoService.pm
516 1.42: 2006-08-03
518     -- debug management command 'varsize' to track size of internal
519        data structures, to make sure none get out of control.
520        there's a report that CPU/mem grow slowly over time, and after
521        a month or so of uptime, a restart is needed.  this might help
522        diagnose that.
524     -- allow expansion/interoplation of stuff in config files/commands.
525        for now just mapping network device names to IP addresses:
526           SET listen = ${ip:eth0}:80
528     -- more hooks as requested by community
530     -- concatenated get feature.  where a client have use a
531        comma-separated list of files to return, always in text/plain.
532        Useful for webapps which have dozens/hundreds of tiny css/js
533        files, and don't trust browsers/etc to do pipelining.
534        Decreases overall roundtrip latency a bunch, but requires app
535        to be modified to support it.  See t/17-concat.t test for
536        details.
538     -- do AIO readahead before sendfile to reduce blocking caused
539        by disk reads from sendfile.  increases throughput.  see:
540        http://brad.livejournal.com/2228488.html
542     -- add 'latency' configuration on selector roles
544 1.41: 2006-02-06
546     -- IE sends a request header like "If-Modified-Since: <DATE>;
547        length=<length>" so we have to remove the length bit before
548        comparing it with our date then we save the length to compare
549        later.
551     -- support for reproxying to a named service.  if backend returns
552        "X-Reproxy-Service: <name>" and no content, the entire original
553        client GET/HEAD request is re-sent to the new named service.
554        the "enable_reproxy" option has to be enabled for the original
555        service.
557 1.40: 2006-01-17
559     -- support for optional retrying of requests after a 500 error,
560        so user won't see the 500 error.  boolean option, as well
561        as configurable schedule of how often to retry backends.
563     -- clean up directory indexing HTML: Mark Smith and Fred Moyer
564        (fred@redhotpenguin.com)
566 1.39: (beta for 1.40) 2005-10-26
568     -- new feature for virtual host plugin:  the Host header can be trumped
569        by a magical URL form, if allowed in config.  for instance, you can
570        make an HTTP request to host "foo.com" but actually get "bar.com"
571        if you do this:
573           VHOST foo.com;using:bar.com  = bar
575        and request /__using/bar.com/IDENT from foo.com, where IDENT is
576        just \w+.  perlbal then updates the Host record to bar.com and
577        sends request URI (unaltered) to the "bar" service.
579        this is useful for circumventing browser host restrictions (java,
580        javascript, flash, etc...) when you actually control both
581        domains.
583 1.38: (beta for 1.40) 2005-10-19
585     -- some paranoia evals around some parts of buffered uploads that
586        SAPO reported crashes in occasionally.  added FIXMEs to investigate
587        too.  for now, though, evals around closing files is safer.
589     -- new feature: inter-perlbal upload tracking.  for fancy upload
590        bars driven by XmlHttpRequest when clients are upload large files
592     -- WARNING: reproxying (files or URLs) is now disabled by default,
593        and must be enabled per-service with "enable_reproxy = true"
595     -- do a final little read before closing an HTTP connection
596        to make sure we have no unread data in kernel (notably
597        an extra "\r\n" from an IE post), so when we do close, we
598        don't send a RST packet to the end user.  Thanks to Kevin
599        Lewandowski from discogs.com for the bug report.
601     -- use Danga::Socket's AddTimer interface to disconnect
602        stale persistent connections every 5 seconds, driven by
603        a timer, rather than every 15 seconds, driven by
604        socket creation.
606     -- there was a bug where 304 Not Modified responses would
607        cause a connection close (and thus RST packets) even
608        though keep-alive was negotiated and would've worked
610     -- ignore URL arguments when doing directory indexing
612     -- work a little better under "trickle".  (but still not perfect...
613        trickle doesn't quite work on Perlbal, unfortunately. it's useful,
614        or would've been useful, for testing some parts...)
616     -- avoid an occasional warning with dirindexing on unreadable directories
618 1.37 (beta for 1.40) 2005-08-29
620     -- "use <name>" command to set the direct object for future commands
622     -- AccessControl plugin to allow/deny by default or on IPs or
623        netmasks.
625     -- ClientManage could spin in its inherited event_write, causing
626        99.9% cpu usage.  Bug is arguably Danga::Socket's, but also
627        ours because it's documented what we should do and we didn't.
628        The fix is to shut down watching writability when we're done
629        writing.
631     -- make accept_client and its callers deal with the possibility
632        that accept_client fails not because the backend is bogus, but
633        because the client is.  so now accept_client can close the
634        client and callers have to be aware of that.
636     -- after running this version on production on LiveJournal.com for
637        a bit, we discovered some cases that we'd flag as should never happen,
638        but actually do, so updated the comments and behavior to
639        do the right thing and not just crash with an assertion.
641     -- fix misspellings of trusted_upstream_proxies that didn't
642        come along for the renaming ride earlier
644     -- webserver mode now ignores URL arguments when looking up
645        filename
647     -- remove warnings accessing undefs in ranges and vhosts
649     -- new --version and --help flags.  also a usage message on bogus
650        options (or when --help).  props to Jacques Marneweck
651        <jacques@powertrip.co.za> for the help and motivation.
653 1.36 (beta for 1.40) 2005-08-19
655     -- fix bug in ClientProxy when user disconnects after POST/PUTing
656        a content body, but before a response comes back.
658     -- now checks correctly for Danga::Socket version 1.44 or above.
659        (required version was in quotes, confusing perl.)
661     -- vhost plugin: strip off port specification from the Host header
662        before trying to match with configured patterns.
664 1.35: (beta of 1.40) 2005-08-16
666     -- beta SSL support in a few lines of code.  maybe it's completely
667        done.  maybe it's barely done.  But it seems to work?  I'm no
668        SSL master... IO::Socket::SSL just made it so easy.
670     -- lots more tests
672     -- lots more cleanup
674     -- fix potential crashing bugs in the PUT path.  luckily ones we
675        never hit.
677     -- lots and lots of code cleanup
679     -- load plugins by either the exact case specified, all lowercase,
680        or all lowercase with first letter uppercase.  then remember
681        the case for unloading (which was never implemented?)
683     -- reorganize/cleanup code related to stalling the backend due to
684        client's buffer size exceeding one of the two limits.
685        introduce "backend_stalled"
687     -- buffer uploads to disk
689 1.3: (2005-06-26)
691     -- introduce CommandContext, so management commands can be less
692        verbose when in config files (service/pool names can be left off
693        when you just created them a couple lines before)
695     -- remove sendstats support
697     -- exit with 0 vs non-zero when/if Perlbal crashes.  new command
698        "crash" to fake a crash, for testing.
700     -- entirely redone management command parsing/dispatching (major
701        code cleanup)
703     -- virtual host plugin on service selector framework
705     -- service selector framework
707     -- make Net::Netmask optional
709     -- byte range support for both webserver mode and reproxy-file mode
710        Giao Phan <giao@guba.com>.  so clients can resume large transfers.
712     -- test suite
714     -- IO::AIO support (brad)
716     -- change response code to client to 200 on reproxy-file from backend
718     -- 'nodes' command now takes as an optional argument a specific ip:port to
719        dump the node stats for
721     -- AIO abstraction layer (Perlbal::AIO) which can currently do either
722        Linux::AIO or "none" (doing everything sync).  also in future File::FDpasser
723        and other OS-specific modes [brad]
725     -- add buffer_backend_connect to do in memory buffering of data before we
726        request a backend; assists slow clients without tying up a mod_perl
728     -- fix spinning issue when webnodes unavailable; should now not consume 100%
729        CPU in those cases
731     -- revamp verbose functionality; by default it's still of, but if you specify
732        VERBOSE ON in the config file, it turns it on for management connections
733        by default.  management connections, when specifying VERBOSE ON/OFF, will
734        now set the flag only for that connection.
736     -- new command for config file; VERBOSE ON/OFF; can be used to enable or
737        disable confirmation of all commands such as SET, SERVER, CREATE, etc.
738        by default, it's off for config files, but on for management connections.
740     -- add generation count to services that increments every time a pool is
741        switched.  this data is now stored on backends when they're spawned as
742        well, and when we allocate a backend we verify the generation so old ones
743        are thrown away.
745     -- allow setting of nodefile on pools to 'none' or 'null' or 'undef' or just
746        an empty set of quotes ("", '') in order to stop using node files
748     -- automatically set use count to 0 on new nodes coming in from nodefile
750     -- made auto-vivification of pulls throw warnings, and made Perlbal die if it
751        tries to vivify a pool and the user has previously manually declared a pool
753     -- updated pool commands to be more flexible (POOL pool ADD node, etc)
755     -- add pools; a way of having different sets of nodes and instantly switching
756        between them, so traffic stops going to old nodes; see the example config
757        file for usage
759     -- work partially without Linux::AIO (does sync stat of node file in reverse
760        proxy mode, and webserver mode doesn't work) --brad
762 1.2 (2005-03-07)
763     -- add new stats command 'nodes' that shows information on each node that we've
764        been connecting to -- last connect time, last attempt time, a breakdown of
765        the last 500 status codes returned, etc
767     -- add ability to use new Danga::Socket profiling; 'profile on', 'profile data'
768        to see the info so far, and 'profile off' to disable it
770     -- graceful shutdown now flags sockets that are busy to die so they die when
771        they're done with their current connection
773     -- sockets in persist_wait now get closed immediately during a graceful shutdown
775     -- fix handling of OPTIONS responses; used to do its own state clearing but
776        it now uses the next_request method as it should
778     -- fix bug with determination of keep-alive in http 1.1 case specifying
779        a connection: close header
781     -- added 'uptime' management command to track how long Perlbal has been up
783     -- new config commands: HEADER INSERT <svc> <header>: <value> and HEADER
784        REMOVE <svc> <header> which will insert and remove headers from user
785        requests before they're sent to backend proxy nodes.
787     -- add dependency to Net::Netmask; now you can specify trusted_upstream_proxies
788        on a service (SET service.trusted_upstream_proxies = 10.0.0.0/8, etc)
789        which will allow requests from that range to set X-Forwarded-For, X-Host,
790        and X-Forwarded-Host headers.
792     -- fixed a bug that caused connections to hang when the backend responded
793        before the user was done sending data
795     -- reset some variables that weren't being reset: read_buf, read_ahead, read_size
797     -- "proc" management command shows user and system CPU usage for Perlbal
798        this run, as well as a delta since the last time you ran "proc"
800     -- added Perlbal::XS interface for modules to use; also 'xs' management
801        command to see the status of XS modules
803     -- bug in PalImg caused crash on files with no length (or when another
804        error occurs that causes no data to be sent to new_gif_palette function)
806     -- ReproxyManager would sometimes let closed backends back into the pool
807        and hand them off to clients, fixed to check for that
809     -- new policy: you don't muck around with the internals of other classes.
810        notably, clients don't change the internals of a backend and backends
811        don't change the internals of a client.  this was causing all sorts of
812        problems because nobody was cleaning up properly.  (especially with regard
813        to "who is my backend's client" type questions.)
815     -- fixed up code that did its own keep-alive checks to use the HTTPHeaders
816        functions so that in the future every part of the code stays up to date
818     -- Perlbal::Socket now has the option to keep track of all objects that
819        are created.  new command to management interface 'leaks' will show
820        all objects currently in memory.  turn this functionality on by enabling
821        the TRACK_OBJECTS constant in Perlbal::Socket.
823     -- split keep-alive logic into request and response methods and cleared
824        up how that works
826     -- rewrote reproxy URI support.  new class Perlbal::ReproxyManager does all
827        of the work relating to reproxies.  it's basically a service class but
828        stripped down and dealing with single endpoints instead of pools.  much
829        much much more robust under heavy load.  (Junior, Brad)
831     -- now that we support persistent connections, the 'queues' command didn't
832        have an accurate time; added ClientProxy member last_request_time so
833        we can accurately tell how long requests have been waiting for
835     -- Danga::Socket got an overhaul; close and steal_socket now share a lot
836        of code by calling _cleanup.  some more paranoia on making sure the
837        object isn't already closed when we try to do things.
839     -- lots more paranoia in close events and event_err handling for backends
841     -- added tracking mode for helping look for leaked objects; records a
842        backtrace of every object created.  "server track_obj = 0/1" to enable
843        or disable it, and then "tracking" in a management interface to see.
845     -- made Perlbal::objctor/objdtor take an object as their first parameter.
846        much faster than using caller().
848     -- fix Highpri plugin to not check hosts for high priority values when
849        the host isn't defined
851     -- made Palimg plugin far more paranoid about errors, and also uses new
852        ClientHTTPBase scratch area for keeping track of data instead of using
853        headers (which are generally slower)
855     -- fixed bug in HTTPHeaders that set_version would inadvertently
856        run into when used on a header created through new_response
858     -- ClientProxy class now supports persistence; set persist_client on
859        the proxy service in order to enable it.
861     -- Palimg plugin now supports fallback to web server mode if the
862        requested URI doesn't fit our desired pattern
864     -- did some cleanup; made a bunch of HTTPHeaders accesses use the
865        accessor methods instead of referencing into the object's private
866        store of data
868     -- fixed a crash caused by calling getsockname/getpeername on sockets
869        that have been undefined after having been stolen during an internal
870        redirect to another webserver
872     -- fixed _simple_response to not return a body if we're serving
873        to a HEAD request
875     -- bug fix: don't send Not-Modified responses to requests for dynamic
876        directory listings.  it was messing up persistent connections
877        since the directory serving code didn't get passed down whether we
878        were sending a body or not.  and not modifies on directories are hard:
879        modify time isn't altogether useful.  (file sizes could change)
881        this still does not-modifieds on indirect index.html directory
882        requests, because _serve_request ends up eventually calling
883        _serve_request on a different URI.  (brad)
885     -- added BSD::Resource as dependency to Makefile.PL (brad)
887     -- fixed 304 Not Modified responses to not send Content-Length
888        and Content-Type headers.  (jr)
890 1.01 (2004-10-22)
891     -- when internally redirecting a URL, perlbal advertises
892        that it supports persisent HTTP connections now,
893        and caches those sockets for 5 seconds.  (not configurable)
894        useful under load, otherwise you waste all local ports
895        on a machine
897     -- ditch dependence on IO::SendFile.  do it ourselves (1 line)
898        with perl's syscall function
900     -- add doc/* and conf/* to MANIFEST file
902 1.00
903     -- initial packaged release