On 10/31/2013 08:40 AM, MauMau wrote:
> I've found and fixed a bug that causes recovery (crash recovery, PITR)
> to fail. Please find attached the patch against HEAD.
> To reproduce the problem, do the following on Windows:
> 1. pg_ctl start
> 2. CREATE TABLESPACE tbs LOCATION 'some_tblspc_path';
> 3. pg_ctl stop -mi
> 4. pg_ctl start
> The database server fails to start, leaving the below messages:
> LOG: database system was interrupted; last known up at 2013-10-31
> 20:24:07 JST
> LOG: database system was not properly shut down; automatic recovery in
> LOG: redo starts at 0/1788938
> FATAL: could not remove symbolic link "pg_tblspc/16385": Permission
> CONTEXT: xlog redo create tablespace: 16385 "d:/tbs"
> LOG: startup process (PID 2724) exited with exit code 1
> LOG: aborting startup due to startup process failure
> In redo, create_tablespace_directories() tries to remove the symbolic
> link for the tablespace using unlink(). However, unlink() on Windows
> fails with errno=13 (Permission denied). This is because junction
> points are directories on Windows.
> Follow destroy_tablespace_directories() and use rmdir() to remove the
> junction point.
> I've tested the patch. Could you review it and commit? I wish it to be
> backported to all major releases.
Why are you making this a runtime check instead of a compile time check?
Sent via pgsql-hackers mailing list (firstname.lastname@example.org)
To make changes to your subscription: