Thread: Half filled xlogs

Half filled xlogs

From
Simon Riggs
Date:
I'm looking into copying partially filled xlogs with the Archiver
process, to allow a more rounded warm standby database option.

My understanding is that on win32, when an xlog file is still being
written to by a backend it will be locked and unable to be copied away
by another process.

Could somebody comment on this? I don't want to write a load of non-
portable code for Linux.

Thanks,

Best Regards, Simon Riggs



Re: Half filled xlogs

From
"Magnus Hagander"
Date:
>I'm looking into copying partially filled xlogs with the Archiver
>process, to allow a more rounded warm standby database option.
>
>My understanding is that on win32, when an xlog file is still being
>written to by a backend it will be locked and unable to be copied away
>by another process.

No, that shouldn't be a problem. We open all our files with
FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE (see port/open.c). It
should work fine as the other process that reads it also opens it with
at least FILE_SHARE_READ.

To verify, I started up a backend and did a begin transaction;create
table foo(bar int);
Then I copied the xlog file, and it copied without any errors.

AFAIK, it shuold also contain the actual data, as long as it's been
synced (which would be the same on unix, right?). (or if the file is
opened with o_dsync). I haven't verified it myself, though.

//Magnus

Re: Half filled xlogs

From
Simon Riggs
Date:
On Sun, 2005-03-20 at 17:02 +0100, Magnus Hagander wrote:
> >I'm looking into copying partially filled xlogs with the Archiver
> >process, to allow a more rounded warm standby database option.
> >
> >My understanding is that on win32, when an xlog file is still being
> >written to by a backend it will be locked and unable to be copied away
> >by another process.
>
> No, that shouldn't be a problem.

OK, good. That makes it a lot simpler.

I'll post a design that explains that soon.

> We open all our files with
> FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE (see port/open.c). It
> should work fine as the other process that reads it also opens it with
> at least FILE_SHARE_READ.

...but its the implications that count!

> To verify, I started up a backend and did a begin transaction;create
> table foo(bar int);
> Then I copied the xlog file, and it copied without any errors.
>
> AFAIK, it shuold also contain the actual data, as long as it's been
> synced (which would be the same on unix, right?). (or if the file is
> opened with o_dsync). I haven't verified it myself, though.

I was hoping to verify by theory - but I'll go for it then we can test.

Best Regards, Simon Riggs