Repository: hive
Updated Branches:
  refs/heads/branch-1 80cd2d6cc -> 78cc35a6b


HIVE-13491 : Testing : log thread stacks when metastore fails to start (Thejas 
Nair, reviewed by Szehon Ho)


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/78cc35a6
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/78cc35a6
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/78cc35a6

Branch: refs/heads/branch-1
Commit: 78cc35a6b0b64e20c6eb218347004e89bcefaa56
Parents: 80cd2d6
Author: Thejas Nair <[email protected]>
Authored: Tue Apr 12 12:09:47 2016 -0700
Committer: Thejas Nair <[email protected]>
Committed: Tue Apr 12 12:09:47 2016 -0700

----------------------------------------------------------------------
 .../hadoop/hive/metastore/MetaStoreUtils.java   | 28 ++++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/78cc35a6/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
----------------------------------------------------------------------
diff --git 
a/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java 
b/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
index f5153b3..961359e 100644
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
@@ -1180,16 +1180,40 @@ public class MetaStoreUtils {
         socket.close();
         return;
       } catch (Exception e) {
-        if (retries++ > 6) { //give up
+        if (retries++ > 60) { //give up
           exc = e;
           break;
         }
-        Thread.sleep(10000);
+        Thread.sleep(1000);
       }
     }
+    // something is preventing metastore from starting
+    // print the stack from all threads for debugging purposes
+    LOG.error("Unable to connect to metastore server: " + exc.getMessage());
+    LOG.info("Printing all thread stack traces for debugging before throwing 
exception.");
+    LOG.info(getAllThreadStacksAsString());
     throw exc;
   }
 
+  private static String getAllThreadStacksAsString() {
+    Map<Thread, StackTraceElement[]> threadStacks = Thread.getAllStackTraces();
+    StringBuilder sb = new StringBuilder();
+    for (Map.Entry<Thread, StackTraceElement[]> entry : 
threadStacks.entrySet()) {
+      Thread t = entry.getKey();
+      sb.append(System.lineSeparator());
+      sb.append("Name: ").append(t.getName()).append(" State: " + 
t.getState());
+      addStackString(entry.getValue(), sb);
+    }
+    return sb.toString();
+  }
+
+  private static void addStackString(StackTraceElement[] stackElems, 
StringBuilder sb) {
+    sb.append(System.lineSeparator());
+    for (StackTraceElement stackElem : stackElems) {
+      sb.append(stackElem).append(System.lineSeparator());
+    }
+  }
+
   /**
    * Finds a free port on the machine.
    *

Reply via email to