Release Notes JGroups 2.7
=========================
Version: $Id: ReleaseNotes-2.7.txt,v 1.6 2008/11/13 08:18:41 belaban Exp $
Author: Bela Ban
JGroups 2.7 is still API-backwards compatible with previous versions
(down to 2.2.7).
This is a big release, with close to 200 JIRA issues fixed and major new
functionality.
Below is a summary (with links to the detailed description) of the major
new features.
Features
========
Shared transport
----------------
[https://jira.jboss.org/jira/browse/JGRP-631 ]
Multiple channels can now share the same transport (and still have
different stack configurations on top). This
replaces the Multiplexer, which is not supported any longer as of 2.7.
See
http://www.jgroups.org/javagroupsnew/docs/manual/html/user-advanced.html#d0e2204
for details.
Converted unit tests from JUnit to TestNG
------------------------------
[ https://jira.jboss.org/jira/browse/JGRP-410 ]
This cut down the time to run all tests from 2.5 hours to 15 minutes !
Use of annotations to provide JMX management information
--------------------------------------------------------
[ https://jira.jboss.org/jira/browse/JGRP-723 ]
[ https://jira.jboss.org/jira/browse/JGRP-408 ]
By annotating a protocol as @ManagedResource, an attribute as
@ManagedAttribute or an operation as
@ManagedOperation, we can simply expose JMX management information.
This change allowed us to remove the parallel JMX class hierarchy
(org.jgroups.jmx package), and dramatically
reduced the effort needed to expose protocols via JMX.
Credits for the initial implementation go to Chris Mills.
Use of annotations to set properties
------------------------------------
[ https://jira.jboss.org/jira/browse/JGRP-765 ]
Instead of implementing setProperties() in each protocol, parsing the
input string and converting it to a variable, we
now use the @Property annoation to mark an attribute or getter/setter
method. This way, input strings are
automatically mapped to the corresponding fields in a protocol.
This allowed us to remove a lot of boilerplate code.
In addition, we now generate the protocol list
documentation
( http://www.jgroups.org/javagroupsnew/docs/manual/html/protlist.html )
from the @Property annotations.
The benefit is that we need to maintain the documentation only in one
place (the code) instead of two, and we now
have a complete documentation of all protocol properties.
Ability to replace thread pools with custom thread pools
--------------------------------------------------------
[ https://jira.jboss.org/jira/browse/JGRP-632 ]
This allows (for example) system integrators to use the thread pools
they already have in their applications. It
also gives greater control over thread pool management, e.g. a provider
can make all threads in a pool daemon threads.
Allow flushing of a cluster subset
----------------------------------
[ https://jira.jboss.org/jira/browse/JGRP-661 ]
Rather than flushing the entire cluster, we can now provide a list of
target members for the FLUSH. This is needed
for example for buddy replication in JBossCache.
Performance improvements
------------------------
[ https://jira.jboss.org/jira/browse/JGRP-846 ]
[ https://jira.jboss.org/jira/browse/JGRP-847 ]
[ https://jira.jboss.org/jira/browse/JGRP-805 ]
[ https://jira.jboss.org/jira/browse/JGRP-806 ]
[ https://jira.jboss.org/jira/browse/JGRP-829 ]
[ https://jira.jboss.org/jira/browse/JGRP-813 ]
http://www.jgroups.org/javagroupsnew/docs/performance.html shows that we
can get 150MB/sec/node on a 4 node
cluster connected to a 1GB switch with udp.xml (IP multicasting) on 2.7.
This means we get an aggregate cluster
throughput of 600MB/sec !
2.7 is ca 30-40% faster than 2.6 !
FC: max block times depending on message size
---------------------------------------------
[ https://jira.jboss.org/jira/browse/JGRP-804 ]
We can now set the max time to block for a given message, e.g. block
10ms max for messages up to 10K, 100ms for messages
up to 1MB, 500ms for messages up to 10MB and 2000ms for messages larger
than that.
This means that - regardless of missing credits - messages will be sent
after the deadline (max block time) has
elapsed. This adds more predictability as to when messages are sent, but
it also can lead to OOMEs if those values
are too low, defying the purpose of flow control.
UNICAST/NAKACK: eager lock release
----------------------------------
[ https://jira.jboss.org/jira/browse/JGRP-656 ]
Better performance in cases where the receiver of a message uses the
calling thread to send a message down the stack.
In this case, the lock will be release as soon as send() is called,
releasing the lock and allowing threads with
messages from the same sender to proceed.
GossipRouter / GossipClient: make sockets non-blocking
------------------------------------------------------
[ https://jira.jboss.org/jira/browse/JGRP-702 ]
[ https://jira.jboss.org/jira/browse/JGRP-852 ]
Can now be configured to use non blocking socket close, connect and
read/write
Paralellize discovery phase
---------------------------
[ https://jira.jboss.org/jira/browse/JGRP-375 ]
Pluggable Probe
---------------
[ https://jira.jboss.org/jira/browse/JGRP-832 ]
This allows for users to write their own plugins which respond to a ping
(a probe) and return (for example)
application specific information.
Details are at http://www.jboss.org/community/docs/DOC-11689 (towards
the bottom of the page).
Bug fixes
=========
FD: nodes would not get suspected if traffic from different nodes was
received
------------------------------------------------------------------------------
[ https://jira.jboss.org/jira/browse/JGRP-746 ]
Traffic from *any* node was counted as a heartbeat. This is incorrect as
only traffic from the pinged member
should count as heartbeat.
FRAG/FRAG2: fragment list is not cleared for crashed member (can lead to
memory leak)
-------------------------------------------------------------------------------------
[ https://jira.jboss.org/jira/browse/JGRP-800 ]
NAKACK: regular message not delivered (in some cases) until new message
arrives
-------------------------------------------------------------------------------
[ https://jira.jboss.org/jira/browse/JGRP-781 ]
STATE_TRANSFER: state transfer broken for large states
------------------------------------------------------
[ https://jira.jboss.org/jira/browse/JGRP-774 ]
Concurrent connect of multiple channels with shared transport fails
-------------------------------------------------------------------
[ https://jira.jboss.org/jira/browse/JGRP-849 ]
Eliminate Linux cross-talk in MPING
-----------------------------------
[ https://jira.jboss.org/jira/browse/JGRP-836 ]
FLUSH fixes
-----------
[ https://jira.jboss.org/jira/browse/JGRP-756 ]
[ https://jira.jboss.org/jira/browse/JGRP-759 ]
[ https://jira.jboss.org/jira/browse/JGRP-700 ]
[ https://jira.jboss.org/jira/browse/JGRP-622 ]
FD_SOCK: fixes
--------------
[ https://jira.jboss.org/jira/browse/JGRP-841 ]
[ https://jira.jboss.org/jira/browse/JGRP-845 ]
[ https://jira.jboss.org/jira/browse/JGRP-794 ]
[ https://jira.jboss.org/jira/browse/JGRP-745 ]
NAKACK: merging of digests is incorrect
---------------------------------------
[ https://jira.jboss.org/jira/browse/JGRP-699 ]
Manual
------
The manual is online at
http://www.jgroups.org/javagroupsnew/docs/manual/html/index.html
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
Nov 2008