Repository: tajo Updated Branches: refs/heads/branch-0.10.1 02c1bd0d2 -> 8864f8537
TAJO-1612: TestKillQuery occassionally fails. Closes #575 Project: http://git-wip-us.apache.org/repos/asf/tajo/repo Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/8864f853 Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/8864f853 Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/8864f853 Branch: refs/heads/branch-0.10.1 Commit: 8864f8537e2499645fbd161ea50d9449a15451d0 Parents: 02c1bd0 Author: Hyunsik Choi <[email protected]> Authored: Mon May 18 01:52:15 2015 -0700 Committer: Hyunsik Choi <[email protected]> Committed: Mon May 18 01:53:07 2015 -0700 ---------------------------------------------------------------------- CHANGES | 7 ++- .../apache/tajo/querymaster/TestKillQuery.java | 66 ++++++++++++++------ 2 files changed, 51 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/8864f853/CHANGES ---------------------------------------------------------------------- diff --git a/CHANGES b/CHANGES index bb1821b..50b735c 100644 --- a/CHANGES +++ b/CHANGES @@ -12,8 +12,9 @@ Release 0.10.1 - unreleased TAJO-1452: Improve function listing order (Contributed Dongjoon Hyun, Committed by hyunsik) - TAJO-1576: Sometimes DefaultTajoCliOutputFormatter.parseErrorMessage() eliminates - an important kind of information. (Contributed by Jongyoung Park, Committed by jihoon) + TAJO-1576: Sometimes DefaultTajoCliOutputFormatter.parseErrorMessage() + eliminates an important kind of information. (Contributed by Jongyoung + Park, Committed by jihoon) TAJO-1381: Support multi-bytes delimiter for Text file. (Contributed by navis, Committed by jinho) @@ -39,6 +40,8 @@ Release 0.10.1 - unreleased BUG FIXES + TAJO-1612: TestKillQuery occassionally fails. (hyunsik) + TAJO-1440: Some tests fail in parallel test environment in TestKillQuery. (Contributed by Jongyoung Park. Committed by jinho) http://git-wip-us.apache.org/repos/asf/tajo/blob/8864f853/tajo-core/src/test/java/org/apache/tajo/querymaster/TestKillQuery.java ---------------------------------------------------------------------- diff --git a/tajo-core/src/test/java/org/apache/tajo/querymaster/TestKillQuery.java b/tajo-core/src/test/java/org/apache/tajo/querymaster/TestKillQuery.java index b2e1ce9..89cac75 100644 --- a/tajo-core/src/test/java/org/apache/tajo/querymaster/TestKillQuery.java +++ b/tajo-core/src/test/java/org/apache/tajo/querymaster/TestKillQuery.java @@ -33,11 +33,7 @@ import org.apache.tajo.engine.planner.global.GlobalPlanner; import org.apache.tajo.engine.planner.global.MasterPlan; import org.apache.tajo.engine.query.QueryContext; import org.apache.tajo.engine.query.TaskRequestImpl; -import org.apache.tajo.ipc.ClientProtos; -import org.apache.tajo.master.event.QueryEvent; -import org.apache.tajo.master.event.QueryEventType; -import org.apache.tajo.master.event.StageEvent; -import org.apache.tajo.master.event.StageEventType; +import org.apache.tajo.master.event.*; import org.apache.tajo.plan.LogicalOptimizer; import org.apache.tajo.plan.LogicalPlan; import org.apache.tajo.plan.LogicalPlanner; @@ -131,8 +127,7 @@ public class TestKillQuery { assertNotNull(stage); // fire kill event - Query q = queryMasterTask.getQuery(); - q.handle(new QueryEvent(queryId, QueryEventType.KILL)); + queryMasterTask.getEventHandler().handle(new QueryEvent(queryId, QueryEventType.KILL)); try { cluster.waitForQueryState(queryMasterTask.getQuery(), TajoProtos.QueryState.QUERY_KILLED, 50); @@ -157,24 +152,55 @@ public class TestKillQuery { @Test public final void testIgnoreStageStateFromKilled() throws Exception { - ClientProtos.SubmitQueryResponse res = client.executeQuery(queryStr); - QueryId queryId = new QueryId(res.getQueryId()); - cluster.waitForQuerySubmitted(queryId); + SQLAnalyzer analyzer = new SQLAnalyzer(); + QueryContext defaultContext = LocalTajoTestingUtility.createDummyContext(conf); + Session session = LocalTajoTestingUtility.createDummySession(); + CatalogService catalog = cluster.getMaster().getCatalog(); + + LogicalPlanner planner = new LogicalPlanner(catalog); + LogicalOptimizer optimizer = new LogicalOptimizer(conf); + Expr expr = analyzer.parse(queryStr); + LogicalPlan plan = planner.createPlan(defaultContext, expr); + + optimizer.optimize(plan); + + QueryId queryId = QueryIdFactory.newQueryId(System.currentTimeMillis(), 0); + QueryContext queryContext = new QueryContext(conf); + MasterPlan masterPlan = new MasterPlan(queryId, queryContext, plan); + GlobalPlanner globalPlanner = new GlobalPlanner(conf, catalog); + globalPlanner.build(masterPlan); - QueryMasterTask qmt = cluster.getQueryMasterTask(queryId); - Query query = qmt.getQuery(); + CountDownLatch barrier = new CountDownLatch(1); + MockAsyncDispatch dispatch = new MockAsyncDispatch(barrier, TajoProtos.QueryState.QUERY_RUNNING); + + QueryMaster qm = cluster.getTajoWorkers().get(0).getWorkerContext().getQueryMaster(); + QueryMasterTask queryMasterTask = new QueryMasterTask(qm.getContext(), + queryId, session, defaultContext, expr.toJson(), dispatch); - // wait for a stage created - cluster.waitForQueryState(query, TajoProtos.QueryState.QUERY_RUNNING, 10); - query.handle(new QueryEvent(queryId, QueryEventType.KILL)); + queryMasterTask.init(conf); + queryMasterTask.getQueryTaskContext().getDispatcher().start(); + queryMasterTask.startQuery(); try{ - cluster.waitForQueryState(query, TajoProtos.QueryState.QUERY_KILLED, 50); - } finally { - assertEquals(TajoProtos.QueryState.QUERY_KILLED, query.getSynchronizedState()); + barrier.await(5000, TimeUnit.MILLISECONDS); + } catch (InterruptedException e) { + fail("Query state : " + queryMasterTask.getQuery().getSynchronizedState()); + } + + Stage stage = queryMasterTask.getQuery().getStages().iterator().next(); + assertNotNull(stage); + + // fire kill event + queryMasterTask.getEventHandler().handle(new QueryEvent(queryId, QueryEventType.KILL)); + + try { + cluster.waitForQueryState(queryMasterTask.getQuery(), TajoProtos.QueryState.QUERY_KILLED, 50); + assertEquals(TajoProtos.QueryState.QUERY_KILLED, queryMasterTask.getQuery().getSynchronizedState()); + } finally { + queryMasterTask.stop(); } - List<Stage> stages = Lists.newArrayList(query.getStages()); + List<Stage> stages = Lists.newArrayList(queryMasterTask.getQuery().getStages()); Stage lastStage = stages.get(stages.size() - 1); assertEquals(StageState.KILLED, lastStage.getSynchronizedState()); @@ -244,4 +270,4 @@ public class TestKillQuery { super.dispatch(event); } } -} +} \ No newline at end of file
