@@ -94,7 +94,8 @@ do_restore_or_validate(time_t target_backup_id, pgRecoveryTarget *rt,
94
94
95
95
if (is_restore &&
96
96
target_backup_id == INVALID_BACKUP_ID &&
97
- current_backup -> status != BACKUP_STATUS_OK )
97
+ (current_backup -> status != BACKUP_STATUS_OK &&
98
+ current_backup -> status != BACKUP_STATUS_DONE ))
98
99
{
99
100
elog (WARNING ,"Skipping backup %s, because it has non-valid status: %s" ,
100
101
base36enc (current_backup -> start_time ),status2str (current_backup -> status ));
@@ -110,7 +111,7 @@ do_restore_or_validate(time_t target_backup_id, pgRecoveryTarget *rt,
110
111
{
111
112
112
113
/* backup is not ok,
113
- * but in case of CORRUPT, ORPHAN orDONE revalidation is possible
114
+ * but in case of CORRUPT orORPHAN revalidation is possible
114
115
* unless --no-validate is used,
115
116
* in other cases throw an error.
116
117
*/
@@ -119,10 +120,10 @@ do_restore_or_validate(time_t target_backup_id, pgRecoveryTarget *rt,
119
120
// 3. restore -i INVALID_ID <- allowed revalidate and restore
120
121
// 4. restore <- impossible
121
122
// 5. restore --no-validate <- forbidden
122
- if (current_backup -> status != BACKUP_STATUS_OK )
123
+ if (current_backup -> status != BACKUP_STATUS_OK &&
124
+ current_backup -> status != BACKUP_STATUS_DONE )
123
125
{
124
- if ((current_backup -> status == BACKUP_STATUS_DONE ||
125
- current_backup -> status == BACKUP_STATUS_ORPHAN ||
126
+ if ((current_backup -> status == BACKUP_STATUS_ORPHAN ||
126
127
current_backup -> status == BACKUP_STATUS_CORRUPT ||
127
128
current_backup -> status == BACKUP_STATUS_RUNNING )
128
129
&& !rt -> no_validate )
@@ -205,7 +206,8 @@ do_restore_or_validate(time_t target_backup_id, pgRecoveryTarget *rt,
205
206
*/
206
207
if (is_parent (missing_backup_start_time ,backup , false))
207
208
{
208
- if (backup -> status == BACKUP_STATUS_OK )
209
+ if (backup -> status == BACKUP_STATUS_OK ||
210
+ backup -> status == BACKUP_STATUS_DONE )
209
211
{
210
212
write_backup_status (backup ,BACKUP_STATUS_ORPHAN );
211
213
@@ -238,7 +240,8 @@ do_restore_or_validate(time_t target_backup_id, pgRecoveryTarget *rt,
238
240
239
241
if (is_parent (tmp_backup -> start_time ,backup , false))
240
242
{
241
- if (backup -> status == BACKUP_STATUS_OK )
243
+ if (backup -> status == BACKUP_STATUS_OK ||
244
+ backup -> status == BACKUP_STATUS_DONE )
242
245
{
243
246
write_backup_status (backup ,BACKUP_STATUS_ORPHAN );
244
247
@@ -374,7 +377,8 @@ do_restore_or_validate(time_t target_backup_id, pgRecoveryTarget *rt,
374
377
375
378
if (is_parent (corrupted_backup -> start_time ,backup , false))
376
379
{
377
- if (backup -> status == BACKUP_STATUS_OK )
380
+ if (backup -> status == BACKUP_STATUS_OK ||
381
+ backup -> status == BACKUP_STATUS_DONE )
378
382
{
379
383
write_backup_status (backup ,BACKUP_STATUS_ORPHAN );
380
384
@@ -393,7 +397,8 @@ do_restore_or_validate(time_t target_backup_id, pgRecoveryTarget *rt,
393
397
* If dest backup is corrupted or was orphaned in previous check
394
398
* produce corresponding error message
395
399
*/
396
- if (dest_backup -> status == BACKUP_STATUS_OK )
400
+ if (dest_backup -> status == BACKUP_STATUS_OK ||
401
+ dest_backup -> status == BACKUP_STATUS_DONE )
397
402
{
398
403
if (rt -> no_validate )
399
404
elog (INFO ,"Backup %s is used without validation." ,base36enc (dest_backup -> start_time ));
@@ -473,7 +478,8 @@ restore_backup(pgBackup *backup, const char *external_dir_str)
473
478
bool restore_isok = true;
474
479
475
480
476
- if (backup -> status != BACKUP_STATUS_OK )
481
+ if (backup -> status != BACKUP_STATUS_OK &&
482
+ backup -> status != BACKUP_STATUS_DONE )
477
483
elog (ERROR ,"Backup %s cannot be restored because it is not valid" ,
478
484
base36enc (backup -> start_time ));
479
485