diff options
author | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2014-08-04 14:42:58 -0400 |
---|---|---|
committer | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2014-08-05 13:58:33 -0400 |
commit | 35f827aef4ddfcf9acb9e4b90cb200ff29183b7c (patch) | |
tree | 2ca47aaa92f6e8ed2eff6332e95e3bc0c1657054 /buildscripts/smoke.py | |
parent | 9b0b7f0eeb9eec34b3d6ba48c3a7ccf7d6f32503 (diff) | |
download | mongo-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-x | buildscripts/smoke.py | 22 |
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)') |