You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by el...@apache.org on 2020/06/17 20:48:52 UTC
[hbase] branch branch-1 updated: HBASE-19365 Guard against a
missing table descriptor which crashes master
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 <el...@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 <vj...@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);