HDFS-11140. Directory Scanner should log startup message time correctly. Contributed by Yiqun Lin.

This commit is contained in:
Akira Ajisaka 2016-12-08 13:34:45 +09:00
parent f54afdb83b
commit 0857641f62
2 changed files with 17 additions and 4 deletions

View File

@ -791,6 +791,15 @@ public class RawLocalFileSystem extends FileSystem {
pathToFile(p).toPath(), BasicFileAttributeView.class);
FileTime fmtime = (mtime >= 0) ? FileTime.fromMillis(mtime) : null;
FileTime fatime = (atime >= 0) ? FileTime.fromMillis(atime) : null;
// On some macOS environment, BasicFileAttributeView.setTimes
// does not set times correctly when the argument of accessTime is null.
// TODO: Remove this after the issue is fixed.
if (fatime == null && Shell.MAC) {
FileStatus f = getFileStatus(p);
fatime = FileTime.fromMillis(f.getAccessTime());
}
view.setTimes(fmtime, fatime, null);
} catch (NoSuchFileException e) {
throw new FileNotFoundException("File " + p + " does not exist");

View File

@ -37,6 +37,8 @@ import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import org.apache.commons.lang.time.FastDateFormat;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.classification.InterfaceAudience;
@ -61,7 +63,7 @@ public class DirectoryScanner implements Runnable {
private static final int MILLIS_PER_SECOND = 1000;
private static final String START_MESSAGE =
"Periodic Directory Tree Verification scan"
+ " starting at %dms with interval of %dms";
+ " starting at %s with interval of %dms";
private static final String START_MESSAGE_WITH_THROTTLE = START_MESSAGE
+ " and throttle limit of %dms/s";
@ -268,10 +270,12 @@ public class DirectoryScanner implements Runnable {
String logMsg;
if (throttleLimitMsPerSec < MILLIS_PER_SECOND) {
logMsg = String.format(START_MESSAGE_WITH_THROTTLE, firstScanTime,
scanPeriodMsecs, throttleLimitMsPerSec);
logMsg = String.format(START_MESSAGE_WITH_THROTTLE,
FastDateFormat.getInstance().format(firstScanTime), scanPeriodMsecs,
throttleLimitMsPerSec);
} else {
logMsg = String.format(START_MESSAGE, firstScanTime, scanPeriodMsecs);
logMsg = String.format(START_MESSAGE,
FastDateFormat.getInstance().format(firstScanTime), scanPeriodMsecs);
}
LOG.info(logMsg);