Re: BUG #18855: Using BRIN index with int8_bloom_ops produces incorrect results

Tomas Vondra <tomas@vondra.me>

From: Tomas Vondra <tomas@vondra.me>
To: arseniy.mukhin.dev@gmail.com, pgsql-bugs@lists.postgresql.org, PG Bug reporting form <noreply@postgresql.org>
Date: 2025-03-19T19:53:50Z
Lists: pgsql-bugs
On 3/19/25 18:11, Tomas Vondra wrote:
> On 3/19/25 14:43, Tomas Vondra wrote:
>>
>> ...
>>
>> I'll get this fixed shortly. Unfortunately, this means the "bloom"
>> filters may be broken - not just those built in parallel, the union
>> method can be triggered due to concurrent activity too.
>>
> 
> Here's a more complete version of the fix, along with a proper commit
> message, etc.
> 
> While working on this, I realized there's a second (less severe issue,
> in that it fails to free the decompressed filters. I believe this would
> be mostly harmless before parallel builds, because we'd merge only one
> summary at a time, I think. With parallel builds it may be much worse,
> but I'm yet to try how bad.
> 
> FWIW I think the minmax-multi has a similar memory leak.
> 

After looking at this a bit closer, I realized the memory leak is much
less severe than I thought. The union_tuples() function does all the
work in a local memory context, so it's not the case we'd keep the
decompressed filters until the very end of the build.

I plan to simplify the fix a bit by not freeing filter_b.


regards

-- 
Tomas Vondra




Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Keep the decompressed filter in brin_bloom_union