Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1s4paM-001J7N-G5 for pgsql-hackers@arkaria.postgresql.org; Wed, 08 May 2024 22:16:26 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1s4paJ-0038Z4-Tb for pgsql-hackers@arkaria.postgresql.org; Wed, 08 May 2024 22:16:24 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1s4paJ-0038Yw-Jl for pgsql-hackers@lists.postgresql.org; Wed, 08 May 2024 22:16:23 +0000 Received: from sss.pgh.pa.us ([68.162.161.243]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1s4paH-0004ya-IS for pgsql-hackers@lists.postgresql.org; Wed, 08 May 2024 22:16:22 +0000 Received: from sss1.sss.pgh.pa.us (localhost [127.0.0.1]) by sss.pgh.pa.us (8.15.2/8.15.2) with ESMTP id 448MGJt1933607; Wed, 8 May 2024 18:16:19 -0400 From: Tom Lane To: David Rowley cc: Andrew Dunstan , Richard Guo , jian he , PostgreSQL Hackers Subject: Re: Revert: Remove useless self-joins *and* -DREALLOCATE_BITMAPSETS make server crash, regress test fail. In-reply-to: References: <1e6ca7b3-98e6-46b2-9982-97f92c7523d8@dunslane.net> <76910.1715106055@sss.pgh.pa.us> <276516.1715121616@sss.pgh.pa.us> <279607.1715122556@sss.pgh.pa.us> <282081.1715123889@sss.pgh.pa.us> <815049.1715192644@sss.pgh.pa.us> <818432.1715194157@sss.pgh.pa.us> Comments: In-reply-to David Rowley message dated "Thu, 09 May 2024 10:02:06 +1200" MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <933605.1715206579.1@sss.pgh.pa.us> Date: Wed, 08 May 2024 18:16:19 -0400 Message-ID: <933606.1715206579@sss.pgh.pa.us> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk David Rowley writes: > On Thu, 9 May 2024 at 06:49, Tom Lane wrote: >> BTW, now that I've wrapped my head around what's happening here, >> I believe that -DREALLOCATE_BITMAPSETS is introducing a bug where >> there was none before. The changes that left-join removal makes >> won't cause any of these sets to go to empty, so the bms_del_member >> calls won't free the sets but just modify them in-place. And the >> same change will/should be made in every relevant relid set, so >> the fact that the sets may be shared isn't hurting anything. > FWIW, it just feels like we're willing to accept that the > bms_del_member() is not updating all copies of the set in this case as > that particular behaviour is ok for this particular case. I know > you're not proposing this, No, I'm not. I was just trying to explain how come there's not a visible bug. I quite agree that this is too fragile to leave as-is going forward. (One thing I'm wondering about is whether we should back-patch despite the lack of visible bug, just in case some future back-patch relies on the safer behavior.) >> This conclusion also reinforces my previously-vague feeling that >> we should not consider making -DREALLOCATE_BITMAPSETS the default in >> debug builds, as was proposed upthread. > My primary interest in this feature is using it to catch bugs that > we're unlikely to ever hit in the regression tests. For example, the > planner works when there are <= 63 RTEs but falls over when there are > 64 because some bms_add_member() must reallocate more memory to store > the 64th RTI in a Bitmapset. I'd like to have something to make it > more likely we'll find bugs like this before the release instead of > someone having a crash when they run some obscure query shape > containing > 63 RTEs 2 or 4 years after the release. Again, I think -DREALLOCATE_BITMAPSETS adds a valuable testing weapon. But if we make that the default in debug builds, then we'll get next door to zero testing of the behavior without it, and that seems like a really bad idea given how different the behavior is. (Speaking of which, I wonder how many buildfarm members build without --enable-cassert. The answer could well be "zero", and that's likely not good.) > I'm happy Andrew added this to prion. Thanks for doing that. +1 regards, tom lane