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 {