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 0b50aa29fd
)
This commit is contained in:
parent
62622ab9c1
commit
5fe9b81941
|
@ -211,7 +211,7 @@ class BlockManagerSafeMode {
|
||||||
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());
|
||||||
|
@ -533,11 +533,13 @@ class BlockManagerSafeMode {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -221,6 +221,15 @@ public class TestBlockManagerSafeMode {
|
||||||
}, 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.
|
||||||
*
|
*
|
||||||
|
|
|
@ -493,7 +493,15 @@ public class TestHASafeMode {
|
||||||
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
|
||||||
|
|
Loading…
Reference in New Issue