Commit 5ec0994
fix: exclude xml/binary blobs from with_severity_counts (prod crash) (#713)
* fix: exclude xml/binary blobs from with_severity_counts
The with_severity_counts scope used select("table.*") which loaded
ALL columns including multi-MB xml blobs on Stig and SRG models.
On index pages this blew Heroku dyno memory (R14/R15) and caused
30s timeouts (H12), crashing the app.
Fix: auto-detect columns of type xml/binary and exclude them from
the SELECT in with_severity_counts. This is a DRY fix at the
concern level — all models (Stig, SRG, Component) benefit without
per-controller workarounds. Models without heavy columns are
unaffected (all columns loaded as before).
The xml column is still loaded via Stig.find(id) for export/download
endpoints that need it.
Authored by: Aaron Lippold<lippold@gmail.com>
* fix: address Copilot review — use abstract column type, update docs, dynamic test assertions
- Use c.type (ActiveRecord abstract) instead of c.sql_type (adapter-
specific) for heavy column detection. Catches Postgres bytea, MySQL
blob, etc.
- Update concern header docs to reflect auto-generated scope (was
stale "define your own" instruction)
- Spec column assertions now dynamically check all non-blob columns
instead of hardcoded subset
Signed-off-by: Will Dower <will@dower.dev>
---------
Signed-off-by: Will Dower <will@dower.dev>
Co-authored-by: Will Dower <will@dower.dev>1 parent 730853c commit 5ec0994
File tree
2 files changed
+83
-7
lines changed- app/models/concerns
- spec/models/concerns
2 files changed
+83
-7
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
8 | | - | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
9 | 10 | | |
10 | 11 | | |
11 | 12 | | |
12 | 13 | | |
13 | | - | |
14 | | - | |
15 | | - | |
| 14 | + | |
16 | 15 | | |
17 | 16 | | |
18 | 17 | | |
| |||
29 | 28 | | |
30 | 29 | | |
31 | 30 | | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
32 | 39 | | |
33 | 40 | | |
34 | 41 | | |
35 | 42 | | |
36 | | - | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
37 | 47 | | |
38 | 48 | | |
39 | 49 | | |
| |||
54 | 64 | | |
55 | 65 | | |
56 | 66 | | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
57 | 73 | | |
58 | | - | |
| 74 | + | |
59 | 75 | | |
60 | 76 | | |
61 | 77 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
153 | 153 | | |
154 | 154 | | |
155 | 155 | | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
156 | 216 | | |
0 commit comments