Check my reasoning: In version 4 I added a remebering of tail of pending
list into blknoFinish variable. And when we read page which was a tail on
cleanup start then we sets cleanupFinish variable and after cleaning that
page we will stop further cleanup. Any insert caused during cleanup will be
placed after blknoFinish (corner case: in that page), so, vacuum should not
miss tuples marked as deleted.

Yes, I agree with the correctness of v4.  But I do wonder if we should
use that early stopping for vacuum and gin_clean_pending_list, rather
Interesting, I've missed this possible option

than just using it for user backends.  While I think correctness
allows it to stop early, since these routines are explicitly about
cleaning things up it seems like they should volunteer to clean the
whole thing.

I believe that autovacuum should not require guaranteed full clean up, only vacuum and gin_clean_pending_list() should do that. In all other cases it should stop early to prevent possible infinite cleanup. Patch attached.

Teodor Sigaev                                   E-mail:

Attachment: gin_alone_cleanup-5.patch
Description: binary/octet-stream

Sent via pgsql-hackers mailing list (
To make changes to your subscription:

Reply via email to