

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

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


bba = Bela Ban, bba@cs.cornell.edu





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)



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 JavaGroups/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)
