virajjasani commented on code in PR #7406:
URL: https://github.com/apache/hbase/pull/7406#discussion_r2485173474


##########
hbase-server/src/main/java/org/apache/hadoop/hbase/master/janitor/MetaFixer.java:
##########
@@ -217,6 +222,27 @@ private static List<RegionInfo> createMetaEntries(final 
MasterServices masterSer
     return createMetaEntriesSuccesses;
   }
 
+  private static void createRegionDirectories(final MasterServices 
masterServices,
+    final List<RegionInfo> regions) {
+    if (regions.isEmpty()) {
+      return;
+    }
+    final MasterFileSystem mfs = masterServices.getMasterFileSystem();
+    final Path rootDir = mfs.getRootDir();
+    for (RegionInfo regionInfo : regions) {
+      if (regionInfo.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {
+        try {
+          Path tableDir = CommonFSUtils.getTableDir(rootDir, 
regionInfo.getTable());
+          
HRegionFileSystem.createRegionOnFileSystem(masterServices.getConfiguration(),
+            mfs.getFileSystem(), tableDir, regionInfo);
+        } catch (IOException e) {
+          LOG.warn("Failed to create region directory for {}: {}",
+            regionInfo.getRegionNameAsString(), e.getMessage());

Review Comment:
   Let's print whole stacktrace here instead of error message?



##########
hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java:
##########
@@ -848,6 +851,14 @@ private void writeRegionInfoOnFilesystem(final byte[] 
regionInfoContent, final b
         CommonFSUtils.delete(fs, tmpPath, true);
       }
 
+      // Check parent (region) directory exists first to maintain HBASE-29662 
protection
+      if (!fs.exists(getRegionDir())) {
+        throw new IOException("Region directory does not exist: " + 
getRegionDir());
+      }
+      if (!fs.exists(getTempDir())) {
+        fs.mkdirs(getTempDir());

Review Comment:
   Curious, this was not covered so far?



##########
hbase-server/src/main/java/org/apache/hadoop/hbase/master/janitor/MetaFixer.java:
##########
@@ -217,6 +222,27 @@ private static List<RegionInfo> createMetaEntries(final 
MasterServices masterSer
     return createMetaEntriesSuccesses;
   }
 
+  private static void createRegionDirectories(final MasterServices 
masterServices,
+    final List<RegionInfo> regions) {
+    if (regions.isEmpty()) {
+      return;
+    }
+    final MasterFileSystem mfs = masterServices.getMasterFileSystem();
+    final Path rootDir = mfs.getRootDir();
+    for (RegionInfo regionInfo : regions) {
+      if (regionInfo.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {
+        try {
+          Path tableDir = CommonFSUtils.getTableDir(rootDir, 
regionInfo.getTable());
+          
HRegionFileSystem.createRegionOnFileSystem(masterServices.getConfiguration(),
+            mfs.getFileSystem(), tableDir, regionInfo);
+        } catch (IOException e) {
+          LOG.warn("Failed to create region directory for {}: {}",
+            regionInfo.getRegionNameAsString(), e.getMessage());

Review Comment:
   Also, if we suppress the error here, how can `fixHoles` progress? I hope 
that's the only place using this utility?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to