diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/FsDatasetImpl.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/FsDatasetImpl.java index 2928a52816f..8ad83c8149d 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/FsDatasetImpl.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/FsDatasetImpl.java @@ -3206,11 +3206,6 @@ boolean reserveLockedMemory(long bytesNeeded) { return cacheManager.reserve(bytesNeeded) > 0; } - @VisibleForTesting - public int getNonPersistentReplicas() { - return ramDiskReplicaTracker.numReplicasNotPersisted(); - } - @VisibleForTesting public void setTimer(Timer newTimer) { this.timer = newTimer; diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/TestLazyPersistReplicaRecovery.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/TestLazyPersistReplicaRecovery.java index 5fa470c86e0..537f9e8d621 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/TestLazyPersistReplicaRecovery.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/TestLazyPersistReplicaRecovery.java @@ -19,13 +19,6 @@ package org.apache.hadoop.hdfs.server.datanode.fsdataset.impl; import org.apache.hadoop.fs.Path; -import org.apache.hadoop.hdfs.client.BlockReportOptions; -import org.apache.hadoop.hdfs.server.blockmanagement.DatanodeDescriptor; -import org.apache.hadoop.hdfs.server.blockmanagement.DatanodeStorageInfo; -import org.apache.hadoop.hdfs.server.datanode.DataNode; -import org.apache.hadoop.hdfs.server.datanode.DataNodeTestUtils; -import org.apache.hadoop.hdfs.server.namenode.FSNamesystem; -import org.apache.hadoop.hdfs.server.namenode.NameNodeAdapter; import org.apache.hadoop.test.GenericTestUtils; import org.junit.Test; @@ -34,7 +27,6 @@ import static org.apache.hadoop.fs.StorageType.DEFAULT; import static org.apache.hadoop.fs.StorageType.RAM_DISK; -import static org.junit.Assert.assertTrue; public class TestLazyPersistReplicaRecovery extends LazyPersistTestCase { @Test @@ -42,10 +34,6 @@ public void testDnRestartWithSavedReplicas() throws IOException, InterruptedException, TimeoutException { getClusterBuilder().build(); - FSNamesystem fsn = cluster.getNamesystem(); - final DataNode dn = cluster.getDataNodes().get(0); - DatanodeDescriptor dnd = - NameNodeAdapter.getDatanode(fsn, dn.getDatanodeId()); final String METHOD_NAME = GenericTestUtils.getMethodName(); Path path1 = new Path("/" + METHOD_NAME + ".01.dat"); @@ -54,17 +42,14 @@ public void testDnRestartWithSavedReplicas() // Sleep for a short time to allow the lazy writer thread to do its job. // However the block replica should not be evicted from RAM_DISK yet. - FsDatasetImpl fsDImpl = (FsDatasetImpl) DataNodeTestUtils.getFSDataset(dn); - GenericTestUtils - .waitFor(() -> fsDImpl.getNonPersistentReplicas() == 0, 10, - 3 * LAZY_WRITER_INTERVAL_SEC * 1000); + Thread.sleep(3 * LAZY_WRITER_INTERVAL_SEC * 1000); ensureFileReplicasOnStorageType(path1, RAM_DISK); LOG.info("Restarting the DataNode"); - assertTrue("DN did not restart properly", - cluster.restartDataNode(0, true)); - // wait for blockreport - waitForBlockReport(dn, dnd); + cluster.restartDataNode(0, true); + cluster.waitActive(); + triggerBlockReport(); + // Ensure that the replica is now on persistent storage. ensureFileReplicasOnStorageType(path1, DEFAULT); } @@ -88,20 +73,4 @@ public void testDnRestartWithUnsavedReplicas() // Ensure that the replica is still on transient storage. ensureFileReplicasOnStorageType(path1, RAM_DISK); } - - private boolean waitForBlockReport(final DataNode dn, - final DatanodeDescriptor dnd) throws IOException, InterruptedException { - final DatanodeStorageInfo storage = dnd.getStorageInfos()[0]; - final long lastCount = storage.getBlockReportCount(); - dn.triggerBlockReport( - new BlockReportOptions.Factory().setIncremental(false).build()); - try { - GenericTestUtils - .waitFor(() -> lastCount != storage.getBlockReportCount(), 10, 10000); - } catch (TimeoutException te) { - LOG.error("Timeout waiting for block report for {}", dnd); - return false; - } - return true; - } }