Title: 3.12.4 breaks`logging.config.DictConfig` with `logging.handlers.QueueHandler` on read-only file systems · Issue #120868 · python/cpython · GitHub
Open Graph Title: 3.12.4 breaks`logging.config.DictConfig` with `logging.handlers.QueueHandler` on read-only file systems · Issue #120868 · python/cpython
X Title: 3.12.4 breaks`logging.config.DictConfig` with `logging.handlers.QueueHandler` on read-only file systems · Issue #120868 · python/cpython
Description: Bug report Bug description: When using logging.config.dictConfig to configure a logging.handlers.QueueHandler on a read only file system, it works fine in 3.12.3, but crashes in 3.12.4. Reproducing # bug.py import logging.config logging....
Open Graph Description: Bug report Bug description: When using logging.config.dictConfig to configure a logging.handlers.QueueHandler on a read only file system, it works fine in 3.12.3, but crashes in 3.12.4. Reproducing...
X Description: Bug report Bug description: When using logging.config.dictConfig to configure a logging.handlers.QueueHandler on a read only file system, it works fine in 3.12.3, but crashes in 3.12.4. Reproducing...
Opengraph URL: https://github.com/python/cpython/issues/120868
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"3.12.4 breaks`logging.config.DictConfig` with `logging.handlers.QueueHandler` on read-only file systems","articleBody":"# Bug report\r\n\r\n### Bug description:\r\n\r\nWhen using `logging.config.dictConfig` to configure a `logging.handlers.QueueHandler` on a read only file system, it works fine in 3.12.3, but crashes in 3.12.4.\r\n\r\n**Reproducing**\r\n\r\n```python\r\n# bug.py\r\nimport logging.config\r\n\r\nlogging.config.dictConfig(\r\n {\r\n \"version\": 1,\r\n \"handlers\": {\r\n \"queue_listener\": {\r\n \"class\": \"logging.handlers.QueueHandler\",\r\n \"queue\": {\"()\": \"queue.Queue\", \"maxsize\": -1},\r\n },\r\n },\r\n }\r\n)\r\n```\r\n\r\n```dockerfile\r\n# Dockerfile\r\nFROM python:3.12.4-slim-bookworm\r\n\r\nCOPY bug.py ./\r\n\r\nCMD [\"python\", \"bug.py\"]\r\n```\r\n\r\nRun `docker run --rm --read-only -it $(docker build -q .)`\r\n\r\n```\r\nProcess SyncManager-1:\r\nTraceback (most recent call last):\r\n File \"/usr/local/lib/python3.12/multiprocessing/process.py\", line 314, in _bootstrap\r\n self.run()\r\n File \"/usr/local/lib/python3.12/multiprocessing/process.py\", line 108, in run\r\n self._target(*self._args, **self._kwargs)\r\n File \"/usr/local/lib/python3.12/multiprocessing/managers.py\", line 591, in _run_server\r\n server = cls._Server(registry, address, authkey, serializer)\r\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n File \"/usr/local/lib/python3.12/multiprocessing/managers.py\", line 156, in __init__\r\n self.listener = Listener(address=address, backlog=128)\r\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n File \"/usr/local/lib/python3.12/multiprocessing/connection.py\", line 458, in __init__\r\n address = address or arbitrary_address(family)\r\n ^^^^^^^^^^^^^^^^^^^^^^^^^\r\n File \"/usr/local/lib/python3.12/multiprocessing/connection.py\", line 77, in arbitrary_address\r\n return tempfile.mktemp(prefix='listener-', dir=util.get_temp_dir())\r\n ^^^^^^^^^^^^^^^^^^^\r\n File \"/usr/local/lib/python3.12/multiprocessing/util.py\", line 149, in get_temp_dir\r\n tempdir = tempfile.mkdtemp(prefix='pymp-')\r\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n File \"/usr/local/lib/python3.12/tempfile.py\", line 373, in mkdtemp\r\n prefix, suffix, dir, output_type = _sanitize_params(prefix, suffix, dir)\r\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n File \"/usr/local/lib/python3.12/tempfile.py\", line 126, in _sanitize_params\r\n dir = gettempdir()\r\n ^^^^^^^^^^^^\r\n File \"/usr/local/lib/python3.12/tempfile.py\", line 315, in gettempdir\r\n return _os.fsdecode(_gettempdir())\r\n ^^^^^^^^^^^^^\r\n File \"/usr/local/lib/python3.12/tempfile.py\", line 308, in _gettempdir\r\n tempdir = _get_default_tempdir()\r\n ^^^^^^^^^^^^^^^^^^^^^^\r\n File \"/usr/local/lib/python3.12/tempfile.py\", line 223, in _get_default_tempdir\r\n raise FileNotFoundError(_errno.ENOENT,\r\nFileNotFoundError: [Errno 2] No usable temporary directory found in ['/tmp', '/var/tmp', '/usr/tmp', '/']\r\nTraceback (most recent call last):\r\n File \"/usr/local/lib/python3.12/logging/config.py\", line 581, in configure\r\n handler = self.configure_handler(handlers[name])\r\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n File \"/usr/local/lib/python3.12/logging/config.py\", line 792, in configure_handler\r\n proxy_queue = MM().Queue()\r\n ^^^^\r\n File \"/usr/local/lib/python3.12/multiprocessing/context.py\", line 57, in Manager\r\n m.start()\r\n File \"/usr/local/lib/python3.12/multiprocessing/managers.py\", line 566, in start\r\n self._address = reader.recv()\r\n ^^^^^^^^^^^^^\r\n File \"/usr/local/lib/python3.12/multiprocessing/connection.py\", line 250, in recv\r\n buf = self._recv_bytes()\r\n ^^^^^^^^^^^^^^^^^^\r\n File \"/usr/local/lib/python3.12/multiprocessing/connection.py\", line 430, in _recv_bytes\r\n buf = self._recv(4)\r\n ^^^^^^^^^^^^^\r\n File \"/usr/local/lib/python3.12/multiprocessing/connection.py\", line 399, in _recv\r\n raise EOFError\r\nEOFError\r\n\r\nThe above exception was the direct cause of the following exception:\r\n\r\nTraceback (most recent call last):\r\n File \"//bug.py\", line 3, in \u003cmodule\u003e\r\n logging.config.dictConfig(\r\n File \"/usr/local/lib/python3.12/logging/config.py\", line 920, in dictConfig\r\n dictConfigClass(config).configure()\r\n File \"/usr/local/lib/python3.12/logging/config.py\", line 588, in configure\r\n raise ValueError('Unable to configure handler '\r\nValueError: Unable to configure handler 'queue_listener'\r\n```\r\n\r\n\u003chr\u003e\r\n\r\nFrom my understanding, this is related to #119819 et al. and the change that caused this was introduced in #120030: It introduces creating ephemeral instances of `multiprocessing.Manager` which, on init, tries to acquire a temporary directory. \r\n\r\nhttps://github.com/python/cpython/blob/879d1f28bb97bcecddca0824276877aaf97f25b3/Lib/logging/config.py#L785\r\n\r\n\r\n\r\n\r\n### CPython versions tested on:\r\n\r\n3.12\r\n\r\n### Operating systems tested on:\r\n\r\nLinux\n\n\u003c!-- gh-linked-prs --\u003e\n### Linked PRs\n* gh-120872\n* gh-121077\n* gh-121078\n\u003c!-- /gh-linked-prs --\u003e\n","author":{"url":"https://github.com/provinzkraut","@type":"Person","name":"provinzkraut"},"datePublished":"2024-06-22T08:52:54.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/120868/cpython/issues/120868"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:aab8fd9a-78ad-3e69-0f7c-659b76ee4397 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | BD00:24CD64:1C9F899:25F4E2E:696AFC63 |
| html-safe-nonce | 439b9a5499937c8e0ee036d87f9d203f6ed839aff798d7d8f200a0392e6dbd2e |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCRDAwOjI0Q0Q2NDoxQzlGODk5OjI1RjRFMkU6Njk2QUZDNjMiLCJ2aXNpdG9yX2lkIjoiNzEyODU5ODU0NDI2NzI3OTQ1OSIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | d7d8c01a2040067b398ae3f723edf4ccfdd4adb83cfd183514092b25f7d331fb |
| hovercard-subject-tag | issue:2367702290 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/cpython/120868/issue_layout |
| twitter:image | https://opengraph.githubassets.com/03f6bd788a020ed91469d91d31411c0830148b9748df93aaec0355795dc09c65/python/cpython/issues/120868 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/03f6bd788a020ed91469d91d31411c0830148b9748df93aaec0355795dc09c65/python/cpython/issues/120868 |
| og:image:alt | Bug report Bug description: When using logging.config.dictConfig to configure a logging.handlers.QueueHandler on a read only file system, it works fine in 3.12.3, but crashes in 3.12.4. Reproducing... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | provinzkraut |
| hostname | github.com |
| expected-hostname | github.com |
| None | 5f99f7c1d70f01da5b93e5ca90303359738944d8ab470e396496262c66e60b8d |
| turbo-cache-control | no-preview |
| go-import | github.com/python/cpython git https://github.com/python/cpython.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 81598961 |
| octolytics-dimension-repository_nwo | python/cpython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 81598961 |
| octolytics-dimension-repository_network_root_nwo | python/cpython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 82560a55c6b2054555076f46e683151ee28a19bc |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width