

			     History List
			     ============

Revision: $Id: history.txt,v 1.192 2007/04/04 05:23:34 belaban Exp $

[For current version, see file Version.java (or invoke 'java org.jgroups.Version')]


bba         = Bela Ban, bba@cs.cornell.edu
bela        = Bela Ban, belaban@yahoo.com
i-scream    = Gianluca Collot, gianlucac@tin.it
igeorg      = John Georgiadis, i.georgiadis@doc.ic.ac.uk
jmenard     = Jim Menard (jimm@io.com)
fhanik      = Filip Hanik (filip@filip.net)
vlada       = Vladimir Blagojevic (vladimir@cs.yorku.ca)
rrokytskyy  = Roman Rokytskyy (rrokytskyy@acm.org)
akbollu     = Ananda Bollu (akbollu@users.sf.net)
whizkid_bay = Mandar Shinde (whizkid_bay@users.sf.net)
ovidiuf     = Ovidiu Feodorov (ovidiuf@users.sf.net)
romuald     = Romuald du Song
yaronr		= Yaron Rosenbaum (yaronr@mercury.co.il)
publicnmi	= Robert Schaffar-Taurok (robert@fusion.at)
ossiejnr    = Chris Mills (chris.mills@jboss.com)






***********
THIS FILE IS NOT UPDATED ANYMORE AS OF MAY 2 2006, I SWITCHED TO JIRA FOR THE ROADMAP AND HISTORY.
http://jira.jboss.com/jira/browse/JGRP
***********





Version 2.3
-----------

