mirror of
https://github.com/postgres/postgres.git
synced 2025-06-29 10:41:53 +03:00
Fix commit_ts for standby
Module initialization was still not completely correct after commit
6b61955135
, 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.
This commit is contained in:
@ -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);
|
||||
|
Reference in New Issue
Block a user