You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ju...@apache.org on 2026/09/08 03:39:09 UTC

(hbase) branch master updated: HBASE-30365 Skip the MOB pseudo-region when building snapshot input splits (#8626)

This is an automated email from the ASF dual-hosted git repository.

junegunn 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 125ae77427f HBASE-30365 Skip the MOB pseudo-region when building snapshot input splits (#8626)
125ae77427f is described below

commit 125ae77427fb7758235beaa09de91ca6108729a7
Author: Junegunn Choi <ju...@apache.org>
AuthorDate: Tue Sep 8 12:39:02 2026 +0900

    HBASE-30365 Skip the MOB pseudo-region when building snapshot input splits (#8626)
    
    TableSnapshotInputFormatImpl.getRegionInfosFromManifest creates a split for every
    region in the snapshot manifest, and a MOB snapshot manifest includes the MOB
    pseudo-region from MobUtils.getMobRegionInfo. Each split is then opened as a real
    region under the restore dir.
    
    HBASE-30336 correctly stopped writing a .regioninfo for that pseudo-region under
    the table dir, so opening it now fails with "Region directory does not exist".
    
    Skip it, next to the existing offline-split filter. Behaviour preserving: the
    pseudo-region's family files live under mobdir, so the split opened a region with
    no store files and returned zero rows. MOB values are read through references in
    the data regions, not by scanning the pseudo-region.
    
    Covered by the existing TestCopyTable MOB snapshot tests, which fail without this
    change.
    
    Signed-off-by: Xiao Liu <li...@apache.org>
---
 .../apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatImpl.java | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatImpl.java b/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatImpl.java
index 633a9b25cdd..e44d003cf5b 100644
--- a/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatImpl.java
+++ b/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatImpl.java
@@ -43,6 +43,7 @@ import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.client.Scan.ReadType;
 import org.apache.hadoop.hbase.client.TableDescriptor;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
+import org.apache.hadoop.hbase.mob.MobUtils;
 import org.apache.hadoop.hbase.regionserver.HRegion;
 import org.apache.hadoop.hbase.snapshot.RestoreSnapshotHelper;
 import org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils;
@@ -361,6 +362,11 @@ public class TableSnapshotInputFormatImpl {
       if (hri.isOffline() && (hri.isSplit() || hri.isSplitParent())) {
         continue;
       }
+      // The mob region is a dummy region used only to organise mob files under mobdir. It has no
+      // region directory under the table dir to open, and holds no rows. See HBASE-30365.
+      if (MobUtils.isMobRegionInfo(hri)) {
+        continue;
+      }
       regionInfos.add(hri);
     }
     return regionInfos;