Skip to content

Commit af8da67

Browse files
committed
count fds
1 parent 85dfae8 commit af8da67

File tree

8 files changed

+34
-11
lines changed

8 files changed

+34
-11
lines changed

parsl/dataflow/dflow.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ def __init__(self, config: Config) -> None:
9393
self.run_dir = make_rundir(config.run_dir)
9494

9595
if config.initialize_logging:
96-
parsl.set_file_logger("{}/parsl.log".format(self.run_dir), level=logging.DEBUG)
96+
_, self.logging_handler = parsl.set_file_logger("{}/parsl.log".format(self.run_dir), level=logging.DEBUG)
9797

9898
logger.info("Starting DataFlowKernel with config\n{}".format(config))
9999

@@ -1340,7 +1340,13 @@ def cleanup(self) -> None:
13401340
else:
13411341
logger.debug("Cleaning up non-default DFK - not unregistering")
13421342

1343-
logger.info("DFK cleanup complete")
1343+
# TODO: do this in parsl/logutils.py
1344+
logger.info("DFK cleanup complete - removing parsl.log handler")
1345+
logger_to_remove = logging.getLogger("parsl")
1346+
logger_to_remove.removeHandler(self.logging_handler)
1347+
self.logging_handler.close()
1348+
1349+
logger.info("handler closed - is this going to break things?")
13441350

13451351
def checkpoint(self, tasks: Optional[Sequence[TaskRecord]] = None) -> str:
13461352
"""Checkpoint the dfk incrementally to a checkpoint file.

parsl/executors/taskvine/executor.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,11 +607,13 @@ def shutdown(self, *args, **kwargs):
607607
# Join all processes before exiting
608608
logger.debug("Joining on submit process")
609609
self._submit_process.join()
610+
self._submit_process.close()
610611
logger.debug("Joining on collector thread")
611612
self._collector_thread.join()
612613
if self.worker_launch_method == 'factory':
613614
logger.debug("Joining on factory process")
614615
self._factory_process.join()
616+
self._factory_process.close()
615617

616618
# Shutdown multiprocessing queues
617619
self._ready_task_queue.close()

parsl/executors/workqueue/executor.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -722,6 +722,8 @@ def shutdown(self, *args, **kwargs):
722722

723723
logger.debug("Joining on submit process")
724724
self.submit_process.join()
725+
self.submit_process.close()
726+
725727
logger.debug("Joining on collector thread")
726728
self.collector_thread.join()
727729

parsl/log_utils.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"""
1313
import io
1414
import logging
15-
from typing import Optional
15+
from typing import Optional, Tuple
1616

1717
import typeguard
1818

@@ -65,7 +65,7 @@ def set_stream_logger(name: str = 'parsl',
6565
def set_file_logger(filename: str,
6666
name: str = 'parsl',
6767
level: int = logging.DEBUG,
68-
format_string: Optional[str] = None) -> logging.Logger:
68+
format_string: Optional[str] = None) -> Tuple[logging.Logger, logging.FileHandler]:
6969
"""Add a file log handler.
7070
7171
Args:
@@ -93,4 +93,4 @@ def set_file_logger(filename: str,
9393
futures_logger = logging.getLogger("concurrent.futures")
9494
futures_logger.addHandler(handler)
9595

96-
return logger
96+
return (logger, handler)

parsl/monitoring/monitoring.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -283,9 +283,9 @@ def close(self) -> None:
283283

284284
@wrap_with_logs
285285
def filesystem_receiver(logdir: str, q: "queue.Queue[AddressedMonitoringMessage]", run_dir: str) -> None:
286-
logger = set_file_logger("{}/monitoring_filesystem_radio.log".format(logdir),
287-
name="monitoring_filesystem_radio",
288-
level=logging.INFO)
286+
logger, _ = set_file_logger("{}/monitoring_filesystem_radio.log".format(logdir),
287+
name="monitoring_filesystem_radio",
288+
level=logging.INFO)
289289

290290
logger.info("Starting filesystem radio receiver")
291291
setproctitle("parsl: monitoring filesystem receiver")

parsl/monitoring/router.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@ def __init__(self,
5555
5656
"""
5757
os.makedirs(logdir, exist_ok=True)
58-
self.logger = set_file_logger("{}/monitoring_router.log".format(logdir),
59-
name="monitoring_router",
60-
level=logging_level)
58+
self.logger, _ = set_file_logger("{}/monitoring_router.log".format(logdir),
59+
name="monitoring_router",
60+
level=logging_level)
6161
self.logger.debug("Monitoring router starting")
6262

6363
self.hub_address = hub_address

parsl/tests/conftest.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,9 @@ def load_dfk_session(request, pytestconfig, tmpd_cwd_session):
180180
config = pytestconfig.getoption('config')[0]
181181

182182
if config != 'local':
183+
this_process = psutil.Process()
184+
start_fds = this_process.num_fds()
185+
logger.error(f"BENC: open fds: {start_fds}")
183186
assert threading.active_count() == 1, "precondition: only one thread can be running before this test: " + repr(threading.enumerate())
184187

185188
spec = importlib.util.spec_from_file_location('', config)
@@ -211,6 +214,9 @@ def load_dfk_session(request, pytestconfig, tmpd_cwd_session):
211214
assert DataFlowKernelLoader._dfk is None
212215

213216
assert threading.active_count() == 1, "test left threads running: " + repr(threading.enumerate())
217+
end_fds = this_process.num_fds()
218+
logger.error(f"BENC: end open fds: {end_fds} (vs {start_fds} at start)")
219+
assert start_fds == end_fds, "number of open fds changed across test run"
214220

215221
else:
216222
yield
@@ -273,6 +279,12 @@ def load_dfk_local_module(request, pytestconfig, tmpd_cwd_session):
273279
logger.error(f"BENC: end open fds: {end_fds} (vs start {start_fds}")
274280

275281
assert threading.active_count() == 1, "test left threads running: " + repr(threading.enumerate())
282+
end_fds = this_process.num_fds()
283+
logger.error(f"BENC: open fds END: {end_fds}")
284+
if end_fds > start_fds:
285+
logger.error(f"Open files (not all fds, though?): {this_process.open_files()!r}")
286+
os.system(f"ls -l /proc/{os.getpid()}/fd")
287+
pytest.fail("BENC: number of open fds increased across test")
276288

277289
else:
278290
yield

parsl/tests/test_providers/test_local_provider.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ def test_ssh_channel():
109109

110110
def _stop_sshd(sshd_thread):
111111
sshd_thread.stop()
112+
sshd_thread.join()
112113

113114

114115
class SSHDThread(threading.Thread):

0 commit comments

Comments
 (0)