diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/master/CatalogJanitor.java hbase-server/src/main/java/org/apache/hadoop/hbase/master/CatalogJanitor.java index 476c796..bff85cb 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/master/CatalogJanitor.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/CatalogJanitor.java @@ -404,27 +404,27 @@ public class CatalogJanitor extends ScheduledChore { return new Pair(Boolean.FALSE, Boolean.FALSE); } } catch (IOException ioe) { - LOG.warn("Error trying to determine if daughter region exists, " + + LOG.error("Error trying to determine if daughter region exists, " + "assuming exists and has references", ioe); return new Pair(Boolean.TRUE, Boolean.TRUE); } + boolean references = false; + HTableDescriptor parentDescriptor = getTableDescriptor(parent.getTable()); try { regionFs = HRegionFileSystem.openRegionFromFileSystem( this.services.getConfiguration(), fs, tabledir, daughter, true); + + for (HColumnDescriptor family: parentDescriptor.getFamilies()) { + if ((references = regionFs.hasReferences(family.getNameAsString()))) { + break; + } + } } catch (IOException e) { - LOG.warn("Error trying to determine referenced files from : " + daughter.getEncodedName() + LOG.error("Error trying to determine referenced files from : " + daughter.getEncodedName() + ", to: " + parent.getEncodedName() + " assuming has references", e); return new Pair(Boolean.TRUE, Boolean.TRUE); } - - boolean references = false; - HTableDescriptor parentDescriptor = getTableDescriptor(parent.getTable()); - for (HColumnDescriptor family: parentDescriptor.getFamilies()) { - if ((references = regionFs.hasReferences(family.getNameAsString()))) { - break; - } - } return new Pair(Boolean.TRUE, Boolean.valueOf(references)); } diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java index 995b111..508b4a7 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java @@ -252,9 +252,18 @@ public class HRegionFileSystem { * @throws IOException */ public boolean hasReferences(final String familyName) throws IOException { - FileStatus[] files = FSUtils.listStatus(fs, getStoreDir(familyName), - new FSUtils.ReferenceFileFilter(fs)); - return files != null && files.length > 0; + FileStatus[] files = FSUtils.listStatus(fs, getStoreDir(familyName)); + if (files != null) { + for(FileStatus stat: files) { + if(stat.isDirectory()) { + continue; + } + if(StoreFileInfo.isReference(stat.getPath())) { + return true; + } + } + } + return false; } /**