This is an automated email from the ASF dual-hosted git repository.
domgarguilo pushed a commit to branch 2.1
in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/2.1 by this push:
new b24b55122b Schedule cleanup of interrupted scan refs (#5652)
b24b55122b is described below
commit b24b55122babfb9a4913a1f785117eecd942f99e
Author: Dom G. <[email protected]>
AuthorDate: Mon Jun 23 12:32:19 2025 -0400
Schedule cleanup of interrupted scan refs (#5652)
---
.../java/org/apache/accumulo/tserver/TabletServer.java | 12 ++++++++++++
.../apache/accumulo/tserver/tablet/DatafileManager.java | 14 ++++++++++++++
.../java/org/apache/accumulo/tserver/tablet/Tablet.java | 4 ++++
3 files changed, 30 insertions(+)
diff --git
a/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServer.java
b/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServer.java
index 7d910f7e4b..d5d411db50 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServer.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServer.java
@@ -310,6 +310,18 @@ public class TabletServer extends AbstractServer
}), 5, 5, TimeUnit.SECONDS);
watchNonCriticalScheduledTask(future);
+ ScheduledFuture<?> cleanupTask =
+
context.getScheduledExecutor().scheduleWithFixedDelay(Threads.createNamedRunnable(
+ "ScanRefCleanupTask", () ->
getOnlineTablets().values().forEach(tablet -> {
+ try {
+ tablet.removeOrphanedScanRefs();
+ } catch (Exception e) {
+ log.error("Error cleaning up stale scan references for tablet
{}",
+ tablet.getExtent(), e);
+ }
+ })), 5, 5, TimeUnit.MINUTES);
+ watchNonCriticalScheduledTask(cleanupTask);
+
@SuppressWarnings("deprecation")
final long walMaxSize =
aconf.getAsBytes(aconf.resolve(Property.TSERV_WAL_MAX_SIZE,
Property.TSERV_WALOG_MAX_SIZE));
diff --git
a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/DatafileManager.java
b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/DatafileManager.java
index b2568f7ade..33f16c98de 100644
---
a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/DatafileManager.java
+++
b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/DatafileManager.java
@@ -184,6 +184,20 @@ class DatafileManager {
}
}
+ /**
+ * Removes any scan‐in‐use metadata entries that were left behind when a
scan cleanup was
+ * interrupted. Intended to be called periodically to clear these orphaned
scan refs once their
+ * in-memory reference count reaches zero.
+ */
+ public void removeOrphanedScanRefs() {
+ Set<StoredTabletFile> snapshot;
+ synchronized (tablet) {
+ snapshot = new HashSet<>(filesToDeleteAfterScan);
+ filesToDeleteAfterScan.clear();
+ }
+ removeFilesAfterScan(snapshot);
+ }
+
private TreeSet<StoredTabletFile> waitForScansToFinish(Set<StoredTabletFile>
pathsToWaitFor) {
long maxWait = 10000L;
long startTime = System.currentTimeMillis();
diff --git
a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java
b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java
index 0f8773d93a..e4d9f9787c 100644
---
a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java
+++
b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java
@@ -2220,6 +2220,10 @@ public class Tablet extends TabletBase {
return getDatafileManager().getUpdateCount();
}
+ public void removeOrphanedScanRefs() {
+ getDatafileManager().removeOrphanedScanRefs();
+ }
+
TabletMemory getTabletMemory() {
return tabletMemory;
}