Hi everyone,
On behalf of the JGroups team, i'm pleased to announce that JGroups
2.6.0 CR1 has been released!
The binary and source distribution can be downloaded from
http://sourceforge.net/project/showfiles.php?group_id=6081. The release
notes and change log are below.
Enjoy !
Richard Achmatowicz
Release Notes JGroups 2.6
=========================
Version: $Id: ReleaseNotes-2.6.txt,v 1.2 2007/09/20 08:26:57 belaban Exp $
Author: Bela Ban
JGroups 2.6 is still API-backwards compatible with previous versions
(down to 2.2.5).
Below is a summary (with links to the detailed description) of the major
new features.
Join and state transfer
-----------------------
[
http://jira.jboss.com/jira/browse/JGRP-236]
We added another connect() method in JChannel, which combines joining a
cluster and fetching the state from the
coordinator into one method. This is especially useful when we have
FLUSH in the stack; thus we only have to use 1 rather
than 2 (1 for JOIN, 1 for state transfer) flush phases.
Improved ReplicatedHashMap
--------------------------
[
http://jira.jboss.com/jira/browse/JGRP-581]
ReplicatedHashMap was converted to use generics, and
java.util.concurrent.ConcurrentHashMap. It therefore supports 4 new
methods putIfAbsent(), remove() and the two replace() methods.
Developers can choose whether to use asynchronous or synchronous
replication, and also pick the timeout for synchronous
calls.
This class supercedes ReplicatedHashtable and DistributedHashtable,
which will be removed in version 3.0.
Reincarnation issue
-------------------
[
http://jira.jboss.com/jira/browse/JGRP-130]
Using the GMS.reject_join_from_existing_member (default=false) property,
we can reject a JOIN request from a reincarnated
member X who crashed, but has not yet been removed (e.g. due to a high
timeout in FD). The member would have to retry,
and would only succeed when (the old) X has been excluded from the cluster.
For shunned members who use AUTO_RECONNECT, we loop until this is true
[
http://jira.jboss.com/jira/browse/JGRP-584].
New transport property 'bind_interface'
---------------------------------------
[
http://jira.jboss.com/jira/browse/JGRP-579]
This can be used when multipler network interfaces have the *same* IP
address, to define the interface to get used, e.g
bind_addr="192.168.2.5" bind_interface="eth1". Useful e.g. with IP
Bonding on Linux.
Unicast bundling can be disabled at the transport level
-------------------------------------------------------
[
http://jira.jboss.com/jira/browse/JGRP-429]
When dealing with latency sensitive applications, we may want to disable
message bundling for *responses* (but not for
requests, as requests might carry large payloads). This can be done via
the enable_unicast_bundling (default=true)
property.
RpcDispatcher can now filter responses as they arrive
------------------------------------------------------
[
http://jira.jboss.com/jira/browse/JGRP-518]
There's a new callRemoteMethods() method taking an RspFilter, which is
called whenever a response has been received,
allowing a request to return based on a condition (e.g. the first non
null return value) before all responses
have been received.
Manual
------
The manual is online at
http://www.jgroups.org/javagroupsnew/docs/manual/html/index.html
Performance
-----------
Links to performance tuning:
http://wiki.jboss.org/wiki/Wiki.jsp?page=PerfTuning
Bug fixes
---------
AUTH: bug in 2.5 which caused AUTH to fail on second and subsequent JOIN
attempts *if* the first
attempt was rejected by AUTH.
[
http://jira.jboss.com/jira/browse/JGRP-577]
VIEW_SYNC: there was a regression in 2.5, which causes VIEW_SYNC
messages to get dropped.
Note that this bug didn't occur in 2.4.x.
[
http://jira.jboss.com/jira/browse/JGRP-586]
X.509 token not marshalled correctly. This affects ENCRYPT.
[
http://jira.jboss.com/jira/browse/JGRP-576]
The complete list of features and bug fixes can be found at
http://jira.jboss.com/jira/browse/JGRP.
Bela Ban, Kreuzlingen, Switzerland
Vladimir Blagojevic, Toronto, Canada
Sept 2007
------------------------------------------------------------------------
*Changes:*
Release Notes - JGroups - Version 2.6
** Bug
* [JGRP-168] - RpcDispatcher fails after shun
* [JGRP-347] - TCP bundling with FLUSH not working
* [JGRP-364] - When using TCP_NIO, starting two nodes at the same
time causes one of the nodes not to join group
* [JGRP-384] - DistributedLockManager.unlock() throws an exception if
one of the group members terminates.
* [JGRP-446] - When using an extremely simple protocol stack the app
will respond with a NullPointerException.
* [JGRP-491] - Multiplexer should execute getState for all registered
MuxChannel under one FLUSH phase
* [JGRP-524] - FLUSH and merge: flush doesn't wrap entire merge process
* [JGRP-537] - SMACK is broken
* [JGRP-549] - ConnectionTable: spurious Connection instances on
concurrent connects
* [JGRP-560] - Message greater than 16286 bytes is not received on MaxOS
* [JGRP-561] - MacOSX: tos value > 0 causes an exception
* [JGRP-562] - Message.setObject() and Message.getObject() hide
exceptions thrown during serialization/deserialization
* [JGRP-564] - Unicast from within viewAccepted() callback throws
exception in UNICAST
* [JGRP-571] - all threads are daemon
* [JGRP-573] - Draw blocks with FLUSH (join & state transfer)
* [JGRP-574] - UnicastChannelTest doesn't work
* [JGRP-575] - Join and state transfer violates virtual synchrony
* [JGRP-576] - X509Token cannot be created
* [JGRP-577] - AUTH: join rejection won't be received because UNICAST
drops it
* [JGRP-578] - It is possible to create a deadlock when trying to
close a channel which is not yet connected
* [JGRP-580] - Possible to get the channel into an incorrect and/or
inconsistent state
* [JGRP-582] - Timer task throws exception on task submission if task
has already been cancelled
* [JGRP-586] - VIEW_SYNC: GMS doesn't accept correct view because of
incorrect header
* [JGRP-591] - IpAddress.hashCode() not unique per ip/port
* [JGRP-595] - Remove superfluous multiplexer warning - "Multiplexer:
- service id-1 not currently running, discarding message"
* [JGRP-599] - Exception in thread "main" java.lang.OutOfMemoryError:
Java heap space running with a Multiplex channel
* [JGRP-603] - FLUSH: problems with TCP and concurrent startup/shutdowns
* [JGRP-607] - SEQUENCER: incorrect ordering on concurrent sends
* [JGRP-610] - Problems with large return value and FC
* [JGRP-611] - MergeTask GMS ConcurrentModificationException
** Feature Request
* [JGRP-130] - Problems with reincarnation
* [JGRP-189] - Validate that IP Bonding is supported
* [JGRP-203] - Primary Partiton approach for handling of partitions
* [JGRP-236] - Combine join and state transfer
* [JGRP-413] - Replace separate threads with timer tasks
* [JGRP-451] - Disabling a network interface and subsequent
re-enabling it (on Windows) doesn't merge
* [JGRP-504] - Support direct injection of MBeanServer into
JChannelFactory
* [JGRP-510] - NAKACK: adjust retransmission times based on statistics
* [JGRP-518] - RpcDispatcher: filter for accepting incoming responses
* [JGRP-519] - Replace BoundedList/List with java.util(.concurrent)
class
* [JGRP-570] - Complete thread naming for all channel threads
* [JGRP-579] - New property: bind_interface
* [JGRP-581] - Convert ReplicatedMap to ConcurrentHashMap from HashMap
* [JGRP-583] - Create JChannel based on XML file and stack name
(similar to MuxChannel creation)
* [JGRP-585] - FD_SOCK: make fetching of cache asynchronous
* [JGRP-588] - Possible to create a denial of service
* [JGRP-608] - FLUSH not safe in simultaneous flush situation
** Task
* [JGRP-337] - Make STOP_FLUSH phase in FLUSH asynchronous
* [JGRP-339] - Remove thread for handling of merge views in
Multiplexer once we have out-of-band messages
* [JGRP-394] - Performance enhancements
* [JGRP-414] - Backport of 2.5 to run on JDK 1.4
* [JGRP-420] - Convert Event.FIND_INITIAL_MBRS to use concurrent stack
* [JGRP-429] - Optionally disable message bundling for unicast messages
* [JGRP-441] - TP.loopback might cause some issues with incorrectly
purged messages in STABLE
* [JGRP-462] - NAKACK: remove bundling for retransmitted messages
* [JGRP-483] - Convert jgroups.sh tro run on cygwin and native UNIX
environment
* [JGRP-487] - Rewrite Retransmitter
* [JGRP-528] - NAKACK: spurious retransmission requests *
[JGRP-530] - Demo
* [JGRP-554] - GroupRequest should use concurrency friendly JDK 5
collections
* [JGRP-558] - Beef up JGroups documentation
* [JGRP-559] - JGroups tutorial
* [JGRP-566] - Write article about FLUSH and Multiplexer
* [JGRP-569] - Ignore bind address for TCP server sockets
* [JGRP-584] - Reconnection with TCP might not work well
* [JGRP-590] - FC: messages > max_credits will block forever
* [JGRP-596] - Document JOIN&state transfer, for JChannel and in the
Multiplexer
* [JGRP-597] - Allow generic view payload
* [JGRP-598] - Simplify FLUSH
* [JGRP-600] - Investigate Multiplexer locking scopes
* [JGRP-602] - Update FLUSH diagrams for joining and for state transfer
* [JGRP-609] - Javadoc JChannelFactory