Commit fa50e81
Fix orphan-drain losing symbol-dict mirror seed
The send loop seeded its reconnect catch-up mirror by calling
PersistedSymbolDict.takeLoadedEntries(), a one-shot ownership transfer
that zeroed the dictionary's loaded-entries buffer. The foreground
sender builds a single loop, so that was safe. But BackgroundDrainer
builds a fresh send loop per wire session against the SAME, persistent
engine when a durable-ack capability gap forces a mid-drain recycle.
The second loop then found an empty loaded-entries buffer, seeded an
empty mirror (sentDictCount = 0), sent no reconnect catch-up, and the
first replayed delta frame (deltaStart > 0) tripped the torn-dict guard
-- falsely quarantining a healthy slot with a bogus "resend required"
terminal and defeating the capability-gap settle-retry for delta slots.
The send loop now COPIES the loaded entries into its own mirror and
leaves the dictionary owning its buffer for the engine's lifetime, so
every recycled loop re-seeds. PersistedSymbolDict.close() frees the
dictionary's copy; each loop frees its own copy on exit. Peak footprint
is unchanged (the drainer closes loop N before building loop N+1).
Removes the now-unused takeLoadedEntries() and loadedEntriesTaken, and
adds a regression test that builds two loops against one recovered
engine and asserts the second re-seeds (pre-fix its mirror was empty).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>1 parent 10a125c commit fa50e81
3 files changed
Lines changed: 91 additions & 36 deletions
File tree
- core/src
- main/java/io/questdb/client/cutlass/qwp/client/sf/cursor
- test/java/io/questdb/client/test/cutlass/qwp/client/sf/cursor
Lines changed: 15 additions & 9 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
543 | 543 | | |
544 | 544 | | |
545 | 545 | | |
546 | | - | |
547 | | - | |
548 | | - | |
549 | | - | |
550 | | - | |
551 | | - | |
552 | | - | |
553 | | - | |
554 | | - | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
555 | 561 | | |
556 | 562 | | |
557 | 563 | | |
| |||
Lines changed: 6 additions & 27 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
95 | 95 | | |
96 | 96 | | |
97 | 97 | | |
98 | | - | |
99 | | - | |
100 | | - | |
101 | | - | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
102 | 104 | | |
103 | 105 | | |
104 | | - | |
105 | | - | |
106 | | - | |
107 | 106 | | |
108 | 107 | | |
109 | 108 | | |
| |||
282 | 281 | | |
283 | 282 | | |
284 | 283 | | |
285 | | - | |
286 | 284 | | |
287 | 285 | | |
288 | 286 | | |
| |||
313 | 311 | | |
314 | 312 | | |
315 | 313 | | |
316 | | - | |
317 | | - | |
318 | | - | |
319 | | - | |
320 | | - | |
321 | | - | |
322 | | - | |
323 | | - | |
324 | | - | |
325 | | - | |
326 | | - | |
327 | | - | |
328 | | - | |
329 | | - | |
330 | | - | |
331 | | - | |
332 | | - | |
333 | | - | |
334 | | - | |
335 | 314 | | |
336 | 315 | | |
337 | 316 | | |
| |||
Lines changed: 70 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
| 36 | + | |
36 | 37 | | |
37 | 38 | | |
38 | 39 | | |
| |||
96 | 97 | | |
97 | 98 | | |
98 | 99 | | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
99 | 163 | | |
100 | 164 | | |
101 | 165 | | |
| |||
117 | 181 | | |
118 | 182 | | |
119 | 183 | | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
120 | 190 | | |
121 | 191 | | |
122 | 192 | | |
| |||
0 commit comments