Queue load balancing and batch processing system

August 13, 1998

Werner G. Krebs (werner.krebs@yale.edu)


* Version 0.10a Circa 1994

	In-house alpha version original designed as a simple replacement to
	rsh for a homogeneous cluster of HP-UX hosts in order to do load
	balancing over the network. The stub mechanism and pty mechanisms,
	allowing users to background and foreground remote jobs by
	backgrounding and foregrounding the daemon/stub, was already firmly in
	place in this version. Queue placed files into a single directory,
	which was then monitored and run by the queued.


* Version 0.20a Circa 1995

	In response to user requests for better control of batch capabilities,
	queue was merged with the apparently non-copyrighted,
	'freely-redistributable' batch suite of Alex White 'and many others.'
	Specifically, code from batchd now monitored multiple directory
	queues, imposing limits (such as load average requirements, maximum
	number of jobs in each queue, priorities, etc) on jobs run in batch
	processing mode. Batchd was modified to accept jobs from queue and
	spawn jobs via a modified queued rather than directly. In addition, a
	command was added to support the new mutliple-host environment and
	allow conditions (such as load average restrictions, maximum number of
	jobs) to specified different for different hosts in the cluster from
	the same configuration file.


* Version 0.21a August, 1998

	Queue was ported to Linux with minor modifications to support this new
	environment and released in alpha version to the general public under a
	GPL agreement.

* Version 0.22b August, 1998

	Upgraded to beta after large numbers of downloads without bug reports
	(I know there are bugs left. :-) But, the code is obviously usable. )

	Fixed Makefile install bugs :-) Added uninstall option.

	Increased SLEEPTIME to 120 to work better on larger clusters.

	Added setuid() in queue to correspond to principle of least privilege;
	also allows users to send queue signals via KILL instead of just via
	the keyboard (I.e., this was a bugfix) :-)

	Added Solaris support courtesy of Igor Schein.

	Minor changes to documentation.

	Announced queue-tips list (write to 
	queue-tips-request@bioinfo.mbb.yale.edu to join.)

* Version 0.23b, August, 1998

	Added GNU autoconf and automake support; re-wrote header files and
	#ifdefs to take advantage of autoconf's capabilities; as a result
	the code is now much more portable and ports readily to a large number
	of platforms. 

	Added SGI IRIX support as a result. Tested platforms now include
	GNU/Linux, HP-UX, SunOS 5.6, Solaris, and IRIX.

	Eliminated the va_dcl stuff in queue.c as it is a portability nightmare
	and not really necessary, various other minor changes to source.

	Updated documentation to reflect autoconf and other changes.

	Updated TODO list to reflect preferences of users on mailing list.

* Patchlevel 1, November 1998

	Commented out free() in localhost() in batchd.c

* Patchlevel 2, November 1998

	Bugfix courtesy of Dave van Leeuwen <dave@elec.canterbury.ac.nz>

	Modifications:
	*  line 35 of queue.h, changed extern char **host; to extern char *host[]; as
	   gcc 2.7.2.3 on linux would not find any host other than the first one.
	*  line 742 in queued.c changed
	      if(*command[0] == '/') strcpy(file,command[0]); to
	      if((*command[0] == '/') || (*command[0] == '.'))  strcpy(file,command[0]);
	    to run relative commands (ie ./x, ../../bin/x etc)

	Also, made changes to make it compatible with GNU/Linux SuSE 5.0 with kernel 2.0.35 :


	renamed struct qelem to qelem_queue,
	
	also implemented sa_mask changes using long int pointer cast as this seems the most portable solution.

* Patchlevel 3, November 1998

	Minor HP-UX conflict fixes.
	Fixed HP-UX dirent.h / ndir.h conflict in define.h

* Patchlevel 4, November 1998

	Solaris compilation fixes.

* Patchlevel 5, November 1998

	Added NO_ROOT compile option to allow use of some Queue features
	without root privileges. (Everything must be installed and run
	as the same UID.)

* Version 1.099, December 1998

	Added code to read host ACL from file courtesy of Dave van Leeuwen.

	Blinking-lights automatic installation.

	Improved documentation. Added texinfo manual. We now have a 30+
	page comprehensive manual for GNU Queue!

	Added "--enable-root" option to ./configure script; this option
	must be used for root, cluster-wise install (formerly the default
	and still the preferred option). Since non-administrators are
	presumably less sophisticated, the default was changed
	to install for these users.

	Numerous bugfixes.

	Name changed to GNU Queue to reflect adoption by the FSF GNU project.

	Added GNU-style long-options support to the executables
	(e.g., "queue --version" is supported.)

	Renamed batchd.c to queued.c; old queued.c now called handle.c;
	is linked into new queued.c for efficiency. [The only reason for
	running handle() as a separate executable was to allow a debugger
	to trace handle(); debuggers normally can't follow a program after
 	a fork.]

	HP-UX 10 compile fixes.

	Added "qsh" syntax to allow for backward compatibility with systems
	than expect an rsh/remsh-type command. '+' is wild-card host,
	meaning allow Queue to pick where to run the command.

	"qsh" is first stage of MPI support; so noted in documentation.

	Realized that there could be port confusion if a queue is killed
	and a new queue subsequent uses the same port; added cookie
	passing to solve this problem. With NO_ROOT, privileged ports
	aren't available, so cookies also stop malicious users on the
	same cluster from spoofing queue.

	Added one-way trap function crypt() to allow queued to 
	authenticate itself to queue when running NO_ROOT without
	privileged ports. If privileged ports are availabe
	(NO_ROOT is undefined) or verifiable ports are available
	(HAVE_IDENTD is defined; see below) crypt() is replaced
 	with a do-nothing function to eliminate the performance hit.
	Cookies are still used in the other direction to prevent
	port confusion.
		
	NO_ROOT install can't use privileged ports, so added identd support
	with HAVE_IDENTD option to prevent queued (and queue) spoofing from
	within the cluster in cases where the cookies aren't
	good enough; see manual.

	Added "onlyhost" field to binary exchange file; modified batchd.c,
	queue.c, and queued.c accordingly. Added prefhost and onlyhost
	options to queue.c . This is necessary to fully support qsh
	command syntax, needed for MPI support.

	Changed defaults for "queue" to full-pty, wait around, immediate
	execution. "qsh" defaults to no-pty, wait around, immediate
	execution.

	Added "-H hostname" option to by-pass "onlyhost" field; -H makes
	hostname the preferred host, but jobs will be sent elsewhere if
	hostname is down. "-h hostname" now only allows execution on
	"hostname". This was necessary for MPI support with "qsh."
	
        Disabled the "feature" that required queued (formerly batchd)
 	to be started with a full pathname. This means the 
	"restart signal" won't work (unless you actually _have_ 
	started queued with a full pathname),
	but it makes starting queued more intuitive. To restart, you
	just SIGTERM and run again now. (Or, invoke with full pathname
	and send the traditional re-start sigal.)
	
	
*Version 1.099p1
	Deleted braces in configure script which were causing problems
	on non-Linux systems.
	