postgres.git / summary / log / commit / refs

commit    9414e41ea703ea5fcc288bcf7dc000e53306896b
Author:   Peter Eisentraut <peter_e@gmx.net>
Date:     Mon May 01 14:18:09 2017 +0000

    Fix logical replication launcher wake up and reset
    
    After the logical replication launcher was told to wake up at
    commit (for example, by a CREATE SUBSCRIPTION command), the flag to wake
    up was not reset, so it would be woken up at every following commit as
    well.  So fix that by resetting the flag.
    
    Also, we don't need to wake up anything if the transaction was rolled
    back.  Just reset the flag in that case.
    
    Author: Masahiko Sawada <sawada.mshk@gmail.com>
    Reported-by: Fujii Masao <masao.fujii@gmail.com>


src/backend/access/transam/xact.c | 3 ++- src/backend/replication/logical/launcher.c | 6 ++++-- src/include/replication/logicallauncher.h | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index 605639b0c3d..a3ff1b22f07 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -2138,7 +2138,7 @@ CommitTransaction(void) AtEOXact_HashTables(true); AtEOXact_PgStat(true); AtEOXact_Snapshot(true, false); - AtCommit_ApplyLauncher(); + AtEOXact_ApplyLauncher(true); pgstat_report_xact_timestamp(0); CurrentResourceOwner = NULL; @@ -2612,6 +2612,7 @@ AbortTransaction(void) AtEOXact_ComboCid(); AtEOXact_HashTables(false); AtEOXact_PgStat(false); + AtEOXact_ApplyLauncher(false); pgstat_report_xact_timestamp(0); } diff --git a/src/backend/replication/logical/launcher.c b/src/backend/replication/logical/launcher.c index f5058d5a9ac..09c87d7c53a 100644 --- a/src/backend/replication/logical/launcher.c +++ b/src/backend/replication/logical/launcher.c @@ -748,10 +748,12 @@ ApplyLauncherShmemInit(void) * Wakeup the launcher on commit if requested. */ void -AtCommit_ApplyLauncher(void) +AtEOXact_ApplyLauncher(bool isCommit) { - if (on_commit_launcher_wakeup) + if (isCommit && on_commit_launcher_wakeup) ApplyLauncherWakeup(); + + on_commit_launcher_wakeup = false; } /* diff --git a/src/include/replication/logicallauncher.h b/src/include/replication/logicallauncher.h index 0c2bf03a5fe..fb3c2f53709 100644 --- a/src/include/replication/logicallauncher.h +++ b/src/include/replication/logicallauncher.h @@ -22,6 +22,6 @@ extern Size ApplyLauncherShmemSize(void); extern void ApplyLauncherShmemInit(void); extern void ApplyLauncherWakeupAtCommit(void); -extern void AtCommit_ApplyLauncher(void); +extern void AtEOXact_ApplyLauncher(bool isCommit); #endif /* LOGICALLAUNCHER_H */ [parent: e180c8aa8caf]