From 5d160acba38fa64c89468215b4403028c8ed7dfd Mon Sep 17 00:00:00 2001 From: sarvekshayr Date: Tue, 12 Mar 2024 16:55:06 +0530 Subject: [PATCH 1/8] HDDS-10436. datanode status decommission command should have json output option --- .../DecommissionStatusSubCommand.java | 71 ++++++++++++++++++- 1 file changed, 69 insertions(+), 2 deletions(-) diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java index 464b08099db7..4c64b581dbdd 100644 --- a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java +++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java @@ -28,11 +28,14 @@ import org.apache.hadoop.hdds.scm.cli.ScmSubcommand; import org.apache.hadoop.hdds.scm.client.ScmClient; import org.apache.hadoop.hdds.scm.container.ContainerID; +import org.apache.hadoop.hdds.server.JsonUtils; import picocli.CommandLine; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.util.LinkedHashMap; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @@ -62,6 +65,11 @@ public class DecommissionStatusSubCommand extends ScmSubcommand { defaultValue = "") private String ipAddress; + @CommandLine.Option(names = { "--json" }, + description = "Show output in json format", + defaultValue = "false") + private boolean json; + @Override public void execute(ScmClient scmClient) throws IOException { List decommissioningNodes; @@ -84,8 +92,10 @@ public void execute(ScmClient scmClient) throws IOException { } } else { decommissioningNodes = allNodes.collect(Collectors.toList()); - System.out.println("\nDecommission Status: DECOMMISSIONING - " + - decommissioningNodes.size() + " node(s)"); + if(!json) { + System.out.println("\nDecommission Status: DECOMMISSIONING - " + + decommissioningNodes.size() + " node(s)"); + } } String metricsJson = scmClient.getMetrics("Hadoop:service=StorageContainerManager,name=NodeDecommissionMetrics"); @@ -100,6 +110,22 @@ public void execute(ScmClient scmClient) throws IOException { numDecomNodes = (totalDecom == null ? -1 : Integer.parseInt(totalDecom.toString())); } + if(json) { + List> decommissioningNodesDetails = new ArrayList<>(); + + for (HddsProtos.Node node : decommissioningNodes) { + DatanodeDetails datanode = DatanodeDetails.getFromProtoBuf( + node.getNodeID()); + Map datanodeMap = new LinkedHashMap<>(); + datanodeMap.put("datanodeDetails", getDatanodeDetails(datanode)); + datanodeMap.put("metrics", getCounts(datanode, jsonNode, numDecomNodes)); + datanodeMap.put("containers", getContainers(scmClient, datanode)); + decommissioningNodesDetails.add(datanodeMap); + } + System.out.println(JsonUtils.toJsonStringWithDefaultPrettyPrinter(decommissioningNodesDetails)); + return; + } + for (HddsProtos.Node node : decommissioningNodes) { DatanodeDetails datanode = DatanodeDetails.getFromProtoBuf( node.getNodeID()); @@ -139,4 +165,45 @@ private void printCounts(DatanodeDetails datanode, JsonNode counts, int numDecom System.err.println("Error getting pipeline and container counts for " + datanode.getHostName()); } } + + private Map getDatanodeDetails(DatanodeDetails datanode) { + Map detailsMap = new LinkedHashMap<>(); + detailsMap.put("uuid", datanode.getUuid().toString()); + detailsMap.put("networkLocation", datanode.getNetworkLocation()); + detailsMap.put("ipAddress", datanode.getIpAddress()); + detailsMap.put("hostName", datanode.getHostName()); + return detailsMap; + } + + private Map getCounts(DatanodeDetails datanode, JsonNode counts, int numDecomNodes) { + Map countsMap = new LinkedHashMap<>(); + try { + for (int i = 1; i <= numDecomNodes; i++) { + if (datanode.getHostName().equals(counts.get("tag.datanode." + i).asText())) { + long startTime = Long.parseLong(counts.get("StartTimeDN." + i).toString()); + Date date = new Date(startTime); + DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss z"); + countsMap.put("decommissionStartTime", formatter.format(date)); + countsMap.put("numOfUnclosedPipelines", Integer.parseInt(counts.get("PipelinesWaitingToCloseDN." + i).toString())); + countsMap.put("numOfUnderReplicatedContainers", Double.parseDouble(counts.get("UnderReplicatedDN." + i).toString())); + countsMap.put("numOfUnclosedContainers", Double.parseDouble(counts.get("UnclosedContainersDN." + i).toString())); + return countsMap; + } + } + System.err.println("Error getting pipeline and container metrics for " + datanode.getHostName()); + } catch (NullPointerException ex) { + System.err.println("Error getting pipeline and container metrics for " + datanode.getHostName()); + } + return countsMap; + } + + private Map getContainers(ScmClient scmClient, DatanodeDetails datanode) throws IOException { + Map> containers = scmClient.getContainersOnDecomNode(datanode); + return containers.entrySet().stream() + .collect(Collectors.toMap( + Map.Entry::getKey, + entry -> entry.getValue().stream(). + map(ContainerID::toString). + collect(Collectors.toList()))); + } } From b1c2870e163bfacd21638f6b8b660cc54272303a Mon Sep 17 00:00:00 2001 From: sarvekshayr Date: Tue, 12 Mar 2024 19:02:01 +0530 Subject: [PATCH 2/8] Fixed checkstyle errors --- .../cli/datanode/DecommissionStatusSubCommand.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java index 4c64b581dbdd..fa9a59c9af67 100644 --- a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java +++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java @@ -92,7 +92,7 @@ public void execute(ScmClient scmClient) throws IOException { } } else { decommissioningNodes = allNodes.collect(Collectors.toList()); - if(!json) { + if (!json) { System.out.println("\nDecommission Status: DECOMMISSIONING - " + decommissioningNodes.size() + " node(s)"); } @@ -110,7 +110,7 @@ public void execute(ScmClient scmClient) throws IOException { numDecomNodes = (totalDecom == null ? -1 : Integer.parseInt(totalDecom.toString())); } - if(json) { + if (json) { List> decommissioningNodesDetails = new ArrayList<>(); for (HddsProtos.Node node : decommissioningNodes) { @@ -184,9 +184,12 @@ private Map getCounts(DatanodeDetails datanode, JsonNode counts, Date date = new Date(startTime); DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss z"); countsMap.put("decommissionStartTime", formatter.format(date)); - countsMap.put("numOfUnclosedPipelines", Integer.parseInt(counts.get("PipelinesWaitingToCloseDN." + i).toString())); - countsMap.put("numOfUnderReplicatedContainers", Double.parseDouble(counts.get("UnderReplicatedDN." + i).toString())); - countsMap.put("numOfUnclosedContainers", Double.parseDouble(counts.get("UnclosedContainersDN." + i).toString())); + countsMap.put("numOfUnclosedPipelines", + Integer.parseInt(counts.get("PipelinesWaitingToCloseDN." + i).toString())); + countsMap.put("numOfUnderReplicatedContainers", + Double.parseDouble(counts.get("UnderReplicatedDN." + i).toString())); + countsMap.put("numOfUnclosedContainers", + Double.parseDouble(counts.get("UnclosedContainersDN." + i).toString())); return countsMap; } } From 3d2abbce0dda52e05f1eab03f5b775e81db9edcc Mon Sep 17 00:00:00 2001 From: Sarveksha Yeshavantha Raju <79865743+sarvekshayr@users.noreply.github.com> Date: Wed, 13 Mar 2024 20:14:16 +0530 Subject: [PATCH 3/8] Update hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java Co-authored-by: Devesh Kumar Singh --- .../hdds/scm/cli/datanode/DecommissionStatusSubCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java index fa9a59c9af67..4cd04aad0bdc 100644 --- a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java +++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java @@ -171,7 +171,7 @@ private Map getDatanodeDetails(DatanodeDetails datanode) { detailsMap.put("uuid", datanode.getUuid().toString()); detailsMap.put("networkLocation", datanode.getNetworkLocation()); detailsMap.put("ipAddress", datanode.getIpAddress()); - detailsMap.put("hostName", datanode.getHostName()); + detailsMap.put("hostname", datanode.getHostName()); return detailsMap; } From 90291da080759146da27fd63c345a5e82b906d70 Mon Sep 17 00:00:00 2001 From: sarvekshayr Date: Thu, 14 Mar 2024 11:18:57 +0530 Subject: [PATCH 4/8] Added checked exception --- .../DecommissionStatusSubCommand.java | 46 +++++++++++++------ 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java index 4cd04aad0bdc..d89744476dbc 100644 --- a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java +++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java @@ -146,10 +146,18 @@ private void printCounts(DatanodeDetails datanode, JsonNode counts, int numDecom try { for (int i = 1; i <= numDecomNodes; i++) { if (datanode.getHostName().equals(counts.get("tag.datanode." + i).asText())) { - int pipelines = Integer.parseInt(counts.get("PipelinesWaitingToCloseDN." + i).toString()); - double underReplicated = Double.parseDouble(counts.get("UnderReplicatedDN." + i).toString()); - double unclosed = Double.parseDouble(counts.get("UnclosedContainersDN." + i).toString()); - long startTime = Long.parseLong(counts.get("StartTimeDN." + i).toString()); + JsonNode pipelinesDN = counts.get("PipelinesWaitingToCloseDN." + i); + JsonNode underReplicatedDN = counts.get("UnderReplicatedDN." + i); + JsonNode unclosedDN = counts.get("UnclosedContainersDN." + i); + JsonNode startTimeDN = counts.get("StartTimeDN." + i); + if (pipelinesDN == null || underReplicatedDN == null || unclosedDN == null || startTimeDN == null) { + throw new IOException("Error getting pipeline and container metrics for " + datanode.getHostName()); + } + + int pipelines = Integer.parseInt(pipelinesDN.toString()); + double underReplicated = Double.parseDouble(underReplicatedDN.toString()); + double unclosed = Double.parseDouble(unclosedDN.toString()); + long startTime = Long.parseLong(startTimeDN.toString()); System.out.print("Decommission Started At : "); Date date = new Date(startTime); DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss z"); @@ -160,9 +168,9 @@ private void printCounts(DatanodeDetails datanode, JsonNode counts, int numDecom return; } } - System.err.println("Error getting pipeline and container counts for " + datanode.getHostName()); - } catch (NullPointerException ex) { - System.err.println("Error getting pipeline and container counts for " + datanode.getHostName()); + System.err.println("Error getting pipeline and container metrics for " + datanode.getHostName()); + } catch (IOException e) { + System.err.println("Error getting pipeline and container metrics for " + datanode.getHostName()); } } @@ -180,21 +188,29 @@ private Map getCounts(DatanodeDetails datanode, JsonNode counts, try { for (int i = 1; i <= numDecomNodes; i++) { if (datanode.getHostName().equals(counts.get("tag.datanode." + i).asText())) { - long startTime = Long.parseLong(counts.get("StartTimeDN." + i).toString()); + JsonNode pipelinesDN = counts.get("PipelinesWaitingToCloseDN." + i); + JsonNode underReplicatedDN = counts.get("UnderReplicatedDN." + i); + JsonNode unclosedDN = counts.get("UnclosedContainersDN." + i); + JsonNode startTimeDN = counts.get("StartTimeDN." + i); + if (pipelinesDN == null || underReplicatedDN == null || unclosedDN == null || startTimeDN == null) { + throw new IOException("Error getting pipeline and container metrics for " + datanode.getHostName()); + } + + int pipelines = Integer.parseInt(pipelinesDN.toString()); + double underReplicated = Double.parseDouble(underReplicatedDN.toString()); + double unclosed = Double.parseDouble(unclosedDN.toString()); + long startTime = Long.parseLong(startTimeDN.toString()); Date date = new Date(startTime); DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss z"); countsMap.put("decommissionStartTime", formatter.format(date)); - countsMap.put("numOfUnclosedPipelines", - Integer.parseInt(counts.get("PipelinesWaitingToCloseDN." + i).toString())); - countsMap.put("numOfUnderReplicatedContainers", - Double.parseDouble(counts.get("UnderReplicatedDN." + i).toString())); - countsMap.put("numOfUnclosedContainers", - Double.parseDouble(counts.get("UnclosedContainersDN." + i).toString())); + countsMap.put("numOfUnclosedPipelines", pipelines); + countsMap.put("numOfUnderReplicatedContainers", underReplicated); + countsMap.put("numOfUnclosedContainers", unclosed); return countsMap; } } System.err.println("Error getting pipeline and container metrics for " + datanode.getHostName()); - } catch (NullPointerException ex) { + } catch (IOException e) { System.err.println("Error getting pipeline and container metrics for " + datanode.getHostName()); } return countsMap; From e61a489694cbbdc7b96d741fccb2d7dc2639264c Mon Sep 17 00:00:00 2001 From: sarvekshayr Date: Thu, 14 Mar 2024 12:27:17 +0530 Subject: [PATCH 5/8] Error message in a variable --- .../scm/cli/datanode/DecommissionStatusSubCommand.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java index d89744476dbc..a0e28d7adccc 100644 --- a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java +++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java @@ -136,6 +136,8 @@ public void execute(ScmClient scmClient) throws IOException { } } + String errorMessage = "Error getting pipeline and container metrics for "; + private void printDetails(DatanodeDetails datanode) { System.out.println("\nDatanode: " + datanode.getUuid().toString() + " (" + datanode.getNetworkLocation() + "/" + datanode.getIpAddress() @@ -168,9 +170,9 @@ private void printCounts(DatanodeDetails datanode, JsonNode counts, int numDecom return; } } - System.err.println("Error getting pipeline and container metrics for " + datanode.getHostName()); + System.err.println(errorMessage + datanode.getHostName()); } catch (IOException e) { - System.err.println("Error getting pipeline and container metrics for " + datanode.getHostName()); + System.err.println(errorMessage + datanode.getHostName()); } } @@ -209,9 +211,9 @@ private Map getCounts(DatanodeDetails datanode, JsonNode counts, return countsMap; } } - System.err.println("Error getting pipeline and container metrics for " + datanode.getHostName()); + System.err.println(errorMessage + datanode.getHostName()); } catch (IOException e) { - System.err.println("Error getting pipeline and container metrics for " + datanode.getHostName()); + System.err.println(errorMessage + datanode.getHostName()); } return countsMap; } From 043fa1d824532a51488e85dc08c12f0b80eff61a Mon Sep 17 00:00:00 2001 From: sarvekshayr Date: Thu, 14 Mar 2024 13:06:33 +0530 Subject: [PATCH 6/8] Fixed checkstyle errors - 2 --- .../datanode/DecommissionStatusSubCommand.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java index a0e28d7adccc..2648f8bcdb18 100644 --- a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java +++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java @@ -136,7 +136,15 @@ public void execute(ScmClient scmClient) throws IOException { } } - String errorMessage = "Error getting pipeline and container metrics for "; + private String errorMessage = "Error getting pipeline and container metrics for "; + + public String getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } private void printDetails(DatanodeDetails datanode) { System.out.println("\nDatanode: " + datanode.getUuid().toString() + @@ -170,9 +178,9 @@ private void printCounts(DatanodeDetails datanode, JsonNode counts, int numDecom return; } } - System.err.println(errorMessage + datanode.getHostName()); + System.err.println(getErrorMessage() + datanode.getHostName()); } catch (IOException e) { - System.err.println(errorMessage + datanode.getHostName()); + System.err.println(getErrorMessage() + datanode.getHostName()); } } @@ -211,9 +219,9 @@ private Map getCounts(DatanodeDetails datanode, JsonNode counts, return countsMap; } } - System.err.println(errorMessage + datanode.getHostName()); + System.err.println(getErrorMessage() + datanode.getHostName()); } catch (IOException e) { - System.err.println(errorMessage + datanode.getHostName()); + System.err.println(getErrorMessage() + datanode.getHostName()); } return countsMap; } From e6e9537b5df4c7e02dfe37ef03588de2a76712c5 Mon Sep 17 00:00:00 2001 From: sarvekshayr Date: Thu, 14 Mar 2024 14:27:15 +0530 Subject: [PATCH 7/8] Error message in a variable - 2 --- .../cli/datanode/DecommissionStatusSubCommand.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java index 2648f8bcdb18..d819d62577da 100644 --- a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java +++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java @@ -153,6 +153,7 @@ private void printDetails(DatanodeDetails datanode) { } private void printCounts(DatanodeDetails datanode, JsonNode counts, int numDecomNodes) { + String errMsg = getErrorMessage() + datanode.getHostName(); try { for (int i = 1; i <= numDecomNodes; i++) { if (datanode.getHostName().equals(counts.get("tag.datanode." + i).asText())) { @@ -161,7 +162,7 @@ private void printCounts(DatanodeDetails datanode, JsonNode counts, int numDecom JsonNode unclosedDN = counts.get("UnclosedContainersDN." + i); JsonNode startTimeDN = counts.get("StartTimeDN." + i); if (pipelinesDN == null || underReplicatedDN == null || unclosedDN == null || startTimeDN == null) { - throw new IOException("Error getting pipeline and container metrics for " + datanode.getHostName()); + throw new IOException(errMsg); } int pipelines = Integer.parseInt(pipelinesDN.toString()); @@ -178,9 +179,9 @@ private void printCounts(DatanodeDetails datanode, JsonNode counts, int numDecom return; } } - System.err.println(getErrorMessage() + datanode.getHostName()); + System.err.println(errMsg); } catch (IOException e) { - System.err.println(getErrorMessage() + datanode.getHostName()); + System.err.println(errMsg); } } @@ -195,6 +196,7 @@ private Map getDatanodeDetails(DatanodeDetails datanode) { private Map getCounts(DatanodeDetails datanode, JsonNode counts, int numDecomNodes) { Map countsMap = new LinkedHashMap<>(); + String errMsg = getErrorMessage() + datanode.getHostName(); try { for (int i = 1; i <= numDecomNodes; i++) { if (datanode.getHostName().equals(counts.get("tag.datanode." + i).asText())) { @@ -203,7 +205,7 @@ private Map getCounts(DatanodeDetails datanode, JsonNode counts, JsonNode unclosedDN = counts.get("UnclosedContainersDN." + i); JsonNode startTimeDN = counts.get("StartTimeDN." + i); if (pipelinesDN == null || underReplicatedDN == null || unclosedDN == null || startTimeDN == null) { - throw new IOException("Error getting pipeline and container metrics for " + datanode.getHostName()); + throw new IOException(errMsg); } int pipelines = Integer.parseInt(pipelinesDN.toString()); @@ -219,9 +221,9 @@ private Map getCounts(DatanodeDetails datanode, JsonNode counts, return countsMap; } } - System.err.println(getErrorMessage() + datanode.getHostName()); + System.err.println(errMsg); } catch (IOException e) { - System.err.println(getErrorMessage() + datanode.getHostName()); + System.err.println(errMsg); } return countsMap; } From 7c0244ebd20a3f91f7ad8ba5463377fe714269f1 Mon Sep 17 00:00:00 2001 From: sarvekshayr Date: Fri, 15 Mar 2024 09:51:04 +0530 Subject: [PATCH 8/8] Improved json output --- .../DecommissionStatusSubCommand.java | 46 +++---------------- 1 file changed, 6 insertions(+), 40 deletions(-) diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java index d819d62577da..b146d68a587f 100644 --- a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java +++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionStatusSubCommand.java @@ -117,7 +117,7 @@ public void execute(ScmClient scmClient) throws IOException { DatanodeDetails datanode = DatanodeDetails.getFromProtoBuf( node.getNodeID()); Map datanodeMap = new LinkedHashMap<>(); - datanodeMap.put("datanodeDetails", getDatanodeDetails(datanode)); + datanodeMap.put("datanodeDetails", datanode); datanodeMap.put("metrics", getCounts(datanode, jsonNode, numDecomNodes)); datanodeMap.put("containers", getContainers(scmClient, datanode)); decommissioningNodesDetails.add(datanodeMap); @@ -153,45 +153,11 @@ private void printDetails(DatanodeDetails datanode) { } private void printCounts(DatanodeDetails datanode, JsonNode counts, int numDecomNodes) { - String errMsg = getErrorMessage() + datanode.getHostName(); - try { - for (int i = 1; i <= numDecomNodes; i++) { - if (datanode.getHostName().equals(counts.get("tag.datanode." + i).asText())) { - JsonNode pipelinesDN = counts.get("PipelinesWaitingToCloseDN." + i); - JsonNode underReplicatedDN = counts.get("UnderReplicatedDN." + i); - JsonNode unclosedDN = counts.get("UnclosedContainersDN." + i); - JsonNode startTimeDN = counts.get("StartTimeDN." + i); - if (pipelinesDN == null || underReplicatedDN == null || unclosedDN == null || startTimeDN == null) { - throw new IOException(errMsg); - } - - int pipelines = Integer.parseInt(pipelinesDN.toString()); - double underReplicated = Double.parseDouble(underReplicatedDN.toString()); - double unclosed = Double.parseDouble(unclosedDN.toString()); - long startTime = Long.parseLong(startTimeDN.toString()); - System.out.print("Decommission Started At : "); - Date date = new Date(startTime); - DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss z"); - System.out.println(formatter.format(date)); - System.out.println("No. of Unclosed Pipelines: " + pipelines); - System.out.println("No. of UnderReplicated Containers: " + underReplicated); - System.out.println("No. of Unclosed Containers: " + unclosed); - return; - } - } - System.err.println(errMsg); - } catch (IOException e) { - System.err.println(errMsg); - } - } - - private Map getDatanodeDetails(DatanodeDetails datanode) { - Map detailsMap = new LinkedHashMap<>(); - detailsMap.put("uuid", datanode.getUuid().toString()); - detailsMap.put("networkLocation", datanode.getNetworkLocation()); - detailsMap.put("ipAddress", datanode.getIpAddress()); - detailsMap.put("hostname", datanode.getHostName()); - return detailsMap; + Map countsMap = getCounts(datanode, counts, numDecomNodes); + System.out.println("Decommission Started At : " + countsMap.get("decommissionStartTime")); + System.out.println("No. of Unclosed Pipelines: " + countsMap.get("numOfUnclosedPipelines")); + System.out.println("No. of UnderReplicated Containers: " + countsMap.get("numOfUnderReplicatedContainers")); + System.out.println("No. of Unclosed Containers: " + countsMap.get("numOfUnclosedContainers")); } private Map getCounts(DatanodeDetails datanode, JsonNode counts, int numDecomNodes) {