From ed0a7a70d4cf95a86e5f5380ab6bbdcdd1f45b6b Mon Sep 17 00:00:00 2001 From: Sanjeev Srivatsa Date: Tue, 8 Sep 2015 17:28:11 -0700 Subject: [PATCH] added flag to canary to try all regions in regionserver mode --- .../java/org/apache/hadoop/hbase/tool/Canary.java | 31 +++++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) 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..0a65117 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 @@ -406,6 +406,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 +467,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 +515,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 +604,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 +639,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 +944,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 +998,18 @@ 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 + 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())); + if (this.allRegions) { + for (HRegionInfo region : entry.getValue()) { + tasks.add(new RegionServerTask(this.connection, serverName, region, getSink())); + } + } 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())); + } } try { for (Future future : this.executor.invokeAll(tasks)) { -- 1.9.5