You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by le...@apache.org on 2016/05/12 22:48:33 UTC
hadoop git commit: HDFS-9389. Add maintenance states to AdminStates.
(Ming Ma via lei)
Repository: hadoop
Updated Branches:
refs/heads/branch-2 bb95a5e18 -> 782441d47
HDFS-9389. Add maintenance states to AdminStates. (Ming Ma via lei)
(cherry picked from commit a2774debf71b809f9cd9202c0e75a41a8dd191d0)
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/782441d4
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/782441d4
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/782441d4
Branch: refs/heads/branch-2
Commit: 782441d47ec43e96be1de898c52cca36d3ee213f
Parents: bb95a5e
Author: Lei Xu <le...@apache.org>
Authored: Thu May 12 15:42:54 2016 -0700
Committer: Lei Xu <le...@apache.org>
Committed: Thu May 12 15:44:07 2016 -0700
----------------------------------------------------------------------
.../hadoop/hdfs/protocol/DatanodeInfo.java | 59 +++++++++++++++++++-
.../hadoop/hdfs/protocolPB/PBHelperClient.java | 8 +++
.../src/main/proto/hdfs.proto | 2 +
.../server/namenode/TestNameNodeMXBean.java | 24 ++++++--
4 files changed, 88 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/782441d4/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/protocol/DatanodeInfo.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/protocol/DatanodeInfo.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/protocol/DatanodeInfo.java
index 96075fc..2a305a8 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/protocol/DatanodeInfo.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/protocol/DatanodeInfo.java
@@ -59,7 +59,9 @@ public class DatanodeInfo extends DatanodeID implements Node {
public enum AdminStates {
NORMAL("In Service"),
DECOMMISSION_INPROGRESS("Decommission In Progress"),
- DECOMMISSIONED("Decommissioned");
+ DECOMMISSIONED("Decommissioned"),
+ ENTERING_MAINTENANCE("Entering Maintenance"),
+ IN_MAINTENANCE("In Maintenance");
final String value;
@@ -376,6 +378,10 @@ public class DatanodeInfo extends DatanodeID implements Node {
buffer.append("Decommissioned\n");
} else if (isDecommissionInProgress()) {
buffer.append("Decommission in progress\n");
+ } else if (isInMaintenance()) {
+ buffer.append("In maintenance\n");
+ } else if (isEnteringMaintenance()) {
+ buffer.append("Entering maintenance\n");
} else {
buffer.append("Normal\n");
}
@@ -428,6 +434,10 @@ public class DatanodeInfo extends DatanodeID implements Node {
buffer.append(" DD");
} else if (isDecommissionInProgress()) {
buffer.append(" DP");
+ } else if (isInMaintenance()) {
+ buffer.append(" IM");
+ } else if (isEnteringMaintenance()) {
+ buffer.append(" EM");
} else {
buffer.append(" IN");
}
@@ -487,6 +497,53 @@ public class DatanodeInfo extends DatanodeID implements Node {
}
/**
+ * Put a node to maintenance mode.
+ */
+ public void startMaintenance() {
+ adminState = AdminStates.ENTERING_MAINTENANCE;
+ }
+
+ /**
+ * Put a node to maintenance mode.
+ */
+ public void setInMaintenance() {
+ adminState = AdminStates.IN_MAINTENANCE;
+ }
+
+ /**
+ * Take the node out of maintenance mode.
+ */
+ public void stopMaintenance() {
+ adminState = null;
+ }
+
+ /**
+ * Returns true if the node is is entering_maintenance
+ */
+ public boolean isEnteringMaintenance() {
+ return adminState == AdminStates.ENTERING_MAINTENANCE;
+ }
+
+ /**
+ * Returns true if the node is in maintenance
+ */
+ public boolean isInMaintenance() {
+ return adminState == AdminStates.IN_MAINTENANCE;
+ }
+
+ /**
+ * Returns true if the node is entering or in maintenance
+ */
+ public boolean isMaintenance() {
+ return (adminState == AdminStates.ENTERING_MAINTENANCE ||
+ adminState == AdminStates.IN_MAINTENANCE);
+ }
+
+ public boolean isInService() {
+ return getAdminState() == AdminStates.NORMAL;
+ }
+
+ /**
* Retrieves the admin state of this node.
*/
public AdminStates getAdminState() {
http://git-wip-us.apache.org/repos/asf/hadoop/blob/782441d4/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/protocolPB/PBHelperClient.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/protocolPB/PBHelperClient.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/protocolPB/PBHelperClient.java
index 80f0d4f..bbe360f 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/protocolPB/PBHelperClient.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/protocolPB/PBHelperClient.java
@@ -264,6 +264,10 @@ public class PBHelperClient {
case DECOMMISSION_INPROGRESS:
return DatanodeInfoProto.AdminState.DECOMMISSION_INPROGRESS;
case DECOMMISSIONED: return DatanodeInfoProto.AdminState.DECOMMISSIONED;
+ case ENTERING_MAINTENANCE:
+ return DatanodeInfoProto.AdminState.ENTERING_MAINTENANCE;
+ case IN_MAINTENANCE:
+ return DatanodeInfoProto.AdminState.IN_MAINTENANCE;
default: return DatanodeInfoProto.AdminState.NORMAL;
}
}
@@ -589,6 +593,10 @@ public class PBHelperClient {
return AdminStates.DECOMMISSION_INPROGRESS;
case DECOMMISSIONED:
return AdminStates.DECOMMISSIONED;
+ case ENTERING_MAINTENANCE:
+ return AdminStates.ENTERING_MAINTENANCE;
+ case IN_MAINTENANCE:
+ return AdminStates.IN_MAINTENANCE;
case NORMAL:
default:
return AdminStates.NORMAL;
http://git-wip-us.apache.org/repos/asf/hadoop/blob/782441d4/hadoop-hdfs-project/hadoop-hdfs-client/src/main/proto/hdfs.proto
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/proto/hdfs.proto b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/proto/hdfs.proto
index 5d7b601..d781fc4 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/proto/hdfs.proto
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/proto/hdfs.proto
@@ -92,6 +92,8 @@ message DatanodeInfoProto {
NORMAL = 0;
DECOMMISSION_INPROGRESS = 1;
DECOMMISSIONED = 2;
+ ENTERING_MAINTENANCE = 3;
+ IN_MAINTENANCE = 4;
}
optional AdminState adminState = 10 [default = NORMAL];
http://git-wip-us.apache.org/repos/asf/hadoop/blob/782441d4/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeMXBean.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeMXBean.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeMXBean.java
index 3bc318d..c9b0aa1 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeMXBean.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeMXBean.java
@@ -27,6 +27,7 @@ import org.apache.hadoop.hdfs.DFSConfigKeys;
import org.apache.hadoop.hdfs.DFSTestUtil;
import org.apache.hadoop.hdfs.MiniDFSCluster;
import org.apache.hadoop.hdfs.MiniDFSNNTopology;
+import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
import org.apache.hadoop.hdfs.protocol.HdfsConstants.SafeModeAction;
import org.apache.hadoop.hdfs.server.blockmanagement.DatanodeDescriptor;
import org.apache.hadoop.hdfs.server.blockmanagement.DatanodeManager;
@@ -56,6 +57,7 @@ import java.util.concurrent.TimeUnit;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
/**
@@ -93,6 +95,12 @@ public class TestNameNodeMXBean {
dd.setUpgradeDomain(upgradeDomain);
String dnXferAddrWithUpgradeDomainSet = dd.getXferAddr();
+ // Put the second DN to maintenance state.
+ DatanodeDescriptor maintenanceNode = dm.getDatanode(
+ cluster.getDataNodes().get(1).getDatanodeId());
+ maintenanceNode.setInMaintenance();
+ String dnXferAddrInMaintenance = maintenanceNode.getXferAddr();
+
FSNamesystem fsn = cluster.getNameNode().namesystem;
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
@@ -151,6 +159,10 @@ public class TestNameNodeMXBean {
} else {
assertTrue(liveNode.get("upgradeDomain").equals(upgradeDomain));
}
+ // "adminState" is set to maintenance only for the specific dn.
+ boolean inMaintenance = liveNode.get("adminState").equals(
+ DatanodeInfo.AdminStates.IN_MAINTENANCE.toString());
+ assertFalse(xferAddr.equals(dnXferAddrInMaintenance) ^ inMaintenance);
}
assertEquals(fsn.getLiveNodes(), alivenodeinfo);
// get attribute deadnodeinfo
@@ -164,7 +176,8 @@ public class TestNameNodeMXBean {
// get attribute NameJournalStatus
String nameJournalStatus = (String) (mbs.getAttribute(mxbeanName,
"NameJournalStatus"));
- assertEquals("Bad value for NameJournalStatus", fsn.getNameJournalStatus(), nameJournalStatus);
+ assertEquals("Bad value for NameJournalStatus",
+ fsn.getNameJournalStatus(), nameJournalStatus);
// get attribute JournalTransactionInfo
String journalTxnInfo = (String) mbs.getAttribute(mxbeanName,
"JournalTransactionInfo");
@@ -172,11 +185,13 @@ public class TestNameNodeMXBean {
journalTxnInfo);
// get attribute "CompileInfo"
String compileInfo = (String) mbs.getAttribute(mxbeanName, "CompileInfo");
- assertEquals("Bad value for CompileInfo", fsn.getCompileInfo(), compileInfo);
+ assertEquals("Bad value for CompileInfo", fsn.getCompileInfo(),
+ compileInfo);
// get attribute CorruptFiles
String corruptFiles = (String) (mbs.getAttribute(mxbeanName,
"CorruptFiles"));
- assertEquals("Bad value for CorruptFiles", fsn.getCorruptFiles(), corruptFiles);
+ assertEquals("Bad value for CorruptFiles", fsn.getCorruptFiles(),
+ corruptFiles);
// get attribute NameDirStatuses
String nameDirStatuses = (String) (mbs.getAttribute(mxbeanName,
"NameDirStatuses"));
@@ -188,7 +203,8 @@ public class TestNameNodeMXBean {
File nameDir = new File(nameDirUri);
System.out.println("Checking for the presence of " + nameDir +
" in active name dirs.");
- assertTrue(statusMap.get("active").containsKey(nameDir.getAbsolutePath()));
+ assertTrue(statusMap.get("active").containsKey(
+ nameDir.getAbsolutePath()));
}
assertEquals(2, statusMap.get("active").size());
assertEquals(0, statusMap.get("failed").size());
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org