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. Fix background worker not restarting after crash-and-restart cycle.

  1. Fix background workers not restarting with restart_after_crash = on

    Andrey Rudometov <unlimitedhikari@gmail.com> — 2025-06-11T08:26:01Z

    Good day, hackers.
    
    Reading through changes committed in master, I noticed that after
    CleanupBackend/CleanupBackroundworker refactor background workers will fail
    to
    start again after postgres' restart with restart_after_crash = on.
    
    The reason is CleanupBackend and HandleChildCrash not setting background
    worker's
    rw_pid to zero anymore, if backend, well, crashed and failed to call
    shmem_exit
    and mark PMChild slot as inactive via MarkPostmasterChildInactive.
    
    Suggested solution is to finish CleanupBackend's background worker related
    logic
    even after treating the child process as crashed. In earlier versions
    zeroing of
    pids happen in HandleChildCrash anyway, so there should be no harm in doing
    the same actions here.
    
    For fast reproduction I used pg_prewarm extension, as it creates observable
    bgworker
    and is present in postgres tree, so tap test is easy to run.
    -- 
    best regards,
    Andrey Rudometov
    
  2. Re: Fix background workers not restarting with restart_after_crash = on

    Fujii Masao <masao.fujii@gmail.com> — 2025-07-24T09:23:16Z

    On Wed, Jun 11, 2025 at 5:26 PM Andrey Rudometov
    <unlimitedhikari@gmail.com> wrote:
    >
    > Good day, hackers.
    >
    > Reading through changes committed in master, I noticed that after
    > CleanupBackend/CleanupBackroundworker refactor background workers will fail to
    > start again after postgres' restart with restart_after_crash = on.
    >
    > The reason is CleanupBackend and HandleChildCrash not setting background worker's
    > rw_pid to zero anymore, if backend, well, crashed and failed to call shmem_exit
    > and mark PMChild slot as inactive via MarkPostmasterChildInactive.
    >
    > Suggested solution is to finish CleanupBackend's background worker related logic
    > even after treating the child process as crashed. In earlier versions zeroing of
    > pids happen in HandleChildCrash anyway, so there should be no harm in doing
    > the same actions here.
    >
    > For fast reproduction I used pg_prewarm extension, as it creates observable bgworker
    > and is present in postgres tree, so tap test is easy to run.
    
    Thanks for the report and patch! This same issue was also reported in
    thread [1], where there's ongoing discussion about how to address it.
    
    Regards,
    
    [1] https://postgr.es/m/tencent_E00A056B3953EE6440F0F40F80EC30427D09@qq.com
    
    -- 
    Fujii Masao