@@ -59,7 +59,7 @@ do_merge(time_t backup_id)
5959 if (instance_name == NULL )
6060 elog (ERROR , "required parameter is not specified: --instance" );
6161
62- elog (LOG , "Merge started" );
62+ elog (INFO , "Merge started" );
6363
6464 catalog_lock ();
6565
@@ -129,17 +129,21 @@ do_merge(time_t backup_id)
129129 */
130130 for (i = full_backup_idx ; i > dest_backup_idx ; i -- )
131131 {
132- pgBackup * to_backup = (pgBackup * ) parray_get (backups , i );
133132 pgBackup * from_backup = (pgBackup * ) parray_get (backups , i - 1 );
134133
135- merge_backups (to_backup , from_backup );
134+ full_backup = (pgBackup * ) parray_get (backups , i );
135+ merge_backups (full_backup , from_backup );
136136 }
137137
138+ pgBackupValidate (full_backup );
139+ if (full_backup -> status == BACKUP_STATUS_CORRUPT )
140+ elog (ERROR , "Merging of backup %s failed" , base36enc (backup_id ));
141+
138142 /* cleanup */
139143 parray_walk (backups , pgBackupFree );
140144 parray_free (backups );
141145
142- elog (LOG , "Merge completed" );
146+ elog (INFO , "Merge of backup %s completed" , base36enc ( backup_id ) );
143147}
144148
145149/*
@@ -167,6 +171,28 @@ merge_backups(pgBackup *to_backup, pgBackup *from_backup)
167171
168172 elog (INFO , "Merging backup %s with backup %s" , from_backup_id , to_backup_id );
169173
174+ /*
175+ * Validate to_backup only if it is BACKUP_STATUS_OK. If it has
176+ * BACKUP_STATUS_MERGING status then it isn't valid backup until merging
177+ * finished.
178+ */
179+ if (to_backup -> status == BACKUP_STATUS_OK )
180+ {
181+ pgBackupValidate (to_backup );
182+ if (to_backup -> status == BACKUP_STATUS_CORRUPT )
183+ elog (ERROR , "Interrupt merging" );
184+ }
185+
186+ /*
187+ * It is OK to validate from_backup if it has BACKUP_STATUS_OK or
188+ * BACKUP_STATUS_MERGING status.
189+ */
190+ Assert (from_backup -> status == BACKUP_STATUS_OK ||
191+ from_backup -> status == BACKUP_STATUS_MERGING );
192+ pgBackupValidate (from_backup );
193+ if (from_backup -> status == BACKUP_STATUS_CORRUPT )
194+ elog (ERROR , "Interrupt merging" );
195+
170196 /*
171197 * Previous merging was interrupted during deleting source backup. It is
172198 * safe just to delete it again.
@@ -302,6 +328,7 @@ merge_backups(pgBackup *to_backup, pgBackup *from_backup)
302328 /*
303329 * Rename FULL backup directory.
304330 */
331+ elog (INFO , "Rename %s to %s" , to_backup_id , from_backup_id );
305332 if (rename (to_backup_path , from_backup_path ) == -1 )
306333 elog (ERROR , "Could not rename directory \"%s\" to \"%s\": %s" ,
307334 to_backup_path , from_backup_path , strerror (errno ));
0 commit comments