Re: Parallel CREATE INDEX for GIN indexes

Tomas Vondra <tomas@vondra.me>

From: Tomas Vondra <tomas@vondra.me>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Matthias van de Meent <boekewurm+postgres@gmail.com>, Kirill Reshke <reshkekirill@gmail.com>, Michael Paquier <michael@paquier.xyz>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2025-03-09T22:17:29Z
Lists: pgsql-hackers

On 3/9/25 17:38, Tom Lane wrote:
> Tomas Vondra <tomas@vondra.me> writes:
>> I pushed the two smaller parts today.
> 
> Coverity is a little unhappy about this business in
> _gin_begin_parallel:
> 
> 	bool		leaderparticipates = true;
> 	...
> #ifdef DISABLE_LEADER_PARTICIPATION
> 	leaderparticipates = false;
> #endif
> 	...
> 	scantuplesortstates = leaderparticipates ? request + 1 : request;
> 
> It says
> 
>>>>     CID 1644203:  Possible Control flow issues  (DEADCODE)
>>>>     Execution cannot reach the expression "request" inside this statement: "scantuplesortstates = (lead...".
> 924     	scantuplesortstates = leaderparticipates ? request + 1 : request;
> 
> If this were just temporary code I'd let it pass, but I see nothing
> replacing this logic in the follow-up patches, so I think we ought
> to do something to shut it up.
> 
> It's not complaining about the later bits like
> 
> 	if (leaderparticipates)
> 		ginleader->nparticipanttuplesorts++;
> 
> (perhaps because there's no dead code there?)  So one idea is
> 
> 	scantuplesortstates = request;
> 	if (leaderparticipates)
> 	    scantuplesortstates++;
> 
> which would look more like the other code anyway.
> 

I don't mind doing it differently, but this code is just a copy from
_bt_begin_parallel. So how come coverity does not complain about that?
Or is that whitelisted?


thanks

-- 
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. Exercise parallel GIN builds in regression tests

  2. Lookup the correct ordering for parallel GIN builds

  3. Fix memory leak in _gin_parallel_merge

  4. Enforce memory limit during parallel GIN builds

  5. Compress TID lists when writing GIN tuples to disk

  6. Allow parallel CREATE INDEX for GIN indexes