Details
-
Sub-task
-
Status: Open
-
Low
-
Resolution: Unresolved
-
None
-
None
Description
We currently represent nodes as InetAddress objects on TokenMetadata, what causes difficulties when replacing a node with the same address (see CASSANDRA-8523 and CASSANDRA-9244).
Since CASSANDRA-4120 we index hosts by UUID in gossip, so I think it's time to move that representation to TokenMetadata.
I propose representing nodes as InetAddress, UUID pairs on TokenMetadata, encapsulated in a VirtualNode interface, so it will backward compatible with the current representation, while still allowing us to enhance it in the future with additional metadata (and improved vnode handling) if needed.
This change will probably affect interfaces of internal classes like TokenMetadata and AbstractReplicationStrategy, so I'd like to hear from integrators and other developers if it's possible to change these without major hassle or if we need to wait until 4.0.
Besides updating TokenMetadata and AbstractReplicationStrategy (and subclasses), we will also need to replace all InetAddress uses with VirtualNode.getEndpoint() calls on StorageService and related classes and tests. We would probably already be able to replace some TokenMetadata.getHostId(InetAddress endpoint) calls with VirtualNode.getHostId().
While we will still be dealing with InetAddress on StorageService in this initial stage, in the future I think we should pass VirtualNode instances around and only translate from VirtualNode to InetAddress in the network layer.
Public interfaces like IEndpointSnitch will not be affected by this.
Attachments
Attachments
Issue Links
- is related to
-
CASSANDRA-15823 Support for networking via identity instead of IP
- Triage Needed
- is required by
-
CASSANDRA-9244 replace_address is not topology-aware
- Open
-
CASSANDRA-12344 Forward writes to replacement node with same address during replace
- Open