@@ -199,6 +199,8 @@ get_ptrack_version(PGconn *backup_conn, PGNodeInfo *nodeInfo)
199199 nodeInfo -> ptrack_version_num = 17 ;
200200 else if (strcmp (ptrack_version_str , "2.0" ) == 0 )
201201 nodeInfo -> ptrack_version_num = 20 ;
202+ else if (strcmp (ptrack_version_str , "2.1" ) == 0 )
203+ nodeInfo -> ptrack_version_num = 21 ;
202204 else
203205 elog (WARNING , "Update your ptrack to the version 1.5 or upper. Current version is %s" ,
204206 ptrack_version_str );
@@ -210,19 +212,30 @@ get_ptrack_version(PGconn *backup_conn, PGNodeInfo *nodeInfo)
210212 * Check if ptrack is enabled in target instance
211213 */
212214bool
213- pg_ptrack_enable (PGconn * backup_conn )
215+ pg_ptrack_enable (PGconn * backup_conn , int ptrack_version_num )
214216{
215217 PGresult * res_db ;
218+ bool result = false;
216219
217- res_db = pgut_execute (backup_conn , "SHOW ptrack_enable" , 0 , NULL );
218-
219- if (strcmp (PQgetvalue (res_db , 0 , 0 ), "on" ) != 0 )
220+ if (ptrack_version_num < 20 )
220221 {
221- PQclear (res_db );
222- 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 &&
234+ strcmp (PQgetvalue (res_db , 0 , 0 ), "-1" ) != 0 ;
223235 }
236+
224237 PQclear (res_db );
225- return true ;
238+ return result ;
226239}
227240
228241
@@ -452,7 +465,11 @@ get_last_ptrack_lsn(PGconn *backup_conn, PGNodeInfo *nodeInfo)
452465 {
453466 char query [128 ];
454467
455- sprintf (query , "SELECT %s.pg_ptrack_control_lsn()" , nodeInfo -> ptrack_schema );
468+ if (nodeInfo -> ptrack_version_num == 20 )
469+ sprintf (query , "SELECT %s.pg_ptrack_control_lsn()" , nodeInfo -> ptrack_schema );
470+ else
471+ sprintf (query , "SELECT %s.ptrack_init_lsn()" , nodeInfo -> ptrack_schema );
472+
456473 res = pgut_execute (backup_conn , query , 0 , NULL );
457474 }
458475
@@ -504,7 +521,7 @@ pg_ptrack_get_block(ConnectionArgs *arguments,
504521 if (arguments -> cancel_conn == NULL )
505522 arguments -> cancel_conn = PQgetCancel (arguments -> conn );
506523
507- //elog(LOG, "db %i pg_ptrack_get_block(%i, %i, %u)",dbOid, tblsOid, relOid, blknum);
524+ // elog(LOG, "db %i pg_ptrack_get_block(%i, %i, %u)",dbOid, tblsOid, relOid, blknum);
508525
509526 if (ptrack_version_num < 20 )
510527 res = pgut_execute_parallel (arguments -> conn ,
@@ -519,7 +536,11 @@ pg_ptrack_get_block(ConnectionArgs *arguments,
519536 if (!ptrack_schema )
520537 elog (ERROR , "Schema name of ptrack extension is missing" );
521538
522- sprintf (query , "SELECT %s.pg_ptrack_get_block($1, $2, $3, $4)" , ptrack_schema );
539+ if (ptrack_version_num == 20 )
540+ sprintf (query , "SELECT %s.pg_ptrack_get_block($1, $2, $3, $4)" , ptrack_schema );
541+ else
542+ elog (ERROR , "ptrack >= 2.1.0 does not support pg_ptrack_get_block()" );
543+ // sprintf(query, "SELECT %s.ptrack_get_block($1, $2, $3, $4)", ptrack_schema);
523544
524545 res = pgut_execute_parallel (arguments -> conn ,
525546 arguments -> cancel_conn ,
@@ -559,30 +580,12 @@ pg_ptrack_get_block(ConnectionArgs *arguments,
559580 * ----------------------------
560581 */
561582
562- /*
563- * Check if ptrack is enabled in target instance
564- */
565- bool
566- pg_ptrack_enable2 (PGconn * backup_conn )
567- {
568- PGresult * res_db ;
569-
570- res_db = pgut_execute (backup_conn , "SHOW ptrack_map_size" , 0 , NULL );
571-
572- if (strcmp (PQgetvalue (res_db , 0 , 0 ), "0" ) == 0 )
573- {
574- PQclear (res_db );
575- return false;
576- }
577- PQclear (res_db );
578- return true;
579- }
580-
581583/*
582584 * Fetch a list of changed files with their ptrack maps.
583585 */
584586parray *
585- pg_ptrack_get_pagemapset (PGconn * backup_conn , const char * ptrack_schema , XLogRecPtr lsn )
587+ pg_ptrack_get_pagemapset (PGconn * backup_conn , const char * ptrack_schema ,
588+ int ptrack_version_num , XLogRecPtr lsn )
586589{
587590 PGresult * res ;
588591 char lsn_buf [17 + 1 ];
@@ -597,8 +600,12 @@ pg_ptrack_get_pagemapset(PGconn *backup_conn, const char *ptrack_schema, XLogRec
597600 if (!ptrack_schema )
598601 elog (ERROR , "Schema name of ptrack extension is missing" );
599602
600- sprintf (query , "SELECT path, pagemap FROM %s.pg_ptrack_get_pagemapset($1) ORDER BY 1" ,
601- ptrack_schema );
603+ if (ptrack_version_num == 20 )
604+ sprintf (query , "SELECT path, pagemap FROM %s.pg_ptrack_get_pagemapset($1) ORDER BY 1" ,
605+ ptrack_schema );
606+ else
607+ sprintf (query , "SELECT path, pagemap FROM %s.ptrack_get_pagemapset($1) ORDER BY 1" ,
608+ ptrack_schema );
602609
603610 res = pgut_execute (backup_conn , query , 1 , (const char * * ) params );
604611 pfree (params [0 ]);
@@ -640,16 +647,18 @@ pg_ptrack_get_pagemapset(PGconn *backup_conn, const char *ptrack_schema, XLogRec
640647 */
641648void
642649make_pagemap_from_ptrack_2 (parray * files ,
643- PGconn * backup_conn ,
644- const char * ptrack_schema ,
645- XLogRecPtr lsn )
650+ PGconn * backup_conn ,
651+ const char * ptrack_schema ,
652+ int ptrack_version_num ,
653+ XLogRecPtr lsn )
646654{
647655 parray * filemaps ;
648656 int file_i = 0 ;
649657 page_map_entry * dummy_map = NULL ;
650658
651659 /* Receive all available ptrack bitmaps at once */
652- filemaps = pg_ptrack_get_pagemapset (backup_conn , ptrack_schema , lsn );
660+ filemaps = pg_ptrack_get_pagemapset (backup_conn , ptrack_schema ,
661+ ptrack_version_num , lsn );
653662
654663 if (filemaps != NULL )
655664 parray_qsort (filemaps , pgFileMapComparePath );
0 commit comments