[Bug]: Scheduled returns scan all accepted minion keys causing extreme load
メンテナーはふだん 3 日以内に返信
評価
調査の方向性
issue に記載されたスタックをたどり、salt.utils.job._store_job と local_cache.save_load 内の最初の save_load 呼び出しを読む。単独またはスケジュール実行の minion の戻り値に関する既存のテストを確認し、応答した minion の ID を渡すことで、ターゲットのメタデータとキャッシュの構成を維持しながら、受け入れ済みキーの走査を避けられることを検証する。
索引モデルが issue の本文から書いたものです。
説明
What happened?
After upgrading a Salt master from 3006.28 to 3008.5, MWorker processes on the master overloaded causing master issues.
The master has approximately > 100K+ accepted minion keys and 128 MWorkers. It uses ZeroMQ, master_job_cache: local_cache, keys.cache_driver: localfs_key, and key_cache: sched. Async MWorkers are
disabled. PKI and the master cache are on local SSD-backed ZFS.
A three-second strace sample of one worker showed 58,821 lstat calls, accounting for 99.96% of its syscall time. Python stack samples from three separate MWorkers showed the same path:
AESFuncs._sync_return
→ salt.utils.job.store_job
→ salt.utils.job._store_job
→ local_cache.save_load
→ CkMinions.check_minions
→ CkMinions._check_glob_minions
→ Key.glob_match
→ Key.list_keys
→ localfs_key.list_all
→ clean_path
→ realpath / lstat
For a standalone or scheduled minion return with jid: req, _store_job sets:
load["tgt_type"] = "glob"
load["tgt"] = load["id"]
It then calls save_load without a precomputed minion list. local_cache.save_load resolves the returning minion’s ID as a glob, causing enumeration and path validation across the entire accepted-key inventory.
Expected behavior: caching a standalone return should not require discovering its target across all accepted minion keys. Passing minions=[load["id"]] to the initial save_load call avoids this lookup while preserving existing target metadata and cache layout.
Type of salt install
Official deb
Major version
3008.x
What supported OS are you seeing the problem on? Can select multiple. (If bug appears on an unsupported OS, please open a GitHub Discussion instead)
debian-12
salt --versions-report output
Salt Version:
Salt: 3008.5
Python Version:
Python: 3.14.7 (main, Sep 30 2026, 03:35:11) [GCC 11.2.0]
Dependency Versions:
cffi: 2.0.0
cherrypy: 18.10.0
cryptography: 50.0.1
dateutil: 2.9.0.post0
docker-py: Not Installed
gitdb: 4.0.12
gitpython: 3.2.0
Jinja2: 3.1.6
libgit2: 1.9.7
looseversion: 1.3.0
M2Crypto: Not Installed
Mako: Not Installed
msgpack: 1.2.1
msgpack-pure: Not Installed
mysql-python: Not Installed
packaging: 24.0
pycparser: 3.00
pycrypto: Not Installed
pycryptodome: 3.23.0
pygit2: 1.20.1
python-gnupg: 0.5.6
PyYAML: 6.0.3
PyZMQ: 27.1.0
relenv: 0.22.27
smmap: 5.0.2
timelib: 0.3.0
Tornado: 6.5.10
ZMQ: 4.3.5
Salt Package Information:
Package Type: onedir
System Versions:
dist: debian 12.15 bookworm
locale: utf-8
machine: x86_64
release: [REDACTED]
system: Linux
version: Debian GNU/Linux 12.15 bookworm
- 主要言語
- Python
- スター
- 15.8k
- フォーク
- 5.6k
- 平均マージ
- 5日 9時間
- マージ済み PR(30日)
- 99
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
saltstack/salt のほかの issue
-
[Bug]: pip.installed with upgrade=True upgrades a package but returns an empty changes dictionary対応中かも @ITJamie が 1 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 3 日以内に返信
-
bug needs-triage
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 3 日以内に返信
-
[Bug]: Minion with file_client: local crashes on connect: 'AsyncPillar' object has no attribute 'aclose'対応中かも @shawnrruss が 9 日前に担当しました。 オープンbug needs-triage
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 3 日以内に返信
-
[Bug]: mine.update clear=True raises UnboundLocalError on the master and stores nothing対応中かも @cestercian が 11 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
saltstack/salt#70622 · コメント 1 件 ·
メンテナーはふだん 3 日以内に返信
-
tech-debt
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
メンテナーはふだん 3 日以内に返信
似ている issue
-
AI bug
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
AUTO-MAS-Project/AUTO-MAS#1960 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
btclib-org/btclib-wallet#872 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 87/100
btclib-org/btclib#3093 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
メンテナーはふだん 1 日以内に返信
-
good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
patrickballard/wheelgap#269 ·