From 0c5de0e4f63ebfa0209ab8838b6c662391d6e64d Mon Sep 17 00:00:00 2001 From: Todd Lipcon Date: Wed, 5 Sep 2012 18:54:32 +0000 Subject: [PATCH] HDFS-3054. distcp -skipcrccheck has no effect. Contributed by Colin Patrick McCabe. git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1381295 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/hadoop/tools/mapred/CopyMapper.java | 2 +- .../tools/mapred/RetriableFileCopyCommand.java | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/hadoop-tools/hadoop-distcp/src/main/java/org/apache/hadoop/tools/mapred/CopyMapper.java b/hadoop-tools/hadoop-distcp/src/main/java/org/apache/hadoop/tools/mapred/CopyMapper.java index 5562dd86b13..7fe0b99a706 100644 --- a/hadoop-tools/hadoop-distcp/src/main/java/org/apache/hadoop/tools/mapred/CopyMapper.java +++ b/hadoop-tools/hadoop-distcp/src/main/java/org/apache/hadoop/tools/mapred/CopyMapper.java @@ -255,7 +255,7 @@ private void copyFileWithRetry(String description, FileStatus sourceFileStatus, long bytesCopied; try { - bytesCopied = (Long)new RetriableFileCopyCommand(description) + bytesCopied = (Long)new RetriableFileCopyCommand(skipCrc, description) .execute(sourceFileStatus, target, context, fileAttributes); } catch (Exception e) { context.setStatus("Copy Failure: " + sourceFileStatus.getPath()); diff --git a/hadoop-tools/hadoop-distcp/src/main/java/org/apache/hadoop/tools/mapred/RetriableFileCopyCommand.java b/hadoop-tools/hadoop-distcp/src/main/java/org/apache/hadoop/tools/mapred/RetriableFileCopyCommand.java index 9148630d08e..a7e8381be9e 100644 --- a/hadoop-tools/hadoop-distcp/src/main/java/org/apache/hadoop/tools/mapred/RetriableFileCopyCommand.java +++ b/hadoop-tools/hadoop-distcp/src/main/java/org/apache/hadoop/tools/mapred/RetriableFileCopyCommand.java @@ -41,7 +41,8 @@ public class RetriableFileCopyCommand extends RetriableCommand { private static Log LOG = LogFactory.getLog(RetriableFileCopyCommand.class); private static int BUFFER_SIZE = 8 * 1024; - + private boolean skipCrc = false; + /** * Constructor, taking a description of the action. * @param description Verbose description of the copy operation. @@ -49,6 +50,17 @@ public class RetriableFileCopyCommand extends RetriableCommand { public RetriableFileCopyCommand(String description) { super(description); } + + /** + * Create a RetriableFileCopyCommand. + * + * @param skipCrc Whether to skip the crc check. + * @param description A verbose description of the copy operation. + */ + public RetriableFileCopyCommand(boolean skipCrc, String description) { + this(description); + this.skipCrc = skipCrc; + } /** * Implementation of RetriableCommand::doExecute(). @@ -92,7 +104,7 @@ private long doCopy(FileStatus sourceFileStatus, Path target, compareFileLengths(sourceFileStatus, tmpTargetPath, configuration, bytesRead); //At this point, src&dest lengths are same. if length==0, we skip checksum - if (bytesRead != 0) { + if ((bytesRead != 0) && (!skipCrc)) { compareCheckSums(sourceFS, sourceFileStatus.getPath(), targetFS, tmpTargetPath); } promoteTmpToTarget(tmpTargetPath, target, targetFS);