Skip site navigation (1) Skip section navigation (2)

Re: pgsql: On Windows, when a file is deleted and another process still has

From: Heikki Linnakangas <heikki(dot)linnakangas(at)enterprisedb(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: pgsql-committers(at)postgresql(dot)org
Subject: Re: pgsql: On Windows, when a file is deleted and another process still has
Date: 2009-09-10 19:40:54
Message-ID: 4AA95646.5070804@enterprisedb.com (view raw or flat)
Thread:
Lists: pgsql-committerspgsql-hackers
Tom Lane wrote:
> I wouldn't be too surprised if that rat's nest in InstallXLogFileSegment
> isn't right :-(.  But we have to treat "file can't be renamed" as a
> nonfatal condition on Windows.

I added some debugging code, and I'm getting an ERROR_SHARING_VIOLATION
error when another program keeps the file open, while
InstallXLogFileSegment is checking for ERROR_ACCESS_DENIED. It seems
that check is flat-out wrong, as is the one in pgrename(). A bit of
googling suggests that Windows 9x might've returned ERROR_ACCESS_DENIED
in that case, so that's probably where that originated. pgwin32_open()
correctly checks for ERROR_SHARING_VIOLATION, but also for
ERROR_LOCK_VIOLATION.

I also note that since pgrename() doesn't set errno, the error message
printed in InstallXLogFileSegment if it fails is bogus. pgrename()
should set errno, using _dosmaperr().

A completely different approach would be to treat any failure on all
platforms as non-fatal. We shouldn't really cut the checkpoint short if
recycling a WAL file fails, whatever the reason. That seems like a more
robust approach than trying to guess which error codes are OK to ignore.

When called from XLogFileInit(), it's not expected that the target file
doesn't exist after InstallXLogFileSegment(), but it would just fail to
open it and throw an error anyway.

-- 
  Heikki Linnakangas
  EnterpriseDB   http://www.enterprisedb.com

In response to

Responses

pgsql-hackers by date

Next:From: Tom LaneDate: 2009-09-10 19:44:02
Subject: Re: pgsql: On Windows, when a file is deleted and another process still has
Previous:From: Pavel StehuleDate: 2009-09-10 19:35:09
Subject: Re: RfD: more powerful "any" types

pgsql-committers by date

Next:From: Tom LaneDate: 2009-09-10 19:44:02
Subject: Re: pgsql: On Windows, when a file is deleted and another process still has
Previous:From: Tom LaneDate: 2009-09-10 16:59:21
Subject: Re: pgsql: On Windows, when a file is deleted and another process still has

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group