Enhance fsTick() to use filesystem timer resolution
RepositoryTestCase.fsTick() was was waiting 64, 128, 256, ... milliseconds until it detected that the filesystem timer has ticked. Make use of the filesystemtimer resolution information in FS to sleep a fraction of the filesystem timer resolution. That raises probability to wake up shortly after the filesystem timer has ticked. Change-Id: Ibcc38576e42ece13b2fd4423a29c459eed167a69
This commit is contained in:
parent
b5c594216b
commit
b2ee9cfbc3
|
@ -349,7 +349,8 @@ public static String slashify(String str) {
|
|||
* younger modification timestamp than the modification timestamp of the
|
||||
* given file. This is done by touching a temporary file, reading the
|
||||
* lastmodified attribute and, if needed, sleeping. After sleeping this loop
|
||||
* starts again until the filesystem timer has advanced enough.
|
||||
* starts again until the filesystem timer has advanced enough. The
|
||||
* temporary file will be created as a sibling of lastFile.
|
||||
*
|
||||
* @param lastFile
|
||||
* the file on which we want to wait until the filesystem timer
|
||||
|
@ -362,18 +363,25 @@ public static String slashify(String str) {
|
|||
*/
|
||||
public static long fsTick(File lastFile) throws InterruptedException,
|
||||
IOException {
|
||||
long sleepTime = 64;
|
||||
File tmp;
|
||||
FS fs = FS.DETECTED;
|
||||
if (lastFile != null && !fs.exists(lastFile))
|
||||
if (lastFile == null) {
|
||||
lastFile = tmp = File
|
||||
.createTempFile("fsTickTmpFile", null);
|
||||
} else {
|
||||
if (!fs.exists(lastFile)) {
|
||||
throw new FileNotFoundException(lastFile.getPath());
|
||||
File tmp = File.createTempFile("FileTreeIteratorWithTimeControl", null);
|
||||
}
|
||||
tmp = File.createTempFile("fsTickTmpFile", null,
|
||||
lastFile.getParentFile());
|
||||
}
|
||||
long res = FS.getFsTimerResolution(tmp.toPath()).toMillis();
|
||||
long sleepTime = res / 10;
|
||||
try {
|
||||
long startTime = (lastFile == null) ? fs.lastModified(tmp) : fs
|
||||
.lastModified(lastFile);
|
||||
long startTime = fs.lastModified(lastFile);
|
||||
long actTime = fs.lastModified(tmp);
|
||||
while (actTime <= startTime) {
|
||||
Thread.sleep(sleepTime);
|
||||
sleepTime *= 2;
|
||||
FileUtils.touch(tmp.toPath());
|
||||
actTime = fs.lastModified(tmp);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue