@@ -28,10 +28,6 @@ do_delete(time_t backup_id)
2828 XLogRecPtr oldest_lsn = InvalidXLogRecPtr ;
2929 TimeLineID oldest_tli = 0 ;
3030
31- /* DATE are always required */
32- if (backup_id == 0 )
33- elog (ERROR , "required backup ID not specified" );
34-
3531 /* Get exclusive lock of backup catalog */
3632 catalog_lock ();
3733
@@ -40,55 +36,60 @@ do_delete(time_t backup_id)
4036 if (backup_list == NULL )
4137 elog (ERROR , "Failed to get backup list." );
4238
43- delete_list = parray_new ();
44-
45- /* Find backup to be deleted and make increment backups array to be deleted */
46- for (i = (int ) parray_num (backup_list ) - 1 ; i >= 0 ; i -- )
39+ if (backup_id != 0 )
4740 {
48- pgBackup * backup = ( pgBackup * ) parray_get ( backup_list , ( size_t ) i );
41+ delete_list = parray_new ( );
4942
50- if (backup -> start_time == backup_id )
43+ /* Find backup to be deleted and make increment backups array to be deleted */
44+ for (i = (int ) parray_num (backup_list ) - 1 ; i >= 0 ; i -- )
5145 {
52- parray_append (delete_list , backup );
53-
54- /*
55- * Do not remove next backups, if target backup was finished
56- * incorrectly.
57- */
58- if (backup -> status == BACKUP_STATUS_ERROR )
59- break ;
46+ pgBackup * backup = (pgBackup * ) parray_get (backup_list , (size_t ) i );
6047
61- /* Save backup id to retreive increment backups */
62- parent_id = backup -> start_time ;
63- backup_found = true;
64- }
65- else if (backup_found )
66- {
67- if (backup -> backup_mode != BACKUP_MODE_FULL &&
68- backup -> parent_backup == parent_id )
48+ if (backup -> start_time == backup_id )
6949 {
70- /* Append to delete list increment backup */
7150 parray_append (delete_list , backup );
51+
52+ /*
53+ * Do not remove next backups, if target backup was finished
54+ * incorrectly.
55+ */
56+ if (backup -> status == BACKUP_STATUS_ERROR )
57+ break ;
58+
7259 /* Save backup id to retreive increment backups */
7360 parent_id = backup -> start_time ;
61+ backup_found = true;
62+ }
63+ else if (backup_found )
64+ {
65+ if (backup -> backup_mode != BACKUP_MODE_FULL &&
66+ backup -> parent_backup == parent_id )
67+ {
68+ /* Append to delete list increment backup */
69+ parray_append (delete_list , backup );
70+ /* Save backup id to retreive increment backups */
71+ parent_id = backup -> start_time ;
72+ }
73+ else
74+ break ;
7475 }
75- else
76- break ;
7776 }
78- }
7977
80- if (parray_num (delete_list ) == 0 )
81- elog (ERROR , "no backup found, cannot delete" );
78+ if (parray_num (delete_list ) == 0 )
79+ elog (ERROR , "no backup found, cannot delete" );
8280
83- /* Delete backups from the end of list */
84- for (i = (int ) parray_num (delete_list ) - 1 ; i >= 0 ; i -- )
85- {
86- pgBackup * backup = (pgBackup * ) parray_get (delete_list , (size_t ) i );
81+ /* Delete backups from the end of list */
82+ for (i = (int ) parray_num (delete_list ) - 1 ; i >= 0 ; i -- )
83+ {
84+ pgBackup * backup = (pgBackup * ) parray_get (delete_list , (size_t ) i );
8785
88- if (interrupted )
89- elog (ERROR , "interrupted during delete backup" );
86+ if (interrupted )
87+ elog (ERROR , "interrupted during delete backup" );
9088
91- pgBackupDeleteFiles (backup );
89+ pgBackupDeleteFiles (backup );
90+ }
91+
92+ parray_free (delete_list );
9293 }
9394
9495 /* Clean WAL segments */
@@ -111,7 +112,6 @@ do_delete(time_t backup_id)
111112 }
112113
113114 /* cleanup */
114- parray_free (delete_list );
115115 parray_walk (backup_list , pgBackupFree );
116116 parray_free (backup_list );
117117
0 commit comments