You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by mm...@apache.org on 2020/08/12 12:36:57 UTC
[accumulo] branch 1.9 updated: Move MinorCompaction method call
into retry catch block. Fixes #1298 (#1675)
This is an automated email from the ASF dual-hosted git repository.
mmiller pushed a commit to branch 1.9
in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/1.9 by this push:
new 18e8239 Move MinorCompaction method call into retry catch block. Fixes #1298 (#1675)
18e8239 is described below
commit 18e82394898352c9dcf682b2086a6145af36c06e
Author: Mike Miller <mm...@apache.org>
AuthorDate: Wed Aug 12 08:30:40 2020 -0400
Move MinorCompaction method call into retry catch block. Fixes #1298 (#1675)
* Fixes the situation when MinorCompactionTask creates a
new File and an IOException leaves the Tablet in a bad state
* Moves the new file code into the try/catch block that will
retry during an IOException
---
.../accumulo/tserver/tablet/MinorCompactionTask.java | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/MinorCompactionTask.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/MinorCompactionTask.java
index 7f44be7..8f922d2 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/MinorCompactionTask.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/MinorCompactionTask.java
@@ -59,16 +59,20 @@ class MinorCompactionTask implements Runnable {
ProbabilitySampler sampler = new ProbabilitySampler(tracePercent);
Span minorCompaction = Trace.on("minorCompaction", sampler);
try {
- FileRef newMapfileLocation = tablet.getNextMapFilename(mergeFile == null ? "F" : "M");
- FileRef tmpFileRef = new FileRef(newMapfileLocation.path() + "_tmp");
Span span = Trace.start("waitForCommits");
synchronized (tablet) {
commitSession.waitForCommitsToFinish();
}
span.stop();
span = Trace.start("start");
+ FileRef newMapfileLocation = null;
+ FileRef tmpFileRef = null;
while (true) {
try {
+ if (newMapfileLocation == null) {
+ newMapfileLocation = tablet.getNextMapFilename(mergeFile == null ? "F" : "M");
+ tmpFileRef = new FileRef(newMapfileLocation.path() + "_tmp");
+ }
// the purpose of the minor compaction start event is to keep track of the filename... in
// the case
// where the metadata table write for the minor compaction finishes and the process dies
@@ -82,7 +86,11 @@ class MinorCompactionTask implements Runnable {
commitSession.getWALogSeq() + 1, newMapfileLocation.path().toString());
break;
} catch (IOException e) {
- log.warn("Failed to write to write ahead log {}", e.getMessage(), e);
+ // An IOException could have occurred while creating the new file
+ if (newMapfileLocation == null)
+ log.warn("Failed to create new file for minor compaction {}", e.getMessage(), e);
+ else
+ log.warn("Failed to write to write ahead log {}", e.getMessage(), e);
}
}
span.stop();