root/trunk/CHANGES @ 765

Revision 765, 26.7 kB (checked in by bradfitz, 21 months ago)

on successful write, update Perlbal::Socket's alive_time, so slowly
reproxied writes don't timeout the connection and kill it. Patch
from Jonty <jonty@…>. r765

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1    -- on successful write, update Perlbal::Socket's alive_time, so slowly
2       reproxied writes don't timeout the connection and kill it.  Patch
3       from Jonty <jonty@last.fm>.  r765
4
5    -- Perl 5.10 support.  Patch from Andy Armstrong <andy@hexten.net>.
6       Disclaimer: at least the tests all pass now, but no real-world use yet.
7       Should be fine, though.  Please report your success to the mailing list
8       and/or brad@danga.com.
9
10    -- Add Include plugin by Eamon Daly <edaly@nextwavemedia.com>; plugin
11       allows you to use "INCLUDE = /etc/conf.d/*" or "INCLUDE = /foo.conf"
12       to bring in more config; can be nested.
13
14    -- SECURITY - Previously a single upward directory traversal was possible
15       when concat get was enabled. This behavior has been fixed in code to
16       match with standard file serving.
17
18    -- Fix 'No such pseudo-hash field "high_priority"' issue in Stats plugin
19       (Eamon Daly and Jonty Wareing)
20
21    -- Support for "anonymous services", for API callers that really don't
22       care what their service is called but just want to get hold of a
23       Service object. These aren't really anonymous, but they have suitably
24       ugly names that no sane human should ever conflict with them.
25
26    -- add some new methods that make it a little nicer to embed Perlbal
27       in another application that uses Danga::Socket. Some refactoring
28       was done to avoid duplicate code between the "end-user" way and the
29       API way.
30
31    -- add "cgilike" plugin which offers a simple API very loosely based on
32       mod_perl for handling responses
33
34    -- add HTTPHeaders method set_request_uri so plugins can modify the uri
35       being requested
36
37    -- access control test
38
39    -- add option to AccessControl plugin to use observed_ip_string instead
40
41    -- add observed_ip_string method to perlbal sockets, allowing http
42       connections to set an observed ip string when an upstream proxy is
43       trusted.
44
45    -- add blind_proxy option, which disables appending to the end of the
46       X-Forwarded-For header when connections arrive from a trusted proxy.
47
48    -- make socket closing more verbose when Perlbal::DEBUG is set
49
50    -- verify_backend_path configuration option
51
52    -- don't overwrite $^P, allows use of perl debugger on perlbal.
53
541.60: 2007-10-23
55
56    -- accept LFLF to end HTTP request headers, instead of just
57       CRLFCRLF.  easier monitoring with netcat & other popular
58       webservers accept LFLF anyway.  (Paul Baker)
59
60    -- SHUTDOWN GRACEFUL [timeout] - now accepts optional timeout
61       parameter to force shutdown after that period in seconds
62
63    -- make SSL non-blocking
64
65    -- make persist_client_timeout service tunable apply to the max_idle_time
66       value used to kill sockets that are idle
67
68    -- add Vpath plugin for selectors; can select on URI regex now
69
70    -- add ability to set default_service on selector services; any
71       request that is not caught by a selector plugin instead gets
72       routed to the defined default service
73
74    -- add MIME [ LIST | REMOVE <ext> | SET <ext> <mime> ] command for
75       managing the internal list of mime-types
76
77    -- return an error when trying to use HEADER command on a
78       service that isn't of role reverse_proxy
79
80    -- add hook to attach when a service selector is getting a client
81       returned to it.
82
83    -- fixed huge memory leak in Stats plugin
84
85    -- Fix t/15-webserver.t to not fail once in a while (timing glitch)
86
87    -- Fix handling of a proxy response that doesn't have a Reason-Phrase
88       on the HTTP status line.
89
90    -- Update 'queues' management command to output information about low
91       priority queue, now that we use it.
92
93    -- the buffered upload rate test should pass more reliably now.  some
94       people reported it sporadically (or often) failing before
95
96    -- new per-service configuration value: persist_client_timeout -
97       timeout in seconds for HTTP keep-alives to the end user
98       (defaults to 30 seconds)
99
100    -- new server configuration value: pidfile - for managing an internal
101       pidfile.
102
1031.59: 2007-05-22
104
105    -- only call die_gracefully on a socket if it CAN die_graceully.  fixes
106       shutdown graceful on mogstored, which has things betsides subclasses
107       of Perlbal::Socket in its Danga::Socket event loop
108
109    -- WARNING:  removed Linux::AIO support.  go get IO::AIO 1.6 at least if
110       you use webserver mode or reproxy files or do buffered uploads.
111
1121.58: 2007-05-11
113
114    -- plugin reload support, if plugin supports it.  plugin must implement
115           sub can_reload { 1 }
116       and optionally:
117           sub pre_reload_unload { ... }
118       (which is called before the ->unload, module reload, and ->load)
119       new management command is:
120           reload <plugin_name>
121
1221.57: 2007-04-26
123
124    -- make ClientHTTP (webserver mode) support transfer-encoding
125       "chunked" PUTs, when PUTs are already enabled.  useful
126       for things like MogileFS, where writing clients may not
127       know the final length ahead of time to predeclare in the
128       Content-Length request header.
129
130    -- Add the client_ip to the X-Forwarded-For header when the
131       upstream is "trusted" (Ask Bjoern Hansen).
132
1331.56: 2007-04-16
134
135    -- make HTML proper in ClientManage interface Jacques Marneweck
136       <jacques@powertrip.co.za>
137
138    -- fix "make test" on OS X.  Radu Greab <radu@yx.ro> and
139       Chuck Remes <cremes.devlist@mac.com> fixed & confirmed.
140
141    -- let accesscontrol plugin have a new match action, "queue_low",
142       to make a match force a request onto the low-priotity queue.
143       this match action is in addition to the two previous ones
144       (allow and deny).
145
146    -- start of work on making BackendHTTPs be abstract, dispatching
147       to a child process over a socketpair which speaks HTTP on
148       stdin/stdout.  Unfinished.  To be polished in future.
149
150    -- new hook "make_low_priority", like "make_high_priority"
151
1521.55: 2007-03-21
153
154    -- add plugin that returns 304 automatically on incoming requests
155       with If-Modified-Since header and matching a regular expression
156       on the Host header. (for hostnames serving immutable resources,
157       where if client has ANY version, it's the correct one.)  see:
158       example conf at conf/not-modified-plugin.conf
159
160    -- do HEAD to reproxied hosts, if client did a HEAD (Radu Greab
161       <radu@yx.ro>)
162
163    -- fix race+crash in buffered upload writing/purging
164
1651.54: 2007-02-05
166
167    -- supported for "Transfer-Encoding: chunked" requests (HTTP/1.1 feature)
168       as well as the "Expect: 100-continue", which generally accompany
169       chunked requests.  requires "buffered_uploads" be enabled.  see
170       doc/http-versions.txt for details.
171
1721.53: 2006-12-05
173
174    -- fix a crash as reported on mailing lists, with backends not
175       releasing references to clientproxies when coming through
176       service selectors, and backends then timing out, crashing
177       the server.
178
179    -- if backend sends x-reproxy-url and HTTP 204 No Content, upgrade
180       that to a 200 when sending to the client.
181
182    -- let non-Perlbal::Socket Danga::Socket objects exist without
183       crashing in cleanup handler (allows use of Gearman::Client::Async
184       in plugins)
185
1861.52: 2006-11-13
187
188    -- fix crash in buffered uploads when *::AIO doesn't write everything
189       to disk that's requested of it.  we were unshifting back onto the
190       write queue a scalar, not a scalarref.
191
192    -- AIO channels.  from the code:
193
194       "prevents all AIO threads from being consumed by requests for same
195        failing/overloaded disk by isolating them into separate 'channels' in
196        parent process and not dispatching more than the max in-flight count
197        allows.  think of a channel as a named queue.  or in reality, a disk."
198
199    -- allow setting of SO_SNDBUF on a per-service level
200
2011.51: 2006-10-04
202
203    -- set alive_time during slow PUTs.  was causing problems
204       replicating large files in mogile, hitting fake idle timeout.
205
206    -- pipelining HTTP injection fix.
207
208    -- include Host header to reproxy backends
209           patch by Jonty Wareing <jonty.wareing@gmail.com>
210
2111.50: 2006-09-08
212
213    -- add in optional Devel::Gladiator usage for memory tracking
214
215    -- fix memory leaks in concatenanted GETs on error cases
216
217    -- fixes to run / run better on OS X (Artur Bergman)
218
2191.49: 2006-08-30
220
221    -- Very basic help hints command, simply dumps all possible commands.
222
223    -- Add another statistic for reproxy caches, the current size of a particular
224       service's cache, maximum size, and fill percentage.
225
2261.48: 2006-08-18
227
228    -- optionally cache in-process the results of X-Reproxy-URL reponses
229
2301.47: 2006-08-15
231
232    -- concatenanted GETs sent 304 Not Modified w/ content-lengths.  should
233       be without.  fixed.  also including t/17-webserver-concat which forgot
234       to be checked into svn/MANIFEST earlier
235
2361.46: 2006-08-10
237
238    -- fix Mart's broken win32 support that broke Unix, part 2:  syslog when
239       daemonized.  TODO: test case should test daemonization mode.
240
2411.45: 2006-08-10
242
243    -- fix Mart's broken win32 support that broke Unix.  TODO:  test to raise/check
244       fd limit so this doesn't happen again on unix.
245
2461.44: 2006-08-10
247
248    -- allow a no-op ?foo at the end of concatenated-get URLs, so they'd be of
249       the form:  http://host/dir??file1,file2,file3?noopsection.  the no-op
250       section is good for cache-busting, putting in, say, the modtime of the
251       newest file, forcing browsers like safari (who over-cache) to reload.
252
253    -- set a mime-type other than text/plain on concatenated-get requests,
254       only falling back to text/plain if none of files have a known mime type.
255       in practice a request is all css or all js, so match is found by looking
256       at 1st file.  this is required since mozilla won't show CSS if not text/css.
257
258    -- actually be able to start up using 'perlbal' command.  test
259       suite passed before, but moving $VERSION into Perlbal.pm
260       had quitely broke it all.
261
2621.43: 2006-08-09
263
264    -- there's a case where offset gets past end of file in static file
265       code, but very rarely.  sendfile handles this w/ an error that
266       we dealt with, but the new readahead code didn't and crashed.
267       working around for now, until root cause is found for offset
268       going past.
269
270    -- eliminate some warnings in error cases.  only really affects noise
271       in test suite
272
273    -- work better on win32
274
275    -- added the ability for plugins to create custom service roles and
276       add custom configuration options to services, demo is available
277       as conf/echoservice.conf and lib/Perlbal/Plugin/EchoService.pm
278
2791.42: 2006-08-03
280
281    -- debug management command 'varsize' to track size of internal
282       data structures, to make sure none get out of control.
283       there's a report that CPU/mem grow slowly over time, and after
284       a month or so of uptime, a restart is needed.  this might help
285       diagnose that.
286
287    -- allow expansion/interoplation of stuff in config files/commands.
288       for now just mapping network device names to IP addresses:
289          SET listen = ${ip:eth0}:80
290
291    -- more hooks as requested by community
292
293    -- concatenated get feature.  where a client have use a
294       comma-separated list of files to return, always in text/plain.
295       Useful for webapps which have dozens/hundreds of tiny css/js
296       files, and don't trust browsers/etc to do pipelining.
297       Decreases overall roundtrip latency a bunch, but requires app
298       to be modified to support it.  See t/17-concat.t test for
299       details.
300
301    -- do AIO readahead before sendfile to reduce blocking caused
302       by disk reads from sendfile.  increases throughput.  see:
303       http://brad.livejournal.com/2228488.html
304
305    -- add 'latency' configuration on selector roles
306
3071.41: 2006-02-06
308
309    -- IE sends a request header like "If-Modified-Since: <DATE>;
310       length=<length>" so we have to remove the length bit before
311       comparing it with our date then we save the length to compare
312       later.
313
314    -- support for reproxying to a named service.  if backend returns
315       "X-Reproxy-Service: <name>" and no content, the entire original
316       client GET/HEAD request is re-sent to the new named service.
317       the "enable_reproxy" option has to be enabled for the original
318       service.
319
3201.40: 2006-01-17
321
322    -- support for optional retrying of requests after a 500 error,
323       so user won't see the 500 error.  boolean option, as well
324       as configurable schedule of how often to retry backends.
325
326    -- clean up directory indexing HTML: Mark Smith and Fred Moyer
327       (fred@redhotpenguin.com)
328
3291.39: (beta for 1.40) 2005-10-26
330
331    -- new feature for virtual host plugin:  the Host header can be trumped
332       by a magical URL form, if allowed in config.  for instance, you can
333       make an HTTP request to host "foo.com" but actually get "bar.com"
334       if you do this:
335
336          VHOST foo.com;using:bar.com  = bar
337
338       and request /__using/bar.com/IDENT from foo.com, where IDENT is
339       just \w+.  perlbal then updates the Host record to bar.com and
340       sends request URI (unaltered) to the "bar" service.
341
342       this is useful for circumventing browser host restrictions (java,
343       javascript, flash, etc...) when you actually control both
344       domains.
345
3461.38: (beta for 1.40) 2005-10-19
347
348    -- some paranoia evals around some parts of buffered uploads that
349       SAPO reported crashes in occasionally.  added FIXMEs to investigate
350       too.  for now, though, evals around closing files is safer.
351
352    -- new feature: inter-perlbal upload tracking.  for fancy upload
353       bars driven by XmlHttpRequest when clients are upload large files
354
355    -- WARNING: reproxying (files or URLs) is now disabled by default,
356       and must be enabled per-service with "enable_reproxy = true"
357
358    -- do a final little read before closing an HTTP connection
359       to make sure we have no unread data in kernel (notably
360       an extra "\r\n" from an IE post), so when we do close, we
361       don't send a RST packet to the end user.  Thanks to Kevin
362       Lewandowski from discogs.com for the bug report.
363
364    -- use Danga::Socket's AddTimer interface to disconnect
365       stale persistent connections every 5 seconds, driven by
366       a timer, rather than every 15 seconds, driven by
367       socket creation.
368
369    -- there was a bug where 304 Not Modified responses would
370       cause a connection close (and thus RST packets) even
371       though keep-alive was negotiated and would've worked
372
373    -- ignore URL arguments when doing directory indexing
374
375    -- work a little better under "trickle".  (but still not perfect...
376       trickle doesn't quite work on Perlbal, unfortunately. it's useful,
377       or would've been useful, for testing some parts...)
378
379    -- avoid an occasional warning with dirindexing on unreadable directories
380
3811.37 (beta for 1.40) 2005-08-29
382
383    -- "use <name>" command to set the direct object for future commands
384
385    -- AccessControl plugin to allow/deny by default or on IPs or
386       netmasks.
387
388    -- ClientManage could spin in its inherited event_write, causing
389       99.9% cpu usage.  Bug is arguably Danga::Socket's, but also
390       ours because it's documented what we should do and we didn't.
391       The fix is to shut down watching writability when we're done
392       writing.
393
394    -- make accept_client and its callers deal with the possibility
395       that accept_client fails not because the backend is bogus, but
396       because the client is.  so now accept_client can close the
397       client and callers have to be aware of that.
398
399    -- after running this version on production on LiveJournal.com for
400       a bit, we discovered some cases that we'd flag as should never happen,
401       but actually do, so updated the comments and behavior to
402       do the right thing and not just crash with an assertion.
403
404    -- fix misspellings of trusted_upstream_proxies that didn't
405       come along for the renaming ride earlier
406
407    -- webserver mode now ignores URL arguments when looking up
408       filename
409
410    -- remove warnings accessing undefs in ranges and vhosts
411
412    -- new --version and --help flags.  also a usage message on bogus
413       options (or when --help).  props to Jacques Marneweck
414       <jacques@powertrip.co.za> for the help and motivation.
415
4161.36 (beta for 1.40) 2005-08-19
417
418    -- fix bug in ClientProxy when user disconnects after POST/PUTing
419       a content body, but before a response comes back.
420
421    -- now checks correctly for Danga::Socket version 1.44 or above.
422       (required version was in quotes, confusing perl.)
423
424    -- vhost plugin: strip off port specification from the Host header
425       before trying to match with configured patterns.
426
4271.35: (beta of 1.40) 2005-08-16
428
429    -- beta SSL support in a few lines of code.  maybe it's completely
430       done.  maybe it's barely done.  But it seems to work?  I'm no
431       SSL master... IO::Socket::SSL just made it so easy.
432
433    -- lots more tests
434
435    -- lots more cleanup
436
437    -- fix potential crashing bugs in the PUT path.  luckily ones we
438       never hit.
439
440    -- lots and lots of code cleanup
441
442    -- load plugins by either the exact case specified, all lowercase,
443       or all lowercase with first letter uppercase.  then remember
444       the case for unloading (which was never implemented?)
445
446    -- reorganize/cleanup code related to stalling the backend due to
447       client's buffer size exceeding one of the two limits.
448       introduce "backend_stalled"
449
450    -- buffer uploads to disk
451
4521.3: (2005-06-26)
453
454    -- introduce CommandContext, so management commands can be less
455       verbose when in config files (service/pool names can be left off
456       when you just created them a couple lines before)
457
458    -- remove sendstats support
459
460    -- exit with 0 vs non-zero when/if Perlbal crashes.  new command
461       "crash" to fake a crash, for testing.
462
463    -- entirely redone management command parsing/dispatching (major
464       code cleanup)
465
466    -- virtual host plugin on service selector framework
467
468    -- service selector framework
469
470    -- make Net::Netmask optional
471
472    -- byte range support for both webserver mode and reproxy-file mode
473       Giao Phan <giao@guba.com>.  so clients can resume large transfers.
474
475    -- test suite
476
477    -- IO::AIO support (brad)
478
479    -- change response code to client to 200 on reproxy-file from backend
480
481    -- 'nodes' command now takes as an optional argument a specific ip:port to
482       dump the node stats for
483
484    -- AIO abstraction layer (Perlbal::AIO) which can currently do either
485       Linux::AIO or "none" (doing everything sync).  also in future File::FDpasser
486       and other OS-specific modes [brad]
487
488    -- add buffer_backend_connect to do in memory buffering of data before we
489       request a backend; assists slow clients without tying up a mod_perl
490
491    -- fix spinning issue when webnodes unavailable; should now not consume 100%
492       CPU in those cases
493
494    -- revamp verbose functionality; by default it's still of, but if you specify
495       VERBOSE ON in the config file, it turns it on for management connections
496       by default.  management connections, when specifying VERBOSE ON/OFF, will
497       now set the flag only for that connection.
498
499    -- new command for config file; VERBOSE ON/OFF; can be used to enable or
500       disable confirmation of all commands such as SET, SERVER, CREATE, etc.
501       by default, it's off for config files, but on for management connections.
502
503    -- add generation count to services that increments every time a pool is
504       switched.  this data is now stored on backends when they're spawned as
505       well, and when we allocate a backend we verify the generation so old ones
506       are thrown away.
507
508    -- allow setting of nodefile on pools to 'none' or 'null' or 'undef' or just
509       an empty set of quotes ("", '') in order to stop using node files
510
511    -- automatically set use count to 0 on new nodes coming in from nodefile
512
513    -- made auto-vivification of pulls throw warnings, and made Perlbal die if it
514       tries to vivify a pool and the user has previously manually declared a pool
515
516    -- updated pool commands to be more flexible (POOL pool ADD node, etc)
517
518    -- add pools; a way of having different sets of nodes and instantly switching
519       between them, so traffic stops going to old nodes; see the example config
520       file for usage
521
522    -- work partially without Linux::AIO (does sync stat of node file in reverse
523       proxy mode, and webserver mode doesn't work) --brad
524
5251.2 (2005-03-07)
526    -- add new stats command 'nodes' that shows information on each node that we've
527       been connecting to -- last connect time, last attempt time, a breakdown of
528       the last 500 status codes returned, etc
529
530    -- add ability to use new Danga::Socket profiling; 'profile on', 'profile data'
531       to see the info so far, and 'profile off' to disable it
532
533    -- graceful shutdown now flags sockets that are busy to die so they die when
534       they're done with their current connection
535
536    -- sockets in persist_wait now get closed immediately during a graceful shutdown
537
538    -- fix handling of OPTIONS responses; used to do its own state clearing but
539       it now uses the next_request method as it should
540
541    -- fix bug with determination of keep-alive in http 1.1 case specifying
542       a connection: close header
543
544    -- added 'uptime' management command to track how long Perlbal has been up
545
546    -- new config commands: HEADER INSERT <svc> <header>: <value> and HEADER
547       REMOVE <svc> <header> which will insert and remove headers from user
548       requests before they're sent to backend proxy nodes.
549
550    -- add dependency to Net::Netmask; now you can specify trusted_upstream_proxies
551       on a service (SET service.trusted_upstream_proxies = 10.0.0.0/8, etc)
552       which will allow requests from that range to set X-Forwarded-For, X-Host,
553       and X-Forwarded-Host headers.
554
555    -- fixed a bug that caused connections to hang when the backend responded
556       before the user was done sending data
557
558    -- reset some variables that weren't being reset: read_buf, read_ahead, read_size
559
560    -- "proc" management command shows user and system CPU usage for Perlbal
561       this run, as well as a delta since the last time you ran "proc"
562
563    -- added Perlbal::XS interface for modules to use; also 'xs' management
564       command to see the status of XS modules
565
566    -- bug in PalImg caused crash on files with no length (or when another
567       error occurs that causes no data to be sent to new_gif_palette function)
568
569    -- ReproxyManager would sometimes let closed backends back into the pool
570       and hand them off to clients, fixed to check for that
571
572    -- new policy: you don't muck around with the internals of other classes.
573       notably, clients don't change the internals of a backend and backends
574       don't change the internals of a client.  this was causing all sorts of
575       problems because nobody was cleaning up properly.  (especially with regard
576       to "who is my backend's client" type questions.)
577
578    -- fixed up code that did its own keep-alive checks to use the HTTPHeaders
579       functions so that in the future every part of the code stays up to date
580
581    -- Perlbal::Socket now has the option to keep track of all objects that
582       are created.  new command to management interface 'leaks' will show
583       all objects currently in memory.  turn this functionality on by enabling
584       the TRACK_OBJECTS constant in Perlbal::Socket.
585
586    -- split keep-alive logic into request and response methods and cleared
587       up how that works
588
589    -- rewrote reproxy URI support.  new class Perlbal::ReproxyManager does all
590       of the work relating to reproxies.  it's basically a service class but
591       stripped down and dealing with single endpoints instead of pools.  much
592       much much more robust under heavy load.  (Junior, Brad)
593
594    -- now that we support persistent connections, the 'queues' command didn't
595       have an accurate time; added ClientProxy member last_request_time so
596       we can accurately tell how long requests have been waiting for
597
598    -- Danga::Socket got an overhaul; close and steal_socket now share a lot
599       of code by calling _cleanup.  some more paranoia on making sure the
600       object isn't already closed when we try to do things.
601
602    -- lots more paranoia in close events and event_err handling for backends
603
604    -- added tracking mode for helping look for leaked objects; records a
605       backtrace of every object created.  "server track_obj = 0/1" to enable
606       or disable it, and then "tracking" in a management interface to see.
607
608    -- made Perlbal::objctor/objdtor take an object as their first parameter.
609       much faster than using caller().
610
611    -- fix Highpri plugin to not check hosts for high priority values when
612       the host isn't defined
613
614    -- made Palimg plugin far more paranoid about errors, and also uses new
615       ClientHTTPBase scratch area for keeping track of data instead of using
616       headers (which are generally slower)
617
618    -- fixed bug in HTTPHeaders that set_version would inadvertently
619       run into when used on a header created through new_response
620
621    -- ClientProxy class now supports persistence; set persist_client on
622       the proxy service in order to enable it.
623
624    -- Palimg plugin now supports fallback to web server mode if the
625       requested URI doesn't fit our desired pattern
626
627    -- did some cleanup; made a bunch of HTTPHeaders accesses use the
628       accessor methods instead of referencing into the object's private
629       store of data
630
631    -- fixed a crash caused by calling getsockname/getpeername on sockets
632       that have been undefined after having been stolen during an internal
633       redirect to another webserver
634
635    -- fixed _simple_response to not return a body if we're serving
636       to a HEAD request
637
638    -- bug fix: don't send Not-Modified responses to requests for dynamic
639       directory listings.  it was messing up persistent connections
640       since the directory serving code didn't get passed down whether we
641       were sending a body or not.  and not modifies on directories are hard:
642       modify time isn't altogether useful.  (file sizes could change)
643
644       this still does not-modifieds on indirect index.html directory
645       requests, because _serve_request ends up eventually calling
646       _serve_request on a different URI.  (brad)
647
648    -- added BSD::Resource as dependency to Makefile.PL (brad)
649
650    -- fixed 304 Not Modified responses to not send Content-Length
651       and Content-Type headers.  (jr)
652
6531.01 (2004-10-22)
654    -- when internally redirecting a URL, perlbal advertises
655       that it supports persisent HTTP connections now,
656       and caches those sockets for 5 seconds.  (not configurable)
657       useful under load, otherwise you waste all local ports
658       on a machine
659
660    -- ditch dependence on IO::SendFile.  do it ourselves (1 line)
661       with perl's syscall function
662
663    -- add doc/* and conf/* to MANIFEST file
664
6651.00
666    -- initial packaged release
Note: See TracBrowser for help on using the browser.