forked frompostgres/postgres
- Notifications
You must be signed in to change notification settings - Fork6
Commit5f1d931
committed
Fix race condition between hot standby and restoring a full-page image.
There was a window in RestoreBackupBlock where a page would be zeroed out,but not yet locked. If a backend pinned and locked the page in that window,it saw the zeroed page instead of the old page or new page contents, whichcould lead to missing rows in a result set, or errors.To fix, replace RBM_ZERO with RBM_ZERO_AND_LOCK, which atomically pins,zeroes, and locks the page, if it's not in the buffer cache already.In stable branches, the old RBM_ZERO constant is renamed to RBM_DO_NOT_USE,to avoid breaking any 3rd party extensions that might use RBM_ZERO. Moreimportantly, this avoids renumbering the other enum values, which wouldcause even bigger confusion in extensions that use ReadBufferExtended, buthaven't been recompiled.Backpatch to all supported versions; this has been racy since hot standbywas introduced.1 parent4ddd9e7 commit5f1d931
File tree
6 files changed
+66
-25
lines changed- src
- backend
- access
- hash
- heap
- transam
- storage/buffer
- include/storage
6 files changed
+66
-25
lines changedLines changed: 7 additions & 6 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
158 | 158 |
| |
159 | 159 |
| |
160 | 160 |
| |
161 |
| - | |
162 |
| - | |
163 |
| - | |
| 161 | + | |
| 162 | + | |
164 | 163 |
| |
165 | 164 |
| |
166 | 165 |
| |
| |||
201 | 200 |
| |
202 | 201 |
| |
203 | 202 |
| |
| 203 | + | |
204 | 204 |
| |
205 | 205 |
| |
206 |
| - | |
207 |
| - | |
208 |
| - | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
209 | 210 |
| |
210 | 211 |
| |
211 | 212 |
| |
|
Lines changed: 1 addition & 2 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
4367 | 4367 |
| |
4368 | 4368 |
| |
4369 | 4369 |
| |
4370 |
| - | |
| 4370 | + | |
4371 | 4371 |
| |
4372 |
| - | |
4373 | 4372 |
| |
4374 | 4373 |
| |
4375 | 4374 |
| |
|
Lines changed: 1 addition & 5 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
3620 | 3620 |
| |
3621 | 3621 |
| |
3622 | 3622 |
| |
3623 |
| - | |
| 3623 | + | |
3624 | 3624 |
| |
3625 |
| - | |
3626 |
| - | |
3627 |
| - | |
3628 |
| - | |
3629 | 3625 |
| |
3630 | 3626 |
| |
3631 | 3627 |
| |
|
Lines changed: 12 additions & 5 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
234 | 234 |
| |
235 | 235 |
| |
236 | 236 |
| |
237 |
| - | |
| 237 | + | |
| 238 | + | |
238 | 239 |
| |
239 | 240 |
| |
240 | 241 |
| |
241 | 242 |
| |
242 | 243 |
| |
243 | 244 |
| |
244 | 245 |
| |
245 |
| - | |
246 |
| - | |
| 246 | + | |
| 247 | + | |
247 | 248 |
| |
248 | 249 |
| |
249 | 250 |
| |
| |||
262 | 263 |
| |
263 | 264 |
| |
264 | 265 |
| |
265 |
| - | |
266 |
| - | |
| 266 | + | |
| 267 | + | |
267 | 268 |
| |
268 | 269 |
| |
269 | 270 |
| |
| |||
317 | 318 |
| |
318 | 319 |
| |
319 | 320 |
| |
| 321 | + | |
| 322 | + | |
| 323 | + | |
320 | 324 |
| |
| 325 | + | |
321 | 326 |
| |
322 | 327 |
| |
323 | 328 |
| |
324 | 329 |
| |
325 | 330 |
| |
326 | 331 |
| |
327 | 332 |
| |
| 333 | + | |
| 334 | + | |
328 | 335 |
| |
329 | 336 |
| |
330 | 337 |
| |
|
Lines changed: 37 additions & 4 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
208 | 208 |
| |
209 | 209 |
| |
210 | 210 |
| |
211 |
| - | |
212 |
| - | |
213 |
| - | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
214 | 214 |
| |
| 215 | + | |
| 216 | + | |
215 | 217 |
| |
216 | 218 |
| |
217 | 219 |
| |
218 | 220 |
| |
| 221 | + | |
| 222 | + | |
| 223 | + | |
219 | 224 |
| |
220 | 225 |
| |
221 | 226 |
| |
| |||
356 | 361 |
| |
357 | 362 |
| |
358 | 363 |
| |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
359 | 376 |
| |
360 | 377 |
| |
361 | 378 |
| |
| |||
436 | 453 |
| |
437 | 454 |
| |
438 | 455 |
| |
439 |
| - | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
440 | 459 |
| |
| 460 | + | |
441 | 461 |
| |
442 | 462 |
| |
443 | 463 |
| |
| |||
464 | 484 |
| |
465 | 485 |
| |
466 | 486 |
| |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
467 | 500 |
| |
468 | 501 |
| |
469 | 502 |
| |
|
Lines changed: 8 additions & 3 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
36 | 36 |
| |
37 | 37 |
| |
38 | 38 |
| |
39 |
| - | |
40 |
| - | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
41 | 42 |
| |
42 |
| - | |
| 43 | + | |
43 | 44 |
| |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
44 | 49 |
| |
45 | 50 |
| |
46 | 51 |
| |
|
0 commit comments
Comments
(0)