From a9f7485783e36ed2d483bb618a46db190fe1adfd Mon Sep 17 00:00:00 2001 From: rahulgidwani Date: Tue, 20 Jan 2015 16:29:58 -0800 Subject: [PATCH] HBASE-12891 have hbck do region consistency checks in parallel --- .../org/apache/hadoop/hbase/util/HBaseFsck.java | 31 ++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java index 719175a..59c9001 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java @@ -1648,9 +1648,20 @@ public class HBaseFsck extends Configured { */ private void checkAndFixConsistency() throws IOException, KeeperException, InterruptedException { - for (java.util.Map.Entry e: regionInfoMap.entrySet()) { - checkRegionConsistency(e.getKey(), e.getValue()); + List workItems = + Lists.newArrayListWithExpectedSize(regionInfoMap.size()); + for (java.util.Map.Entry e : regionInfoMap.entrySet()) { + workItems.add(new WorkItemRegionConsistency(e.getKey(), e.getValue())); } + List> workFutures = executor.invokeAll(workItems); + for(Future f: workFutures) { + try { + f.get(); + } catch(ExecutionException e) { + LOG.warn("Could not check region consistency " , e.getCause()); + } + } + LOG.info("Completed checks for " + regionInfoMap.size() + " regions"); } private void preCheckPermission() throws IOException, AccessDeniedException { @@ -2228,6 +2239,22 @@ public class HBaseFsck extends Configured { } }; + class WorkItemRegionConsistency implements Callable { + private final String key; + private final HbckInfo hbi; + + WorkItemRegionConsistency(String key, HbckInfo hbi) { + this.key = key; + this.hbi = hbi; + } + + @Override + public synchronized Void call() throws Exception { + checkRegionConsistency(key, hbi); + return null; + } + } + /** * Maintain information about a particular table. -- 2.1.0