root/trunk/CHANGES @ 705

Revision 705, 24.0 kB (checked in by marksmith, 2 years ago)

-- add Vpath plugin for selectors; can select on URI regex now

-- add ability to set default_service on selector services; any

request that is not caught by a selector plugin instead gets
routed to the defined default service (if there is one)

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