On Wed, 27 Nov 2019 at 14:16, Amit Khandekar <amitdkhan...@gmail.com> wrote: > What I found was : We do attempt to close the opened vfds in the > PG_CATCH block. In ReorderBufferCommit(), ReorderBufferIterTXNFinish > is called both in PG_TRY and PG_CATCH. This closes all the opened > vfds. But the issue is : if the ereport() occurs inside > ReorderBufferIterTXNInit(), then iterstate is still NULL. So in > PG_CATCH, ReorderBufferIterTXNFinish() is not called, so the vfds in > state->entries[] remain open. > > We can have &iterstate passed to ReorderBufferIterTXNInit() as another > argument, and initialize it first thing inside the function. This way, > it will never be NULL. But need to be careful about the possibility of > having a iterstate in a half-cooked state, so cleanup might use some > uninitialized handles. Will work on it. At least, we can make sure the > iterstate->entries handle doesn't have junk values.
Done as stated above; attached v3 patch. I have verified that the file handles do get closed in PG_CATCH block via ReorderBufferIterTXNFinish(). -- Thanks, -Amit Khandekar EnterpriseDB Corporation The Postgres Database Company
use_vfd_for_logrep_v3.patch
Description: Binary data