Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lOvfa-0001KG-Pf for pgsql-hackers@arkaria.postgresql.org; Wed, 24 Mar 2021 05:03:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lOvfZ-0007f3-OL for pgsql-hackers@arkaria.postgresql.org; Wed, 24 Mar 2021 05:03:01 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lOvfZ-0007ew-Cl for pgsql-hackers@lists.postgresql.org; Wed, 24 Mar 2021 05:03:01 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lOvfU-0001pM-Pg for pgsql-hackers@postgresql.org; Wed, 24 Mar 2021 05:03:00 +0000 Received: from mail.postgrespro.ru (cyclops.postgrespro.ru [93.174.131.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id B642621C1F59; Wed, 24 Mar 2021 08:02:53 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1616562173; bh=81xyVqCExba0uSO8Ow3VEpYE/ZkwgdORCuObwi4ClFQ=; h=Date:From:To:Subject:In-Reply-To:References; b=lexGhdHYSZ9IvgvIX+WAFBUunQHURHM3jqH9UbhLsAX2bDS+e/BWePMlYxCgpLxX2 uORbWNrMI1LHxnOor0c/v5X5f2xnE0rH/xTg4Kcku2k7fYRl4FCpoYrHVoMXdQNzpa 9fVfZ7T3oMAdebUg+Ipenx2ekNQmX/t5qyTA9ew0= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Date: Wed, 24 Mar 2021 08:02:53 +0300 From: Maxim Orlov To: Fujii Masao , Pgsql Hackers Subject: Re: Failed assertion on standby while shutdown In-Reply-To: <9c7b69c2-fb17-1780-e475-7dd2c6bbe18b@oss.nttdata.com> References: <9c7b69c2-fb17-1780-e475-7dd2c6bbe18b@oss.nttdata.com> User-Agent: Roundcube Webmail/1.4.0 Message-ID: <14d8bf0615489b5c92818974f56c373e@postgrespro.ru> X-Sender: m.orlov@postgrespro.ru List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On 2021-03-22 16:40, Fujii Masao wrote: > On 2021/03/20 2:25, Maxim Orlov wrote: >> Hi, haсkers! >> >> Recently, I was doing some experiments with primary/standby instances >> interaction. In certain conditions I’ve got and was able to reproduce >> crash on failed assertion. >> >> The scenario is the following: >> 1. start primary server >> 2. start standby server by pg_basebackup -P -R -X stream -c fast >> -p5432 -D data >> 3. apply some load to the primary server by pgbench -p5432 -i -s 150 >> postgres >> 4. kill primary server (with kill -9) and keep it down >> 5. stop standby server by pg_ctl >> 6. run standby server >> >> Then any standby server termination will result in a failed assertion. >> >> The log with a backtrace is following: >> >> 2021-03-19 18:54:25.352 MSK [3508443] LOG:  received fast shutdown >> request >> 2021-03-19 18:54:25.379 MSK [3508443] LOG:  aborting any active >> transactions >> TRAP: FailedAssertion("SHMQueueEmpty(&(MyProc->myProcLocks[i]))", >> File: >> "/home/ziva/projects/pgpro/build-secondary/../postgrespro/src/backend/storage/lmgr/proc.c", >> Line: 592, PID: 3508452) >> postgres: walreceiver (ExceptionalCondition+0xd0)[0x555555d0526f] >> postgres: walreceiver (InitAuxiliaryProcess+0x31c)[0x555555b43e31] >> postgres: walreceiver (AuxiliaryProcessMain+0x54f)[0x55555574ae32] >> postgres: walreceiver (+0x530bff)[0x555555a84bff] >> postgres: walreceiver (+0x531044)[0x555555a85044] >> postgres: walreceiver (+0x530959)[0x555555a84959] >> /lib/x86_64-linux-gnu/libpthread.so.0(+0x153c0)[0x7ffff7a303c0] >> /lib/x86_64-linux-gnu/libc.so.6(__select+0x1a)[0x7ffff72a40da] >> postgres: walreceiver (+0x52bea4)[0x555555a7fea4] >> postgres: walreceiver (PostmasterMain+0x129f)[0x555555a7f7c1] >> postgres: walreceiver (+0x41ff1f)[0x555555973f1f] >> /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0x7ffff71b30b3] >> postgres: walreceiver (_start+0x2e)[0x55555561abfe] >> >> After a brief investigation I found out that I can get this assert >> with 100% probability if I insert a sleep for about 5 sec into >> InitAuxiliaryProcess(void) in src/backend/storage/lmgr/proc.c: >> >> diff --git a/src/backend/storage/lmgr/proc.c >> b/src/backend/storage/lmgr/proc.c >> index 897045ee272..b5f365f426d 100644 >> --- a/src/backend/storage/lmgr/proc.c >> +++ b/src/backend/storage/lmgr/proc.c >> @@ -525,7 +525,7 @@ InitAuxiliaryProcess(void) >> >>         if (MyProc != NULL) >>                 elog(ERROR, "you already exist"); >> - >> +       pg_usleep(5000000L); >>         /* >>          * We use the ProcStructLock to protect assignment and >> releasing of >>          * AuxiliaryProcs entries. > > Thanks for the report! I could reproduce this issue by adding that > sleep > into InitAuxiliaryProcess(). > >> Maybe, this kinda behaviour would appear if a computer hosting >> instances is under significant side load, which cause delay to start >> db-instances under a heavy load. >> >> Configuration for a primary server is default with "wal_level = >> logical" >> >> Configuration for a standby server is default with "wal_level = >> logical" and "primary_conninfo = 'port=5432'" >> >> I'm puzzled with this behavor. I'm pretty sure it is not what should >> be. Any ideas how this can be fixed? > > ISTM that the cause of this issue is that the startup process exits > without releasing the locks that it was holding when shutdown is > requested. To address this issue, IMO the startup process should > call ShutdownRecoveryTransactionEnvironment() at its exit. > Attached is the POC patch that changes the startup process that way. > > I've not tested the patch enough yet.. > > Regards, Thank you for reply! As far as I understand, this is really the case. I've test your patch a bit. This annoying failed assertion is gone now. I think I should test more and report later about results. Should we put this patch to CF? --- Best regards, Maxim Orlov.