		Nexus change log and todo list

rcsid = "$Header: /home/globdev/CVS/globus-packages/nexus/source/nexus/CHANGE_LOG.txt,v 1.42 1998/01/09 03:07:56 tuecke Exp $"

----------------------------------------------------------------------
Todo:

  * create mailing lists:
        nexus-announce@globus.org
        nexus-discuss@globus.org
        nexusjava-discuss@globus.org
  * change NULL to NEXUS_NULL
  * add configure checks for multicast
  * add a nocopy bit to startpoints
  * nexus_disallow_attach() has a race condition.  The attachments should
be serialized and made mutually exclusive with the disallow_attach.  There
is currently no way to have no global variables and avoiding a race between
destroying the state passed as the approval_func_user_arg and calling
the disallow_attach.  For example, an approval function could still be
in progress when the disallow_attach returns.
  * add nexus_poll_until_sent()
  * fix tcp_shutdown() -- sometimes hangs with 2 open file descriptors
  * add nexus_thread_{pre,post}fork()
  * add counting of mutex/cond/etc init and destroy calls in debug version
to help find missing destory calls
  * allow a exit code to be specified during context destruction
  * event driver:
	- bug in nexus_fd_handle_events(): crashes when a NULL write_callback
	  is used with nexus_fd_register_for_write()
	- remove overhead when no fd's are in use
	- read should not cause new select
	- have nexus_fd_register_for_write try write()
	- add timed events
	- port to NT
	- add new thread model
	- add callback to handle polling for other communication methods
  * documentation
	- merge API doc into one page
	- add nexus_find_argument()
	- add nexus_enable_fault_tolerance()
	- add nexus_allow_attach()
	- add nexus_acquire_nodes() - documentation has wrong argument list
	- add nexus_disallow_attach()
	- add nexus_attach()
	- add nexus_fatal()
	- add nexus_split_nexus_url()
	- add nexus_stdio_lock() and unlock()
  * changes for redhat linux for the alpha
	- all declarations of extern sys_errlist (I hope I spelled that
	  right) need to be ifdef'd out since they are declared by the 
	  system headers w/ a slightly different type
	- the pthread library that's standard on redhat 4.1/alpha doesn't
	  have the routines pthread_attr_setstacksize 
	  and pthread_attr_getstacksize
  * port to Irix6 shared memory
  * add direct put/get
	- nexus_send_rsr() fails when nexus_check_buffer_size() is called
	  with non-zero arguments for the number of direct puts
  * integrate ldap
  * port to T3E
  * add signal handling for users
  * test quickthreads
  * fix qt default & cross-comp bug
  * add nexus_master_context()
  * add nexus_user_format()
  * add nexus_buffer_format()
  * add nexus_node_self()
  * update test programs
  * update nperl
  * fix nodes(0).startpoint 
  * get non-ssl ss working again
  * fix nexus_ez configure.in and Makefile.in and test it
  * try gcc -Wall
  * test dc (and fix cray c90 support)
  * fix flock() - nothing being used
  * change put/get to use unsigned long
  * fix nexus_thread_once() prototype with fsu-pthreads
  * clean up shutdown
  * fix fault tolerance - test_nx -die
  * add argc/argv functions
  * fix ibmds
  * add NexusAcquiredAsNode options
  * add "long double"
  * write node registry and remove /tmp/nx_* files
  * add host/port to attach_approval() callback
  * add 'nexus_node_t *nexus_node();', which just returns a pointer
to _nx_my_node
  * implement node numbers correctly: must be in 0..N range
  * it looks like nexus_node_acquire() will hang if given an incorrect
node name (if the startup fails, the acquire will hang)
  * add argument handling support so that either the package designator
or -nexus will work as the separator
  * Deal with ENET* errno's and ETIMEDOUT:
        ipop.mcs.anl.gov#0:c3702280:t0:p13082: Fatal error:
    check_proto_for_close(): Read failed (errno=60): Connection timed out
        iway.acl.lanl.gov#0:c3699976:t0:p29839: Fatal error:
    tcp_send_remote_service_request(): Write failed: Network is unreachable
  * secure server needs to have the permissions check on ~/.server_apps
#ifdef'd out for AFS, since afs permissions screw things up
  * st_iface should do rdb_lookup("startups") at the beginning, and use that to craft a correctly ordered startup module_list
  * have QT figure out how many processors there are, and automatically
set max_processors to this.  Allow override with -maxProc.
  * The RS6000 Cthreads distribution is at:
        ftp.cc.gatech.edu:/pub/softare/cthreads/cthreads_distribution.tar.gz
    It should build fine on RS6000's using gcc.  (There's a couple of
lines of assembly which the AIX C compilers don't like...)
  * nexus_attach() should inspect the x-nexus url.  If it is of the form
"x-nexus://resource_database:node-spec/...", then lookup node-spec in the
database.
  * if a node is local, start it with st_fork instead of st_rsh.
  * Need to think about the idle thread some more.  It is possible for
the idle thread to wake up during a nexus_sleep() (or a blocking read
from user code, etc), but then have the user thread wake up again
before the idle thread returns.  This can cause big problems, since
the idle thread could do a blocking read (or select, etc) while
holding a lock, and the other thread could block on that lock.  This
will cause deadlock if the read never returns.
    One hack solution is to change event.c so that it does a timed
