diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMXBean.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMXBean.java index 2a3ed3b4fd..e7b2c7cf5d 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMXBean.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/TestDataNodeMXBean.java @@ -25,11 +25,13 @@ import javax.management.MBeanServer; import javax.management.ObjectName; +import com.google.common.base.Supplier; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hdfs.DFSTestUtil; import org.apache.hadoop.hdfs.MiniDFSCluster; +import org.apache.hadoop.test.GenericTestUtils; import org.junit.Assert; import org.junit.Test; import org.mortbay.util.ajax.JSON; @@ -119,10 +121,18 @@ public void testDataNodeMXBeanBlockCount() throws Exception { cluster.waitActive(); assertEquals("After restart DN", 5, getTotalNumBlocks(mbs, mxbeanName)); fs.delete(new Path("/tmp.txt1"), true); - // Wait till replica gets deleted on disk. - Thread.sleep(5000); - assertEquals("After delete one file", 4, - getTotalNumBlocks(mbs, mxbeanName)); + // The total numBlocks should be updated after one file is deleted + GenericTestUtils.waitFor(new Supplier() { + @Override + public Boolean get() { + try { + return getTotalNumBlocks(mbs, mxbeanName) == 4; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + }, 100, 30000); } finally { if (cluster != null) { cluster.shutdown(); @@ -131,7 +141,7 @@ public void testDataNodeMXBeanBlockCount() throws Exception { } @SuppressWarnings("unchecked") - int getTotalNumBlocks(MBeanServer mbs, ObjectName mxbeanName) + private int getTotalNumBlocks(MBeanServer mbs, ObjectName mxbeanName) throws Exception { int totalBlocks = 0; String volumeInfo = (String) mbs.getAttribute(mxbeanName, "VolumeInfo");