SERVER-117088 increase pymongo timeouts on asan variants (#46724)

GitOrigin-RevId: cef4b247f1e5fa2338339f565434f27eb46bce8e
This commit is contained in:
Trevor Guidry 2026-01-28 05:00:54 -06:00 committed by MongoDB Bot
parent 1e575782ca
commit 9b2d350c40
4 changed files with 29 additions and 16 deletions

View File

@ -3,7 +3,7 @@
import collections
import datetime
import itertools
import os.path
import os
import time
import buildscripts.resmokelib.setup_multiversion.config as multiversion_config
@ -817,3 +817,6 @@ VALIDATE_SELECTOR_PATHS = True
# If set, resmoke.py will set Testdata.pauseAfterPopulate to allow tests that check this
# flag to pause after populating their initial datasets.
PAUSE_AFTER_POPULATE = None
# Whether ASAN (AddressSanitizer) is enabled, determined by the presence of ASAN_OPTIONS.
IS_ASAN = bool(os.environ.get("ASAN_OPTIONS"))

View File

@ -217,7 +217,7 @@ class Fixture(object, metaclass=registry.make_registry_metaclass(_FIXTURES)):
def mongo_client(
self, read_preference=pymongo.ReadPreference.PRIMARY, timeout_millis=30000, **kwargs
):
) -> pymongo.MongoClient:
"""Return a pymongo.MongoClient connecting to this fixture with specified 'read_preference'.
The PyMongo driver will wait up to 'timeout_millis' milliseconds
@ -524,7 +524,9 @@ def create_fixture_table(fixture):
return "Fixture status:\n" + table
def build_client(node, auth_options=None, read_preference=pymongo.ReadPreference.PRIMARY):
def build_client(
node, auth_options=None, read_preference=pymongo.ReadPreference.PRIMARY, **kwargs
) -> pymongo.MongoClient:
"""Authenticate client for the 'authenticationDatabase' and return the client."""
if auth_options is not None:
return node.mongo_client(
@ -533,9 +535,10 @@ def build_client(node, auth_options=None, read_preference=pymongo.ReadPreference
authSource=auth_options["authenticationDatabase"],
authMechanism=auth_options["authenticationMechanism"],
read_preference=read_preference,
**kwargs,
)
else:
return node.mongo_client(read_preference=read_preference)
return node.mongo_client(read_preference=read_preference, **kwargs)
# Represents a row in a node info table.

View File

@ -7,7 +7,7 @@ import sys
import threading
import time
from buildscripts.resmokelib import errors
from buildscripts.resmokelib import config, errors
from buildscripts.resmokelib.mongo_fuzzer_configs import generate_normal_mongo_parameters
from buildscripts.resmokelib.testing.fixtures import interface as fixture_interface
from buildscripts.resmokelib.testing.fixtures import replicaset, shardedcluster, standalone
@ -23,6 +23,13 @@ def validate_runtime_parameter_spec(spec):
)
def build_client(node, auth_options):
"""Build a pymongo MongoClient for the given node with the given auth options."""
if config.IS_ASAN:
return fixture_interface.build_client(node, auth_options, timeout_millis=120000)
return fixture_interface.build_client(node, auth_options)
class RuntimeParametersState:
"""Encapsulates the runtime-state of a set of parameters we are fuzzing. Tracks the last time we set a parameter value and holds
the logic for generating new values."""
@ -222,7 +229,7 @@ class FuzzRuntimeParameters(interface.Hook):
def _invoke_get_parameter_and_log(self, node):
"""Helper to print the current state of a node's runtime-fuzzable parameters. Only usable once before_suite has initialized the runtime state of the parameters."""
client = fixture_interface.build_client(node, self._auth_options)
client = build_client(node, self._auth_options)
params_to_get = (
self._mongos_param_state.get_spec()
if client.is_mongos
@ -366,9 +373,7 @@ class _SetParameterThread(threading.Thread):
mongod_params_to_set,
)
for node in repl_set.nodes:
invoke_set_parameter(
fixture_interface.build_client(node, self._auth_options), mongod_params_to_set
)
invoke_set_parameter(build_client(node, self._auth_options), mongod_params_to_set)
for standalone in self._standalone_fixtures:
self.logger.info(
@ -376,9 +381,7 @@ class _SetParameterThread(threading.Thread):
standalone.port,
mongod_params_to_set,
)
invoke_set_parameter(
fixture_interface.build_client(standalone, self._auth_options), mongod_params_to_set
)
invoke_set_parameter(build_client(standalone, self._auth_options), mongod_params_to_set)
for mongos in self._mongos_fixtures:
self.logger.info(
@ -386,6 +389,4 @@ class _SetParameterThread(threading.Thread):
mongos.port,
mongos_params_to_set,
)
invoke_set_parameter(
fixture_interface.build_client(mongos, self._auth_options), mongos_params_to_set
)
invoke_set_parameter(build_client(mongos, self._auth_options), mongos_params_to_set)

View File

@ -11,6 +11,7 @@ import pymongo.mongo_client
from pymongo.collection import Collection
from pymongo.database import Database
from buildscripts.resmokelib import config
from buildscripts.resmokelib.testing.fixtures.external import ExternalFixture
from buildscripts.resmokelib.testing.fixtures.interface import build_client
from buildscripts.resmokelib.testing.fixtures.standalone import MongoDFixture
@ -131,7 +132,12 @@ def validate_node(
auth_options = None
if shell_options and "authenticationMechanism" in shell_options:
auth_options = shell_options
client = build_client(node, auth_options, pymongo.ReadPreference.PRIMARY_PREFERRED)
if config.IS_ASAN:
client = build_client(
node, auth_options, pymongo.ReadPreference.PRIMARY_PREFERRED, timeout_millis=120000
)
else:
client = build_client(node, auth_options, pymongo.ReadPreference.PRIMARY_PREFERRED)
# Skip validating collections for arbiters.
admin_db = client.get_database("admin")