Skip to content

Commit 01dc9cf

Browse files
committed
Adopt ptrack 2.1 public API changes
1 parent ad34a1d commit 01dc9cf

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
@@ -437,8 +437,9 @@ do_backup_instance(PGconn *backup_conn, PGNodeInfo *nodeInfo, bool no_sync)
437437
*/
438438
if (nodeInfo->ptrack_version_num >= 20)
439439
make_pagemap_from_ptrack_2(backup_files_list, backup_conn,
440-
nodeInfo->ptrack_schema,
441-
prev_backup_start_lsn);
440+
nodeInfo->ptrack_schema,
441+
nodeInfo->ptrack_version_num,
442+
prev_backup_start_lsn);
442443
else if (nodeInfo->ptrack_version_num == 15 ||
443444
nodeInfo->ptrack_version_num == 16 ||
444445
nodeInfo->ptrack_version_num == 17)
@@ -875,15 +876,10 @@ do_backup(time_t start_time, bool no_validate,
875876
#endif
876877

877878
get_ptrack_version(backup_conn, &nodeInfo);
878-
// elog(WARNING, "ptrack_version_num %d", ptrack_version_num);
879+
// elog(WARNING, "ptrack_version_num %d", ptrack_version_num);
879880

880881
if (nodeInfo.ptrack_version_num > 0)
881-
{
882-
if (nodeInfo.ptrack_version_num >= 20)
883-
nodeInfo.is_ptrack_enable = pg_ptrack_enable2(backup_conn);
884-
else
885-
nodeInfo.is_ptrack_enable = pg_ptrack_enable(backup_conn);
886-
}
882+
nodeInfo.is_ptrack_enable = pg_ptrack_enable(backup_conn, nodeInfo.ptrack_version_num);
887883

888884
if (current.backup_mode == BACKUP_MODE_DIFF_PTRACK)
889885
{

src/pg_probackup.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1005,19 +1005,21 @@ extern void parse_filelist_filenames(parray *files, const char *root);
10051005
/* in ptrack.c */
10061006
extern void make_pagemap_from_ptrack_1(parray* files, PGconn* backup_conn);
10071007
extern void make_pagemap_from_ptrack_2(parray* files, PGconn* backup_conn,
1008-
const char *ptrack_schema, XLogRecPtr lsn);
1008+
const char *ptrack_schema,
1009+
int ptrack_version_num,
1010+
XLogRecPtr lsn);
10091011
extern void pg_ptrack_clear(PGconn *backup_conn, int ptrack_version_num);
10101012
extern void get_ptrack_version(PGconn *backup_conn, PGNodeInfo *nodeInfo);
1011-
extern bool pg_ptrack_enable(PGconn *backup_conn);
1012-
extern bool pg_ptrack_enable2(PGconn *backup_conn);
1013+
extern bool pg_ptrack_enable(PGconn *backup_conn, int ptrack_version_num);
10131014
extern bool pg_ptrack_get_and_clear_db(Oid dbOid, Oid tblspcOid, PGconn *backup_conn);
10141015
extern char *pg_ptrack_get_and_clear(Oid tablespace_oid,
10151016
Oid db_oid,
10161017
Oid rel_oid,
10171018
size_t *result_size,
10181019
PGconn *backup_conn);
10191020
extern XLogRecPtr get_last_ptrack_lsn(PGconn *backup_conn, PGNodeInfo *nodeInfo);
1020-
extern parray * pg_ptrack_get_pagemapset(PGconn *backup_conn, const char *ptrack_schema, XLogRecPtr lsn);
1021+
extern parray * pg_ptrack_get_pagemapset(PGconn *backup_conn, const char *ptrack_schema,
1022+
int ptrack_version_num, XLogRecPtr lsn);
10211023

10221024
/* FIO */
10231025
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
@@ -212,19 +212,29 @@ get_ptrack_version(PGconn *backup_conn, PGNodeInfo *nodeInfo)
212212
* Check if ptrack is enabled in target instance
213213
*/
214214
bool
215-
pg_ptrack_enable(PGconn *backup_conn)
215+
pg_ptrack_enable(PGconn *backup_conn, int ptrack_version_num)
216216
{
217217
PGresult *res_db;
218+
bool result = false;
218219

219-
res_db = pgut_execute(backup_conn, "SHOW ptrack_enable", 0, NULL);
220-
221-
if (strcmp(PQgetvalue(res_db, 0, 0), "on") != 0)
220+
if (ptrack_version_num < 20)
222221
{
223-
PQclear(res_db);
224-
return false;
222+
res_db = pgut_execute(backup_conn, "SHOW ptrack_enable", 0, NULL);
223+
result = strcmp(PQgetvalue(res_db, 0, 0), "on") == 0;
224+
}
225+
else if (ptrack_version_num == 20)
226+
{
227+
res_db = pgut_execute(backup_conn, "SHOW ptrack_map_size", 0, NULL);
228+
result = strcmp(PQgetvalue(res_db, 0, 0), "0") != 0;
229+
}
230+
else
231+
{
232+
res_db = pgut_execute(backup_conn, "SHOW ptrack.map_size", 0, NULL);
233+
result = strcmp(PQgetvalue(res_db, 0, 0), "0") != 0;
225234
}
235+
226236
PQclear(res_db);
227-
return true;
237+
return result;
228238
}
229239

230240

@@ -454,7 +464,11 @@ get_last_ptrack_lsn(PGconn *backup_conn, PGNodeInfo *nodeInfo)
454464
{
455465
char query[128];
456466

457-
sprintf(query, "SELECT %s.pg_ptrack_control_lsn()", nodeInfo->ptrack_schema);
467+
if (nodeInfo->ptrack_version_num == 20)
468+
sprintf(query, "SELECT %s.pg_ptrack_control_lsn()", nodeInfo->ptrack_schema);
469+
else
470+
sprintf(query, "SELECT %s.ptrack_init_lsn()", nodeInfo->ptrack_schema);
471+
458472
res = pgut_execute(backup_conn, query, 0, NULL);
459473
}
460474

@@ -521,7 +535,10 @@ pg_ptrack_get_block(ConnectionArgs *arguments,
521535
if (!ptrack_schema)
522536
elog(ERROR, "Schema name of ptrack extension is missing");
523537

524-
sprintf(query, "SELECT %s.pg_ptrack_get_block($1, $2, $3, $4)", ptrack_schema);
538+
if (ptrack_version_num == 20)
539+
sprintf(query, "SELECT %s.pg_ptrack_get_block($1, $2, $3, $4)", ptrack_schema);
540+
else
541+
sprintf(query, "SELECT %s.ptrack_get_block($1, $2, $3, $4)", ptrack_schema);
525542

526543
res = pgut_execute_parallel(arguments->conn,
527544
arguments->cancel_conn,
@@ -561,30 +578,12 @@ pg_ptrack_get_block(ConnectionArgs *arguments,
561578
* ----------------------------
562579
*/
563580

564-
/*
565-
* Check if ptrack is enabled in target instance
566-
*/
567-
bool
568-
pg_ptrack_enable2(PGconn *backup_conn)
569-
{
570-
PGresult *res_db;
571-
572-
res_db = pgut_execute(backup_conn, "SHOW ptrack.map_size", 0, NULL);
573-
574-
if (strcmp(PQgetvalue(res_db, 0, 0), "0") == 0)
575-
{
576-
PQclear(res_db);
577-
return false;
578-
}
579-
PQclear(res_db);
580-
return true;
581-
}
582-
583581
/*
584582
* Fetch a list of changed files with their ptrack maps.
585583
*/
586584
parray *
587-
pg_ptrack_get_pagemapset(PGconn *backup_conn, const char *ptrack_schema, XLogRecPtr lsn)
585+
pg_ptrack_get_pagemapset(PGconn *backup_conn, const char *ptrack_schema,
586+
int ptrack_version_num, XLogRecPtr lsn)
588587
{
589588
PGresult *res;
590589
char lsn_buf[17 + 1];
@@ -599,8 +598,12 @@ pg_ptrack_get_pagemapset(PGconn *backup_conn, const char *ptrack_schema, XLogRec
599598
if (!ptrack_schema)
600599
elog(ERROR, "Schema name of ptrack extension is missing");
601600

602-
sprintf(query, "SELECT path, pagemap FROM %s.pg_ptrack_get_pagemapset($1) ORDER BY 1",
603-
ptrack_schema);
601+
if (ptrack_version_num == 20)
602+
sprintf(query, "SELECT path, pagemap FROM %s.pg_ptrack_get_pagemapset($1) ORDER BY 1",
603+
ptrack_schema);
604+
else
605+
sprintf(query, "SELECT path, pagemap FROM %s.ptrack_get_pagemapset($1) ORDER BY 1",
606+
ptrack_schema);
604607

605608
res = pgut_execute(backup_conn, query, 1, (const char **) params);
606609
pfree(params[0]);
@@ -642,16 +645,18 @@ pg_ptrack_get_pagemapset(PGconn *backup_conn, const char *ptrack_schema, XLogRec
642645
*/
643646
void
644647
make_pagemap_from_ptrack_2(parray *files,
645-
PGconn *backup_conn,
646-
const char *ptrack_schema,
647-
XLogRecPtr lsn)
648+
PGconn *backup_conn,
649+
const char *ptrack_schema,
650+
int ptrack_version_num,
651+
XLogRecPtr lsn)
648652
{
649653
parray *filemaps;
650654
int file_i = 0;
651655
page_map_entry *dummy_map = NULL;
652656

653657
/* Receive all available ptrack bitmaps at once */
654-
filemaps = pg_ptrack_get_pagemapset(backup_conn, ptrack_schema, lsn);
658+
filemaps = pg_ptrack_get_pagemapset(backup_conn, ptrack_schema,
659+
ptrack_version_num, lsn);
655660

656661
if (filemaps != NULL)
657662
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)