On Thu, May 14, 2015 at 10:29 PM, Andrew Dunstan <and...@dunslane.net> wrote: > > > On 05/14/2015 10:52 AM, Robert Haas wrote: >> >> On Thu, May 14, 2015 at 12:12 AM, Amit Kapila <amit.kapil...@gmail.com> wrote: >>> >>> On Thu, May 14, 2015 at 2:10 AM, Andrew Dunstan <and...@dunslane.net> wrote: >>>> >>>> How about if we simply abort if we find a non-symlink where we want the >>>> symlink to be, and only remove something that is actually a symlink (or a >>>> junction point, which is more or less the same thing)? >>> >>> We can do that way and for that I think we need to use rmdir >>> instead of rmtree in the code being discussed (recovery path), >>> OTOH we should try to minimize the errors raised during >>> recovery. >> >> I'm not sure I understand this issue in detail, but why would using >> rmtree() on something you expect to be a symlink ever be a good idea? >> It seems like if things are the way you expect them to be, it has no >> benefit, but if they are different from what you expect, you might >> blow away a ton of important data. >> >> Maybe I am just confused. >> > > > The suggestion is to get rid of using rmtree. Instead, if we find a non-symlink in pg_tblspc we'll make the user clean it up before we can continue. So your instinct is in tune with my suggestion. >
Find the patch which gets rid of rmtree usage. I have made it as a separate function because the same code is used from create_tablespace_directories() as well. I thought of extending the same API for using it from destroy_tablespace_directories() as well, but due to special handling (especially for ENOENT) in that function, I left it as of now. With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com
remove_only_symlinks_during_recovery_v1.patch
Description: Binary data
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers