Skip to content

Commit 5714dd1

Browse files
Daniel Shelepanovfunny-falcon
authored andcommitted
[PGPRO-6817] ptrack has been ported to version 15.
Has been tested on 15beta2 and 16devel tags: ptrack
1 parent fe9a17c commit 5714dd1

File tree

2 files changed

+56
-82
lines changed

2 files changed

+56
-82
lines changed

patches/master-ptrack-core.diff

Lines changed: 34 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,8 @@
1-
commit a14ac459d71528c64df00c693e9c71ac70d3ba29
2-
Author: anastasia <a.lubennikova@postgrespro.ru>
3-
Date: Mon Oct 19 14:53:06 2020 +0300
4-
5-
add ptrack 2.0
6-
71
diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c
8-
index 50ae1f16d0..721b926ad2 100644
2+
index 5244823ff85..160889b4a04 100644
93
--- a/src/backend/replication/basebackup.c
104
+++ b/src/backend/replication/basebackup.c
11-
@@ -233,6 +233,13 @@ static const struct exclude_list_item excludeFiles[] =
5+
@@ -197,6 +197,13 @@ static const struct exclude_list_item excludeFiles[] =
126
{"postmaster.pid", false},
137
{"postmaster.opts", false},
148

@@ -22,7 +16,7 @@ index 50ae1f16d0..721b926ad2 100644
2216
/* end of list */
2317
{NULL, false}
2418
};
25-
@@ -248,6 +255,11 @@ static const struct exclude_list_item noChecksumFiles[] = {
19+
@@ -212,6 +219,11 @@ static const struct exclude_list_item noChecksumFiles[] = {
2620
{"pg_filenode.map", false},
2721
{"pg_internal.init", true},
2822
{"PG_VERSION", false},
@@ -35,7 +29,7 @@ index 50ae1f16d0..721b926ad2 100644
3529
{"config_exec_params", true},
3630
#endif
3731
diff --git a/src/backend/storage/file/copydir.c b/src/backend/storage/file/copydir.c
38-
index 0cf598dd0c..c9c44a4ae7 100644
32+
index 658fd95ba95..eee38eba176 100644
3933
--- a/src/backend/storage/file/copydir.c
4034
+++ b/src/backend/storage/file/copydir.c
4135
@@ -27,6 +27,8 @@
@@ -58,7 +52,7 @@ index 0cf598dd0c..c9c44a4ae7 100644
5852
* Be paranoid here and fsync all files to ensure the copy is really done.
5953
* But if fsync is disabled, we're done.
6054
diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c
61-
index 0eacd461cd..c2ef404a1a 100644
55+
index 43edaf5d873..bbaf7500944 100644
6256
--- a/src/backend/storage/smgr/md.c
6357
+++ b/src/backend/storage/smgr/md.c
6458
@@ -87,6 +87,8 @@ typedef struct _MdfdVec
@@ -70,7 +64,7 @@ index 0eacd461cd..c2ef404a1a 100644
7064

7165
/* Populate a file tag describing an md.c segment file. */
7266
#define INIT_MD_FILETAG(a,xx_rnode,xx_forknum,xx_segno) \
73-
@@ -435,6 +437,9 @@ mdextend(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum,
67+
@@ -467,6 +469,9 @@ mdextend(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum,
7468
register_dirty_segment(reln, forknum, v);
7569

7670
Assert(_mdnblocks(reln, forknum, v) <= ((BlockNumber) RELSEG_SIZE));
@@ -80,7 +74,7 @@ index 0eacd461cd..c2ef404a1a 100644
8074
}
8175

8276
/*
83-
@@ -721,6 +726,9 @@ mdwrite(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum,
77+
@@ -756,6 +761,9 @@ mdwrite(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum,
8478

8579
if (!skipFsync && !SmgrIsTemp(reln))
8680
register_dirty_segment(reln, forknum, v);
@@ -91,10 +85,10 @@ index 0eacd461cd..c2ef404a1a 100644
9185

9286
/*
9387
diff --git a/src/backend/storage/sync/sync.c b/src/backend/storage/sync/sync.c
94-
index 3ded2cdd71..3a596a59f7 100644
88+
index e1fb6310038..76d75680b31 100644
9589
--- a/src/backend/storage/sync/sync.c
9690
+++ b/src/backend/storage/sync/sync.c
97-
@@ -75,6 +75,8 @@ static MemoryContext pendingOpsCxt; /* context for the above */
91+
@@ -81,6 +81,8 @@ static MemoryContext pendingOpsCxt; /* context for the above */
9892
static CycleCtr sync_cycle_ctr = 0;
9993
static CycleCtr checkpoint_cycle_ctr = 0;
10094

@@ -103,7 +97,7 @@ index 3ded2cdd71..3a596a59f7 100644
10397
/* Intervals for calling AbsorbSyncRequests */
10498
#define FSYNCS_PER_ABSORB 10
10599
#define UNLINKS_PER_ABSORB 10
106-
@@ -420,6 +422,9 @@ ProcessSyncRequests(void)
100+
@@ -477,6 +479,9 @@ ProcessSyncRequests(void)
107101
CheckpointStats.ckpt_longest_sync = longest;
108102
CheckpointStats.ckpt_agg_sync_time = total_elapsed;
109103

@@ -113,23 +107,11 @@ index 3ded2cdd71..3a596a59f7 100644
113107
/* Flag successful completion of ProcessSyncRequests */
114108
sync_in_progress = false;
115109
}
116-
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
117-
index 1683629ee3..d2fc154576 100644
118-
--- a/src/backend/utils/misc/guc.c
119-
+++ b/src/backend/utils/misc/guc.c
120-
@@ -620,7 +620,6 @@ static char *recovery_target_xid_string;
121-
static char *recovery_target_name_string;
122-
static char *recovery_target_lsn_string;
123-
124-
-
125-
/* should be static, but commands/variable.c needs to get at this */
126-
char *role_string;
127-
128110
diff --git a/src/bin/pg_checksums/pg_checksums.c b/src/bin/pg_checksums/pg_checksums.c
129-
index ffdc23945c..7ae95866ce 100644
111+
index 21dfe1b6ee5..266ac1ef40a 100644
130112
--- a/src/bin/pg_checksums/pg_checksums.c
131113
+++ b/src/bin/pg_checksums/pg_checksums.c
132-
@@ -114,6 +114,11 @@ static const struct exclude_list_item skip[] = {
114+
@@ -118,6 +118,11 @@ static const struct exclude_list_item skip[] = {
133115
{"pg_filenode.map", false},
134116
{"pg_internal.init", true},
135117
{"PG_VERSION", false},
@@ -142,27 +124,27 @@ index ffdc23945c..7ae95866ce 100644
142124
{"config_exec_params", true},
143125
#endif
144126
diff --git a/src/bin/pg_resetwal/pg_resetwal.c b/src/bin/pg_resetwal/pg_resetwal.c
145-
index 233441837f..cf7bd073bf 100644
127+
index d4772a29650..3318f64359d 100644
146128
--- a/src/bin/pg_resetwal/pg_resetwal.c
147129
+++ b/src/bin/pg_resetwal/pg_resetwal.c
148-
@@ -84,6 +84,7 @@ static void RewriteControlFile(void);
130+
@@ -85,6 +85,7 @@ static void RewriteControlFile(void);
149131
static void FindEndOfXLOG(void);
150132
static void KillExistingXLOG(void);
151133
static void KillExistingArchiveStatus(void);
152134
+static void KillExistingPtrack(void);
153135
static void WriteEmptyXLOG(void);
154136
static void usage(void);
155137

156-
@@ -513,6 +514,7 @@ main(int argc, char *argv[])
138+
@@ -488,6 +489,7 @@ main(int argc, char *argv[])
157139
RewriteControlFile();
158140
KillExistingXLOG();
159141
KillExistingArchiveStatus();
160142
+ KillExistingPtrack();
161143
WriteEmptyXLOG();
162144

163145
printf(_("Write-ahead log reset\n"));
164-
@@ -1102,6 +1104,53 @@ KillExistingArchiveStatus(void)
165-
}
146+
@@ -1036,6 +1038,41 @@ KillExistingArchiveStatus(void)
147+
pg_fatal("could not close directory \"%s\": %m", ARCHSTATDIR);
166148
}
167149

168150
+/*
@@ -173,16 +155,13 @@ index 233441837f..cf7bd073bf 100644
173155
+{
174156
+#define PTRACKDIR "global"
175157
+
176-
+ DIR *xldir;
158+
+ DIR *xldir;
177159
+ struct dirent *xlde;
178-
+ char path[MAXPGPATH + sizeof(PTRACKDIR)];
160+
+ char path[MAXPGPATH + sizeof(PTRACKDIR)];
179161
+
180162
+ xldir = opendir(PTRACKDIR);
181163
+ if (xldir == NULL)
182-
+ {
183-
+ pg_log_error("could not open directory \"%s\": %m", PTRACKDIR);
184-
+ exit(1);
185-
+ }
164+
+ pg_fatal("could not open directory \"%s\": %m", PTRACKDIR);
186165
+
187166
+ while (errno = 0, (xlde = readdir(xldir)) != NULL)
188167
+ {
@@ -192,34 +171,25 @@ index 233441837f..cf7bd073bf 100644
192171
+ {
193172
+ snprintf(path, sizeof(path), "%s/%s", PTRACKDIR, xlde->d_name);
194173
+ if (unlink(path) < 0)
195-
+ {
196-
+ pg_log_error("could not delete file \"%s\": %m", path);
197-
+ exit(1);
198-
+ }
174+
+ pg_fatal("could not delete file \"%s\": %m", path);
199175
+ }
200176
+ }
201177
+
202178
+ if (errno)
203-
+ {
204-
+ pg_log_error("could not read directory \"%s\": %m", PTRACKDIR);
205-
+ exit(1);
206-
+ }
179+
+ pg_fatal("could not read directory \"%s\": %m", PTRACKDIR);
207180
+
208181
+ if (closedir(xldir))
209-
+ {
210-
+ pg_log_error("could not close directory \"%s\": %m", PTRACKDIR);
211-
+ exit(1);
212-
+ }
182+
+ pg_fatal("could not close directory \"%s\": %m", PTRACKDIR);
213183
+}
214184
+
215185

216186
/*
217187
* Write an empty XLOG file, containing only the checkpoint record
218188
diff --git a/src/bin/pg_rewind/filemap.c b/src/bin/pg_rewind/filemap.c
219-
index fbb97b5cf1..6cd7f2ae3e 100644
189+
index 62529310415..b496f54fb06 100644
220190
--- a/src/bin/pg_rewind/filemap.c
221191
+++ b/src/bin/pg_rewind/filemap.c
222-
@@ -124,6 +124,10 @@ static const struct exclude_list_item excludeFiles[] =
192+
@@ -157,6 +157,10 @@ static const struct exclude_list_item excludeFiles[] =
223193
{"postmaster.pid", false},
224194
{"postmaster.opts", false},
225195

@@ -230,39 +200,21 @@ index fbb97b5cf1..6cd7f2ae3e 100644
230200
/* end of list */
231201
{NULL, false}
232202
};
233-
diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h
234-
index 72e3352398..5c2e016501 100644
235-
--- a/src/include/miscadmin.h
236-
+++ b/src/include/miscadmin.h
237-
@@ -388,7 +388,7 @@ typedef enum ProcessingMode
238-
NormalProcessing /* normal processing */
239-
} ProcessingMode;
240-
241-
-extern ProcessingMode Mode;
242-
+extern PGDLLIMPORT ProcessingMode Mode;
243-
244-
#define IsBootstrapProcessingMode() (Mode == BootstrapProcessing)
245-
#define IsInitProcessingMode() (Mode == InitProcessing)
246203
diff --git a/src/include/port/pg_crc32c.h b/src/include/port/pg_crc32c.h
247-
index 3c6f906683..a7355f7ad1 100644
204+
index d7668651ba8..33994a27f5f 100644
248205
--- a/src/include/port/pg_crc32c.h
249206
+++ b/src/include/port/pg_crc32c.h
250-
@@ -69,8 +69,11 @@ extern pg_crc32c pg_comp_crc32c_armv8(pg_crc32c crc, const void *data, size_t le
207+
@@ -69,7 +69,7 @@ extern pg_crc32c pg_comp_crc32c_armv8(pg_crc32c crc, const void *data, size_t le
251208
#define FIN_CRC32C(crc) ((crc) ^= 0xFFFFFFFF)
252209

253210
extern pg_crc32c pg_comp_crc32c_sb8(pg_crc32c crc, const void *data, size_t len);
254211
-extern pg_crc32c (*pg_comp_crc32c) (pg_crc32c crc, const void *data, size_t len);
255-
-
256-
+extern
257-
+#ifndef FRONTEND
258-
+PGDLLIMPORT
259-
+#endif
260-
+pg_crc32c (*pg_comp_crc32c) (pg_crc32c crc, const void *data, size_t len);
212+
+extern PGDLLIMPORT pg_crc32c (*pg_comp_crc32c) (pg_crc32c crc, const void *data, size_t len);
213+
261214
#ifdef USE_SSE42_CRC32C_WITH_RUNTIME_CHECK
262215
extern pg_crc32c pg_comp_crc32c_sse42(pg_crc32c crc, const void *data, size_t len);
263-
#endif
264216
diff --git a/src/include/storage/copydir.h b/src/include/storage/copydir.h
265-
index 5d28f59c1d..0d3f04d8af 100644
217+
index 50a26edeb06..af1602f5154 100644
266218
--- a/src/include/storage/copydir.h
267219
+++ b/src/include/storage/copydir.h
268220
@@ -13,6 +13,9 @@
@@ -276,7 +228,7 @@ index 5d28f59c1d..0d3f04d8af 100644
276228
extern void copy_file(char *fromfile, char *tofile);
277229

278230
diff --git a/src/include/storage/md.h b/src/include/storage/md.h
279-
index 07fd1bb7d0..5294811bc8 100644
231+
index ffffa40db71..3ff98e0bf01 100644
280232
--- a/src/include/storage/md.h
281233
+++ b/src/include/storage/md.h
282234
@@ -19,6 +19,13 @@
@@ -287,17 +239,17 @@ index 07fd1bb7d0..5294811bc8 100644
287239
+ ForkNumber forknum, BlockNumber blocknum);
288240
+extern PGDLLIMPORT mdextend_hook_type mdextend_hook;
289241
+typedef void (*mdwrite_hook_type) (RelFileNodeBackend smgr_rnode,
290-
+ ForkNumber forknum, BlockNumber blocknum);
242+
+ ForkNumber forknum, BlockNumber blocknum);
291243
+extern PGDLLIMPORT mdwrite_hook_type mdwrite_hook;
292244
+
293245
/* md storage manager functionality */
294246
extern void mdinit(void);
295247
extern void mdopen(SMgrRelation reln);
296248
diff --git a/src/include/storage/sync.h b/src/include/storage/sync.h
297-
index e16ab8e711..88da9686eb 100644
249+
index 9737e1eb67c..914ad86328f 100644
298250
--- a/src/include/storage/sync.h
299251
+++ b/src/include/storage/sync.h
300-
@@ -50,6 +50,9 @@ typedef struct FileTag
252+
@@ -55,6 +55,9 @@ typedef struct FileTag
301253
uint32 segno;
302254
} FileTag;
303255

