This is an automated email from the ASF dual-hosted git repository.

vinayakumarb pushed a commit to branch branch-3.2
in repository https://gitbox.apache.org/repos/asf/hadoop.git


The following commit(s) were added to refs/heads/branch-3.2 by this push:
     new 8c6478b  HADOOP-17306. RawLocalFileSystem's lastModifiedTime() looses 
milli seconds in JDK < 10.b09 (#2387)
8c6478b is described below

commit 8c6478b4058025e01e81a6c372ec3e9dfa36f196
Author: Vinayakumar B <vinayakum...@apache.org>
AuthorDate: Fri Oct 23 11:30:02 2020 +0530

    HADOOP-17306. RawLocalFileSystem's lastModifiedTime() looses milli seconds 
in JDK < 10.b09 (#2387)
---
 .../org/apache/hadoop/fs/RawLocalFileSystem.java   | 11 +++++++---
 .../hadoop/fs/TestRawLocalFileSystemContract.java  | 25 ++++++++++++++++++++++
 2 files changed, 33 insertions(+), 3 deletions(-)

diff --git 
a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/RawLocalFileSystem.java
 
b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/RawLocalFileSystem.java
index cf22105..5a9a44a 100644
--- 
a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/RawLocalFileSystem.java
+++ 
b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/RawLocalFileSystem.java
@@ -71,7 +71,12 @@ public class RawLocalFileSystem extends FileSystem {
   public static void useStatIfAvailable() {
     useDeprecatedFileStatus = !Stat.isAvailable();
   }
-  
+
+  @VisibleForTesting
+  static void setUseDeprecatedFileStatus(boolean useDeprecatedFileStatus) {
+    RawLocalFileSystem.useDeprecatedFileStatus = useDeprecatedFileStatus;
+  }
+
   public RawLocalFileSystem() {
     workingDir = getInitialWorkingDirectory();
   }
@@ -693,8 +698,8 @@ public class RawLocalFileSystem extends FileSystem {
     DeprecatedRawLocalFileStatus(File f, long defaultBlockSize, FileSystem fs)
       throws IOException {
       super(f.length(), f.isDirectory(), 1, defaultBlockSize,
-          f.lastModified(), getLastAccessTime(f),
-          null, null, null,
+          Files.getLastModifiedTime(f.toPath()).toMillis(),
+          getLastAccessTime(f),null, null, null,
           new Path(f.getPath()).makeQualified(fs.getUri(),
             fs.getWorkingDirectory()));
     }
diff --git 
a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestRawLocalFileSystemContract.java
 
b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestRawLocalFileSystemContract.java
index 3892f16..0d57e8f 100644
--- 
a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestRawLocalFileSystemContract.java
+++ 
b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestRawLocalFileSystemContract.java
@@ -18,6 +18,7 @@
 package org.apache.hadoop.fs;
 
 import java.io.File;
+import java.io.IOException;
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.test.GenericTestUtils;
@@ -167,4 +168,28 @@ public class TestRawLocalFileSystemContract extends 
FileSystemContractBaseTest {
     }
   }
 
+  @Test
+  public void testMTimeAtime() throws IOException {
+    RawLocalFileSystem.setUseDeprecatedFileStatus(true);
+    try {
+      Path testDir = getTestBaseDir();
+      String testFilename = "testmtime";
+      Path path = new Path(testDir, testFilename);
+      Path file = new Path(path, "file");
+      fs.create(file);
+      long now = System.currentTimeMillis();
+      long mtime = (now % 1000 == 0) ? now + 1 : now;
+      long atime = (now % 1000 == 0) ? now + 2 : now;
+      fs.setTimes(file, mtime, atime);
+      FileStatus fileStatus = fs.getFileStatus(file);
+      if (!Shell.MAC) {
+        // HADOOP-17306 ; Skip MacOS because HFS+ does not support
+        // milliseconds for mtime.
+        assertEquals(mtime, fileStatus.getModificationTime());
+      }
+      assertEquals(atime, fileStatus.getAccessTime());
+    } finally {
+      RawLocalFileSystem.useStatIfAvailable();
+    }
+  }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-commits-h...@hadoop.apache.org

Reply via email to