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;
   }
 
   /**

Reply via email to