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