From 75489200ed63bf5fc46550c4c1b905dfc4705cbf Mon Sep 17 00:00:00 2001 From: mbautin Date: Mon, 17 Oct 2011 23:14:56 -0700 Subject: [PATCH] review_HBASE-4607_SplitLogWorker_should_correct_2011-10-17_23_14_56 --- .../hadoop/hbase/regionserver/SplitLogWorker.java | 74 +++++++++++--------- 1 files changed, 40 insertions(+), 34 deletions(-) diff --git a/src/main/java/org/apache/hadoop/hbase/regionserver/SplitLogWorker.java b/src/main/java/org/apache/hadoop/hbase/regionserver/SplitLogWorker.java index a43e0b3..82a9b25 100644 --- a/src/main/java/org/apache/hadoop/hbase/regionserver/SplitLogWorker.java +++ b/src/main/java/org/apache/hadoop/hbase/regionserver/SplitLogWorker.java @@ -136,40 +136,45 @@ public class SplitLogWorker extends ZooKeeperListener implements Runnable { @Override public void run() { - try { - LOG.info("SplitLogWorker " + this.serverName + " starting"); - this.watcher.registerListener(this); - int res; - // wait for master to create the splitLogZnode - res = -1; - while (res == -1) { - try { - res = ZKUtil.checkExists(watcher, watcher.splitLogZNode); - } catch (KeeperException e) { - // ignore - LOG.warn("Exception when checking for " + watcher.splitLogZNode + - " ... retrying", e); - } - if (res == -1) { + try { + LOG.info("SplitLogWorker " + this.serverName + " starting"); + this.watcher.registerListener(this); + int res; + // wait for master to create the splitLogZnode + res = -1; + while (res == -1 && !exitWorker) { try { - LOG.info(watcher.splitLogZNode + " znode does not exist," + - " waiting for master to create one"); - Thread.sleep(1000); - } catch (InterruptedException e) { - LOG.debug("Interrupted while waiting for " + watcher.splitLogZNode); - assert exitWorker == true; + res = ZKUtil.checkExists(watcher, watcher.splitLogZNode); + } catch (KeeperException e) { + // ignore + LOG.warn("Exception when checking for " + watcher.splitLogZNode + + " ... retrying", e); + } + if (res == -1) { + try { + LOG.info(watcher.splitLogZNode + " znode does not exist," + + " waiting for master to create one"); + Thread.sleep(1000); + } catch (InterruptedException e) { + LOG.debug("Interrupted while waiting for " + watcher.splitLogZNode + + (exitWorker ? "" : " (ERROR: exitWorker is not set, " + + "exiting anyway)")); + exitWorker = true; + break; + } } } - } - taskLoop(); - } catch (Throwable t) { - // only a logical error can cause here. Printing it out - // to make debugging easier - LOG.error("unexpected error ", t); - } finally { - LOG.info("SplitLogWorker " + this.serverName + " exiting"); - } + if (!exitWorker) { + taskLoop(); + } + } catch (Throwable t) { + // only a logical error can cause here. Printing it out + // to make debugging easier + LOG.error("unexpected error ", t); + } finally { + LOG.info("SplitLogWorker " + this.serverName + " exiting"); + } } /** @@ -181,7 +186,7 @@ public class SplitLogWorker extends ZooKeeperListener implements Runnable { * try to grab every task that has been put up */ private void taskLoop() { - while (true) { + while (!exitWorker) { int seq_start = taskReadySeq; List paths = getTaskList(); if (paths == null) { @@ -195,7 +200,7 @@ public class SplitLogWorker extends ZooKeeperListener implements Runnable { // don't call ZKSplitLog.getNodeName() because that will lead to // double encoding of the path name grabTask(ZKUtil.joinZNode(watcher.splitLogZNode, paths.get(idx))); - if (exitWorker == true) { + if (exitWorker) { return; } } @@ -205,8 +210,9 @@ public class SplitLogWorker extends ZooKeeperListener implements Runnable { taskReadyLock.wait(); } catch (InterruptedException e) { LOG.info("SplitLogWorker interrupted while waiting for task," + - " exiting: " + e.toString()); - assert exitWorker == true; + " exiting: " + e.toString() + (exitWorker ? "" : + " (ERROR: exitWorker is not set, exiting anyway)")); + exitWorker = true; return; } } -- 1.7.4