]
Bela Ban commented on JGRP-2080:
--------------------------------
RELAY2 (used for data center replication by Infinispan) installs its own generator, and
that's a big use case for us.
New Address which contains IP address and port
----------------------------------------------
Key: JGRP-2080
URL:
https://issues.jboss.org/browse/JGRP-2080
Project: JGroups
Issue Type: Feature Request
Reporter: Bela Ban
Assignee: Bela Ban
Fix For: 4.0
Currently, UUIDs are mapped to IpAddresses (InetAddress and port). The mappings are
maintained in logical_address_cache in TP and populated via the discovery protocol.
If we encoded the IP address and port (6 bytes in IPv4, 18 bytes in IPv6) directly into
the UUID, we would not have to maintain this cache anymore. At least not for IpAddresses,
but still for UUID/logical_name mappings.
An {{IPv4UUID}} (credits to Neal Dillman) would look like this:
* 4 bytes: IPv4 address
* 2 bytes: port
* 12 bytes: random data (rest of the UUID)
When joining a cluster, the joiner would only need to discover the address of the
coordinator and send a JOIN-REQ to it. The JOIN-RSP would contain the view, which contains
all members, so the joiner has all addresses. Plus, the coord would also send a
VIEW-CHANGE to all existing members, so they have the address of the new member, too.
When sending a unicast, the transport could simply extract the IpAddress from the first 6
bytes of the IPv4UUID to know the destination address. For multicasts, UDP is not an
issue, and TCP would simply iterate over the current view and send the message to each
member separately.
An IPv6UUID would need more than 16 bytes as it already needs 18 bytes for the address
and the port. We might add another 6 bytes for uniqueness, to have a nice padding at 24
bytes.