root/tags/Perlbal-1.43/CHANGES

Revision 484, 16.9 kB (checked in by bradfitz, 4 years ago)

+1.43: 2006-08-09
+
+ -- there's a case where offset gets past end of file in static file
+ code, but very rarely. sendfile handles this w/ an error that
+ we dealt with, but the new readahead code didn't and crashed.
+ working around for now, until root cause is found for offset
+ going past.
+
+ -- eliminate some warnings in error cases. only really affects noise
+ in test suite
+

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