ChangeLog (22028B)
1 2.81 [KK 2013-04-05] 2 - Upped to c-conf 1.18 for Raspberry Pi. 3 4 2.80 [KK 2013-03-15] 5 - Upped to c-conf 1.17 (Ubuntu 64bits libs). 6 - When replacing Host: headers with the back end address, the port is 7 also appended. See flag -I / --replace-host-header. Thanks Nuno F. 8 for the patch. 9 10 2.79 [KK 2012-04-19] 11 - Bugfix in the web interface network handling. 12 13 2.78 [KK 2012-04-18] 14 - xrctl fixes, thanks Carlos H. for reporting. 15 16 2.77 [KK 2012-02-16] 17 - gc++ 4.6 portability issues 18 19 2.76 [KK 2011-05-24] 20 - Round-robin dispatching takes weights into acocunt. By request of 21 and suggested by David T. 22 23 2.75 [KK 2011-05-23] 24 - Signal SIGUSR1 toggles verbose logging, SIGUSR2 toggles debug 25 logging. 26 - Back end connection attempts improved (assumes "alive" unless a 27 failure is seen). 28 - Flag parsing for -p / --pidfile fixed. 29 - Warning: Memory leak reported with high load. Under investigation. 30 31 2.74 [KK 2011-04-05] 32 - Promoted to STABLE. A word of warning: DOS protection under high 33 load may be unstable, currently under investigation. 34 35 2.73 [KK 2011-03-05] 36 - Removed too much debugging verbosity from socket handling 37 - Bugfix in basesocket/accept.cc, thanks Mario M. for reporting 38 - Change in tcp dispatcher: when the algorithm fails, a new target 39 list is constructed for re-dispatching. 40 41 2.72 [KK 2011-01-11] 42 - Web interface correctly retrieved in "xrctl list" (including the 43 display name and all). 44 - Small bugfix in TCP-connect-checking of dead back ends (see 45 xr/backend/check.cc). 46 - Bugfix in the first-available dispatch algorithm. 47 - Socket handling rewritten, using Socket/Basesocket classes. Consider 48 this version alpha-code until the new socket handling proves itself! 49 50 2.71 [KK 2010-11-25] 51 - Recentness of doc/xr.pdf is checked (against doc/xr.odt) during 52 "make commit" 53 - Error messages are also prefixed with a timestamp when flagged so 54 (just as warnings, verbose messages etc.) 55 - Web interface flag --web-interface may hold a 3rd argument, a name. 56 This name is rendered in the browser. Xrctl tag "webinterfacename" 57 introduced for this purpose. 58 - Fixed 32-bit issue in MutexTable::hash(), the modulo-operation while 59 hashing worked on 64-bit systems, but not on 32-bit. (Thanks, 60 several people for reporting this.) 61 - Fixed mutex issue during pre-operation scanning of back ends. XR 62 would crash when started with only dead back ends in the pre-scan phase. 63 64 2.70 [KK 2010-10-28] 65 - Bugfix in 3-secs delay during out of file handles conditions (see 66 xr/balancer/serve.cc) 67 - Potential bug fixed in web interface responder (check for validity 68 of client socket added). 69 - Browser requests for /favicon.ico are silently dropped (404 return), 70 instead of showing up in the error log as unknown url. 71 - Small codechanges in back end testing via TCP. E.g, when tcp-connect 72 checking a back end, the connection is attempted twice by default. 73 Just once appears to fail on some systems, twice fixes the problem. 74 - Basic authentication for the web interface implemented. This can be 75 given on the commandline using --webinterface-auth, in xrctl.xml 76 using the tag webinterfaceauth, or injected later on the url 77 /server/webinterfaceauth/USER:PASS 78 79 2.69 [KK 2010-10-08] 80 - Installation paths in the make install process can be tweaked, 81 thanks Felix A. W. O. for suggesting this. 82 - Verbose and debugging output were by mistake both controlled by the 83 flag --debug (instead of --debug and --verbose). Fixed. 84 - When the process runs out of open files, XR will sleep for 85 EMFILE_SEC secs (see the #define in sys/sys). This avoids thrashing 86 the output log. 87 - Documentation updated. 88 89 2.68 [KK 2010-09-22] 90 - All sources checked by cppcheck (static code analysis). 91 - License file added. 92 - Bugfix in xrctl.xml parsing, logger and other binaries can be 93 now specified as absolutes. 94 - Mutex handling rewritten, new code is faster than the older one and 95 hopefully more thread-safe in rare conditions (fingers crossed ;-) 96 - Macros for verbose/debug output rewritten for type-safeness. Locking 97 of cout/cerr is in try-out mode only, so that mutex locks due to 98 messages won't happen. 99 - All occurrences of inet_ntoa() changed to inet2string() (see 100 sys/inet2string.cc) for thread-safeness. 101 - Double header-processing in HTTP mode fixed. Thanks for reporting, 102 Maxim P. and Chin F. 103 - Optimisation / consistency fix in Httpbuffer::findheader(), thanks 104 Maxim P. for finding this and reporting. 105 106 2.67 [KK 2010-06-11] 107 - Further bugfix in xrctl to shell-escape all XR parameters where 108 necessary (including e.g. url matching regexps etc.). 109 110 2.66 [KK 2010-06-09] 111 - Bugfix in xrctl, --host-match arguments are now shell-quoted (they 112 are regular expressions and can contain pipe characters etc). Thanks 113 Chewped for reporting. 114 115 2.65 [KK 2010-04-26] 116 - Bugfix in backend/connect.cc - if the determination whether a back 117 end is available goes haywire, the client socket may stay open and 118 not be consumed. Thanks Franz J. for reporting! 119 - Version stamped as STABLE. 120 121 2.64 [KK 2010-01-29] 122 - Fixed signal handling for start/stop/restart. 123 - Web interface now immediately shuts down at a stop request, so that 124 next xr instances can grab the web interface port immediately. 125 126 2.63 [KK 2010-01-11] 127 - Previous 2.62 stamped as stable, 2.63 will be the new development 128 trunk. 129 130 2.62 [KK 2010-01-08] 131 - Fixed possible coredump cause in Balancer::serve(), which might 132 explain some troubles during high load (many really concurrent requests). 133 134 2.61 [KK 2009-11-17] 135 - Netbuffer::netwrite() will abort after 5 attempts that yield 0 136 written bytes. Probable cause of CPU hogging - thx Franz J. for 137 reporting. 138 - Fixed potential cause of crashes in base class for Dispatcher 139 (algorithm handler would not get initialized in the constructors). 140 141 2.60 [KK 2009-11-02] 142 - Some errors demoted to informational messages to choke the amount of 143 log information that's generated. 144 145 2.59 [KK 2009-10-14] 146 - Bugfix in logger handling of xrctl, read 147 http://xrforum.org/viewtopic.php?t=495 if you fancy. Thanks Hobbit 148 for reporting this! 149 150 2.58 [KK 2009-10-14] 151 - Added test/ftp.xml as a sample ftp service configuration. 152 - Implemented URL-based dispatching: flag --url-match/-j, present in 153 xrctl, tested in test/urlmatch.xml, added to web interface 154 - Usage information now shows long versions of flags first. 155 156 2.57 [KK 2009-09-14] 157 - Output of "xrctl status" colorized when a service is not running, 158 thanks Frederik D. for the suggestion and the code! 159 - Small cleanup of xrctl's usage information. 160 161 2.56 [KK 2009-05-26] 162 - Bugfix in cleaning of IPStore map 163 - Implemented flag --remove-reservations (xrctl: tag: removereservations) 164 - Timeouts adjusted: all read time outs set to 30, client-write set to 165 5, backend-write set to 3 166 - Implemented tag prefixtimestamp in system block to force timestamping. 167 168 2.55 [KK 2009-05-13] 169 - Implemented connection error counting of back ends. 170 - Select-handling revised: atomic readability and writeability checks, 171 see xr/fdset/wait.cc and wait_r(), wait_w(), wait_rw(). 172 - Checks for connect() success can be configured to verify only 173 writeable status of a socket (see xr/backend/connect.cc, macro 174 CONNECTCHECK_ONLY_WRITABLE in xr/etc/Makefile.class). 175 - Added test/xr-mysql-connect. 176 - Added commands kill and killstart to xrctl. Action restart renamed 177 to stopstart. 178 - Added simple benchmarking under test/: xr-http-test (based on an 179 older script) and xr-smtp-test. Plus a simple analyzer of the 180 reported timings, xr-analyze-test. 181 - Revamped stored-ip dispatcher, added IPStore class to keep track of clients. 182 183 2.54 [KK 2009-04-29] 184 - Stamped new STABLE version. 185 186 2.53 [KK 2009-04-24] 187 - test/xr-client-ping now can live without LWP::UserAgent. When this 188 Perl module is not present, the script will fall back to wget/curl. 189 - Upon thread kill, sockets are closed using socketclose() 190 (sys/socketclose.cc), which also shutdown()s the socket. 191 - Bugfix in xrctl regarding new format of client/backend timeout. 192 193 2.52 [KK 2009-04-21] 194 - Bugfix in the roundrobin dispatcher. When only one back end would be 195 up, then the roundrobin dispatcher would incorrectly compute the 196 right back end. This bug only became visible with host-matching in 197 HTTP mode. 198 199 2.51 [KK 2009-04-15] 200 - Separate "write" timeouts introduced in flags -t and -T 201 - Web interface activity overview includes client ip addresses 202 - Added test/xr-client-ping (see docs) 203 204 2.50 [KK 2009-03-30] 205 - Bugfix in activation of the onfail script in the checkup thread. 206 - Compilation flag -Werror only passed to the compiler when on the 207 development system Thera.local (see xr/etc/Makefile.class). 208 - Onstart, onend and onfail scripts (when present) are invoked with a 209 third argument, the number of connections at the time 210 - Set-Cookie header directive (see the HTTP dispatcher) attaches an 211 explicit path "/". 212 - Rewired the tcp dispatcher and http dispatcher to use a common 213 buffer inside the tcp dispatcher (instead of 2 separate ones). 214 215 2.49 [KK 2009-03-27] 216 - Implemented onfail hook (to complement onstart/onend, flag -y). 217 218 2.48 [KK 2009-03-26] 219 - Implemented onstart/onend hooks (flags -z, -Z). 220 - Sticky HTTP mode inspects the URI (parameter XRTarget) when no 221 sticky cookie is present. 222 223 2.47 [KK 2009-03-04] 224 - Stored-ip dispatching was enhanced to "anticipate" reconnects from 225 previously seen clients. The number of anticipated connections is taken 226 into account when dispatching a new client. 227 - Bugfix in command line parsing of dispatch mode lax-stored-ip (would 228 be recognized as strict). 229 230 2.46 [KK 2009-02-18] 231 - Dispatcher-related classes moved under directory xr/Dispatchers/. 232 - UDP balancer implementation started (code stubs in place). 233 - xrctl bugfixed: a backend-scope maxconnections statement would 234 confuse the global server block. Thanks Rajeev for reporting. 235 236 2.45 [KK 2009-02-18] 237 - Usage information formatted. 238 - Rubberstamped "stable"! 239 240 2.44 [KK 2009-02-11] 241 - Reviewed code for "throw"s (edited for consistency). 242 - Bug in Webinterface::execute() (during accept()). Thanks Vladimir T. 243 for reporting and testing. 244 245 2.43 [KK 2009-02-09] 246 - Added Httpbuffer::replaceheader() methods 247 - Added flag -I (to replace Host: headers), integrated in xrctl / 248 webinterface 249 - Webinterface reports approx. # of open fd's and the limit (in activity) 250 251 2.42 [KK 2009-01-28] 252 - Bugfix in "xrctl generateconfig". The activity info introduced 253 before (which the web interface now emites), confused xrctl. 254 - Bugfix in sys/ipmatch.cc: mask matching corrected for systems where 255 longs are not 4 bytes (64bit systems). 256 - Bugfix in hashed-ip dispatch mode: When no back ends were available, 257 the dispatcher would crash (fixed). 258 - XSLT stylesheet that transforms web interface slightly changed to 259 improve the looks. 260 - Bugfix in xrctl's "rotate" action. Thanks "ncisrael" for reporting 261 it in the forum. 262 263 2.41 [KK 2009-01-05] 264 - Bugfix in xrctl, thanks Eddie for reporting it. 265 266 2.40 [KK 2009-01-03] 267 - Netbuffer::read() failures are no longer logged as errors, but as 268 verbose messages. 269 - XML configuration now supports "logger" to redefine logger program. 270 - Small changes to xrctl: ps command is auto-guessed when not 271 specified in the XML configuration. 272 273 2.39 [KK 2008-12-04] 274 - Added Httpbuffer::reset() 275 - The HTTP dispatcher will show back end error returns (when the HTTP 276 code is in the 400 or 500 range) 277 - main() will show runtime limits when invoked with -v 278 - The HTTP dispatcher no longer downgrades to HTTP/1.0 and closed 279 connections. Webserver back ends can do this. 280 - Exceptions during the sending of an error page in HTTP mode are 281 discarded, no longer logged. 282 - Mutex lock added around thread startups (see Thread::start()), when 283 requested soq in sys/sys. 284 - Mutex locks around malloc()/realloc(), when requested so in sys/sys. 285 - Fixed possible socket leak in TcpDispatcher::execute(). The back end 286 socket might not have been closed when the dispatch phase crashed. 287 - Dispatchers are now derived from a new base class Dispatcher, in 288 preparation for UDP handling. 289 - Timestamp handling centralized in a class Timestamp. 290 - Messaging (msg(), debugmsg(), reportmsg(), warnmsg()) centralized. 291 - Started threads are administered in Threadlist. Separate threads are 292 killable from the web interface, or all threads to a given back end. 293 294 2.38 [KK 2008-11-19] 295 - Bugfix in xrctl: Weights and max connections in back ends are now 296 passed correctly. 297 - Added version ID to xrctl. 298 299 2.37 [KK 2008-11-17] 300 - Main accept-loop in Balancer::serve() doesn't throw an exception 301 when a network connection can't be accepted. The reason is shown in 302 a warnmsg(). 303 304 2.36 [KK 2008-11-11] 305 - Typo bugfix in xrctl, fixed. 306 - xrctl will take the environment's PATH if no path is given in the 307 configuration. 308 309 2.35 [KK 2008-11-11] 310 - The wakeup and checkup thread are always started, even when no 311 wakeups or checkups are defined. Reason is that later these timers 312 can be set in the web interface, so we want the threads running. 313 When no checks/wakeups are applicable, the threads will recheck each 314 30 secs. 315 - Server type (tcp/http) made configurable through the web interface. 316 317 2.34 [KK 2008-11-09] 318 - Fixed sys/str2parts.cc for 64bit systems. 319 320 2.33 [KK 2008-11-07] 321 - Solaris portability for gcc 3.4 issues in Tcpdispatcher::execute() 322 - Removed warnings about non-found libraries (on systems that don't 323 need them) 324 - Support for DESTDIR setting in top Makefile (for debian packaging) 325 - Man pages added as doc/xr.1, doc/xrctl.1 and doc/xrctl.xml.5. 326 327 2.32 [KK 2008-11-05] 328 - Bugfix in "stored-ip" dispatching algorithm. 329 330 2.31 [KK 2008-10-30] 331 - Changes related to XML-style configuration file support. A 332 new-style xrctl is in provided and during "make install" put in 333 BINDIR (normally: /usr/sbin). See test/sampleconf.xml for an example 334 of a configuration file. 335 - Added webinterface URI's to control DOS-protection related settings. 336 - Added DOS-protection variables to XML-output of the web interface. 337 - Server-wide maxconnection tag output moved into dosprotection block. 338 - Added display of such variables to the style sheet that renders the 339 XML in a browser. 340 - Added option close-sockets-fast to XML output and to website URI 341 controls. 342 - Added allow-from and deny-from lists to XML output and to website 343 URI controls. 344 - Added the primary distribution site to the top-level Makefile as 345 macro. This now shows up in "xr -V". The version ID and site also 346 show up at the bottom of the web interface screen. 347 - Target "uninstall" added to the top-level Makefile. 348 - Bugfix in Netbuffer::netwrite(). When the remote connection would be 349 hung up, XR would be blissfully unaware. SIGPIPE signals are now ignored. 350 - Implemented flag -g / --backend-check. Alternatives: 351 connect:ip:port, get:ip:port[/uri], external:program. 352 - Added back end check type to the web interface reports, created 353 control at web interface for /backend/NR/backendcheck/VALUE to 354 change it. Added to XML configuration parsing. 355 - Docs updated, ofc. 356 - Status of balancer shown in web interface. Minor bugfix in xrctl. 357 - Added flags -E/-e (hard/soft-maxconn-excess, to call an external 358 program). Also added to web interface with controls and updated docs. 359 - Added mutex locks around cerr output catch-blocks of exceptions. 360 - Added more checks for memory allocation faults. 361 - Implemented DNS caching of back end host names (flag -F, 362 --dns-cache-timeout). Also implemented in web interface output and 363 controls. 364 - Implemented adding and/or deleting back ends from the user 365 interface, including scripting URI's. 366 - Implemented generation of a new configuration using "xrctl 367 generateconfig". 368 369 2.30 [KK 2008-10-25] 370 - Reversioned to 2.30 in prepration for STABLE release. 371 - Bugfix in Netbuffer::netwrite() (debug output of written data) 372 - SIGPIPE gets ignored, see sys/main.cc 373 - Fixed re-entrancy issues for gethostbyname() that applies to some 374 unices. See Backend::connect() (xr/backend/connect.cc). 375 376 2.22 [KK 2008-10-16] 377 - Implemented up/down state in back ends. Fixed up the docs. 378 - Rewrote msg() and debugmsg() handling: these are now macros that 379 call _msg() and _debugmsg() depending on verbose/debug flags. The 380 argument is a Mstr object, used to concatenate strings with ints, 381 doubles and so on. 382 383 2.21 [KK 2008-10-14] 384 - Fixed round-robin dispatching with only 1 configured back end. The 385 bug was that on the next-time around, no "other" back end would be 386 found. 387 - Centralized reading/writing from fd's and buffer handling into class 388 Netbuffer. This removes superfluous buffer copying in the HTTP 389 dispatcher. 390 - Rewrote HTTP dispatcher & (hopefully) optimized it. 391 - Added Profiler class and xr/etc/xrprof tool. 392 - Many other small changes. 393 - Added docs on maxconn flags and weighted-load dispatching. 394 - THIS VERSION IS A REWRITE OF THE HTTP DISPATCHER. IT IS ALPHA-QUALITY. 395 396 2.20 [KK 2008-10-13] 397 - Fixed -C flag recognition, --close-sockets-fast worked, but I'd 398 omitted -C from the flag set. 399 - Ongoing optimization work. 400 401 2.19 [KK 2008-10-13] 402 - Changed the TCP Dispatcher to allow for setting a maximum # 403 connection attempts per client, with options to either defer the 404 connection or drop it. 405 - Added a dispatch mdoe "weighted-load" for randomly picking a back 406 end based on the inverse of their respective load averages. (gem) 407 - Verbose/debug options in the web interface are now rendered as 408 select boxes. 409 - Web interface errors are rendered on the client as an HTML error 410 page. 411 - Docs updated regarding web interface URI's. 412 - Turned on compliler optimizing (had forgotten that before!) 413 - Docs updated regarding web interface URI's. 414 415 2.18 [KK 2008-10-08] 416 - Improved command line parsing, so that when --checkup-interval is 417 used, suppression of "--wakeup-interval 0" is no longer needed. 418 419 2.17 [KK 2008-10-07] 420 - Type sizes reported in "xr -V" 421 - Fixed nasty bug in sys/fdwrite.cc 422 423 2.16 [KK 2008-10-05] 424 - Enhanced web interface to show debug, verbose and traffic log states 425 - Altering parameters for the web interface get sent in encoded form 426 - Option --log-traffic was renamed to --log-traffic-dir for 427 consistency 428 - Enhanced web interface to modify client and back end timeouts 429 - Enhanced web interface to modify wakeup / checkup intervals. 430 431 2.15 432 - Sanity checks in Config::parsecmdline(): -w/-c together throws error. 433 - Network sends are now using write(), unless under Solaris, which 434 uses send(). 435 - --log-traffic logs to file with as the base name: the request 436 number. 437 - System (uname) is recorded during compilation and displayed in "xr -V" 438 439 2.14 [KK 2008-09-30] 440 - Removed spurious debug message. 441 - Fixed usage info for buffer size flag (should be -B, not -b). 442 - Implemented flag -l (--log-traffic). 443 444 2.13 [KK 2008-09-17] 445 - Porting issues resolved for older MacOSX (10.3, 10.4) 446 - Bugfix in XML emitting of web interface. Most browsers didn't even notice.. 447 448 2.12 [KK 2008-09-10] 449 - Small code changes for g++ v3.x backward-compatibility support. 450 (Thanks Simon M.) 451 - Web interface: layout enhanced, more modification options 452 - Code cleanup, duplications removed 453 - Network sending ignores some errno's and retries (see 454 sys/fdwrite.cc) 455 - Web interface retries binding to its socket (incase a previous 456 instance hasn't terminated yet) 457 - Web interface returns an HTTP error page (status 500 only, no 458 content) during errors 459 460 2.11 [KK 2008-09-04] 461 - Bugfix in "first-active" dispatch mode. Previously XR would gobble 462 up fd's when no back end was available. 463 - Web interface (first version) implemented. 464 465 2.10 [KK 2008-09-02] 466 - Bugfix in host match mode. When a back end doesn't match anything, 467 then the client isn't served. (Previously the dispatcher would fall 468 back to least-connections over all known back ends.) 469 - In HTTP mode, a 502 error gets returned to the client when 470 dispatching fails or when back end processing goes haywire. There is 471 just one error page, 502 error header, 0 bytes content length. 472 - Implemented back end weights for least-connections dispatching. 473 - Bugfix in Backend::connect(): Socket gets closed when connecting fails. 474 475 2.09 [KK 2008-09-01] 476 --host-match code implemented 477 478 2.08 [KK 2008-08-31] 479 I'd forgotten to include the 'P' into the set of allowed flags 480 (--prefix-timestamp would work, -P not). Fixed. 481 482 2.07 [KK 2008-08-28] 483 Stupid bug in 2.06, sorry that 2.06 got out.. Fixed. 484 485 2.06 [KK 2008-08-27] 486 Upped c-conf to 1.14. 487 xrctl updated: 'ps' command format also suitable for SunOS. 488 New class Mutex implemented. Mutex-locks are now more fine-grained 489 (per one global or static). 490 Solaris9 port w/gcc 3.4.6 done. 491 492 2.05 [KK 2008-08-15] 493 Thrown errors now based on std::exeception. 494 "xr -V" shows compilation settings. 495 Code reorganized into directory hierarchy. 496 497 2.04 [KK 2008-08-11] 498 Mutex in Thread class is now a static. 499 Implemented dispatching algorithm "stored clent ip", in the variants 500 strict and lax. 501 Flag -n / --tryout implemented. Implemented in xrctl. 502 503 2.03 [KK 2008-08-10] 504 Updated docs regarding the mailing list. 505 Fixed verbose display upon accepting a client ("current back end 506 states"). 507 Implemented dispatching algorithm "hashed client ip", in the variants 508 strict and lax. 509 510 2.02 [KK 2008-08-09] Changes to the Makefile & some sources to avoid 511 warnings under RHL (thanks, Simon M.). 512 Bytes processed by a back end is now administered in 513 TcpDispatcher::writechunk() and not readchunk(). Reason: In HTTP mode, 514 the target back end is not yet known upon the first read -- the first read 515 from the client comes before dispatching. Thanks Simon M. for the bug 516 report. 517 All select()'s now check for errno==EINTR, incase XR gets a signal -1 518 (for status report). 519 520 2.01 [KK 2008-08-08] Implemented flag -C (--close-sockets-fast): this 521 option *can* be used under heavy stress when too many network sockets 522 remain in TIME_WAIT state (try with 'netstat -n | grep TIME_WAIT'). 523 Syntax of xrctl is checked upon "make commit". 524 Added documentation about Solaris tcp_time_wait_interval and Linux 525 ip_conntrack_max. 526 Added documentation about binding XR to the same port, using different 527 bind-to IP's. 528 529 2.00 [KK 2008-08-07] Release of 2.00.