Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions dask_jobqueue/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -383,8 +383,7 @@ def __init__(

self.log_directory = log_directory
if self.log_directory is not None:
if not os.path.exists(self.log_directory):
os.makedirs(self.log_directory)
os.makedirs(self.log_directory, exist_ok=True)

@classmethod
def default_config_name(cls):
Expand Down
15 changes: 15 additions & 0 deletions dask_jobqueue/tests/test_jobqueue_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,21 @@ def test_log_directory(Cluster, tmpdir):
assert os.path.exists(tmpdir.strpath)


def test_log_directory_already_created(Cluster, tmpdir, monkeypatch):
# Another process can create the directory between a check for its
# existence and the creation itself, make sure this is not an error
real_makedirs = os.makedirs

def makedirs_after_race(name, *args, **kwargs):
real_makedirs(name, exist_ok=True)
return real_makedirs(name, *args, **kwargs)

log_directory = os.path.join(tmpdir.strpath, "logs")
monkeypatch.setattr(os, "makedirs", makedirs_after_race)
with Cluster(cores=1, memory="1GB", log_directory=log_directory):
assert os.path.isdir(log_directory)


def test_cluster_has_cores_and_memory(Cluster):
base_regex = r"{}.+".format(Cluster.__name__)
with pytest.raises(ValueError, match=base_regex + r"cores=\d, memory='\d+GB'"):
Expand Down
2 changes: 2 additions & 0 deletions docs/source/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ Changelog
Development version
-------------------

- Fixed a ``FileExistsError`` when several clusters create the same ``log_directory`` at the same time (:issue:`692`)

0.9.0 / 2024-08-22
------------------

Expand Down