Re: Parallel worker hangs while handling errors.
От | Bharath Rupireddy |
---|---|
Тема | Re: Parallel worker hangs while handling errors. |
Дата | |
Msg-id | CALj2ACX9eUkKy3UrAv+bDx3QYdS8RLBp8Rfq8FSQHOmrXtGe1Q@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Parallel worker hangs while handling errors. (vignesh C <vignesh21@gmail.com>) |
Ответы |
Re: Parallel worker hangs while handling errors.
|
Список | pgsql-hackers |
On Sat, Jul 25, 2020 at 7:02 AM vignesh C <vignesh21@gmail.com> wrote: > > I have made slight changes on top of the patch to remove duplicate > code, attached v3 patch for the same. > The parallel worker hang issue gets resolved, make check & make > check-world passes. > Having a function to unblock selective signals for a bg worker looks good to me. Few comments: 1. Do we need "worker" as a function argument in update_parallel_worker_sigmask(BackgroundWorker *worker,.... ? Since MyBgworkerEntry is a global variable, can't we have a local variable instead? 2. Instead of update_parallel_worker_sigmask() serving only for parallel workers, can we make it generic, so that for any bgworker, given a signal it unblocks it, although there's no current use case for a bg worker unblocking a single signal other than a parallel worker doing it for SIGUSR1 for this hang issue. Please note that we have BackgroundWorkerBlockSignals() and BackgroundWorkerUnblockSignals(). I slightly modified your function, something like below? void BackgroundWorkerUpdateSignalMask(int signum, bool toblock) { if (toblock) sigaddset(&BlockSig, signum); else sigdelset(&BlockSig, signum); PG_SETMASK(&BlockSig); } /*to unblock SIGUSR1*/ if ((worker->bgw_flags & BGWORKER_CLASS_PARALLEL) != 0) BackgroundWorkerUpdateSignalMask(SIGUSR1, false); /*to block SIGUSR1*/ if ((worker->bgw_flags & BGWORKER_CLASS_PARALLEL) != 0) BackgroundWorkerUpdateSignalMask(SIGUSR1, true); If okay, with the BackgroundWorkerUpdateSignalMask() function, please note that we might have to add it in bgworker.sgml as well. With Regards, Bharath Rupireddy. EnterpriseDB: http://www.enterprisedb.com
В списке pgsql-hackers по дате отправления: