ACCUMULO-804 defend against FileNotFoundExceptions for hadoop-2.0 git-svn-id: https://svn.apache.org/repos/asf/accumulo/branches/1.5@1458344 13f79535-47bb-0310-9956-ffa450edef68 (cherry picked from commit aa0ca4a30fcbae39e33fd0ae7e9c6e5dd44c7cd8)
Reason: Hadoop2 Compat Author: Eric C. Newton <e...@apache.org> Ref: ACCUMULO-1792 only one ref to fs.delete() in GarbageCollectWriteAheadLog Signed-off-by: Eric Newton <eric.new...@gmail.com> Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/1b1334f5 Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/1b1334f5 Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/1b1334f5 Branch: refs/heads/1.4.5-SNAPSHOT Commit: 1b1334f5d26bda6a6be435dd277e3eca225a98c3 Parents: ec2aaa6 Author: Jonathan M Hsieh <j...@cloudera.com> Authored: Wed May 29 13:57:46 2013 -0700 Committer: Eric Newton <eric.new...@gmail.com> Committed: Mon Nov 25 16:06:42 2013 -0500 ---------------------------------------------------------------------- .../apache/accumulo/core/client/ZooKeeperInstance.java | 8 +++++++- .../util/shell/commands/ImportDirectoryCommand.java | 13 ++++++++++--- .../server/gc/GarbageCollectWriteAheadLogs.java | 3 +++ .../accumulo/server/gc/SimpleGarbageCollector.java | 12 +++++++++--- .../accumulo/server/master/tableOps/BulkImport.java | 7 ++++++- .../apache/accumulo/server/tabletserver/Tablet.java | 10 +++++++++- 6 files changed, 44 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/accumulo/blob/1b1334f5/src/core/src/main/java/org/apache/accumulo/core/client/ZooKeeperInstance.java ---------------------------------------------------------------------- diff --git a/src/core/src/main/java/org/apache/accumulo/core/client/ZooKeeperInstance.java b/src/core/src/main/java/org/apache/accumulo/core/client/ZooKeeperInstance.java index 069d217..fcf8f55 100644 --- a/src/core/src/main/java/org/apache/accumulo/core/client/ZooKeeperInstance.java +++ b/src/core/src/main/java/org/apache/accumulo/core/client/ZooKeeperInstance.java @@ -16,6 +16,7 @@ */ package org.apache.accumulo.core.client; +import java.io.FileNotFoundException; import java.io.IOException; import java.nio.ByteBuffer; import java.util.Collections; @@ -272,7 +273,12 @@ public class ZooKeeperInstance implements Instance { public static String getInstanceIDFromHdfs(Path instanceDirectory) { try { FileSystem fs = FileUtil.getFileSystem(CachedConfiguration.getInstance(), AccumuloConfiguration.getSiteConfiguration()); - FileStatus[] files = fs.listStatus(instanceDirectory); + FileStatus[] files = null; + try { + files = fs.listStatus(instanceDirectory); + } catch (FileNotFoundException ex) { + // ignored + } log.debug("Trying to read instance id from " + instanceDirectory); if (files == null || files.length == 0) { log.error("unable obtain instance id at " + instanceDirectory); http://git-wip-us.apache.org/repos/asf/accumulo/blob/1b1334f5/src/core/src/main/java/org/apache/accumulo/core/util/shell/commands/ImportDirectoryCommand.java ---------------------------------------------------------------------- diff --git a/src/core/src/main/java/org/apache/accumulo/core/util/shell/commands/ImportDirectoryCommand.java b/src/core/src/main/java/org/apache/accumulo/core/util/shell/commands/ImportDirectoryCommand.java index 3deefa7..31479a1 100644 --- a/src/core/src/main/java/org/apache/accumulo/core/util/shell/commands/ImportDirectoryCommand.java +++ b/src/core/src/main/java/org/apache/accumulo/core/util/shell/commands/ImportDirectoryCommand.java @@ -16,6 +16,7 @@ */ package org.apache.accumulo.core.util.shell.commands; +import java.io.FileNotFoundException; import java.io.IOException; import org.apache.accumulo.core.client.AccumuloException; @@ -45,10 +46,16 @@ public class ImportDirectoryCommand extends Command { String failureDir = cl.getArgs()[1]; boolean setTime = Boolean.parseBoolean(cl.getArgs()[2]); - FileSystem fs = FileSystem.get(CachedConfiguration.getInstance()); - FileStatus failStatus = fs.getFileStatus(new Path(failureDir)); - if (failStatus == null || !failStatus.isDir() || fs.listStatus(new Path(failureDir)).length != 0) + final FileSystem fs = FileSystem.get(CachedConfiguration.getInstance()); + FileStatus failStatus = null; + try { + failStatus = fs.getFileStatus(new Path(failureDir)); + } catch (FileNotFoundException ex) { + // ignored + } + if (failStatus == null || !failStatus.isDir() || fs.listStatus(new Path(failureDir)).length != 0) { throw new AccumuloException(failureDir + " is not an empty directory"); + } shellState.getConnector().tableOperations().importDirectory(shellState.getTableName(), dir, failureDir, setTime); return 0; } http://git-wip-us.apache.org/repos/asf/accumulo/blob/1b1334f5/src/server/src/main/java/org/apache/accumulo/server/gc/GarbageCollectWriteAheadLogs.java ---------------------------------------------------------------------- diff --git a/src/server/src/main/java/org/apache/accumulo/server/gc/GarbageCollectWriteAheadLogs.java b/src/server/src/main/java/org/apache/accumulo/server/gc/GarbageCollectWriteAheadLogs.java index 38f00be..06e5349 100644 --- a/src/server/src/main/java/org/apache/accumulo/server/gc/GarbageCollectWriteAheadLogs.java +++ b/src/server/src/main/java/org/apache/accumulo/server/gc/GarbageCollectWriteAheadLogs.java @@ -16,6 +16,7 @@ */ package org.apache.accumulo.server.gc; +import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; @@ -138,6 +139,8 @@ public class GarbageCollectWriteAheadLogs { for (FileStatus match : fs.globStatus(new Path(ServerConstants.getRecoveryDir(), file + "*"))) { fs.delete(match.getPath(), true); } + } catch (FileNotFoundException ex) { + // ignored } catch (IOException ex) { log.warn("Error deleting recovery data: ", ex); } http://git-wip-us.apache.org/repos/asf/accumulo/blob/1b1334f5/src/server/src/main/java/org/apache/accumulo/server/gc/SimpleGarbageCollector.java ---------------------------------------------------------------------- diff --git a/src/server/src/main/java/org/apache/accumulo/server/gc/SimpleGarbageCollector.java b/src/server/src/main/java/org/apache/accumulo/server/gc/SimpleGarbageCollector.java index 50bdfed..22c3c0e 100644 --- a/src/server/src/main/java/org/apache/accumulo/server/gc/SimpleGarbageCollector.java +++ b/src/server/src/main/java/org/apache/accumulo/server/gc/SimpleGarbageCollector.java @@ -355,9 +355,15 @@ public class SimpleGarbageCollector implements Iface { // tableIdsWithDeletes should now contain the set of deleted tables that had dirs deleted for (String delTableId : tableIdsWithDeletes) { - // if dir exist and is empty, then empty list is returned... if dir does not exist - // then null is returned - FileStatus[] tabletDirs = fs.listStatus(new Path(ServerConstants.getTablesDir() + "/" + delTableId)); + // if dir exist and is empty, then empty list is returned... + // hadoop 1.0 will return null if the file doesn't exist + // hadoop 2.0 will throw an exception if the file does not exist + FileStatus[] tabletDirs = null; + try { + tabletDirs = fs.listStatus(new Path(ServerConstants.getTablesDir() + "/" + delTableId)); + } catch (FileNotFoundException ex) { + // ignored + } if (tabletDirs == null) continue; http://git-wip-us.apache.org/repos/asf/accumulo/blob/1b1334f5/src/server/src/main/java/org/apache/accumulo/server/master/tableOps/BulkImport.java ---------------------------------------------------------------------- diff --git a/src/server/src/main/java/org/apache/accumulo/server/master/tableOps/BulkImport.java b/src/server/src/main/java/org/apache/accumulo/server/master/tableOps/BulkImport.java index 0438563..e9d241c 100644 --- a/src/server/src/main/java/org/apache/accumulo/server/master/tableOps/BulkImport.java +++ b/src/server/src/main/java/org/apache/accumulo/server/master/tableOps/BulkImport.java @@ -154,7 +154,12 @@ public class BulkImport extends MasterRepo { ServerConfiguration.getSiteConfiguration())); ; Path errorPath = new Path(errorDir); - FileStatus errorStatus = fs.getFileStatus(errorPath); + FileStatus errorStatus = null; + try { + errorStatus = fs.getFileStatus(errorPath); + } catch (FileNotFoundException ex) { + // ignored + } if (errorStatus == null) throw new ThriftTableOperationException(tableId, null, TableOperation.BULK_IMPORT, TableOperationExceptionType.BULK_BAD_ERROR_DIRECTORY, errorDir + " does not exist"); http://git-wip-us.apache.org/repos/asf/accumulo/blob/1b1334f5/src/server/src/main/java/org/apache/accumulo/server/tabletserver/Tablet.java ---------------------------------------------------------------------- diff --git a/src/server/src/main/java/org/apache/accumulo/server/tabletserver/Tablet.java b/src/server/src/main/java/org/apache/accumulo/server/tabletserver/Tablet.java index ef4f27a..09903bf 100644 --- a/src/server/src/main/java/org/apache/accumulo/server/tabletserver/Tablet.java +++ b/src/server/src/main/java/org/apache/accumulo/server/tabletserver/Tablet.java @@ -23,6 +23,9 @@ package org.apache.accumulo.server.tabletserver; * */ +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; @@ -471,7 +474,12 @@ public class Tablet { private void checkTabletDir(Path tabletDir) throws IOException { - FileStatus[] files = fs.listStatus(tabletDir); + FileStatus[] files = null; + try { + files = fs.listStatus(tabletDir); + } catch (FileNotFoundException ex) { + // ignored + } if (files == null) { if (tabletDir.getName().startsWith("c-"))