[SERVER-50302] Develop a server project spawnhost script Created: 13/Aug/20  Updated: 29/Oct/23  Resolved: 19/Aug/20

Status: Closed
Project: Core Server
Component/s: Testing Infrastructure
Affects Version/s: None
Fix Version/s: 4.7.0

Type: Task Priority: Major - P3
Reporter: Daniel Gottlieb (Inactive) Assignee: Daniel Gottlieb (Inactive)
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Depends
Related
is related to SERVER-50298 Remove spawnhost related debugging se... Backlog
Backwards Compatibility: Fully Compatible
Sprint: Sharding 2020-08-24
Participants:

 Description   

EVG-12785 describes a feature where evergreen projects can define spawnhost scripts that are specifically relevant to that project. Users launching a spawnhost will then have a list of setup scripts to choose from based on what they're trying to do.

To help move that forward, server needs to come to a rough consensus on what an initial example script should be and who would be "on call" for troubleshooting cases where it doesn't appear to be working.



 Comments   
Comment by Daniel Gottlieb (Inactive) [ 19/Aug/20 ]

Myself, gregory.wlodarek, siyuan.zhou and max.hirschhorn

Comment by Maria van Keulen [ 19/Aug/20 ]

Thanks daniel.gottlieb! Who are the points of contact for any feedback/bugs with the script?

Comment by Daniel Gottlieb (Inactive) [ 19/Aug/20 ]

The script to use:

#!/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
 
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 &
 
# 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-*.tgz`
tar --wildcards --strip-components=2 -xzf $BIN_ARCHIVE '*/bin/mongod' '*/bin/mongos' '*/bin/mongo' '
*/bin/mongobridge' &
tar --wildcards --strip-components=1 -xzf $BIN_ARCHIVE '*/lib/*' &
DBG_ARCHIVE=`ls /data/mci/artifacts-*compile/debugsymbols-*.tgz`
tar --wildcards --strip-components=2 -xzf $DBG_ARCHIVE '*/bin/mongod.debug' '*/bin/mongos.debug' '*/
bin/mongo.debug' '*/bin/mongobridge.debug' &
tar --wildcards --strip-components=1 -xzf $DBG_ARCHIVE '*/lib/*' &
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 solib-search-path ./lib/
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

Generated at Thu Feb 08 05:22:19 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.