You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2011/04/26 01:03:13 UTC
svn commit: r1096627 - in /hbase/trunk: CHANGES.txt
src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.java
Author: stack
Date: Mon Apr 25 23:03:13 2011
New Revision: 1096627
URL: http://svn.apache.org/viewvc?rev=1096627&view=rev
Log:
HBASE-3819 TestSplitLogWorker has too many SLWs running -- makes for contention and occasional failures
Modified:
hbase/trunk/CHANGES.txt
hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.java
Modified: hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=1096627&r1=1096626&r2=1096627&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Mon Apr 25 23:03:13 2011
@@ -84,6 +84,8 @@ Release 0.91.0 - Unreleased
HBASE-3800 HMaster is not able to start due to AlreadyCreatedException
HBASE-3806 distributed log splitting double escapes task names
(Prakash Khemani)
+ HBASE-3819 TestSplitLogWorker has too many SLWs running -- makes for
+ contention and occasional failures
IMPROVEMENTS
HBASE-3290 Max Compaction Size (Nicolas Spiegelberg via Stack)
Modified: hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.java?rev=1096627&r1=1096626&r2=1096627&view=diff
==============================================================================
--- hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.java (original)
+++ hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.java Mon Apr 25 23:03:13 2011
@@ -58,6 +58,7 @@ public class TestSplitLogWorker {
private void waitForCounter(AtomicLong ctr, long oldval, long newval,
long timems) {
+ assert ctr.get() == oldval;
long curt = System.currentTimeMillis();
long endt = curt + timems;
while (curt < endt) {
@@ -72,7 +73,8 @@ public class TestSplitLogWorker {
return;
}
}
- assertTrue(false);
+ assertTrue("ctr=" + ctr.get() + ", oldval=" + oldval + ", newval=" + newval,
+ false);
}
@BeforeClass
@@ -85,7 +87,6 @@ public class TestSplitLogWorker {
@Before
public void setup() throws Exception {
- slw = null;
TEST_UTIL.startMiniZKCluster();
zkw = new ZooKeeperWatcher(TEST_UTIL.getConfiguration(),
"split-log-worker-tests", null);
@@ -102,13 +103,6 @@ public class TestSplitLogWorker {
@After
public void teardown() throws Exception {
- if (slw != null) {
- slw.stop();
- slw.worker.join(3000);
- if (slw.worker.isAlive()) {
- assertTrue("could not stop the worker thread" == null);
- }
- }
TEST_UTIL.shutdownMiniZKCluster();
}
@@ -139,12 +133,27 @@ public class TestSplitLogWorker {
TaskState.TASK_UNASSIGNED.get("mgr"), Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
- slw = new SplitLogWorker(zkw, TEST_UTIL.getConfiguration(), "rs",
- neverEndingTask);
+ SplitLogWorker slw = new SplitLogWorker(zkw, TEST_UTIL.getConfiguration(),
+ "rs", neverEndingTask);
slw.start();
- waitForCounter(tot_wkr_task_acquired, 0, 1, 100);
- assertTrue(TaskState.TASK_OWNED.equals(ZKUtil.getData(zkw,
+ try {
+ waitForCounter(tot_wkr_task_acquired, 0, 1, 100);
+ assertTrue(TaskState.TASK_OWNED.equals(ZKUtil.getData(zkw,
ZKSplitLog.getEncodedNodeName(zkw, "tatas")), "rs"));
+ } finally {
+ stopSplitLogWorker(slw);
+ }
+ }
+
+ private void stopSplitLogWorker(final SplitLogWorker slw)
+ throws InterruptedException {
+ if (slw != null) {
+ slw.stop();
+ slw.worker.join(3000);
+ if (slw.worker.isAlive()) {
+ assertTrue(("Could not stop the worker thread slw=" + slw) == null);
+ }
+ }
}
@Test
@@ -167,67 +176,73 @@ public class TestSplitLogWorker {
ZKSplitLog.getEncodedNodeName(zkw, "trft")), "svr1") ||
TaskState.TASK_OWNED.equals(ZKUtil.getData(zkw,
ZKSplitLog.getEncodedNodeName(zkw, "trft")), "svr2"));
- slw1.stop();
- slw2.stop();
- slw1.worker.join();
- slw2.worker.join();
+ stopSplitLogWorker(slw1);
+ stopSplitLogWorker(slw2);
}
@Test
public void testPreemptTask() throws Exception {
LOG.info("testPreemptTask");
- slw = new SplitLogWorker(zkw, TEST_UTIL.getConfiguration(),
+ SplitLogWorker slw = new SplitLogWorker(zkw, TEST_UTIL.getConfiguration(),
"tpt_svr", neverEndingTask);
slw.start();
- Thread.yield(); // let the worker start
- Thread.sleep(100);
+ try {
+ Thread.yield(); // let the worker start
+ Thread.sleep(100);
- // this time create a task node after starting the splitLogWorker
- zkw.getZooKeeper().create(ZKSplitLog.getEncodedNodeName(zkw, "tpt_task"),
+ // this time create a task node after starting the splitLogWorker
+ zkw.getZooKeeper().create(ZKSplitLog.getEncodedNodeName(zkw, "tpt_task"),
TaskState.TASK_UNASSIGNED.get("manager"), Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
- waitForCounter(tot_wkr_task_acquired, 0, 1, 1000);
- assertEquals(1, slw.taskReadySeq);
- assertTrue(TaskState.TASK_OWNED.equals(ZKUtil.getData(zkw,
+ waitForCounter(tot_wkr_task_acquired, 0, 1, 1000);
+ assertEquals(1, slw.taskReadySeq);
+ assertTrue(TaskState.TASK_OWNED.equals(ZKUtil.getData(zkw,
ZKSplitLog.getEncodedNodeName(zkw, "tpt_task")), "tpt_svr"));
- ZKUtil.setData(zkw, ZKSplitLog.getEncodedNodeName(zkw, "tpt_task"),
+ ZKUtil.setData(zkw, ZKSplitLog.getEncodedNodeName(zkw, "tpt_task"),
TaskState.TASK_UNASSIGNED.get("manager"));
- waitForCounter(tot_wkr_preempt_task, 0, 1, 1000);
+ waitForCounter(tot_wkr_preempt_task, 0, 1, 1000);
+ } finally {
+ stopSplitLogWorker(slw);
+ }
}
@Test
public void testMultipleTasks() throws Exception {
LOG.info("testMultipleTasks");
- slw = new SplitLogWorker(zkw, TEST_UTIL.getConfiguration(),
+ SplitLogWorker slw = new SplitLogWorker(zkw, TEST_UTIL.getConfiguration(),
"tmt_svr", neverEndingTask);
slw.start();
- Thread.yield(); // let the worker start
- Thread.sleep(100);
+ try {
+ Thread.yield(); // let the worker start
+ Thread.sleep(100);
- zkw.getZooKeeper().create(ZKSplitLog.getEncodedNodeName(zkw, "tmt_task"),
+ zkw.getZooKeeper().create(ZKSplitLog.getEncodedNodeName(zkw, "tmt_task"),
TaskState.TASK_UNASSIGNED.get("manager"), Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
- waitForCounter(tot_wkr_task_acquired, 0, 1, 1000);
- // now the worker is busy doing the above task
+ waitForCounter(tot_wkr_task_acquired, 0, 1, 1000);
+ // now the worker is busy doing the above task
- // create another task
- zkw.getZooKeeper().create(ZKSplitLog.getEncodedNodeName(zkw, "tmt_task_2"),
+ // create another task
+ zkw.getZooKeeper().create(ZKSplitLog.getEncodedNodeName(zkw, "tmt_task_2"),
TaskState.TASK_UNASSIGNED.get("manager"), Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
- // preempt the first task, have it owned by another worker
- ZKUtil.setData(zkw, ZKSplitLog.getEncodedNodeName(zkw, "tmt_task"),
+ // preempt the first task, have it owned by another worker
+ ZKUtil.setData(zkw, ZKSplitLog.getEncodedNodeName(zkw, "tmt_task"),
TaskState.TASK_OWNED.get("another-worker"));
- waitForCounter(tot_wkr_preempt_task, 0, 1, 1000);
+ waitForCounter(tot_wkr_preempt_task, 0, 1, 1000);
- waitForCounter(tot_wkr_task_acquired, 1, 2, 1000);
- assertEquals(2, slw.taskReadySeq);
- assertTrue(TaskState.TASK_OWNED.equals(ZKUtil.getData(zkw,
+ waitForCounter(tot_wkr_task_acquired, 1, 2, 1000);
+ assertEquals(2, slw.taskReadySeq);
+ assertTrue(TaskState.TASK_OWNED.equals(ZKUtil.getData(zkw,
ZKSplitLog.getEncodedNodeName(zkw, "tmt_task_2")), "tmt_svr"));
+ } finally {
+ stopSplitLogWorker(slw);
+ }
}
@Test