HADOOP-17306. RawLocalFileSystem's lastModifiedTime() looses milli seconds in JDK < 10.b09 (#2387)
This commit is contained in:
parent
f363c3b315
commit
8c6478b405
|
@ -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()));
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue