PG-1932 Make sure archive and restore comamnds do not leak files #467
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
As reported by Roman Leventov in percona/postgres#582 we had an issue where we easily could leak temporary files and directories when on failure, especially when the wrapped restore or archive command fails.
The solution in this commit is to move the cleanup of temporary files and directories to an
atexit()callback plus add a signal handler forSIGINTandSIGTERM. The signal handler makes sure to kill itself after running cleanup so the parent process gets the right error.We have a tiny race condition between creating the temporary directory and registering the signal handler but that does not seem worth fixing since it would just leak a directory, not the WAL file, the race conditions being tiny.
With the current hardcoded path of
/dev/shmand the TAP test framework testing this seems a pain so no tests are included.Question: Should I add TAP tests or is it ok that I skipped them?