From 3abc0458e9ccd5b529581dcff4b6a0dba594fcdc Mon Sep 17 00:00:00 2001 From: Andrew Purtell Date: Tue, 26 Sep 2017 08:33:19 -0700 Subject: [PATCH] Amend HBASE-18830 TestCanaryTool does not check Canary monitor's error code Adjust exception control flow to fix findbugs warning NP_NULL_ON_SOME_PATH_EXCEPTION, Possible null pointer dereference of regionSink in org.apache.hadoop.hbase.tool.Canary$RegionMonitor.run() on exception path --- .../java/org/apache/hadoop/hbase/tool/Canary.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 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 755dae06ff6..a2b3d02dfb1 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 @@ -1022,19 +1022,14 @@ public final class Canary implements Tool { if (this.initAdmin()) { try { List> taskFutures = new LinkedList<>(); - RegionStdOutSink regionSink = null; - try { - regionSink = this.getSink(); - } catch (RuntimeException e) { - LOG.error("Run RegionMonitor failed!", e); - this.errorCode = ERROR_EXIT_CODE; - } + RegionStdOutSink regionSink = this.getSink(); if (this.targets != null && this.targets.length > 0) { String[] tables = generateMonitorTables(this.targets); // Check to see that each table name passed in the -readTableTimeouts argument is also passed as a monitor target. if (! new HashSet<>(Arrays.asList(tables)).containsAll(this.configuredReadTableTimeouts.keySet())) { LOG.error("-readTableTimeouts can only specify read timeouts for monitor targets passed via command line."); this.errorCode = USAGE_EXIT_CODE; + return; } this.initialized = true; for (String table : tables) { @@ -1097,7 +1092,9 @@ public final class Canary implements Tool { } catch (Exception e) { LOG.error("Run regionMonitor failed", e); this.errorCode = ERROR_EXIT_CODE; - } + } finally { + this.done = true; + } } this.done = true; }