You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zg...@apache.org on 2019/08/09 07:18:53 UTC
[hbase] branch branch-2.2 updated: HBASE-22824 Show filesystem path
for the orphans regions on filesystem (#469)
This is an automated email from the ASF dual-hosted git repository.
zghao pushed a commit to branch branch-2.2
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2.2 by this push:
new 549348a HBASE-22824 Show filesystem path for the orphans regions on filesystem (#469)
549348a is described below
commit 549348a465d6bcc4823f643c863664a930167840
Author: Guanghao Zhang <zg...@apache.org>
AuthorDate: Fri Aug 9 02:07:14 2019 -0500
HBASE-22824 Show filesystem path for the orphans regions on filesystem (#469)
Signed-off-by: Duo Zhang <zh...@apache.org>
---
.../org/apache/hadoop/hbase/master/HbckChore.java | 23 ++++++++++++++--------
.../main/resources/hbase-webapps/master/hbck.jsp | 17 +++++++++-------
.../hbase/master/assignment/TestHbckChore.java | 2 +-
3 files changed, 26 insertions(+), 16 deletions(-)
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HbckChore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HbckChore.java
index e2c4008..0417e30 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HbckChore.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HbckChore.java
@@ -61,6 +61,8 @@ public class HbckChore extends ScheduledChore {
*/
private final Map<String, HbckRegionInfo> regionInfoMap = new HashMap<>();
+ private final Set<String> disabledTableRegions = new HashSet<>();
+
/**
* The regions only opened on RegionServers, but no region info in meta.
*/
@@ -68,7 +70,7 @@ public class HbckChore extends ScheduledChore {
/**
* The regions have directory on FileSystem, but no region info in meta.
*/
- private final Set<String> orphanRegionsOnFS = new HashSet<>();
+ private final Map<String, Path> orphanRegionsOnFS = new HashMap<>();
/**
* The inconsistent regions. There are three case:
* case 1. Master thought this region opened, but no regionserver reported it.
@@ -82,7 +84,7 @@ public class HbckChore extends ScheduledChore {
* The "snapshot" is used to save the last round's HBCK checking report.
*/
private final Map<String, ServerName> orphanRegionsOnRSSnapshot = new HashMap<>();
- private final Set<String> orphanRegionsOnFSSnapshot = new HashSet<>();
+ private final Map<String, Path> orphanRegionsOnFSSnapshot = new HashMap<>();
private final Map<String, Pair<ServerName, List<ServerName>>> inconsistentRegionsSnapshot =
new HashMap<>();
@@ -109,6 +111,7 @@ public class HbckChore extends ScheduledChore {
protected synchronized void chore() {
running = true;
regionInfoMap.clear();
+ disabledTableRegions.clear();
orphanRegionsOnRS.clear();
orphanRegionsOnFS.clear();
inconsistentRegions.clear();
@@ -132,7 +135,8 @@ public class HbckChore extends ScheduledChore {
orphanRegionsOnRS.entrySet()
.forEach(e -> orphanRegionsOnRSSnapshot.put(e.getKey(), e.getValue()));
orphanRegionsOnFSSnapshot.clear();
- orphanRegionsOnFSSnapshot.addAll(orphanRegionsOnFS);
+ orphanRegionsOnFS.entrySet()
+ .forEach(e -> orphanRegionsOnFSSnapshot.put(e.getKey(), e.getValue()));
inconsistentRegionsSnapshot.clear();
inconsistentRegions.entrySet()
.forEach(e -> inconsistentRegionsSnapshot.put(e.getKey(), e.getValue()));
@@ -147,11 +151,9 @@ public class HbckChore extends ScheduledChore {
master.getAssignmentManager().getRegionStates().getRegionStates();
for (RegionState regionState : regionStates) {
RegionInfo regionInfo = regionState.getRegion();
- // Because the inconsistent regions are not absolutely right, only skip the offline regions
- // which belong to disabled table.
if (master.getTableStateManager()
.isTableState(regionInfo.getTable(), TableState.State.DISABLED)) {
- continue;
+ disabledTableRegions.add(regionInfo.getEncodedName());
}
HbckRegionInfo.MetaEntry metaEntry =
new HbckRegionInfo.MetaEntry(regionInfo, regionState.getServerName(),
@@ -185,6 +187,11 @@ public class HbckChore extends ScheduledChore {
HbckRegionInfo hri = entry.getValue();
ServerName locationInMeta = hri.getMetaEntry().getRegionServer();
if (hri.getDeployedOn().size() == 0) {
+ // Because the inconsistent regions are not absolutely right, only skip the offline regions
+ // which belong to disabled table.
+ if (disabledTableRegions.contains(encodedRegionName)) {
+ continue;
+ }
// Master thought this region opened, but no regionserver reported it.
inconsistentRegions.put(encodedRegionName, new Pair<>(locationInMeta, new LinkedList<>()));
} else if (hri.getDeployedOn().size() > 1) {
@@ -209,7 +216,7 @@ public class HbckChore extends ScheduledChore {
String encodedRegionName = regionDir.getName();
HbckRegionInfo hri = regionInfoMap.get(encodedRegionName);
if (hri == null) {
- orphanRegionsOnFS.add(encodedRegionName);
+ orphanRegionsOnFS.put(encodedRegionName, regionDir);
continue;
}
HbckRegionInfo.HdfsEntry hdfsEntry = new HbckRegionInfo.HdfsEntry(regionDir);
@@ -244,7 +251,7 @@ public class HbckChore extends ScheduledChore {
/**
* @return the regions have directory on FileSystem, but no region info in meta.
*/
- public Set<String> getOrphanRegionsOnFS() {
+ public Map<String, Path> getOrphanRegionsOnFS() {
// Need synchronized here, as this "snapshot" may be changed after checking.
rwLock.readLock().lock();
try {
diff --git a/hbase-server/src/main/resources/hbase-webapps/master/hbck.jsp b/hbase-server/src/main/resources/hbase-webapps/master/hbck.jsp
index 52562d7..49db066 100644
--- a/hbase-server/src/main/resources/hbase-webapps/master/hbck.jsp
+++ b/hbase-server/src/main/resources/hbase-webapps/master/hbck.jsp
@@ -23,11 +23,12 @@
import="java.util.Date"
import="java.util.List"
import="java.util.Map"
- import="java.util.Set"
import="java.util.stream.Collectors"
import="java.time.ZonedDateTime"
import="java.time.format.DateTimeFormatter"
%>
+<%@ page import="org.apache.hadoop.fs.Path" %>
+<%@ page import="org.apache.hadoop.hbase.client.RegionInfo" %>
<%@ page import="org.apache.hadoop.hbase.master.HbckChore" %>
<%@ page import="org.apache.hadoop.hbase.master.HMaster" %>
<%@ page import="org.apache.hadoop.hbase.ServerName" %>
@@ -42,7 +43,7 @@
HbckChore hbckChore = master.getHbckChore();
Map<String, Pair<ServerName, List<ServerName>>> inconsistentRegions = null;
Map<String, ServerName> orphanRegionsOnRS = null;
- Set<String> orphanRegionsOnFS = null;
+ Map<String, Path> orphanRegionsOnFS = null;
long startTimestamp = 0;
long endTimestamp = 0;
if (hbckChore != null) {
@@ -106,7 +107,7 @@
<table class="table table-striped">
<tr>
- <th>Region</th>
+ <th>Region Encoded Name</th>
<th>Location in META</th>
<th>Reported Online RegionServers</th>
</tr>
@@ -132,7 +133,7 @@
<% if (orphanRegionsOnRS != null && orphanRegionsOnRS.size() > 0) { %>
<table class="table table-striped">
<tr>
- <th>Region</th>
+ <th>Region Encoded Name</th>
<th>Reported Online RegionServer</th>
</tr>
<% for (Map.Entry<String, ServerName> entry : orphanRegionsOnRS.entrySet()) { %>
@@ -155,11 +156,13 @@
<% if (orphanRegionsOnFS != null && orphanRegionsOnFS.size() > 0) { %>
<table class="table table-striped">
<tr>
- <th>Region</th>
+ <th>Region Encoded Name</th>
+ <th>FileSystem Path</th>
</tr>
- <% for (String region : orphanRegionsOnFS) { %>
+ <% for (Map.Entry<String, Path> entry : orphanRegionsOnFS.entrySet()) { %>
<tr>
- <td><%= region %></td>
+ <td><%= entry.getKey() %></td>
+ <td><%= entry.getValue() %></td>
</tr>
<% } %>
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestHbckChore.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestHbckChore.java
index 756e60a..7ef90d4 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestHbckChore.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestHbckChore.java
@@ -192,7 +192,7 @@ public class TestHbckChore extends TestAssignmentManagerBase {
HRegion.createRegionDir(conf, regionInfo, FSUtils.getRootDir(conf));
hbckChore.choreForTesting();
assertEquals(1, hbckChore.getOrphanRegionsOnFS().size());
- assertTrue(hbckChore.getOrphanRegionsOnFS().contains(regionInfo.getEncodedName()));
+ assertTrue(hbckChore.getOrphanRegionsOnFS().containsKey(regionInfo.getEncodedName()));
FSUtils.deleteRegionDir(conf, new HRegionInfo(regionInfo));
hbckChore.choreForTesting();