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

elserj pushed a commit to branch branch-1
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-1 by this push:
     new 404c2dd  HBASE-19365 Guard against a missing table descriptor which 
crashes master
404c2dd is described below

commit 404c2dd3fedb30b15418818630a272defc2ee5c7
Author: Josh Elser <els...@apache.org>
AuthorDate: Mon Jun 15 21:15:38 2020 -0400

    HBASE-19365 Guard against a missing table descriptor which crashes master
    
    While we never expect table descriptors to be missing, a corrupt meta
    can result in the master crashing before regions get assigned. We can
    guard against that happening with a simple null-check.
    
    Signed-off-by: Viraj Jasani <vjas...@apache.org>
    
    Closes #1908
---
 .../org/apache/hadoop/hbase/master/AssignmentManager.java  | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
index 78294a0..de4edbb 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
@@ -3220,12 +3220,16 @@ public class AssignmentManager extends 
ZooKeeperListener {
       // maybe because it crashed.
       PairOfSameType<HRegionInfo> p = 
MetaTableAccessor.getMergeRegions(result);
       if (p.getFirst() != null && p.getSecond() != null) {
-        int numReplicas = server.getTableDescriptors().get(p.getFirst().
-            getTable()).getRegionReplication();
-        for (HRegionInfo merge : p) {
-          for (int i = 1; i < numReplicas; i++) {
-            
replicasToClose.add(RegionReplicaUtil.getRegionInfoForReplica(merge, i));
+        HTableDescriptor desc = 
server.getTableDescriptors().get(p.getFirst().getTable());
+        if (desc != null) {
+          int numReplicas = desc.getRegionReplication();
+          for (HRegionInfo merge : p) {
+            for (int i = 1; i < numReplicas; i++) {
+              
replicasToClose.add(RegionReplicaUtil.getRegionInfoForReplica(merge, i));
+            }
           }
+        } else {
+          LOG.warn("Found no table descriptor on filesystem for " + 
p.getFirst().getTable());
         }
       }
       RegionLocations rl =  MetaTableAccessor.getRegionLocations(result);

Reply via email to