From d544da9730ecf28c5ab170c6804703fa3ecb328f Mon Sep 17 00:00:00 2001 From: James Bourbeau Date: Sat, 21 Aug 2021 12:53:23 -0500 Subject: [PATCH 1/5] Disable custom preloads in the test suite --- conftest.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/conftest.py b/conftest.py index ebb9dae1457..7dea007631b 100644 --- a/conftest.py +++ b/conftest.py @@ -1,6 +1,8 @@ # https://pytest.org/latest/example/simple.html#control-skipping-of-tests-according-to-command-line-option import pytest +import dask + # Uncomment to enable more logging and checks # (https://docs.python.org/3/library/asyncio-dev.html) # Note this makes things slower and might consume much memory. @@ -35,3 +37,24 @@ def pytest_collection_modifyitems(config, items): pytest_plugins = ["distributed.pytest_resourceleaks"] + + +@pytest.fixture(scope="session", autouse=True) +def clean_preloads(): + # Custom preloads can interact with the test suite in unexpected ways. + # Temporarily remove any configured preloads while tests are being run. + original = {} + nodes = ["scheduler", "worker", "nanny"] + for node in nodes: + preload = f"distributed.{node}.preload" + preload_argv = f"distributed.{node}.preload-argv" + original[preload] = dask.config.get(preload) + original[preload_argv] = dask.config.get(preload_argv) + dask.config.set({preload: []}) + dask.config.set({preload_argv: []}) + + yield + + for node in nodes: + dask.config.set({preload: original[f"distributed.{node}.preload"]}) + dask.config.set({preload_argv: original[f"distributed.{node}.preload-argv"]}) From a5617d610347f17ed24382aac8f848278b8b9527 Mon Sep 17 00:00:00 2001 From: James Bourbeau Date: Sat, 21 Aug 2021 13:57:59 -0500 Subject: [PATCH 2/5] Update --- conftest.py | 33 ++++++++++++++------------------- distributed/utils_test.py | 32 ++++++++++++-------------------- 2 files changed, 26 insertions(+), 39 deletions(-) diff --git a/conftest.py b/conftest.py index 7dea007631b..df641ce163a 100644 --- a/conftest.py +++ b/conftest.py @@ -1,4 +1,6 @@ # https://pytest.org/latest/example/simple.html#control-skipping-of-tests-according-to-command-line-option +import copy + import pytest import dask @@ -39,22 +41,15 @@ def pytest_collection_modifyitems(config, items): pytest_plugins = ["distributed.pytest_resourceleaks"] -@pytest.fixture(scope="session", autouse=True) -def clean_preloads(): - # Custom preloads can interact with the test suite in unexpected ways. - # Temporarily remove any configured preloads while tests are being run. - original = {} - nodes = ["scheduler", "worker", "nanny"] - for node in nodes: - preload = f"distributed.{node}.preload" - preload_argv = f"distributed.{node}.preload-argv" - original[preload] = dask.config.get(preload) - original[preload_argv] = dask.config.get(preload_argv) - dask.config.set({preload: []}) - dask.config.set({preload_argv: []}) - - yield - - for node in nodes: - dask.config.set({preload: original[f"distributed.{node}.preload"]}) - dask.config.set({preload_argv: original[f"distributed.{node}.preload-argv"]}) +_original_config = copy.deepcopy(dask.config.config) +# Custom preloads can interact with the test suite in unexpected ways +# so we remove them when running tests +for node in ["scheduler", "worker", "nanny"]: + _original_config["distributed"][node]["preload"] = [] + _original_config["distributed"][node]["preload-argv"] = [] + + +@pytest.fixture(autouse=True) +def clean_config(): + with dask.config.set(copy.deepcopy(_original_config)): + yield diff --git a/distributed/utils_test.py b/distributed/utils_test.py index a9c5496efce..c26790a5eb8 100644 --- a/distributed/utils_test.py +++ b/distributed/utils_test.py @@ -215,14 +215,6 @@ def get_ip(): remote_magic._clients.clear() -original_config = copy.deepcopy(dask.config.config) - - -def reset_config(): - dask.config.config.clear() - dask.config.config.update(copy.deepcopy(original_config)) - - def nodebug(func): """ A decorator to disable debug facilities during timing-sensitive tests. @@ -1585,18 +1577,18 @@ def clean(threads=not WINDOWS, instances=True, timeout=1, processes=True): with check_process_leak(check=processes): with check_instances() if instances else nullcontext(): with check_active_rpc(loop, timeout): - reset_config() - - dask.config.set({"distributed.comm.timeouts.connect": "5s"}) - # Restore default logging levels - # XXX use pytest hooks/fixtures instead? - for name, level in logging_levels.items(): - logging.getLogger(name).setLevel(level) - - yield loop - - with suppress(AttributeError): - del thread_state.on_event_loop_thread + with dask.config.set( + {"distributed.comm.timeouts.connect": "5s"} + ): + # Restore default logging levels + # XXX use pytest hooks/fixtures instead? + for name, level in logging_levels.items(): + logging.getLogger(name).setLevel(level) + + yield loop + + with suppress(AttributeError): + del thread_state.on_event_loop_thread @pytest.fixture From 311fa71456b9d6cfc6610ce68e8998dfdfa274b2 Mon Sep 17 00:00:00 2001 From: James Bourbeau Date: Sat, 21 Aug 2021 14:02:27 -0500 Subject: [PATCH 3/5] Restore logging levels after each test --- conftest.py | 13 +++++++++++++ distributed/utils_test.py | 11 ----------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/conftest.py b/conftest.py index df641ce163a..7a3f9328693 100644 --- a/conftest.py +++ b/conftest.py @@ -1,5 +1,6 @@ # https://pytest.org/latest/example/simple.html#control-skipping-of-tests-according-to-command-line-option import copy +import logging import pytest @@ -48,8 +49,20 @@ def pytest_collection_modifyitems(config, items): _original_config["distributed"][node]["preload"] = [] _original_config["distributed"][node]["preload-argv"] = [] +_logging_levels = { + name: logger.level + for name, logger in logging.root.manager.loggerDict.items() + if isinstance(logger, logging.Logger) +} + @pytest.fixture(autouse=True) def clean_config(): + + # Restore default logging levels + for name, level in _logging_levels.items(): + logging.getLogger(name).setLevel(level) + + # Ensure a clean config with dask.config.set(copy.deepcopy(_original_config)): yield diff --git a/distributed/utils_test.py b/distributed/utils_test.py index c26790a5eb8..b9354a5755c 100644 --- a/distributed/utils_test.py +++ b/distributed/utils_test.py @@ -77,12 +77,6 @@ logger = logging.getLogger(__name__) -logging_levels = { - name: logger.level - for name, logger in logging.root.manager.loggerDict.items() - if isinstance(logger, logging.Logger) -} - _TEST_TIMEOUT = 30 _offload_executor.submit(lambda: None).result() # create thread during import @@ -1580,11 +1574,6 @@ def clean(threads=not WINDOWS, instances=True, timeout=1, processes=True): with dask.config.set( {"distributed.comm.timeouts.connect": "5s"} ): - # Restore default logging levels - # XXX use pytest hooks/fixtures instead? - for name, level in logging_levels.items(): - logging.getLogger(name).setLevel(level) - yield loop with suppress(AttributeError): From 0ce7978158241af42e86931f6110cfaf88f099b9 Mon Sep 17 00:00:00 2001 From: James Bourbeau Date: Sat, 21 Aug 2021 14:04:33 -0500 Subject: [PATCH 4/5] Rename fixture --- conftest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conftest.py b/conftest.py index 7a3f9328693..0a71b99c4a5 100644 --- a/conftest.py +++ b/conftest.py @@ -57,7 +57,7 @@ def pytest_collection_modifyitems(config, items): @pytest.fixture(autouse=True) -def clean_config(): +def initialize_test(): # Restore default logging levels for name, level in _logging_levels.items(): From a1c6caf366c844ebb37f01ebd5b3d8fb9ff244e1 Mon Sep 17 00:00:00 2001 From: James Bourbeau Date: Sat, 21 Aug 2021 15:03:23 -0500 Subject: [PATCH 5/5] Fixup --- conftest.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/conftest.py b/conftest.py index 0a71b99c4a5..fde33e4e310 100644 --- a/conftest.py +++ b/conftest.py @@ -64,5 +64,7 @@ def initialize_test(): logging.getLogger(name).setLevel(level) # Ensure a clean config - with dask.config.set(copy.deepcopy(_original_config)): - yield + dask.config.config.clear() + dask.config.config.update(copy.deepcopy(_original_config)) + + yield