root/trunk/CHANGES @ 617

Revision 617, 20.4 kB (checked in by bradfitz, 3 years ago)

-- supported for "Transfer-Encoding: chunked" requests (HTTP/1.1 feature)

as well as the "Expect: 100-continue", which generally accompany
chunked requests. requires "buffered_uploads" be enabled. see
doc/http-versions.txt for details.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1    -- supported for "Transfer-Encoding: chunked" requests (HTTP/1.1 feature)
2       as well as the "Expect: 100-continue", which generally accompany
3       chunked requests.  requires "buffered_uploads" be enabled.  see
4       doc/http-versions.txt for details.
5
61.53: 2006-12-05
7
8    -- fix a crash as reported on mailing lists, with backends not
9       releasing references to clientproxies when coming through
10       service selectors, and backends then timing out, crashing
11       the server.
12
13    -- if backend sends x-reproxy-url and HTTP 204 No Content, upgrade
14       that to a 200 when sending to the client.
15
16    -- let non-Perlbal::Socket Danga::Socket objects exist without
17       crashing in cleanup handler (allows use of Gearman::Client::Async
18       in plugins)
19
201.52: 2006-11-13
21
22    -- fix crash in buffered uploads when *::AIO doesn't write everything
23       to disk that's requested of it.  we were unshifting back onto the
24       write queue a scalar, not a scalarref.
25
26    -- AIO channels.  from the code:
27
28       "prevents all AIO threads from being consumed by requests for same
29        failing/overloaded disk by isolating them into separate 'channels' in
30        parent process and not dispatching more than the max in-flight count
31        allows.  think of a channel as a named queue.  or in reality, a disk."
32
33    -- allow setting of SO_SNDBUF on a per-service level
34
351.51: 2006-10-04
36
37    -- set alive_time during slow PUTs.  was causing problems
38       replicating large files in mogile, hitting fake idle timeout.
39
40    -- pipelining HTTP injection fix.
41
42    -- include Host header to reproxy backends
43           patch by Jonty Wareing <jonty.wareing@gmail.com>
44
451.50: 2006-09-08
46
47    -- add in optional Devel::Gladiator usage for memory tracking
48
49    -- fix memory leaks in concatenanted GETs on error cases
50
51    -- fixes to run / run better on OS X (Artur Bergman)
52
531.49: 2006-08-30
54
55    -- Very basic help hints command, simply dumps all possible commands.
56
57    -- Add another statistic for reproxy caches, the current size of a particular
58       service's cache, maximum size, and fill percentage.
59
601.48: 2006-08-18
61
62    -- optionally cache in-process the results of X-Reproxy-URL reponses
63
641.47: 2006-08-15
65
66    -- concatenanted GETs sent 304 Not Modified w/ content-lengths.  should
67       be without.  fixed.  also including t/17-webserver-concat which forgot
68       to be checked into svn/MANIFEST earlier
69
701.46: 2006-08-10
71
72    -- fix Mart's broken win32 support that broke Unix, part 2:  syslog when
73       daemonized.  TODO: test case should test daemonization mode.
74
751.45: 2006-08-10
76
77    -- fix Mart's broken win32 support that broke Unix.  TODO:  test to raise/check
78       fd limit so this doesn't happen again on unix.
79
801.44: 2006-08-10
81
82    -- allow a no-op ?foo at the end of concatenated-get URLs, so they'd be of
83       the form:  http://host/dir??file1,file2,file3?noopsection.  the no-op
84       section is good for cache-busting, putting in, say, the modtime of the
85       newest file, forcing browsers like safari (who over-cache) to reload.
86
87    -- set a mime-type other than text/plain on concatenated-get requests,
88       only falling back to text/plain if none of files have a known mime type.
89       in practice a request is all css or all js, so match is found by looking
90       at 1st file.  this is required since mozilla won't show CSS if not text/css.
91
92    -- actually be able to start up using 'perlbal' command.  test
93       suite passed before, but moving $VERSION into Perlbal.pm
94       had quitely broke it all.
95
961.43: 2006-08-09
97
98    -- there's a case where offset gets past end of file in static file
99       code, but very rarely.  sendfile handles this w/ an error that
100       we dealt with, but the new readahead code didn't and crashed.
101       working around for now, until root cause is found for offset
102       going past.
103
104    -- eliminate some warnings in error cases.  only really affects noise
105       in test suite
106
107    -- work better on win32
108
109    -- added the ability for plugins to create custom service roles and
110       add custom configuration options to services, demo is available
111       as conf/echoservice.conf and lib/Perlbal/Plugin/EchoService.pm
112
1131.42: 2006-08-03
114
115    -- debug management command 'varsize' to track size of internal
116       data structures, to make sure none get out of control.
117       there's a report that CPU/mem grow slowly over time, and after
118       a month or so of uptime, a restart is needed.  this might help
119       diagnose that.
120
121    -- allow expansion/interoplation of stuff in config files/commands.
122       for now just mapping network device names to IP addresses:
123          SET listen = ${ip:eth0}:80
124
125    -- more hooks as requested by community
126
127    -- concatenated get feature.  where a client have use a
128       comma-separated list of files to return, always in text/plain.
129       Useful for webapps which have dozens/hundreds of tiny css/js
130       files, and don't trust browsers/etc to do pipelining.
131       Decreases overall roundtrip latency a bunch, but requires app
132       to be modified to support it.  See t/17-concat.t test for
133       details.
134
135    -- do AIO readahead before sendfile to reduce blocking caused
136       by disk reads from sendfile.  increases throughput.  see:
137       http://brad.livejournal.com/2228488.html
138
139    -- add 'latency' configuration on selector roles
140
1411.41: 2006-02-06
142
143    -- IE sends a request header like "If-Modified-Since: <DATE>;
144       length=<length>" so we have to remove the length bit before
145       comparing it with our date then we save the length to compare
146       later.
147
148    -- support for reproxying to a named service.  if backend returns
149       "X-Reproxy-Service: <name>" and no content, the entire original
150       client GET/HEAD request is re-sent to the new named service.
151       the "enable_reproxy" option has to be enabled for the original
152       service.
153
1541.40: 2006-01-17
155
156    -- support for optional retrying of requests after a 500 error,
157       so user won't see the 500 error.  boolean option, as well
158       as configurable schedule of how often to retry backends.
159
160    -- clean up directory indexing HTML: Mark Smith and Fred Moyer
161       (fred@redhotpenguin.com)
162
1631.39: (beta for 1.40) 2005-10-26
164
165    -- new feature for virtual host plugin:  the Host header can be trumped
166       by a magical URL form, if allowed in config.  for instance, you can
167       make an HTTP request to host "foo.com" but actually get "bar.com"
168       if you do this:
169
170          VHOST foo.com;using:bar.com  = bar
171
172       and request /__using/bar.com/IDENT from foo.com, where IDENT is
173       just \w+.  perlbal then updates the Host record to bar.com and
174       sends request URI (unaltered) to the "bar" service.
175
176       this is useful for circumventing browser host restrictions (java,
177       javascript, flash, etc...) when you actually control both
178       domains.
179
1801.38: (beta for 1.40) 2005-10-19
181
182    -- some paranoia evals around some parts of buffered uploads that
183       SAPO reported crashes in occasionally.  added FIXMEs to investigate
184       too.  for now, though, evals around closing files is safer.
185
186    -- new feature: inter-perlbal upload tracking.  for fancy upload
187       bars driven by XmlHttpRequest when clients are upload large files
188
189    -- WARNING: reproxying (files or URLs) is now disabled by default,
190       and must be enabled per-service with "enable_reproxy = true"
191
192    -- do a final little read before closing an HTTP connection
193       to make sure we have no unread data in kernel (notably
194       an extra "\r\n" from an IE post), so when we do close, we
195       don't send a RST packet to the end user.  Thanks to Kevin
196       Lewandowski from discogs.com for the bug report.
197
198    -- use Danga::Socket's AddTimer interface to disconnect
199       stale persistent connections every 5 seconds, driven by
200       a timer, rather than every 15 seconds, driven by
201       socket creation.
202
203    -- there was a bug where 304 Not Modified responses would
204       cause a connection close (and thus RST packets) even
205       though keep-alive was negotiated and would've worked
206
207    -- ignore URL arguments when doing directory indexing
208
209    -- work a little better under "trickle".  (but still not perfect...
210       trickle doesn't quite work on Perlbal, unfortunately. it's useful,
211       or would've been useful, for testing some parts...)
212
213    -- avoid an occasional warning with dirindexing on unreadable directories
214
2151.37 (beta for 1.40) 2005-08-29
216
217    -- "use <name>" command to set the direct object for future commands
218
219    -- AccessControl plugin to allow/deny by default or on IPs or
220       netmasks.
221
222    -- ClientManage could spin in its inherited event_write, causing
223       99.9% cpu usage.  Bug is arguably Danga::Socket's, but also
224       ours because it's documented what we should do and we didn't.
225       The fix is to shut down watching writability when we're done
226       writing.
227
228    -- make accept_client and its callers deal with the possibility
229       that accept_client fails not because the backend is bogus, but
230       because the client is.  so now accept_client can close the
231       client and callers have to be aware of that.
232
233    -- after running this version on production on LiveJournal.com for
234       a bit, we discovered some cases that we'd flag as should never happen,
235       but actually do, so updated the comments and behavior to
236       do the right thing and not just crash with an assertion.
237
238    -- fix misspellings of trusted_upstream_proxies that didn't
239       come along for the renaming ride earlier
240
241    -- webserver mode now ignores URL arguments when looking up
242       filename
243
244    -- remove warnings accessing undefs in ranges and vhosts
245
246    -- new --version and --help flags.  also a usage message on bogus
247       options (or when --help).  props to Jacques Marneweck
248       <jacques@powertrip.co.za> for the help and motivation.
249
2501.36 (beta for 1.40) 2005-08-19
251
252    -- fix bug in ClientProxy when user disconnects after POST/PUTing
253       a content body, but before a response comes back.
254
255    -- now checks correctly for Danga::Socket version 1.44 or above.
256       (required version was in quotes, confusing perl.)
257
258    -- vhost plugin: strip off port specification from the Host header
259       before trying to match with configured patterns.
260
2611.35: (beta of 1.40) 2005-08-16
262
263    -- beta SSL support in a few lines of code.  maybe it's completely
264       done.  maybe it's barely done.  But it seems to work?  I'm no
265       SSL master... IO::Socket::SSL just made it so easy.
266
267    -- lots more tests
268
269    -- lots more cleanup
270
271    -- fix potential crashing bugs in the PUT path.  luckily ones we
272       never hit.
273
274    -- lots and lots of code cleanup
275
276    -- load plugins by either the exact case specified, all lowercase,
277       or all lowercase with first letter uppercase.  then remember
278       the case for unloading (which was never implemented?)
279
280    -- reorganize/cleanup code related to stalling the backend due to
281       client's buffer size exceeding one of the two limits.
282       introduce "backend_stalled"
283
284    -- buffer uploads to disk
285
2861.3: (2005-06-26)
287
288    -- introduce CommandContext, so management commands can be less
289       verbose when in config files (service/pool names can be left off
290       when you just created them a couple lines before)
291
292    -- remove sendstats support
293
294    -- exit with 0 vs non-zero when/if Perlbal crashes.  new command
295       "crash" to fake a crash, for testing.
296
297    -- entirely redone management command parsing/dispatching (major
298       code cleanup)
299
300    -- virtual host plugin on service selector framework
301
302    -- service selector framework
303
304    -- make Net::Netmask optional
305
306    -- byte range support for both webserver mode and reproxy-file mode
307       Giao Phan <giao@guba.com>.  so clients can resume large transfers.
308
309    -- test suite
310
311    -- IO::AIO support (brad)
312
313    -- change response code to client to 200 on reproxy-file from backend
314
315    -- 'nodes' command now takes as an optional argument a specific ip:port to
316       dump the node stats for
317
318    -- AIO abstraction layer (Perlbal::AIO) which can currently do either
319       Linux::AIO or "none" (doing everything sync).  also in future File::FDpasser
320       and other OS-specific modes [brad]
321
322    -- add buffer_backend_connect to do in memory buffering of data before we
323       request a backend; assists slow clients without tying up a mod_perl
324
325    -- fix spinning issue when webnodes unavailable; should now not consume 100%
326       CPU in those cases
327
328    -- revamp verbose functionality; by default it's still of, but if you specify
329       VERBOSE ON in the config file, it turns it on for management connections
330       by default.  management connections, when specifying VERBOSE ON/OFF, will
331       now set the flag only for that connection.
332
333    -- new command for config file; VERBOSE ON/OFF; can be used to enable or
334       disable confirmation of all commands such as SET, SERVER, CREATE, etc.
335       by default, it's off for config files, but on for management connections.
336
337    -- add generation count to services that increments every time a pool is
338       switched.  this data is now stored on backends when they're spawned as
339       well, and when we allocate a backend we verify the generation so old ones
340       are thrown away.
341
342    -- allow setting of nodefile on pools to 'none' or 'null' or 'undef' or just
343       an empty set of quotes ("", '') in order to stop using node files
344
345    -- automatically set use count to 0 on new nodes coming in from nodefile
346
347    -- made auto-vivification of pulls throw warnings, and made Perlbal die if it
348       tries to vivify a pool and the user has previously manually declared a pool
349
350    -- updated pool commands to be more flexible (POOL pool ADD node, etc)
351
352    -- add pools; a way of having different sets of nodes and instantly switching
353       between them, so traffic stops going to old nodes; see the example config
354       file for usage
355
356    -- work partially without Linux::AIO (does sync stat of node file in reverse
357       proxy mode, and webserver mode doesn't work) --brad
358
3591.2 (2005-03-07)
360    -- add new stats command 'nodes' that shows information on each node that we've
361       been connecting to -- last connect time, last attempt time, a breakdown of
362       the last 500 status codes returned, etc
363
364    -- add ability to use new Danga::Socket profiling; 'profile on', 'profile data'
365       to see the info so far, and 'profile off' to disable it
366
367    -- graceful shutdown now flags sockets that are busy to die so they die when
368       they're done with their current connection
369
370    -- sockets in persist_wait now get closed immediately during a graceful shutdown
371
372    -- fix handling of OPTIONS responses; used to do its own state clearing but
373       it now uses the next_request method as it should
374
375    -- fix bug with determination of keep-alive in http 1.1 case specifying
376       a connection: close header
377
378    -- added 'uptime' management command to track how long Perlbal has been up
379
380    -- new config commands: HEADER INSERT <svc> <header>: <value> and HEADER
381       REMOVE <svc> <header> which will insert and remove headers from user
382       requests before they're sent to backend proxy nodes.
383
384    -- add dependency to Net::Netmask; now you can specify trusted_upstream_proxies
385       on a service (SET service.trusted_upstream_proxies = 10.0.0.0/8, etc)
386       which will allow requests from that range to set X-Forwarded-For, X-Host,
387       and X-Forwarded-Host headers.
388
389    -- fixed a bug that caused connections to hang when the backend responded
390       before the user was done sending data
391
392    -- reset some variables that weren't being reset: read_buf, read_ahead, read_size
393
394    -- "proc" management command shows user and system CPU usage for Perlbal
395       this run, as well as a delta since the last time you ran "proc"
396
397    -- added Perlbal::XS interface for modules to use; also 'xs' management
398       command to see the status of XS modules
399
400    -- bug in PalImg caused crash on files with no length (or when another
401       error occurs that causes no data to be sent to new_gif_palette function)
402
403    -- ReproxyManager would sometimes let closed backends back into the pool
404       and hand them off to clients, fixed to check for that
405
406    -- new policy: you don't muck around with the internals of other classes.
407       notably, clients don't change the internals of a backend and backends
408       don't change the internals of a client.  this was causing all sorts of
409       problems because nobody was cleaning up properly.  (especially with regard
410       to "who is my backend's client" type questions.)
411
412    -- fixed up code that did its own keep-alive checks to use the HTTPHeaders
413       functions so that in the future every part of the code stays up to date
414
415    -- Perlbal::Socket now has the option to keep track of all objects that
416       are created.  new command to management interface 'leaks' will show
417       all objects currently in memory.  turn this functionality on by enabling
418       the TRACK_OBJECTS constant in Perlbal::Socket.
419
420    -- split keep-alive logic into request and response methods and cleared
421       up how that works
422
423    -- rewrote reproxy URI support.  new class Perlbal::ReproxyManager does all
424       of the work relating to reproxies.  it's basically a service class but
425       stripped down and dealing with single endpoints instead of pools.  much
426       much much more robust under heavy load.  (Junior, Brad)
427
428    -- now that we support persistent connections, the 'queues' command didn't
429       have an accurate time; added ClientProxy member last_request_time so
430       we can accurately tell how long requests have been waiting for
431
432    -- Danga::Socket got an overhaul; close and steal_socket now share a lot
433       of code by calling _cleanup.  some more paranoia on making sure the
434       object isn't already closed when we try to do things.
435
436    -- lots more paranoia in close events and event_err handling for backends
437
438    -- added tracking mode for helping look for leaked objects; records a
439       backtrace of every object created.  "server track_obj = 0/1" to enable
440       or disable it, and then "tracking" in a management interface to see.
441
442    -- made Perlbal::objctor/objdtor take an object as their first parameter.
443       much faster than using caller().
444
445    -- fix Highpri plugin to not check hosts for high priority values when
446       the host isn't defined
447
448    -- made Palimg plugin far more paranoid about errors, and also uses new
449       ClientHTTPBase scratch area for keeping track of data instead of using
450       headers (which are generally slower)
451
452    -- fixed bug in HTTPHeaders that set_version would inadvertently
453       run into when used on a header created through new_response
454
455    -- ClientProxy class now supports persistence; set persist_client on
456       the proxy service in order to enable it.
457
458    -- Palimg plugin now supports fallback to web server mode if the
459       requested URI doesn't fit our desired pattern
460
461    -- did some cleanup; made a bunch of HTTPHeaders accesses use the
462       accessor methods instead of referencing into the object's private
463       store of data
464
465    -- fixed a crash caused by calling getsockname/getpeername on sockets
466       that have been undefined after having been stolen during an internal
467       redirect to another webserver
468
469    -- fixed _simple_response to not return a body if we're serving
470       to a HEAD request
471
472    -- bug fix: don't send Not-Modified responses to requests for dynamic
473       directory listings.  it was messing up persistent connections
474       since the directory serving code didn't get passed down whether we
475       were sending a body or not.  and not modifies on directories are hard:
476       modify time isn't altogether useful.  (file sizes could change)
477
478       this still does not-modifieds on indirect index.html directory
479       requests, because _serve_request ends up eventually calling
480       _serve_request on a different URI.  (brad)
481
482    -- added BSD::Resource as dependency to Makefile.PL (brad)
483
484    -- fixed 304 Not Modified responses to not send Content-Length
485       and Content-Type headers.  (jr)
486
4871.01 (2004-10-22)
488    -- when internally redirecting a URL, perlbal advertises
489       that it supports persisent HTTP connections now,
490       and caches those sockets for 5 seconds.  (not configurable)
491       useful under load, otherwise you waste all local ports
492       on a machine
493
494    -- ditch dependence on IO::SendFile.  do it ourselves (1 line)
495       with perl's syscall function
496
497    -- add doc/* and conf/* to MANIFEST file
498
4991.00
500    -- initial packaged release
Note: See TracBrowser for help on using the browser.