Author: todd
Date: Tue Sep 13 01:13:59 2011
New Revision: 1169995
URL: http://svn.apache.org/viewvc?rev=1169995&view=rev
Log:
HBASE-4272. Add -metaonly flag to hbck feature to only inspect and try to
repair META and ROOT.
Modified:
hbase/branches/0.90/CHANGES.txt
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java
Modified: hbase/branches/0.90/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hbase/branches/0.90/CHANGES.txt?rev=1169995&r1=1169994&r2=1169995&view=diff
==============================================================================
--- hbase/branches/0.90/CHANGES.txt (original)
+++ hbase/branches/0.90/CHANGES.txt Tue Sep 13 01:13:59 2011
@@ -50,6 +50,8 @@ Release 0.90.5 - Unreleased
easier (Jonathan Hsieh)
HBASE-4325 Improve error message when using STARTROW for meta scans
(Jonathan Hsieh)
+ HBASE-4272. Add -metaonly flag to hbck feature to only inspect and try
+ to repair META and ROOT. (todd)
Release 0.90.4 - August 10, 2011
BUG FIXES
Modified:
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java
URL:
http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java?rev=1169995&r1=1169994&r2=1169995&view=diff
==============================================================================
---
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java
(original)
+++
hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java
Tue Sep 13 01:13:59 2011
@@ -88,6 +88,8 @@ public class HBaseFsck {
private boolean fix = false; // do we want to try fixing the errors?
private boolean rerun = false; // if we tried to fix something rerun hbck
private static boolean summary = false; // if we want to print less output
+ private boolean checkMetaOnly = false;
+
// Empty regioninfo qualifiers in .META.
private Set<Result> emptyRegionInfoQualifiers = new HashSet<Result>();
private int numThreads = MAX_NUM_THREADS;
@@ -140,6 +142,7 @@ public class HBaseFsck {
errors.reportError("Encountered fatal error. Exiting...");
return -1;
}
+
getMetaEntries();
// Check if .META. is found only once and in the right place
@@ -150,20 +153,22 @@ public class HBaseFsck {
}
// get a list of all tables that have not changed recently.
- AtomicInteger numSkipped = new AtomicInteger(0);
- HTableDescriptor[] allTables = getTables(numSkipped);
- errors.print("Number of Tables: " + allTables.length);
- if (details) {
- if (numSkipped.get() > 0) {
- errors.detail("Number of Tables in flux: " + numSkipped.get());
- }
- for (HTableDescriptor td : allTables) {
- String tableName = td.getNameAsString();
- errors.detail(" Table: " + tableName + "\t" +
- (td.isReadOnly() ? "ro" : "rw") + "\t" +
- (td.isRootRegion() ? "ROOT" :
- (td.isMetaRegion() ? "META" : " ")) + "\t" +
- " families: " + td.getFamilies().size());
+ if (!checkMetaOnly) {
+ AtomicInteger numSkipped = new AtomicInteger(0);
+ HTableDescriptor[] allTables = getTables(numSkipped);
+ errors.print("Number of Tables: " + allTables.length);
+ if (details) {
+ if (numSkipped.get() > 0) {
+ errors.detail("Number of Tables in flux: " + numSkipped.get());
+ }
+ for (HTableDescriptor td : allTables) {
+ String tableName = td.getNameAsString();
+ errors.detail(" Table: " + tableName + "\t" +
+ (td.isReadOnly() ? "ro" : "rw") + "\t" +
+ (td.isRootRegion() ? "ROOT" :
+ (td.isMetaRegion() ? "META" : " ")) + "\t" +
+ " families: " + td.getFamilies().size());
+ }
}
}
@@ -260,10 +265,15 @@ public class HBaseFsck {
boolean foundVersionFile = false;
FileStatus[] files = fs.listStatus(rootDir);
for (FileStatus file : files) {
- if (file.getPath().getName().equals(HConstants.VERSION_FILE_NAME)) {
+ String dirName = file.getPath().getName();
+ if (dirName.equals(HConstants.VERSION_FILE_NAME)) {
foundVersionFile = true;
} else {
- tableDirs.add(file);
+ if (!checkMetaOnly ||
+ dirName.equals("-ROOT-") ||
+ dirName.equals(".META.")) {
+ tableDirs.add(file);
+ }
}
}
@@ -777,8 +787,11 @@ public class HBaseFsck {
MetaScanner.metaScan(conf, visitor, null, null,
Integer.MAX_VALUE, HConstants.ROOT_TABLE_NAME);
- // Scan .META. to pick up user regions
- MetaScanner.metaScan(conf, visitor);
+ if (!checkMetaOnly) {
+ // Scan .META. to pick up user regions
+ MetaScanner.metaScan(conf, visitor);
+ }
+
errors.print("");
}
@@ -1015,6 +1028,9 @@ public class HBaseFsck {
// list all online regions from this region server
List<HRegionInfo> regions = server.getOnlineRegions();
+ if (hbck.checkMetaOnly) {
+ regions = filterOnlyMetaRegions(regions);
+ }
if (details) {
errors.detail("RegionServer: " + rsinfo.getServerName() +
" number of regions: " + regions.size());
@@ -1040,6 +1056,16 @@ public class HBaseFsck {
notifyAll(); // wakeup anybody waiting for this item to be done
}
}
+
+ private List<HRegionInfo> filterOnlyMetaRegions(List<HRegionInfo> regions)
{
+ List<HRegionInfo> ret = Lists.newArrayList();
+ for (HRegionInfo hri : regions) {
+ if (hri.isMetaRegion() || hri.isRootRegion()) {
+ ret.add(hri);
+ }
+ }
+ return ret;
+ }
}
/**
@@ -1130,6 +1156,14 @@ public class HBaseFsck {
}
/**
+ * Set META check mode.
+ * Print only info about META table deployment/state
+ */
+ void setCheckMetaOnly() {
+ checkMetaOnly = true;
+ }
+
+ /**
* Check if we should rerun fsck again. This checks if we've tried to
* fix something and we should rerun fsck tool again.
* Display the full report from fsck. This displays all live and dead
@@ -1175,7 +1209,7 @@ public class HBaseFsck {
System.err.println(" -sleepBeforeRerun {timeInSeconds} Sleep this many
seconds" +
" before checking if the fix worked if run with -fix");
System.err.println(" -summary Print only summary of the tables and
status.");
-
+ System.err.println(" -metaonly Only check the state of ROOT and META
tables.");
Runtime.getRuntime().exit(-2);
}
@@ -1226,6 +1260,8 @@ public class HBaseFsck {
fsck.setFixErrors(true);
} else if (cmd.equals("-summary")) {
fsck.setSummary();
+ } else if (cmd.equals("-metaonly")) {
+ fsck.setCheckMetaOnly();
} else {
String str = "Unknown command line option : " + cmd;
LOG.info(str);