Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf98a4ee

Browse files
committed
PostgreSQL-14 support
1 parent2a4e335 commitf98a4ee

File tree

4 files changed

+636
-5
lines changed

4 files changed

+636
-5
lines changed

‎.travis.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ notifications:
2121

2222
# keep in sync with codecov.yml number of builds
2323
env:
24+
-PG_VERSION=15 PG_BRANCH=master TEST_CASE=tap
25+
-PG_VERSION=15 PG_BRANCH=master TEST_CASE=tap MODE=legacy
26+
-PG_VERSION=15 PG_BRANCH=master TEST_CASE=all
27+
-PG_VERSION=15 PG_BRANCH=master TEST_CASE=all MODE=paranoia
28+
-PG_VERSION=14 PG_BRANCH=REL_14_STABLE TEST_CASE=tap
29+
-PG_VERSION=14 PG_BRANCH=REL_14_STABLE TEST_CASE=tap MODE=legacy
30+
-PG_VERSION=14 PG_BRANCH=REL_14_STABLE TEST_CASE=all
31+
-PG_VERSION=14 PG_BRANCH=REL_14_STABLE TEST_CASE=all MODE=paranoia
2432
-PG_VERSION=13 PG_BRANCH=REL_13_STABLE TEST_CASE=tap
2533
-PG_VERSION=13 PG_BRANCH=REL_13_STABLE TEST_CASE=tap MODE=legacy
2634
-PG_VERSION=13 PG_BRANCH=REL_13_STABLE TEST_CASE=all
@@ -33,3 +41,8 @@ env:
3341
-PG_VERSION=11 PG_BRANCH=REL_11_STABLE TEST_CASE=tap MODE=legacy
3442
-PG_VERSION=11 PG_BRANCH=REL_11_STABLE TEST_CASE=all
3543
-PG_VERSION=11 PG_BRANCH=REL_11_STABLE TEST_CASE=all MODE=paranoia
44+
45+
jobs:
46+
allow_failures:
47+
-if:env(PG_BRANCH) = master
48+

