[
https://issues.apache.org/jira/browse/HBASE-30365?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Work on HBASE-30365 started by Junegunn Choi.
---------------------------------------------
> 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
> Assignee: Junegunn Choi
> Priority: Major
>
> 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)