Skip to content

Commit 9e3c241

Browse files
committed
Option to schedule Paxos cleanup on topology change by keyspace
1 parent b11633b commit 9e3c241

File tree

4 files changed

+21
-3
lines changed

4 files changed

+21
-3
lines changed

CHANGES.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
5.1
2+
* Option to schedule Paxos cleanup on topology change by keyspace (CASSANDRA-20801)
23
* Introducing comments and security labels for schema elements (CASSANDRA-20943)
34
* Extend nodetool tablestats for dictionary memory usage (CASSANDRA-20940)
45
* Introduce separate GCInspector thresholds for concurrent GC events (CASSANDRA-20980)

src/java/org/apache/cassandra/config/CassandraRelevantProperties.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,7 @@ public enum CassandraRelevantProperties
434434
PAXOS_LOG_TTL_LINEARIZABILITY_VIOLATIONS("cassandra.paxos.log_ttl_linearizability_violations", "true"),
435435
PAXOS_MODERN_RELEASE("cassandra.paxos.modern_release", "4.1"),
436436
PAXOS_REPAIR_ALLOW_MULTIPLE_PENDING_UNSAFE("cassandra.paxos_repair_allow_multiple_pending_unsafe"),
437+
PAXOS_REPAIR_ON_TOPOLOGY_CHANGE_BY_KEYSPACE("cassandra.paxos_repair_on_topology_change_by_keyspace", "false"),
437438
PAXOS_REPAIR_ON_TOPOLOGY_CHANGE_RETRIES("cassandra.paxos_repair_on_topology_change_retries", "10"),
438439
PAXOS_REPAIR_ON_TOPOLOGY_CHANGE_RETRY_DELAY_SECONDS("cassandra.paxos_repair_on_topology_change_retry_delay_seconds", "10"),
439440
PAXOS_REPAIR_RETRY_TIMEOUT_IN_MS("cassandra.paxos_repair_retry_timeout_millis", "60000"),

src/java/org/apache/cassandra/service/StorageService.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@
248248
import static org.apache.cassandra.config.CassandraRelevantProperties.CONSISTENT_RANGE_MOVEMENT;
249249
import static org.apache.cassandra.config.CassandraRelevantProperties.DRAIN_EXECUTOR_TIMEOUT_MS;
250250
import static org.apache.cassandra.config.CassandraRelevantProperties.JOIN_RING;
251+
import static org.apache.cassandra.config.CassandraRelevantProperties.PAXOS_REPAIR_ON_TOPOLOGY_CHANGE_BY_KEYSPACE;
251252
import static org.apache.cassandra.config.CassandraRelevantProperties.PAXOS_REPAIR_ON_TOPOLOGY_CHANGE_RETRIES;
252253
import static org.apache.cassandra.config.CassandraRelevantProperties.PAXOS_REPAIR_ON_TOPOLOGY_CHANGE_RETRY_DELAY_SECONDS;
253254
import static org.apache.cassandra.config.CassandraRelevantProperties.REPLACE_ADDRESS_FIRST_BOOT;
@@ -3226,9 +3227,10 @@ public void repairPaxosForTopologyChange(String reason)
32263227
}
32273228

32283229
@VisibleForTesting
3229-
public Future<?> startRepairPaxosForTopologyChange(String reason)
3230+
public Future<?> startRepairPaxosForTopologyChange(String reason) throws ExecutionException, InterruptedException
32303231
{
32313232
logger.info("repairing paxos for {}", reason);
3233+
boolean scheduleByKeyspace = PAXOS_REPAIR_ON_TOPOLOGY_CHANGE_BY_KEYSPACE.getBoolean();
32323234

32333235
List<Future<?>> futures = new ArrayList<>();
32343236

@@ -3242,7 +3244,11 @@ public Future<?> startRepairPaxosForTopologyChange(String reason)
32423244
continue;
32433245

32443246
Collection<Range<Token>> ranges = getLocalAndPendingRanges(ksName);
3245-
futures.add(ActiveRepairService.instance().repairPaxosForTopologyChange(ksName, ranges, reason));
3247+
if (scheduleByKeyspace)
3248+
// blocking wait here if scheduling by keyspace to avoid overwhelming the messages with many repairs at once
3249+
ActiveRepairService.instance().repairPaxosForTopologyChange(ksName, ranges, reason).get();
3250+
else
3251+
futures.add(ActiveRepairService.instance().repairPaxosForTopologyChange(ksName, ranges, reason));
32463252
}
32473253

32483254
return FutureCombiner.allOf(futures);

test/simulator/main/org/apache/cassandra/simulator/cluster/OnInstanceTopologyChangePaxosRepair.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
package org.apache.cassandra.simulator.cluster;
2020

21+
import java.util.concurrent.ExecutionException;
22+
2123
import org.apache.cassandra.distributed.api.IIsolatedExecutor.SerializableRunnable;
2224
import org.apache.cassandra.service.StorageService;
2325
import org.apache.cassandra.utils.concurrent.Condition;
@@ -63,7 +65,15 @@ protected static SerializableRunnable invokableTopologyChangeRepair(String reaso
6365
{
6466
return () -> {
6567
Condition condition = newOneTimeCondition();
66-
Future<?> future = StorageService.instance.startRepairPaxosForTopologyChange(reason);
68+
Future<?> future;
69+
try
70+
{
71+
future = StorageService.instance.startRepairPaxosForTopologyChange(reason);
72+
}
73+
catch (ExecutionException | InterruptedException e)
74+
{
75+
throw new RuntimeException(e);
76+
}
6777
future.addListener(condition::signal); // add listener so we don't use Futures.addAllAsList
6878
condition.awaitThrowUncheckedOnInterrupt();
6979
};

0 commit comments

Comments
 (0)