This is an automated email from the ASF dual-hosted git repository.
tolbertam pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git
The following commit(s) were added to refs/heads/trunk by this push:
new f6eb4a6b31 Fix a bug in AutoRepair duration metric calculation if
schedule finishes quickly
f6eb4a6b31 is described below
commit f6eb4a6b31d06108f073dba7dfa04732d2abbf7b
Author: jaydeepkumar1984 <[email protected]>
AuthorDate: Mon May 5 18:39:07 2025 -0700
Fix a bug in AutoRepair duration metric calculation if schedule finishes
quickly
patch by Jaydeepkumar Chovatia; reviewed by Andy Tolbert for CASSANDRA-20622
---
CHANGES.txt | 1 +
src/java/org/apache/cassandra/repair/autorepair/AutoRepair.java | 2 +-
.../distributed/test/repair/AutoRepairSchedulerTest.java | 8 ++++++--
3 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/CHANGES.txt b/CHANGES.txt
index 46e0afd6b0..efed7d42d4 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
5.1
+ * Fix a bug in AutoRepair duration metric calculation if schedule finishes
quickly (CASSANDRA-20622)
* Fix AutoRepair flaky InJvm dtest (CASSANDRA-20620)
* Increasing default for auto_repair.sstable_upper_threshold considering
large Cassandra tables & revert three lines removed from CHANGES.txt due to a
merge mistake (CASSANDRA-20586)
* Fix token restrictions with MIN_TOKEN (CASSANDRO-20557)
diff --git a/src/java/org/apache/cassandra/repair/autorepair/AutoRepair.java
b/src/java/org/apache/cassandra/repair/autorepair/AutoRepair.java
index 09e4a62a48..e5923e3c9c 100644
--- a/src/java/org/apache/cassandra/repair/autorepair/AutoRepair.java
+++ b/src/java/org/apache/cassandra/repair/autorepair/AutoRepair.java
@@ -469,7 +469,7 @@ public class AutoRepair
repairState.setSucceededTokenRangesCount(collectedRepairStats.succeededTokenRanges);
repairState.setSkippedTokenRangesCount(collectedRepairStats.skippedTokenRanges);
repairState.setSkippedTablesCount(collectedRepairStats.skippedTables);
- repairState.setNodeRepairTimeInSec((int)
TimeUnit.MILLISECONDS.toSeconds(repairScheduleElapsedInMillis));
+ repairState.setNodeRepairTimeInSec((int)
TimeUnit.MILLISECONDS.toSeconds(timeFunc.get() - startTimeInMillis));
long timeInHours =
TimeUnit.SECONDS.toHours(repairState.getNodeRepairTimeInSec());
logger.info("Local {} repair time {} hour(s), stats:
repairKeyspaceCount {}, " +
"repairTokenRangesSuccessCount {},
repairTokenRangesFailureCount {}, " +
diff --git
a/test/distributed/org/apache/cassandra/distributed/test/repair/AutoRepairSchedulerTest.java
b/test/distributed/org/apache/cassandra/distributed/test/repair/AutoRepairSchedulerTest.java
index 4df58213aa..adca507082 100644
---
a/test/distributed/org/apache/cassandra/distributed/test/repair/AutoRepairSchedulerTest.java
+++
b/test/distributed/org/apache/cassandra/distributed/test/repair/AutoRepairSchedulerTest.java
@@ -48,6 +48,7 @@ import org.apache.cassandra.utils.FBUtilities;
import static
org.apache.cassandra.schema.SchemaConstants.DISTRIBUTED_KEYSPACE_NAME;
import static org.hamcrest.Matchers.greaterThan;
+import static org.hamcrest.Matchers.greaterThanOrEqualTo;
import static org.junit.Assert.assertEquals;
/**
@@ -145,8 +146,11 @@ public class AutoRepairSchedulerTest extends TestBaseImpl
AutoRepair.SLEEP_IF_REPAIR_FINISHES_QUICKLY = new
DurationSpec.IntSecondsBound("2s");
AutoRepairMetrics incrementalMetrics =
AutoRepairMetricsManager.getMetrics(AutoRepairConfig.RepairType.INCREMENTAL);
+ // Since the AutoRepair sleeps up to
SLEEP_IF_REPAIR_FINISHES_QUICKLY if the repair finishes quickly,
+ // so the "nodeRepairTimeInSec" metric should at least be greater
than or equal to
+ // SLEEP_IF_REPAIR_FINISHES_QUICKLY
Util.spinAssert(String.format("%s: AutoRepair has not yet
completed one INCREMENTAL repair cycle", broadcastAddress),
- greaterThan(0L),
+ greaterThanOrEqualTo(2L),
() ->
incrementalMetrics.nodeRepairTimeInSec.getValue().longValue(),
5,
TimeUnit.MINUTES);
@@ -163,7 +167,7 @@ public class AutoRepairSchedulerTest extends TestBaseImpl
AutoRepairMetrics fullMetrics =
AutoRepairMetricsManager.getMetrics(AutoRepairConfig.RepairType.FULL);
Util.spinAssert(String.format("%s: AutoRepair has not yet
completed one FULL repair cycle", broadcastAddress),
- greaterThan(0L),
+ greaterThanOrEqualTo(2L),
() ->
fullMetrics.nodeRepairTimeInSec.getValue().longValue(),
5,
TimeUnit.MINUTES);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]