You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2015/02/07 00:14:41 UTC

[3/3] hbase git commit: HBASE-12891 Parallel execution for Hbck checkRegionConsistency

HBASE-12891 Parallel execution for Hbck checkRegionConsistency

Signed-off-by: Andrew Purtell <ap...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/de08a82c
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/de08a82c
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/de08a82c

Branch: refs/heads/0.98
Commit: de08a82c64beb265d89037ceabda76309e3912fc
Parents: beab861
Author: rahulgidwani <ra...@flurry.com>
Authored: Fri Feb 6 15:14:21 2015 -0800
Committer: Andrew Purtell <ap...@apache.org>
Committed: Fri Feb 6 15:14:21 2015 -0800

----------------------------------------------------------------------
 .../org/apache/hadoop/hbase/util/HBaseFsck.java | 31 ++++++++++++++++++--
 1 file changed, 29 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/de08a82c/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java
----------------------------------------------------------------------
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 dd2ac41..410831c 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<String, HbckInfo> e: regionInfoMap.entrySet()) {
-      checkRegionConsistency(e.getKey(), e.getValue());
+    List<WorkItemRegionConsistency> workItems =
+        Lists.newArrayListWithExpectedSize(regionInfoMap.size());
+    for (java.util.Map.Entry<String, HbckInfo> e : regionInfoMap.entrySet()) {
+      workItems.add(new WorkItemRegionConsistency(e.getKey(), e.getValue()));
     }
+    List<Future<Void>> workFutures = executor.invokeAll(workItems);
+    for(Future<Void> 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<Void> {
+    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.