HDFS-14632. Reduce useless #getNumLiveDataNodes call in SafeModeMonitor. Contributed by He Xiaoqiao.
(cherry picked from commit993dc8726b
) (cherry picked from commit69f1c8d77b
)
This commit is contained in:
parent
fe40fbbd4d
commit
2e1afa9a86
|
@ -309,6 +309,7 @@ class BlockManagerSafeMode {
|
|||
}
|
||||
}
|
||||
|
||||
if (datanodeThreshold > 0) {
|
||||
int numLive = blockManager.getDatanodeManager().getNumLiveDataNodes();
|
||||
if (numLive < datanodeThreshold) {
|
||||
msg += String.format(
|
||||
|
@ -320,6 +321,9 @@ class BlockManagerSafeMode {
|
|||
+ "the minimum number %d. ",
|
||||
numLive, datanodeThreshold);
|
||||
}
|
||||
} else {
|
||||
msg += "The minimum number of live datanodes is not required. ";
|
||||
}
|
||||
|
||||
if (getBytesInFuture() > 0) {
|
||||
msg += "Name node detected blocks with generation stamps " +
|
||||
|
|
|
@ -201,11 +201,11 @@ public class TestSafeMode {
|
|||
final NameNode nn = cluster.getNameNode();
|
||||
|
||||
String status = nn.getNamesystem().getSafemode();
|
||||
assertEquals("Safe mode is ON. The reported blocks 0 needs additional " +
|
||||
"14 blocks to reach the threshold 0.9990 of total blocks 15." + NEWLINE +
|
||||
"The number of live datanodes 0 has reached the minimum number 0. " +
|
||||
"Safe mode will be turned off automatically once the thresholds " +
|
||||
"have been reached.", status);
|
||||
assertEquals("Safe mode is ON. The reported blocks 0 needs additional "
|
||||
+ "14 blocks to reach the threshold 0.9990 of total blocks 15."
|
||||
+ NEWLINE + "The minimum number of live datanodes is not required. "
|
||||
+ "Safe mode will be turned off automatically once the thresholds have "
|
||||
+ "been reached.", status);
|
||||
assertFalse("Mis-replicated block queues should not be initialized " +
|
||||
"until threshold is crossed",
|
||||
NameNodeAdapter.safeModeInitializedReplQueues(nn));
|
||||
|
|
|
@ -456,6 +456,31 @@ public class TestBlockManagerSafeMode {
|
|||
assertTrue(tip.contains("Safe mode will be turned off automatically soon"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get safe mode tip without minimum number of live datanodes required.
|
||||
*/
|
||||
@Test
|
||||
public void testGetSafeModeTipsWithoutNumLiveDatanode() throws IOException {
|
||||
Configuration conf = new HdfsConfiguration();
|
||||
conf.setDouble(DFSConfigKeys.DFS_NAMENODE_SAFEMODE_THRESHOLD_PCT_KEY,
|
||||
THRESHOLD);
|
||||
conf.setInt(DFSConfigKeys.DFS_NAMENODE_SAFEMODE_EXTENSION_KEY,
|
||||
EXTENSION);
|
||||
conf.setInt(DFSConfigKeys.DFS_NAMENODE_SAFEMODE_MIN_DATANODES_KEY, 0);
|
||||
|
||||
NameNode.initMetrics(conf, NamenodeRole.NAMENODE);
|
||||
|
||||
BlockManager blockManager = spy(new BlockManager(fsn, false, conf));
|
||||
|
||||
BlockManagerSafeMode safeMode = new BlockManagerSafeMode(blockManager,
|
||||
fsn, false, conf);
|
||||
safeMode.activate(BLOCK_TOTAL);
|
||||
String tip = safeMode.getSafeModeTip();
|
||||
|
||||
assertTrue(tip.contains("The minimum number of live datanodes is not "
|
||||
+ "required."));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get safe mode tip in case of blocks with future GS.
|
||||
*/
|
||||
|
|
|
@ -493,13 +493,22 @@ public class TestHASafeMode {
|
|||
int numNodes, int nodeThresh) {
|
||||
String status = nn.getNamesystem().getSafemode();
|
||||
if (safe == total) {
|
||||
if (nodeThresh == 0) {
|
||||
assertTrue("Bad safemode status: '" + status + "'",
|
||||
status.startsWith("Safe mode is ON. The reported blocks " + safe
|
||||
+ " has reached the " + "threshold 0.9990 of total blocks "
|
||||
+ total + ". The minimum number of live datanodes is not "
|
||||
+ "required. In safe mode extension. Safe mode will be turned "
|
||||
+ "off automatically"));
|
||||
} else {
|
||||
assertTrue("Bad safemode status: '" + status + "'",
|
||||
status.startsWith(
|
||||
"Safe mode is ON. The reported blocks " + safe + " has reached the "
|
||||
+ "threshold 0.9990 of total blocks " + total + ". The number of "
|
||||
+ "live datanodes " + numNodes + " has reached the minimum number "
|
||||
+ nodeThresh + ". In safe mode extension. "
|
||||
+ "Safe mode will be turned off automatically"));
|
||||
"Safe mode is ON. The reported blocks " + safe + " has reached "
|
||||
+ "the threshold 0.9990 of total blocks " + total + ". The "
|
||||
+ "number of live datanodes " + numNodes + " has reached "
|
||||
+ "the minimum number " + nodeThresh + ". In safe mode "
|
||||
+ "extension. Safe mode will be turned off automatically"));
|
||||
}
|
||||
} else {
|
||||
int additional = (int) (total * 0.9990) - safe;
|
||||
assertTrue("Bad safemode status: '" + status + "'",
|
||||
|
@ -568,9 +577,9 @@ public class TestHASafeMode {
|
|||
assertTrue("Bad safemode status: '" + status + "'",
|
||||
status.startsWith(
|
||||
"Safe mode is ON. The reported blocks 10 has reached the threshold "
|
||||
+ "0.9990 of total blocks 10. The number of live datanodes 3 has "
|
||||
+ "reached the minimum number 0. In safe mode extension. "
|
||||
+ "Safe mode will be turned off automatically"));
|
||||
+ "0.9990 of total blocks 10. The minimum number of live datanodes is "
|
||||
+ "not required. In safe mode extension. Safe mode will be turned off "
|
||||
+ "automatically"));
|
||||
|
||||
// Delete those blocks while the SBN is in safe mode.
|
||||
// Immediately roll the edit log before the actual deletions are sent
|
||||
|
|
Loading…
Reference in New Issue