diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java index ca0667e..d5febe5 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java @@ -4389,11 +4389,14 @@ public class HRegion implements HeapSize { // , Writable{ * @throws IOException */ HRegion createDaughterRegionFromSplits(final HRegionInfo hri) throws IOException { + // Move the files from the temporary .splits to the final /table/region directory + fs.commitDaughterRegion(hri); + + // Create the daughter HRegion instance HRegion r = HRegion.newHRegion(this.fs.getTableDir(), this.getLog(), fs.getFileSystem(), this.getBaseConf(), hri, this.getTableDesc(), rsServices); r.readRequestsCount.set(this.getReadRequestsCount() / 2); r.writeRequestsCount.set(this.getWriteRequestsCount() / 2); - fs.commitDaughterRegion(hri); return r; } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java index c822d65..2929f47 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java @@ -483,8 +483,16 @@ public class HRegionFileSystem { Path commitDaughterRegion(final HRegionInfo regionInfo) throws IOException { Path regionDir = new Path(this.tableDir, regionInfo.getEncodedName()); Path daughterTmpDir = this.getSplitsDir(regionInfo); - if (fs.exists(daughterTmpDir) && !rename(daughterTmpDir, regionDir)) { - throw new IOException("Unable to rename " + daughterTmpDir + " to " + regionDir); + if (fs.exists(daughterTmpDir)) { + // Write HRI to a file in case we need to recover hbase:meta + Path regionInfoFile = new Path(daughterTmpDir, REGION_INFO_FILE); + byte[] regionInfoContent = getRegionInfoFileContent(regionInfo); + writeRegionInfoFileContent(conf, fs, regionInfoFile, regionInfoContent); + + // Move the daughter temp dir to the table dir + if (!rename(daughterTmpDir, regionDir)) { + throw new IOException("Unable to rename " + daughterTmpDir + " to " + regionDir); + } } return regionDir; }