Details
-
Bug
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
2.7.1
-
Reviewed
Description
In TestBlockReplacement#testThrottler, it use a fault variable to calculate the ended bandwidth. It use variable totalBytes rathe than final variable TOTAL_BYTES. And the value of TOTAL_BYTES is set to bytesToSend. The totalBytes looks no meaning here and this will make totalBytes*1000/(end-start) always be 0 and the comparison always true. The method code is below:
@Test public void testThrottler() throws IOException { Configuration conf = new HdfsConfiguration(); FileSystem.setDefaultUri(conf, "hdfs://localhost:0"); long bandwidthPerSec = 1024*1024L; final long TOTAL_BYTES =6*bandwidthPerSec; long bytesToSend = TOTAL_BYTES; long start = Time.monotonicNow(); DataTransferThrottler throttler = new DataTransferThrottler(bandwidthPerSec); long totalBytes = 0L; long bytesSent = 1024*512L; // 0.5MB throttler.throttle(bytesSent); bytesToSend -= bytesSent; bytesSent = 1024*768L; // 0.75MB throttler.throttle(bytesSent); bytesToSend -= bytesSent; try { Thread.sleep(1000); } catch (InterruptedException ignored) {} throttler.throttle(bytesToSend); long end = Time.monotonicNow(); assertTrue(totalBytes*1000/(end-start)<=bandwidthPerSec); }