22
22
do_delete (time_t backup_id )
23
23
{
24
24
int i ;
25
- int b_index ;
26
- parray * backup_list ;
27
- pgBackup * last_backup = NULL ;
25
+ int last_index ;
26
+ parray * backup_list ;
27
+ pgBackup * last_backup = NULL ;
28
28
29
29
/* DATE are always required */
30
30
if (backup_id == 0 )
@@ -49,27 +49,33 @@ do_delete(time_t backup_id)
49
49
elog (ERROR , "no backup found, cannot delete." );
50
50
51
51
found_backup :
52
- b_index = i ;
52
+ last_index = i ;
53
53
/* check for interrupt */
54
54
if (interrupted )
55
55
elog (ERROR , "interrupted during delete backup" );
56
56
57
57
/* just do it */
58
58
pgBackupDeleteFiles (last_backup );
59
59
60
- if (last_backup -> status == BACKUP_STATUS_ERROR )
60
+ /*
61
+ * Do not remove next backups, if current backup is not full backup and
62
+ * was finished incorrectly.
63
+ */
64
+ if (last_backup -> status != BACKUP_STATUS_OK &&
65
+ last_backup -> status != BACKUP_STATUS_CORRUPT &&
66
+ last_backup -> backup_mode != BACKUP_MODE_FULL )
61
67
return 0 ;
62
68
63
- /* remove all increments after removed backup */
64
- for (i = b_index - 1 ; i >= 0 ; i -- )
69
+ /* Remove all increments after removed backup */
70
+ for (i = last_index - 1 ; i >= 0 ; i -- )
65
71
{
66
- pgBackup * backup = (pgBackup * ) parray_get (backup_list , i );
72
+ pgBackup * backup = (pgBackup * ) parray_get (backup_list , i );
73
+
74
+ /* Stop removing increments */
67
75
if (backup -> backup_mode >= BACKUP_MODE_FULL )
68
76
break ;
69
- if ((backup -> status == BACKUP_STATUS_OK || backup -> status == BACKUP_STATUS_CORRUPT ) &&
70
- (backup -> backup_mode == BACKUP_MODE_DIFF_PAGE || backup -> backup_mode == BACKUP_MODE_DIFF_PTRACK )
71
- )
72
- pgBackupDeleteFiles (backup );
77
+
78
+ pgBackupDeleteFiles (backup );
73
79
}
74
80
75
81
/* cleanup */
0 commit comments