[
https://issues.apache.org/jira/browse/CASSANDRA-12485?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15517323#comment-15517323
]
Christopher Licata edited comment on CASSANDRA-12485 at 9/23/16 7:21 PM:
--------------------------------------------------------------------------
{quote}
You should add a new check on {{StorageService.checkForEndpointCollision}},
similar to the {{isSafeForStartup}} ... \[it\] should check if there are live
nodes with the same tokens as the new node and prevent bootstrap in this case.
{quote}
So it seems as though, for the check in
{{StorageService.checkForEndpointCollision}}, the new
{{containsTokensOfLiveOwners}} \(still working on the name\) method in
{{Gossiper}} should simply grab the current node's token list with
{{StorageService.getTokens()}} and then iterate through the {{liveEndpoints}}
and do something like a {{Collections.disjoint}} to see if there are any common
elements in any of the lists.
Does that seem correct?
was (Author: cmlicata):
{quote}
You should add a new check on {{StorageService.checkForEndpointCollision}},
similar to the {{isSafeForStartup}} ... \[it\] should check if there are live
nodes with the same tokens as the new node and prevent bootstrap in this case.
{quote}
So it seems as though the new {{containsTokensOfLiveOwners}} \(still working on
the name\) method in {{Gossiper}} should simply grab the current node's token
list with {{StorageService.getTokens()}} and then iterate through the
{{liveEndpoints}} and do something like a {{Collections.disjoint}} to see if
there are any common elements in any of the lists.
Does that seem correct?
> Always require replace_address to replace existing token
> --------------------------------------------------------
>
> Key: CASSANDRA-12485
> URL: https://issues.apache.org/jira/browse/CASSANDRA-12485
> Project: Cassandra
> Issue Type: Improvement
> Components: Distributed Metadata
> Reporter: Paulo Motta
> Priority: Minor
> Labels: lhf
>
> CASSANDRA-10134 prevented replace an existing node unless
> {{\-Dcassandra.replace_address}} or
> {{\-Dcassandra.allow_unsafe_replace=true}} is specified.
> We should extend this behavior to tokens, preventing a node from joining the
> ring if another node with the same token already existing in the ring, unless
> {{\-Dcassandra.replace_address}} or
> {{\-Dcassandra.allow_unsafe_replace=true}} is specified in order to avoid
> catastrophic scenarios.
> One scenario where this can easily happen is if you replace a node with
> another node with a different IP, and after some time you restart the
> original node by mistake. The original node will then take over the tokens of
> the replaced node (since it has a newer gossip generation).
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)