Re: GIN pending list clean up exposure to SQL

From: Julien Rouhaud <julien(dot)rouhaud(at)dalibo(dot)com>
To: Fujii Masao <masao(dot)fujii(at)gmail(dot)com>, Jeff Janes <jeff(dot)janes(at)gmail(dot)com>
Cc: Jaime Casanova <jaime(dot)casanova(at)2ndquadrant(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: GIN pending list clean up exposure to SQL
Date: 2016-01-27 20:54:58
Message-ID: 56A92EA2.9000906@dalibo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 27/01/2016 10:27, Fujii Masao wrote:
> On Mon, Jan 25, 2016 at 3:54 PM, Jeff Janes <jeff(dot)janes(at)gmail(dot)com>
> wrote:
>> On Wed, Jan 20, 2016 at 6:17 AM, Fujii Masao
>> <masao(dot)fujii(at)gmail(dot)com> wrote:
>>> On Sat, Jan 16, 2016 at 7:42 AM, Julien Rouhaud
>>> <julien(dot)rouhaud(at)dalibo(dot)com> wrote:
>>>> On 15/01/2016 22:59, Jeff Janes wrote:
>>>>> On Sun, Jan 10, 2016 at 4:24 AM, Julien Rouhaud
>>>>> <julien(dot)rouhaud(at)dalibo(dot)com> wrote:
>>>>
>>>> All looks fine to me, I flag it as ready for committer.
>>>
>>> When I compiled the PostgreSQL with the patch, I got the
>>> following error. ISTM that the inclusion of pg_am.h header file
>>> is missing in ginfast.c.
>>
>> Thanks. Fixed.
>>
>>> gin_clean_pending_list() must check whether the server is in
>>> recovery or not. If it's in recovery, the function must exit
>>> with an error. That is, IMO, something like the following check
>>> must be added.
>>>
>>> if (RecoveryInProgress()) ereport(ERROR,
>>>
>>> (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
>>> errmsg("recovery is in progress"), errhint("GIN pending list
>>> cannot be cleaned up during recovery.")));
>>>
>>> It's better to make gin_clean_pending_list() check whether the
>>> target index is temporary index of other sessions or not, like
>>> pgstatginindex() does.
>>
>> I've added both of these checks. Sorry I overlooked your early
>> email in this thread about those.
>>
>>>
>>> + Relation indexRel = index_open(indexoid,
>>> AccessShareLock);
>>>
>>> ISTM that AccessShareLock is not safe when updating the pending
>>> list and GIN index main structure. Probaby we should use
>>> RowExclusiveLock?
>>
>> Other callers of the ginInsertCleanup function also do so while
>> holding only the AccessShareLock on the index. It turns out
>> that there is a bug around this, as discussed in "Potential GIN
>> vacuum bug"
>> (http://www.postgresql.org/message-id/flat/CAMkU=1xALfLhUUohFP5v33RzedLVb5aknNUjcEuM9KNBKrB6-Q(at)mail(dot)gmail(dot)com)
>>
>>
>>
But, that bug has to be solved at a deeper level than this patch.
>>
>> I've also cleaned up some other conflicts, and chose a more
>> suitable OID for the new catalog function.
>>
>> The number of new header includes needed to implement this makes
>> me wonder if I put this code in the correct file, but I don't see
>> a better location for it.
>>
>> New version attached.
>
> Thanks for updating the patch! It looks good to me.
>
> Based on your patch, I just improved the doc. For example, I added
> the following note into the doc.
>
> + These functions cannot be executed during recovery. + Use
> of these functions is restricted to superusers and the owner +
> of the given index.
>
> If there is no problem, I'm thinking to commit this version.
>

Just a detail:

+ Note that the cleanup does not happen and the return value is 0
+ if the argument is the GIN index built with <literal>fastupdate</>
+ option disabled because it doesn't have a pending list.

It should be "if the argument is *a* GIN index"

I find this sentence a little confusing, maybe rephrase like this would
be better:

- Note that the cleanup does not happen and the return value is 0
- if the argument is the GIN index built with <literal>fastupdate</>
- option disabled because it doesn't have a pending list.
+ Note that if the argument is a GIN index built with
<literal>fastupdate</>
+ option disabled, the cleanup does not happen and the return value
is 0
+ because the index doesn't have a pending list.

Otherwise, I don't see any problem on this version.

Regards.

> Regards,
>
>
>
>

--
Julien Rouhaud
http://dalibo.com - http://dalibo.org

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Robert Haas 2016-01-27 20:57:46 Re: [PROPOSAL] VACUUM Progress Checker.
Previous Message Robert Haas 2016-01-27 20:42:16 Re: RFC: replace pg_stat_activity.waiting with something more descriptive