You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ra...@apache.org on 2023/05/25 03:28:32 UTC
[hbase] branch master updated: HBASE-27793 Make HBCK be able to report unknown servers (#5229)
This is an automated email from the ASF dual-hosted git repository.
rajeshbabu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/master by this push:
new d7b2fb463ec HBASE-27793 Make HBCK be able to report unknown servers (#5229)
d7b2fb463ec is described below
commit d7b2fb463ec3ddf8c8a85c5c80c113ffcbc5a824
Author: Rajeshbabu Chintaguntla <ch...@gmail.com>
AuthorDate: Thu May 25 08:58:26 2023 +0530
HBASE-27793 Make HBCK be able to report unknown servers (#5229)
Co-authored-by: Rajeshbabu Chintaguntla <ra...@apache.org>
---
.../org/apache/hadoop/hbase/util/HBaseFsck.java | 14 ++++++++++++++
.../hadoop/hbase/util/HbckErrorReporter.java | 3 ++-
.../org/apache/hadoop/hbase/client/TestAdmin.java | 22 ++++++++++++++++++++++
3 files changed, 38 insertions(+), 1 deletion(-)
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java
index 36acffa9664..8e848390e0e 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java
@@ -655,6 +655,8 @@ public class HBaseFsck extends Configured implements Closeable {
loadDeployedRegions();
// check whether hbase:meta is deployed and online
recordMetaRegion();
+ // Report inconsistencies if there are any unknown servers.
+ reportUnknownServers();
// Check if hbase:meta is found only once and in the right place
if (!checkMetaRegion()) {
String errorMsg = "hbase:meta table is not consistent. ";
@@ -707,6 +709,18 @@ public class HBaseFsck extends Configured implements Closeable {
return errors.getErrorList().size();
}
+ private void reportUnknownServers() throws IOException {
+ List<ServerName> unknownServers = admin.listUnknownServers();
+ if (!unknownServers.isEmpty()) {
+ unknownServers.stream().forEach(serverName -> {
+ errors.reportError(ERROR_CODE.UNKNOWN_SERVER,
+ "Found unknown server,"
+ + "some of the regions held by this server may not get assigned. "
+ + String.format("Use HBCK2 scheduleRecoveries %s to recover.", serverName));
+ });
+ }
+ }
+
/**
* This method maintains an ephemeral znode. If the creation fails we return false or throw
* exception
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HbckErrorReporter.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HbckErrorReporter.java
index 0735809424e..11f99aa5382 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HbckErrorReporter.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HbckErrorReporter.java
@@ -65,7 +65,8 @@ public interface HbckErrorReporter {
UNDELETED_REPLICATION_QUEUE,
DUPE_ENDKEYS,
UNSUPPORTED_OPTION,
- INVALID_TABLE
+ INVALID_TABLE,
+ UNKNOWN_SERVER
}
void clear();
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java
index ff928dc90b5..68a841b7d67 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java
@@ -40,6 +40,9 @@ import org.apache.hadoop.hbase.ServerName;
import org.apache.hadoop.hbase.TableExistsException;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.TableNotFoundException;
+import org.apache.hadoop.hbase.master.HMaster;
+import org.apache.hadoop.hbase.master.assignment.AssignmentManager;
+import org.apache.hadoop.hbase.master.assignment.RegionStateNode;
import org.apache.hadoop.hbase.regionserver.storefiletracker.StoreFileTrackerFactory;
import org.apache.hadoop.hbase.testclassification.ClientTests;
import org.apache.hadoop.hbase.testclassification.LargeTests;
@@ -552,4 +555,23 @@ public class TestAdmin extends TestAdminBase {
ADMIN.listTableDescriptors();
assertFalse(ADMIN.tableExists(tableName));
}
+
+ @Test
+ public void testUnknownServers() throws Exception {
+ TableName table = TableName.valueOf(name.getMethodName());
+ ColumnFamilyDescriptor cfd = ColumnFamilyDescriptorBuilder.of(HConstants.CATALOG_FAMILY);
+ ADMIN.createTable(TableDescriptorBuilder.newBuilder(table).setColumnFamily(cfd).build());
+ final List<RegionInfo> regions = ADMIN.getRegions(table);
+ HMaster master = TEST_UTIL.getHBaseCluster().getMaster();
+ final AssignmentManager am = master.getAssignmentManager();
+ RegionStateNode rsNode = am.getRegionStates().getRegionStateNode(regions.get(0));
+ ServerName regionLocation = rsNode.getRegionLocation();
+ rsNode.setRegionLocation(ServerName.valueOf("dummyserver", 1234, System.currentTimeMillis()));
+ try {
+ assertTrue(ADMIN.listUnknownServers().get(0).getHostname().equals("dummyserver"));
+ } finally {
+ rsNode.setRegionLocation(regionLocation);
+ }
+ assertTrue(ADMIN.listUnknownServers().isEmpty());
+ }
}