forked frompostgres/postgres
- Notifications
You must be signed in to change notification settings - Fork0
Commitac4ab97
committed
Fix race condition in GIN posting tree page deletion.
If a page is deleted, and reused for something else, just as a search isfollowing a rightlink to it from its left sibling, the search would continuescanning whatever the new contents of the page are. That could lead toincorrect query results, or even something more curious if the page isreused for a different kind of a page.To fix, modify the search algorithm to lock the next page before releasingthe previous one, and refrain from deleting pages from the leftmost branchof the tree.Add a new Concurrency section to the README, explaining why this works.There is a lot more one could say about concurrency in GIN, but that's foranother patch.Backpatch to all supported versions.1 parent636b868 commitac4ab97
File tree
5 files changed
+121
-59
lines changed- src
- backend/access/gin
- include/access
5 files changed
+121
-59
lines changedLines changed: 50 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
210 | 210 |
| |
211 | 211 |
| |
212 | 212 |
| |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
213 | 263 |
| |
214 | 264 |
| |
215 | 265 |
| |
|
Lines changed: 42 additions & 11 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
112 | 112 |
| |
113 | 113 |
| |
114 | 114 |
| |
| 115 | + | |
115 | 116 |
| |
116 |
| - | |
117 |
| - | |
118 |
| - | |
119 | 117 |
| |
120 | 118 |
| |
121 | 119 |
| |
| |||
148 | 146 |
| |
149 | 147 |
| |
150 | 148 |
| |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 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 | + | |
151 | 184 |
| |
152 | 185 |
| |
153 | 186 |
| |
| |||
235 | 268 |
| |
236 | 269 |
| |
237 | 270 |
| |
238 |
| - | |
239 |
| - | |
240 | 271 |
| |
| 272 | + | |
| 273 | + | |
241 | 274 |
| |
242 |
| - | |
243 |
| - | |
| 275 | + | |
| 276 | + | |
244 | 277 |
| |
245 | 278 |
| |
246 | 279 |
| |
| |||
444 | 477 |
| |
445 | 478 |
| |
446 | 479 |
| |
447 |
| - | |
448 |
| - | |
449 | 480 |
| |
450 | 481 |
| |
451 | 482 |
| |
452 | 483 |
| |
453 | 484 |
| |
454 | 485 |
| |
| 486 | + | |
455 | 487 |
| |
456 | 488 |
| |
457 | 489 |
| |
458 | 490 |
| |
459 | 491 |
| |
460 | 492 |
| |
| 493 | + | |
461 | 494 |
| |
462 |
| - | |
463 |
| - | |
464 | 495 |
| |
465 | 496 |
| |
466 | 497 |
| |
|
Lines changed: 8 additions & 23 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
105 | 105 |
| |
106 | 106 |
| |
107 | 107 |
| |
108 |
| - | |
109 |
| - | |
110 | 108 |
| |
111 | 109 |
| |
112 | 110 |
| |
113 |
| - | |
114 |
| - | |
115 |
| - | |
116 |
| - | |
117 |
| - | |
| 111 | + | |
| 112 | + | |
118 | 113 |
| |
119 | 114 |
| |
120 | 115 |
| |
| |||
132 | 127 |
| |
133 | 128 |
| |
134 | 129 |
| |
135 |
| - | |
136 | 130 |
| |
137 | 131 |
| |
138 | 132 |
| |
| |||
162 | 156 |
| |
163 | 157 |
| |
164 | 158 |
| |
165 |
| - | |
166 |
| - | |
167 |
| - | |
168 |
| - | |
| 159 | + | |
169 | 160 |
| |
170 | 161 |
| |
171 | 162 |
| |
| |||
543 | 534 |
| |
544 | 535 |
| |
545 | 536 |
| |
546 |
| - | |
547 | 537 |
| |
548 | 538 |
| |
549 | 539 |
| |
| |||
561 | 551 |
| |
562 | 552 |
| |
563 | 553 |
| |
564 |
| - | |
565 |
| - | |
566 |
| - | |
567 |
| - | |
568 |
| - | |
| 554 | + | |
569 | 555 |
| |
570 |
| - | |
| 556 | + | |
571 | 557 |
| |
572 | 558 |
| |
573 | 559 |
| |
574 | 560 |
| |
575 | 561 |
| |
576 | 562 |
| |
577 |
| - | |
578 |
| - | |
579 |
| - | |
580 |
| - | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
581 | 566 |
| |
582 | 567 |
| |
583 | 568 |
| |
|
Lines changed: 20 additions & 25 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
240 | 240 |
| |
241 | 241 |
| |
242 | 242 |
| |
| 243 | + | |
| 244 | + | |
| 245 | + | |
243 | 246 |
| |
244 | 247 |
| |
245 | 248 |
| |
| |||
249 | 252 |
| |
250 | 253 |
| |
251 | 254 |
| |
| 255 | + | |
252 | 256 |
| |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
253 | 263 |
| |
254 | 264 |
| |
255 |
| - | |
256 |
| - | |
257 |
| - | |
258 |
| - | |
259 |
| - | |
260 |
| - | |
261 |
| - | |
262 | 265 |
| |
263 | 266 |
| |
264 | 267 |
| |
| 268 | + | |
265 | 269 |
| |
266 | 270 |
| |
267 | 271 |
| |
268 | 272 |
| |
269 |
| - | |
270 |
| - | |
271 | 273 |
| |
272 | 274 |
| |
273 | 275 |
| |
274 |
| - | |
275 |
| - | |
276 |
| - | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
277 | 279 |
| |
278 |
| - | |
279 |
| - | |
280 |
| - | |
281 |
| - | |
282 |
| - | |
283 |
| - | |
| 280 | + | |
| 281 | + | |
284 | 282 |
| |
| 283 | + | |
285 | 284 |
| |
286 | 285 |
| |
287 | 286 |
| |
| |||
363 | 362 |
| |
364 | 363 |
| |
365 | 364 |
| |
366 |
| - | |
367 |
| - | |
368 |
| - | |
369 |
| - | |
| 365 | + | |
370 | 366 |
| |
371 | 367 |
| |
372 | 368 |
| |
| |||
435 | 431 |
| |
436 | 432 |
| |
437 | 433 |
| |
438 |
| - | |
439 |
| - | |
| 434 | + | |
| 435 | + | |
440 | 436 |
| |
441 |
| - | |
442 | 437 |
| |
443 | 438 |
| |
444 | 439 |
| |
|
Lines changed: 1 addition & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
516 | 516 |
| |
517 | 517 |
| |
518 | 518 |
| |
| 519 | + | |
519 | 520 |
| |
520 | 521 |
| |
521 | 522 |
| |
|
0 commit comments
Comments
(0)