Repository navigation
Commit d0c1913
query: build models once per release, read snapshots in place (#7)
* query: run a build's queries in one worker
A build forked one worker per query, and every worker loaded every
snapshot and rebuilt every model before running its one SELECT. A
project with a few models and a dozen queries paid for the same joins a
dozen times, and each repetition counted against that query's 60 s
deadline.
build now sends all its queries to a single worker as a batch. The
worker loads the snapshots, shuts external access and builds the models
once, then runs each query in turn and reports one line per query. The
sandbox is unchanged: every query is still admitted only as a single
SELECT, held to its own row limit, and runs on the closed side of the
external-access door.
The deadline is per step rather than per batch: loading and models get
60 s, and each query gets its own 60 s after that. A timeout or failure
now names the model or query it belongs to; "query deadline exceeded"
used to say neither. runQuery is a batch of one, so query, test and
describe behave as before.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* query: read snapshots in place, pass the memory limit through
The worker copied every column of every snapshot into its in-memory
database before running anything. Past the 1 GB memory cap that copy
spills to disk, and every model then runs at disk speed.
Snapshots are now views read in place, so a model scans only the
columns it uses. File access is allowed for exactly the declared
snapshot paths, set before external access is shut; DuckDB refuses to
widen the list or reopen access afterwards, and a file beside a
snapshot stays out of reach.
CHAINPLOT_QUERY_MEMORY_LIMIT never reached the worker: its environment
is stripped to PATH, HOME and LANG, so the documented override did
nothing. The parent now reads and validates it and passes it in the
request; a value that is not a size is refused by name.
On a project with about 4M event rows behind five models and 19
queries, build went from 345 s to 12 s at the default 1 GB, with
identical results.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>1 parent cbbd28b commit d0c1913
6 files changed
Lines changed: 432 additions & 153 deletions
File tree
- docs
- src
- publish
- query
- tests/query
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
75 | 75 | | |
76 | 76 | | |
77 | 77 | | |
78 | | - | |
| 78 | + | |
79 | 79 | | |
80 | 80 | | |
81 | 81 | | |
| |||
86 | 86 | | |
87 | 87 | | |
88 | 88 | | |
89 | | - | |
90 | | - | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
91 | 94 | | |
92 | 95 | | |
93 | 96 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
19 | | - | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
20 | 22 | | |
21 | 23 | | |
22 | 24 | | |
23 | 25 | | |
24 | 26 | | |
| 27 | + | |
25 | 28 | | |
26 | 29 | | |
27 | 30 | | |
28 | | - | |
| 31 | + | |
29 | 32 | | |
30 | 33 | | |
31 | | - | |
32 | | - | |
33 | | - | |
34 | | - | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
35 | 40 | | |
36 | | - | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
37 | 45 | | |
38 | 46 | | |
39 | 47 | | |
| |||
70 | 78 | | |
71 | 79 | | |
72 | 80 | | |
73 | | - | |
| 81 | + | |
| 82 | + | |
74 | 83 | | |
75 | 84 | | |
76 | 85 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | | - | |
| 9 | + | |
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| |||
178 | 178 | | |
179 | 179 | | |
180 | 180 | | |
181 | | - | |
| 181 | + | |
182 | 182 | | |
183 | 183 | | |
184 | 184 | | |
| |||
198 | 198 | | |
199 | 199 | | |
200 | 200 | | |
201 | | - | |
202 | | - | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
203 | 208 | | |
204 | 209 | | |
205 | 210 | | |
206 | 211 | | |
207 | 212 | | |
208 | 213 | | |
209 | 214 | | |
210 | | - | |
211 | | - | |
212 | | - | |
213 | | - | |
214 | | - | |
215 | | - | |
216 | | - | |
217 | | - | |
218 | | - | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
219 | 224 | | |
220 | 225 | | |
221 | | - | |
222 | | - | |
| 226 | + | |
| 227 | + | |
223 | 228 | | |
| 229 | + | |
| 230 | + | |
224 | 231 | | |
225 | 232 | | |
226 | 233 | | |
| |||
231 | 238 | | |
232 | 239 | | |
233 | 240 | | |
234 | | - | |
| 241 | + | |
235 | 242 | | |
236 | 243 | | |
237 | 244 | | |
| |||
0 commit comments