From c06b45eb5e7b9bf8d15b427a9295118af6720f91 Mon Sep 17 00:00:00 2001 From: Li Bingchen Date: Fri, 18 Jun 2021 15:38:53 +0800 Subject: [PATCH 1/2] session --- .../backend/utils/cache/relfilenodemap.cpp | 29 +++++++++---------- src/include/knl/knl_session.h | 1 + 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/common/backend/utils/cache/relfilenodemap.cpp b/src/common/backend/utils/cache/relfilenodemap.cpp index 968df53d..fa112bd1 100644 --- a/src/common/backend/utils/cache/relfilenodemap.cpp +++ b/src/common/backend/utils/cache/relfilenodemap.cpp @@ -34,9 +34,6 @@ #include "utils/relmapper.h" #include "utils/snapmgr.h" -/* built first time through in InitializeRelfilenodeMap */ -ScanKeyData relfilenode_skey[2]; - typedef struct { Oid reltablespace; Oid relfilenode; @@ -79,26 +76,27 @@ static void RelfilenodeMapInvalidateCallback(Datum arg, Oid relid) * RelfilenodeMapInvalidateCallback * Initialize cache, either on first use or after a reset. */ -static void InitializeRelfilenodeMap(void) +static void InitializeRelfilenodeMap() { - HASHCTL ctl; int i; /* build skey */ - errno_t ret = memset_s(&relfilenode_skey, sizeof(relfilenode_skey), 0, sizeof(relfilenode_skey)); + errno_t ret = memset_s(&u_sess->relmap_cxt.relfilenodeSkey, sizeof(u_sess->relmap_cxt.relfilenodeSkey), 0, + sizeof(u_sess->relmap_cxt.relfilenodeSkey)); securec_check(ret, "\0", "\0"); for (i = 0; i < 2; i++) { - fmgr_info_cxt(F_OIDEQ, &relfilenode_skey[i].sk_func, u_sess->cache_mem_cxt); - relfilenode_skey[i].sk_strategy = BTEqualStrategyNumber; - relfilenode_skey[i].sk_subtype = InvalidOid; - relfilenode_skey[i].sk_collation = InvalidOid; + fmgr_info_cxt(F_OIDEQ, &u_sess->relmap_cxt.relfilenodeSkey[i].sk_func, u_sess->cache_mem_cxt); + u_sess->relmap_cxt.relfilenodeSkey[i].sk_strategy = BTEqualStrategyNumber; + u_sess->relmap_cxt.relfilenodeSkey[i].sk_subtype = InvalidOid; + u_sess->relmap_cxt.relfilenodeSkey[i].sk_collation = InvalidOid; } - relfilenode_skey[0].sk_attno = Anum_pg_class_reltablespace; - relfilenode_skey[1].sk_attno = Anum_pg_class_relfilenode; + u_sess->relmap_cxt.relfilenodeSkey[0].sk_attno = Anum_pg_class_reltablespace; + u_sess->relmap_cxt.relfilenodeSkey[1].sk_attno = Anum_pg_class_relfilenode; /* Initialize the hash table. */ + HASHCTL ctl; ret = memset_s(&ctl, sizeof(ctl), 0, sizeof(ctl)); securec_check(ret, "\0", "\0"); ctl.keysize = sizeof(RelfilenodeMapKey); @@ -135,8 +133,9 @@ Oid RelidByRelfilenode(Oid reltablespace, Oid relfilenode) ScanKeyData skey[2]; Oid relid; int rc = 0; - if (u_sess->relmap_cxt.RelfilenodeMapHash == NULL) + if (u_sess->relmap_cxt.RelfilenodeMapHash == NULL) { InitializeRelfilenodeMap(); + } /* pg_class will show 0 when the value is actually u_sess->proc_cxt.MyDatabaseTableSpace */ if (reltablespace == u_sess->proc_cxt.MyDatabaseTableSpace) @@ -185,7 +184,7 @@ Oid RelidByRelfilenode(Oid reltablespace, Oid relfilenode) relation = heap_open(RelationRelationId, AccessShareLock); /* copy scankey to local copy, it will be modified during the scan */ - rc = memcpy_s(skey, sizeof(skey), relfilenode_skey, sizeof(skey)); + rc = memcpy_s(skey, sizeof(skey), u_sess->relmap_cxt.relfilenodeSkey, sizeof(skey)); securec_check(rc, "", ""); /* set scan arguments */ @@ -264,7 +263,7 @@ Oid PartitionRelidByRelfilenode(Oid reltablespace, Oid relfilenode, Oid& partati /* check plain relations by looking in pg_class */ relation = heap_open(PartitionRelationId, AccessShareLock); - rc = memcpy_s(skey, sizeof(skey), relfilenode_skey, sizeof(skey)); + rc = memcpy_s(skey, sizeof(skey), u_sess->relmap_cxt.relfilenodeSkey, sizeof(skey)); securec_check(rc, "", ""); skey[0].sk_attno = Anum_pg_partition_reltablespace; skey[1].sk_attno = Anum_pg_partition_relfilenode; diff --git a/src/include/knl/knl_session.h b/src/include/knl/knl_session.h index 30c4dd0d..07e720d1 100644 --- a/src/include/knl/knl_session.h +++ b/src/include/knl/knl_session.h @@ -1714,6 +1714,7 @@ typedef struct knl_u_relmap_context { struct RelMapFile* pending_shared_updates; struct RelMapFile* pending_local_updates; + struct ScanKeyData relfilenodeSkey[2]; /* Hash table for informations about each relfilenode <-> oid pair */ struct HTAB* RelfilenodeMapHash; } knl_u_relmap_context; From 23f0e5a74c2a94f977db679ade3df19f5898ea9c Mon Sep 17 00:00:00 2001 From: maxiang Date: Fri, 18 Jun 2021 16:52:44 +0800 Subject: [PATCH 2/2] update src/include/knl/knl_session.h. --- src/include/knl/knl_session.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/include/knl/knl_session.h b/src/include/knl/knl_session.h index 07e720d1..a6128666 100644 --- a/src/include/knl/knl_session.h +++ b/src/include/knl/knl_session.h @@ -44,6 +44,7 @@ #include +#include "access/skey.h" #include "c.h" #include "datatype/timestamp.h" #include "gs_thread.h"