From 8bf0e2d6b38a2cbd3c3d45557ede7575c1f18312 Mon Sep 17 00:00:00 2001 From: Steve Loughran Date: Thu, 25 May 2017 15:19:58 +0100 Subject: [PATCH] HADOOP-14430 the accessTime of FileStatus returned by SFTPFileSystem's getFileStatus method is always 0. Contributed by Hongyuan Li. --- .../org/apache/hadoop/fs/sftp/SFTPFileSystem.java | 2 +- .../apache/hadoop/fs/sftp/TestSFTPFileSystem.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/sftp/SFTPFileSystem.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/sftp/SFTPFileSystem.java index 30cf4d33a95..d91d3914077 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/sftp/SFTPFileSystem.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/sftp/SFTPFileSystem.java @@ -278,7 +278,7 @@ public class SFTPFileSystem extends FileSystem { // block sizes on server. The assumption could be less than ideal. long blockSize = DEFAULT_BLOCK_SIZE; long modTime = attr.getMTime() * 1000; // convert to milliseconds - long accessTime = 0; + long accessTime = attr.getATime() * 1000L; FsPermission permission = getPermissions(sftpFile); // not be able to get the real user group name, just use the user and group // id diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/sftp/TestSFTPFileSystem.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/sftp/TestSFTPFileSystem.java index 8dc53244f3b..9b514e10e5c 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/sftp/TestSFTPFileSystem.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/sftp/TestSFTPFileSystem.java @@ -19,6 +19,8 @@ package org.apache.hadoop.fs.sftp; import java.io.IOException; import java.net.URI; +import java.nio.file.Files; +import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -28,6 +30,7 @@ import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.LocalFileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.test.GenericTestUtils; @@ -305,4 +308,15 @@ public class TestSFTPFileSystem { sftpFs.rename(file1, file2); } + @Test + public void testGetAccessTime() throws IOException { + Path file = touch(localFs, name.getMethodName().toLowerCase()); + LocalFileSystem local = (LocalFileSystem)localFs; + java.nio.file.Path path = (local).pathToFile(file).toPath(); + long accessTime1 = Files.readAttributes(path, BasicFileAttributes.class) + .lastAccessTime().toMillis(); + long accessTime2 = sftpFs.getFileStatus(file).getAccessTime(); + assertEquals(accessTime1, accessTime2); + } + }