On Mon, Sep 30, 2019 at 12:49 AM Fujii Masao <masao.fu...@gmail.com> wrote: > > Hi, > > I got the following assertion failure when I enabled recovery_min_apply_delay > and started archive recovery (i.e., I put only recovery.signal not > standby.signal). > > TRAP: FailedAssertion("latch->owner_pid == MyProcPid", File: > "latch.c", Line: 522) > > Here is the example to reproduce the issue: > > ---------------------------- > initdb -D data > pg_ctl -D data start > psql -c "alter system set recovery_min_apply_delay to '60s'" > psql -c "alter system set archive_mode to on" > psql -c "alter system set archive_command to 'cp %p ../arch/%f'" > psql -c "alter system set restore_command to 'cp ../arch/%f %p'" > mkdir arch > pg_basebackup -D bkp -c fast > pgbench -i > pgbench -t 1000 > pg_ctl -D data -m i stop > rm -rf bkp/pg_wal > mv data/pg_wal bkp > rm -rf data > mv bkp data > touch data/recovery.signal > pg_ctl -D data -W start > ---------------------------- > > The latch that causes this assertion failure is recoveryWakeupLatch. > The ownership of this latch is taken only when standby mode is > requested. But this latch can be used when starting archive recovery > with recovery_min_apply_delay set even though it's unowned. > So the assertion failure happened. > > Attached patch fixes this issue by making archive recovery always ignore > recovery_min_apply_delay. This change is OK because > recovery_min_apply_delay was introduced for standby mode, I think.
No, I found the following description in the doc. ------------------------------ This parameter is intended for use with streaming replication deployments; however, if the parameter is specified it will be honored in all cases ------------------------------ So archive recovery with recovery_min_apply_delay enabled would be intended configuration. My patch that changes archive recovery so that it always ignores thesetting might be in wrong direction. Maybe we should make recovery_min_apply_delay work properly even in archive recovery. Thought? Regards, -- Fujii Masao