select instead of a blocking one.  So nexus_poll_blocking() will
return after a short interval and then a yield will happen, etc.  But
this does not seem like the "right" solution.
  * make NEXUS_USE_MACROS the default?
  * add nexus_print_buffer() to print out the contents of a nexus_buffer_t
  * make the key table size a command line option in cthreads

----------------------------------------------------------------------
4.1.1 -> 4.2 changes:
  * Changed initialization and shutdown.
  * Removed node management.

----------------------------------------------------------------------
4.1 -> 4.1.1 changes:
  * nexus_attach() no longer segmentation faults when you attempt to
attach to a port on which nobody is listening.
  * Turned off IP multicast loopback.  This is not needed since
separate file descriptors are used for sending and receiving (on
fd for the startpoint, and other for the endpoint).
  * Changed IP multicast startpoints such that they are usable as 
soon as nexus_startpoint_bind() completes.
  * When compiling without threads under SGI Irix with DCE installed, 
event.c no longer accidentally picks up the dce/cma_ux.h header, which 
was causing problems.

----------------------------------------------------------------------
4.0 -> 4.1 changes:
  * Completely overhauled configure.
  * Added shared library support.
  * Added UDP support for unreliable RSRs, and unreliable multicast RSRs.
  * Removed Quickthreads support.
  * Fixed threaded version to use blocking selects where possible.
  * Fixed nexus_startpoint_test().
  * Fixed deadlock in tcp_send_rsr() when a fault occurs (i.e. destination
context dies).  Also added a fault check for failure to make a connection.
  * Fixed deadlock in nexus_fd_shutdown() when a listener port was
still open at the time of its invocation. (For example, if
nexus_allow_attach() was called without a matching nexus_disallow_attach().)
  * Fixed 64 bit big endian data conversion routines to correctly convert
from Java to native characters.
  * Added nexus_endpointattr_set_protocol(), to allow programmatic
setting of a particular protocol for a given endpoint.
  * Added RDB lookup of "tcp_interface" attribute, to allow TCP protocol
module to be instructed to redirect socket connections to an alternate
interface.
  * Added -skip_poll support.
  * Fixed checks for buffer overruns during nexus_put_*() and nexus_get_*()
in the debug version.  Also removed extraneous cruft from the checks in
these functions.
  * Added startup_type=generic to the .resource_database, to allow 
more configurable startup on MPPs.
  * Fixed nexus_free() to not segmentation fault when passed a NULL pointer.
  * Added prototypes for nexus_buffer_save() and nexus_buffer_save_linearly().
  * Fixed event.c to use a blocking select when possible
  * A variety of other small cleanups.

----------------------------------------------------------------------
4.0b5 -> 4.0 changes:
  * Fixed bug in sending large (>32k) messages on SP and Paragon (in pr_mp.c).
  * Fixed multiple make targets with same name in nexus/Makefile.in.
  * Fixed configure bug.  When the CC environment variable was set, this
would cause configure to fail to properly set LIBS and CFLAGS for that
compiler.
  * Fixed/added a variety of internal things for transforms.

----------------------------------------------------------------------
4.0b4 -> 4.0b5 changes:

  * Added support for IBM SP (using MPL), and Paragon
  * Fixed segfault when starting up >2 nodes
  * Sockets now have TCP_NODELAY set on them. This got lost somewhere
between nexus-3.0 and nexus-4.0, and has a major impact on small
message latency over TCP.
  * Fixed memory leak when sending RSRs.
  * Changed NexusExit() prototype to return void, so as to match the
documentation.
  * Fixed/added a variety of internal things for transforms.
  * Fixed a few bugs in the examples.
  * Fixed multiple #defines of EXTERN_C_BEGIN when compiling with C++. 

----------------------------------------------------------------------
4.0b3 -> 4.0b4 changes:

  * Big cleanup of startpoint, endpoint, and transform code, including: 
	- Fixed nexus_startpoint_equal()
	- Fixed nexus_startpoint_equal_context()
	- Fixed nexus_startpoint_to_current_context()
	- Added nexus_startpoint_get_endpoint() 
  * Added DEC Unix 4.0x support
  * Fixed recursive mutex call that was hanging -debug_command.
  * Fixed bug in the endpoints/startpoints that are used by the
nodelock in node creation. This was causing some uses of -nodes and
nexus_node_acquire() to segfault.
  * Fixed nexus_node_acquire() to properly use its directory_path
argument.
  * Fixed "-n 0" argument so that it will not start up a node, as
expected.
  * Removed -I/home/zipper/libdes-3.0 from compile lines. 

----------------------------------------------------------------------
4.0b2 -> 4.0b3 changes:

  * Ported to IBM AIX4 (tested under AIX4.1.4)
  * Builds properly with gnumake.
  * Removed make dependencies that invoked autoconf.
  * Fixed attachment.
  * Fixed a couple bugs in the fd event driver, which could have
caused large message hangs and unexpected crashes in the tcp code.
  * Fixed race in tcp code that could cause a message to be lost
during shutdown. This manifested itself as a hang during shutdown of
multiple contexts.

----------------------------------------------------------------------
4.0b1 -> 4.0b2 changes:

  * Fixed large message sends (>4k bytes). 
----------------------------------------------------------------------

