You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by wc...@apache.org on 2020/06/18 08:47:06 UTC
[hbase-operator-tools] branch master updated: HBASE-24571 HBCK2 fix addFsRegionsMissingInMeta to add regions in CLO… (#65)
This is an automated email from the ASF dual-hosted git repository.
wchevreuil pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase-operator-tools.git
The following commit(s) were added to refs/heads/master by this push:
new 4ef4157 HBASE-24571 HBCK2 fix addFsRegionsMissingInMeta to add regions in CLO… (#65)
4ef4157 is described below
commit 4ef41574c549969f9c5c543ff7204d06609aab40
Author: Wellington Ramos Chevreuil <wc...@apache.org>
AuthorDate: Thu Jun 18 09:46:56 2020 +0100
HBASE-24571 HBCK2 fix addFsRegionsMissingInMeta to add regions in CLO… (#65)
Signed-off-by: Toshihiro Suzuki <br...@gmail.com>
Signed-off-by: Viraj Jasani <vj...@apache.org>
---
.../org/apache/hbase/HBCKMetaTableAccessor.java | 18 ++++++++++++--
.../apache/hbase/TestFsRegionsMetaRecoverer.java | 17 ++++++++++++-
.../apache/hbase/TestHBCKMetaTableAccessor.java | 28 +++++++++++++++++++++-
3 files changed, 59 insertions(+), 4 deletions(-)
diff --git a/hbase-hbck2/src/main/java/org/apache/hbase/HBCKMetaTableAccessor.java b/hbase-hbck2/src/main/java/org/apache/hbase/HBCKMetaTableAccessor.java
index 4b8f961..64c2cf7 100644
--- a/hbase-hbck2/src/main/java/org/apache/hbase/HBCKMetaTableAccessor.java
+++ b/hbase-hbck2/src/main/java/org/apache/hbase/HBCKMetaTableAccessor.java
@@ -59,6 +59,7 @@ import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.client.TableState;
import org.apache.hadoop.hbase.exceptions.DeserializationException;
+import org.apache.hadoop.hbase.master.RegionState;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
import org.apache.hadoop.hbase.util.Pair;
@@ -237,8 +238,10 @@ public final class HBCKMetaTableAccessor {
* @throws IOException on any issues related with scanning meta table
*/
public static void addRegionToMeta(Connection conn, RegionInfo region) throws IOException {
- conn.getTable(TableName.META_TABLE_NAME).put(makePutFromRegionInfo(region,
- System.currentTimeMillis()));
+ Put put = makePutFromRegionInfo(region,
+ System.currentTimeMillis());
+ addRegionStateToPut(put, RegionState.State.CLOSED);
+ conn.getTable(TableName.META_TABLE_NAME).put(put);
}
/**
@@ -451,6 +454,17 @@ public final class HBCKMetaTableAccessor {
return put;
}
+ private static void addRegionStateToPut(Put put, RegionState.State state) throws IOException {
+ put.add(CellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)
+ .setRow(put.getRow())
+ .setFamily(HConstants.CATALOG_FAMILY)
+ .setQualifier(HConstants.STATE_QUALIFIER)
+ .setTimestamp(put.getTimestamp())
+ .setType(Cell.Type.Put)
+ .setValue(Bytes.toBytes(state.name()))
+ .build());
+ }
+
/**
* Remove state for table from meta
* (Copied from MetaTableAccessor)
diff --git a/hbase-hbck2/src/test/java/org/apache/hbase/TestFsRegionsMetaRecoverer.java b/hbase-hbck2/src/test/java/org/apache/hbase/TestFsRegionsMetaRecoverer.java
index 551c4e9..2093996 100644
--- a/hbase-hbck2/src/test/java/org/apache/hbase/TestFsRegionsMetaRecoverer.java
+++ b/hbase-hbck2/src/test/java/org/apache/hbase/TestFsRegionsMetaRecoverer.java
@@ -49,10 +49,12 @@ import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.client.TableState;
+import org.apache.hadoop.hbase.master.RegionState;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.Before;
import org.junit.Test;
+import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;
@@ -146,7 +148,20 @@ public class TestFsRegionsMetaRecoverer {
.thenReturn(fis);
fixer.putRegionInfoFromHdfsInMeta(regionPath);
Mockito.verify(this.mockedConnection).getTable(TableName.META_TABLE_NAME);
- Mockito.verify(this.mockedTable).put(any(Put.class));
+ ArgumentCaptor<Put> captor = ArgumentCaptor.forClass(Put.class);
+ Mockito.verify(this.mockedTable).put(captor.capture());
+ Put capturedPut = captor.getValue();
+ List<Cell> cells = capturedPut.get(HConstants.CATALOG_FAMILY,
+ HConstants.STATE_QUALIFIER);
+ assertEquals(1, cells.size());
+ String state = Bytes.toString(cells.get(0).getValueArray(),
+ cells.get(0).getValueOffset(), cells.get(0).getValueLength());
+ assertEquals(RegionState.State.valueOf(state), RegionState.State.CLOSED);
+ cells = capturedPut.get(HConstants.CATALOG_FAMILY,
+ HConstants.REGIONINFO_QUALIFIER);
+ byte[] returnedInfo = Bytes.copy(cells.get(0).getValueArray(),
+ cells.get(0).getValueOffset(), cells.get(0).getValueLength());
+ assertEquals(info, RegionInfo.parseFrom(returnedInfo));
}
@Test
diff --git a/hbase-hbck2/src/test/java/org/apache/hbase/TestHBCKMetaTableAccessor.java b/hbase-hbck2/src/test/java/org/apache/hbase/TestHBCKMetaTableAccessor.java
index 7e23657..be55795 100644
--- a/hbase-hbck2/src/test/java/org/apache/hbase/TestHBCKMetaTableAccessor.java
+++ b/hbase-hbck2/src/test/java/org/apache/hbase/TestHBCKMetaTableAccessor.java
@@ -17,7 +17,9 @@
*/
package org.apache.hbase;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
import java.io.IOException;
import java.util.ArrayList;
@@ -27,11 +29,13 @@ import org.apache.hadoop.hbase.HBaseTestingUtility;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
+import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.RegionInfo;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
+import org.apache.hadoop.hbase.master.RegionState;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.BeforeClass;
@@ -55,11 +59,33 @@ public class TestHBCKMetaTableAccessor {
@Test
public void testDeleteRegionInfo() throws Exception {
+ assertFalse(listRegionsInMeta().contains(createTableAnddeleteFirstRegion()));
+ }
+
+ private RegionInfo createTableAnddeleteFirstRegion() throws Exception {
TableName tableName = createTestTable(5);
List<RegionInfo> regions = TEST_UTIL.getAdmin().getRegions(tableName);
RegionInfo toBeDeleted = regions.get(0);
HBCKMetaTableAccessor.deleteRegionInfo(TEST_UTIL.getConnection(), toBeDeleted);
- assertFalse(listRegionsInMeta().contains(toBeDeleted));
+ return toBeDeleted;
+ }
+
+ @Test
+ public void testAddRegionToMeta() throws Exception {
+ RegionInfo regionInfo = createTableAnddeleteFirstRegion();
+ HBCKMetaTableAccessor.addRegionToMeta(TEST_UTIL.getConnection(), regionInfo);
+ Connection connection = TEST_UTIL.getConnection();
+ Table meta = connection.getTable(TableName.META_TABLE_NAME);
+ Get get = new Get(regionInfo.getRegionName());
+ Result r = meta.get(get);
+ assertNotNull(r);
+ assertFalse(r.isEmpty());
+ RegionInfo returnedRI = RegionInfo.parseFrom(r.getValue(HConstants.CATALOG_FAMILY,
+ HConstants.REGIONINFO_QUALIFIER));
+ assertEquals(regionInfo, returnedRI);
+ String state = Bytes.toString(r.getValue(HConstants.CATALOG_FAMILY,
+ HConstants.STATE_QUALIFIER));
+ assertEquals(RegionState.State.valueOf(state), RegionState.State.CLOSED);
}
private List<RegionInfo> listRegionsInMeta() throws Exception {