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]