commit 9648db8c3cdc97a9a6449a6e801c9670d796de86 Author: Thejas Nair Date: Tue Apr 12 00:30:32 2016 -0700 HIVE-13491 - print thread dumps 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 866e1c3..76220f4 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java @@ -1209,16 +1209,40 @@ private static void loopUntilHMSReady(int port) throws Exception { 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 threadStacks = Thread.getAllStackTraces(); + StringBuilder sb = new StringBuilder(); + for (Map.Entry 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. *