Paulo Motta created CASSANDRA-11559: ---------------------------------------
Summary: Enhance node representation Key: CASSANDRA-11559 URL: https://issues.apache.org/jira/browse/CASSANDRA-11559 Project: Cassandra Issue Type: Sub-task Components: Distributed Metadata Reporter: Paulo Motta Priority: Minor 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}} class, 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. -- This message was sent by Atlassian JIRA (v6.3.4#6332)