@@ -26,6 +26,8 @@ do_delete(time_t backup_id)
26
26
* delete_list ;
27
27
time_t parent_id = 0 ;
28
28
bool backup_found = false;
29
+ XLogRecPtr oldest_lsn = InvalidXLogRecPtr ;
30
+ TimeLineID oldest_tli = 0 ;
29
31
30
32
/* DATE are always required */
31
33
if (backup_id == 0 )
@@ -90,62 +92,30 @@ do_delete(time_t backup_id)
90
92
pgBackupDeleteFiles (backup );
91
93
}
92
94
93
- /* cleanup */
94
- parray_free (delete_list );
95
- parray_walk (backup_list , pgBackupFree );
96
- parray_free (backup_list );
97
-
95
+ /* Clean WAL segments */
98
96
if (delete_wal )
99
- do_deletewal (backup_id , false, false);
100
-
101
- return 0 ;
102
- }
103
-
104
- /*
105
- * Delete in archive WAL segments that are not needed anymore. The oldest
106
- * segment to be kept is the first segment that the oldest full backup
107
- * found around needs to keep.
108
- */
109
- int
110
- do_deletewal (time_t backup_id , bool strict , bool need_catalog_lock )
111
- {
112
- size_t i ;
113
- parray * backup_list ;
114
- XLogRecPtr oldest_lsn = InvalidXLogRecPtr ;
115
- TimeLineID oldest_tli ;
116
- bool backup_found = false;
117
-
118
- /* Get exclusive lock of backup catalog */
119
- if (need_catalog_lock )
120
- catalog_lock ();
121
-
122
- /* Find oldest LSN, used by backups */
123
- backup_list = catalog_get_backup_list (INVALID_BACKUP_ID );
124
- for (i = 0 ; i < parray_num (backup_list ); i ++ )
125
97
{
126
- pgBackup * last_backup = (pgBackup * ) parray_get (backup_list , i );
127
-
128
- if (last_backup -> status == BACKUP_STATUS_OK )
98
+ /* Find oldest LSN, used by backups */
99
+ for (i = (int ) parray_num (backup_list ) - 1 ; i >= 0 ; i -- )
129
100
{
130
- oldest_lsn = last_backup -> start_lsn ;
131
- oldest_tli = last_backup -> tli ;
101
+ pgBackup * backup = (pgBackup * ) parray_get (backup_list , (size_t ) i );
132
102
133
- if (strict && backup_id != 0 && backup_id >= last_backup -> start_time )
103
+ if (backup -> status == BACKUP_STATUS_OK )
134
104
{
135
- backup_found = true;
105
+ oldest_lsn = backup -> start_lsn ;
106
+ oldest_tli = backup -> tli ;
136
107
break ;
137
108
}
138
109
}
139
- }
140
110
141
- if ( strict && backup_id != 0 && backup_found == false)
142
- elog ( ERROR , "not found backup for deletwal command" );
111
+ delete_walfiles ( oldest_lsn , oldest_tli , true);
112
+ }
143
113
114
+ /* cleanup */
115
+ parray_free (delete_list );
144
116
parray_walk (backup_list , pgBackupFree );
145
117
parray_free (backup_list );
146
118
147
- delete_walfiles (oldest_lsn , oldest_tli , true);
148
-
149
119
return 0 ;
150
120
}
151
121
0 commit comments