‎README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ It is designed to allow false positives (i.e. block/page is marked in the `ptrac
1212

1313
Currently,`ptrack` codebase is split between small PostgreSQL core patch and extension. All public SQL API methods and main engine are placed in the`ptrack` extension, while the core patch contains only certain hooks and modifies binary utilities to ignore`ptrack.map.*` files.
1414

15-
This extension is compatible with PostgreSQL[11](https://github.com/postgrespro/ptrack/blob/master/patches/REL_11_STABLE-ptrack-core.diff),[12](https://github.com/postgrespro/ptrack/blob/master/patches/REL_12_STABLE-ptrack-core.diff),[13](https://github.com/postgrespro/ptrack/blob/master/patches/REL_13_STABLE-ptrack-core.diff).
15+
This extension is compatible with PostgreSQL[11](https://github.com/postgrespro/ptrack/blob/master/patches/REL_11_STABLE-ptrack-core.diff),[12](https://github.com/postgrespro/ptrack/blob/master/patches/REL_12_STABLE-ptrack-core.diff),[13](https://github.com/postgrespro/ptrack/blob/master/patches/REL_13_STABLE-ptrack-core.diff),[14](https://github.com/postgrespro/ptrack/blob/master/patches/REL_14_STABLE-ptrack-core.diff).
1616

1717
##Installation
1818

@@ -25,13 +25,13 @@ git clone https://github.com/postgrespro/ptrack.git
2525
2) Get latest PostgreSQL sources:
2626

2727
```shell
28-
git clone https://github.com/postgres/postgres.git -bREL_12_STABLE&&cd postgres
28+
git clone https://github.com/postgres/postgres.git -bREL_14_STABLE&&cd postgres
2929
```
3030

3131
3) Apply PostgreSQL core patch:
3232

3333
```shell
34-
git apply -3 ../ptrack/patches/REL_12_STABLE-ptrack-core.diff
34+
git apply -3 ../ptrack/patches/REL_14_STABLE-ptrack-core.diff
3535
```
3636

3737
4) Compile and install PostgreSQL
@@ -151,8 +151,8 @@ Feel free to [send pull requests](https://github.com/postgrespro/ptrack/compare)
151151
Everything is tested automatically with[travis-ci.com](https://travis-ci.com/postgrespro/ptrack) and[codecov.io](https://codecov.io/gh/postgrespro/ptrack), but you can also run tests locally via`Docker`:
152152

153153
```sh
154-
export PG_VERSION=12
155-
export PG_BRANCH=REL_12_STABLE
154+
export PG_VERSION=14
155+
export PG_BRANCH=REL_14_STABLE
156156
export TEST_CASE=all
157157
export MODE=paranoia
158158

Lines changed: 309 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,309 @@
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+
7+
diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c
8+
index 50ae1f16d0..721b926ad2 100644
9+
--- a/src/backend/replication/basebackup.c
10+
+++ b/src/backend/replication/basebackup.c
11+
@@ -233,6 +233,13 @@ static const struct exclude_list_item excludeFiles[] =
12+
{"postmaster.pid", false},
13+
{"postmaster.opts", false},
14+
15+
+/*
16+
+ * Skip all transient ptrack files, but do copy ptrack.map, since it may
17+
+ * be successfully used immediately after backup. TODO: check, test?
18+
+ */
19+
+{"ptrack.map.mmap", false},
20+
+{"ptrack.map.tmp", false},
21+
+
22+
/* end of list */
23+
{NULL, false}
24+
};
25+
@@ -248,6 +255,11 @@ static const struct exclude_list_item noChecksumFiles[] = {
26+
{"pg_filenode.map", false},
27+
{"pg_internal.init", true},
28+
{"PG_VERSION", false},
29+
+
30+
+{"ptrack.map.mmap", false},
31+
+{"ptrack.map", false},
32+
+{"ptrack.map.tmp", false},
33+
+
34+
#ifdef EXEC_BACKEND
35+
{"config_exec_params", true},
36+
#endif
37+
diff --git a/src/backend/storage/file/copydir.c b/src/backend/storage/file/copydir.c
38+
index 0cf598dd0c..c9c44a4ae7 100644
39+
--- a/src/backend/storage/file/copydir.c
40+
+++ b/src/backend/storage/file/copydir.c
41+
@@ -27,6 +27,8 @@
42+
#include "storage/copydir.h"
43+
#include "storage/fd.h"
44+
45+
+copydir_hook_type copydir_hook = NULL;
46+
+
47+
/*
48+
* copydir: copy a directory
49+
*
50+
@@ -78,6 +80,9 @@ copydir(char *fromdir, char *todir, bool recurse)
51+
}
52+
FreeDir(xldir);
53+
54+
+if (copydir_hook)
55+
+copydir_hook(todir);
56+
+
57+
/*
58+
* Be paranoid here and fsync all files to ensure the copy is really done.
59+
* But if fsync is disabled, we're done.
60+
diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c
61+
index 0eacd461cd..c2ef404a1a 100644
62+
--- a/src/backend/storage/smgr/md.c
63+
+++ b/src/backend/storage/smgr/md.c
64+
@@ -87,6 +87,8 @@ typedef struct _MdfdVec
65+
66+
static MemoryContext MdCxt;/* context for all MdfdVec objects */
67+
68+
+mdextend_hook_type mdextend_hook = NULL;
69+
+mdwrite_hook_type mdwrite_hook = NULL;
70+
71+
/* Populate a file tag describing an md.c segment file. */
72+
#define INIT_MD_FILETAG(a,xx_rnode,xx_forknum,xx_segno) \
73+
@@ -435,6 +437,9 @@ mdextend(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum,
74+
register_dirty_segment(reln, forknum, v);
75+
76+
Assert(_mdnblocks(reln, forknum, v) <= ((BlockNumber) RELSEG_SIZE));
77+
+
78+
+if (mdextend_hook)
79+
+mdextend_hook(reln->smgr_rnode, forknum, blocknum);
80+
}
81+
82+
/*
83+
@@ -721,6 +726,9 @@ mdwrite(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum,
84+
85+
if (!skipFsync && !SmgrIsTemp(reln))
86+
register_dirty_segment(reln, forknum, v);
87+
+
88+
+if (mdwrite_hook)
89+
+mdwrite_hook(reln->smgr_rnode, forknum, blocknum);
90+
}
91+
92+
/*
93+
diff --git a/src/backend/storage/sync/sync.c b/src/backend/storage/sync/sync.c
94+
index 3ded2cdd71..3a596a59f7 100644
95+
--- a/src/backend/storage/sync/sync.c
96+
+++ b/src/backend/storage/sync/sync.c
97+
@@ -75,6 +75,8 @@ static MemoryContext pendingOpsCxt; /* context for the above */
98+
static CycleCtr sync_cycle_ctr = 0;
99+
static CycleCtr checkpoint_cycle_ctr = 0;
100+
101+
+ProcessSyncRequests_hook_type ProcessSyncRequests_hook = NULL;
102+
+
103+
/* Intervals for calling AbsorbSyncRequests */
104+
#define FSYNCS_PER_ABSORB10
105+
#define UNLINKS_PER_ABSORB10
106+
@@ -420,6 +422,9 @@ ProcessSyncRequests(void)
107+
CheckpointStats.ckpt_longest_sync = longest;
108+
CheckpointStats.ckpt_agg_sync_time = total_elapsed;
109+
110+
+if (ProcessSyncRequests_hook)
111+
+ProcessSyncRequests_hook();
112+
+
113+
/* Flag successful completion of ProcessSyncRequests */
114+
sync_in_progress = false;
115+
}
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+
128+
diff --git a/src/bin/pg_checksums/pg_checksums.c b/src/bin/pg_checksums/pg_checksums.c
129+
index ffdc23945c..7ae95866ce 100644
130+
--- a/src/bin/pg_checksums/pg_checksums.c
131+
+++ b/src/bin/pg_checksums/pg_checksums.c
132+
@@ -114,6 +114,11 @@ static const struct exclude_list_item skip[] = {
133+
{"pg_filenode.map", false},
134+
{"pg_internal.init", true},
135+
{"PG_VERSION", false},
136+
+
137+
+{"ptrack.map.mmap", false},
138+
+{"ptrack.map", false},
139+
+{"ptrack.map.tmp", false},
140+
+
141+
#ifdef EXEC_BACKEND
142+
{"config_exec_params", true},
143+
#endif
144+
diff --git a/src/bin/pg_resetwal/pg_resetwal.c b/src/bin/pg_resetwal/pg_resetwal.c
145+
index 233441837f..cf7bd073bf 100644
146+
--- a/src/bin/pg_resetwal/pg_resetwal.c
147+
+++ b/src/bin/pg_resetwal/pg_resetwal.c
148+
@@ -84,6 +84,7 @@ static void RewriteControlFile(void);
149+
static void FindEndOfXLOG(void);
150+
static void KillExistingXLOG(void);
151+
static void KillExistingArchiveStatus(void);
152+
+static void KillExistingPtrack(void);
153+
static void WriteEmptyXLOG(void);
154+
static void usage(void);
155+
156+
@@ -513,6 +514,7 @@ main(int argc, char *argv[])
157+
RewriteControlFile();
158+
KillExistingXLOG();
159+
KillExistingArchiveStatus();
160+
+KillExistingPtrack();
161+
WriteEmptyXLOG();
162+
163+
printf(_("Write-ahead log reset\n"));
164+
@@ -1102,6 +1104,53 @@ KillExistingArchiveStatus(void)
165+
}
166+
}
167+
168+
+/*
169+
+ * Remove existing ptrack files
170+
+ */
171+
+static void
172+
+KillExistingPtrack(void)
173+
+{
174+
+#define PTRACKDIR "global"
175+
+
176+
+DIR *xldir;
177+
+struct dirent *xlde;
178+
+charpath[MAXPGPATH + sizeof(PTRACKDIR)];
179+
+
180+
+xldir = opendir(PTRACKDIR);
181+
+if (xldir == NULL)
182+
+{
183+
+pg_log_error("could not open directory \"%s\": %m", PTRACKDIR);
184+
+exit(1);
185+
+}
186+
+
187+
+while (errno = 0, (xlde = readdir(xldir)) != NULL)
188+
+{
189+
+if (strcmp(xlde->d_name, "ptrack.map.mmap") == 0 ||
190+
+strcmp(xlde->d_name, "ptrack.map") == 0 ||
191+
+strcmp(xlde->d_name, "ptrack.map.tmp") == 0)
192+
+{
193+
+snprintf(path, sizeof(path), "%s/%s", PTRACKDIR, xlde->d_name);
194+
+if (unlink(path) < 0)
195+
+{
196+
+pg_log_error("could not delete file \"%s\": %m", path);
197+
+exit(1);
198+
+}
199+
+}
200+
+}
201+
+
202+
+if (errno)
203+
+{
204+
+pg_log_error("could not read directory \"%s\": %m", PTRACKDIR);
205+
+exit(1);
206+
+}
207+
+
208+
+if (closedir(xldir))
209+
+{
210+
+pg_log_error("could not close directory \"%s\": %m", PTRACKDIR);
211+
+exit(1);
212+
+}
213+
+}
214+
+
215+
216+
/*
217+
* Write an empty XLOG file, containing only the checkpoint record
218+
diff --git a/src/bin/pg_rewind/filemap.c b/src/bin/pg_rewind/filemap.c
219+
index fbb97b5cf1..6cd7f2ae3e 100644
220+
--- a/src/bin/pg_rewind/filemap.c
221+
+++ b/src/bin/pg_rewind/filemap.c
222+
@@ -124,6 +124,10 @@ static const struct exclude_list_item excludeFiles[] =
223+
{"postmaster.pid", false},
224+
{"postmaster.opts", false},
225+
226+
+{"ptrack.map.mmap", false},
227+
+{"ptrack.map", false},
228+
+{"ptrack.map.tmp", false},
229+
+
230+
/* end of list */
231+
{NULL, false}
232+
};
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)
246+
diff --git a/src/include/port/pg_crc32c.h b/src/include/port/pg_crc32c.h
247+
index 3c6f906683..a7355f7ad1 100644
248+
--- a/src/include/port/pg_crc32c.h
249+
+++ 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
251+
#define FIN_CRC32C(crc) ((crc) ^= 0xFFFFFFFF)
252+
253+
extern pg_crc32c pg_comp_crc32c_sb8(pg_crc32c crc, const void *data, size_t len);
254+
-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);
261+
#ifdef USE_SSE42_CRC32C_WITH_RUNTIME_CHECK
262+
extern pg_crc32c pg_comp_crc32c_sse42(pg_crc32c crc, const void *data, size_t len);
263+
#endif
264+
diff --git a/src/include/storage/copydir.h b/src/include/storage/copydir.h
265+
index 5d28f59c1d..0d3f04d8af 100644
266+
--- a/src/include/storage/copydir.h
267+
+++ b/src/include/storage/copydir.h
268+
@@ -13,6 +13,9 @@
269+
#ifndef COPYDIR_H
270+
#define COPYDIR_H
271+
272+
+typedef void (*copydir_hook_type) (const char *path);
273+
+extern PGDLLIMPORT copydir_hook_type copydir_hook;
274+
+
275+
extern void copydir(char *fromdir, char *todir, bool recurse);
276+
extern void copy_file(char *fromfile, char *tofile);
277+
278+
diff --git a/src/include/storage/md.h b/src/include/storage/md.h
279+
index 07fd1bb7d0..5294811bc8 100644
280+
--- a/src/include/storage/md.h
281+
+++ b/src/include/storage/md.h
282+
@@ -19,6 +19,13 @@
283+
#include "storage/smgr.h"
284+
#include "storage/sync.h"
285+
286+
+typedef void (*mdextend_hook_type) (RelFileNodeBackend smgr_rnode,
287+
+ForkNumber forknum, BlockNumber blocknum);
288+
+extern PGDLLIMPORT mdextend_hook_type mdextend_hook;
289+
+typedef void (*mdwrite_hook_type) (RelFileNodeBackend smgr_rnode,
290+
+ ForkNumber forknum, BlockNumber blocknum);
291+
+extern PGDLLIMPORT mdwrite_hook_type mdwrite_hook;
292+
+
293+
/* md storage manager functionality */
294+
extern void mdinit(void);
295+
extern void mdopen(SMgrRelation reln);
296+
diff --git a/src/include/storage/sync.h b/src/include/storage/sync.h
297+
index e16ab8e711..88da9686eb 100644
298+
--- a/src/include/storage/sync.h
299+
+++ b/src/include/storage/sync.h
300+
@@ -50,6 +50,9 @@ typedef struct FileTag
301+
uint32segno;
302+
} FileTag;
303+
304+
+typedef void (*ProcessSyncRequests_hook_type) (void);
305+
+extern PGDLLIMPORT ProcessSyncRequests_hook_type ProcessSyncRequests_hook;
306+
+
307+
extern void InitSync(void);
308+
extern void SyncPreCheckpoint(void);
309+
extern void SyncPostCheckpoint(void);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp