HADOOP-15469. S3A directory committer commit job fails if _temporary directory created under dest.

Contributed by Steve Loughran.

(cherry picked from commit 170f1040d4)
This commit is contained in:
Steve Loughran 2018-05-17 19:08:05 +01:00
parent c0ec061e28
commit cc3600aabd
2 changed files with 5 additions and 10 deletions

View File

@ -93,11 +93,8 @@ public class DirectoryStagingCommitter extends StagingCommitter {
Configuration fsConf = fs.getConf();
switch (getConflictResolutionMode(context, fsConf)) {
case FAIL:
// this was checked in setupJob, but this avoids some cases where
// output was created while the job was processing
if (fs.exists(outputPath)) {
throw new PathExistsException(outputPath.toString(), E_DEST_EXISTS);
}
// this was checked in setupJob; temporary files may have been
// created, so do not check again.
break;
case APPEND:
// do nothing

View File

@ -67,15 +67,14 @@ public class TestStagingDirectoryOutputCommitter
pathExists(mockS3, OUTPUT_PATH);
final DirectoryStagingCommitter committer = newJobCommitter();
// this should fail
intercept(PathExistsException.class,
InternalCommitterConstants.E_DEST_EXISTS,
"Should throw an exception because the path exists",
() -> committer.setupJob(getJob()));
intercept(PathExistsException.class,
InternalCommitterConstants.E_DEST_EXISTS,
"Should throw an exception because the path exists",
() -> committer.commitJob(getJob()));
// but there are no checks in job commit (HADOOP-15469)
committer.commitJob(getJob());
reset(mockS3);
pathDoesNotExist(mockS3, OUTPUT_PATH);
@ -87,7 +86,6 @@ public class TestStagingDirectoryOutputCommitter
reset(mockS3);
pathDoesNotExist(mockS3, OUTPUT_PATH);
committer.commitJob(getJob());
verifyExistenceChecked(mockS3, OUTPUT_PATH);
verifyCompletion(mockS3);
}