Skip to content

Commit

Permalink
SERVER-45884 don't run the hang analyzer on ASAN builds
Browse files Browse the repository at this point in the history
  • Loading branch information
Robert Guo authored and Evergreen Agent committed Feb 12, 2020
1 parent 9bd41ba commit e89c041
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 12 deletions.
4 changes: 4 additions & 0 deletions buildscripts/resmokelib/config.py
Expand Up @@ -46,6 +46,7 @@
# Names below correspond to how they are specified via the command line or in the options YAML file.
DEFAULTS = {
"always_use_log_files": False,
"is_asan_build": False,
"archive_file": None,
"archive_limit_mb": 5000,
"archive_limit_tests": 10,
Expand Down Expand Up @@ -232,6 +233,9 @@ def resolve(self):
# The limit number of tests to archive for an Evergreen task.
ARCHIVE_LIMIT_TESTS = None

# True if resmoke is running against and ASAN build.
IS_ASAN_BUILD = None

# The starting port number to use for mongod and mongos processes spawned by resmoke.py and the
# mongo shell.
BASE_PORT = None
Expand Down
2 changes: 2 additions & 0 deletions buildscripts/resmokelib/core/programs.py
Expand Up @@ -305,6 +305,8 @@ def mongo_shell_program( # pylint: disable=too-many-branches,too-many-locals,to
test_data["setParameters"] = mongod_set_parameters
test_data["setParametersMongos"] = mongos_set_parameters

test_data["isAsanBuild"] = config.IS_ASAN_BUILD

# There's a periodic background thread that checks for and aborts expired transactions.
# "transactionLifetimeLimitSeconds" specifies for how long a transaction can run before expiring
# and being aborted by the background thread. It defaults to 60 seconds, which is too short to
Expand Down
10 changes: 10 additions & 0 deletions buildscripts/resmokelib/parser.py
Expand Up @@ -574,6 +574,15 @@ def _update_config_vars(values): # pylint: disable=too-many-statements,too-many

config = _config.DEFAULTS.copy()

# Use RSK_ prefixed environment variables to indicate resmoke-specific values.
# The list of configuration is detailed in config.py
resmoke_env_prefix = 'RSK_'
for key in os.environ.keys():
if key.startswith(resmoke_env_prefix):
# Windows env vars are case-insensitive, we use lowercase to be consistent
# with existing resmoke options.
config[key[len(resmoke_env_prefix):].lower()] = os.environ[key]

# Override `config` with values from command line arguments.
cmdline_vars = vars(values)
for cmdline_key in cmdline_vars:
Expand All @@ -594,6 +603,7 @@ def _update_config_vars(values): # pylint: disable=too-many-statements,too-many
_config.ARCHIVE_FILE = config.pop("archive_file")
_config.ARCHIVE_LIMIT_MB = config.pop("archive_limit_mb")
_config.ARCHIVE_LIMIT_TESTS = config.pop("archive_limit_tests")
_config.IS_ASAN_BUILD = config.pop("is_asan_build")
_config.BASE_PORT = int(config.pop("base_port"))
_config.BUILDLOGGER_URL = config.pop("buildlogger_url")
_config.DBPATH_PREFIX = _expand_user(config.pop("dbpath_prefix"))
Expand Down
16 changes: 8 additions & 8 deletions etc/evergreen.yml
Expand Up @@ -1435,6 +1435,7 @@ functions:
set +o errexit
PATH="$path_value" \
AWS_PROFILE=${aws_profile_remote} \
RSK_is_asan_build=${is_asan_build|""} \
${gcov_environment} \
${lang_environment} \
${san_options} \
Expand Down Expand Up @@ -3469,7 +3470,7 @@ functions:
hang_analyzer_option="-o file -o stdout -p ${hang_analyzer_processes|dbtest,java,mongo,mongod,mongos,python,_test}"
if [ ${hang_analyzer_dump_core|true} = true ]; then
if [ ${is_asan_build|false} = false ]; then
hang_analyzer_option="-c $hang_analyzer_option"
fi
Expand Down Expand Up @@ -11482,7 +11483,6 @@ buildvariants:
distros:
- centos6-perf
- name: buildscripts_test
- name: unittest_shell_hang_analyzer_gen
- name: .causally_consistent !.sharding
- name: .change_streams
- name: .misc_js
Expand Down Expand Up @@ -11578,7 +11578,6 @@ buildvariants:
distros:
- centos6-perf
- name: buildscripts_test
- name: unittest_shell_hang_analyzer_gen
- name: .causally_consistent !.sharding
- name: .change_streams
- name: .misc_js
Expand Down Expand Up @@ -11782,7 +11781,7 @@ buildvariants:
multiversion_platform: ubuntu1804
multiversion_edition: enterprise
resmoke_jobs_factor: 0.3 # Avoid starting too many mongod's under ASAN build.
hang_analyzer_dump_core: false
is_asan_build: true
scons_cache_scope: shared
test_flags: --excludeWithAnyTags=requires_fast_memory
tasks:
Expand Down Expand Up @@ -11831,6 +11830,7 @@ buildvariants:
- name: snmp
- name: .watchdog
- name: .stitch
- name: unittest_shell_hang_analyzer_gen
- name: .updatefuzzer
- name: server_discovery_and_monitoring_json_test_TG

Expand All @@ -11848,7 +11848,7 @@ buildvariants:
multiversion_platform: ubuntu1804
multiversion_edition: enterprise
resmoke_jobs_factor: 0.3 # Avoid starting too many mongod's under ASAN build.
hang_analyzer_dump_core: false
is_asan_build: true
scons_cache_scope: shared
target_resmoke_time: 15
test_flags: --excludeWithAnyTags=requires_fast_memory
Expand Down Expand Up @@ -11936,7 +11936,7 @@ buildvariants:
san_options: UBSAN_OPTIONS="print_stacktrace=1" LSAN_OPTIONS="suppressions=etc/lsan.suppressions:report_objects=1" ASAN_OPTIONS=detect_leaks=1:check_initialization_order=true:strict_init_order=true:abort_on_error=1:disable_coredump=0:handle_abort=1
compile_flags: --variables-files=etc/scons/mongodbtoolchain_v3_clang.vars --dbg=on --opt=on --allocator=system --sanitize=undefined,address --ssl -j$(grep -c ^processor /proc/cpuinfo) --nostrip
resmoke_jobs_factor: 0.3 # Avoid starting too many mongod's under {A,UB}SAN build.
hang_analyzer_dump_core: false
is_asan_build: true
scons_cache_scope: shared
tasks:
- name: compile_all_run_unittests_TG
Expand All @@ -11958,7 +11958,7 @@ buildvariants:
san_options: UBSAN_OPTIONS="print_stacktrace=1:halt_on_error=1" LSAN_OPTIONS="suppressions=etc/lsan.suppressions:report_objects=1" ASAN_OPTIONS=detect_leaks=1:check_initialization_order=true:strict_init_order=true:abort_on_error=1:disable_coredump=0:handle_abort=1
compile_flags: LINKFLAGS=-nostdlib++ LIBS=stdc++ --variables-files=etc/scons/mongodbtoolchain_v3_clang.vars --dbg=on --opt=on --allocator=system --sanitize=undefined,address,fuzzer --ssl -j$(grep -c ^processor /proc/cpuinfo) --nostrip
resmoke_jobs_factor: 0.3 # Avoid starting too many mongod's under {A,UB}SAN build.
hang_analyzer_dump_core: false
is_asan_build: true
scons_cache_scope: shared
display_tasks:
- *libfuzzertests
Expand All @@ -11981,7 +11981,7 @@ buildvariants:
multiversion_platform: ubuntu1804
multiversion_edition: enterprise
resmoke_jobs_factor: 0.3 # Avoid starting too many mongod's under {A,UB}SAN build.
hang_analyzer_dump_core: false
is_asan_build: true
test_flags: |- # Use the ServiceExecutorAdaptive with a reasonable number of starting threads
--serviceExecutor=adaptive \
--mongodSetParameters="adaptiveServiceExecutorReservedThreads: 8" \
Expand Down
13 changes: 9 additions & 4 deletions jstests/resmoke_selftest/shell_hang_analyzer.js
Expand Up @@ -26,11 +26,16 @@ try {

MongoRunner.runHangAnalyzer([child.pid]);

assert.soon(() => {
const lines = rawMongoProgramOutput().split('\n');
return anyLineMatches(lines, /Dumping core/);
});
const lines = rawMongoProgramOutput().split('\n');

if (TestData.isAsanBuild) {
// Nothing should be executed, so there's no output.
assert.eq(lines, ['']);
} else {
assert.soon(() => {
return anyLineMatches(lines, /Dumping core/);
});
}
} finally {
MongoRunner.stopMongod(child);
}
Expand Down
5 changes: 5 additions & 0 deletions src/mongo/shell/servers.js
Expand Up @@ -128,6 +128,11 @@ function runHangAnalyzer(pids) {
return;
}

if (TestData.isAsanBuild) {
print('Skipping runHangAnalyzer: ASAN build');
return;
}

if (typeof pids === 'undefined') {
pids = getPids();
}
Expand Down
1 change: 1 addition & 0 deletions src/mongo/shell/utils.js
Expand Up @@ -354,6 +354,7 @@ jsTestOptions = function() {
// is shut down.
alwaysUseLogFiles: TestData.alwaysUseLogFiles || false,
skipCheckOrphans: TestData.skipCheckOrphans || false,
isAsanBuild: TestData.isAsanBuild,
});
}
return _jsTestOptions;
Expand Down

0 comments on commit e89c041

Please sign in to comment.