dofs: resolving a directory scans its children as the directory grows
メンテナーはふだん 1 日以内に返信
@aron-cf がすでに取り組んでいます。
2026年10月13日 から。
評価
この issue はまだ評価されていません。
説明
Looking up /wide gets slower as children are added under it, even though the lookup does not request a child. I found this while investigating file recovery in OpenMeld.
This reproduces with the resolver SQL and core schema taken directly from 0.5.1, ef00c0a790cb87887bf209fa87838cb1a281220b, without our application or its patches.
What happens
Looking up /wide, with 20,000 children:
Before: find /wide -> inspect its children -> discover the path is finished
After: find /wide -> discover the path is finished
Time for 100 lookups of the same directory, median of seven samples:
| Children in /wide | Original query | Three ordered joins |
|---|---|---|
| 100 | 3.61 ms | 0.97 ms |
| 1,000 | 15.54 ms | 0.55 ms |
| 5,000 | 86.61 ms | 1.07 ms |
| 20,000 | 327.57 ms | 0.73 ms |
Linux arm64, Node 24.21.0, SQLite 3.53.4, Docker limited to 1 CPU / 1 GiB, no swap. macOS with SQLite 3.51.2 shows the same trend. These are in-memory query timings, not whole-sync or production recovery timings.
Reproduce
Script, raw samples, query plans and proposed patch
Save repro.mjs, then run:
node repro.mjs > results.json
Requires Node 24+ and network access to download two pinned upstream source files. No npm packages. Setup is outside the timed section; the two variants alternate which runs first.
Cause and proposed fix
In resolveViaCte, SQLite joins directory entries before reading the next path segment. The directory lookup can use only the parent half of its existing primary key:
Before: SEARCH d USING PRIMARY KEY (parent_inode=?)
After: SEARCH d USING PRIMARY KEY (parent_inode=? AND name=?)
Changing the three recursive JOINs to CROSS JOINs keeps the segment ahead of the directory lookup. Predicates, result ordering and schema stay unchanged. No new index or cache.
The script checks equal results for five path shapes at each width. After applying the patch to the clean upstream source, all 37 resolver, symlink and stat tests passed. This is focused coverage, not a full runtime test.
May I submit a PR?
I read the contribution policy, so I have not opened a PR. Would you be willing to invite me to submit this fix with regression coverage? The three-join patch is in the reproduction above. I am happy to adjust it to your preferred approach.
- 主要言語
- TypeScript
- スター
- 9.6k
- フォーク
- 558
- 平均マージ
- 1日 19時間
- マージ済み PR(30日)
- 52
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
cloudflare/computer のほかの issue
-
WorkspaceProxy wakes Durable Objects via idFromString(), clearing ctx.id.name for Agents/Lifecycle対応中かも @aron-cf が 2 日前に担当しました。 オープンbug
cloudflare/computer#243 · コメント 1 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
enhancement
難易度 4/5 3〜5日 初心者へのやさしさ 30/100
cloudflare/computer#224 · コメント 5 件 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
-
Always run the "next" computerd workflow on push to the `release` branch対応中かも @aron-cf が 8 日前に担当しました。 オープンbug
cloudflare/computer#222 · コメント 2 件 · リアクション 1 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
Make just-bash and acorn optional peer dependencies, pulled in only by the backend that needs themオープンenhancement
難易度 3/5 1〜2日 初心者へのやさしさ 45/100
cloudflare/computer#220 · コメント 3 件 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
-
Workspace namespaces: more than one Workspace per Durable Object storage対応中かも @aron-cf が 9 日前に担当しました。 オープンenhancement
cloudflare/computer#219 · コメント 1 件 · リアクション 1 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
cloudflare/computer の issue をすべて見る
似ている issue
-
backend priority:P3 privacy-fix
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
bug desktop v3 windows
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
esengine/DeepSeek-Reasonix#13697 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
area:security documentation effort:S priority:P2
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
メンテナーはふだん 1 日以内に返信
-
app:web meta:ops
難易度 2/5 半日 初心者へのやさしさ 78/100
osu-tournament-rating/otr#1113 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100