196 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			196 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
								 | 
							
								    -- byte range support for both webserver mode and reproxy-file mode
							 | 
						||
| 
								 | 
							
								       Giao Phan <giao@guba.com>.  so clients can resume large transfers.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- test suite
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- IO::AIO support (brad)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- change response code to client to 200 on reproxy-file from backend
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- 'nodes' command now takes as an optional argument a specific ip:port to
							 | 
						||
| 
								 | 
							
								       dump the node stats for
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- AIO abstraction layer (Perlbal::AIO) which can currently do either
							 | 
						||
| 
								 | 
							
								       Linux::AIO or "none" (doing everything sync).  also in future File::FDpasser
							 | 
						||
| 
								 | 
							
								       and other OS-specific modes [brad]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- add buffer_backend_connect to do in memory buffering of data before we
							 | 
						||
| 
								 | 
							
								       request a backend; assists slow clients without tying up a mod_perl
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- fix spinning issue when webnodes unavailable; should now not consume 100%
							 | 
						||
| 
								 | 
							
								       CPU in those cases
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- revamp verbose functionality; by default it's still of, but if you specify
							 | 
						||
| 
								 | 
							
								       VERBOSE ON in the config file, it turns it on for management connections
							 | 
						||
| 
								 | 
							
								       by default.  management connections, when specifying VERBOSE ON/OFF, will
							 | 
						||
| 
								 | 
							
								       now set the flag only for that connection.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- new command for config file; VERBOSE ON/OFF; can be used to enable or
							 | 
						||
| 
								 | 
							
								       disable confirmation of all commands such as SET, SERVER, CREATE, etc.
							 | 
						||
| 
								 | 
							
								       by default, it's off for config files, but on for management connections.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- add generation count to services that increments every time a pool is
							 | 
						||
| 
								 | 
							
								       switched.  this data is now stored on backends when they're spawned as
							 | 
						||
| 
								 | 
							
								       well, and when we allocate a backend we verify the generation so old ones
							 | 
						||
| 
								 | 
							
								       are thrown away.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- allow setting of nodefile on pools to 'none' or 'null' or 'undef' or just
							 | 
						||
| 
								 | 
							
								       an empty set of quotes ("", '') in order to stop using node files
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- automatically set use count to 0 on new nodes coming in from nodefile
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- made auto-vivification of pulls throw warnings, and made Perlbal die if it
							 | 
						||
| 
								 | 
							
								       tries to vivify a pool and the user has previously manually declared a pool
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- updated pool commands to be more flexible (POOL pool ADD node, etc)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- add pools; a way of having different sets of nodes and instantly switching
							 | 
						||
| 
								 | 
							
								       between them, so traffic stops going to old nodes; see the example config
							 | 
						||
