python / python/mypy

dmypy in a metadata reload loop with `--use-fine-grained-cache`

Open
#17,831 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug topic-daemon
Dominant language
Python
Stars
20.6k
Forks
3.3k
PR merge metrics
PR metrics pending

Description

Bug Report

I'm investigating remote caching, I find that dmypy is spinning for a very long time when using --use-fine-grained-cache. I've tried dmypy check <file> and it takes 10 minutes before I give up. If I used no caching at all, it would take 1.5 minutes, and give me expected answers.

To Reproduce

  1. produce a cache with mypy --cache-fine-grained --sqlite-cache --no-incremental --cache-dir=...
  2. % dmypy start --log-file debug.log --timeout=3600 -- --use-fine-grained-cache --cache-dir=<cache> --sqlite-cache --verbose
  3. time dmypy check tools/my_tool.py 2>&1 | ts > log.txt

Expected Behavior

fast checks

Actual Behavior

Seems to spin at 100% cpu for a long time. in the log, I see just a bunch of

...
2254727 Sep 25 17:35:45 LOG:  Metadata not found for <module>
2254728 Sep 25 17:35:45 LOG:  Using cached AST for <module path> (<module>)
...

for every file in my venv & project. indeed, I see the same modules on repeat:

% grep 'Metadata not found for numpy.fft.helper' log.txt | wc -l 
284

which makes me think this is stuck in a loop.

Your Environment

  • Mypy version used: mypy 1.10.1 (compiled: yes)
  • Mypy command-line flags: (see above)
  • Mypy configuration options from mypy.ini (and other config files):
[mypy]
platform = linux
plugins = private_internal_plugin.py,trio_typing.plugin
skip_cache_mtime_checks = true
allow_any_generics = false
allow_incomplete_defs = false
allow_subclassing_any = false
allow_untyped_decorators = false
allow_untyped_defs = false
warn_redundant_casts = true
warn_unused_ignores = true
warn_return_any = true
implicit_reexport = true
show_error_codes = true
implicit_optional = true
explicit_package_bases = true
local_partial_types = true
exclude = (?x)(<some regex>)
disable_error_code = import-untyped
enable_error_code = ignore-without-code, unused-awaitable, truthy-bool, possibly-undefined
  • Python version used: Python 3.11.10

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce with the listed mypy cache-generation command and the dmypy start/check commands, capturing debug.log and log.txt. Start by tracing the repeated “Metadata not found” and “Using cached AST” entries, including the numpy.fft.helper repetition. Done means dmypy check completes without the metadata reload loop and is substantially faster than the uncached run.

Written by the indexing model from the issue text.

Assessment

Tech stack
python, sqlite
Domain
cli, devtools, performance
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.