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 ay...@apache.org on 2019/09/01 07:23:38 UTC

[hadoop] branch trunk updated: HDFS-14711. RBF: RBFMetrics throws NullPointerException if stateStore disabled. Contributed by Chen Zhang.

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

ayushsaxena pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/hadoop.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 18d74fe  HDFS-14711. RBF: RBFMetrics throws NullPointerException if stateStore disabled. Contributed by Chen Zhang.
18d74fe is described below

commit 18d74fe41c0982dc1540367805b0c3d0d4fc29d3
Author: Ayush Saxena <ay...@apache.org>
AuthorDate: Sun Sep 1 12:41:17 2019 +0530

    HDFS-14711. RBF: RBFMetrics throws NullPointerException if stateStore disabled. Contributed by Chen Zhang.
---
 .../hdfs/server/federation/metrics/RBFMetrics.java | 25 +++++++++++++++++++++-
 .../server/federation/router/TestRouterRpc.java    | 22 +++++++++++++++++++
 2 files changed, 46 insertions(+), 1 deletion(-)

diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/metrics/RBFMetrics.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/metrics/RBFMetrics.java
index 4b33f80..86599c7 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/metrics/RBFMetrics.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/metrics/RBFMetrics.java
@@ -31,6 +31,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
@@ -183,6 +184,10 @@ public class RBFMetrics implements RouterMBean, FederationMBean {
   @Override
   public String getNamenodes() {
     final Map<String, Map<String, Object>> info = new LinkedHashMap<>();
+    if (membershipStore == null) {
+      return "{}";
+    }
+
     try {
       // Get the values from the store
       GetNamenodeRegistrationsRequest request =
@@ -252,6 +257,9 @@ public class RBFMetrics implements RouterMBean, FederationMBean {
   @Override
   public String getMountTable() {
     final List<Map<String, Object>> info = new LinkedList<>();
+    if (mountTableStore == null) {
+      return "[]";
+    }
 
     try {
       // Get all the mount points in order
@@ -302,6 +310,9 @@ public class RBFMetrics implements RouterMBean, FederationMBean {
   @Override
   public String getRouters() {
     final Map<String, Map<String, Object>> info = new LinkedHashMap<>();
+    if (routerStore == null) {
+      return "{}";
+    }
     try {
       // Get all the routers in order
       GetRouterRegistrationsRequest request =
@@ -391,6 +402,9 @@ public class RBFMetrics implements RouterMBean, FederationMBean {
 
   @Override
   public int getNumNamenodes() {
+    if (membershipStore == null) {
+      return 0;
+    }
     try {
       GetNamenodeRegistrationsRequest request =
           GetNamenodeRegistrationsRequest.newInstance();
@@ -406,6 +420,9 @@ public class RBFMetrics implements RouterMBean, FederationMBean {
 
   @Override
   public int getNumExpiredNamenodes() {
+    if (membershipStore == null) {
+      return 0;
+    }
     try {
       GetNamenodeRegistrationsRequest request =
           GetNamenodeRegistrationsRequest.newInstance();
@@ -670,6 +687,9 @@ public class RBFMetrics implements RouterMBean, FederationMBean {
    */
   private Collection<String> getNamespaceInfo(
       Function<FederationNamespaceInfo, String> f) throws IOException {
+    if (membershipStore == null) {
+      return new HashSet<>();
+    }
     GetNamespaceInfoRequest request = GetNamespaceInfoRequest.newInstance();
     GetNamespaceInfoResponse response =
         membershipStore.getNamespaceInfo(request);
@@ -719,8 +739,11 @@ public class RBFMetrics implements RouterMBean, FederationMBean {
    */
   private List<MembershipState> getActiveNamenodeRegistrations()
       throws IOException {
-
     List<MembershipState> resultList = new ArrayList<>();
+    if (membershipStore == null) {
+      return resultList;
+    }
+
     GetNamespaceInfoRequest request = GetNamespaceInfoRequest.newInstance();
     GetNamespaceInfoResponse response =
         membershipStore.getNamespaceInfo(request);
diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterRpc.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterRpc.java
index 8ec87cb..3767d93 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterRpc.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterRpc.java
@@ -101,6 +101,7 @@ import org.apache.hadoop.hdfs.server.federation.MiniRouterDFSCluster.RouterConte
 import org.apache.hadoop.hdfs.server.federation.MockResolver;
 import org.apache.hadoop.hdfs.server.federation.RouterConfigBuilder;
 import org.apache.hadoop.hdfs.server.federation.metrics.NamenodeBeanMetrics;
+import org.apache.hadoop.hdfs.server.federation.metrics.RBFMetrics;
 import org.apache.hadoop.hdfs.server.federation.resolver.FileSubclusterResolver;
 import org.apache.hadoop.hdfs.server.namenode.FSDirectory;
 import org.apache.hadoop.hdfs.server.namenode.FSNamesystem;
@@ -1619,6 +1620,27 @@ public class TestRouterRpc {
   }
 
   @Test
+  public void testRBFMetricsMethodsRelayOnStateStore() {
+    assertNull(router.getRouter().getStateStore());
+
+    RBFMetrics metrics = router.getRouter().getMetrics();
+    assertEquals("{}", metrics.getNamenodes());
+    assertEquals("[]", metrics.getMountTable());
+    assertEquals("{}", metrics.getRouters());
+    assertEquals(0, metrics.getNumNamenodes());
+    assertEquals(0, metrics.getNumExpiredNamenodes());
+
+    // These 2 methods relays on {@link RBFMetrics#getNamespaceInfo()}
+    assertEquals("[]", metrics.getClusterId());
+    assertEquals("[]", metrics.getBlockPoolId());
+
+    // These methods relays on
+    // {@link RBFMetrics#getActiveNamenodeRegistration()}
+    assertEquals("{}", metrics.getNameservices());
+    assertEquals(0, metrics.getNumLiveNodes());
+  }
+
+  @Test
   public void testCacheAdmin() throws Exception {
     DistributedFileSystem routerDFS = (DistributedFileSystem) routerFS;
     // Verify cache directive commands.


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org