You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Junegunn Choi (Jira)" <ji...@apache.org> on 2026/09/08 01:01:00 UTC
[jira] [Created] (HBASE-30365) Reading a MOB table snapshot as MapReduce input fails after HBASE-30336
Junegunn Choi created HBASE-30365:
-------------------------------------
Summary: Reading a MOB table snapshot as MapReduce input fails after HBASE-30336
Key: HBASE-30365
URL: https://issues.apache.org/jira/browse/HBASE-30365
Project: HBase
Issue Type: Bug
Components: mapreduce, mob
Reporter: Junegunn Choi
h2. Problem
Reading a MOB table snapshot through {{TableSnapshotInputFormat}} fails since HBASE-30336.
{noformat}
java.io.IOException: Region directory does not exist: .../data/default/testLoadingSnapshotToMobTable1/2fd029de2ee9a2e42a9aaa50ba0a0d55
at HRegionFileSystem.writeRegionInfoOnFilesystem(HRegionFileSystem.java:874)
at ClientSideRegionScanner.<init>(ClientSideRegionScanner.java:88)
at TableSnapshotInputFormatImpl$RecordReader.initialize(TableSnapshotInputFormatImpl.java:271)
{noformat}
That encoded name is the MOB pseudo-region: {{MD5("testLoadingSnapshotToMobTable1,.mob,0")}}, which is what {{MobUtils.getMobRegionInfo}} produces.
{{TableSnapshotInputFormatImpl.getRegionInfosFromManifest}} creates a split for every region in the manifest, and a MOB snapshot manifest includes the pseudo-region. Each split is then opened as a real region under the restore dir. HBASE-30336 correctly stopped creating a directory for that pseudo-region under the table dir, so the split now has nothing to open.
Found by a nightly run on Java 21, but not JDK specific. It fails the same way on 17, locally and on CI.
{noformat}
mvn -pl hbase-mapreduce test -Dtest='TestCopyTable#testLoadingSnapshotAndBulkLoadToMobTable+tsetLoadingSnapshotToMobTable'
{noformat}
All the affected fix versions are still unreleased, so this has not shipped.
h2. Fix
Skip the pseudo-region when building splits, next to the existing offline-split filter:
{code:java}
if (MobUtils.isMobRegionInfo(hri)) {
continue;
}
{code}
This is behaviour-preserving. Before HBASE-30336 the pseudo-region's family files were written under {{mobdir}} while only a {{.regioninfo}} was written under the table dir, so the split opened a region with no store files and returned zero rows. Skipping it removes the exception without changing any output.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)