0001-Recheck-the-tuple-visibility.patch
application/octet-stream
Filename: 0001-Recheck-the-tuple-visibility.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch 0001
Subject: Recheck the tuple visibility
| File | + | − |
|---|---|---|
| src/backend/access/heap/heapam_visibility.c | 2 | 0 |
| src/backend/utils/cache/catcache.c | 3 | 2 |
From 55843061ec10c4914618c3c5c4b3372142c6a19d Mon Sep 17 00:00:00 2001
From: Xiaoran Wang <wxiaoran@vmware.com>
Date: Fri, 12 Jan 2024 01:49:52 +0800
Subject: [PATCH] Recheck the tuple visibility
---
src/backend/access/heap/heapam_visibility.c | 2 ++
src/backend/utils/cache/catcache.c | 5 +++--
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/src/backend/access/heap/heapam_visibility.c b/src/backend/access/heap/heapam_visibility.c
index a716001341..251792fcc7 100644
--- a/src/backend/access/heap/heapam_visibility.c
+++ b/src/backend/access/heap/heapam_visibility.c
@@ -116,6 +116,8 @@ static inline void
SetHintBits(HeapTupleHeader tuple, Buffer buffer,
uint16 infomask, TransactionId xid)
{
+ if (buffer == InvalidBuffer)
+ return;
if (TransactionIdIsValid(xid))
{
/* NB: xid must be known committed here! */
diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c
index 2d72e8106c..1d11d7a7fb 100644
--- a/src/backend/utils/cache/catcache.c
+++ b/src/backend/utils/cache/catcache.c
@@ -15,6 +15,7 @@
#include "postgres.h"
#include "access/genam.h"
+#include "access/heapam.h"
#include "access/heaptoast.h"
#include "access/relscan.h"
#include "access/sysattr.h"
@@ -38,6 +39,7 @@
#include "utils/memutils.h"
#include "utils/rel.h"
#include "utils/resowner.h"
+#include "utils/snapmgr.h"
#include "utils/syscache.h"
@@ -1954,10 +1956,9 @@ CatalogCacheCreateEntry(CatCache *cache, HeapTuple ntp, Datum *arguments,
*/
if (HeapTupleHasExternal(ntp))
{
- uint64 inval_count = SharedInvalidMessageCounter;
dtp = toast_flatten_tuple(ntp, cache->cc_tupdesc);
- if (inval_count != SharedInvalidMessageCounter)
+ if (!HeapTupleSatisfiesVisibility(ntp, GetNonHistoricCatalogSnapshot(cache->cc_reloid), InvalidBuffer))
{
heap_freetuple(dtp);
return NULL;
--
2.39.2 (Apple Git-143)