Thread

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Avoid leaking system path from pg_available_extensions

  1. Re: [PATCH] Prevent repeated deadlock-check signals in standby buffer pin waits

    Álvaro Herrera <alvherre@kurilemu.de> — 2026-05-18T20:32:45Z

    Hello,
    
    On 2026-Apr-21, Michael Paquier wrote:
    
    > On Tue, Apr 21, 2026 at 02:42:38PM +0900, Fujii Masao wrote:
    > > Since this change improves recovery-conflict behavior rather than fixing a bug,
    > > it doesn't seem to need backpatching and we may need to wait until v20
    > > development opens (probably July) before committing it.
    > 
    > Yeah, this one is an improvement, not an actual bug, so let's wait for
    > v20 if worth doing (I did not check it). 
    
    Hmm, is this related to 
    https://postgr.es/m/44c24dcf-5710-410f-b1b6-d10b315f3d51@postgrespro.ru ?
    In there, Vitaly claims to be reporting a bug that goes back to pg15,
    which contradicts this assessment.
    
    Regards,
    
    -- 
    Álvaro Herrera        Breisgau, Deutschland  —  https://www.EnterpriseDB.com/
    "¿Qué importan los años?  Lo que realmente importa es comprobar que
    a fin de cuentas la mejor edad de la vida es estar vivo"  (Mafalda)
    
    
    
    
  2. Re: [PATCH] Prevent repeated deadlock-check signals in standby buffer pin waits

    JoongHyuk Shin <sjh910805@gmail.com> — 2026-05-22T08:41:03Z

    Hello.
    
    Same function, different races, I think.
    Vitaly reports a missed wake-up where deadlock_timeout never fires
    (spurious SIGALRM from log_startup_progress_interval plus the lazy
    setitimer in 09cf1d52).
    This patch addresses the opposite,
    deadlock_timeout does fire, but LockBufferForCleanup loops back and re-arms
    it,
    so the signal repeats once per second.
    
    The two fixes do not overlap
    (the added ProcWaitForSignal sits inside the deadlock branch that Vitaly's
    scenario never reaches).
    
    -- 
    JH Shin
    
    On Wed, May 20, 2026 at 7:15 AM Álvaro Herrera <alvherre@kurilemu.de> wrote:
    
    > Hello,
    >
    > On 2026-Apr-21, Michael Paquier wrote:
    >
    > > On Tue, Apr 21, 2026 at 02:42:38PM +0900, Fujii Masao wrote:
    > > > Since this change improves recovery-conflict behavior rather than
    > fixing a bug,
    > > > it doesn't seem to need backpatching and we may need to wait until v20
    > > > development opens (probably July) before committing it.
    > >
    > > Yeah, this one is an improvement, not an actual bug, so let's wait for
    > > v20 if worth doing (I did not check it).
    >
    > Hmm, is this related to
    > https://postgr.es/m/44c24dcf-5710-410f-b1b6-d10b315f3d51@postgrespro.ru ?
    > In there, Vitaly claims to be reporting a bug that goes back to pg15,
    > which contradicts this assessment.
    >
    > Regards,
    >
    > --
    > Álvaro Herrera        Breisgau, Deutschland  —
    > https://www.EnterpriseDB.com/
    > "¿Qué importan los años?  Lo que realmente importa es comprobar que
    > a fin de cuentas la mejor edad de la vida es estar vivo"  (Mafalda)
    >
    
  3. Re: [PATCH] Prevent repeated deadlock-check signals in standby buffer pin waits

    Michael Paquier <michael@paquier.xyz> — 2026-05-29T06:30:57Z

    On Fri, May 22, 2026 at 05:41:03PM +0900, JoongHyuk Shin wrote:
    > This patch addresses the opposite,
    > deadlock_timeout does fire, but LockBufferForCleanup loops back and re-arms
    > it, so the signal repeats once per second.
    
    Right.  I don't really see why this should be backpatched.  One
    argument would be more consistency of this area of the code across all
    the stable branches, but the argument is kind of moot as this does not
    fix a problem, just improves a bit what we have.
    --
    Michael
    
  4. Re: [PATCH] Prevent repeated deadlock-check signals in standby buffer pin waits

    Zsolt Parragi <zsolt.parragi@percona.com> — 2026-05-29T21:08:42Z

    Hello!
    
    Shouldn't this need a condition similar to
    ResolveRecoveryConflictWithLock (if (logging_conflict) ...)?
    
    Otherwise this can result in a long wait time, with:
    
    log_recovery_conflict_waits = on
    deadlock_timeout = 100ms
    max_standby_streaming_delay = 5s
    
    It can wait for 5 seconds instead of the current 0.1 seconds without the change.
    
    
    
    
  5. Re: [PATCH] Prevent repeated deadlock-check signals in standby buffer pin waits

    Ilmar Y <tanswis42@gmail.com> — 2026-05-30T11:51:30Z

    The following review has been posted through the commitfest application:
    make installcheck-world:  not tested
    Implements feature:       tested, failed
    Spec compliant:           not tested
    Documentation:            not tested
    
    Hi,
    
    I looked at v2, focusing on the latest question about
    log_recovery_conflict_waits behavior.
    
    The patch applies cleanly on current master at
    db5ed03217b9c238703df8b4b286115d6e940488.  git diff --check reports no
    issues.  I built both master and v2 locally with:
    
    ./configure --prefix="$PWD/pg-install" --without-readline --without-zlib --without-icu
    make -s -j8
    make -s install
    
    Both builds passed.
    
    I tried to check the case Zsolt described.  In my local repro, the final
    cancellation still happens at about max_standby_streaming_delay in both
    master and v2.  The visible difference is that v2 delays the first
    log_recovery_conflict_waits "recovery still waiting" message.
    
    I used a small primary/standby setup based on the buffer-pin conflict pattern
    from src/test/recovery/t/031_recovery_conflict.pl:
    
    log_recovery_conflict_waits = on
    deadlock_timeout = 100ms
    max_standby_streaming_delay = 5s
    
    The scenario is:
    
    1. Create a small table.
    2. Generate an aborted tuple on the primary and replay it on the standby.
    3. Open a cursor on the standby and fetch one row, leaving the transaction
       idle with the cursor open.
    4. Run VACUUM FREEZE on the primary.
    
    On current master, the standby log shows:
    
    recovery still waiting after 101.060 ms: recovery conflict on buffer pin
    terminating connection due to conflict with recovery
    recovery finished waiting after 5001.324 ms: recovery conflict on buffer pin
    
    With v2, the standby log shows:
    
    recovery still waiting after 5001.064 ms: recovery conflict on buffer pin
    terminating connection due to conflict with recovery
    recovery finished waiting after 5001.535 ms: recovery conflict on buffer pin
    
    So in this repro the early "still waiting" log at deadlock_timeout is lost,
    and the first waiting log is emitted only when the wait is already being
    resolved at about max_standby_streaming_delay.
    
    This seems to come from the new second ProcWaitForSignal() inside
    ResolveRecoveryConflictWithBufferPin().  After the deadlock timeout fires, v2
    sends RECOVERY_CONFLICT_BUFFERPIN_DEADLOCK and waits again internally.  For a
    non-deadlock buffer pin holder, LockBufferForCleanup() does not get control
    back after deadlock_timeout, so it cannot emit the early recovery conflict
    log message.
    
    This looks similar to the reason ResolveRecoveryConflictWithLock() has the
    logging_conflict argument: if the conflict still needs to be logged, it returns
    after sending the deadlock-check signal, and only avoids the repeated wait on
    the later call after the conflict has been logged.
    
    Should ResolveRecoveryConflictWithBufferPin() preserve the same behavior, for
    example by skipping the new second wait until LockBufferForCleanup() has had a
    chance to emit the first log_recovery_conflict_waits message?
    
    I have not checked the repeated SIGUSR1 count with strace in my local macOS
    environment, and I have not reviewed the backpatching question.
    
    Regards,
    Ilmar Yunusov
    
    The new status of this patch is: Waiting on Author