[ 
https://issues.apache.org/jira/browse/CASSANDRA-20281?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17934619#comment-17934619
 ] 

David Capwell edited comment on CASSANDRA-20281 at 3/12/25 6:34 PM:
--------------------------------------------------------------------

[[email protected]], slight correction; there are 4 ways!  Take a 
look at 
org.apache.cassandra.fuzz.topology.TopologyMixupTestBase#topologyCommand, its a 
test that runs different topology changes in C* and makes sure we do the right 
thing

{code}
case RemoveNode:
    possible.put(rs -> multistep(removeNodeRandomizedDispatch(rs, state), 
awaitClusterStable()), 1);
    break;
case HostReplace:
    possible.put(rs -> multistep(repairFor(state, "host replace"), 
hostReplace(rs, state), awaitClusterStable()), 1);
    break;
{code}

and remove node

{code}
private Command<State<S>, Void, ?> removeNodeRandomizedDispatch(RandomSource 
rs, State<S> state)
{
    RemoveType type = state.removeTypeGen.next(rs);
    switch (type)
    {
        case Decommission:
            return removeNodeDecommission(rs, state);
        case RemoveNode:
            return removeNode(rs, state);
        case Assassinate:
            return removeNodeAssassinate(rs, state);
        default:
            throw new UnsupportedOperationException("Unknown remove type: " + 
type);
    }
}
{code}


was (Author: dcapwell):
[[email protected]], slight correction; there are 4 ways!  Take a 
look at 
org.apache.cassandra.fuzz.topology.TopologyMixupTestBase#topologyCommand, its a 
test that runs different topology changes in C* and makes sure we do the right 
thing

{code}
                case RemoveNode:
                    possible.put(rs -> 
multistep(removeNodeRandomizedDispatch(rs, state), awaitClusterStable()), 1);
                    break;
                case HostReplace:
                    possible.put(rs -> multistep(repairFor(state, "host 
replace"), hostReplace(rs, state), awaitClusterStable()), 1);
                    break;
{code}

and remove node

{code}
    private Command<State<S>, Void, ?> 
removeNodeRandomizedDispatch(RandomSource rs, State<S> state)
    {
        RemoveType type = state.removeTypeGen.next(rs);
        switch (type)
        {
            case Decommission:
                return removeNodeDecommission(rs, state);
            case RemoveNode:
                return removeNode(rs, state);
            case Assassinate:
                return removeNodeAssassinate(rs, state);
            default:
                throw new UnsupportedOperationException("Unknown remove type: " 
+ type);
        }
    }
{code}

> Capability to run repair before replacing a node
> ------------------------------------------------
>
>                 Key: CASSANDRA-20281
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-20281
>             Project: Apache Cassandra
>          Issue Type: Improvement
>          Components: Consistency/Repair
>            Reporter: Jaydeepkumar Chovatia
>            Assignee: Jaydeepkumar Chovatia
>            Priority: Normal
>
> It is vital to repair the token range of the node being replaced to avoid 
> data loss as part of a node replacement.
> There is no better mechanism to repair a node before replacing it. As part of 
> this ticket, we can discuss various ideas for extending the AutoRepair 
> framework.
> There are two ways to remove a node from the ring:
>  # nodetool decommission: AutoRepair framework already has an option to force 
> any live node to trigger repair, so we can leverage that readymade
>  # -Dcassandra.replace_address=<IP_of_dead_node>: Currently, the framework 
> does not proxy repair on behalf of another node. It needs to be extended. 
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to