mirror of
https://github.com/postgres/postgres.git
synced 2025-11-03 09:13:20 +03:00
Resume conflict-relevant data retention automatically.
This commit resumes automatic retention of conflict-relevant data for a subscription. Previously, retention would stop if the apply process failed to advance its xmin (oldest_nonremovable_xid) within the configured max_retention_duration and user needs to manually re-enable retain_dead_tuples option. With this change, retention will resume automatically once the apply worker catches up and begins advancing its xmin (oldest_nonremovable_xid) within the configured threshold. Author: Zhijie Hou <houzj.fnst@fujitsu.com> Reviewed-by: shveta malik <shveta.malik@gmail.com> Reviewed-by: Amit Kapila <amit.kapila16@gmail.com> Reviewed-by: Dilip Kumar <dilipbalaut@gmail.com> Reviewed-by: Masahiko Sawada <sawada.mshk@gmail.com> Discussion: https://postgr.es/m/OS0PR01MB5716BE80DAEB0EE2A6A5D1F5949D2@OS0PR01MB5716.jpnprd01.prod.outlook.com
This commit is contained in:
@@ -1261,24 +1261,30 @@ ApplyLauncherMain(Datum main_arg)
|
||||
|
||||
LWLockAcquire(LogicalRepWorkerLock, LW_SHARED);
|
||||
w = logicalrep_worker_find(sub->oid, InvalidOid, false);
|
||||
LWLockRelease(LogicalRepWorkerLock);
|
||||
|
||||
if (w != NULL)
|
||||
{
|
||||
/*
|
||||
* Compute the minimum xmin required to protect dead tuples
|
||||
* required for conflict detection among all running apply
|
||||
* workers.
|
||||
* workers. This computation is performed while holding
|
||||
* LogicalRepWorkerLock to prevent accessing invalid worker
|
||||
* data, in scenarios where a worker might exit and reset its
|
||||
* state concurrently.
|
||||
*/
|
||||
if (sub->retaindeadtuples &&
|
||||
sub->retentionactive &&
|
||||
can_update_xmin)
|
||||
compute_min_nonremovable_xid(w, &xmin);
|
||||
|
||||
LWLockRelease(LogicalRepWorkerLock);
|
||||
|
||||
/* worker is running already */
|
||||
continue;
|
||||
}
|
||||
|
||||
LWLockRelease(LogicalRepWorkerLock);
|
||||
|
||||
/*
|
||||
* Can't advance xmin of the slot unless all the workers
|
||||
* corresponding to subscriptions actively retaining dead tuples
|
||||
|
||||
Reference in New Issue
Block a user