You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by kt...@apache.org on 2019/07/03 13:35:04 UTC

[accumulo] branch 2.0 updated: Make bulk import move idempotent (#1246)

This is an automated email from the ASF dual-hosted git repository.

kturner pushed a commit to branch 2.0
in repository https://gitbox.apache.org/repos/asf/accumulo.git


The following commit(s) were added to refs/heads/2.0 by this push:
     new 7268fcf  Make bulk import move idempotent (#1246)
7268fcf is described below

commit 7268fcf9537165c6f8fbdd70f833ead1699de32c
Author: Keith Turner <kt...@apache.org>
AuthorDate: Wed Jul 3 09:34:59 2019 -0400

    Make bulk import move idempotent (#1246)
---
 .../master/tableOps/bulkVer2/BulkImportMove.java   | 25 +++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/server/master/src/main/java/org/apache/accumulo/master/tableOps/bulkVer2/BulkImportMove.java b/server/master/src/main/java/org/apache/accumulo/master/tableOps/bulkVer2/BulkImportMove.java
index 9da76ab..83480fb 100644
--- a/server/master/src/main/java/org/apache/accumulo/master/tableOps/bulkVer2/BulkImportMove.java
+++ b/server/master/src/main/java/org/apache/accumulo/master/tableOps/bulkVer2/BulkImportMove.java
@@ -16,6 +16,7 @@
  */
 package org.apache.accumulo.master.tableOps.bulkVer2;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -109,7 +110,29 @@ class BulkImportMove extends MasterRepo {
       results.add(workers.submit(() -> {
         final Path originalPath = new Path(sourceDir, renameEntry.getKey());
         Path newPath = new Path(bulkDir, renameEntry.getValue());
-        boolean success = fs.rename(originalPath, newPath);
+        boolean success;
+        try {
+          success = fs.rename(originalPath, newPath);
+        } catch (IOException e) {
+          // The rename could have failed because this is the second time its running (failures
+          // could cause this to run multiple times).
+          if (!fs.exists(newPath) || fs.exists(originalPath)) {
+            throw e;
+          }
+
+          log.debug(
+              "Ingoring rename exception because destination already exists. tid: {} orig: {} new: {}",
+              fmtTid, originalPath, newPath, e);
+          success = true;
+        }
+
+        if (!success && fs.exists(newPath) && !fs.exists(originalPath)) {
+          log.debug(
+              "Ingoring rename failure because destination already exists. tid: {} orig: {} new: {}",
+              fmtTid, originalPath, newPath);
+          success = true;
+        }
+
         if (success && log.isTraceEnabled())
           log.trace("tid {} moved {} to {}", fmtTid, originalPath, newPath);
         return success;