From 3669f9eb9a8e99b6a4d748b5f93a1d312addf28a Mon Sep 17 00:00:00 2001 From: Elliott Sims Date: Mon, 11 Mar 2024 17:06:30 -0500 Subject: [PATCH 1/2] Ignore repair_run_by_cluster_v2 rows with no corresponding repair When bad things (like Reaper filling the drive with logs) happen, it's possible to end up with repair_run_by_cluster_v2 rows with no corresponding repair row, which breaks Reaper. So, just skip them. --- .../storage/repairrun/CassandraRepairRunDao.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/server/src/main/java/io/cassandrareaper/storage/repairrun/CassandraRepairRunDao.java b/src/server/src/main/java/io/cassandrareaper/storage/repairrun/CassandraRepairRunDao.java index 096874248..52096a0c0 100644 --- a/src/server/src/main/java/io/cassandrareaper/storage/repairrun/CassandraRepairRunDao.java +++ b/src/server/src/main/java/io/cassandrareaper/storage/repairrun/CassandraRepairRunDao.java @@ -395,15 +395,18 @@ public List getRepairRunsForClusterPrioritiseRunning(String clusterNa ) ) ); + // Defuture the repair_run rows and build the strongly typed RepairRun objects from the contents. return repairRunFutures .stream() .map( row -> { Row extractedRow = row.getUninterruptibly().one(); - return buildRepairRunFromRow(extractedRow, extractedRow.getUUID("id")); + return (extractedRow == null) + ? (null) + : (buildRepairRunFromRow(extractedRow, extractedRow.getUUID("id"))); } - ).collect(Collectors.toList()); + ).filter(x -> x != null).collect(Collectors.toList()); } @Override From efcf59c67519552d14181a0811601d311804f9e8 Mon Sep 17 00:00:00 2001 From: Elliott Sims Date: Tue, 12 Mar 2024 15:49:27 -0500 Subject: [PATCH 2/2] Cleaner version of omitting missing repair_run rows Per comment, rewrite to stick a filter between instead of shoving a ternary into the map. Cleaner and easier to read. --- .../storage/repairrun/CassandraRepairRunDao.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/server/src/main/java/io/cassandrareaper/storage/repairrun/CassandraRepairRunDao.java b/src/server/src/main/java/io/cassandrareaper/storage/repairrun/CassandraRepairRunDao.java index 52096a0c0..f1671d78d 100644 --- a/src/server/src/main/java/io/cassandrareaper/storage/repairrun/CassandraRepairRunDao.java +++ b/src/server/src/main/java/io/cassandrareaper/storage/repairrun/CassandraRepairRunDao.java @@ -30,6 +30,7 @@ import java.util.Collection; import java.util.Date; import java.util.List; +import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.SortedSet; @@ -399,14 +400,10 @@ public List getRepairRunsForClusterPrioritiseRunning(String clusterNa // Defuture the repair_run rows and build the strongly typed RepairRun objects from the contents. return repairRunFutures .stream() - .map( - row -> { - Row extractedRow = row.getUninterruptibly().one(); - return (extractedRow == null) - ? (null) - : (buildRepairRunFromRow(extractedRow, extractedRow.getUUID("id"))); - } - ).filter(x -> x != null).collect(Collectors.toList()); + .map(row -> row.getUninterruptibly().one()) + .filter(Objects::nonNull) + .map(extractedRow -> buildRepairRunFromRow(extractedRow, extractedRow.getUUID("id"))) + .collect(Collectors.toList()); } @Override