@@ -57,14 +57,6 @@ static void delete_online_wal_backup(void);
57
57
58
58
static bool dirExists (const char * path );
59
59
60
- static void execute_freeze (void );
61
- static void execute_unfreeze (void );
62
- static void execute_split (parray * tblspc_list );
63
- static void execute_resync (void );
64
- static void execute_mount (parray * tblspcmp_list );
65
- static void execute_umount (void );
66
- static void execute_script (const char * mode ,bool is_cleanup ,parray * output );
67
- static void snapshot_cleanup (bool fatal ,void * userdata );
68
60
static void add_files (parray * files ,const char * root ,bool add_root ,bool is_pgdata );
69
61
static int strCompare (const void * str1 ,const void * str2 );
70
62
static void create_file_list (parray * files ,const char * root ,const char * prefix ,bool is_append );
@@ -241,20 +233,6 @@ do_backup_database(parray *backup_list, pgBackupOption bkupopt)
241
233
for (i = 0 ;pgdata_exclude [i ];i ++ );/* find first empty slot */
242
234
pgdata_exclude [i ]= PG_TBLSPC_DIR ;
243
235
244
- /* set the error processing for the snapshot */
245
- pgut_atexit_push (snapshot_cleanup ,cleanup_list );
246
-
247
- /* create snapshot volume */
248
- if (!check )
249
- {
250
- /* freeze I/O of the file-system */
251
- execute_freeze ();
252
- /* create the snapshot, and obtain the name of TABLESPACE backup from snapshot */
253
- execute_split (tblspc_list );
254
- /* unfreeze I/O of the file-system */
255
- execute_unfreeze ();
256
- }
257
-
258
236
/*
259
237
* when DB cluster is not contained in the backup from the snapshot,
260
238
* DB cluster is added to the backup file list from non-snapshot.
@@ -315,10 +293,6 @@ do_backup_database(parray *backup_list, pgBackupOption bkupopt)
315
293
/* create file list of non-snapshot objects */
316
294
create_file_list (files ,pgdata ,NULL , false);
317
295
318
- /* mount snapshot volume to file-system, and obtain that mounted directory */
319
- if (!check )
320
- execute_mount (tblspcmp_list );
321
-
322
296
/* backup files from snapshot volume */
323
297
for (i = 0 ;i < parray_num (tblspcmp_list );i ++ )
324
298
{
@@ -414,17 +388,7 @@ do_backup_database(parray *backup_list, pgBackupOption bkupopt)
414
388
parray_walk (tblspcmp_list ,free );
415
389
parray_free (tblspcmp_list );
416
390
417
- /* snapshot became unnecessary, annul the snapshot */
418
- if (!check )
419
- {
420
- /* unmount directory of mounted snapshot volume */
421
- execute_umount ();
422
- /* annul the snapshot */
423
- execute_resync ();
424
- }
425
391
426
- /* unset the error processing for the snapshot */
427
- pgut_atexit_pop (snapshot_cleanup ,cleanup_list );
428
392
/* don't use 'parray_walk'. element of parray not allocate memory by malloc */
429
393
parray_free (cleanup_list );
430
394
PQclear (tblspc_res );
@@ -1557,200 +1521,6 @@ delete_arclog_link(void)
1557
1521
parray_free (files );
1558
1522
}
1559
1523
1560
- /*
1561
- * Execute the command 'freeze' of snapshot-script.
1562
- * When the command ends normally, 'unfreeze' is added to the cleanup list.
1563
- */
1564
- static void
1565
- execute_freeze (void )
1566
- {
1567
- /* append 'unfreeze' command to cleanup list */
1568
- parray_append (cleanup_list ,SNAPSHOT_UNFREEZE );
1569
-
1570
- /* execute 'freeze' command */
1571
- execute_script (SNAPSHOT_FREEZE , false,NULL );
1572
- }
1573
-
1574
- /*
1575
- * Execute the command 'unfreeze' of snapshot-script.
1576
- * Remove 'unfreeze' from the cleanup list before executing the command
1577
- * when 'unfreeze' is included in the cleanup list.
1578
- */
1579
- static void
1580
- execute_unfreeze (void )
1581
- {
1582
- int i ;
1583
-
1584
- /* remove 'unfreeze' command from cleanup list */
1585
- for (i = 0 ;i < parray_num (cleanup_list );i ++ )
1586
- {
1587
- char * mode ;
1588
-
1589
- mode = (char * )parray_get (cleanup_list ,i );
1590
- if (strcmp (mode ,SNAPSHOT_UNFREEZE )== 0 )
1591
- {
1592
- parray_remove (cleanup_list ,i );
1593
- break ;
1594
- }
1595
- }
1596
- /* execute 'unfreeze' command */
1597
- execute_script (SNAPSHOT_UNFREEZE , false,NULL );
1598
- }
1599
-
1600
- /*
1601
- * Execute the command 'split' of snapshot-script.
1602
- * When the command ends normally, 'resync' is added to the cleanup list.
1603
- */
1604
- static void
1605
- execute_split (parray * tblspc_list )
1606
- {
1607
- /* append 'resync' command to cleanup list */
1608
- parray_append (cleanup_list ,SNAPSHOT_RESYNC );
1609
-
1610
- /* execute 'split' command */
1611
- execute_script (SNAPSHOT_SPLIT , false,tblspc_list );
1612
- }
1613
-
1614
- /*
1615
- * Execute the command 'resync' of snapshot-script.
1616
- * Remove 'resync' from the cleanup list before executing the command
1617
- * when 'resync' is included in the cleanup list.
1618
- */
1619
- static void
1620
- execute_resync (void )
1621
- {
1622
- int i ;
1623
-
1624
- /* remove 'resync' command from cleanup list */
1625
- for (i = 0 ;i < parray_num (cleanup_list );i ++ )
1626
- {
1627
- char * mode ;
1628
-
1629
- mode = (char * )parray_get (cleanup_list ,i );
1630
- if (strcmp (mode ,SNAPSHOT_RESYNC )== 0 )
1631
- {
1632
- parray_remove (cleanup_list ,i );
1633
- break ;
1634
- }
1635
- }
1636
- /* execute 'resync' command */
1637
- execute_script (SNAPSHOT_RESYNC , false,NULL );
1638
- }
1639
-
1640
- /*
1641
- * Execute the command 'mount' of snapshot-script.
1642
- * When the command ends normally, 'umount' is added to the cleanup list.
1643
- */
1644
- static void
1645
- execute_mount (parray * tblspcmp_list )
1646
- {
1647
- /* append 'umount' command to cleanup list */
1648
- parray_append (cleanup_list ,SNAPSHOT_UMOUNT );
1649
-
1650
- /* execute 'mount' command */
1651
- execute_script (SNAPSHOT_MOUNT , false,tblspcmp_list );
1652
- }
1653
-
1654
- /*
1655
- * Execute the command 'umount' of snapshot-script.
1656
- * Remove 'umount' from the cleanup list before executing the command
1657
- * when 'umount' is included in the cleanup list.
1658
- */
1659
- static void
1660
- execute_umount (void )
1661
- {
1662
- int i ;
1663
-
1664
- /* remove 'umount' command from cleanup list */
1665
- for (i = 0 ;i < parray_num (cleanup_list );i ++ )
1666
- {
1667
- char * mode = (char * )parray_get (cleanup_list ,i );
1668
-
1669
- if (strcmp (mode ,SNAPSHOT_UMOUNT )== 0 )
1670
- {
1671
- parray_remove (cleanup_list ,i );
1672
- break ;
1673
- }
1674
- }
1675
- /* execute 'umount' command */
1676
- execute_script (SNAPSHOT_UMOUNT , false,NULL );
1677
- }
1678
-
1679
- /*
1680
- * Execute the snapshot-script in the specified mode.
1681
- * A standard output of snapshot-script is stored in the array given to the parameter.
1682
- * If is_cleanup is TRUE, processing is continued.
1683
- */
1684
- static void
1685
- execute_script (const char * mode ,bool is_cleanup ,parray * output )
1686
- {
1687
- char ss_script [MAXPGPATH ];
1688
- char command [1024 ];
1689
- char fline [2048 ];
1690
- int num ;
1691
- FILE * out ;
1692
- parray * lines ;
1693
-
1694
- /* obtain the path of snapshot-script. */
1695
- join_path_components (ss_script ,backup_path ,SNAPSHOT_SCRIPT_FILE );
1696
- snprintf (command ,sizeof (command ),
1697
- "%s %s %s" ,ss_script ,mode ,is_cleanup ?"cleanup" :"" );
1698
-
1699
- /* execute snapshot-script */
1700
- out = popen (command ,"r" );
1701
- if (out == NULL )
1702
- elog (ERROR_SYSTEM ,_ ("could not execute snapshot-script: %s\n" ),strerror (errno ));
1703
-
1704
- /* read STDOUT and store into the array each line */
1705
- lines = parray_new ();
1706
- while (fgets (fline ,sizeof (fline ),out )!= NULL )
1707
- {
1708
- /* remove line separator */
1709
- if (fline [strlen (fline )- 1 ]== '\n' )
1710
- fline [strlen (fline )- 1 ]= '\0' ;
1711
- parray_append (lines ,pgut_strdup (fline ));
1712
- }
1713
- pclose (out );
1714
-
1715
- /*
1716
- * status of the command is obtained from the last element of the array
1717
- * if last element is not 'SUCCESS', that means ERROR.
1718
- */
1719
- num = parray_num (lines );
1720
- if (num <=0 || strcmp ((char * )parray_get (lines ,num - 1 ),"SUCCESS" )!= 0 )
1721
- elog (is_cleanup ?WARNING :ERROR_SYSTEM ,_ ("snapshot-script failed: %s" ),mode );
1722
-
1723
- /* if output is not NULL, concat array. */
1724
- if (output )
1725
- {
1726
- parray_remove (lines ,num - 1 );/* remove last element, that is command status */
1727
- parray_concat (output ,lines );
1728
- }
1729
- /* if output is NULL, clear directory list */
1730
- else
1731
- {
1732
- parray_walk (lines ,free );
1733
- parray_free (lines );
1734
- }
1735
- }
1736
-
1737
- /*
1738
- * Delete the unnecessary object created by snapshot-script.
1739
- * The command necessary for the deletion is given from the parameter.
1740
- * When the error occurs, this function is called.
1741
- */
1742
- static void
1743
- snapshot_cleanup (bool fatal ,void * userdata )
1744
- {
1745
- parray * cleanup_list ;
1746
- int i ;
1747
-
1748
- /* Execute snapshot-script for cleanup */
1749
- cleanup_list = (parray * )userdata ;
1750
- for (i = parray_num (cleanup_list )- 1 ;i >=0 ;i -- )
1751
- execute_script ((char * )parray_get (cleanup_list ,i ), true,NULL );
1752
- }
1753
-
1754
1524
/*
1755
1525
* Append files to the backup list array.
1756
1526
*/