diff --git src/main/java/org/apache/hadoop/hbase/HConstants.java src/main/java/org/apache/hadoop/hbase/HConstants.java index 841cfda..0c800be 100644 --- src/main/java/org/apache/hadoop/hbase/HConstants.java +++ src/main/java/org/apache/hadoop/hbase/HConstants.java @@ -597,6 +597,9 @@ public final class HConstants { */ public static final float HBASE_CLUSTER_MINIMUM_MEMORY_THRESHOLD = 0.2f; + /** META table's directory name on file systems not supporting file name .META. (ex:windows)*/ + public static final byte [] META_TABLE_DIR_NAME_ON_WINDOWS = Bytes.toBytes(".META"); + public static final Pattern CP_HTD_ATTR_KEY_PATTERN = Pattern.compile ("^coprocessor\\$([0-9]+)$", Pattern.CASE_INSENSITIVE); public static final Pattern CP_HTD_ATTR_VALUE_PATTERN = @@ -694,8 +697,8 @@ public final class HConstants { /** Directories that are not HBase user table directories */ public static final List HBASE_NON_USER_TABLE_DIRS = Collections.unmodifiableList(Arrays.asList((String[])ArrayUtils.addAll( - new String[] { Bytes.toString(META_TABLE_NAME), Bytes.toString(ROOT_TABLE_NAME) }, - HBASE_NON_TABLE_DIRS.toArray()))); + new String[] { Bytes.toString(META_TABLE_NAME), Bytes.toString(META_TABLE_DIR_NAME_ON_WINDOWS), + Bytes.toString(ROOT_TABLE_NAME) }, HBASE_NON_TABLE_DIRS.toArray()))); /** Health script related settings. */ public static final String HEALTH_SCRIPT_LOC = "hbase.node.health.script.location"; diff --git src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java index 6e73cbc..1692d3a 100644 --- src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java +++ src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java @@ -5518,11 +5518,12 @@ public class HRegion implements HeapSize { // , Writable{ HRegion region = null; String rootStr = Bytes.toString(HConstants.ROOT_TABLE_NAME); String metaStr = Bytes.toString(HConstants.META_TABLE_NAME); + String metaOnWindowsStr = Bytes.toString(HConstants.META_TABLE_DIR_NAME_ON_WINDOWS); // Currently expects tables have one region only. if (p.getName().startsWith(rootStr)) { region = HRegion.newHRegion(p, log, fs, c, HRegionInfo.ROOT_REGIONINFO, HTableDescriptor.ROOT_TABLEDESC, null); - } else if (p.getName().startsWith(metaStr)) { + } else if (p.getName().startsWith(metaStr) || p.getName().startsWith(metaOnWindowsStr)) { region = HRegion.newHRegion(p, log, fs, c, HRegionInfo.FIRST_META_REGIONINFO, HTableDescriptor.META_TABLEDESC, null); } else { diff --git src/main/java/org/apache/hadoop/hbase/util/FSUtils.java src/main/java/org/apache/hadoop/hbase/util/FSUtils.java index 1242088..c0068b6 100644 --- src/main/java/org/apache/hadoop/hbase/util/FSUtils.java +++ src/main/java/org/apache/hadoop/hbase/util/FSUtils.java @@ -982,6 +982,10 @@ public abstract class FSUtils { return new Path(rootdir, tableName); } + /** Set to true on Windows platforms */ + public static final boolean WINDOWS + = System.getProperty("os.name").startsWith("Windows"); + /** * Filter for all dirs that don't start with '.' */ diff --git src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java index 052ae95..d4ab5d8 100644 --- src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java +++ src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java @@ -3105,7 +3105,8 @@ public class HBaseFsck extends Configured implements Tool { String tableName = tableDir.getPath().getName(); // ignore hidden files if (tableName.startsWith(".") && - !tableName.equals( Bytes.toString(HConstants.META_TABLE_NAME))) { + !tableName.equals( Bytes.toString(HConstants.META_TABLE_NAME)) && + !tableName.equals( Bytes.toString(HConstants.META_TABLE_DIR_NAME_ON_WINDOWS))) { return null; } // level 2: //*