summaryrefslogtreecommitdiff
path: root/buildscripts/smoke.py
diff options
context:
space:
mode:
authorMark Benvenuto <mark.benvenuto@mongodb.com>2014-08-04 14:42:58 -0400
committerMark Benvenuto <mark.benvenuto@mongodb.com>2014-08-05 13:58:33 -0400
commit35f827aef4ddfcf9acb9e4b90cb200ff29183b7c (patch)
tree2ca47aaa92f6e8ed2eff6332e95e3bc0c1657054 /buildscripts/smoke.py
parent9b0b7f0eeb9eec34b3d6ba48c3a7ccf7d6f32503 (diff)
downloadmongo-35f827aef4ddfcf9acb9e4b90cb200ff29183b7c.tar.gz
SERVER-14714: Add stack trace signal handler
SERVER-14181: Dump dbtest & python processes, add timeout
Diffstat (limited to 'buildscripts/smoke.py')
-rwxr-xr-xbuildscripts/smoke.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/buildscripts/smoke.py b/buildscripts/smoke.py
index 3a40f6d1e69..73c30dff7c6 100755
--- a/buildscripts/smoke.py
+++ b/buildscripts/smoke.py
@@ -41,11 +41,14 @@ import os
import pprint
import re
import shlex
+import signal
import socket
import stat
from subprocess import (PIPE, Popen, STDOUT)
import sys
import time
+import threading
+import traceback
from pymongo import Connection
from pymongo.errors import OperationFailure
@@ -121,6 +124,20 @@ class NullMongod(object):
return not isinstance(value, Exception)
+def dump_stacks(signal, frame):
+ print "======================================"
+ print "DUMPING STACKS due to SIGUSR1 signal"
+ print "======================================"
+ threads = threading.enumerate();
+
+ print "Total Threads: " + str(len(threads))
+
+ for id, stack in sys._current_frames().items():
+ print "Thread %d" % (id)
+ print "".join(traceback.format_stack(stack))
+ print "======================================"
+
+
def buildlogger(cmd, is_global=False):
# if the environment variable MONGO_USE_BUILDLOGGER
# is set to 'true', then wrap the command with a call
@@ -1144,6 +1161,11 @@ def main():
global no_journal, set_parameters, set_parameters_mongos, no_preallocj, auth, storage_engine
global keyFile, smoke_db_prefix, test_path, use_write_commands
+ try:
+ signal.signal(signal.SIGUSR1, dump_stacks)
+ except AttributeError:
+ print "Cannot catch signals on Windows"
+
parser = OptionParser(usage="usage: smoke.py [OPTIONS] ARGS*")
parser.add_option('--mode', dest='mode', default='suite',
help='If "files", ARGS are filenames; if "suite", ARGS are sets of tests (%default)')