Re: Kludge in pg_standby.c - Mailing list pgsql-hackers

From Magnus Hagander
Subject Re: Kludge in pg_standby.c
Date
Msg-id 200804070634280000@77442752
Whole thread Raw
In response to Kludge in pg_standby.c  (Gregory Stark <stark@enterprisedb.com>)
List pgsql-hackers
no. I have been without a working win32 build environment for a while. Working on fixing that right now..

/Magnus

> ------- Original Message -------
> From: Bruce Momjian <bruce@momjian.us>
> To: Gregory Stark <stark@enterprisedb.com>, Magnus Hagander <magnus@hagander.net>
> Sent: 08-04-07, 1:54:37
> Subject: Re: [HACKERS] Kludge in pg_standby.c
> 
> Magnus, have you looked at this yet?
> 
> ---------------------------------------------------------------------------
> 
> Gregory Stark wrote:
> > 
> > There's a suspicious ifdef in pg_standby for WIN32 which smells like a kludge
> > added to work around a Windows problem which makes it work but at great
> > expense:
> > 
> > #ifdef WIN32
> >                 /*
> >                  * Windows reports that the file has the right number of bytes
> >                  * even though the file is still being copied and cannot be
> >                  * opened by pg_standby yet. So we wait for sleeptime secs
> >                  * before attempting to restore. If that is not enough, we
> >                  * will rely on the retry/holdoff mechanism.
> >                  */
> >                 pg_usleep(sleeptime * 1000000L);
> > #endif
> > 
> > This happens before we return *any* WAL file to be processed. That means it
> > slows down the processing of any file by 1s. On a server which has fallen
> > behind this means it can't process files as quickly as it can copy them, it's
> > limited to at most 1/s.
> > 
> > I think it wouldn't be hard to do this properly. We can try to open the file,
> > handle the expected Windows error by sleeping for 1s and repeating until we
> > can successfully open it. Something like (untested):
> > 
> >         bool success = false;
> >                 int fd, tries = 10;
> >         while (--tries) {
> >                    fd = open(WALFilePath, O_RDONLY);
> >                    if (fd >= 0) {
> >                        close(fd);
> >                        success = true;
> >                        break;
> >                    } else if (errno == EWINDOWSBLOWS) {
> >                        usleep(1000000);
> >                    } else {
> >                        perror("pg_standby open:");
> >                        exit(2);
> >                    }
> >                }
> >                if (!success) {
> >                    fprintf(stderr, "pg_standby: couldn't open file \"%s\" due to \"%s\", 
> >                            WALFilePath, strerror(EWINDOWSBLOWS));
> >                    exit(2);
> >                }
> > 
> > 
> > -- 
> >   Gregory Stark
> >   EnterpriseDB          http://www.enterprisedb.com
> >   Ask me about EnterpriseDB's RemoteDBA services!
> > 
> > ---------------------------(end of broadcast)---------------------------
> > TIP 1: if posting/reading through Usenet, please send an appropriate
> >        subscribe-nomail command to majordomo@postgresql.org so that your
> >        message can get through to the mailing list cleanly
> 
> -- 
>   Bruce Momjian  <bruce@momjian.us>        http://momjian.us
>   EnterpriseDB                             http://enterprisedb.com
> 
>   + If your life is a hard drive, Christ can be your backup. +
> 


pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: [FEATURE REQUEST] Streaming Onlinebackup (Maybe OFFTOPIC)
Next
From: "Gurjeet Singh"
Date:
Subject: Re: [FEATURE REQUEST] Streaming Onlinebackup (Maybe OFFTOPIC)