Re: [HACKERS] walsender & parallelism

Поиск
Список
Период
Сортировка
От Andres Freund
Тема Re: [HACKERS] walsender & parallelism
Дата
Msg-id 20170424000452.3iab4qpc3mtb2v6v@alap3.anarazel.de
обсуждение исходный текст
Ответ на Re: [HACKERS] walsender & parallelism  (Andres Freund <andres@anarazel.de>)
Ответы Re: [HACKERS] walsender & parallelism  (Petr Jelinek <petr.jelinek@2ndquadrant.com>)
Список pgsql-hackers
Hi,

On 2017-04-23 16:59:41 -0700, Andres Freund wrote:
> Hi,
> 
> On 2017-04-22 17:53:19 +0200, Petr Jelinek wrote:
> > Here is patch. I changed both SIGINT and SIGUSR1 handlers, afaics it
> > does not break anything for existing walsender usage.
> 
> > diff --git a/src/backend/replication/logical/launcher.c b/src/backend/replication/logical/launcher.c
> > index 761fbfa..e9dd886 100644
> > --- a/src/backend/replication/logical/launcher.c
> > +++ b/src/backend/replication/logical/launcher.c
> > @@ -254,7 +254,7 @@ logicalrep_worker_launch(Oid dbid, Oid subid, const char *subname, Oid userid,
> >      BackgroundWorker    bgw;
> >      BackgroundWorkerHandle *bgw_handle;
> >      int                    i;
> > -    int                    slot;
> > +    int                    slot = 0;
> >      LogicalRepWorker   *worker = NULL;
> >      int                    nsyncworkers = 0;
> >      TimestampTz            now = GetCurrentTimestamp();
> 
> That seems independent and unnecessary?
> 
> 
> > -/* SIGUSR1: set flag to send WAL records */
> > -static void
> > -WalSndXLogSendHandler(SIGNAL_ARGS)
> > -{
> > -    int            save_errno = errno;
> > -
> > -    latch_sigusr1_handler();
> > -
> > -    errno = save_errno;
> > -}
> 
> >      pqsignal(SIGPIPE, SIG_IGN);
> > -    pqsignal(SIGUSR1, WalSndXLogSendHandler);    /* request WAL sending */
> > +    pqsignal(SIGUSR1, procsignal_sigusr1_handler);
> 
> Those aren't actually entirely equivalent. I'm not sure it matters much,
> but WalSndXLogSendHandler didn't include a SetLatch(), but
> procsignal_sigusr1_handler() does.  Normally redundant SetLatch() calls
> will just be elided, but what if walsender already woke up and did it's
> work?
> 
> I think it'd be better to have PostgresMain() set up signals by default,
> and then have WalSndSignals() overwrites the ones it needs separate.
> WalSndLastCycleHandler is genuinely different. WalSndSigHupHandler
> currently sets a different variable from postgres.c, but that seems like
> a bad idea, because afaics we'll plainly ignore SIGHUPS unless in
> WalSndLoop, WalSndWriteData,WalSndWaitForWal.  That actually seems like
> an active bug to me?

Oh, and one more point: There desperately need to be tests exercising
"SQL via walsender". Including the issue of parallelism here, the missed
cancel handler, timeouts, and such.  One way to do so is to use
pg_regress with an adjusted connection string (specifying
replication=database), doing the same for isolationtester, or using
dblink.

- Andres



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Andres Freund
Дата:
Сообщение: Re: [HACKERS] A note about debugging TAP failures
Следующее
От: Michael Paquier
Дата:
Сообщение: Re: [HACKERS] TAP tests - installcheck vs check