> > + * * RecoverPreparedTransactions(), StandbyRecoverPreparedTransact > ions() > + * and PrescanPreparedTransactions() have been modified to go > throug > + * gxact->inredo entries that have not made to disk yet. > > It seems to me that there should be an initial scan of pg_twophase at > the beginning of recovery, discarding on the way with a WARNING > entries that are older than the checkpoint redo horizon. This should > fill in shmem entries using something close to PrepareRedoAdd(), and > mark those entries as inredo. Then, at the end of recovery, > PrescanPreparedTransactions does not need to look at the entries in > pg_twophase. And that's the case as well of > RecoverPreparedTransaction(). I think that you could get the patch > much simplified this way, as any 2PC data can be fetched directly from > WAL segments and there is no need to rely on scans of pg_twophase, > this is replaced by scans of entries in TwoPhaseState. > > I don't think this will work. We cannot replace pg_twophase with shmem entries + WAL pointers. This is because we cannot expect to have WAL entries around for long running prepared queries which survive across checkpoints.
Regards, Nikhils