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 24fe336e3de..50d190441e9 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 java.util.Map; 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; @@ -100,8 +102,8 @@ public class TestDataNodeMXBean { List datanodes = cluster.getDataNodes(); assertEquals(datanodes.size(), 1); - MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); - ObjectName mxbeanName = + final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); + final ObjectName mxbeanName = new ObjectName("Hadoop:service=DataNode,name=DataNodeInfo"); FileSystem fs = cluster.getFileSystem(); for (int i = 0; i < 5; i++) { @@ -113,10 +115,18 @@ public class TestDataNodeMXBean { 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(); @@ -125,7 +135,7 @@ public class TestDataNodeMXBean { } @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");