Author: nspiegelberg
Date: Tue Oct 11 02:01:47 2011
New Revision: 1181359

URL: http://svn.apache.org/viewvc?rev=1181359&view=rev
Log:
HBase FSCK: Ignore Non-numeric Directories

Summary:
Ran HBCK on prod cluster & it threw an error for .META./compaction.dir.  Layout 
in
HBase is: /hbase/table/region & region is always a numeric hash.  So, we should
ignore directories at the region level that are non-numeric.

Test Plan:
bin/hbase fsck

DiffCamp Revision: 148626
Reviewed By: ageorgiev
CC: nspiegelberg, ageorgiev
Revert Plan:
OK

Modified:
    
hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/client/HBaseFsck.java

Modified: 
hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/client/HBaseFsck.java
URL: 
http://svn.apache.org/viewvc/hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/client/HBaseFsck.java?rev=1181359&r1=1181358&r2=1181359&view=diff
==============================================================================
--- 
hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/client/HBaseFsck.java 
(original)
+++ 
hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/client/HBaseFsck.java 
Tue Oct 11 02:01:47 2011
@@ -178,17 +178,21 @@ public class HBaseFsck {
       errors.reportError("Version file does not exist in root dir " + rootDir);
     }
 
+    // level 1:  <HBASE_DIR>/*
     for (FileStatus tableDir : tableDirs) {
       String tableName = tableDir.getPath().getName();
+      // ignore hidden files
       if (tableName.startsWith(".") &&
           !tableName.equals( Bytes.toString(HConstants.META_TABLE_NAME)))
         continue;
+      // level 2: <HBASE_DIR>/<table>/*
       FileStatus[] regionDirs = fs.listStatus(tableDir.getPath());
       for (FileStatus regionDir : regionDirs) {
-        String finalComponent = regionDir.getPath().getName();
-        if (finalComponent.startsWith(".")) continue;
+        String encodedName = regionDir.getPath().getName();
+
+        // ignore directories that aren't numeric
+        if (!encodedName.matches("^\\d+$")) continue;
 
-        String encodedName = finalComponent;
         HbckInfo hbi = getOrCreateInfo(encodedName);
         hbi.foundRegionDir = regionDir;
       }


Reply via email to