dofs: resolving a directory scans its children as the directory grows
Les mainteneurs répondent en général sous 1 jour
@aron-cf y travaille déjà.
Depuis le 13/10/2026.
Évaluation
Cette issue n'a pas encore été évaluée.
Description
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.
- Langage dominant
- TypeScript
- Étoiles
- 9.7k
- Forks
- 568
- Merge moyen
- 1 j 18 h
- PR mergées (30 j)
- 58
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de cloudflare/computer
-
Export one file helper over workspace.fsPeut-être pris @aron-cf l’a pris il y a 4 jours. Ouverteenhancement
cloudflare/computer#261 · 1 commentaire · 1 réaction · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement
Difficulté 4/5 3-5 jours Accessibilité débutants 30/100
cloudflare/computer#224 · 5 commentaires · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
-
Always run the "next" computerd workflow on push to the `release` branchPeut-être pris @aron-cf l’a pris il y a 16 jours. Ouvertebug
cloudflare/computer#222 · 2 commentaires · 1 réaction · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
Make just-bash and acorn optional peer dependencies, pulled in only by the backend that needs themOuverteenhancement
Difficulté 3/5 1-2 jours Accessibilité débutants 45/100
cloudflare/computer#220 · 3 commentaires · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
-
Workspace namespaces: more than one Workspace per Durable Object storagePeut-être pris @aron-cf l’a pris il y a 16 jours. Ouverteenhancement
cloudflare/computer#219 · 1 commentaire · 1 réaction · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de cloudflare/computer
Issues similaires
-
[Bug]: Device screenshot fails with 500 on iPhone Duo (Xcode 27.2): serve-sim calls simctl without --displayPeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
pingdotgg/t3code#24900 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
inu-appcenter/UNIDorm-web#411 ·
Les mainteneurs répondent en général sous 1 jour
-
🐛 bug
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
ranxianglei/billion-context#4720 ·
Les mainteneurs répondent en général sous 1 jour
-
area:arcade game p3-medium ready-for-agent type:bug
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
fderuiter/deruiter.dev#2840 ·
Les mainteneurs répondent en général sous 1 jour