ptrack.c

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,10 @@ static void ptrack_ProcessSyncRequests_hook(void);
8181

8282
static void ptrack_gather_filelist(List **filelist, char *path, Oid spcOid, Oid dbOid);
8383
static int ptrack_filelist_getnext(PtScanCtx * ctx);
84+
#if PG_VERSION_NUM >= 150000
85+
static shmem_request_hook_type prev_shmem_request_hook = NULL;
86+
static void ptrack_shmem_request(void);
87+
#endif
8488

8589
/*
8690
* Module load callback
@@ -119,7 +123,14 @@ _PG_init(void)
119123

120124
/* Request server shared memory */
121125
if (ptrack_map_size != 0)
126+
{
127+
#if PG_VERSION_NUM >= 150000
128+
prev_shmem_request_hook = shmem_request_hook;
129+
shmem_request_hook = ptrack_shmem_request;
130+
#else
122131
RequestAddinShmemSpace(PtrackActualSize);
132+
#endif
133+
}
123134
else
124135
ptrackCleanFiles();
125136

@@ -136,6 +147,17 @@ _PG_init(void)
136147
ProcessSyncRequests_hook = ptrack_ProcessSyncRequests_hook;
137148
}
138149

150+
#if PG_VERSION_NUM >= 150000
151+
static void
152+
ptrack_shmem_request(void)
153+
{
154+
if (prev_shmem_request_hook)
155+
prev_shmem_request_hook();
156+
157+
RequestAddinShmemSpace(PtrackActualSize);
158+
}
159+
#endif
160+
139161
/*
140162
* Module unload callback
141163
*/

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy