[HACKERS] Shaky coding for vacuuming partitioned relations

Поиск
Список
Период
Сортировка
От Tom Lane
Тема [HACKERS] Shaky coding for vacuuming partitioned relations
Дата
Msg-id 25023.1506107590@sss.pgh.pa.us
обсуждение исходный текст
Ответы Re: [HACKERS] Shaky coding for vacuuming partitioned relations  (Michael Paquier <michael.paquier@gmail.com>)
Re: [HACKERS] Shaky coding for vacuuming partitioned relations  (Noah Misch <noah@leadboat.com>)
Список pgsql-hackers
Somebody inserted this into vacuum.c's get_rel_oids():
       tuple = SearchSysCache1(RELOID, ObjectIdGetDatum(relid));       if (!HeapTupleIsValid(tuple))
elog(ERROR,"cache lookup failed for relation %u", relid);
 

apparently without having read the very verbose comment two lines above,
which points out that we're not taking any lock on the target relation.
So, if that relation is concurrently being dropped, you're likely to
get "cache lookup failed for relation NNNN" rather than anything more
user-friendly.

A minimum-change fix would be to replace the elog() with an ereport
that produces the same "relation does not exist" error you'd have
gotten from RangeVarGetRelid, had the concurrent DROP TABLE committed
a few microseconds earlier.  But that feels like its's band-aiding
around the problem.

What I'm wondering about is changing the RangeVarGetRelid call to take
ShareUpdateExclusiveLock rather than no lock.  That would protect the
syscache lookup, and it would also make the find_all_inheritors call
a lot more meaningful.

If we're doing a VACUUM, the ShareUpdateExclusiveLock would be dropped
as soon as we close the caller's transaction, and then we'd acquire
the same or stronger lock inside vacuum_rel().  So that seems fine.
If we're doing an ANALYZE, then the lock would continue to be held
and analyze_rel would merely be acquiring it an extra time, so we'd
actually be removing a race-condition failure scenario for ANALYZE.
This would mean a few more cycles in lock management, but since this
only applies to a manual VACUUM or ANALYZE that specifies a table
name, I'm not too concerned about that.

Thoughts?
        regards, tom lane


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Peter Eisentraut
Дата:
Сообщение: Re: [HACKERS] Re: proposal - psql: possibility to specify sort fordescribe commands, when size is printed
Следующее
От: Pavel Stehule
Дата:
Сообщение: Re: [HACKERS] Re: proposal - psql: possibility to specify sort fordescribe commands, when size is printed