@@ -59,7 +59,7 @@ do_merge(time_t backup_id)
59
59
if (instance_name == NULL )
60
60
elog (ERROR , "required parameter is not specified: --instance" );
61
61
62
- elog (LOG , "Merge started" );
62
+ elog (INFO , "Merge started" );
63
63
64
64
catalog_lock ();
65
65
@@ -129,17 +129,21 @@ do_merge(time_t backup_id)
129
129
*/
130
130
for (i = full_backup_idx ; i > dest_backup_idx ; i -- )
131
131
{
132
- pgBackup * to_backup = (pgBackup * ) parray_get (backups , i );
133
132
pgBackup * from_backup = (pgBackup * ) parray_get (backups , i - 1 );
134
133
135
- merge_backups (to_backup , from_backup );
134
+ full_backup = (pgBackup * ) parray_get (backups , i );
135
+ merge_backups (full_backup , from_backup );
136
136
}
137
137
138
+ pgBackupValidate (full_backup );
139
+ if (full_backup -> status == BACKUP_STATUS_CORRUPT )
140
+ elog (ERROR , "Merging of backup %s failed" , base36enc (backup_id ));
141
+
138
142
/* cleanup */
139
143
parray_walk (backups , pgBackupFree );
140
144
parray_free (backups );
141
145
142
- elog (LOG , "Merge completed" );
146
+ elog (INFO , "Merge of backup %s completed" , base36enc ( backup_id ) );
143
147
}
144
148
145
149
/*
@@ -167,6 +171,28 @@ merge_backups(pgBackup *to_backup, pgBackup *from_backup)
167
171
168
172
elog (INFO , "Merging backup %s with backup %s" , from_backup_id , to_backup_id );
169
173
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
+
170
196
/*
171
197
* Previous merging was interrupted during deleting source backup. It is
172
198
* safe just to delete it again.
@@ -302,6 +328,7 @@ merge_backups(pgBackup *to_backup, pgBackup *from_backup)
302
328
/*
303
329
* Rename FULL backup directory.
304
330
*/
331
+ elog (INFO , "Rename %s to %s" , to_backup_id , from_backup_id );
305
332
if (rename (to_backup_path , from_backup_path ) == -1 )
306
333
elog (ERROR , "Could not rename directory \"%s\" to \"%s\": %s" ,
307
334
to_backup_path , from_backup_path , strerror (errno ));
0 commit comments