HDFS-14952. Skip safemode if blockTotal is 0 in new NN. Contributed by Xiaoqiao He.

Signed-off-by: Wei-Chiu Chuang <weichiu@apache.org>
Reviewed-by: Mukul Kumar Singh <msingh@apache.org>
(cherry picked from commit 0b50aa29fd5dc114b3e0fc54b5c393bbc9f3102e)
(cherry picked from commit 1d383436f09f8e490171c8f6af4605971ad2f904)
(cherry picked from commit 7909c5df572a5cbc729ebc6c7c6e59f17803d50f)
This commit is contained in:
He Xiaoqiao 2019-11-19 12:15:39 -08:00 committed by Wei-Chiu Chuang
parent 238781ab98
commit ae7469cb67
3 changed files with 22 additions and 3 deletions

View File

@ -208,7 +208,7 @@ void checkSafeMode() {
switch (status) { switch (status) {
case PENDING_THRESHOLD: case PENDING_THRESHOLD:
if (areThresholdsMet()) { if (areThresholdsMet()) {
if (extension > 0) { if (blockTotal > 0 && extension > 0) {
// PENDING_THRESHOLD -> EXTENSION // PENDING_THRESHOLD -> EXTENSION
status = BMSafeModeStatus.EXTENSION; status = BMSafeModeStatus.EXTENSION;
reachedTime.set(monotonicNow()); reachedTime.set(monotonicNow());
@ -507,11 +507,13 @@ void close() {
/** /**
* Get time (counting in milliseconds) left to leave extension period. * Get time (counting in milliseconds) left to leave extension period.
* It should leave safemode at once if blockTotal = 0 rather than wait
* extension time (30s by default).
* *
* Negative value indicates the extension period has passed. * Negative value indicates the extension period has passed.
*/ */
private long timeToLeaveExtension() { private long timeToLeaveExtension() {
return reachedTime.get() + extension - monotonicNow(); return blockTotal > 0 ? reachedTime.get() + extension - monotonicNow() : 0;
} }
/** /**

View File

@ -221,6 +221,15 @@ public Boolean get() {
}, 100, 10000); }, 100, 10000);
} }
@Test
public void testCheckSafeMode8() throws Exception {
bmSafeMode.activate(0);
setBlockSafe(0);
setSafeModeStatus(BMSafeModeStatus.PENDING_THRESHOLD);
bmSafeMode.checkSafeMode();
assertEquals(BMSafeModeStatus.OFF, getSafeModeStatus());
}
/** /**
* Test that the block safe increases up to block threshold. * Test that the block safe increases up to block threshold.
* *

View File

@ -492,7 +492,15 @@ public void testBlocksDeletedInEditLog() throws Exception {
private static void assertSafeMode(NameNode nn, int safe, int total, private static void assertSafeMode(NameNode nn, int safe, int total,
int numNodes, int nodeThresh) { int numNodes, int nodeThresh) {
String status = nn.getNamesystem().getSafemode(); String status = nn.getNamesystem().getSafemode();
if (safe == total) { if (total == 0 && nodeThresh == 0) {
assertTrue("Bad safemode status: '" + status + "'",
status.isEmpty()
|| status.startsWith("Safe mode is ON. The reported blocks 0 " +
"has reached the threshold 0.9990 of total blocks 0. The " +
"minimum number of live datanodes is not required. In safe " +
"mode extension. Safe mode will be turned off automatically " +
"in 0 seconds."));
} else if (safe == total) {
if (nodeThresh == 0) { if (nodeThresh == 0) {
assertTrue("Bad safemode status: '" + status + "'", assertTrue("Bad safemode status: '" + status + "'",
status.startsWith("Safe mode is ON. The reported blocks " + safe status.startsWith("Safe mode is ON. The reported blocks " + safe