mirror of
https://github.com/postgres/postgres.git
synced 2026-06-21 14:39:15 -04:00
Fix excessive logging in idle slotsync worker.
The slotsync worker was incorrectly identifying no-op states as successful updates, triggering a busy loop to sync slots that logged messages every 200ms. This patch corrects the logic to properly classify these states, enabling the worker to respect normal sleep intervals when no work is performed. Reported-by: Fujii Masao <masao.fujii@gmail.com> Author: Zhijie Hou <houzj.fnst@fujitsu.com> Reviewed-by: Amit Kapila <amit.kapila16@gmail.com> Reviewed-by: shveta malik <shveta.malik@gmail.com> Backpatch-through: 17, where it was introduced Discussion: https://postgr.es/m/CAHGQGwF6zG9Z8ws1yb3hY1VqV-WT7hR0qyXCn2HdbjvZQKufDw@mail.gmail.com
This commit is contained in:
parent
49ce41810f
commit
85c17f612a
1 changed files with 14 additions and 2 deletions
|
|
@ -332,10 +332,15 @@ update_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid)
|
|||
slot->data.confirmed_flush = remote_slot->confirmed_lsn;
|
||||
slot->data.catalog_xmin = remote_slot->catalog_xmin;
|
||||
SpinLockRelease(&slot->mutex);
|
||||
|
||||
updated_xmin_or_lsn = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
bool found_consistent_snapshot;
|
||||
XLogRecPtr old_confirmed_lsn = slot->data.confirmed_flush;
|
||||
XLogRecPtr old_restart_lsn = slot->data.restart_lsn;
|
||||
XLogRecPtr old_catalog_xmin = slot->data.catalog_xmin;
|
||||
|
||||
LogicalSlotAdvanceAndCheckSnapState(remote_slot->confirmed_lsn,
|
||||
&found_consistent_snapshot);
|
||||
|
|
@ -365,9 +370,16 @@ update_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid)
|
|||
|
||||
skip_reason = SS_SKIP_NO_CONSISTENT_SNAPSHOT;
|
||||
}
|
||||
}
|
||||
|
||||
updated_xmin_or_lsn = true;
|
||||
/*
|
||||
* It is possible that the slot's xmin or LSNs are not updated,
|
||||
* when the synced slot has reached consistent snapshot state or
|
||||
* cannot build one at all.
|
||||
*/
|
||||
updated_xmin_or_lsn = (old_confirmed_lsn != slot->data.confirmed_flush ||
|
||||
old_restart_lsn != slot->data.restart_lsn ||
|
||||
old_catalog_xmin != slot->data.catalog_xmin);
|
||||
}
|
||||
}
|
||||
|
||||
/* Update slot sync skip stats */
|
||||
|
|
|
|||
Loading…
Reference in a new issue