diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/JournalNodeSyncer.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/JournalNodeSyncer.java index 7b3d9708651..d2b2c9bff11 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/JournalNodeSyncer.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/server/JournalNodeSyncer.java @@ -38,6 +38,7 @@ import org.apache.hadoop.hdfs.util.DataTransferThrottler; import org.apache.hadoop.ipc.ProtobufRpcEngine; import org.apache.hadoop.ipc.RPC; import org.apache.hadoop.security.SecurityUtil; +import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.util.Daemon; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -439,15 +440,23 @@ public class JournalNodeSyncer { File tmpEditsFile = jnStorage.getTemporaryEditsFile( log.getStartTxId(), log.getEndTxId()); - try { - Util.doGetUrl(url, ImmutableList.of(tmpEditsFile), jnStorage, false, - logSegmentTransferTimeout, throttler); - } catch (IOException e) { - LOG.error("Download of Edit Log file for Syncing failed. Deleting temp " + - "file: " + tmpEditsFile); - if (!tmpEditsFile.delete()) { - LOG.warn("Deleting " + tmpEditsFile + " has failed"); + if (!SecurityUtil.doAsLoginUser(() -> { + if (UserGroupInformation.isSecurityEnabled()) { + UserGroupInformation.getCurrentUser().checkTGTAndReloginFromKeytab(); } + try { + Util.doGetUrl(url, ImmutableList.of(tmpEditsFile), jnStorage, false, + logSegmentTransferTimeout, throttler); + } catch (IOException e) { + LOG.error("Download of Edit Log file for Syncing failed. Deleting temp " + + "file: " + tmpEditsFile, e); + if (!tmpEditsFile.delete()) { + LOG.warn("Deleting " + tmpEditsFile + " has failed"); + } + return false; + } + return true; + })) { return false; } LOG.info("Downloaded file " + tmpEditsFile.getName() + " of size " +