Skip to content

Commit 667a80e

Browse files
ololobusgsmolk
authored andcommitted
Adopt ptrack 2.1 public API changes
1 parent 583ffaa commit 667a80e

File tree

4 files changed

+52
-49
lines changed

4 files changed

+52
-49
lines changed

src/backup.c

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -438,8 +438,9 @@ do_backup_instance(PGconn *backup_conn, PGNodeInfo *nodeInfo, bool no_sync)
438438
*/
439439
if (nodeInfo->ptrack_version_num >= 20)
440440
make_pagemap_from_ptrack_2(backup_files_list, backup_conn,
441-
nodeInfo->ptrack_schema,
442-
prev_backup_start_lsn);
441+
nodeInfo->ptrack_schema,
442+
nodeInfo->ptrack_version_num,
443+
prev_backup_start_lsn);
443444
else if (nodeInfo->ptrack_version_num == 15 ||
444445
nodeInfo->ptrack_version_num == 16 ||
445446
nodeInfo->ptrack_version_num == 17)
@@ -884,15 +885,10 @@ do_backup(time_t start_time, bool no_validate,
884885
#endif
885886

886887
get_ptrack_version(backup_conn, &nodeInfo);
887-
// elog(WARNING, "ptrack_version_num %d", ptrack_version_num);
888+
// elog(WARNING, "ptrack_version_num %d", ptrack_version_num);
888889

889890
if (nodeInfo.ptrack_version_num > 0)
890-
{
891-
if (nodeInfo.ptrack_version_num >= 20)
892-
nodeInfo.is_ptrack_enable = pg_ptrack_enable2(backup_conn);
893-
else
894-
nodeInfo.is_ptrack_enable = pg_ptrack_enable(backup_conn);
895-
}
891+
nodeInfo.is_ptrack_enable = pg_ptrack_enable(backup_conn, nodeInfo.ptrack_version_num);
896892

897893
if (current.backup_mode == BACKUP_MODE_DIFF_PTRACK)
898894
{

src/pg_probackup.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -999,19 +999,21 @@ extern void parse_filelist_filenames(parray *files, const char *root);
999999
/* in ptrack.c */
10001000
extern void make_pagemap_from_ptrack_1(parray* files, PGconn* backup_conn);
10011001
extern void make_pagemap_from_ptrack_2(parray* files, PGconn* backup_conn,
1002-
const char *ptrack_schema, XLogRecPtr lsn);
1002+
const char *ptrack_schema,
1003+
int ptrack_version_num,
1004+
XLogRecPtr lsn);
10031005
extern void pg_ptrack_clear(PGconn *backup_conn, int ptrack_version_num);
10041006
extern void get_ptrack_version(PGconn *backup_conn, PGNodeInfo *nodeInfo);
1005-
extern bool pg_ptrack_enable(PGconn *backup_conn);
1006-
extern bool pg_ptrack_enable2(PGconn *backup_conn);
1007+
extern bool pg_ptrack_enable(PGconn *backup_conn, int ptrack_version_num);
10071008
extern bool pg_ptrack_get_and_clear_db(Oid dbOid, Oid tblspcOid, PGconn *backup_conn);
10081009
extern char *pg_ptrack_get_and_clear(Oid tablespace_oid,
10091010
Oid db_oid,
10101011
Oid rel_oid,
10111012
size_t *result_size,
10121013
PGconn *backup_conn);
10131014
extern XLogRecPtr get_last_ptrack_lsn(PGconn *backup_conn, PGNodeInfo *nodeInfo);
1014-
extern parray * pg_ptrack_get_pagemapset(PGconn *backup_conn, const char *ptrack_schema, XLogRecPtr lsn);
1015+
extern parray * pg_ptrack_get_pagemapset(PGconn *backup_conn, const char *ptrack_schema,
1016+
int ptrack_version_num, XLogRecPtr lsn);
10151017

10161018
/* FIO */
10171019
extern int fio_send_pages(FILE* in, FILE* out, pgFile *file, XLogRecPtr horizonLsn,

src/ptrack.c

Lines changed: 40 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -217,19 +217,29 @@ get_ptrack_version(PGconn *backup_conn, PGNodeInfo *nodeInfo)
217217
* Check if ptrack is enabled in target instance
218218
*/
219219
bool
220-
pg_ptrack_enable(PGconn *backup_conn)
220+
pg_ptrack_enable(PGconn *backup_conn, int ptrack_version_num)
221221
{
222222
PGresult *res_db;
223+
bool result = false;
223224

224-
res_db = pgut_execute(backup_conn, "SHOW ptrack_enable", 0, NULL);
225-
226-
if (strcmp(PQgetvalue(res_db, 0, 0), "on") != 0)
225+
if (ptrack_version_num < 20)
227226
{
228-
PQclear(res_db);
229-
return false;
227+
res_db = pgut_execute(backup_conn, "SHOW ptrack_enable", 0, NULL);
228+
result = strcmp(PQgetvalue(res_db, 0, 0), "on") == 0;
229+
}
230+
else if (ptrack_version_num == 20)
231+
{
232+
res_db = pgut_execute(backup_conn, "SHOW ptrack_map_size", 0, NULL);
233+
result = strcmp(PQgetvalue(res_db, 0, 0), "0") != 0;
234+
}
235+
else
236+
{
237+
res_db = pgut_execute(backup_conn, "SHOW ptrack.map_size", 0, NULL);
238+
result = strcmp(PQgetvalue(res_db, 0, 0), "0") != 0;
230239
}
240+
231241
PQclear(res_db);
232-
return true;
242+
return result;
233243
}
234244

235245

@@ -459,7 +469,11 @@ get_last_ptrack_lsn(PGconn *backup_conn, PGNodeInfo *nodeInfo)
459469
{
460470
char query[128];
461471

462-
sprintf(query, "SELECT %s.pg_ptrack_control_lsn()", nodeInfo->ptrack_schema);
472+
if (nodeInfo->ptrack_version_num == 20)
473+
sprintf(query, "SELECT %s.pg_ptrack_control_lsn()", nodeInfo->ptrack_schema);
474+
else
475+
sprintf(query, "SELECT %s.ptrack_init_lsn()", nodeInfo->ptrack_schema);
476+
463477
res = pgut_execute(backup_conn, query, 0, NULL);
464478
}
465479

@@ -526,7 +540,10 @@ pg_ptrack_get_block(ConnectionArgs *arguments,
526540
if (!ptrack_schema)
527541
elog(ERROR, "Schema name of ptrack extension is missing");
528542

529-
sprintf(query, "SELECT %s.pg_ptrack_get_block($1, $2, $3, $4)", ptrack_schema);
543+
if (ptrack_version_num == 20)
544+
sprintf(query, "SELECT %s.pg_ptrack_get_block($1, $2, $3, $4)", ptrack_schema);
545+
else
546+
sprintf(query, "SELECT %s.ptrack_get_block($1, $2, $3, $4)", ptrack_schema);
530547

531548
res = pgut_execute_parallel(arguments->conn,
532549
arguments->cancel_conn,
@@ -566,30 +583,12 @@ pg_ptrack_get_block(ConnectionArgs *arguments,
566583
* ----------------------------
567584
*/
568585

569-
/*
570-
* Check if ptrack is enabled in target instance
571-
*/
572-
bool
573-
pg_ptrack_enable2(PGconn *backup_conn)
574-
{
575-
PGresult *res_db;
576-
577-
res_db = pgut_execute(backup_conn, "SHOW ptrack.map_size", 0, NULL);
578-
579-
if (strcmp(PQgetvalue(res_db, 0, 0), "0") == 0)
580-
{
581-
PQclear(res_db);
582-
return false;
583-
}
584-
PQclear(res_db);
585-
return true;
586-
}
587-
588586
/*
589587
* Fetch a list of changed files with their ptrack maps.
590588
*/
591589
parray *
592-
pg_ptrack_get_pagemapset(PGconn *backup_conn, const char *ptrack_schema, XLogRecPtr lsn)
590+
pg_ptrack_get_pagemapset(PGconn *backup_conn, const char *ptrack_schema,
591+
int ptrack_version_num, XLogRecPtr lsn)
593592
{
594593
PGresult *res;
595594
char lsn_buf[17 + 1];
@@ -604,8 +603,12 @@ pg_ptrack_get_pagemapset(PGconn *backup_conn, const char *ptrack_schema, XLogRec
604603
if (!ptrack_schema)
605604
elog(ERROR, "Schema name of ptrack extension is missing");
606605

607-
sprintf(query, "SELECT path, pagemap FROM %s.pg_ptrack_get_pagemapset($1) ORDER BY 1",
608-
ptrack_schema);
606+
if (ptrack_version_num == 20)
607+
sprintf(query, "SELECT path, pagemap FROM %s.pg_ptrack_get_pagemapset($1) ORDER BY 1",
608+
ptrack_schema);
609+
else
610+
sprintf(query, "SELECT path, pagemap FROM %s.ptrack_get_pagemapset($1) ORDER BY 1",
611+
ptrack_schema);
609612

610613
res = pgut_execute(backup_conn, query, 1, (const char **) params);
611614
pfree(params[0]);
@@ -647,16 +650,18 @@ pg_ptrack_get_pagemapset(PGconn *backup_conn, const char *ptrack_schema, XLogRec
647650
*/
648651
void
649652
make_pagemap_from_ptrack_2(parray *files,
650-
PGconn *backup_conn,
651-
const char *ptrack_schema,
652-
XLogRecPtr lsn)
653+
PGconn *backup_conn,
654+
const char *ptrack_schema,
655+
int ptrack_version_num,
656+
XLogRecPtr lsn)
653657
{
654658
parray *filemaps;
655659
int file_i = 0;
656660
page_map_entry *dummy_map = NULL;
657661

658662
/* Receive all available ptrack bitmaps at once */
659-
filemaps = pg_ptrack_get_pagemapset(backup_conn, ptrack_schema, lsn);
663+
filemaps = pg_ptrack_get_pagemapset(backup_conn, ptrack_schema,
664+
ptrack_version_num, lsn);
660665

661666
if (filemaps != NULL)
662667
parray_qsort(filemaps, pgFileMapComparePath);

tests/ptrack.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4052,7 +4052,7 @@ def test_corrupt_ptrack_map(self):
40524052
log_content = f.read()
40534053

40544054
self.assertIn(
4055-
'FATAL: incorrect checksum of file "{0}"'.format(ptrack_map),
4055+
'FATAL: ptrack init: incorrect checksum of file "{0}"'.format(ptrack_map),
40564056
log_content)
40574057

40584058
self.set_auto_conf(node, {'ptrack.map_size': '0'})

0 commit comments

Comments
 (0)