commit 6aafb164bc477189d3844365a1fed43d28772ce3 Author: Nicolas Spiegelberg Date: 3 weeks ago HBASE-4803 Split log worker should terminate properly when waiting for znode Summary: This is an attempt to fix the fact that SplitLogWorker threads were not being terminated properly in some multi-master unit tests. Test Plan: Run unit tests, dev cluster testing Reviewers: pkhemani, kannan Reviewed By: pkhemani CC: hbase-eng@lists, pkhemani, mbautin diff --git src/main/java/org/apache/hadoop/hbase/regionserver/SplitLogWorker.java src/main/java/org/apache/hadoop/hbase/regionserver/SplitLogWorker.java index 1d329b0..355d88c 100644 --- src/main/java/org/apache/hadoop/hbase/regionserver/SplitLogWorker.java +++ src/main/java/org/apache/hadoop/hbase/regionserver/SplitLogWorker.java @@ -142,7 +142,7 @@ public class SplitLogWorker extends ZooKeeperListener implements Runnable { int res; // wait for master to create the splitLogZnode res = -1; - while (res == -1) { + while (res == -1 && !exitWorker) { try { res = ZKUtil.checkExists(watcher, watcher.splitLogZNode); } catch (KeeperException e) { @@ -156,13 +156,20 @@ public class SplitLogWorker extends ZooKeeperListener implements Runnable { " waiting for master to create one"); Thread.sleep(1000); } catch (InterruptedException e) { - LOG.debug("Interrupted while waiting for " + watcher.splitLogZNode); - assert exitWorker == true; + String s = "Interrupted while waiting for " + watcher.splitLogZNode; + if (!exitWorker) { + LOG.debug(s); + } else { + LOG.error(s + " (exitWorker is not set)"); + } + break; } } } - taskLoop(); + if (!exitWorker) { + taskLoop(); + } } catch (Throwable t) { // only a logical error can cause here. Printing it out // to make debugging easier