dofs: resolving a directory scans its children as the directory grows
Los mantenedores suelen responder en 1 día
@aron-cf ya está trabajando en esto.
Desde el 13/10/2026.
Evaluación
Este issue todavía no se ha evaluado.
Descripción
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.
- Lenguaje dominante
- TypeScript
- Estrellas
- 9.6k
- Forks
- 558
- Merge medio
- 1 d 19 h
- PR fusionados (30 d)
- 52
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de cloudflare/computer
-
WorkspaceProxy wakes Durable Objects via idFromString(), clearing ctx.id.name for Agents/LifecyclePosiblemente ocupada @aron-cf la tomó hace 2 días. Abiertobug
cloudflare/computer#243 · 1 comentario · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 4/5 3-5 días Aptitud para principiantes 30/100
cloudflare/computer#224 · 5 comentarios · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
Always run the "next" computerd workflow on push to the `release` branchPosiblemente ocupada @aron-cf la tomó hace 8 días. Abiertobug
cloudflare/computer#222 · 2 comentarios · 1 reacción · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
Make just-bash and acorn optional peer dependencies, pulled in only by the backend that needs themAbiertoenhancement
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
cloudflare/computer#220 · 3 comentarios · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
Workspace namespaces: more than one Workspace per Durable Object storagePosiblemente ocupada @aron-cf la tomó hace 9 días. Abiertoenhancement
cloudflare/computer#219 · 1 comentario · 1 reacción · 1 asignado ·
Los mantenedores suelen responder en 1 día
Todos los issues de cloudflare/computer
Issues similares
-
backend priority:P3 privacy-fix
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
[Bug]: 【优化】对话消息底部增加发送时间展示Abiertobug desktop v3 windows
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
esengine/DeepSeek-Reasonix#13697 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
area:security documentation effort:S priority:P2
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
Los mantenedores suelen responder en 1 día
-
app:web meta:ops
Dificultad 2/5 Medio día Aptitud para principiantes 78/100
osu-tournament-rating/otr#1113 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100