- Changed method signature of RpcDispatcher.callRemoteMethod() to throw a Throwable.
  Previously it returned the exception as an object, now the exception will be thrown.
  Callers of these methods have to change their code, so this is an incompatible change. However,
  these calls are not used in JBossCache and JBoss Clustering.
  (http://jira.jboss.com/jira/browse/JGRP-154)
  (bela Feb 16 2006)

- Added encryption of entire message to ENCRYPT
  (http://jira.jboss.com/jira/browse/JGRP-190)
  (bela Feb 9 2006)

- Converted Word prog guide to docbook (./doc/progguide). Done by gdvieira@ic.unicamp.br
  (gdvieira@ic.unicamp.br Jan 26 2006)

- Created global JGroups thread group (all threads belong to it)
  (bela Jan 19 2006)

- Added AUTH protocol, samle configs and documentation. http://jira.jboss.com/jira/browse/JGRP-164
  (ossiejnr Jan 12 2006)

- Fix in ReplicatedHashtable where state transfer notification is not emitted
  (http://jira.jboss.com/jira/browse/JGRP-175)
  (David Forget Jan 5 2006)

- init() is now called after all protocols have been created
  (bela Jan 5 2006)

- Fixed bug where srv_sock_bind_addr could be different from transport's bind_addr.
  This could cause incorrect suspect messages.
  (http://jira.jboss.com/jira/browse/JGRP-173)
  (bela Jan 3 2006)

- Added total order SEQUENCER protocol. See doc/SEQUENCER.txt for details
  (bela Dec 30 2005)





Version 2.2.9.1
---------------

- Created label JGROUPS_2_2_9_1
  (bela Dec 29 2005)

- Fixed bug "binding to same interface twice fails"
  (http://jira.jboss.com/jira/browse/JGRP-167)
  (bela Dec 23 2005)

- Fixed merge bug occurring when members are joining during a merge
  (http://jira.jboss.com/jira/browse/JGRP-139)
  (bela Dec 23 2005)

- Fixed ENCRYPT bug where down messages were queued unnecessarily
  (JIRA: http://jira.jboss.com/jira/browse/JGRP-166)
  (bela Dec 21 2005)

- Replaced Vector for members and pingable_members in FD with CopyOnWriteArrayList.
  Fixes  (http://jira.jboss.com/jira/browse/JGRP-161)
  (bela Dec 16 2005)




Version 2.2.9
-------------

- Created label JGROUPS_2_2_9
  (bela Dec 9 2005)

- Rewrite of TCP_NIO
  (Scott Marlow and Alex Fu Nov 2005)

- Added support for Receiver in JChannel (push based message reception)
  (bela Oct 2005)

- Added JChannel.dumpStats(): returns information about the various protocols, and the channel itself,
  as a map. Currenty, only NAKACK, TP and FC have implementations
  (bela July 26 2005)

- Eliminated creation of 3 input and 2 output streams *per message* in TP. These streams are now
  created at TP startup and simply reset when a message is to be received or sent
  (bela July 25 2005) 

- Improved performance of RpcDispatcher, MethodCall (is now Stremable), added unit tests
  (bela July 25 2005)

- Improved javadoc: copied portions of User's Guide to doc comments in source files,
  fixed javadoc warnings; added project and package overviews; tweaked build target. 
  (chrislott July 17 2005)
  
- Headers are now always created in a Message, because we always add at least 1 header
  to a message
  (bela July 15 2005)

- Changed org.jgroups.util.Digest to use a HashMap rather than arrays
  (bela July 12 2005)

- Refactored UDP and TCP into extending a common transport (TP)
  (bela July 4 2005)

- Completed first version of JMX instrumentation
  (bela June 14 2005)

- Added STATS protocol, provides stats via JMX
  (bela June 7 2005)

- Added org.jgroups.jmx package, contains various adapters to expose channel and protocols
  via JMX. Added jmxri.jar (can be removed once JDK 5 is baseline)
  (bela June 1 2005)

- Replaced System.err.println() with log.error() in setProperties() of all protocols
  (bela May 30 2005)

- Added xmit_from_random_member: retransmits will go to a random member, rather than the
  original sender of the message. This eases the burden on senders in large groups
  (bela May 25 2005)

- Fixed http://jira.jboss.com/jira/browse/JGRP-79 (problems with nulling src addresses on
  loopback adapter in Windows). See JGroups/docs/NullingSrcAddresses.txt for details.
  (bela May 19 2005)

- Fixed problem with PingWaiter/PingSender in applets (http://jira.jboss.com/jira/browse/JGRP-86)
  (bela Ma 19 2005)

- Fixed STATE_TRANSFER stuck in Channel.queue bug (http://jira.jboss.com/jira/browse/JGRP-80)
  (bela May 10 2005)

- Added support for multiple locked locks to the DistributedLockManager.
  (publicnmi Jun 08 2005)



Version 2.2.8
-------------

- Created branch JGROUPS_2_2_8
  (bela April 29 2005)

- Fixed problem with deadlock detection (e.g. in RpcDispatcher). Caller always passed new call stack,
  rather than adding to existing call stack
  (bela April 25 2005)

- Removed xerces JARs
  (bela April 25 2005)

- UDP: fixed incorrect marshalling of IpAddresses with additional_data
  (http://jira.jboss.com/jira/browse/JGRP-63)
  (bela April 23 2005)

- Replaced getClass().getClassLoader() with Thread.currentThread().getContextClassLoader().
  JIRA issue http://jira.jboss.com/jira/browse/JGRP-34
  (bela April 23 2005)

- UDP: synchronization around message marshalling and sending, non-sync could lead to intermingled
  byte arrays at the receiver, due to concurrent access to out_stream
  (bela April 20 2005)

- Fixed bug where IpAddress.additional_data was not marshalled
  (bela April 19 2005)

- Removed RWLock, replaced uses with ReadWriteLock from util.concurrent
  (bela April 8 2005)

- Removed TransactionalHashtable (obsolete, replaced by JBossCache)
  (bela April 8 2005)

- GMS/CoordGmsImpl: added merge_leader flag. If enabled, the member can initiate a merge although
  it is not the coordinator
  (bela April 7 2005)

- UDP: bind_to_all_interfaces now allows the multicast receiver socket to bind to all
  available interfaces, only supported under JDK 1.4 and up
  (bela April 1 2005)

- MPING: binds now to all interfaces (bind_to_all_interfaces has to be to true), only supported under
  JDK 1.4 and higher
  (bela April 1 2005)

- Fixed stopping outgoing packet handler (http://jira.jboss.com/jira/browse/JGRP-49)
  [fix by Steve Nicolai]
  (bela April 1 2005)

- Added MPING. Allows for multicast discovery on a TCP-based stack
  (bela March 31 2005)

- ConnectionTable:
  - Individual thread per Connection so send() doesn't block
  - timeout for socket creation (sock_conn_timeout)
  (bela March 24 2005)

- TCPPING: remove myself from pinged members
  (bela March 23 2005)

- Added patch by David Orrell (external addresses for TCP/ConnectionTable)
  (bela March 17 2005)

- Fixed JGRP-42 (MethodCall doesn't correctly handle inheritance)
  org.jgroups.blocks.MethodCall was updated to walk the class hierarchy and locate method not only 
  in the current class, but also in the superclasses and superinterfaces. There is a new test that
  contains use cases: tests/junit/org/jgroups/blocks/MethodCallTest.java
  (ovidiuf Feb 18 2005)

- org.jgroups.util.Rsp: changed the sender's type from Object to Address.
  (ovidiuf Jan 19 2005)

- Modified the RpcDispatcher's API to allow more than one ChannelListener to be registered
  to the underlying JChannel.
  (ovidiuf Jan 19 2005)

- Added MessageDispatcher.getMessageListener() to make possible to multiplex more than one 
  MessageListeners in top of an already configured MessageDispatcher/RpcDispatcher.
  (ovidiuf Jan 19 2005)

- Implemented JGRP-15 (Concurrent startup of initial members without merging): when multiple members are started
  simultaneously, and no other member is running yet, they form singleton groups, and merge after some time.
  GOAL: elect a coordinator out of all concurrent (client-)members and avoid a merge.
  (bela Jan 5 2005)

- Fixed JGRP-10 (incorrect computation of wait time in waiting loops)
  (bela Dec 31 2004, on suggestion from Zac Hansen)

- Added system property ignore.bind.address, which ignores the system property bind.address
  (bela Dec 12 2004)

- Changed Util.objectFromByteBuffer() to use ContextObjectInputStream. This uses the classloader of the caller
  rather than the system classloader
  (bela Nov 29 2004)

- MethodCall: changed Class.getMethod() to Class.getDeclaredMethod(). This allows for invocation of non-public
  methods, e.g. private methods from within the same class, or package-private methods from within the same package
  (bela Nov 1 2004)

- Added leading byte for Message to indicate which fields are null and non-null. Saves 5 bytes/msg
  (bela Oct 8 2004)

- Dest address is not marshalled any longer; saves 10 bytes/msg
  (bela Oct 8 2004)

- Implemented Streamable for more classes (headers)
  (bela Oct 8 2004)

- Changed FD's BroadcastTask: this could *not* fire in the case where a task was stopped and immediately
  restarted
  (bela Oct 7 2004)

- Fixed incorrect merging in TUNNEL/GossipClient
  (bela Oct 7 2004)

- Added support for bind.address system property in FD_SOCK
  (bela Oct 6 2004)

- Fix for hanging merge when coordinator/participant crashes or shuns-and-reconnects during merge
  (bela Oct 5 2004)

- Removed object serialization almost entirely; replaced it with Streamable. Changed Message, IpAddress and some
  Header subclasses (not yet all) to support Streamable. UDP now uses Streamable both for Message and Message lists
  (used in bundling). Rough performance increase ca 30% (size of serialized data ca. 30% smaller to).
  (bela Oct 4 2004)

- UDP: removed 1 copy operation per sent message by using ExposedByteArrayOutputStream rather than ByteArrayOutputStream.
  ByteArrayOutputStream.toByteArray() copies the buffer, ExposedByteArrayOutputStream.getRawBuffer() returns a
  *reference* to the raw buffer plus and offset and length. This is then passed to the resulting DatagramPacket
  (bela Sept 26 2004)

- Added ExposedByteArrayOutputStream (exposes the raw buffer), avoids copying the underlying byte buffer
  (bela Set 26 2004)

- Added Magic{Input,Output}ObjectStream. They use the magic numbers mapping table to provide efficient
  class descriptors on serialization
  (bela Sept 24 2004)

- Added Simulator and FCTest
  (bela Sept 23 2004)

- More IntelliJ Inspector changes
  (bela Sept 23 2004)

- Various fixes for findbugs and IntelliJ's Inspector
  (bela Sept 22 2004)

- Added CondVar and CondVarTest
  (bela Sept 22 2004)

- Removed Ensemble
  (bela Sept 21 2004)

- Removed some unneeded unit tests
  (bela Sept 21 2004)

- Modified Promise.getResult(): timeout is now implemented correctly. getResultWithTimeout() now also throws
  a TimeoutException
  (bela Sept 16 2004)

- pbcast.STATE_TRANSFER/STABLE/JChannel: modified state transfer; timeout is now passed down
  to the protocols
  (bela Sept 16 2004)

- Added MERGE3
  (bela Sept 15 2004)

- FD_SOCK: added sending message to signal regular termination. Plus, each connection is handled
  on a separate thread
  (bela Sept 14 2004)

- UDP: added code to prevent port reuse when using ephemeral ports, and ports are reused on some
  operating systems (e.g. Win2K). Use num_ports_used > 0 to enable this feature
  (bela Sept 13 2004)

- FD_SOCK: added bind address for server socket
  (bela Sept 10 2004)




Version 2.2.7
-------------

- Created distribution (CVS tag = JG_2_2_7_final)
- Created distribution (CVS tag = JG_2_2_7)
  (bela Sept 8 2004)

- Re-implemented Membership.sort (using Collections.sort())
  (bela Sept 6 2004)

- Fixed & simplified the discovery algorithm in TCPPING
  (bela Sept 4 2004)

- Fixed NPE in castViewChange() caused by concurrent reception of leave() and handleLeaveRequest() methods
  (bela Sept 3 2004)

- Added automatic reconnect feature for PullPushAdapter on shun-reconnect sequence
  (bela Sept 2 2004)

- Fixed incorrect determination of coordinator/participant after a merge where new coordinator was *not*
  the one who executed the MERGE. Suggested by yaronr
  (bela Aug 31 2004)

- Removed checks for self-delivery in FC: flow control needs to apply also for messages sent
  from X to itself
  (bela Aug 30 2004)

- Added discard_incompatibe_packets to UDP (suggested by Noronha, Vijay" <Noronha@Synygy.com>)
  (bela Aug 17 2004)

- Added checking for system property bind.address (set by JBoss) in TCP (like UDP)
  (bela Aug 14 2004)

- Applied patches by Markus Puetz (reading of systems properties fails in JLNP)
  (bela Aug 12 2004)

- Fixed NPE in MethodCall caused by null args/types
  (bela Aug 9 2004)

- Reverted use of ContextInputStream in Message.getObject()
  (bela Aug 6 2004)







Version 2.2.6
-------------

- Created distribution (CVS tag = JG_2_2_6)
  (bela Aug 4 2004)

- Fixed upProcessingThread in MessageDispatcher: using org.jgroups.util.Queue now (bug#: 998920)
  (bela Aug 4 2004)

- Fixed incorrect start()/stop() sequence of GossipClient in TCPGOSSIP
  (bela Aug 4 2004)

- ChannelFactory: specified new createChannel() method that assumes protocol stack configuration
  information has already been set on the factory (e.g. at construction)

- JChannelFactory: Implemented ChannelFactory.createChannel() and provided type specific constructors;
                   a default constructor was provided for backwards compatability

- ChannelException: updated to support exception chaining in a 1.4 VM and to provide 1.4-like
  exception chaining behavior for a 1.3 VM
  (jiwils July 31 2004)

- Channel: protected access/empty constructors were removed
  (jiwils July 29 2004)

- JChannel: added 5 type-specific constructors for JChannel; deprecated the JChannel(Object)
  constructor - this means JChannel(null) construction is not supported; use JChannel() instead
  (jiwils July 29 2004)
  
- ConfiguratorFactory: modified to support JChannel constructor changes
  (jiwils July 29 2004)

- MessageDispatcher: m_upProcessingThread now terminates correctly on stop() (bug#: 998920)
  (bela July 29 2004)

- Added logic to ClientGmsImpl to abort join() when leave() or stop() is called before join() returned
  (bela July 29 2004)

- Util.objectFromByteBuffer() and Message.getObject() now use ContextObjectInputStream. This ensures that the
  correct context classloader is used
  (bela July 28 2004)

- Fixed bug that - when deadlock_detection was enabled - and scheduler was null (should not be the case),
  messages were discarded
  (bela July 26 2004)

- Fixed a TUNNEL bug.
  (ovidiu July 12 2004)

- Ran code through Intellij inspector, changed various things (e.g. redundant code etc).
  (bela July 4 2004)




Version 2.2.5
-------------

- Created distribution (CVS tag = JG_2_2_5_0)

- pbcast.NAKACK/NakReceiverWindow: messages that have been received in order are sent up the stack
  (= delivered to the application). Delivered messages are removed from NakReceiverWindow.received_msgs
  and moved to NakReceiverWindow.delivered_msgs, where they are later garbage collected (by STABLE). Since
  we do retransmits only from sent messages, never received or delivered messages, we can turn the
  moving to delivered_msgs off, so we don't keep the message around, and don't need to wait for
  garbage collection to remove them
  (bela June 24 2004)

- Changed UDP: multicast messages are now sent via mcast_send_sock and received via mcast_recv_sock. This has
  to better performance when sending/receiving a lot of mcast msgs
  (bela June 24 2004)

- Multicast messages now use the mcast_sock
  (bela June 12 2004)

- Added system property resolve.dns: if set to false, IpAddresses will not attempt to resolve DNS host names, but
  just print addresses in dotted-decimal format
  (bela June 8 2004)

- UDP: system property bind.address overrides configuration option. Start e.g. with -Dbind.address=192.168.0.10
  (bela June 8 2004)

- UDP: we cannot remove the header, because further retransmissions will fail. This lead to the
  'missing UDP header bug'. Replaced removeHeader() with getHeader()
  (bela May 18 2004)

- Removed all deprecated methods from MethodCall.
- Changed all dependent classes (RpcDispatcher, RpcProtocol etc)
- Removed MethodLookup, MethodLookupJava and MethodLookupClos
  (bela May 14 2004)

- Properties for a JChannel constructor can now be regular files
  (bela May 12 2004)

- Removed deprecated methods from RpcProtocol/RpcDispatcher
- Made MethodLookupJava the default in RpcProtocol/RpcDispatcher
- RequestCorrelator does now not use Scheduler when deadlock_detection=false, but calls
  handleRequest() directly
  (bela May 12 2004)

- Created version 2.2.5
  (bela May 12 2004)




Version 2.2.4
-------------

- Created distribution (CVS tag = JG_2_2_4)

- Updated NakReceiverWindow (used by NAKACK): replaced received_msgs and delivered_msgs (lists) with TreeMaps.
  This removes linear cost for traversals, and makes lookups constant.
  (bela May 6 2004)

- Changed NAKACK.sent_msgs to use TreeMap (sorted seqnos as keys)
  (bela May 3 2004)

- Removed log4j directory
  (bela May 2 2004)

- Solved bug #943709
  (yaronr April 28 2004)  

- Added class org.jgroups.util.ReentrantLatch
  (yaronr April 28 2004)

- Solved bug# 939253
  Updated MessageDispatcher.java (MessageDispatcher + ProtocolAdaptor).
  (yaronr April 28 2004)

- Optimization in RpcDispatcher: before marshalling the args and handing the call over to the superclass, we
  make sure the destination list is not empty: if empty we return immediately.
  (bela May 1 2004) 

- Fixed bugs #943480 and #938584. STABLE handles SUSPEND_STABLE and RESUME_STABLE events, and STATE_TRANSFER
  sends SUSPEND_STABLE before fetching the state and RESUME_STABLE after receiving the state, to prevent
  message garbage collection from going on during a state transfer
  (bela April 28 2004)

- Fixed bug #943881 (patch by Chris Wampler)
  (bela April 28 2004)

- Fixed bug #938584 (NAKACK.retransmit problem)
  (bela April 27 2004)

- Changed default format for XML properties to a simpler format (similar to JBoss)
  Modified all XML files in ./conf
  'XmlConfigurator <input file> -new_format' can be used to convert an old XML format into a new one
  (bela April 26 2004)

- Created new version
  (bela April 26 2004)




Version 2.2.3
-------------

- Added -new_format flag to XmlConfigurator; dumps input XML file in the format used by JBoss
  (bela April 24 2004)

- Added flag use_scheduler to RequestCorrelator, which allows one to bypass the Scheduler altogether.
  If deadlock detection is enabled, however, the Scheduler is needed, therefore use_scheduler is set to true.
  Use the method setUseScheduler() to enable/disble this
  (bela April 23 2003)

- Changed handling of Protocol.setProperties(). Each Protocol has to call super.setProperties() if it wants
  to store the properties in this.props now
  (bela April 23 2004)

- Made several protocols less verbose (info --> debug level)
  (bela April 22 2004) 

- Fixed NAKACK retransmission bug (#938584)
  (bela April 22 2004)

- Minor change in Scheduler: replaced sched_thread.interrupt() with throwing of exception
  (bela April 15 2004)

- Created distribution (CVS tag = JG_2_2_3)
  (bela March 31 2004)

- Conversion of Trace-based logging system to commons-logging.
  Removed log4j subdir, removed org.jgroups.log package
  (bela March 29 2004)

- Added commons-logging.jar
  (bela March 29 2004)

- Created new version
  (bela March 29 2004)




Version 2.2.2
-------------

- Made UpHandler/DownHandler threads in Protocol daemon threads
  (bela March 17 2004)

- MessageDispatcher: handling SET_LOCAL_ADDRESS, cache local_addr correctly (suggested by Yaron Rosenbaum)
  (bela March 16 2004)

- Added more trace information to RpcDispatcher, MessageDispatcher, RequestCorrelator and GroupRequest
  (bela March 9 2004)

- Fixed state transfer for DistributedHashtable (should do it the same way for Channel.getState())
  (bela March 8 2004)

- Created new version
  (bela March 8 2004)





Version 2.2.1
-------------

- Created distribution (CVS tag = JG_2_2_1)

- Added bundling capability to UDP. Bundles multiple smaller message into a larger one and then sends the
  larger message. Waits with sending until n bytes have accumulatd or n ms have elapsed, whichever is first
  (bela March 1 2004)

- Added first version of new fragmentation protocol (FRAG2). Main 2 advantages over FRAG: doesn not serialize message
  and does not copy message (deferred until the message hits the transport). FRAG2 is about 3 times faster than FRAG.
  (bela Feb 25 2004)

- Added offset and length fields to Message, plus a new constructor and a new setBuffer() method. This allows for
  multiple messages to share a common byte buffer (avoiding unnecessary copying). The semantics of Message.getBuffer()
  have changed: previously it returned a reference to the buffer, now it returns either a reference (offset/length
  are not used) or a copy (offset/length are used). If you want the previous semantics, use Message.getRawBuffer().
  (bela Feb 25 2004)

- Changes to log4j.Trace: we now use the fully qualified classname and methodname of the caller, e.g.
  "org.jgroups.protocols.PING.down"
  (bela Feb 24 2004)

- RequestCorrelator: catching exceptions caused by non-serializable return value, return them
  as exceptions. This fixes bug# 901274: group requests would *not* return (not even a null value) if
  the invoked method threw an exception, causing callers to hang for a timeout. Now the exception is returned.
  (bela Feb 20 2004)

- Added NIO version of ConnectionTable1_4; works with JDK 1.4 or later. 
  TCP1_4.java protocol uses ConnectionTable1_4 and tcp1_4.xml config file for NIO 
  based TCP stack.
  (akbollu Fed 18 2004)

- Added send_buf_size and recv_buf_size to TCP
  (bela Feb 11 2004)

- Fixed problem in ConnectionTable/TCP: when a message was sent to a crashed member,
  the connection establishment would take a long time. Now we can skip messages to
  suspected members
  (bela Feb 9 2004)

- Added tcpgossip.xml config file
  (bela Jan 21 2004)

- Fixed bug in IpAddress: access to address cache is now synchronized (caused ConcurrentAccess ex).
  (bela Jan 21 2004)

- ConnectionTable: new sockets now use the bind_addr (used to ignore it)
  (bela Jan 18 2004)

- Added network optimization to PING and TCPPING for FIND_INITIAL_MBRS event when initial hosts is used,
  rather than send to all, skip send for initial members already in the view
  (thomas sorgie, Jan 17, 2004)

- Changed default port_range from 5 to 1, auto port escalation is a nice feature, but it is wasteful and 
  should be off by default
  (thomas sorgie, Jan 17, 2004)

- Removed unused checkForResult() from util.Promise which has misleading results when result is null, replaced
  with hasResult() which returns a boolean indicating whether a result if available
  (thomas sorgie, Jan 17, 2004)

- Removed exceptions from getObject()/setObject() again, replaced with
  IllegalArgumentException
  (bela Jan 16 2004)

- Added exception(s) to Message(Address, Address, Serializable), getObject() and
  setObject()
  (bela Jan 15 2004)

- Removed direct_blocking from FC; this is now default
  (bela Jan 8 2004)

- Fixed failed merging when all up/down threads are disabled (default-minimalthreads.xml)
  (bela Jan 8 2004)

- Removed send_sock from UDP and streamlined sending. Now there is only 1 socket for sending unicast and multicast
  messages and for receiving unicast messages, and 1 socket for receiving multicast messages
  (bela Jan 6 2004)

- Added use_outgoing_packet_handler to UDP. If enabled, all outgoing packets will be handled by a separate thread.
  This results in great perf gains for multicasts sent to self
  (bela Jan 2 2004)

- Added min_size property to SIZE
  (bela Dec 26 2003)

- Replaced HostInfo with IpAddress in PING/TCPPING
  (bela Dec 22 2003)

- Added get_interfaces script to 'bin' directory: discovery of all network interfaces on a box.
  Needs 1.4 to work
  (bela Dec 18 2003)

- JChannel: fixed handling of additional_data: additional_data was not retained across shuns/reconnects,
  so the additional_data would not be available. Run AddDataTest for unit testing.
  (bela Dec 15 2003)

- Added scripts for pinging all members given an mcast address and port (probe), and
  for determining the fragmentation size (frag_size).
  (bela Dec 12 2003)

- Fixed bug #854887. When AUTOCONF determines the correct
  fragmentation size (e.g. 65507 on my WinXP laptop),
  fragments are cut down to 65507 bytes max.
  However, those fragments are regular messages, so we add
  some headers, plus serialization adds its own stuff, so we
  end up with more than  65507 bytes, causing UDP to fail
  (AUTOCONF measured exactly how many bytes could be sent over
  the UDP datagram socket). Solution: add a buffer to the frag size determined
  by AUTOCONF (e.g. 1000 bytes). This will be subtracted from the computed
  frag size, so we have enough space. The buffer is always more or less
  constant, as headers or serialization is constant too.
  (bela Dec 12 2003)

- Added initial_hosts support for PING (copied from TCPPING)
  (bela Dec 11 2003)

- Scheduler can now handle incoming requests concurrently (if concurrent_processing is true). By default,
  this is false: setting this to true can destroy the ordering properties provided by a protocol stack, e.g.
  in the case of total or causal order. FIFO (default) should be fine, but please know what you are doing !
  (bela Dec 10 2003) 

- Modified SMACK protcol: handling of CONNECT/CONNECT_OK and DISCONNECT/DISCONNECT_OK was incorrect. Worked only
  on UDP. Now works on TUNNEL as well.
  Also added a new protocol config smack_tunnel.xml to conf.
  (bela Dec 10 2003)

- ProtocolStack.startStack() and stopStack() now use START/START_OK and STOP/STOP_OK pairs (again). Protocol will
  handle these events internally. This prevents subtle timing problems, e.g. a CONFIG event being passed by
  start() invocations on the protocols.
  Fixes bug #854855
  (bela Dec 5 2003)

- Fixed bug in pbcast.GMS which incorrectly generated view when many members left at exactly the same time.
  Bug was reproduced in ConnectStressTest. We may have to revisit huge concurrent JOINs later (30 work fine in
  the test now)
  (bela Nov 20 2003)

- Added ConnectStressTest unit test
  (bela Nov 20 2003)

- pbcast.GMS and shunning: only shun if this member was previously part of the group. avoids problem where multiple
  members (e.g. X,Y,Z) join {A,B} concurrently, X is joined first, and Y and Z get view {A,B,X},
  which would cause Y and Z to be shunned as they are not part of the membership
  (bela Nov 20 2003)

- Added BoundedList to org.jgroups.util
  (bela Nov 20 2003)

- Fixed NullPointerException in CoordGmsImpl (252) caused by null Digest
  (bela Nov 20 2003)

- Fixed JChannel._getState(): when the state transfer protocol is just underneath the Channel, and
  is configured to use the caller's thread, then we always run into the state transfer timeout for first
  member.
  (bela Nov 13 2003)

- GossipRouter can be managed as MBean under the JBoss JMX server.
  To build a dist/jgroups-router.sar service archive, run build.sh jboss-service.
  The router deploys as 'jgroups:service=GossipRouter' and it can be further
  managed from http://<your_server>:8080/jmx-console
  (ovidiuf Oct 29 2003)

- Added compression protocol (COMPRESS) and example stack (compress.xml)
  (bela Oct 17 2003)

- Added GossipRouter. It is based on the Router code and it is able to answer
  Gossip requests too. Can completely replace Router/GossipClient. It is
  backward compatible, clients shouldn't be aware of change.
  (ovidiuf Oct 15 2003)



Version 2.2
-----------

- JChannel.close(): queue will not be reset until re-opened
  (bela Sept 25 2003)

- Added flushEvents() to ProtocolStack
  (bela Sept 24 2003)

- New JUnit test case AddDataTest to test setAdditionalData() in IpAddress
  (bela Sept 22 2003)

- Added remove_mutex to Queue: waitUntilEmpty() waits on the remove mutex, which is notified
  by remove(), remove(long timeout), removeElement(Object el) and close() and reset()
  (bela Sept 22 2003)

- Added resource handling, e.g. instead of full URLs a simple XML file name can be passed.
  getResourceAsStream will be used on the thread's classloader to find the resource.
  Example: java org.jgroups.demos.Draw -props default.xml (default.xml has to be in the classpath)
  (bela Sept 11 2003)

- JavaGroups was renamed to JGroups. Package is now org.jgroups. The
  final 2.1.1 version was tagged with the JG_FINAL_SEPT_8_2003 tag.
  (bela Sept 8 2003)


Version 2.1.1
-------------

- Added MERGEFAST protocol: really simple implementation of a merge protocol which allows for faster
  merging. Coordinators attach info saying "I'm the coord", when other coords (this means we have a
  partition) see it, a merge protocol is initiated right away
  (bela Aug 25 2003)

- Added additional_info handling for TCP (already present for UDP,
  added in 2.0.6)
  (bela Aug 4 2003)

- Applied patches sent by Alfonso to replicated building blocks (only
  send mcast when more than 1 member, else apply change directly
  (bela Aug 1 2003)

- Added adapttcp TCP-based tests
  (bela July 25 2003)

- Added properties override to JChannel: use -Dforce.properties=file:/myprops.xml to force a given
  protocol stack spec to be used
  (bela July 24 2003)

- Eliminated unneeded message copying in NakReceiverWindow.remove() when inserting delivered
  message into delivered_msgs
  (bela July 23 2003)

- Fixed bug #775120 (channel not connected on first view)
  (bela July 21 2003)

- Applied patch (submitted by Darren Hobbs) for incorrect voting to
  ClientGmsImpl (both pbcast and regular branch)
  (bela July 15 2003)

- Added performance tests created by Milan Prica (prica@deei.units.it) under
  org.jgroups.tests.adapt
  (bela July 12 2003)

- Created
  (bela July 12 2003)




Version 2.1.0
-------------

- Created 2.1 distribution (CVS tag: JG_2_1)
  (bela July 5 2003)

- Added timeout latency value to FD, fixes annoying (but not incorrect) "missing first heartbeat"
  problem
  (bela on behalf of Bas Gooren June 27 2003)

- Fixed bind_port problem in UDP
  (bela on behalf of Bas Gooren June 27 2003)

- Fixed deadlock (bug is #761804). Changes in RequestCorrelator.
  (bela June 27 2003)

- Change to pbcast.STABLE: max_bytes property allows for more aggressive message garbage collection.
  It keeps track of the number of bytes received from everyone. When max_bytes is exceeded, a STABLE
  message is multicast. This can be used in *addition* to, or instead of desired_avg_gossip.
  (bela June 26 2003)

- Moved pbcast.STABLE on top of UNICAST/NAKACK. The reason is that STABLE should be reliable (message
  retransmission). STABLE now assumes NAKACK is *below* rather than above it. This required changes to
  all default protocol spec XML files, plus hard-coded properties in demo programs.
  (bela June 26 2003)

- Created
  (bela June 26 2003)


Version 2.0.8
-------------

- First version of FC (flow control) protocol based on credit system. PerfTest works (no OutOfMemory exceptions),
  but it needs to be faster
  (bela June 25 2003)

- On JChannel.open() a new ProtocolStack is created, previously the existing one was reused. This
  caused multiple timers to be created on shun-reconnect
  (bela June 12 2003)

- CloserThread would not terminate in Draw demo. Fixed by running mainLoop() in separate thread
  (bela June 12 2003)

- On shun-reconnect, the ProtocolStack's timer was not restarted (start() was not called), therefore
  FD would not restart its heartbeat. This fixes bug #753327.
  (bela June 12 2003)

- Added new building block: DistributedQueue. Added unit and stress tests as well.
  (romuald June 4 2003)

- Added diagnostics interface to query all members in a subnet using the same IP multicast address and
  port (UDP). Use org.jgroups.tests.Probe to execute
  (bela June 3 2003)

- Fixed CONNECT_OK bug in TOTAL_TOKEN
  (bela June 2 2003)

- Added PerfTest
  (bela May 27 2003)

- FD: fixed problem when correct member was suspected, but didn't
  receive VERIFY_SUSPECT ack. Caused that member not to be pinged
  anymore. If the member crashed later on, the crash would not be
  detected.
  (bela May 16 2003)

- JChannel: fixed bug in shun-reconnect sequence: channel_name was nulled,
  therefore reconnect created a unicast channel. Now CloserThread
  remembers the old channel_name and uses it to reconnect.
  (bela May 15 2003)

- Fixed constructors of ChannelException so that ChannelException.getMessage()
  returns non-null value
  (bela April 17 2003)

- Added exceptions to 2 of the 4 constructors of DistributedHashtable
  (bela April 17 2003)

- Added up_thread_prio and down_thread_prio to Protocol. This allows users to set
  thread priority for each thread (up,down) in a protocol.
  (bela April 15 2003)

- Added versioning to TCP. In addition to the cookie, we now also send the version. If the
  cookie doesn't match we discard the message. If the versions don't match, we log a
  warning message
  (bela April 6 2003)

- Added versioning to UDP. Message with different versions will be flagged (warning), but
  not discarded. This change changes the wire format of message, so that previous versions
  will not work with this version
  (bela April 4 2003)


Version 2.0.7
-------------

- Added serialVersionUID to MethodCall. Reason is that jikes and javac did not generate
  the same serialVersionUID, causing problems between JGroups instances not compiled
  with the same compiler. Currently MethodCall is the only instance where this problem
  occurred. However, I didn't do exhaustive tests on this, there are probably more
  instances. Since most users use the same codebase, this should not be a problem though.
  (bela March 30 2003)

- Added way of defining method via (a) class types (Class[] array) or
  (b) signature (String[])
- Modified RpcDispatcher and RpcProtocol to provide 2 new methods for each
- Added RpcDispatcherSpeedTest
  (bela March 30 2003)

- Removed mcast_bind_addr again: I had thought 0.0.0.0 listens on *all* available
  interfaces, but this is not true. The semantics are that the ANY address (0.0.0.0)
  means that the first available interface is bound to.
  We could have multiple mcast sockets, each on a different interface, joining the
  same group though; this is possible.
  (bela March 28 2003)

- Added mcast_bind_addr parameter to UDP, by default multicast socket will
  now listen on all interfaces (0.0.0.0 'any' address)
- Send socket in UDP now doesn't take a bind_addr argument any longer;
  by default the IP code will dynamically choose the interface based on the
  destination address
  (bela March 27 2003)

- Fixed bug in connect() - disconnect() - connect() sequence. Only
  occurred when reconnecting to a different channel name. Fixed by
  resetting all channel state (JChanel.init()).
  (bela March 21 2003)

- Modified code for TCP/UDP: when a channel name is null, an outgoing
  message will not have a header.
  (bela March 20 2003)

- Fixed bug which caused join() to fail (null address) on
  Channel.close(), Channel.open(), Channel.connect() sequence.
  (bela March 18 2003)

- Added unicast capability for channels. The connect() method can now have a
  null channel name, which will *not* invoke the JOIN protocol.
- Added org.jgroups.tests.UnicastChannelTest
  (bela March 16 2003)

- Uncommented code in UDP.createSockets() which caused binding to all
  interfaces (bind_addr == null). This caused incorrect addresses
  (e.g. 0.0.0.0:1234), which were not identical across machines.
  (bela March 13 2003)

- Added patch by Roland Kurman. If a protocol stack has only 1
  protocol, then the JChannel.connect() method will fail as the
  connect_mutex will be notified before connect_mutex.wait(). Added
  some vars to check for this case. Dito for disconnect().
  (bela March 13 2003)

- Added BSH protocol. Allows processing of Java code sent from a remote member.
  Executes any Java code and sends back the result.
  (bela March 8 2003)

- Added beanshell (www.beanshell.org) JAR file
  (bela March 8 2003)

- Added optional ENCRYPT protocol (works with JDK1.4) using a 3rd
  party provider. Jar and protocol file with ".xml" being added
  on 03/06/2003.
  (whizkid_bay Mandar Shinde)

- Removed synchronized from RequestCorrelator.removeEntry(). Not
  needed, and caused bug #690606
  (bela Feb 28 2003)

- Removed synchronized from GroupRequest.execute() (not needed as we
  synchronized further down the code anyway)
  (bela Feb 28 2003)

- Replaced print statements with Trace calls in some of the WAN support
  classes. Modified log4j Trace wrapper to report also the module the log
  was generated for.
  (ovidiuf Feb 19 2003)

- Fixed a bug in TUNNEL that caused the clients and the Router to
  deadlock under high-volume traffic.
  (ovidiuf Feb 05 2003)

- A custom name/path for the magic number file can be specified using
  the property "org.jgroups.conf.magicNumberFile". Default is
  "jg-magic-map.xml".
  (ovidiuf Jan 30 2003)

- Added contentsSet() and contentsCleared() callback to
  DistributedHashtable Notification interface
  (bela Jan 30 2003)

- pbcast.NAKACK will not remove header when handling retransmitted message.
  Otherwise further retransmit requests would have failed
  (bela Jan 29 2003)

- Removed unused casts
  (bela Jan 28 2003)







Version 2.0.6
-------------

- Added FLOW_CONTROL protocol to throttle sender when receivers are
  lagging behind.
  (Ananda Jan 20 2003)

- Added ChannelClosedException and ChannelNotConnectedException to
  Channel.getState() and Channel.getStates()
  (bela Jan 20 2003)

- Various fixes related to the connect-disconnect-connect sequence:
  TUNNEL sends a null local address up the stack when disconnected,
  GossipClient provides a new timer and also cleans up the groups map
  when stopped, pbcast.NACKACK cleans up the NakReceiverWindows when
  disconnected and resets the seqno.
  (ovidiuf Jan 16 2003)

- Added capability to stuff additional data into an IpAddress. Use the CONFIG event to
  do this *after* channel creation but *before* connecting.
  IpAddress.getAdditionalData()/setAdditionalData() can be used to manage that data.
  This is useful e.g. when we want logical addresses rather than IpAddresses
  (bela Jan 14 2003)

- Updated concurrent.jar to version 1.3.2
  (bela Jan 14 2003)

- UDP: when multicasting a message, if loopback=true, we loopback a
  copy directly up the stack (but still multicast it). Once we then
  receive our own multicast, we discard it. This is supposed to solve
  some problems with Windows media sensing and disabling of interfaces
  (bela Jan 9 2003)

- TCPPING: automatically add self to initial_hosts lists if omitted
  (bela Dec 26 2002)

- Fixed bug in UNICAST/FRAG (causing merge protocol to fail
  sometimes): whenever we initiate a merge, we have to send a unicast
  message to a member not currently in the group. If we receive a view
  or get a retransmit() before we get the new view, the members will
  remove each other's connection table entry, and thus unicast
  messages to the other side will fail.
  We now use Util.determineLeftMembers() to correctly determine the
  left members between 2 views, and remove only those.
  (bela Dec 23 2002)

- Channel.connect() will now throw an exception if the protocol stack
  couldn't be initialized correctly (e.g. local address is null). Will
  wait for LOCAL_ADDR_TIMEOUT ms until local_addr is non-null (can be
  overridden by setting system property "local_addr.timeout").
  (bela Dec 23 2002)

- Implemented RpcDispatcher.callRemoteMethods() correctly: destination
  list is now correctly observed (used to be ignored before)
  (bela Dec 15 2002)

- Added persistence manager (org.jgroups.persistence)
  (whizkid_bay Dec 11 2002)

- Replaced START/START_OK events with start()
  Replaced STOP/STOP_OK and CLEANUP/CLEANUP_OK events with stop()
  (see description of Protocol.java for details)
  (bela Dec 10 2002)





Version 2.0.5
-------------

- Added Proxy1_4 to org.jgroups.util
  (bela Dec 5 2002)

- Added concurrent.jar to lib directory
  (bela Dec 4 2002)

- Made (almost) all threads daemon threads
  (bela Dec 2 2002)

- Added first version of TransactionalHashtable (no functionality yet)
  (bela Nov 24 2002)

- Added ReplicationManager, ReplicationReceiver and Xid to
  org.jgroups.blocks. This is the building block for transactional
  cache
  (bela Nov 20 2002)

- Changed signature of state transfer in Channel (returnState()) and
  MessageListener (getState(), setState()) from Object to
  byte[]. Reason: classloader issues, some clients need to do the
  serialization themselves (e.g. in different classloaders)
  (bela Nov 15 2002)




Version 2.0.4
-------------


- Fixed problem with client joining and immediately calling
  getState(): now pbcast.GMS immediately sends a TMP_VIEW so correct
  digest will be returned to client. This only happened when client's
  GET_STATE request reached coordinator *before* coord received its
  own VIEW_CHANGE multicast
  (bela Oct 28 2002)

- DistributedHashtable: moved MethodCall creation from remote method
  invocation (once/call !) to instance level (once/instance)
  (bela Oct 17 2002)

- Made TOTAL.Header public (needed by externalization)
  (bela Oct 15 2002)

- Made serialization of UdpHeader more efficient
  (bela Oct 11 2002)

- Moved connection reaper from Connection to ConnectionTable
  (bela Oct 10 2002)

- Added log4j-1.2.6.jar
  (bela Sept 24 2002)

- Version 2.0.4 created
  (bela Sept 21 2002)




Version 2.0.3
-------------

- Version 2.0.3 released
  (bela Sept 21 2002)

- Fixed bug in Queue which caused dangling tail on removeElement()
  (bela Sept 20 2002)

- Added adapter from Trace to log4j ($JG_ROOT/log4j)
  (bela Sept 17 2002)

- Fixed problem with hangs in RpcDispatcher.callRemoteMethods(): seems
  that Scheduler's thread pool of 10 was maxed out, causing hangs to
  to missing responses. Increased thread pool to 128.
  (bela Sept 16 2002)

- Added connection reaping in ConnectionTable/TCP. Use of properties
  reaper_interval and conn_expire_time determines the reap times.
  (bela Sept 16 2002)

- Removed SUSPECT events from TCP when ConnectionTable closes
  connection. Added FD to tcp.xml instead
  (bela Sept 15 2002)

- Made MessageDispatcher ride on top of PullPushAdapter in addition to
  Channel
  (bela Sept 13 2002)

- Version 2.0.3 created Aug 27 2002
  (bela Aug 27 2002)

- Upgraded Xerces jars from 2.0.0 to 2.1.0
  (bela Aug 31 2002)



Version 2.0.2
-------------

- Version 2.0.2 released Aug 26 2002
  (bela Aug 26 2002)

- Fixed bug in AckMcastSenderWindow/NAKACK: whenever we did a
  rebroadcastMessages(), and one of the members crashed in the
  meantime, the call waited forever. This was especially the case when
  we received a SUSPECT *before* the waitUntilAcksReceived() was
  called. Fix: we maintain a bounded list of suspects and - when there
  is a retransmit request to a member who is in that list - we remove
  that member from the retransmission table, causing
  waitUntilAcksReceived() to return. Additionally, one could set
  rebroadcast_timeout, so that waitUntilAcksReceived() always returns
  after some bounded time
  (bela Aug 22 2002)

- Fixed bug in SMACK (retransmission to dead member did not stop) and
  reduced number of JGroups-related threads from 9 to 4 in
  smack.xml.
  (bela Aug 22 2002)

- Fixed ClassCastException bug in PERF
  (bela Aug 22 2002)

- Added SMACK, FD_SIMPLE and smack.xml. SMACK (= Simple Multicast ACK
  protocol) allows for membership-less reliable (positive)
  acknowledgment-based multicasting
  (bela Aug 21 2002)

- Added VotingAdapter, TwoPhaseVotingAdapter as simple distributed
  agreement building blocks; LockManager interface and DistributedLockManager
  that uses TwoPhaseVotingAdapter to acquire and release locks.
  (rrokytskyy Aug 18 2002)

- Modified GroupRequest to use Transport instead of
  RequestCorrelator. Added test program GroupRequestPull
  (bela Aug 16 2002)

- Fixed bug in FD: num_tries was incremented twice in the same loop
  (bela Aug 15 2002)

- Fixed UDP.sendDummyPacket()
  (bela Aug 15 2002)

- Added capability to register multiple MessageListeners with
  PullPushAdapter
  (bela Aug 13 2002)

- Added org.jgroups.tests.McastDiscovery1_4
  (bela Aug 1 2002)

- Added disable_initial_coord property to both GMS and pbcast.GMS:
  when set to true, new members will not become coordinators on empty
  initial membership, but rather retry fetching the membership. Is set
  to false by default
  (bela Aug 1 2002)




Version 2.0.1
-------------

- Added unit tests to build.xml and fixed all unit test cases
  ( bela July 19 2002)

- Fixed bug in FD which caused no SHUN message to be sent
  (bela June 25)

- AckSenderWindow now is able to send messages itself, used by sliding
  window protocol (if enabled)
  (bela June 4 2002)

- Removed Trace from TimeScheduler (caused significant delays in
  task execution times)
  (bela June 3 2002)

- Added sliding window to AckSenderWindow (used in UNICAST)
  (bela June 1 2002)

- Replaced retransmission thread in AckSenderWindow with Retransmitter
  (also used by NakReceiverWindow)
  (bela May 29 2002)

- AckReceiverWindow and AckSenderWindow: replaced TreeSets with
  HasMaps. More efficient insertion of and access to elements
  (bela May 28 2002)

- New version of UnicastTest: measures performance of sending unicast
  messages from a sender to a receiver
  (bela May 26 2002)

- References of messages are now stored instead of copies (see
  protocols/DESIGN for details)
  (bela May 26 2002)

- Added AUTOCONF protocol: automatically configure network buffer
  and fragmentation sizes
  (bela May 14 2002)

- Added handling of null values to Marshaller
  (bela May 3 2002)

- Added bare-bones.xml for protocol stack consisting only of UDP and UNICAST
  (bela May 2 2002)

- Added use_packet_handler property to UDP
  (bela April 26 2002)

- Converted headers from Stack to HashMap
  (bela March 31 2002)

- Modifications to xmit algorithm in pbcast.NAKACK: large messages are
  now avoided
  (bela March 20 2002)

- Added JMS protocol and jms.jar (required)
  (rrokytskyy March 20 2002)

- Removed buggy loopback code from UNICAST and moved (correct) code to
  UDP. If 'loopback' is true in UDP, messages sent to self are not put
  on the network, but redirected up the stack immediately.
  (bela Feb 27 2002)

- Added new version of JUnit JAR file. Replaced all occurrences of
  assert() with assertTrue(). 'assert' is a keyword in JDK 1.4 and
  cannot be used any longer.
  (bela Feb 13 2001)


Version 2.0
-----------

- Added ReplicatedTree and ReplicatedTreeDemo
  (bela Feb 10 2002)

- Added SpeedTest
  (bela Feb 2002)

- Modified UDP to allow connect() followed by disconnect().
  (bela Dec 23 2001)

- Added BLOCK_SEND and UNBLOCK_SEND events: JChannel.send() will block
  after BLOCK_SEND and unblock after UNBLOCK_SEND event. Used by flow
  control protocols
  (bela Dec 18 2001)

- Fixed bug in Scheduler which caused the 491327 bug (hang)
  (bela Dec 14 2001)

- Fixed bug in pbcast.NAKACK which caused large state transfers to
  fail
  (bela Dec 13 2001)

- Checked initial version of JGroups 2.0 into the CVS
  (bela Dec 12 2001)

- Removed Timer and TimerTask (supported from JDK 1.3)
  (bela Dec 7 2001)

- Moved to new directory structure
- Adoption of SUN naming conventions (e.g. lowercase package names,
  method names starting with lowercase letter etc)
  (bela Dec 4 2001)



Version 1.0.1
-------------

- Added CAUSAL protocol
  (vlada Nov 16 2001)

- Added DeadlockTest
  (igeorg Nov 15 2001)





Version 1.0
-----------

- Updated some of the demos
  (bela Nov 1 2001)

- Fixed bug in pbcast.NAKACK: seqnos are not reset to 0 on
  SetDigest. This caused a sender to start at 0 after a SetDigest(),
  e.g. sender was at 10 and got a digest. Its next 10 messages would
  be discarded (already seen)
  (bela Nov 1 2001)

- FD_SOCK: fixed bug where lost SUSPECT can screw up membership. Now
  SUSPECT messages are transmitted reliably (retransmission if
  lost). Also removed Thread.interrupt() on thread that reads from
  InputStream (did not work correctly on some platforms, e.g. Windows
  and Linux JDK 1.3.1)
  (bela Oct 30 2001)

- Modified Draw demo: background is now correctly repainted (using
  double-buffering)
  (bela Oct 30 2001)

- Added magic cookie for connection sends/receives in
  ConnectionTable. Telnetting to the same port as the one the CT
  listens on will not have an effect, telnet will be closed by CT
  (bela Oct 26 2001)

- Removed potential deadlock between synchronized Send() and Receive()
  in ConnectionTable
  (bela Oct 26 2001)

- Fixed bug in ConnectionTable. Caused connection termination by
  Windows peers not to be detected.
  (bela Oct 26 2001)

- Preliminary version of merge protocol to
  pbcast.GMS/pbcast.CoordGmsImpl. Used with MERGE2 protocol.
  (bela Oct 25 2001)

- Fixed properties for Draw demo (see todo.lst)
  (bela Oct 24 2001)

- Added -no_channel flag to Draw demo. If set, Draw doesn't use a
  channel. Can be used to see whether the drawing works, independent
  of JGroups.
  (bela Oct 22 2001)

- Replaced {ViewId,Vector} in pbcast.GMS with View
  (bela Oct 22 2001)

- Ported Draw to Swing. Still has a redraw problem, because we don't
  call super.paintComponent() to preserve points. Possible solution:
  keep all pixels in an array, update the array on reception of
  DrawCommand and just draw the array in paintComponent()
  (bela Oct 17 2001)

- Added MERGE2 protocol. To be used in conjunction with pbcast/GMS
  (bela Oct 17 2001)

- Fixed bug in JGroups.JavaStack.Protocols.pbcast.NakAckHeader
  which caused externalization to be incorrect
  (bela Oct 12 2001)

- Fixed bug in FD_SOCK under Linux JDK 1.3.1 (used to work under JDK
  1.2.2): pinger thread could not be interrupted using
  Thread.interrupt(). Now (only if Linux) the ping socker is closed to
  interrupt the thread. Test whether Thread.interrupt() works to
  interrupt thread during InputStream.read() is
  JGroups.Tests.InterruptTest.
  Addition: this bug is known by SUN (4344135) and currently occurs
  only in the Linux JDKs 1.3.0 - 1.3.1. Should be fixed soon. Once
  this is done, we can revert to interrupt() only. This is better
  because it doesn't cause a SUSPECT event to be generated from
  closing the peer socket. This event will be discarded by
  VERIFY_SUSPECT, but it is still additional work. Also, if
  VERIFY_SUSPECT is missing we are in trouble.
  (bela Oct 10 2001)

- Removed is_linux from UDP.java
  (bela Oct 10 2001)

- Added GossipServer, GossipClient. There used to be a GossipServer up
  to version 0.9.4, but was subsequently merged with JRouter into
  Router. The reason for putting it back is that we just want
  gossiping functionality, not gossiping and routing functionality.
  (bela Oct 4 2001)

- Modified Common.Trace. Added a separate STDOUT/STDERR object for
  each level. Previously we had one singleton STDOUT and STDERR
  object. This caused multiple traces with different levels to
  overwrite each other's levels, e.g.
     default_output=WARN STDOUT
     trace0=Foo        DEBUG STDOUT
  would cause either WARN or DEBUG to be printed, but not both.
  (bela Sept 27 2001)

- Removed MessageProtocol.MessageProtocolHeader. Demux for msg/rpc traffic is
  done now whether RequestCorrelator.Header is present in the msg.
  (igeorg Aug 10 2001)

- Modified pbcast.STABLE. Now stable task terminates after certain
  idle time (see max_gossip_runs)
  (bela Aug 3 2001)

- Added SIZE layer, Measures the size of a message and prints it.
  (bela June 15 2001)

- Added Tests/Ping.java. Discovers initial members on any group
  (bela June 12 2001)

- Removed initial_mbrs_timeout from GMS. Now, we wait until
  FIND_INITIAL_MBRS returns (needs PING)
  (bela June 12 2001)

- Added FD_SOCK protocol
  (bela May 28 2001)

- Modified ConnectionTable to use 1 TCP connection instead of 2
  between peers
  (bela May 14 2001)

- Modified FD to use TimeScheduler instead of own thread
  (bela May 11 2001)

- Integrated changes made by igeorg to AckMcastSenderWindow and
  NakReceiverWindow. Modified pbcast.NAKACK to provide TimeScheduler
  to *Window classes
  (bela/igeorg May 9 2001)

- Added FLOWCONTROL layer
  (i-scream May 9 2001)

- Removed ProtocolStack.Timer (use ProtocolStack.TimeScheduler)
  (bela May 8 2001)

- Removed SortedList: replaced with java.util.TreeSet
  (affected classes: AckSenderWindow and AckReceiverWindow)
  (bela May 8 2001)



Version 0.9.9.9.1
-----------------

- Fixed severe bug in NAKACK
  (bela May 11 2001)


Version 0.9.9.9
---------------

- Changed if(trace) to if(Trace.trace)
  (bela May 4 2001)

- Added setting of receive and send buffer sizes for sockets in
  UDP. This has an effect on FRAG (see DESIGN for explanation)
  (bela April 24 2001)

- Made Address and Header Externalizable (changes to all subclasses of Header)
  (bela April 17 2001)

- Moved TOTAL.java --> TOTAL_OLD.java and TOTAL_JOHN.java --> TOTAL.java
- Added ./Tests/FragTest: uses ProtocolTester to test FRAG
  (bela April 13 2001)

- Added bind_addr and bind_port properties to UDP
  (bela April 6 2001)

- Modified NotificationBus: uses ucast to coordinator to fetch state
  instead of mcasting and then processing responses from each member
  (bela April 5 2001)

- Moved NotificationInfo --> NotificationBus.Info
  (bela April 5 2001)

- Reduced traffic generated by FD_PID. A new member used to mcast its
  query for PIDs and every member replied with its add:pid. Now, a new
  member asks the coordinator for the cache, updates its own cache and
  then mcasts its addr:pid, so other members can update their caches.
  (bela April 5 2001)

- Fixed ClientGmsImpl.DetermineCoord(): now a majority is needed to
  determine the coordinator from the responses. This would join a new
  member to the majority group in case of a split group (e.g. caused
  by a network partition)
  (bela April 4 2001)

- Added fix for "Last Message Dropped" bug in pbcast/STABLE and
  pbcast/NAKACK (see pbcast/DESIGN for details)
  (bela April 3 2001)

- Added Tests/DigestTest
  (bela April 3 2001)

- Added SetTrace() to Protocol. Allows a developer to dynamically turn
  tracing on/off in a running protocol stack
  (bela March 30 2001)

- Removed Util.ShortName(). IpAddress now by default prints short
  form. More efficient and avoids a lot of string creation.
  (bela March 29 2001)

- Modified Protocol.java: no the up_thread=<boolean> and
  down_thread=<boolean> can turn the up/down thread handler on/off
  (bela March 27 2001)

- Added pbcast/STABLE.java. Slight modification of regular STABLE
  protocol, makes it more efficient for local groups
  (bela March 26 2001)

- Added JavaStack/ProtocolTester.java
  (bela March 23 2001)

- Added pbcast/NAKACK protocol. This is similar to the regular NAKACK,
  but doesn't include FLUSH with resetting of sequence numbers. Upon
  joining, a new member will get the highest seqnos of all members
  (from the coordinator) and set its NakReceiverWindows accordingly.
  (bela March 23 2001)

- Modified pbcast GMS protocols: removed RpcProtocol. All GMS
  protocols now extend Protocol instead of RpcProtocol. This should
  make parallel startups of members faster
  (bela March 20 2001)

- Added ANT based build system
  (fhanik March 20 2001)

- Modified FD_PID (fixed bug in membership adjustment when most
  members die)
  (bela March 15 2001)

- Added Trace.init(): read tracing properties from file
  (bela March 9 2001)

- Added FD_PID: uses process IDs to monitor for process
  failure. For purely local groups.





Version 0.9.9.8
---------------

- Added FD_PID protocol. Failure detection based on process ids. Works
  only for local groups (all members are on the same host), and only
  on /proc based systems (e.g. Linux, Solaris)
  (bela March 2 2001)

- Fixed bug in PBCAST where singleton members did not garbage-collect
  their messages
  (bela Feb 15 2001)

- Added bounded buffer to PBCAST: now PBCAST-related messages (like
  gossips, etc (not multicast msgs !)) will be discarded if buffer is
  full. This is not a problem since gossips in later rounds can make
  up for the loss of previous gossips.

- Added simple FD protocol in ./pbcast. Requires PBCAST
  (bela Feb 14 2001)

- Fixed problems where multiple members (including coordinator) crash
  simultaneously (fixed in ./Protocols/ParticipantGmsImpl.java and
  ./Protocols/pbcast/ParticipantGmsImpl.java)
- Added probabilistic failure detection protocol (FD_PROB.java)
- Added VERIFY_SUSPECT protocol. Verifies SUSPECT messages generated
  by the FD layer before passing it on to the GMS layer. Does this by
  attempting to contact suspected member. If attempt is successful,
  event is discarded, otherwise (a timeout occurs), event is passed up
  the stack.
  (bela Feb 13 2001)

- Added new Header class: all headers have to extend this class and
  implement Size(). Replaced all occurrences of AddHeader(),
  PeekHeader() and RemoveHeader().
- Added additional Send() method to Channel, JChannel and EnsChannel
- Changed addresses: now we have an Address interface and the old
  JGroups.JavaStack.Address is now IpAddress
  (bela Feb 9 2001)

- Added Trace module in ./Common
  (jmenard Feb 9 2001)

- Added unit testing using JInit (./Tests)
  (bela Feb 8 2001)

- Added FD_SHUN protocol. Failure detection with shunning of members
  that are pinging but not in group
  (bela Feb 8 2001)

- Fixed bug which prevented UNICAST to work over TCP
  (bela Feb 7 2001)

- Added merging capability to GMS (not yet to pbcast.GMS)
- Added ViewID control to FD
- Correct a bug on STABLE
- GMS now reverts to Client on leave
- Removed interface JGroups.Comparable, substituted with java.lang.Comparable
  (i-scream Feb 6 2001)






Version 0.9.9.7
---------------

- TOTAL protocol added (TOTAL_JOHN)
  (John Georgiadis Feb 7 2001)

- Changes for partition-aware stack. Added simple merging protocol
  (Gianluca Collot Feb 7 2001)

- Suspected members now leave a group voluntarily. Re-join may be
  automated by setting option Channel.AUTO_RECONNECT and possibly
  AUTO_GETSTATE.

- Removed Header, new headers are just serializable objects that will
  be attached to a Message. This does not require code changes, but
  existing code using Header must be rewritten (tiny change). If a
  header implements interface Sizeable, FRAG will be able to figure
  out exactly how many bytes a message is (needed to decide whether to
  fragment or not). If Sizeable is not supported, a (preconfigured)
  estimated size will be taken.





Version 0.9.9.6
---------------

- Modified UDP and TCP to give performance numbers for PERF
  (Bela Feb 5 2001)

- Added PERF protocol (including PerfHeader): measure the performance
  of messages separately fro each protocol layer. Just add PERF on top
  of an existing stack (topmost protocol) and set trace=true.
- Fixed bugs in NakReceiverWindow (caused PERF to lose some of the
  performance numbers)

- Added LOOPBACK protocol. Can be used as bottom protocol. Simply
  swaps sender and receiver address and sends message back up the
  stack.

- Implemented exit and reconnect mechanism (pbcast/GMS, FD and
  JChannel). Modified FD to shun members from whom we receive a ping,
  but which are not members of the group anymore. This allows e.g. to
  CTRL-Z a member and later, after member was excluded, do a 'fg'. The
  member will reconnect to the group
  (bela Jan 31 2001)

- Added Open() to Channel: allows to reuse the same channel (re-connection)
  (bela Jan 30 2000)

- Renamed ConnectionPool to ConnectionTable

- TCP: don't send messages with dst == local_addr, but redirect to
  local queue

- NotificationBus: accept local messages





Version 0.9.9.5
---------------

- Added ./Demos/PartitionerTest, ./Demos/PartitionerTestFrame
- Added PARTITIONER protocol
  (Gianluca Collot <gianlucac@tin.it> Dec 12 2000)


Version 0.9.9.4
---------------

- Repackaged all demos: they are now in the JavaGroups.Demos package
- Removed deadlock detection in pbcast.GMS (not needed, as there are
  no receursive synchronous calls)
- Fixed bug in ReusableThread: now threads are released correctly
- Converted Thread.stop() in all files
- Fixed bug in Scheduler.java: added interrupt() to Stop(). We cannot
  just use queue.Close(), because the sched_thread might be in a
  different portion of the code (namely
  current_task.thread.wait()). Therefore we have to interrupt it as
  well to make sure it actually goes on to check its state (and
  whether it should terminate)
  (bela Dec 10 2000)


Version 0.9.9.3
---------------

- Added pbcast.GMS: GMS protocol without FLUSH
- Added pbcast.PBCAST protocol, implements Bimodal Multicast (Probabilistic Broadcast)
- Added STATE_TRANSFER protocol for PBCAST
  (bela Nov 29 2000)

- FD.java: removed FdHeaders from regular messages


Version 0.9.9.2
---------------

- Removed iBus
  (bela Nov 27 2000)


Version 0.9.9.1
---------------

- Added DistributedTree building block
  (bela Sept 12 2000)

- Added DistributedTreeDemo
  (bela Sept 12 2000)


Version 0.9.9
-------------

- Added LogicalLink, Link and WANPIPE classes. Theses can be used
  as bottom layer to have a TCP-based interconnect between 2
  machines. LogicalLink provides a logical WAN pipe, bundling multiple
  physical links into one. As long as 1 physical link is up, the
  logical link is up as well.
  (bela June 29 2000)

- Fixed bug in TCP/ConnectionTable: connections to failed members were
  still in the connection table, causing further requests to new
  incarnations on the same address to fail. Fix is two-fold: first
  'double-writes' are used to detect when peers have closed their side
  of the connection and second, before we write to a peer, we check
  whether it is in the group. If not, we close the socket to it and
  re-open it. This is double-dutch, but I want to be on the safe
  side.
  (bela July 3 2000)

- Link/LogicalLink work now.
  (bela July 7 2000)

- Added Debugger (./Debug). Provided hooks in Protocol.java to
  interact with Debugger.
  (bela July 22 2000)

- Modified Link: added interface for missing heartbeats and
  re-detecting them. Parameterized timeout and timeout_interval for
  each Link: AddLink() of LogicalLink. Also made initial socket
  connection *timed*: if an interface (local or remote machine) is
  down, we won't hang, but just continue, mark the interface as down
  and periodically try to create a connection to it.
  (bela July 25 2000)



Version 0.9.8
-------------

- Fixed memory leak in ConnectionPool. Replaced
  readObject()/writeObject() on socket by write(byte)/read(byte[]).


Version 0.9.7
-------------

- Added support for TCP as protocol (files TCP.java and TCPPING.java
  in .JavaStack/Protocols directory).
  (bela June 16 2000)

- Added class ConnectionPool (./JavaStack directory). Takes care of
  establishing and tearing down TCP connections on demand.
  (bela June 16 2000)



Version 0.9.6
-------------

- Modified some file to compile under JDK 1.2.2 (name collision with
  List)
  (bba Feb 9 2000)



Version 0.9.5
-------------

- Modified tunneling (files TUNNEL, PING, Router, RouterStub):
  GossipServer and JRouter are now merged into one:
  Router. GossipClient was replaced by RouterStub. Both PING and
  TUNNEL can now access the Router on the same port. Removed files
  JRouter, GossipClient.
  (bba Dec 10 1999)

- Fixed bug in Router: when a client reconnects under the same addr,
  but a different socket, we need to use the new address to send out
  messages (but the client still stays registered under its old
  address) (bba Dec 12 1999)

- Moved UdpHeader class out of UDP.java (will also be used by Router)
  (bba Dec 16 1999)



Version 0.9.4
-------------

- UNICAST: view change cannot remove all non-members: it may be the
  case that 2 new members P and Q want to join the group, P is
  admitted and Q has sent its JOIN request (causing a unicast
  connection to be created in UNICAST). Now the view change for P is
  sent, this removes the connections for those processes that are not
  members in the view (Q isn't yet official member). Therefore
  connections must be removed upon reception of SUSPECT rather than
  VIEW_CHANGE.
  (bba Dec 8 1999)

- Modified UNICAST: retransmit thread (AckSender window) has to be
  killed when STOP event is received. (bba Dec 8 1999)




Version 0.9.3
-------------

- New version of STABLE, based on GRPCs. Makes use of existing seqno
  information in NAKACK (using event GET_MSGS_RECEIVED)
  (bba Nov 19 1999)

- Renamed RpcGMS -> GMS

- Added SortedList (bba Nov 23 1999)

- Fixed bug in AckSenderWindow(): addition of new message to empty
  window did not check seqno, nor wake up retransmission thread
  (bba Nov 29 1999)

- Replaced SortedList.AddAscending(): more efficient version
  (bba Nov 29 1999)

- Modified AckSenderWindow (uses SortedList now)
  (bba Nov 29 1999)

- Modified demo apps: UNICAST layer has to be *above*
  NAKACK. Otherwise, NAKs and ACKs of the NAKACK layer are reliable
  too (causing way to many msgs, e.g. acking of ACKs themselves) !
  (bba Nov 30 1999)

- Removed PT2PT protocol layer, Pt2ptFsm, Pt2ptHeader: replaced by
  UNICAST layer (bba Nov 30 1999)

- Set deadlock detection default to true (in RequestCorrelator)
  (bba Dec 1 1999)

- Resending of unstable messages in NAKACK (REBROADCAST_MSGS): now an
  additional header (WRAPPED_MSG) is added which contains the same
  seqno as the original message, but also a field 'sender' to which
  the ACK has to be sent. This is so because the original sender of
  the message may be different from the coordinator who re-broadcasts
  the message. If ACKs were not sent to the re-broadcaster but
  instead to the original sender (who may have crashed), the
  coordinator would wait indefinitely for all ACKs.
  (bba Dec 2 1999)

- FLUSH protocol: when soliciting unstable message, so far only the
  highest seqnos for received message were returned. Now, each sender
  returns the highest seqno it sent, which may be higher than
  received. This ensures that no messages are missing when
  re-broadcasting the message digest as part of the FLUSH.
  (bba Dec 3 1999)







Version 0.9.2
-------------

- Modified STABLE's defaults: gossip has to be sent much less often;
  now gossip is sent every 100 msgs or 10 secs (which ever comes first).

- Modifications in FLUSH/NAKACK/RpcGMS: the flush protocol now does
  not return all unstable messages (as determined by the STABLE
  protocol), but just those that are determined by consensus (fewer
  messages have to be re-broadcast). The advantage is that STABLE does
  not need to emit STABLE events frequently. See file FLUSH.java for details.
  (bba Nov 17 1999)


Version 0.9.1
-------------
 (bba Nov 13 1999)
- Removed several superfluous fields from Message (e.g. id, rsp_id, oneway)
- Modified FRAG.java (depended on Message.GetId())
- Modified FragmentBuffer/DefragmentBuffer in Util.java


Version 0.9
-----------

- Adapted demos (bba Nov 12 1999)
- Removed the following classes:
    - Dispatcher
    - ChannelEntry
    - MethodInvoker
    - RemoteMethodCall
    - LazyEvaluator
    - RepeatedUnicast
    - SyncCall
    - MessageCorrelator
    - Command, AndCommand, OrCommand
    - Conf
    - SlidingWindow
    - Subject
    - Observer
    - Timer
    - MNAK, GMS, GmsImpl

  Therefore this version will break existing code that is based on
  these classes ! Either use a previous version, or rewrite the code
  using the new classes (e.g. RpcDispatcher for Dispatcher)

- Added ChannelListener (bba Nov 5 1999)




Version 0.8.6
-------------

- Modified LEAVE protocol: leaving member has to wait until it has
  received all messages of the current view before it may
  leave. Otherwise it may receive fewer messages in its last view than
  the other members, which would violate virtual synchrony.



Version 0.8.5
-------------

- Increased priority of drawing (receiver) thread in demo programs
  ./Demo/Draw.java, ./Demo/DrawIpMcast.java and
  ./Demo/DrawIpMcastX.java. The drawing thread seemed to starve on
  heavy drawing.

- Replaced implementation of Queue: the old version was based on
  Vector, which scale badly when used as FIFO queues; removal/addition
  of element causes all remaining elements to shift. New version uses
  linked list.

- Implemented interface Externalizable in Message.java, Header.java:
  huge performance improvement ! Header: in addition to the byte rep,
  we also store object directly (caching). Thus, Message.PeekHeader()
  does not always have to reconstruct an object from the byte rep !
  (bba Sep 3 1999)

- Implemented List and Stack: faster versions of their respective
  java.util.* companions (not based on Vector).

- Address.Compare(): now uses hashCode() between InetAddresses
  instead of string form -> performance improvement

- Modified NakAckWindow: replaced Vectors with Lists





Version 0.8.4
-------------

- Modified NAKACK layer: GET_STABLE_MSGS not needed, STABLE layer sends
  stability msgs periodically anyway
  (bba Aug 13 1999)



Version 0.8.3 Aug 13 1999 (bba)
-------------------------------
- Added MessageDispatcher: equivalent of MessageProtocol for
  applications. This required changes to Channel/JChannel (UpHandler)

- Added RpcDispatcher: equivalent of RpcProtocol for applications.


Version 0.8.2 Aug 10 1999 (bba)
-------------------------------

- Modified GroupRequest: not only suspect messages can cause an RMC to
  terminate, but also view changes (e.g. when an RMC is initiated
  after a suspect event has been received, but before the view change
  has been seen. Otherwise this would block forever).




Version 0.8.1 July 05 1999 (bba)
--------------------------------

- Added VIEW_ENFORCER: drops all messages until the new member is
  joined. Then acts as pass-through.




Version 0.8.0 July 02 1999 (bba)
--------------------------------

- Modified View/ViewId: View now contains ViewdId, moved ViewId to
  main directory




Version 0.7.6 June 25 1999 (bba)
--------------------------------

- Added PIGGYBACK layer: combines multiple messages into a single
  larger one
- Modified STATE_TRANSFER layer: now target(s) of ST can be given
  (modifications also in Channel, JChannel).


Version 0.7.5 June 18 1999 (bba)
--------------------------------

- Work on RpcGMS and FLUSH layers
- Added BLOCK processing to FLUSH



Version 0.7.4 June 17 1999 (bba)
--------------------------------

- Modified Channel/JChannel to be able to receive Events (applications may
  already send Events): this enables building blocks to communicate with
  protocol layers via Events.

- Modified NAKACK: ACK scheme independent from NAK, e.g. numbering of messages




Version 0.7.3 June 14 1999 (bba)
-------------------------------

- First draft of FLUSH protocol
- Added FD_RAND protocol layer: based on polling of randomly selected members




Version 0.7.2 June 9 1999 (bba)
-------------------------------

- Modified NakReceiverWindow: now ranges (e.g. [4-8]) in
  retransmissions are detected, this avoids having to send several
  retr msgs. Instead just 1 msg is sent for each range.

- Added AckMcastSenderWindow: used for lossless delivery to group
  members in NAKACK (ACKer)




Version 0.7.1 June 8 1999 (bba)
-------------------------------

- Modified several files to remove warnings from Jikes compiler
  (pedantic flag activated)



Version 0.7.0 May 27 1999 (bba)
-------------------------------

- Added total order protocol (TOTAL.java). Written by Manish Sambhu
  (mms21@cornell.edu)



Version 0.6.9 May 27 1999 (bba)
-------------------------------

- Created NAKACK protocol. NAK-based scheme that can be switched to
  using ACKs on the fly (and back again). Uses 2 classes to do so.

- Created NakReceiverWindow out of SlidingWindow (will be removed
  soon), thread is now created only when needed (ther might be many
  NakReceiverWindow instances !). Also, retransmitter thread does not
  check age of message any more, just presence or absence.



Version 0.6.8 May 20 1999 (bba)
------------------------------

- Modifications in RpcGMS: simpler join algorithm (client side /
  coordinator side)



Version 0.6.7 May 18 1999 (bba)
------------------------------

- Modified MethodLookupClos: better handling of primitive types
- Renamed subdirectory 'Tests' -> 'Demos' and 'tests' -> 'Tests'



Version 0.6.6 Apr 15 1999 (bba)
------------------------------

- Added classes Scheduler, ReusableThread, ThreadPool
- Modified RequestCorrelator to use Scheduler. Now, RequestCorrelator
  can be set to prioritize requests that would cause a deadlock.
- Added DEADLOCK layer. Uses RequestCorrelator with deadlock detection
  to enable 'recursive synchronous group RPCs'.



Version 0.6.5 Apr 13 1999 (bba)
------------------------------

- Added requirements checking. Added 4 methods RequiredUpServices(),
  RequiredDownServices(), ProvidedUpServices() and
  ProvidedDownServices() to Protocol.java. Configurator now checks for
  each protocol layer whether all its requirements on other layers are met.



Version 0.6.4 Apr 12 1999 (bba)
------------------------------

- Modified MembershipListener: added methods for getting/setting state
- Modified PullPushAdapter: dito
- Added JGroups/Tests/TotalOrderPull.java demoing
  PullPushAdapter-based state transfer


Version 0.6.3 Apr 9 1999 (bba)
------------------------------

- Added DELAY protocol. Will delay all outgoing or incoming messages
  by n milliseconds, where n can be determined by the user


Version 0.6.2 Apr 9 1999 (bba)
------------------------------

- Bug fix in GossipServer
- Changes to GossipClient: will only register when both local address
  and group address are known



Version 0.6.1 Apr 1 1999 (bba)
------------------------------

- Added state transfer interface to Channel; Channels stay
  backwards-compatible to existing applications
- Added protocol STATE_TRANSFER
- Updated documentation: STATE_TRANSFER, Channel interface


Version 0.6.0 Mar 12 1999 (bba)
-------------------------------

- Added MessageProtocol and RpcProtocol (subclasses of
  Protocol). These can be used when peer communication between the
  same layers in different stacks is required, e.g. for GMS. Both
  subclasses implement synchronous group messages/method calls.

- Created new GMS layer: RpcGMS, RpcCoordGmsImpl,
  RpcParticipantGmsImpl and RpcClientGmsImpl. Uses state pattern
  (client, coord, participant). Also makes use of RpcProtocol.

- Modified PING: removed merge functionality. Added merge
  functionality to separate layer (MERGE).

- Created initial (simplistic) version of MERGE protocol. Only
  discovers out-of-group members, and sends up MERGE event. MERGE is
  not yet handled by RpcGMS.



Version 0.5.9 Feb 26 1999 (bba)
-------------------------------

- Modified SUSPECT handling in GMS: when FD suspects a member, it
  mcasts a SUSPECT message to all members. At each member, this will
  generate a SUSPECT message, which is sent up the stack, starting
  from the FD layer. The GMS layer then checks whether the coordinator
  itself is suspected. If this is the case, the members are sorted and
  a new coordinator is chosen deterministically by each member. The
  new coordinator then mcasts a new view. If the coordinator itself is
  not suspected, it removes the faulty member from its local view and
  installs a new view. The modified algorithms removes 1 round of
  multicasting plus a redundant check on who the coordinator is.



Version 0.5.8 Feb 5 1999 (bba)
------------------------------

- Changed Ctor, Close, Connect and Disconnect in JChannel (only
  implementation): when disconnecting, a channel is not supposed to
  receive any more messages (this was the case). Also, a process has
  to acquire a new local address when re-joining (this was not the
  case).



Version 0.5.7 Feb 1 1999 (bba)
------------------------------

- Added protocol UNI: uniform failure-atomic group mcast
- Added protocol PING: get initial members and periodical sending of
  i-am-alive message (used to overcome partitions)
- Changed GMS/GmsImpl to make use of PING




Version 0.5.6 Jan 19 1999 (bba)
-------------------------------

- Added ./Algorithms/GroupRequest, ./Algorithms/AndCommand
- Added RequestCorrelator
- Moved JavaStack/Event.java to ./Event.java. Internal channel
  implementations use now Event instead of QueueItem (code reduction)




Version 0.5.5 Jan 14 1999 (bba)
-------------------------------

- Renamed ./algorithms to ./Algorithms



Version 0.5.4 Jan 13 1999 (bba)
-------------------------------

- Back to square 1: dropped unicast mode altogether, essentially back
  to version 0.5.2 !



Version 0.5.3 Jan 4 1999 (bba)
-------------------------------

- Changed unicast interface. Renamed Connect() to Join() and
  Disconnect() to Leave().
- A channel is now operational for unicast messages after the
  Channel() constructor has been called. Only when Join() is called
  will it be able to send/receive group messages.
- The changes to the interfaces/classes require application programs
  usingt version 0.5.2 to be modified and recompiled.



Version 0.5.2 Dec 29 1998 (bba)
-------------------------------

- Modifications in the event sequence when creating a channel and when
  connecting to it (START, STARYT_OK, CONNECT, CONNECT_OK, DISCONNECT,
  DISCONNECT_OK, STOP, STOP_OK)
- Got rid of LowLevelCommunication interface
- Local address is set by SET_LOCAL_ADDRESS (sent up by lowest layer)
- Peer address is set by CONNECT(peer_addr)



Version 0.5.1 Dec 22 1998 (bba)
--------------------------------

- Fairly extensive changes to the Channel interface: changed
  ChannelFactory, Connect() and Receive(). Receive() now returns
  Objects rather than Message. These might be Messages, Views or
  Blocks. Channel is now pure pull-oriented. Removed Cast() and
  several Send() methods.



Version 0.5 Dec 21 1998 (bba)
-----------------------------

- Added new protocol PT2PT: TCP-like reliable point to point connection
- Changed Channel interface: separation of channel creation, Connect(),
  removal of Destroy() -> existing programs will need to be modified
  to use the new classes

- The changes to the interfaces/classes require application programs
  written for version 0.4 to be modified and recompiled.



Version 0.4 Dec 10 1998 (bba)
-----------------------------

- Added several new protocols (MACK, MNAK)
- Fixed IP MCAST bug (UDP.java)
- Fixed gossip bug (UDP.java)


Version 0.3 Oct 1998
--------------------

- First version (0.3) released (bba)
