HDFS-10915. Fix time measurement bug in TestDatanodeRestart. Contributed by Xiaobing Zhou

This commit is contained in:
Mingliang Liu 2016-09-27 20:40:17 -07:00
parent 9c9736463b
commit 6437ba18c5

View File

@ -45,6 +45,7 @@
import org.apache.hadoop.hdfs.server.datanode.fsdataset.FsDatasetSpi;
import org.apache.hadoop.hdfs.server.datanode.fsdataset.FsVolumeSpi;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Time;
import org.junit.Assert;
import org.junit.Test;
@ -172,17 +173,17 @@ public void noRegistration() throws IOException {
cluster = new MiniDFSCluster.Builder(conf).numDataNodes(numDNs).build();
cluster.waitActive();
start = System.currentTimeMillis();
start = Time.monotonicNow();
FileSystem fileSys = cluster.getFileSystem();
try {
DFSTestUtil.createFile(fileSys, file, 10240L, (short)1, 0L);
// It is a bug if this does not fail.
throw new IOException("Did not fail!");
} catch (org.apache.hadoop.ipc.RemoteException e) {
long elapsed = System.currentTimeMillis() - start;
long elapsed = Time.monotonicNow() - start;
// timers have at-least semantics, so it should be at least 5 seconds.
if (elapsed < 5000 || elapsed > 10000) {
throw new IOException(elapsed + " seconds passed.", e);
throw new IOException(elapsed + " milliseconds passed.", e);
}
}
DataNodeFaultInjector.set(oldDnInjector);
@ -195,18 +196,18 @@ public void noRegistration() throws IOException {
// back to simulating unregistered node.
DataNodeFaultInjector.set(dnFaultInjector);
byte[] buffer = new byte[8];
start = System.currentTimeMillis();
start = Time.monotonicNow();
try {
fileSys.open(file).read(0L, buffer, 0, 1);
throw new IOException("Did not fail!");
} catch (IOException e) {
long elapsed = System.currentTimeMillis() - start;
long elapsed = Time.monotonicNow() - start;
if (e.getMessage().contains("readBlockLength")) {
throw new IOException("Failed, but with unexpected exception:", e);
}
// timers have at-least semantics, so it should be at least 5 seconds.
if (elapsed < 5000 || elapsed > 10000) {
throw new IOException(elapsed + " seconds passed.", e);
throw new IOException(elapsed + " milliseconds passed.", e);
}
}
DataNodeFaultInjector.set(oldDnInjector);