root/trunk/CHANGES @ 707

Revision 707, 24.1 kB (checked in by marksmith, 2 years ago)

-- make persist_client_timeout service tunable apply to the max_idle_time

value used to kill sockets that are idle

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