On 2015-06-03 00:42:55 -0300, Alvaro Herrera wrote: > Thomas Munro wrote: > > On Tue, Jun 2, 2015 at 9:30 AM, Alvaro Herrera <alvherre@xxxxxxxxxxxxxxx> wrote: > > > My guess is that the file existed, and perhaps had one or more pages, > > > but the wanted page doesn't exist, so we tried to read but got 0 bytes > > > back. read() returns 0 in this case but doesn't set errno. > > > > > > I didn't find a way to set things so that the file exists but is of > > > shorter contents than oldestMulti by the time the checkpoint record is > > > replayed. > > > > I'm just starting to learn about the recovery machinery, so forgive me > > if I'm missing something basic here, but I just don't get this. As I > > understand it, offsets/0046 should either have been copied with that > > page present in it if it existed before the backup started (apparently > > not in this case), or extended to contain it by WAL records that come > > after the backup label but before the checkpoint record that > > references it (also apparently not in this case). That's not necessarily the case though, given how the code currently works. In a bunch of places the SLRUs are accessed *before* having been made consistent by WAL replay. Especially if several checkpoints/vacuums happened during the base backup the assumed state (i.e. the mxacts checkpoints refer to) of the data directory soon after the initial start, and the state of pg_multixact/ won't necessarily match at all. > Exactly --- that's the spot at which I am, also. I have had this > spinning in my head for three days now, and tried every single variation > that I could think of, but like you I was unable to reproduce the issue. > However, our customer took a second base backup and it failed in exactly > the same way, module some changes to the counters (the file that > didn't exist was 004B rather than 0046). I'm still at a loss at what > the failure mode is. We must be missing some crucial detail ... I might have missed it in this already long thread. Could you share a bunch of details about hte case? It'd be very interesting to see the contents of the backup label (to see where start/end are), the contents of the initial checkpoint (to see which mxacts we assume to exist at start) and what the initial contents of pg_multixact are (to match up). Greetings, Andres Freund -- Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general