Maintain valid md.c state when FileClose() fails.
authorNoah Misch <[email protected]>
Sat, 11 Jan 2020 02:31:22 +0000 (18:31 -0800)
committerNoah Misch <[email protected]>
Sat, 11 Jan 2020 02:31:25 +0000 (18:31 -0800)
commit93078e63f77979df3752e8ef5392dd384117e0ef
tree888483f57f7729e0253bb3f78f234f479ab2546a
parent2e89a1248db51bebd01f41011d439cdf9832eca8
Maintain valid md.c state when FileClose() fails.

FileClose() failure ordinarily causes a PANIC.  Suppose the user
disables that PANIC via data_sync_retry=on.  After mdclose() issued a
FileClose() that failed, calls into md.c raised SIGSEGV.  This fix adds
repalloc() calls during mdclose(); update a comment about ignoring
repalloc() cost.  The rate of relation segment count change is a minor
factor; more relevant to overall performance is the rate of mdclose()
and subsequent re-opening of segments.  Back-patch to v10, where commit
45e191e3aa62d47a8bc1a33f784286b2051f45cb introduced the bug.

Reviewed by Kyotaro Horiguchi.

Discussion: https://postgr.es/m/20191222091930[email protected]
src/backend/storage/smgr/md.c