From: | Antonin Houska <ah(at)cybertec(dot)at> |
---|---|
To: | Alvaro Herrera <alvherre(at)2ndquadrant(dot)com> |
Cc: | Michael Paquier <michael(at)paquier(dot)xyz>, Thomas Munro <thomas(dot)munro(at)gmail(dot)com>, Robert Haas <robertmhaas(at)gmail(dot)com>, "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Attempt to consolidate reading of XLOG page |
Date: | 2019-11-26 10:40:17 |
Message-ID: | 66134.1574764817@antos |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Alvaro Herrera <alvherre(at)2ndquadrant(dot)com> wrote:
> On 2019-Nov-25, Antonin Houska wrote:
>
> > Alvaro Herrera <alvherre(at)2ndquadrant(dot)com> wrote:
>
> > > I see no reason to leave ws_off. We can move that to XLogReaderState; I
> > > did that here. We also need the offset in WALReadError, though, so I
> > > added it there too. Conceptually it seems clearer to me this way.
> > >
> > > What do you think of the attached?
> >
> > It looks good to me. Attached is just a fix of a minor problem in error
> > reporting that Michael pointed out earlier.
>
> Excellent, I pushed it with this change included and some other cosmetic
> changes.
Thanks!
> Now there's only XLogPageRead() ...
Hm, this seems rather specific, not sure it's worth trying to use WALRead()
here. Anyway, I notice that it uses pg_read() too.
> > I'd appreciate more background about the "partial read" that
> > Michael mentions here:
> >
> > https://www.postgresql.org/message-id/20191125033048.GG37821%40paquier.xyz
>
> In the current implementation, if pg_pread() does a partial read, we
> just loop one more time.
>
> I considered changing the "if (readbytes <= 0)" with "if (readbytes <
> segbytes)", but that seemed pointless.
In the pread() documentation I see "Upon reading end-of-file, zero is
returned." but that does not tell whether zero can be returned without
reaching EOF. However XLogPageRead() handles zero as an error, so WALRead() is
consistent with that.
> However, writing this now makes me think that we should add a
> CHECK_FOR_INTERRUPTS in this loop. (I also wonder if we shouldn't limit
> the number of times we retry if pg_pread returns zero (i.e. no error,
> but no bytes read either). I don't know if this is a real-world
> consideration.)
If statement above is correct, then we shouldn't need this.
--
Antonin Houska
Web: https://www.cybertec-postgresql.com
From | Date | Subject | |
---|---|---|---|
Next Message | Etsuro Fujita | 2019-11-26 11:35:33 | Re: A problem about partitionwise join |
Previous Message | Tomas Vondra | 2019-11-26 09:43:24 | Re: pglz performance |