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)