History List ============ Revision: $Id: history.txt,v 1.178 2005/12/29 13:09:50 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) 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.protocols.pbcast.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)