From fd7c081955929df343318d6c5d32ea24a574aacf Mon Sep 17 00:00:00 2001 From: Alexander Korotkov Date: Thu, 27 Dec 2018 04:10:51 +0300 Subject: Remove entry tree root conflict checking from GIN predicate locking According to README we acquire predicate locks on entry tree leafs and posting tree roots. However, when ginFindLeafPage() is going to lock leaf in exclusive mode, then it checks root for conflicts regardless whether it's a entry or posting tree. Assuming that we never place predicate lock on entry tree root (excluding corner case when root is leaf), this check is redundant. This commit removes this check. Now, root conflict checking is controlled by separate argument of ginFindLeafPage(). Discussion: https://postgr.es/m/CAPpHfdv7rrDyy%3DMgsaK-L9kk0AH7az0B-mdC3w3p0FSb9uoyEg%40mail.gmail.com Author: Alexander Korotkov Backpatch-through: 11 --- src/backend/access/gin/ginget.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/backend/access/gin/ginget.c') diff --git a/src/backend/access/gin/ginget.c b/src/backend/access/gin/ginget.c index 8466d947eab..6bfe18c359f 100644 --- a/src/backend/access/gin/ginget.c +++ b/src/backend/access/gin/ginget.c @@ -338,7 +338,7 @@ restartScanEntry: ginPrepareEntryScan(&btreeEntry, entry->attnum, entry->queryKey, entry->queryCategory, ginstate); - stackEntry = ginFindLeafPage(&btreeEntry, true, snapshot); + stackEntry = ginFindLeafPage(&btreeEntry, true, false, snapshot); page = BufferGetPage(stackEntry->buffer); /* ginFindLeafPage() will have already checked snapshot age. */ @@ -679,7 +679,7 @@ entryLoadMoreItems(GinState *ginstate, GinScanEntry entry, OffsetNumberNext(GinItemPointerGetOffsetNumber(&advancePast))); } entry->btree.fullScan = false; - stack = ginFindLeafPage(&entry->btree, true, snapshot); + stack = ginFindLeafPage(&entry->btree, true, false, snapshot); /* we don't need the stack, just the buffer. */ entry->buffer = stack->buffer; -- cgit v1.2.3