Repository: tajo Updated Branches: refs/heads/branch-0.10.1 aacc3b7e2 -> e563db223
TAJO-1396 Unexpected IllegalMonitorStateException can be thrown in QueryInProgress Closes #416 Signed-off-by: Jinho Kim <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/tajo/repo Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/e563db22 Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/e563db22 Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/e563db22 Branch: refs/heads/branch-0.10.1 Commit: e563db223ec6a00dfc9ccf386adb6995a8e65fac Parents: aacc3b7 Author: navis.ryu <[email protected]> Authored: Thu Mar 12 22:15:49 2015 +0900 Committer: Jinho Kim <[email protected]> Committed: Tue Mar 24 13:42:10 2015 +0900 ---------------------------------------------------------------------- CHANGES | 3 +++ .../org/apache/tajo/master/QueryInProgress.java | 22 ++++++++++++++------ .../org/apache/tajo/master/QueryManager.java | 8 +------ 3 files changed, 20 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/e563db22/CHANGES ---------------------------------------------------------------------- diff --git a/CHANGES b/CHANGES index 1786ea5..5724300 100644 --- a/CHANGES +++ b/CHANGES @@ -21,6 +21,9 @@ Release 0.11.0 - unreleased BUG FIXES + TAJO-1396: Unexpected IllegalMonitorStateException can be thrown + in QueryInProgress. (Contributed by navis. Committed by jinho) + TAJO-1384: Duplicated output file path problem. (jihoon) TAJO-1386: CURRENT_DATE generates parsing errors sometimes. http://git-wip-us.apache.org/repos/asf/tajo/blob/e563db22/tajo-core/src/main/java/org/apache/tajo/master/QueryInProgress.java ---------------------------------------------------------------------- diff --git a/tajo-core/src/main/java/org/apache/tajo/master/QueryInProgress.java b/tajo-core/src/main/java/org/apache/tajo/master/QueryInProgress.java index c24dd90..668a770 100644 --- a/tajo-core/src/main/java/org/apache/tajo/master/QueryInProgress.java +++ b/tajo-core/src/main/java/org/apache/tajo/master/QueryInProgress.java @@ -95,7 +95,7 @@ public class QueryInProgress { queryMasterRpcClient.killQuery(null, queryId.getProto(), NullCallback.get()); } } catch (Throwable e) { - catchException(e); + catchException("Failed to kill query " + queryId + " by exception " + e, e); } finally { writeLock.unlock(); } @@ -125,6 +125,11 @@ public class QueryInProgress { public boolean startQueryMaster() { try { writeLock.lockInterruptibly(); + } catch (Exception e) { + catchException("Failed to lock by exception " + e, e); + return false; + } + try { LOG.info("Initializing QueryInProgress for QueryID=" + queryId); WorkerResourceManager resourceManager = masterContext.getResourceManager(); WorkerAllocatedResource resource = resourceManager.allocateQueryMaster(this); @@ -141,7 +146,7 @@ public class QueryInProgress { return true; } catch (Exception e) { - catchException(e); + catchException("Failed to start query master for query " + queryId + " by exception " + e, e); return false; } finally { writeLock.unlock(); @@ -163,12 +168,17 @@ public class QueryInProgress { try { writeLock.lockInterruptibly(); + } catch (Exception e) { + LOG.error("Failed to lock by exception " + e.getMessage(), e); + return; + } + try { if(queryMasterRpcClient == null) { connectQueryMaster(); } if(queryMasterRpcClient == null) { - LOG.info("No QueryMaster conneciton info."); + LOG.info("No QueryMaster connection info."); //TODO wait return; } @@ -186,14 +196,14 @@ public class QueryInProgress { querySubmitted.set(true); getQueryInfo().setQueryState(TajoProtos.QueryState.QUERY_MASTER_LAUNCHED); } catch (Exception e) { - LOG.error(e.getMessage(), e); + LOG.error("Failed to submit query " + queryId + " to master by exception " + e, e); } finally { writeLock.unlock(); } } - public void catchException(Throwable e) { - LOG.error(e.getMessage(), e); + public void catchException(String message, Throwable e) { + LOG.error(message, e); queryInfo.setQueryState(TajoProtos.QueryState.QUERY_FAILED); queryInfo.setLastMessage(StringUtils.stringifyException(e)); } http://git-wip-us.apache.org/repos/asf/tajo/blob/e563db22/tajo-core/src/main/java/org/apache/tajo/master/QueryManager.java ---------------------------------------------------------------------- diff --git a/tajo-core/src/main/java/org/apache/tajo/master/QueryManager.java b/tajo-core/src/main/java/org/apache/tajo/master/QueryManager.java index b1fa17d..0c8d8ce 100644 --- a/tajo-core/src/main/java/org/apache/tajo/master/QueryManager.java +++ b/tajo-core/src/main/java/org/apache/tajo/master/QueryManager.java @@ -87,7 +87,7 @@ public class QueryManager extends CompositeService { this.scheduler = new SimpleFifoScheduler(this); } catch (Exception e) { - catchException(null, e); + LOG.error("Failed to init service " + getName() + " by exception " + e, e); } super.serviceInit(conf); @@ -304,12 +304,6 @@ public class QueryManager extends CompositeService { return executedQuerySize.get(); } - private void catchException(QueryId queryId, Exception e) { - LOG.error(e.getMessage(), e); - QueryInProgress queryInProgress = runningQueries.get(queryId); - queryInProgress.catchException(e); - } - public synchronized QueryCoordinatorProtocol.TajoHeartbeatResponse.ResponseCommand queryHeartbeat( QueryCoordinatorProtocol.TajoHeartbeat queryHeartbeat) { QueryInProgress queryInProgress = getQueryInProgress(new QueryId(queryHeartbeat.getQueryId()));
