commit 8a97a496f38ba42d8b03802dab9402c98310490e Author: Vihang Karajgaonkar Date: Mon Dec 5 11:26:35 2016 -0800 HIVE-15355 : Concurrency issues during parallel moveFile due to HDFSUtils.setFullFileStatus diff --git a/shims/common/src/main/java/org/apache/hadoop/hive/io/HdfsUtils.java b/shims/common/src/main/java/org/apache/hadoop/hive/io/HdfsUtils.java index 70a6857464a38d9a425511b78b54d4231f131f1f..7b6a9bd68af47b933e65624c0239c7d91a400120 100644 --- a/shims/common/src/main/java/org/apache/hadoop/hive/io/HdfsUtils.java +++ b/shims/common/src/main/java/org/apache/hadoop/hive/io/HdfsUtils.java @@ -19,6 +19,8 @@ package org.apache.hadoop.hive.io; import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; import org.apache.commons.lang.ArrayUtils; @@ -68,12 +70,10 @@ public static void setFullFileStatus(Configuration conf, HdfsUtils.HadoopFileSta boolean aclEnabled = Objects.equal(conf.get("dfs.namenode.acls.enabled"), "true"); FsPermission sourcePerm = fStatus.getPermission(); List aclEntries = null; - AclStatus aclStatus; if (aclEnabled) { - aclStatus = sourceStatus.getAclStatus(); - if (aclStatus != null) { - LOG.trace(aclStatus.toString()); - aclEntries = aclStatus.getEntries(); + if (sourceStatus.getAclEntries() != null) { + LOG.trace(sourceStatus.aclStatus.toString()); + aclEntries = new ArrayList<>(sourceStatus.getAclEntries()); removeBaseAclEntries(aclEntries); //the ACL api's also expect the tradition user/group/other permission in the form of ACL @@ -193,8 +193,9 @@ public HadoopFileStatus(Configuration conf, FileSystem fs, Path file) throws IOE public FileStatus getFileStatus() { return fileStatus; } - public AclStatus getAclStatus() { - return aclStatus; + + public List getAclEntries() { + return aclStatus == null ? null : Collections.unmodifiableList(aclStatus.getEntries()); } } }