v4-0002-Allow-extensions-to-override-the-global-storage-m.patch
text/x-patch
Filename: v4-0002-Allow-extensions-to-override-the-global-storage-m.patch
Type: text/x-patch
Part: 4
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 v4-0002
Subject: Allow extensions to override the global storage manager
| File | + | − |
|---|---|---|
| src/backend/storage/smgr/smgr.c | 3 | 1 |
| src/backend/utils/init/miscinit.c | 2 | 0 |
| src/include/storage/smgr.h | 2 | 0 |
From f1a1dc0f8146c724589ae2578aa470faf68fdb9d Mon Sep 17 00:00:00 2001
From: Tristan Partin <tristan@neon.tech>
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