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