postgres.git / summary / log / commit / refs

commit    d34794f7d5566effd342dd0ebaca3de3b48656f0
Author:   Fujii Masao <fujii@postgresql.org>
Date:     Sat Mar 05 17:29:04 2016 +0000

    Ignore recovery_min_apply_delay until recovery has reached consistent state
    
    Previously recovery_min_apply_delay was applied even before recovery
    had reached consistency. This could cause us to wait a long time
    unexpectedly for read-only connections to be allowed. It's problematic
    because the standby was useless during that wait time.
    
    This patch changes recovery_min_apply_delay so that it's applied once
    the database has reached the consistent state. That is, even if the delay
    is set, the standby tries to replay WAL records as fast as possible until
    it has reached consistency.
    
    Author: Michael Paquier
    Reviewed-By: Julien Rouhaud
    Reported-By: Greg Clough
    Backpatch: 9.4, where recovery_min_apply_delay was added
    Bug: #13770
    Discussion: http://www.postgresql.org/message-id/20151111155006.2644.84564@wrigleys.postgresql.org


doc/src/sgml/recovery-config.sgml | 5 +++-- src/backend/access/transam/xlog.c | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/recovery-config.sgml b/doc/src/sgml/recovery-config.sgml index 22d1332b8b4..26af221745c 100644 --- a/doc/src/sgml/recovery-config.sgml +++ b/doc/src/sgml/recovery-config.sgml @@ -462,8 +462,9 @@ restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows are not visible until the corresponding commit record is applied. </para> <para> - The delay occurs until the standby is promoted or triggered. After that - the standby will end recovery without further waiting. + The delay occurs once the database in recovery has reached a consistent + state, until the standby is promoted or triggered. After that the standby + will end recovery without further waiting. </para> <para> This parameter is intended for use with streaming replication deployments; diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 94b79ac49d5..00f139a0f38 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -5715,6 +5715,10 @@ recoveryApplyDelay(XLogReaderState *record) if (recovery_min_apply_delay <= 0) return false; + /* no delay is applied on a database not yet consistent */ + if (!reachedConsistency) + return false; + /* * Is it a COMMIT record? * [parent: 60690a6fe835]