Spread 5.0.1 - May 16, 2018
This patch release fixes a bug in the membership algorithm that could be triggered by unusual delays. See the Changelog for details.
Spread 4.4.1 - May 16, 2018
This patch release fixes a bug in the membership algorithm that could be triggered by unusual delays. See the Changelog for details.
Spread 5.0.0 - February 1, 2017
This final release has no significant changes versus RC2.
Spread 5 is an important release that adds support for IPv6.
Spread version 5 adds support for IPv6 in the Spread daemon, C language client library and several example and support programs (e.g. - spmonitor, spuser, spsend, sprecv, spflooder). This version of Spread supports Posix environments (e.g. - Linux) and Windows.
Spread 5 can work on IPv4-only hosts, IPv6-only hosts or dual stack hosts. However, all daemons in a Spread deployment must run using only IPv4 or IPv6 addresses. Spread 5 does not yet support configurations where some daemons use IPv4 addresses while others use IPv6 addresses, even if transition mechanisms such as network address translation (e.g. - stateless IP/ICMP translation) would allow such hosts to communicate using those addresses.
Daemons' IP addresses can be configured explicitly or by using names which will be looked up using standard system services (i.e. - DNS, /etc/hosts, etc.) in order to map them back to IP addresses. Clients can similarly specify either explicit addresses or names to connect to daemons.
For more details check the Readme.IPv6 and docs/sample.spread.conf files.
This release maintains the previous client API, so applications should be able to be relinked or recompiled with the new Spread library without changes. However, if you used functionality from libspread-util in your programs, then you will need to recompile as some header constants have changed.
Spread 5.0.0 RC2 - January 23, 2017
RC2 adds minor patches and fixes to RC1. See the Changelog for details.
Spread 5 is an important release that adds support for IPv6.
Spread version 5 adds support for IPv6 in the Spread daemon, C language client library and several example and support programs (e.g. - spmonitor, spuser, spsend, sprecv, spflooder). This version of Spread supports Posix environments (e.g. - Linux) and Windows.
Spread 5 can work on IPv4-only hosts, IPv6-only hosts or dual stack hosts. However, all daemons in a Spread deployment must run using only IPv4 or IPv6 addresses. Spread 5 does not yet support configurations where some daemons use IPv4 addresses while others use IPv6 addresses, even if transition mechanisms such as network address translation (e.g. - stateless IP/ICMP translation) would allow such hosts to communicate using those addresses.
Daemons' IP addresses can be configured explicitly or by using names which will be looked up using standard system services (i.e. - DNS, /etc/hosts, etc.) in order to map them back to IP addresses. Clients can similarly specify either explicit addresses or names to connect to daemons.
For more details check the Readme.IPv6 and docs/sample.spread.conf files.
This release maintains the previous client API, so applications should be able to be relinked or recompiled with the new Spread library without changes. However, if you used functionality from libspread-util in your programs, then you will need to recompile as some header constants have changed.
Spread 5.0.0 RC1 - November 22, 2016
Spread 5 is an important release that adds support for IPv6.
Spread version 5 adds support for IPv6 in the Spread daemon, C language client library and several example and support programs (e.g. - spmonitor, spuser, spsend, sprecv, spflooder). This version of Spread supports Posix environments (e.g. - Linux) and Windows.
Spread 5 can work on IPv4-only hosts, IPv6-only hosts or dual stack hosts. However, all daemons in a Spread deployment must run using only IPv4 or IPv6 addresses. Spread 5 does not yet support configurations where some daemons use IPv4 addresses while others use IPv6 addresses, even if transition mechanisms such as network address translation (e.g. - stateless IP/ICMP translation) would allow such hosts to communicate using those addresses.
Daemons' IP addresses can be configured explicitly or by using names which will be looked up using standard system services (i.e. - DNS, /etc/hosts, etc.) in order to map them back to IP addresses. Clients can similarly specify either explicit addresses or names to connect to daemons.
For more details check the Readme.IPv6 and docs/sample.spread.conf files.
This release maintains the previous client API, so applications should be able to be relinked or recompiled with the new Spread library without changes. However, if you used functionality from libspread-util in your programs, then you will need to recompile as some header constants have changed.
Spread 4.4.0 - May 28, 2014
The Spread 4.4 version is an important release that incorporates a new, accelerated ring protocol. This protocol is tailored for data center networks and can provide 30%-50% higher throughput and 20-35% lower latency in modern local area networks. This version also supports Spread's regular ring protocol.
The main new features of this release are:
1) Accelerated ring protocol to improve both throughput and latency in local area networks.
2) Redesigned message-packing, reducing overhead for small messages.
3) Updated MSVS project files for Windows source builds.
4) Several important bugfixes that make Spread more stable, especially under high loss.
5) Expanded and improved logging.
6) Binary executable releases for 64b OSX (10.6+) and Windows 8.
For details check the Readme.txt file.
This release does not include any API changes, so applications should be able to be relinked or recompiled with the new Spread library without changes.
Spread 4.4 RC2 - May 19, 2014
Spread 4.4 RC2 is an important release that incorporates a new, accelerated ring protocol. This protocol is tailored for data center networks and can provide 30%-50% higher throughput and 20-35% lower latency in modern local area networks This version also supports Spread's old ring protocol.
The main new features of this release are:
1) Accelerated Ring protocol to improve both throughput and latency in local area networks.
2) Redesigned message-packing, reducing overhead for small messages.
3) Updated MSVS project files for Windows source builds.
4) Several bugfixes that make Spread less likely to exit under high loss.
5) Expanded and improved logging.
For details check the Readme.txt file.
This release does not include any API changes, so applications should be able to be relinked or recompiled with the new Spread library without changes.
Spread 4.4 RC1 - January 25, 2014
The Spread 4.4 release is an important release that incorporates a new,
accelerated ring protocol. This protocol is tailored for data center networks
and can provide 30%-50% higher throughput and 20-35% lower latency in modern
local area networks This version also supports Spread's old ring protocol.
The main new features of this release are:
1) Accelerated Ring protocol to improve both throughput and latency in local area networks.
2) Redesigned message-packing, reducing overhead for small messages.
3) Updated MSVS project files for Windows source builds.
4) Several bugfixes that make Spread less likely to exit under high loss.
5) Expanded and improved logging.
For details check the Readme.txt file.
This release does not include any API changes, so applications should be able to be relinked or recompiled with the new Spread library without changes.
Spread 4.3 - June 11, 2013
The Spread 4.3 release is an important release focusing on improved out-of-the-box performance for the Spread toolkit. This release has a large number of small changes which include bugfixes, very specific performance improvements, and general improvements to the code and build process.
The main new features of this release are:
1) Performance improvements to membership timing and system throughput.
2) Provide runtime configurability for membership timers and flow control
parameters via the spread.conf file.
3) Redesign of C library locking to improve throughput and remove blocking.
4) Smarter autodetection of both the best client-server connection method
(local system unix sockets or tcp) and the local hostname when starting daemons.
This release does not include any API changes, so applications should be able to be relinked or recompiled with the new Spread library without changes.
Spread 4.3 RC3 - April 4, 2013
The Spread 4.3 release is an important release focusing on improved out-of-the-box performance for the Spread toolkit. This release has a large number of small changes which include bugfixes, very specific performance improvements, and general improvements to the code and build process.
The main new features of this release are:
1) Performance improvements to membership timing and system throughput.
2) Provide runtime configurability for membership timers and flow control
parameters via the spread.conf file.
3) Redesign of C library locking to improve throughput and remove blocking.
4) Smarter autodetection of both the best client-server connection method
(local system unix sockets or tcp) and the local hostname when starting daemons.
This release does not include any API changes, so applications should be able to be relinked or recompiled with the new Spread library without changes.
Spread 4.2.0 - June 18, 2012
The Spread 4.2 release is an important bugfix release for the Spread project. This release has a large number of small changes which include bugfixes, very specific performance improvements, and general improvements to the code and build process.
The main new features of this release are:
- Added Keepalive support to client-server TCP connections. Requires correct operating system values set for keepalives in order to be useful.
- Switch internal code to use MONOTONIC clocks when available and appropriate to remove chance of system clock changes (from the clock being set) from affecting message processing
- Break out events, memory, data_link and alarm code into separate libspread-util package. This package also has a number of improvements in the functionality of those code files which are listed in the internal package release notes.
It also includes a number of important bug fixes. The most significant include:
- Fix bug with structure size on 64 bit platforms causing crash.
- Fix several deadlock, crashes and race conditions in java Listener code.
- Fix 100 ms timeout in java socket handling code so it does not corrupt messages that take a long time to arrive.
- Fix java disconnect bug that prevented client from reconnecting until restarted.
- Remove cause of slow message delivery when a client is receiving a lot of messages and gets into a badger state.
- Improve help output and error messages in utility programs.
- Fix token hurry bug that caused messages to have a 2 second latency in specific circumstances.
- Fix crash bug when new daemon configuration files are loaded while the system is running.
Spread 4.1.0 - June 18, 2009
The Spread 4.1 release is a new release for the Spread project. This release includes several requested new features that:
- Make location of unix domain socket configurable at compile time.
- Add version numbers to the Spread library.
- Add runtime configuration option in spread.conf for the maximum number of messages Spread should buffer for each client before disconnecting them.
- Add high-precision timestamps to log file events. To activate enable EventPreciseTimeStamp flag in spread.conf.
It also includes the usual collection of bug fixes. Details of the new capabilities can be found in the Readme.txt document included in the distribution.
This release does not have any visible API changes, so not applications should require code changes to support this release. Applications linked with the 4.0 libspread libraries should continue to work. However, we recommend relinking against the new library as it fixes some known bugs.
We believe this release is stable and provides a solid platform for Spread applications.
Spread is a toolkit that provides a high performance messaging service that is resilient to faults across external or internal networks. Spread functions as a unified message bus for distributed applications, and provides highly tuned application-level multicast and group communication support. Spread services range from reliable message passing to fully ordered messages with delivery guarantees, even in case of computer failures and network partitions.
Please be aware, that under the Spread Open Source License, the toolkit may be freely used only under some conditions. For example, the license includes the requirement that all advertising materials (including web pages) mentioning software that uses Spread display a specific acknowledgement. Please review the license agreement for more details. http://www.spread.org/license/
Other commercial licenses or other licensing arrangements are available. Please contact info@spreadconcepts.com.
Internal API additions:
Make internal DL_recv/send functions thread-safe and add DL_recvfrom
function to provide source address of the packet.
Bug Fixes:
- Portability improved for Solaris 10, Windows, platforms with strict alignment of ints.
- Fix crash caused by a wrapped sequence counter (32bit) by triggering a quick membership when the value gets close so that the sequence value is reset.
- Fix crash bug when a membership configuration reload was triggered during an existing membership change.
- Fix locking bug in spread library causing deadlock under certain error paths.
- Support for newer autoconf versions with better documentation of defines.
- Fix yacc warning in the config file parser.
- Update to latest Stdutil release which incorporates several small bug and compile fixes.
Spread 4.0.0 - December 4, 2006
The Spread 4 release is a major new release for the Spread project. This release includes several highly requested new features that:
- Improve manageability by allowing dynamic configuration of sets of daemons without requiring a restart;
- Improve performance;
- Ease the development of Spread based applications with better membership reporting;
- Support multi-threaded forking client applications;
- Integrate a Virtual Synchrony interface;
- Provide simpler membership APIs;
- Organize and improve the software build for both Windows and Unix systems.
It also includes the usual collection of bug fixes. Details of the new capabilities can be found in the TransitioningFromSpread_3.pdf document included in the distribution and available on the website.
This release does have some specific API changes, so some (not all) applications may need small source code changes in order to continue to work. Extensive documentation is available in the docs directory in the distributions.
We believe this release is stable and provides a solid platform for Spread applications, however, because of the API changes it is not a drop in replacement for current applications. So we highly encourage anyone working on new applications to use this release. Those currently running Spread applications should determine the best time for a switch to Spread 4.
Spread is a toolkit that provides a high performance messaging service that is resilient to faults across external or internal networks. Spread functions as a unified message bus for distributed applications, and provides highly tuned application-level multicast and group communication support. Spread services range from reliable message passing to fully ordered messages with delivery guarantees, even in case of computer failures and network partitions.
Please be aware, that under the Spread Open Source License, the toolkit may be freely used only under some conditions. For example, the license includes the requirement that all advertising materials (including web pages) mentioning software that uses Spread display a specific acknowledgement. Please review the license agreement for more details. http://www.spread.org/license/
Other commercial licenses or other licensing arrangements are available. Please contact info@spreadconcepts.com.
The list of bugfixes is:
1) Fix crash when compiling without debugging because of assignment
inside assert() call.
2) Only print Alarms of SPLOG_INFO or higher priority by default.
3) Check for short writes on network socket sends and loop to finish
full write. Bug reported by Tudor Dumitras.
4) Remove all use of Wide_delay. This only added extra delay when
sending if we though the network was a WAN. Originally this helped
deal with high loss levels on the Internet (circa 1993) However, it
appears no longer needed and actually hurts performance.
5) Apply fix from Neil Conway to change incorrect usage of vsprintf to
sprintf.
6) Apply fix (with small change) from Neil Conway for unnecessary char
-> int cast.
7) Fixes for compile warnings and type misdetection in configure
script. Fixes type-punning dereferences caught by new strict
aliasing warning.
8) Add HAVE_STRERROR for Windows builds. This avoids a compile error
with shared DLL libraries. Discovered and fixed by Jacob Green.
9) Redefine some internal enum names to avoid conflict with windows
builtin types. Declare sock_strerror function on windows.
10) Fix error in FreeBSD pthreads autoconf test which set LIBS
variable incorrectly.
11) Fix compile error in java SpreadConnection.java because of
uncaught InterruptedException in stopListener.
12) Fix for VERY old tokens being received. Fixes correctness problem
with ordering which only triggers in lossy/delaying networks.
Fix and patch by John and Yair.
13) Fix for typo in Mac OS X libspread.dylib install.
14) Fix for windows bugs with Winsock not being initialized early
enough and wrong library being linked. Reported by Danish Ahmed.
15) Patch to trigger a membership change if the token continues
to rotate too many times during EVS state (something that
should not occur).
16) Fix bug where tv_sec field was used in SP_connect instead of
tv_usec. Original patch by Daniel Savarese.
17) Always initialize wait_time and sel_time on connect_nointr_timeout
even if connect call is blocking. This prevents use of sel_time
without being initialized.
18) Fix race condition that caused group members on different daemons
to see different group ids for the same group. Bug analysis,
testing and diagnosis by John Schultz and Ryan Caudy.
19) For Windows, we should not bind to broadcast if we are binding
specific interfaces. Reported by Michael Chelnokov.
20) In sp.c, add missing Mutex_unlock() calls before return(ILLEGAL_MESSAGE)
calls in SP_recv. Fix deadlock reported by Massimo Feola.
Spread 3.17.4- December 4, 2006
The 3.17.4 release includes a number of bug fixes. They include fixing some daemon crashes, memory corruption in the daemon, and C library, deadlocks when used in threaded apps and errors occur, bind problems on Windows, incorrect view ids in groups, and other minor fixes. So we highly encourage everyone to upgrade to this release.
The 3.17.4 release has no external api changes.
A detailed list of bugfixes is available in the Changelog file of the source release.
Spread 4 RC2- March 2006
The Spread 4 includes several highly requested new features that:
- Improve manageability by allowing dynamic configuration of sets of daemons without requiring a restart;
- Improve performance;
- Ease the development of Spread based applications with better membership reporting;
- Support multi-threaded forking client applications;
- Integrate a Virtual Synchrony interface;
- Provide simpler membership APIs;
- Organize and improve the software build for both Windows and Unix systems.
It also includes the usual collection of bug fixes. Details of the new capabilities can be found in the TransitioningFromSpread_3.pdf document included in the distribution and available on the website.
This release does have some specific API changes, so some (not all) applications may need small source code changes in order to continue to work. Extensive documentation is available in the docs directory in the distributions.
We believe this release is stable and provides a solid platform for Spread applications, however, because of the API changes it is not a drop in replacement for current applications. So we highly encourage anyone working on new applications to use this release. Those currently running Spread applications should determine the best time for a switch to Spread 4.
Spread is a toolkit that provides a high performance messaging service that is resilient to faults across external or internal networks. Spread functions as a unified message bus for distributed applications, and provides highly tuned application-level multicast and group communication support. Spread services range from reliable message passing to fully ordered messages with delivery guarantees, even in case of computer failures and network partitions.
Please be aware, that under the Spread Open Source License, the toolkit may be freely used only under some conditions. For example, the license includes the requirement that all advertising materials (including web pages) mentioning software that uses Spread display a specific acknowledgement. Please review the license agreement for more details. http://www.spread.org/license/
Other commercial licenses or other licensing arrangements are available. Please contact info@spreadconcepts.com.
The list of bugfixes is:
1) Fix crash when compiling without debugging because
of assignment inside assert() call.
2) Only print Alarms of SPLOG_INFO or higher priority
by default.
3) Check for short writes on network socket sends and
loop to finish full write. Bug reported by Tudor Dumitras.
4) Remove all use of Wide_delay. This only added extra
delay when sending if we though the network was a WAN.
Originally this helped deal with high loss levels on
the Internet (circa 1993) However, it appears no longer
needed and actually hurts performance.
5) Apply fix from Neil Conway to change incorrect usage
of vsprintf to sprintf.
6) Apply fix (with small change) from Neil Conway for
unnecessary char -> int cast.
7) Fixes for compile warnings and type misdetection
in configure script. Fixes type-punning dereferences
caught by new strict aliasing warning.
8) Add HAVE_STRERROR for Windows builds. This avoids
a compile error with shared DLL libraries. Discovered
and fixed by Jacob Green.
Spread 3.17.3 - October 15, 2004
The 3.17.3 release includes a few enhancements and a number of fixes. They include fixing some daemon crashes, a substantial decrease in memory usage under some scenarios, new build files for VC++.NET, a Spread sptmonitor program that works on Windows, and some small cleanups and stability improvements. So we highly encourage everyone to upgrade to this release.
The 3.17.3 release has no external api changes (but does fix a few api implementation bugs so check the details below).
New minor features:
- Add new option to spflooder. The -n option allows a fixed "number of members" to be set. This then activates a multi-sender flow control algorithm to allow flooding tests with several senders. All of the processes need to join the group (i.e. they cannot be -wo (write-only)) but not all processes have to send. This allows easy testing with differing numbers of senders (just change how many spflooders start with -ro and how many do not).
- Modify monitor so it will run correctly on Windows. This was done by modifying monitor.c so it can also build as a threaded program and on windows will use multiple threads to send/recv updates and get user input. (A POSIX thread option is also added).
- Add new Alarm priority flag to print a line with no datestamp (for multi-line output).
- Add new Windows VC++.Net project files to daemon/win32_msvc_net. The current project files in daemon/win32 remain as they can be used in VC++ (version 6).
The list of bugfixes is:
- Fix memory leak in Skiplist. Reported by Taj Khattra, patch by Theo Schlossnagle.
- spuser,spflooder, and spmonitor fixed to print correct name in help. Patch by Daniel Rall.
- Fix incorrect alarm printing where WARNING messages generated by older Alarm() interface were not printed.
- Fix a bug in the Windows build using VC++ of thread-safe libtspread.lib. Bug and fix by Jacob Green.
- Fix bug in libspread where if the groups array or message body passed to SP_recv* was too small, the mess_type field returned would be truncated and the sender field was not returned. They are both now returned correctly. Bug report and partial fix provided by John Schultz.
- Fix bug where SP_Join and SP_Leave do not report
an error if a group name is too long (instead they
truncated it) Reported with fix by David Parker.
** Warning, this could break buggy applications who use long groups and assume the name is truncated. - Cleanup compile warnings where E_queue() used with no-parameter functions (not all uses fixed) and fix incorrect use of signed int with strlen().
- Fix few cases in flooder.c and user.c that did not use the defined MAX_MESSLEN constant. Tested to verify that increasing MAX_SCATTER_ELEMENTS in scatter.h and the MAX_MESSLEN defines in user.c and flooder.c is sufficient to support arbitrarily large message sizes with Spread. This is NOT recommended, but several people do it anyway :-)
- Make E_delay() work on Win32.
- Added check that a segment using localhost (i.e. 127.0.0.255) is NOT in a spread.conf with any other segments using real IP addresses. This configuration will not work correctly and is usually because the example localhost configuration provided with Spread is added to. This check will cause the daemon to exit immediately after parsing the config file.
- Fix bug where if more then 22 daemons start at the same time, some will crash or the membership will not complete correctly. This bug was reported by several people including Jesse Noller.
- Fix Java spread connection problem where several threaded connections from same process cause unexpected connection failures. Reported by Brian Moseley, idea of fix by Ryan Caudy, patch by Jonathan Stanton.
- Fix EVS bug where AGREED messages may be delivered before a transitional signal on some daemons and after it on others. Bug found and patch created by Ryan Caudy.
- Make SP_connect_timeout() calls non-blocking for the actual 'connect()' call. This should fix the issue reported by Shlomi Yaakobovich where a hung daemon causes new connections to also hang in connect. Also includes slight cleanup of connect code path.
Spread 3.17.2 - March 5, 2004
This release includes a number of bugfixes, including some that fix daemon crashes, a decrease in message token overhead, and some small cleanups and stability improvements. So we highly encourage everyone to upgrade to this release.
The 3.17.2 release has no new features or external api changes.
One thing to note is the parsing of the spread.conf file has become more strict, and some config files that would parse without error will now cause Spread to fail to start and report a configuration file error. Since all of these cases could cause the daemon to misbehave or crash at runtime (but not at startup) this change increases stability by checking for misconfigured setups before they cause unpredictable behavior.
- Fix daemon quit when multiple interfaces are configured as "D" daemon interfaces in the spread.conf file. Bug reported by Orit Wasserman.
- Updated url for Java 'ant' build system. Patch by Daniel Rall.
- Fix group_id bug that causes incorrect vs_sets. Patch by Ryan Caudy.
- Fix spread.conf parser so it validates the machine names in segments and forces them to be less then MAX_PROC_NAME. Patch by Mikhail Terekhov.
- Minor fix to Mac OS X compilation so library softlinks do not fail the second time make is run.
- Alarm() changes to support priority levels on each Alarm() call.
- Fix crash by improving packet accounting when a client connected to a singleton daemon sends a large broadcast. Reported by David Shaw.
- Fix bus errors on Sparc & Alpha for message buffer integer assignment. Reported by Greg Shebert; tested and patched Mikhail Terekhov.
- Verify daemon names in spread.conf are unique. If non-unique names are provided in spread.conf, configuration will be rejected and daemon will not start. Suggested by Tim Peters.
- Zero buffer in c library before sending multicast. Reported by Panagiotis Kougiouris.
- Send fewer lookup probe messages when only a single segment is configured.
- Remove extra token rotations when no messages are sent. Will decrease network packet overhead.
- Make mailbox and service in sp.h a typedef instead of a #define. Suggested and patched by Steven Dake.
- Fix small endianness error in sp.c where the mess_type field may not be correctly converted for different endian platforms when the SP_*_recv calls return a BUFFER_TOO_SHORT or GROUPS_TOO_SHORT error.
- Change alarm tag for security prints from SEC to SECURITY because of conflict with sys/time.h header.
- Documentation fix to SP_receive man page to correct fields for self-leave membership messages.
- Update of email addresses in copyright statements and headers.
- Windows binary libraries are now built as libspread and libtspread like other platforms.
Spread 3.17.1- June 20, 2003
This release includes a number of bugfixes, including some that fix daemon crashes and potential security issues, and some small cleanups and stability improvements. So we highly encourage everyone to upgrade to this release.
The 3.17.1 release has no new features, api changes or other dramatic changes. The potential security issue is a buffer overflow in the C language CLIENT library that could be exploited by a malicious daemon or man-in-the-middle attack to execute code with the privileges of the user running the client. This bug was uncovered by a DARPA funded Red Team from SRI who were evaluating Spread and Secure Spread.
- Fix memory corruption and crash with groups of large size.
- Correct make install so it installs header files.
- Fix syntax error in build.xml file for Java/Ant.
- Cleanup prototypes to remove compiler warnings.
- Fix parser to correctly recognize upper, lower, and mixed case command options.
- During make install, remove old symlinks.
- Change setgroups call to be more portable. (fixes MacOSX)
- Change name of r and s to sprecv and spsend, and add as make targets. They can be built by "make testprog" (not built by default).
- Work on making long group names possible.
- Increase listen backlog for accepting client connections.
- Fix Win32 project files to have correct path to source files. (note CVS was always ok, but 3.17.0 release had incorrect path)
- Fix bug where large groups overflow Mess_buf in groups.c.
- Fix memory corruption bug when a message header is received in several separate packets in session.c. Thanks to Ryan Caudy for many, many hours tracking this down.
- Change order of build in Makefile so binaries are built before documentation.
- Fix Java bug where connection objects cannot be disconnected and then reconnected, but must be created anew. They can now be reused.
- Fix compile error on AIX for struct if_info.
- Fix security issue with buffer checks in the C library.
- Fix obscure off-by-one buffer error with the parser.
Spread 3.17.0 - September 28, 2002
This is a major release including new features, non-backwards compatible changes in the protocols and build environment, performance improvements and bugfixes.
- Enhance the group membership algorithm so very large groups and very large numbers of groups will be merged correctly during a membership. With this change Spread should correctly handle groups with thousands of members and thousands of groups. This also includes the optimization of sending groups messages as FIFO and AGREED instead of SAFE. Thanks to Ryan Caudy from Hopkins for doing this work.
- Revamped build setup using autoconf instead of manual Makefiles. Thanks to Theo Schlossnagle for writing this and updating it. Some small changes were made to Theo's 3.16.2 patch to incorporate it.
- Applied Daniel Rall's SO_REUSEADDR patch. This adds a new configuration option SocketPortReuse that can either force SO_REUSEADDR on or off for TCP server sockets, or set it to an auto mode that uses REUSEADDR if specific interfaces are specified in the spread.conf file and does not use it if the default of INADDR_ANY is used. If you force this on, be aware that it can open up a security risk where other processes can steal Spread's traffic.
- Changed library name from libsp to libspread. This is both more descriptive and should fix the problem with library clashes with other libsp's.
- Applied Daniel Rall's patch to make the spread execution directory and the user and group it runs as configurable at runtime.
- Fix GGT bug where Spread gets stuck or crashes if you reach GGT state. This bug was introduced when Spread 3.x adopted the research version of the session layer.
- Make sure service_type is set to 0 before using it in SP_receive calls in sample programs (spuser, spflooder, simple_user).
- Fix Mem_Alloc blocks so they can be freed without assertion failure.
- Fix hanging bug where token rotates, but ARU is stuck.
- Split the growing changelog at the beginning of Readme.txt into a separate file.
- Updates to man pages. Clarify service_type handling. Add info on accessor functions for membership message body.
Spread 3.16.2 - April 2, 2002
This is a major bugfix release. The focus was stability, bugfixes and some documentation.
- All recv calls in session now check for EWOULDBLOCK, EAGAIN, EINTR and retry the call later. This fixes problem on busy servers where connections would be killed erroneously. Thanks to the Zope team (Guido van Rossum, Tim Peters, and Jeremy Hylton) for discovering this and helping with fixing it.
- log.c file operations now check for errors and handle them.
- Windows bugs:
- close() does not close sockets, we need to call closesocket() to avoid memory leak.
- sockets are not consecutive fd's on windows, they can be > FD_SETSIZE. So fd mapping to sessions changed to use a hash instead of array. As a side-effect it should be faster to connect/disconnect. Thanks to Marc Zyngier for discovering the problem and writing and testing a patch for it.
- Raise the FD_SETSIZE for windows to 1024 by #defining it in arch.h.
- Enhanced error handling to support WSAGetLastError, and define a sock_strerror() function to return nice error strings on windows.
- Include Visual C++ Project files to build Spread on Windows.
- Included improved NetBSD makefile and warning fix from Patrick Welche.
- Generalize the errno handling to support windows errors and other odd cases. Also see fix 3d. Thanks to Marc Zyngier, Tim Peters, and David Holmer for help with this.
- Improve the install targets for linux. Now install include headers and use standard PREFIX define for base directory.
- Updates to man pages. New libsp manpage.
Spread 3.16.1- December 13, 2001
This is a major bugfix release. The focus was stability, bugfixes and a few new platform makefiles.
- Fix various races and bugs in the new authentication
and access control code.
- Fix session establishment races with authentication
- Add more info for access control hooks to use (mess_type and num_groups)
- Fix so rejected messages are not still delivered to local group members.
- Make reject messages honor SELF_DISCARD.
- Fix bug that always allowed NULL connections.
- SGI now builds using signed chars and reports errors correctly.
- MacOSX build fixed.
- Fixed race at session establishment that caused the assertion failure "assert( xxxxx ) false "
- Add MAX_MESSAGE_BODY_LEN to spread_params.h (used in sp.c checks), move MAX_PACKET_SIZE to spread_params.h from arch.h.
- Fixed interface restrictions for daemons.
- Fixed crashes in user and flooder programs when wrong number of command line parameters were passed.
- Added assertion check for Groups membership message with zero members in a group. (Theo)
- Java library fixes and enhancements (Thanks to Dan Rall and Leonard Richardson )
- Fix bug in group name validator G_private_to_names that caused crash.
- Fix for reversed parameters to memset in groups.c (Thanks to Marc Zyngier)
- Fix bug in session connection that confused closed, but not yet deleted file descriptors with newly accepted connections. (Thanks to Dave Parker for discovering bug).
- Fix significant memory leak when connections are disconnected. This leak has been present since at least 3.15.0. (Thanks to Dave Parker for discovering this and providing lots of assistance debugging it.)
- Fix the binding to specific interfaces to work with broadcast packets. (Thanks to Marc Zyngier for reporting the problem)
- Updated man pages and Users Guide
- Added makefile for OpenBSD contributed by Brandon Palmer.
- Added makefile for Solaris 8 with Solaris cc compiler 6.1 contributed by Luc I. Suryo.
Spread 3.16.0 - June 27, 2001
This is a major release. The main change is a new open-source license. This release also includes several new features such as support for multiple interfaces on daemon machines and a new access control and authentication framework. It includes significant performance improvement in joins and leaves and lots of smaller changes:
- Add support for configuring multiple interfaces on daemons. Each daemon can now choose which interfaces to listen on for client connections, monitor requests, and daemon-to-daemon communication.
- Added support for MacOSX. Thanks to Julien Defour and Dirk-Willem van Gulik.
- Agreed messages for join/leave instead of SAFE messages.
- Fixed bug with membership messages for more then 42 members in a group.
- Document how to monitor packing effectiveness.
- SP_connect assigns unique private name if user gives a zero length string as the user name.
- Slightly loosen valid field checking for service_type field to allow flush and secure spread libraries to work.
- Fix events to work with low priority events for Splash.
- Adds modular access control and authentication system that allows the daemon to authenticate client connections and allow or disallow various actions (such as joining groups, sending messages or connecting) based on the authenticated user. This changes the client-server network protocol, but is backward compatible with clients linked with old libraries. This also adds new functions to the API. A sample module that provides access control based on the IP address of the client is included. Also a module that provides the same "allow all clients" policy as older versions of Spread. The Java API has also been updated to support the new access control framework.
- New license for Spread. BSD based open-source license.
- Updated Perl library with some bug fixes and compatibility with new C lib.
- Added support for 64 bit platforms (alpha, ultrasparc & ia64) Note only alpha is actually tested.
- Fix bug in sp.c where if a message was not completely received because of a short buffer and the next call had an invalid message scatter the data in the messages would get corrupted. Probably difficult to trigger unless you are trying hard.
- Changed names of programs included with spread to have "sp" as a prefix. This should help avoid conflicts with all the other utilities called "user" or "monitor".
- Small bugfixes to the Java library.
- Bugfix which removes a costly, and unnecessary, recalculation when several network level membership events occur in close (time) proximity.
Spread 3.15.2 - March 20, 2001
This is a minor release to fix two bugs in the perl and java libraries and to add a new #define in the sp.h file giving the library version number so applications can compile against multiple versions of the API.
There are no code changes to the main spread daemon or C library.
The java bug was the one preventing connections to the daemon in SpreadConnection class.
The perl bug was a memory leak.
The way to test if the SP_version function is the old (3.14-) or new (3.15.1+) interface is to do:
#ifdef SPREAD_VERSION
/* use new interface */
#else
/* use old interface */
#endif
In the future other API changes can be tested by comparing SPREAD_VERSION with a version number constant.
Spread 3.15.1- March 20, 2001
This release had three significant changes. First,
the version number changed from 2 numbers to 3 (Major,
Minor, Patch). Second, the copyright of the original
developers was given to Spread Concepts LLC. Third,
a number of security bugfixes in the client-daemon code
were made.
The version change has two consequences for backwards
compatibilty:
1. The new spread daemon will work with both old and
new client libraries, but clients compiled against the
new libraries (3.15.1) will NOT work with old daemons.
2. The SP_version function has had it's interface changed.
This breaks source compatibility, but it is a non-essential
function and we had to change it sometime. The fix is
very simple.
The bugfixes:
- Make sess_read() non-blocking so slow clients sending messages don't slow or block daemon.
- Implement input validation on all messages received from clients. This is to address the possibility of clients overflowing the servers buffers. These problems were uncovered in a security audit by Olaf Kirch of Caldera.
- Use chroot to isolate spread and drop priveledges if spread is run by root. If it is run as a normal user, then no chroot is done and it runs just as before. The user to run as and the location of the chroot jail can be configured in the spread_params.h file at compile time.
- Fix a bug that causes a significant memory leak when retransmissions are required. This memory leak exists in versions 3.13, 3.14 and 3.15.0.
- SP_version() no longer returns a float, instead it returns in 3 separate parameters the 3 components of the version number.
Spread 3.15.0
Spread 3.15.0 was only an internal release. It included the following changes:
- New version scheme. We now have three parts to identify the version.
- A bugfix to prevent users from sending a message to too many groups at once.
Spread 3.14 - October 31, 2000
The major focus of this release was bugfixes:
- Bugfixes to skiplist implementation.
- Critical fixes to group membership that removes bugs introduced in optimization work of 3.13.
- Critical bugfix to membership which solves problem introduced in 3.13 with using configurations of more then one segment.
- Changes to spread.conf parser, but nothing that should be user visable.
- Better error/problem reporting in a few cases.
- Enforce message length limit. SP_mcast* will now return an error if a message body is too long.
- Minor memory leak at initialization fixed.
- Fix to events.c to prevent an illegal message bug. Bug is triggered when messages are sent very fast during a membership merge.
Spread 3.13 - June 13, 2000
The major new featurs of this release are:
- Major scalability improvements. Should now support upto 990 connections to each daemon, thousands of groups, upto 128 daemons per configuration, and double the throughput for small messages.
- A new, more flexible and readable configuration file format. The configuration file is now called 'spread.conf' and has a simplified format that also allows runtime configuration of the log format, which messages to log, and a flag to disable certain dangerous monitor commands.
All known bugs are also fixed with this version. This includes a bug with the new NO_DROP semantics in version 3.12 and some membership crashes that occur under high load. Behind the scenes, this version consolidates some of the research done in the Center for Networking and Distributed Systems lab (http://www.cnds.jhu.edu) at Johns Hopkins University over the last few years into the public distribution.
The Non-commercial license for Spread has been updated to version 1.2. The changes include a clarification about Spread versions, a small addition to the attribution requirement and a capitalization of the word SPREAD.
Currently two freely-available commercial use licenses
are available for Spread. One allows the use of Spread
for distributed logging of Apache web server logs, and
the other allows the use of Spread for distributed SSL
session caching with Apache-SSL. For more details please
see http://www.spread.org/license/
Spread 3.12 - May 2, 2000
- Integrated FreeBSD port. A Big thanks to Ben Laurie ben@algroup.co.uk for this port and a lot of compile warnings, type cleanups and 2 bugfixes.
- Removed some compile warnings.
- 2 bugs fixed. One in SP_group_ids_equal() and one in the daemon that would never trigger in reality.
- Updated java interface to most recent version.
- Updated events (E_* functions) to most recent version. This adds the ability to attach to file descriptors for Exceptions and Write events as well as reads. It also adds a void* data pointer to the callback parameters.
- Change SP_recv semantics to be "No Drop" by default. The old "drop" semantics are still available by setting the service_type parameter to SP_recv to DROP_RECV before calling it. *** See the file "Short_Buffer_Handling.txt" for detailed comments on this change and what application modifications might be necessary ***
- Documentation updates.
- Changed the way arch.h is implemented. This might require some additions for Ports that we do not support natively.
- Added Is_self_leave() macro which matches documentation for testing self-leaves.
- Changed SP_* and E_* functions to use 'const' appropriately.
- Reserved fields are listed in sp.h to prevent collisions.
- Make MAX_PROC_NAME and MAX_PRIVATE_GROUP sizes available in sp.h.
- Added Perl library interface. You can now write Spread client programs in perl. Thanks to Theo Schlossnagle .
- License updated to version 1.1. Main change is a reformatting and updated email addresses.
Spread 3.11- July 27, 1999
New version of Spread binaries released. Actually includes
Windows binaries. Also includes substantial bug fixes
to the Java Spread library. The C library and the Unix
binaries have NOT changed at all and are identical to
the July 27, 1999 release.
Spread 3.10 - May 26, 1999
- Expiration Date Removed from Binary version.
This release of the executables will not expire. - New Copyright Statement
The copyright of Spread has been finalized. The statement at the top of this file shows it. - Bugs Fixed:
- Bug fix to the SP_scatter_recv() call to make receives into scatter structures of multiple entries of different sizes work.
- The Linux platform also had scatter-gather functionality enabled (now that glibc has working sendmsg, recvmsg calls)
- Fixed bug where packets which are delayed a long time in the network but then actually arrive at a spread daemon cause a crash.
Spread 3.9 - October, 1998
- Multi-threading:
Libsp.a has split into two libraries, libsp.a and libtsp.a, they are identical except that libtsp.a is thread-safe and libsp.a is not. Both versions are provided so that single-threaded programs who don't need a safe library can avoid the (admittedly pretty small) overhead of locking. The libtsp.a can be used identically with libsp.a with the addition that all SP_* functions can be called by multiple threads at the same time. Thread safety in libtsp.a is provided optimally, with the most possible parallelism allowed. Threads acting on separate mailboxes will never block each other, threads writing to a mailbox will never block other threads reading from the same mailbox and vice versa. The one time thread calls to SP_ functions will be serialzed is when multiple threads are reading the same mailbox or writing the same mailbox. There is minimal locking of internal structures which can temporarily block another thread, but since a thread never blocks while in one of these structure critical sections and the duration of the lock is at most a few instructions the delay should be minimal. - IP-Multicast:
Spread now allows you to specifiy IP-Multicast addresses(i.e. 224.0.0.1) as the broadcast address for a segment in the config.dat file. This will work transparently in the same segment, and is guaranteed not to spill multicast packets beyond that segment. If multi-segment ip-multicast is desired, please contact us. - Fixed several minor bugs.
- Included man pages for SP functions. The old html documentation is also included.
- None of these changes effect the Java version which has not changed.