Re: Poorly thought out code in vacuum
От | Tom Lane |
---|---|
Тема | Re: Poorly thought out code in vacuum |
Дата | |
Msg-id | 17477.1325870695@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | Re: Poorly thought out code in vacuum (Robert Haas <robertmhaas@gmail.com>) |
Ответы |
Re: Poorly thought out code in vacuum
|
Список | pgsql-hackers |
I started to wonder how likely it would be that some other process would sit on a buffer pin for so long as to allow 134217727 iterations of ReadBufferExtended, even given the slowdowns associated with CLOBBER_CACHE_ALWAYS. This led to some fruitless searching for possible deadlock conditions, but eventually I realized that there's a much simpler explanation: if PrivateRefCount > 1 then ConditionalLockBufferForCleanup always fails. This means that once ConditionalLockBufferForCleanup has failed once, the currently committed code in lazy_vacuum_heap is guaranteed to loop until it gets a failure in enlarging the ResourceOwner buffer-reference array. Which in turn means that neither of you ever actually exercised the skip case, or you'd have noticed the problem. Nor are the current regression tests well designed to exercise the case. (There might well be failures of this type happening from time to time in autovacuum, but we'd not see any reported failure in the buildfarm, unless we went trawling in postmaster logs.) So at this point I've got serious doubts as to the quality of testing of that whole patch, not just this part. regards, tom lane
В списке pgsql-hackers по дате отправления: