From f1a1dc0f8146c724589ae2578aa470faf68fdb9d Mon Sep 17 00:00:00 2001 From: Tristan Partin Date: Fri, 13 Oct 2023 14:00:44 -0500 Subject: [PATCH v4 2/6] Allow extensions to override the global storage manager --- src/backend/storage/smgr/smgr.c | 4 +++- src/backend/utils/init/miscinit.c | 2 ++ src/include/storage/smgr.h | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c index 7635c231ea0..9b3e63aff55 100644 --- a/src/backend/storage/smgr/smgr.c +++ b/src/backend/storage/smgr/smgr.c @@ -69,6 +69,8 @@ static int NSmgr = 0; static Size LargestSMgrRelationSize = 0; +SMgrId storage_manager_id; + /* * Each backend has a hashtable that stores all extant SMgrRelation objects. * In addition, "unpinned" SMgrRelation objects are chained together in a list. @@ -227,7 +229,7 @@ smgropen(RelFileLocator rlocator, ProcNumber backend) for (int i = 0; i <= MAX_FORKNUM; ++i) reln->smgr_cached_nblocks[i] = InvalidBlockNumber; - reln->smgr_which = MdSMgrId; /* we only have md.c at present */ + reln->smgr_which = storage_manager_id; /* implementation-specific initialization */ smgrsw[reln->smgr_which].smgr_open(reln); diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c index 3176cdce6d7..1b3ce51cfce 100644 --- a/src/backend/utils/init/miscinit.c +++ b/src/backend/utils/init/miscinit.c @@ -1931,6 +1931,8 @@ void register_builtin_dynamic_managers(void) { mdsmgr_register(); + + storage_manager_id = MdSMgrId; } /* diff --git a/src/include/storage/smgr.h b/src/include/storage/smgr.h index 52f74f917b2..629c78cfdde 100644 --- a/src/include/storage/smgr.h +++ b/src/include/storage/smgr.h @@ -20,6 +20,8 @@ typedef uint8 SMgrId; +extern PGDLLIMPORT SMgrId storage_manager_id; + /* * smgr.c maintains a table of SMgrRelation objects, which are essentially * cached file handles. An SMgrRelation is created (if not already present) -- 2.47.2