From f12e814b88d8082804bbc8b827469d8068e7252c Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Thu, 1 Oct 2015 15:06:55 -0300 Subject: Fix commit_ts for standby MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Module initialization was still not completely correct after commit 6b61955135e9, per crash report from Takashi Ohnishi. To fix, instead of trying to monkey around with the value of the GUC setting directly, add a separate boolean flag that enables the feature on a standby, but only for the startup (recovery) process, when it sees that its master server has the feature enabled. Discussion: http://www.postgresql.org/message-id/ca44c6c7f9314868bdc521aea4f77cbf@MP-MSGSS-MBX004.msg.nttdata.co.jp Also change the deactivation routine to delete all segment files rather than leaving the last one around. (This doesn't need separate WAL-logging, because on recovery we execute the same deactivation routine anyway.) In passing, clean up the code structure somewhat, particularly so that xlog.c doesn't know so much about when to activate/deactivate the feature. Thanks to Fujii Masao for testing and Petr JelĂ­nek for off-list discussion. Back-patch to 9.5, where commit_ts was introduced. --- src/include/access/commit_ts.h | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'src/include/access/commit_ts.h') diff --git a/src/include/access/commit_ts.h b/src/include/access/commit_ts.h index dc865d1bc3d..1b95b5837ea 100644 --- a/src/include/access/commit_ts.h +++ b/src/include/access/commit_ts.h @@ -24,8 +24,7 @@ extern bool check_track_commit_timestamp(bool *newval, void **extra, extern void TransactionTreeSetCommitTsData(TransactionId xid, int nsubxids, TransactionId *subxids, TimestampTz timestamp, - RepOriginId nodeid, - bool replaying_xlog, bool write_xlog); + RepOriginId nodeid, bool write_xlog); extern bool TransactionIdGetCommitTsData(TransactionId xid, TimestampTz *ts, RepOriginId *nodeid); extern TransactionId GetLatestCommitTsData(TimestampTz *ts, @@ -35,9 +34,8 @@ extern Size CommitTsShmemBuffers(void); extern Size CommitTsShmemSize(void); extern void CommitTsShmemInit(void); extern void BootStrapCommitTs(void); -extern void StartupCommitTs(void); -extern void ActivateCommitTs(void); -extern void DeactivateCommitTs(bool do_wal); +extern void StartupCommitTs(bool force_enable); +extern void CommitTsParameterChange(bool xlrecvalue, bool pgcontrolvalue); extern void CompleteCommitTsInitialization(void); extern void ShutdownCommitTs(void); extern void CheckPointCommitTs(void); -- cgit v1.2.3