SCOPE: concurrent delivery of messages from the same sender
By default, messages from a sender P are delivered in the (FIFO) order in which P sent them (ignoring OOB messages for now). However, sometimes it would be beneficial to deliver unrelated messages concurrently, e.g. modifications sent by P for different HTTP sessions.
SCOPE is a new protocol, which allows a developer to define a scope for a message, and that scope is then used to deliver messages from P concurrently.
See http://www.jgroups.org/manual/html/user-advanced.html#Scopes for details.
Use of factory to create sockets
There's now a method Protocol.setSocketFactory(SocketFactory) which allows to set a socket factory, used to create and close datagram and TCP (client and server) sockets. The default implementation keeps track of open sockets, so
dumps a list of open sockets.
UNICAST2: experimental version of UNICAST based on negative acks
By not sending acks for received messages, we can cut down on the number of acks. UNICAST2 is ca 20-30% faster than UNICAST as a result. Needs more testing though, currently UNICAST2 is experimental.
Certain IPv4 addresses should be allowed in an IPv6 stack
They will be converted into IPv6 mapped IPv4 addresses. This relaxes the (too restrictive) IP address conformance testing somewhat, and allows for more configurations to actually start the stack and not fail with an exception.
Multiple components using the same channel
This is a new light weight version of the (old and dreaded !) Multiplexer, which allows for sharing of channels between components, such as for example HAPartition and Infinispan.
*** Only to be used by experts ! ***
MERGE2: fast merge
Fast merge in case where we receive messages from a member which is not part of our group, but has the same group name.
RpcDispatcher / MessageDispatcher: add exclusion list
If an RPC needs to be sent to all nodes in a cluster except one node (e.g. the sender itself), then we can simply exclude the sender. This is done using
RequestOptions.setExclusionList(Address ... xcluded_mbrs).
This is simpler than having to create the full list, and remove the sender.
Ability to use keywords instead of IP addresses
Whenever IP addresses (symbolic or dotted-decimal notation) are used, we can now use a keyword instead. Currently, the keywords are "GLOBAL" (public IP address), "SITE_LOCAL" (private IP address), "LINK_LOCAL" (link local), "LOOPBACK" (a loopback address) and "NON_LOOPBACK" (any but a loopback address).
This is useful in cloud environments where IP address may not be known beforehand.
Example: java -Djgroups.bind_addr=SITE_LOCAL
GossipRouter: re-introduce pinging to detect crashed clients
When clients are terminated without closing of sockets (e.g. in virtualized environments), they'd cause their
entries to not be removed in GossipRouter. This was changed by (re-)introducing pinging.
Feeback is appreciated via the usual channels (mailing list, IRC) !