summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Gottlieb <daniel.gottlieb@mongodb.com>2021-02-08 14:55:20 -0500
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-02-09 04:43:08 +0000
commit358b588d7c1f20b5e1099a1eaea9a0adf644935a (patch)
treefc7ee72eaa524af10167612dad8d0b4b7d642a8e
parent6c57358e4156ae4291f24fce1cf22ffc54f4dbb0 (diff)
downloadmongo-358b588d7c1f20b5e1099a1eaea9a0adf644935a.tar.gz
SERVER-54138: Add setup_spawnhost_coredump to 4.2.
-rw-r--r--buildscripts/setup_spawnhost_coredump77
1 files changed, 77 insertions, 0 deletions
diff --git a/buildscripts/setup_spawnhost_coredump b/buildscripts/setup_spawnhost_coredump
new file mode 100644
index 00000000000..73340f3e936
--- /dev/null
+++ b/buildscripts/setup_spawnhost_coredump
@@ -0,0 +1,77 @@
+#!/bin/bash
+
+cat >> ~/.profile <<EOF
+# Coredumps generated by a toolchain built mongodb can be problematic when examined with the system
+# gdb.
+export PATH=/opt/mongodbtoolchain/gdb/bin:$PATH
+# As per below, put the user into the appropriate directory. This is where gdb is expected to be
+# invoked from.
+cd debug
+echo "Debuggable binaries:"
+ls -l mongo* | grep -v debug$
+for item in "mongo" "mongod" "mongos"; do
+ echo "\${item} core dumps:"
+ ls -l dump_\${item}.*
+done
+
+echo "Core dumps from unknown processes (crashed processes typically found here):"
+ls -l dump_* | grep -v mongo
+
+echo
+echo "To examine a core dump, type 'gdb ./<binary> ./<core file>'"
+EOF
+
+export PATH=/opt/mongodbtoolchain/gdb/bin:$PATH
+echo 'if [ -f ~/.profile ]; then
+ . ~/.profile
+fi' >> .bash_profile
+
+# Make a directory on the larger EBS volume. Soft-link it under the home directory. The smaller home
+# volume can have trouble particularly with coredumps from sharded timeouts.
+mkdir /data/debug
+ln -s /data/debug .
+cd debug
+
+# As the name suggests, pretty printers. Primarily for boost::optional<T>
+git clone git@github.com:ruediger/Boost-Pretty-Printer.git &
+
+# 4.4 artifacts are statically linked with hygienic install directories.
+#
+# Discover and unarchive necessary files and source code. This will put mongo binaries and their
+# partner .debug files in the same top-level (`debug`) directory. Shared library files and their
+# debug symbols will be dumped into a `debug/lib` directory for tidiness. The mongo
+# `<reporoot>/src/` directory is soft linked as `debug/src`. The .gdbinit file assumes gdb is being
+# run from the `debug` directory.
+BIN_ARCHIVE=`ls /data/mci/artifacts-*compile/mongo-mongodb*.tgz`
+tar --wildcards --strip-components=2 -xzf $BIN_ARCHIVE '*/bin/mongod' '*/bin/mongos' '*/bin/mongo' '*/bin/mongobridge' &
+DBG_ARCHIVE=`ls /data/mci/artifacts-*compile/debugsymbols-*.tgz`
+tar --wildcards --strip-components=1 -xzf $DBG_ARCHIVE '*/mongod.debug' '*/mongos.debug' '*/mongo.debug' '*/mongobridge.debug' &
+SRC_DIR=`find /data/mci/ -maxdepth 1 | grep source`
+ln -s $SRC_DIR/.gdbinit .
+ln -s $SRC_DIR/src src
+ln -s $SRC_DIR/buildscripts buildscripts
+
+# Install pymongo to get the bson library for pretty-printers.
+/opt/mongodbtoolchain/v3/bin/pip3 install -r $SRC_DIR/etc/pip/dev-requirements.txt &
+
+COREDUMP_ARCHIVE=`ls /data/mci/artifacts-*/mongo-coredumps-*.tgz`
+tar -xzf $COREDUMP_ARCHIVE &
+echo "Waiting for background processes to complete."
+wait
+
+cat >> ~/.gdbinit <<EOF
+set auto-load safe-path /
+set pagination off
+set print object on
+set print static-members off
+set print pretty on
+
+python
+import sys
+sys.path.insert(0, './Boost-Pretty-Printer')
+import boost
+boost.register_printers(boost_version=(1,70,0))
+end
+EOF
+
+echo "dir $HOME/debug" >> ~/.gdbinit