Repository: hbase Updated Branches: refs/heads/branch-1.4 20cb47c38 -> 0d8fee215
HBASE-19391 Calling HRegion#initializeRegionInternals from a region replica can still re-create a region directory Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/2d12ae20 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/2d12ae20 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/2d12ae20 Branch: refs/heads/branch-1.4 Commit: 2d12ae2031e5d925e24b2bcf2005bbbd5ef7844e Parents: 20cb47c Author: Esteban Gutierrez <este...@apache.org> Authored: Wed Feb 21 15:28:50 2018 -0800 Committer: Andrew Purtell <apurt...@apache.org> Committed: Fri Feb 23 16:57:56 2018 -0800 ---------------------------------------------------------------------- .../hbase/regionserver/HRegionFileSystem.java | 29 ++++++++++---------- 1 file changed, 15 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/2d12ae20/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java ---------------------------------------------------------------------- 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 884485c..1a66063 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 @@ -950,28 +950,29 @@ public class HRegionFileSystem { public static HRegionFileSystem createRegionOnFileSystem(final Configuration conf, final FileSystem fs, final Path tableDir, final HRegionInfo regionInfo) throws IOException { HRegionFileSystem regionFs = new HRegionFileSystem(conf, fs, tableDir, regionInfo); - Path regionDir = regionFs.getRegionDir(); - if (fs.exists(regionDir)) { - LOG.warn("Trying to create a region that already exists on disk: " + regionDir); - throw new IOException("The specified region already exists on disk: " + regionDir); - } + // We only create a .regioninfo and the region directory if this is the default region replica + if (regionInfo.getReplicaId() == HRegionInfo.DEFAULT_REPLICA_ID) { + Path regionDir = regionFs.getRegionDir(); + if (fs.exists(regionDir)) { + LOG.warn("Trying to create a region that already exists on disk: " + regionDir); + throw new IOException("The specified region already exists on disk: " + regionDir); + } - // Create the region directory - if (!createDirOnFileSystem(fs, conf, regionDir)) { - LOG.warn("Unable to create the region directory: " + regionDir); - throw new IOException("Unable to create region directory: " + regionDir); - } + // Create the region directory + if (!createDirOnFileSystem(fs, conf, regionDir)) { + LOG.warn("Unable to create the region directory: " + regionDir); + throw new IOException("Unable to create region directory: " + regionDir); + } - // Write HRI to a file in case we need to recover hbase:meta - // Only primary replicas should write region info - if (regionInfo.getReplicaId() == HRegionInfo.DEFAULT_REPLICA_ID) { + // Write HRI to a file in case we need to recover hbase:meta regionFs.writeRegionInfoOnFilesystem(false); + return regionFs; } else { if (LOG.isDebugEnabled()) LOG.debug("Skipping creation of .regioninfo file for " + regionInfo); } - return regionFs; + return null; } /**