This is an automated email from the ASF dual-hosted git repository.

aengineer pushed a commit to branch HDDS-1880-Decom
in repository https://gitbox.apache.org/repos/asf/hadoop-ozone.git


The following commit(s) were added to refs/heads/HDDS-1880-Decom by this push:
     new f4e3fd1   HDDS-2349. QueryNode does not respect null values for 
opState or state
f4e3fd1 is described below

commit f4e3fd1742d84d09c46015d5bf9e6d9afd210d0a
Author: Stephen O'Donnell <stephen.odonn...@gmail.com>
AuthorDate: Wed Oct 23 21:53:34 2019 +0100

     HDDS-2349. QueryNode does not respect null values for opState or state
---
 ...ontainerLocationProtocolServerSideTranslatorPB.java | 10 ++++++++--
 .../hdds/scm/server/SCMClientProtocolServer.java       | 18 +++++++++---------
 .../apache/hadoop/ozone/scm/node/TestQueryNode.java    | 12 +++++++++---
 3 files changed, 26 insertions(+), 14 deletions(-)

diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/protocol/StorageContainerLocationProtocolServerSideTranslatorPB.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/protocol/StorageContainerLocationProtocolServerSideTranslatorPB.java
index 2c55f04..47e2c92 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/protocol/StorageContainerLocationProtocolServerSideTranslatorPB.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/protocol/StorageContainerLocationProtocolServerSideTranslatorPB.java
@@ -321,8 +321,14 @@ public final class 
StorageContainerLocationProtocolServerSideTranslatorPB
       StorageContainerLocationProtocolProtos.NodeQueryRequestProto request)
       throws IOException {
 
-    HddsProtos.NodeState nodeState = request.getState();
-    HddsProtos.NodeOperationalState opState = request.getOpState();
+    HddsProtos.NodeOperationalState opState = null;
+    HddsProtos.NodeState nodeState = null;
+    if (request.hasState()) {
+      nodeState = request.getState();
+    }
+    if (request.hasOpState()) {
+      opState = request.getOpState();
+    }
     List<HddsProtos.Node> datanodes = impl.queryNode(opState, nodeState,
         request.getScope(), request.getPoolName());
     return NodeQueryResponseProto.newBuilder()
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMClientProtocolServer.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMClientProtocolServer.java
index 69c1d2d..d558162 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMClientProtocolServer.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMClientProtocolServer.java
@@ -22,7 +22,6 @@
 package org.apache.hadoop.hdds.scm.server;
 
 import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
 import com.google.common.collect.Maps;
 import com.google.protobuf.BlockingService;
 import org.apache.hadoop.fs.CommonConfigurationKeys;
@@ -35,6 +34,7 @@ import org.apache.hadoop.hdds.protocol.proto
 import org.apache.hadoop.hdds.scm.HddsServerUtil;
 import org.apache.hadoop.hdds.scm.ScmInfo;
 import org.apache.hadoop.hdds.scm.ScmUtils;
+import org.apache.hadoop.hdds.scm.node.NodeStatus;
 import org.apache.hadoop.hdds.scm.pipeline.PipelineNotFoundException;
 import org.apache.hadoop.hdds.scm.safemode.SafeModePrecheck;
 import org.apache.hadoop.hdds.scm.container.ContainerID;
@@ -358,14 +358,15 @@ public class SCMClientProtocolServer implements
 
     List<HddsProtos.Node> result = new ArrayList<>();
     queryNode(opState, state)
-        .forEach(node -> result.add(HddsProtos.Node.newBuilder()
-        .setNodeID(node.getProtoBufMessage())
-        .addNodeStates(state)
-        .addNodeOperationalStates(opState)
-        .build()));
-
+        .forEach(node -> {
+          NodeStatus ns = scm.getScmNodeManager().getNodeStatus(node);
+          result.add(HddsProtos.Node.newBuilder()
+              .setNodeID(node.getProtoBufMessage())
+              .addNodeStates(ns.getHealth())
+              .addNodeOperationalStates(ns.getOperationalState())
+              .build());
+        });
     return result;
-
   }
 
   @Override
@@ -574,7 +575,6 @@ public class SCMClientProtocolServer implements
    */
   public List<DatanodeDetails> queryNode(
       HddsProtos.NodeOperationalState opState, HddsProtos.NodeState state) {
-    Preconditions.checkNotNull(state, "Node Query set cannot be null");
     return new ArrayList<>(queryNodeState(opState, state));
   }
 
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/scm/node/TestQueryNode.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/scm/node/TestQueryNode.java
index eae7641..ff8dce5 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/scm/node/TestQueryNode.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/scm/node/TestQueryNode.java
@@ -51,6 +51,8 @@ import static 
org.apache.hadoop.hdds.protocol.proto.HddsProtos.NodeState.STALE;
 import static org.apache.hadoop.hdds.protocol.proto.HddsProtos.
     NodeOperationalState.IN_SERVICE;
 import static org.apache.hadoop.hdds.protocol.proto.HddsProtos.
+    NodeOperationalState.DECOMMISSIONING;
+import static org.apache.hadoop.hdds.protocol.proto.HddsProtos.
     NodeOperationalState.IN_MAINTENANCE;
 
 import static org.apache.hadoop.hdds.scm.ScmConfigKeys
@@ -142,10 +144,14 @@ public class TestQueryNode {
     StorageContainerManager scm = cluster.getStorageContainerManager();
     NodeManager nm = scm.getScmNodeManager();
 
+    // Set one node to be something other than IN_SERVICE
+    DatanodeDetails node = nm.getAllNodes().get(0);
+    nm.setNodeOperationalState(node, DECOMMISSIONING);
+
     // All nodes should be returned as they are all in service
     int nodeCount = scmClient.queryNode(IN_SERVICE, HEALTHY,
         HddsProtos.QueryScope.CLUSTER, "").size();
-    assertEquals(numOfDatanodes, nodeCount);
+    assertEquals(numOfDatanodes - 1, nodeCount);
 
     // null acts as wildcard for opState
     nodeCount = scmClient.queryNode(null, HEALTHY,
@@ -155,7 +161,7 @@ public class TestQueryNode {
     // null acts as wildcard for nodeState
     nodeCount = scmClient.queryNode(IN_SERVICE, null,
         HddsProtos.QueryScope.CLUSTER, "").size();
-    assertEquals(numOfDatanodes, nodeCount);
+    assertEquals(numOfDatanodes - 1, nodeCount);
 
     // Both null - should return all nodes
     nodeCount = scmClient.queryNode(null, null,
@@ -169,7 +175,7 @@ public class TestQueryNode {
 
     // Test all operational states by looping over them all and setting the
     // state manually.
-    DatanodeDetails node = nm.getAllNodes().get(0);
+    node = nm.getAllNodes().get(0);
     for (HddsProtos.NodeOperationalState s :
         HddsProtos.NodeOperationalState.values()) {
       nm.setNodeOperationalState(node, s);


---------------------------------------------------------------------
To unsubscribe, e-mail: hdfs-commits-unsubscr...@hadoop.apache.org
For additional commands, e-mail: hdfs-commits-h...@hadoop.apache.org

Reply via email to