This is an automated email from the ASF dual-hosted git repository.
psomogyi 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 344bf78b8fc HBASE-28948 RegionMover tool fails when table is deleted
(#6423)
344bf78b8fc is described below
commit 344bf78b8fc1c7b4f1b07f4ba846a6b56f955c79
Author: Peter Somogyi <[email protected]>
AuthorDate: Thu Oct 31 15:29:21 2024 +0100
HBASE-28948 RegionMover tool fails when table is deleted (#6423)
Signed-off-by: Wellington Chevreuil <[email protected]>
---
.../org/apache/hadoop/hbase/util/MoveWithAck.java | 2 +-
.../apache/hadoop/hbase/util/TestRegionMover2.java | 82 +++++++++++++---------
2 files changed, 51 insertions(+), 33 deletions(-)
diff --git
a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/MoveWithAck.java
b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/MoveWithAck.java
index 7143598679b..0c9a0beb68e 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/MoveWithAck.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/MoveWithAck.java
@@ -138,7 +138,7 @@ class MoveWithAck implements Callable<Boolean> {
*/
static ServerName getServerNameForRegion(RegionInfo region, Admin admin,
Connection conn)
throws IOException {
- if (!admin.isTableEnabled(region.getTable())) {
+ if (!admin.tableExists(region.getTable()) ||
!admin.isTableEnabled(region.getTable())) {
return null;
}
HRegionLocation loc = conn.getRegionLocator(region.getTable())
diff --git
a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestRegionMover2.java
b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestRegionMover2.java
index ec8c44592e9..15cc71fe446 100644
---
a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestRegionMover2.java
+++
b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestRegionMover2.java
@@ -17,6 +17,7 @@
*/
package org.apache.hadoop.hbase.util;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -65,12 +66,12 @@ public class TestRegionMover2 {
@ClassRule
public static final HBaseClassTestRule CLASS_RULE =
HBaseClassTestRule.forClass(TestRegionMover2.class);
+ private static final String CF = "fam1";
@Rule
public TestName name = new TestName();
private static final Logger LOG =
LoggerFactory.getLogger(TestRegionMover2.class);
-
private static final HBaseTestingUtil TEST_UTIL = new HBaseTestingUtil();
@BeforeClass
@@ -86,12 +87,7 @@ public class TestRegionMover2 {
@Before
public void setUp() throws Exception {
- final TableName tableName = TableName.valueOf(name.getMethodName());
- TableDescriptor tableDesc = TableDescriptorBuilder.newBuilder(tableName)
- .setColumnFamily(ColumnFamilyDescriptorBuilder.of("fam1")).build();
- int startKey = 0;
- int endKey = 80000;
- TEST_UTIL.getAdmin().createTable(tableDesc, Bytes.toBytes(startKey),
Bytes.toBytes(endKey), 9);
+ createTable(name.getMethodName());
}
@After
@@ -101,17 +97,23 @@ public class TestRegionMover2 {
TEST_UTIL.getAdmin().deleteTable(tableName);
}
+ private TableName createTable(String name) throws IOException {
+ final TableName tableName = TableName.valueOf(name);
+ TableDescriptor tableDesc = TableDescriptorBuilder.newBuilder(tableName)
+ .setColumnFamily(ColumnFamilyDescriptorBuilder.of(CF)).build();
+ int startKey = 0;
+ int endKey = 80000;
+ TEST_UTIL.getAdmin().createTable(tableDesc, Bytes.toBytes(startKey),
Bytes.toBytes(endKey), 9);
+ return tableName;
+ }
+
@Test
public void testWithMergedRegions() throws Exception {
final TableName tableName = TableName.valueOf(name.getMethodName());
SingleProcessHBaseCluster cluster = TEST_UTIL.getHBaseCluster();
Admin admin = TEST_UTIL.getAdmin();
Table table = TEST_UTIL.getConnection().getTable(tableName);
- List<Put> puts = new ArrayList<>();
- for (int i = 0; i < 10000; i++) {
- puts.add(new Put(Bytes.toBytes("rowkey_" +
i)).addColumn(Bytes.toBytes("fam1"),
- Bytes.toBytes("q1"), Bytes.toBytes("val_" + i)));
- }
+ List<Put> puts = createPuts(10000);
table.put(puts);
admin.flush(tableName);
HRegionServer regionServer = cluster.getRegionServer(0);
@@ -141,11 +143,7 @@ public class TestRegionMover2 {
SingleProcessHBaseCluster cluster = TEST_UTIL.getHBaseCluster();
Admin admin = TEST_UTIL.getAdmin();
Table table = TEST_UTIL.getConnection().getTable(tableName);
- List<Put> puts = new ArrayList<>();
- for (int i = 10; i < 50000; i++) {
- puts.add(new Put(Bytes.toBytes(i)).addColumn(Bytes.toBytes("fam1"),
Bytes.toBytes("q1"),
- Bytes.toBytes("val_" + i)));
- }
+ List<Put> puts = createPuts(50000);
table.put(puts);
admin.flush(tableName);
admin.compact(tableName);
@@ -190,16 +188,11 @@ public class TestRegionMover2 {
SingleProcessHBaseCluster cluster = TEST_UTIL.getHBaseCluster();
Admin admin = TEST_UTIL.getAdmin();
Table table = TEST_UTIL.getConnection().getTable(tableName);
- List<Put> puts = new ArrayList<>();
- for (int i = 0; i < 1000; i++) {
- puts.add(new Put(Bytes.toBytes("rowkey_" +
i)).addColumn(Bytes.toBytes("fam1"),
- Bytes.toBytes("q1"), Bytes.toBytes("val_" + i)));
- }
+ List<Put> puts = createPuts(1000);
table.put(puts);
admin.flush(tableName);
HRegionServer regionServer = cluster.getRegionServer(0);
String rsName = regionServer.getServerName().getAddress().toString();
- int numRegions = regionServer.getNumberOfOnlineRegions();
List<HRegion> hRegions = regionServer.getRegions().stream()
.filter(hRegion -> hRegion.getRegionInfo().getTable().equals(tableName))
.collect(Collectors.toList());
@@ -217,14 +210,30 @@ public class TestRegionMover2 {
}
}
+ @Test
+ public void testDeletedTable() throws Exception {
+ TableName tableNameToDelete = createTable(name.getMethodName() +
"ToDelete");
+ SingleProcessHBaseCluster cluster = TEST_UTIL.getHBaseCluster();
+ HRegionServer regionServer = cluster.getRegionServer(0);
+ String rsName = regionServer.getServerName().getAddress().toString();
+ RegionMover.RegionMoverBuilder rmBuilder =
+ new RegionMover.RegionMoverBuilder(rsName,
TEST_UTIL.getConfiguration()).ack(true)
+ .maxthreads(8);
+ try (Admin admin = TEST_UTIL.getAdmin(); RegionMover rm =
rmBuilder.build()) {
+ LOG.debug("Unloading {}", regionServer.getServerName());
+ rm.unload();
+ Assert.assertEquals(0, regionServer.getNumberOfOnlineRegions());
+ LOG.debug("Successfully Unloaded, now delete table");
+ admin.disableTable(tableNameToDelete);
+ admin.deleteTable(tableNameToDelete);
+ Assert.assertTrue(rm.load());
+ }
+ }
+
public void loadDummyDataInTable(TableName tableName) throws Exception {
Admin admin = TEST_UTIL.getAdmin();
Table table = TEST_UTIL.getConnection().getTable(tableName);
- List<Put> puts = new ArrayList<>();
- for (int i = 0; i < 1000; i++) {
- puts.add(new Put(Bytes.toBytes("rowkey_" +
i)).addColumn(Bytes.toBytes("fam1"),
- Bytes.toBytes("q1"), Bytes.toBytes("val_" + i)));
- }
+ List<Put> puts = createPuts(1000);
table.put(puts);
admin.flush(tableName);
}
@@ -297,6 +306,15 @@ public class TestRegionMover2 {
regionIsolationOperation(randomSeverRegion, randomSeverRegion, 2, true);
}
+ private List<Put> createPuts(int count) {
+ List<Put> puts = new ArrayList<>();
+ for (int i = 0; i < count; i++) {
+ puts.add(new Put(Bytes.toBytes("rowkey_" +
i)).addColumn(Bytes.toBytes(CF),
+ Bytes.toBytes("q1"), Bytes.toBytes("val_" + i)));
+ }
+ return puts;
+ }
+
public ServerName findMetaRSLocation() throws Exception {
ZKWatcher zkWatcher = new ZKWatcher(TEST_UTIL.getConfiguration(), null,
null);
List<HRegionLocation> result = new ArrayList<>();
@@ -325,7 +343,7 @@ public class TestRegionMover2 {
}
if (sourceServer == null) {
throw new Exception(
- "This shouln't happen, No RS found with more than 2 regions of table :
" + tableName);
+ "This shouldn't happen, No RS found with more than 2 regions of table
: " + tableName);
}
return sourceServer;
}
@@ -372,7 +390,7 @@ public class TestRegionMover2 {
new RegionMover.RegionMoverBuilder(destinationRSName,
TEST_UTIL.getConfiguration()).ack(true)
.maxthreads(8).isolateRegionIdArray(listOfRegionIDsToIsolate);
try (RegionMover rm = rmBuilder.build()) {
- LOG.debug("Unloading {} except regions : {}",
destinationRS.getServerName(),
+ LOG.debug("Unloading {} except regions: {}",
destinationRS.getServerName(),
listOfRegionIDsToIsolate);
rm.isolateRegions();
Assert.assertEquals(numRegionsToIsolate,
destinationRS.getNumberOfOnlineRegions());
@@ -381,8 +399,8 @@ public class TestRegionMover2 {
Assert.assertTrue(
listOfRegionIDsToIsolate.contains(onlineRegions.get(i).getRegionInfo().getEncodedName()));
}
- LOG.debug("Successfully Isolated " + listOfRegionIDsToIsolate.size() + "
regions : "
- + listOfRegionIDsToIsolate + " on " + destinationRS.getServerName());
+ LOG.debug("Successfully Isolated {} regions: {} on {}",
listOfRegionIDsToIsolate.size(),
+ listOfRegionIDsToIsolate, destinationRS.getServerName());
} finally {
admin.recommissionRegionServer(destinationRS.getServerName(), null);
}