Alvaro Herrera <alvhe...@2ndquadrant.com> wrote: > On 2019-Nov-25, Antonin Houska wrote: > > > Alvaro Herrera <alvhe...@2ndquadrant.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