@@ -69,15 +69,6 @@ static bool backup_in_progress = false;
6969/* Is pg_stop_backup() was sent */
7070static bool pg_stop_backup_is_sent = false;
7171
72- typedef struct
73- {
74- const char * from_root ;
75- const char * to_root ;
76- parray * backup_files_list ;
77- parray * prev_backup_filelist ;
78- XLogRecPtr prev_backup_start_lsn ;
79- } backup_files_args ;
80-
8172/*
8273 * Backup routines
8374 */
@@ -656,6 +647,8 @@ do_backup_instance(void)
656647 arg -> backup_files_list = backup_files_list ;
657648 arg -> prev_backup_filelist = prev_backup_filelist ;
658649 arg -> prev_backup_start_lsn = prev_backup_start_lsn ;
650+ arg -> thread_backup_conn = NULL ;
651+ arg -> thread_cancel_conn = NULL ;
659652 backup_threads_args [i ] = arg ;
660653 }
661654
@@ -678,6 +671,8 @@ do_backup_instance(void)
678671 for (i = 0 ; i < num_threads ; i ++ )
679672 {
680673 pthread_join (backup_threads [i ], NULL );
674+ if (backup_threads_args [i ]-> thread_backup_conn != NULL )
675+ pgut_disconnect (backup_threads_args [i ]-> thread_backup_conn );
681676 pg_free (backup_threads_args [i ]);
682677 }
683678
@@ -1956,7 +1951,8 @@ backup_files(void *arg)
19561951 if (file -> is_datafile && !file -> is_cfs )
19571952 {
19581953 /* backup block by block if datafile AND not compressed by cfs*/
1959- if (!backup_data_file (arguments -> from_root ,
1954+ if (!backup_data_file (arguments ,
1955+ arguments -> from_root ,
19601956 arguments -> to_root , file ,
19611957 arguments -> prev_backup_start_lsn ,
19621958 current .backup_mode ))
@@ -2686,7 +2682,8 @@ get_last_ptrack_lsn(void)
26862682}
26872683
26882684char *
2689- pg_ptrack_get_block (Oid dbOid ,
2685+ pg_ptrack_get_block (backup_files_args * arguments ,
2686+ Oid dbOid ,
26902687 Oid tblsOid ,
26912688 Oid relOid ,
26922689 BlockNumber blknum ,
@@ -2695,7 +2692,6 @@ pg_ptrack_get_block(Oid dbOid,
26952692 PGresult * res ;
26962693 char * params [4 ];
26972694 char * result ;
2698- PGconn * tmp_conn = NULL ;
26992695
27002696 params [0 ] = palloc (64 );
27012697 params [1 ] = palloc (64 );
@@ -2711,10 +2707,13 @@ pg_ptrack_get_block(Oid dbOid,
27112707 sprintf (params [2 ], "%i" , relOid );
27122708 sprintf (params [3 ], "%u" , blknum );
27132709
2714- tmp_conn = pgut_connect (pgut_dbname );
2710+ if (arguments -> thread_backup_conn == NULL )
2711+ arguments -> thread_backup_conn = pgut_connect (pgut_dbname );
27152712
27162713 //elog(LOG, "db %i pg_ptrack_get_block(%i, %i, %u)",dbOid, tblsOid, relOid, blknum);
2717- res = pgut_execute (tmp_conn , "SELECT pg_ptrack_get_block_2($1, $2, $3, $4)" ,
2714+ res = pgut_execute_parallel (arguments -> thread_backup_conn ,
2715+ arguments -> thread_cancel_conn ,
2716+ "SELECT pg_ptrack_get_block_2($1, $2, $3, $4)" ,
27182717 4 , (const char * * )params , true);
27192718
27202719 if (PQnfields (res ) != 1 )
@@ -2735,7 +2734,6 @@ pg_ptrack_get_block(Oid dbOid,
27352734 result_size );
27362735
27372736 PQclear (res );
2738- pgut_disconnect (tmp_conn );
27392737
27402738 pfree (params [0 ]);
27412739 pfree (params [1 ]);
0 commit comments