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.