Return-Path: X-Original-To: apmail-hbase-commits-archive@www.apache.org Delivered-To: apmail-hbase-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id E3C651859F for ; Tue, 15 Sep 2015 23:35:22 +0000 (UTC) Received: (qmail 37496 invoked by uid 500); 15 Sep 2015 23:35:17 -0000 Delivered-To: apmail-hbase-commits-archive@hbase.apache.org Received: (qmail 37453 invoked by uid 500); 15 Sep 2015 23:35:17 -0000 Mailing-List: contact commits-help@hbase.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@hbase.apache.org Delivered-To: mailing list commits@hbase.apache.org Received: (qmail 37444 invoked by uid 99); 15 Sep 2015 23:35:17 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 15 Sep 2015 23:35:17 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id A021FDFD9E; Tue, 15 Sep 2015 23:35:17 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: eclark@apache.org To: commits@hbase.apache.org Message-Id: <1613dc27a2e64619aa79e70858ae4f01@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: hbase git commit: HBASE-14145 added flag to canary to try all regions in regionserver mode Date: Tue, 15 Sep 2015 23:35:17 +0000 (UTC) Repository: hbase Updated Branches: refs/heads/master 76f4e157a -> 903d876f2 HBASE-14145 added flag to canary to try all regions in regionserver mode Signed-off-by: Elliott Clark Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/903d876f Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/903d876f Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/903d876f Branch: refs/heads/master Commit: 903d876f29aeb11a290d0daed6e0778c8f4ac961 Parents: 76f4e15 Author: Sanjeev Srivatsa Authored: Tue Sep 8 17:28:11 2015 -0700 Committer: Elliott Clark Committed: Tue Sep 15 16:32:08 2015 -0700 ---------------------------------------------------------------------- .../org/apache/hadoop/hbase/tool/Canary.java | 56 +++++++++++++++++--- 1 file changed, 48 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/903d876f/hbase-server/src/main/java/org/apache/hadoop/hbase/tool/Canary.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/tool/Canary.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/tool/Canary.java index 6b7c2b1..a1c8c61 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/tool/Canary.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/tool/Canary.java @@ -31,6 +31,7 @@ import java.util.Map; import java.util.Random; import java.util.Set; import java.util.TreeSet; +import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; @@ -310,13 +311,15 @@ public final class Canary implements Tool { private String serverName; private HRegionInfo region; private ExtendedSink sink; + private AtomicLong successes; RegionServerTask(Connection connection, String serverName, HRegionInfo region, - ExtendedSink sink) { + ExtendedSink sink, AtomicLong successes) { this.connection = connection; this.serverName = serverName; this.region = region; this.sink = sink; + this.successes = successes; } @Override @@ -352,12 +355,14 @@ public final class Canary implements Tool { s.close(); stopWatch.stop(); } + successes.incrementAndGet(); sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime()); } catch (TableNotFoundException tnfe) { LOG.error("Table may be deleted", tnfe); // This is ignored because it doesn't imply that the regionserver is dead } catch (TableNotEnabledException tnee) { // This is considered a success since we got a response. + successes.incrementAndGet(); LOG.debug("The targeted table was disabled. Assuming success."); } catch (DoNotRetryIOException dnrioe) { sink.publishReadFailure(tableName.getNameAsString(), serverName); @@ -406,6 +411,7 @@ public final class Canary implements Tool { private long timeout = DEFAULT_TIMEOUT; private boolean failOnError = true; private boolean regionServerMode = false; + private boolean regionServerAllRegions = false; private boolean writeSniffing = false; private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME; @@ -466,6 +472,8 @@ public final class Canary implements Tool { } } else if(cmd.equals("-regionserver")) { this.regionServerMode = true; + } else if(cmd.equals("-allRegions")) { + this.regionServerAllRegions = true; } else if(cmd.equals("-writeSniffing")) { this.writeSniffing = true; } else if (cmd.equals("-e")) { @@ -512,6 +520,10 @@ public final class Canary implements Tool { index = i; } } + if (this.regionServerAllRegions && !this.regionServerMode) { + System.err.println("-allRegions can only be specified in regionserver mode."); + printUsageAndExit(); + } return index; } @@ -597,6 +609,8 @@ public final class Canary implements Tool { System.err.println(" -help Show this help and exit."); System.err.println(" -regionserver replace the table argument to regionserver,"); System.err.println(" which means to enable regionserver mode"); + System.err.println(" -allRegions Tries all regions on a regionserver,"); + System.err.println(" only works in regionserver mode."); System.err.println(" -daemon Continuous check at defined intervals."); System.err.println(" -interval Interval between checks (sec)"); System.err.println(" -e Use region/regionserver as regular expression"); @@ -630,7 +644,7 @@ public final class Canary implements Tool { if (this.regionServerMode) { monitor = new RegionServerMonitor(connection, monitorTargets, this.useRegExp, - (ExtendedSink) this.sink, this.executor); + (ExtendedSink) this.sink, this.executor, this.regionServerAllRegions); } else { monitor = new RegionMonitor(connection, monitorTargets, this.useRegExp, this.sink, this.executor, @@ -935,9 +949,12 @@ public final class Canary implements Tool { // a monitor for regionserver mode private static class RegionServerMonitor extends Monitor { + private boolean allRegions; + public RegionServerMonitor(Connection connection, String[] monitorTargets, boolean useRegExp, - ExtendedSink sink, ExecutorService executor) { + ExtendedSink sink, ExecutorService executor, boolean allRegions) { super(connection, monitorTargets, useRegExp, sink, executor); + this.allRegions = allRegions; } private ExtendedSink getSink() { @@ -986,13 +1003,29 @@ public final class Canary implements Tool { private void monitorRegionServers(Map> rsAndRMap) { List tasks = new ArrayList(); - Random rand =new Random(); - // monitor one region on every region server + Map successMap = new HashMap(); + Random rand = new Random(); for (Map.Entry> entry : rsAndRMap.entrySet()) { String serverName = entry.getKey(); - // random select a region - HRegionInfo region = entry.getValue().get(rand.nextInt(entry.getValue().size())); - tasks.add(new RegionServerTask(this.connection, serverName, region, getSink())); + AtomicLong successes = new AtomicLong(0); + successMap.put(serverName, successes); + if (this.allRegions) { + for (HRegionInfo region : entry.getValue()) { + tasks.add(new RegionServerTask(this.connection, + serverName, + region, + getSink(), + successes)); + } + } else { + // random select a region if flag not set + HRegionInfo region = entry.getValue().get(rand.nextInt(entry.getValue().size())); + tasks.add(new RegionServerTask(this.connection, + serverName, + region, + getSink(), + successes)); + } } try { for (Future future : this.executor.invokeAll(tasks)) { @@ -1003,6 +1036,13 @@ public final class Canary implements Tool { this.errorCode = ERROR_EXIT_CODE; } } + if (this.allRegions) { + for (Map.Entry> entry : rsAndRMap.entrySet()) { + String serverName = entry.getKey(); + LOG.info("Successfully read " + successMap.get(serverName) + " regions out of " + + entry.getValue().size() + " on regionserver:" + serverName); + } + } } catch (InterruptedException e) { this.errorCode = ERROR_EXIT_CODE; LOG.error("Sniff regionserver failed!", e);