Re: pg_upgrade < 9.3 -> >=9.3 misses a step around multixacts - Mailing list pgsql-bugs

From Alvaro Herrera
Subject Re: pg_upgrade < 9.3 -> >=9.3 misses a step around multixacts
Date
Msg-id 20140702155634.GD7340@eldon.alvh.no-ip.org
Whole thread Raw
In response to Re: pg_upgrade < 9.3 -> >=9.3 misses a step around multixacts  (Bruce Momjian <bruce@momjian.us>)
List pgsql-bugs
Bruce Momjian wrote:
> On Fri, Jun 27, 2014 at 05:05:21PM -0400, Alvaro Herrera wrote:

> > > Do they need to remove the members/0000 file too?
> >
> > No, the members file shouldn't be removed; if they have used multixacts
> > at all since upgrading, the members/0000 file contains the members of
> > the first bunch of multis.  Removing it would remove valid data.  (Also
> > I still think that removing the members/0000 file that initdb creates is
> > a mistake.)
>
> We never remove offset or members files with user data;  we are only
> discussing the removal of empty files created by initdb.  Can you
> explain why we would remove the offsets file but retain the members file
> created by initdb when we are _not_ preserving files from the old
> cluster?  We are certainly setting the offset and member value from the
> old cluster:
>
>         exec_prog(UTILITY_LOG_FILE, NULL, true,
>                   "\"%s/pg_resetxlog\" -m %u,%u \"%s\"",
>                   new_cluster.bindir,
>                   old_cluster.controldata.chkpnt_nxtmulti + 1,
>                   old_cluster.controldata.chkpnt_nxtmulti,
>                   new_cluster.pgdata);
>
> How are we not creating a gap in members files by setting the members
> value?  Why will that not cause problems?

We're not setting the offset and member value here; we're setting the
"nextMulti" and "oldestMulti" values.  Both affect the offsets counter,
not the members counter.  The members counter is kept at zero, so the
next multi to be allocated will create members starting from the first
members position in page zero.  initdb of the new cluster created the
first members page, which corresponds to the first members value that
will be used.

Note pg_resetxlog --help says:

  -m MXID,MXID     set next and oldest multitransaction ID

I think you're confusing the fact that we pass two values here (next and
oldest, both apply to offset counters) with offsets vs. members.

To affect the members counter you would use this other pg_resetxlog switch:
  -O OFFSET        set next multitransaction offset
which, AFAICS, we only use when upgrading from a 9.3+ cluster to a newer
9.3+ cluster (and we also copy the files from old cluster to the new
one).


--
Álvaro Herrera                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

pgsql-bugs by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: pg_upgrade < 9.3 -> >=9.3 misses a step around multixacts
Next
From: John R Pierce
Date:
Subject: Re: