Re: [PATCH] BUG FIX: Core dump could happen when VACUUM FULL in standalone mode

From: Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com>
To: Yulin PEI <ypeiae(at)connect(dot)ust(dot)hk>
Cc: "pgsql-hackers(at)lists(dot)postgresql(dot)org" <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: [PATCH] BUG FIX: Core dump could happen when VACUUM FULL in standalone mode
Date: 2020-11-30 09:27:16
Message-ID: CAD21AoAbxZuz=-7Y697TxYq6CvNVNr7XZo_BTvUJ2KA7tpDZ1A@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Mon, Nov 30, 2020 at 5:45 PM Yulin PEI <ypeiae(at)connect(dot)ust(dot)hk> wrote:

> Hi hackers,
>
> I found that when running command vaccum full in stand-alone mode there
> will be a core dump.
> The core stack looks like this:
> ------------------------------------
> backend> vacuum full
> TRAP: FailedAssertion("IsUnderPostmaster", File: "dsm.c", Line: 439)
> ./postgres(ExceptionalCondition+0xac)[0x55c664c36913]
> ./postgres(dsm_create+0x3c)[0x55c664a79fee]
> ./postgres(GetSessionDsmHandle+0xdc)[0x55c6645f8296]
> ./postgres(InitializeParallelDSM+0xf9)[0x55c6646c59ca]
> ./postgres(+0x16bdef)[0x55c664692def]
> ./postgres(+0x16951e)[0x55c66469051e]
> ./postgres(btbuild+0xcc)[0x55c6646903ec]
> ./postgres(index_build+0x322)[0x55c664719749]
> ./postgres(reindex_index+0x2ee)[0x55c66471a765]
> ./postgres(reindex_relation+0x1e5)[0x55c66471acca]
> ./postgres(finish_heap_swap+0x118)[0x55c6647c8db1]
> ./postgres(+0x2a0848)[0x55c6647c7848]
> ./postgres(cluster_rel+0x34e)[0x55c6647c727f]
> ./postgres(+0x3414cf)[0x55c6648684cf]
> ./postgres(vacuum+0x4f3)[0x55c664866591]
> ./postgres(ExecVacuum+0x736)[0x55c66486609b]
> ./postgres(standard_ProcessUtility+0x840)[0x55c664ab74fc]
> ./postgres(ProcessUtility+0x131)[0x55c664ab6cb5]
> ./postgres(+0x58ea69)[0x55c664ab5a69]
> ./postgres(+0x58ec95)[0x55c664ab5c95]
> ./postgres(PortalRun+0x307)[0x55c664ab5184]
> ./postgres(+0x587ef6)[0x55c664aaeef6]
> ./postgres(PostgresMain+0x819)[0x55c664ab3271]
> ./postgres(main+0x2e1)[0x55c6648f9df5]
> /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf1)[0x7f65376192e1]
> ./postgres(_start+0x2a)[0x55c6645df86a]
> Aborted (core dumped)
> ------------------------------------
>
> I think that when there is a btree index in a table, vacuum full tries to
> rebuild the btree index in a parallel way.
>
> This will launch several workers and each of then will try to apply a
> dynamic shared memory segment, which is not allowed in stand-alone mode.
>
> I think it is better not to use btree index build in parallel in
> stand-alone mode. My patch is attached below.
>
>
>
Good catch. This is a bug in parallel index(btree) creation. I could
reproduce this assertion failure with HEAD even by using CREATE INDEX
command.

- indexRelation->rd_rel->relam == BTREE_AM_OID)
+ indexRelation->rd_rel->relam == BTREE_AM_OID && IsPostmasterEnvironment
&& !IsBackendStandAlone())

+#define IsBackendStandAlone() (!IsBootstrapProcessingMode() &&
!IsPostmasterEnvironment)
/*
* Auxiliary-process type identifiers. These used to be in bootstrap.h
* but it seems saner to have them here, with the ProcessingMode stuff.

I think we can use IsUnderPostmaster instead. If it's false we should not
enable parallel index creation.

Regards,

--
Masahiko Sawada
EnterpriseDB: https://www.enterprisedb.com/

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Hou, Zhijie 2020-11-30 09:30:43 support IncrementalSortPath type in outNode()
Previous Message tsunakawa.takay@fujitsu.com 2020-11-30 09:13:58 RE: POC: postgres_fdw insert batching