Skip to content

Commit 4229b4b

Browse files
committed
fix: Unstable PROMETHEUS_MULTIPROC_DIR
1 parent 00a973a commit 4229b4b

File tree

3 files changed

+19
-47
lines changed

3 files changed

+19
-47
lines changed

src/common/core/main.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import contextlib
22
import logging
33
import os
4+
import shutil
45
import sys
56
import typing
67

@@ -10,7 +11,7 @@
1011
from environs import Env
1112

1213
from common.core.cli import healthcheck
13-
from common.core.utils import TemporaryDirectory
14+
from common.prometheus.constants import DEFAULT_PROMETHEUS_MULTIPROC_DIR
1415

1516
logger = logging.getLogger(__name__)
1617

@@ -45,16 +46,25 @@ def ensure_cli_env() -> typing.Generator[None, None, None]:
4546
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings.dev")
4647

4748
# Set up Prometheus' multiprocess mode
48-
if not env.str("PROMETHEUS_MULTIPROC_DIR", ""):
49-
delete = not env.bool("PROMETHEUS_MULTIPROC_DIR_KEEP", False)
50-
prometheus_multiproc_dir_name = ctx.enter_context(
51-
TemporaryDirectory(delete=delete)
52-
)
49+
prometheus_multiproc_dir_name = os.environ.setdefault(
50+
"PROMETHEUS_MULTIPROC_DIR",
51+
DEFAULT_PROMETHEUS_MULTIPROC_DIR,
52+
)
53+
prometheus_multiproc_dir_keep = env.bool(
54+
"PROMETHEUS_MULTIPROC_DIR_KEEP",
55+
default=False,
56+
)
57+
if not prometheus_multiproc_dir_keep:
58+
shutil.rmtree(prometheus_multiproc_dir_name, ignore_errors=True)
5359
logger.info(
54-
"Created %s for Prometheus multi-process mode",
60+
"Removed %s to ensure a clean state for Prometheus multi-process mode",
5561
prometheus_multiproc_dir_name,
5662
)
57-
os.environ["PROMETHEUS_MULTIPROC_DIR"] = prometheus_multiproc_dir_name
63+
os.makedirs(prometheus_multiproc_dir_name, exist_ok=True)
64+
logger.info(
65+
"Created %s for Prometheus multi-process mode",
66+
prometheus_multiproc_dir_name,
67+
)
5868

5969
if "docgen" in sys.argv:
6070
os.environ["DOCGEN_MODE"] = "true"

src/common/core/utils.py

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
import logging
33
import pathlib
44
import random
5-
import sys
6-
import tempfile
75
from functools import lru_cache
86
from itertools import cycle
97
from typing import (
@@ -200,40 +198,3 @@ def using_database_replica(
200198
return manager
201199

202200
return manager.db_manager(chosen_replica)
203-
204-
205-
if sys.version_info >= (3, 12):
206-
# Already has the desired behavior; re-export for uniform imports.
207-
TemporaryDirectory = tempfile.TemporaryDirectory
208-
else:
209-
import contextlib
210-
from typing import ContextManager, Generator
211-
212-
def TemporaryDirectory(
213-
suffix: str | None = None,
214-
prefix: str | None = None,
215-
dir: str | None = None,
216-
*,
217-
delete: bool = True,
218-
) -> ContextManager[str]:
219-
"""
220-
Create a temporary directory with optional cleanup control.
221-
222-
This wrapper exists because Python 3.12 changed TemporaryDirectory's behavior
223-
by adding a 'delete' parameter, which doesn't exist in Python 3.11. This
224-
function provides a consistent API across both versions.
225-
226-
When delete=True, uses the stdlib's TemporaryDirectory (auto-cleanup).
227-
When delete=False, creates a directory with mkdtemp that persists after
228-
the context manager exits, matching Python 3.12's delete=False behavior.
229-
230-
See https://docs.python.org/3.12/library/tempfile.html#tempfile.TemporaryDirectory for usage details.
231-
"""
232-
if delete:
233-
return tempfile.TemporaryDirectory(suffix, prefix, dir)
234-
235-
@contextlib.contextmanager
236-
def _tmpdir() -> Generator[str, None, None]:
237-
yield tempfile.mkdtemp(suffix, prefix, dir)
238-
239-
return _tmpdir()

src/common/prometheus/constants.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
DEFAULT_PROMETHEUS_MULTIPROC_DIR = "/tmp/flagsmith-prometheus"

0 commit comments

Comments
 (0)