[ 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)