| 
								 | 
							
								       file for usage
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- work partially without Linux::AIO (does sync stat of node file in reverse
							 | 
						||
| 
								 | 
							
								       proxy mode, and webserver mode doesn't work) --brad
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								1.2 (2005-03-07)
							 | 
						||
| 
								 | 
							
								    -- add new stats command 'nodes' that shows information on each node that we've
							 | 
						||
| 
								 | 
							
								       been connecting to -- last connect time, last attempt time, a breakdown of
							 | 
						||
| 
								 | 
							
								       the last 500 status codes returned, etc
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- add ability to use new Danga::Socket profiling; 'profile on', 'profile data'
							 | 
						||
| 
								 | 
							
								       to see the info so far, and 'profile off' to disable it
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- graceful shutdown now flags sockets that are busy to die so they die when
							 | 
						||
| 
								 | 
							
								       they're done with their current connection
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- sockets in persist_wait now get closed immediately during a graceful shutdown
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- fix handling of OPTIONS responses; used to do its own state clearing but
							 | 
						||
| 
								 | 
							
								       it now uses the next_request method as it should
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- fix bug with determination of keep-alive in http 1.1 case specifying
							 | 
						||
| 
								 | 
							
								       a connection: close header
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- added 'uptime' management command to track how long Perlbal has been up
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- new config commands: HEADER INSERT <svc> <header>: <value> and HEADER
							 | 
						||
| 
								 | 
							
								       REMOVE <svc> <header> which will insert and remove headers from user
							 | 
						||
| 
								 | 
							
								       requests before they're sent to backend proxy nodes.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- add dependency to Net::Netmask; now you can specify trusted_upstream_proxies
							 | 
						||
| 
								 | 
							
								       on a service (SET service.trusted_upstream_proxies = 10.0.0.0/8, etc)
							 | 
						||
| 
								 | 
							
								       which will allow requests from that range to set X-Forwarded-For, X-Host,
							 | 
						||
| 
								 | 
							
								       and X-Forwarded-Host headers.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- fixed a bug that caused connections to hang when the backend responded
							 | 
						||
| 
								 | 
							
								       before the user was done sending data
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- reset some variables that weren't being reset: read_buf, read_ahead, read_size
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- "proc" management command shows user and system CPU usage for Perlbal
							 | 
						||
| 
								 | 
							
								       this run, as well as a delta since the last time you ran "proc"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- added Perlbal::XS interface for modules to use; also 'xs' management
							 | 
						||
| 
								 | 
							
								       command to see the status of XS modules
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- bug in PalImg caused crash on files with no length (or when another
							 | 
						||
| 
								 | 
							
								       error occurs that causes no data to be sent to new_gif_palette function)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- ReproxyManager would sometimes let closed backends back into the pool
							 | 
						||
| 
								 | 
							
								       and hand them off to clients, fixed to check for that
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- new policy: you don't muck around with the internals of other classes.
							 | 
						||
| 
								 | 
							
								       notably, clients don't change the internals of a backend and backends
							 | 
						||
| 
								 | 
							
								       don't change the internals of a client.  this was causing all sorts of
							 | 
						||
| 
								 | 
							
								       problems because nobody was cleaning up properly.  (especially with regard
							 | 
						||
| 
								 | 
							
								       to "who is my backend's client" type questions.)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- fixed up code that did its own keep-alive checks to use the HTTPHeaders
							 | 
						||
| 
								 | 
							
								       functions so that in the future every part of the code stays up to date
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- Perlbal::Socket now has the option to keep track of all objects that
							 | 
						||
| 
								 | 
							
								       are created.  new command to management interface 'leaks' will show
							 | 
						||
| 
								 | 
							
								       all objects currently in memory.  turn this functionality on by enabling
							 | 
						||
| 
								 | 
							
								       the TRACK_OBJECTS constant in Perlbal::Socket.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- split keep-alive logic into request and response methods and cleared
							 | 
						||
| 
								 | 
							
								       up how that works
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- rewrote reproxy URI support.  new class Perlbal::ReproxyManager does all
							 | 
						||
| 
								 | 
							
								       of the work relating to reproxies.  it's basically a service class but
							 | 
						||
| 
								 | 
							
								       stripped down and dealing with single endpoints instead of pools.  much
							 | 
						||
| 
								 | 
							
								       much much more robust under heavy load.  (Junior, Brad)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- now that we support persistent connections, the 'queues' command didn't
							 | 
						||
| 
								 | 
							
								       have an accurate time; added ClientProxy member last_request_time so
							 | 
						||
| 
								 | 
							
								       we can accurately tell how long requests have been waiting for
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- Danga::Socket got an overhaul; close and steal_socket now share a lot
							 | 
						||
| 
								 | 
							
								       of code by calling _cleanup.  some more paranoia on making sure the
							 | 
						||
| 
								 | 
							
								       object isn't already closed when we try to do things.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- lots more paranoia in close events and event_err handling for backends
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- added tracking mode for helping look for leaked objects; records a
							 | 
						||
| 
								 | 
							
								       backtrace of every object created.  "server track_obj = 0/1" to enable
							 | 
						||
| 
								 | 
							
								       or disable it, and then "tracking" in a management interface to see.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- made Perlbal::objctor/objdtor take an object as their first parameter.
							 | 
						||
| 
								 | 
							
								       much faster than using caller().
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- fix Highpri plugin to not check hosts for high priority values when
							 | 
						||
| 
								 | 
							
								       the host isn't defined
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- made Palimg plugin far more paranoid about errors, and also uses new
							 | 
						||
| 
								 | 
							
								       ClientHTTPBase scratch area for keeping track of data instead of using
							 | 
						||
| 
								 | 
							
								       headers (which are generally slower)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- fixed bug in HTTPHeaders that set_version would inadvertently
							 | 
						||
| 
								 | 
							
								       run into when used on a header created through new_response
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- ClientProxy class now supports persistence; set persist_client on
							 | 
						||
| 
								 | 
							
								       the proxy service in order to enable it.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- Palimg plugin now supports fallback to web server mode if the
							 | 
						||
| 
								 | 
							
								       requested URI doesn't fit our desired pattern
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- did some cleanup; made a bunch of HTTPHeaders accesses use the
							 | 
						||
| 
								 | 
							
								       accessor methods instead of referencing into the object's private
							 | 
						||
| 
								 | 
							
								       store of data
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- fixed a crash caused by calling getsockname/getpeername on sockets
							 | 
						||
| 
								 | 
							
								       that have been undefined after having been stolen during an internal
							 | 
						||
| 
								 | 
							
								       redirect to another webserver
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- fixed _simple_response to not return a body if we're serving
							 | 
						||
| 
								 | 
							
								       to a HEAD request
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- bug fix: don't send Not-Modified responses to requests for dynamic
							 | 
						||
| 
								 | 
							
								       directory listings.  it was messing up persistent connections
							 | 
						||
| 
								 | 
							
								       since the directory serving code didn't get passed down whether we
							 | 
						||
| 
								 | 
							
								       were sending a body or not.  and not modifies on directories are hard:
							 | 
						||
| 
								 | 
							
								       modify time isn't altogether useful.  (file sizes could change)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								       this still does not-modifieds on indirect index.html directory
							 | 
						||
| 
								 | 
							
								       requests, because _serve_request ends up eventually calling
							 | 
						||
| 
								 | 
							
								       _serve_request on a different URI.  (brad)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- added BSD::Resource as dependency to Makefile.PL (brad)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- fixed 304 Not Modified responses to not send Content-Length
							 | 
						||
| 
								 | 
							
								       and Content-Type headers.  (jr)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								1.01 (2004-10-22)
							 | 
						||
| 
								 | 
							
								    -- when internally redirecting a URL, perlbal advertises
							 | 
						||
| 
								 | 
							
								       that it supports persisent HTTP connections now,
							 | 
						||
| 
								 | 
							
								       and caches those sockets for 5 seconds.  (not configurable)
							 | 
						||
| 
								 | 
							
								       useful under load, otherwise you waste all local ports
							 | 
						||
| 
								 | 
							
								       on a machine
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- ditch dependence on IO::SendFile.  do it ourselves (1 line)
							 | 
						||
| 
								 | 
							
								       with perl's syscall function
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -- add doc/* and conf/* to MANIFEST file
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								1.00
							 | 
						||
| 
								 | 
							
								    -- initial packaged release
							 |