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()));

Reply via email to