2121#include <time.h>
2222#include <unistd.h>
2323
24- static pgBackup * read_backup_from_file (const char * path );
25-
26- #define BOOL_TO_STR (val )((val) ? "true" : "false")
24+ static const char * backupModes []= {"" ,"PAGE" ,"PTRACK" ,"FULL" };
25+ static pgBackup * readBackupControlFile (const char * path );
2726
2827static bool exit_hook_registered = false;
2928static char lock_file [MAXPGPATH ];
@@ -208,7 +207,7 @@ catalog_lock(void)
208207}
209208
210209/*
211- * Read backup meta information fromBACKUP_CONF_FILE .
210+ * Read backup meta information fromBACKUP_CONTROL_FILE .
212211 * If no backup matches, return NULL.
213212 */
214213pgBackup *
@@ -218,9 +217,9 @@ read_backup(time_t timestamp)
218217char conf_path [MAXPGPATH ];
219218
220219tmp .start_time = timestamp ;
221- pgBackupGetPath (& tmp ,conf_path ,lengthof (conf_path ),BACKUP_CONF_FILE );
220+ pgBackupGetPath (& tmp ,conf_path ,lengthof (conf_path ),BACKUP_CONTROL_FILE );
222221
223- return read_backup_from_file (conf_path );
222+ return readBackupControlFile (conf_path );
224223}
225224
226225static bool
@@ -274,9 +273,9 @@ catalog_get_backup_list(time_t requested_backup_id)
274273/* open subdirectory of specific backup */
275274join_path_components (date_path ,backups_path ,date_ent -> d_name );
276275
277- /* read backup information fromBACKUP_CONF_FILE */
278- snprintf (backup_conf_path ,MAXPGPATH ,"%s/%s" ,date_path ,BACKUP_CONF_FILE );
279- backup = read_backup_from_file (backup_conf_path );
276+ /* read backup information fromBACKUP_CONTROL_FILE */
277+ snprintf (backup_conf_path ,MAXPGPATH ,"%s/%s" ,date_path ,BACKUP_CONTROL_FILE );
278+ backup = readBackupControlFile (backup_conf_path );
280279
281280/* ignore corrupted backups */
282281if (backup )
@@ -370,94 +369,83 @@ pgBackupCreateDir(pgBackup *backup)
370369}
371370
372371/*
373- * Write configuration section of backup.in to stream "out".
372+ * Write information about backup.in to stream "out".
373+ * TODO improve comments
374374 */
375375void
376- pgBackupWriteConfigSection (FILE * out ,pgBackup * backup )
377- {
378- static const char * modes []= {"" ,"PAGE" ,"PTRACK" ,"FULL" };
379-
380- fprintf (out ,"# configuration\n" );
381- fprintf (out ,"BACKUP_MODE=%s\n" ,modes [backup -> backup_mode ]);
382- }
383-
384- /*
385- * Write result section of backup.in to stream "out".
386- */
387- void
388- pgBackupWriteResultSection (FILE * out ,pgBackup * backup )
376+ pgBackupWriteControl (FILE * out ,pgBackup * backup )
389377{
390378char timestamp [20 ];
391-
392- fprintf (out ,"# result\n" );
393- fprintf (out ,"TIMELINEID=%d\n" ,backup -> tli );
394- fprintf (out ,"START_LSN=%x/%08x\n" ,
379+ fprintf (out ,"#Configuration\n" );
380+ fprintf (out ,"backup-mode = %s\n" ,backupModes [backup -> backup_mode ]);
381+ fprintf (out ,"stream = %s\n" ,backup -> stream ?"true" :"false" );
382+
383+ fprintf (out ,"\n#Compatibility\n" );
384+ fprintf (out ,"block-size = %u\n" ,backup -> block_size );
385+ fprintf (out ,"xlog-block-size = %u\n" ,backup -> wal_block_size );
386+ fprintf (out ,"checksum-version = %u\n" ,backup -> checksum_version );
387+
388+ fprintf (out ,"\n#Result backup info\n" );
389+ fprintf (out ,"timelineid = %d\n" ,backup -> tli );
390+ fprintf (out ,"start-lsn = %x/%08x\n" ,
395391(uint32 ) (backup -> start_lsn >>32 ),
396392(uint32 )backup -> start_lsn );
397- fprintf (out ,"STOP_LSN= %x/%08x\n" ,
393+ fprintf (out ,"stop-lsn = %x/%08x\n" ,
398394(uint32 ) (backup -> stop_lsn >>32 ),
399395(uint32 )backup -> stop_lsn );
400396
401397time2iso (timestamp ,lengthof (timestamp ),backup -> start_time );
402- fprintf (out ,"START_TIME= '%s'\n" ,timestamp );
398+ fprintf (out ,"start-time = '%s'\n" ,timestamp );
403399if (backup -> end_time > 0 )
404400{
405401time2iso (timestamp ,lengthof (timestamp ),backup -> end_time );
406- fprintf (out ,"END_TIME= '%s'\n" ,timestamp );
402+ fprintf (out ,"end-time = '%s'\n" ,timestamp );
407403}
408- fprintf (out ,"RECOVERY_XID= " XID_FMT "\n" ,backup -> recovery_xid );
404+ fprintf (out ,"recovery-xid = " XID_FMT "\n" ,backup -> recovery_xid );
409405if (backup -> recovery_time > 0 )
410406{
411407time2iso (timestamp ,lengthof (timestamp ),backup -> recovery_time );
412- fprintf (out ,"RECOVERY_TIME= '%s'\n" ,timestamp );
408+ fprintf (out ,"recovery-time = '%s'\n" ,timestamp );
413409}
414410
411+ /* TODO rename the field? */
415412if (backup -> data_bytes != BYTES_INVALID )
416- fprintf (out ,"DATA_BYTES=" INT64_FORMAT "\n" ,
417- backup -> data_bytes );
418- fprintf (out ,"BLOCK_SIZE=%u\n" ,backup -> block_size );
419- fprintf (out ,"XLOG_BLOCK_SIZE=%u\n" ,backup -> wal_block_size );
420- fprintf (out ,"CHECKSUM_VERSION=%u\n" ,backup -> checksum_version );
421- fprintf (out ,"STREAM=%u\n" ,backup -> stream );
422-
423- fprintf (out ,"STATUS=%s\n" ,status2str (backup -> status ));
413+ fprintf (out ,"data-bytes = " INT64_FORMAT "\n" ,backup -> data_bytes );
414+
415+ fprintf (out ,"status = %s\n" ,status2str (backup -> status ));
424416if (backup -> parent_backup != 0 )
425417{
426418char * parent_backup = base36enc (backup -> parent_backup );
427- fprintf (out ,"PARENT_BACKUP= '%s'\n" ,parent_backup );
419+ fprintf (out ,"parent-backup-id = '%s'\n" ,parent_backup );
428420free (parent_backup );
429421}
430422}
431423
432- /* createBACKUP_CONF_FILE */
424+ /* createBACKUP_CONTROL_FILE */
433425void
434- pgBackupWriteConf (pgBackup * backup )
426+ pgBackupWriteBackupControlFile (pgBackup * backup )
435427{
436428FILE * fp = NULL ;
437429char ini_path [MAXPGPATH ];
438430
439- pgBackupGetPath (backup ,ini_path ,lengthof (ini_path ),BACKUP_CONF_FILE );
431+ pgBackupGetPath (backup ,ini_path ,lengthof (ini_path ),BACKUP_CONTROL_FILE );
440432fp = fopen (ini_path ,"wt" );
441433if (fp == NULL )
442434elog (ERROR ,"cannot open configuration file \"%s\": %s" ,ini_path ,
443435strerror (errno ));
444436
445- /* configuration section */
446- pgBackupWriteConfigSection (fp ,backup );
447-
448- /* result section */
449- pgBackupWriteResultSection (fp ,backup );
437+ pgBackupWriteControl (fp ,backup );
450438
451439fclose (fp );
452440}
453441
454442/*
455- * ReadBACKUP_CONF_FILE and create pgBackup.
443+ * ReadBACKUP_CONTROL_FILE and create pgBackup.
456444 * - Comment starts with ';'.
457445 * - Do not care section.
458446 */
459447static pgBackup *
460- read_backup_from_file (const char * path )
448+ readBackupControlFile (const char * path )
461449{
462450pgBackup * backup = pgut_new (pgBackup );
463451char * backup_mode = NULL ;
@@ -480,7 +468,7 @@ read_backup_from_file(const char *path)
480468{'u' ,0 ,"block-size" ,& backup -> block_size ,SOURCE_FILE_STRICT },
481469{'u' ,0 ,"xlog-block-size" ,& backup -> wal_block_size ,SOURCE_FILE_STRICT },
482470{'u' ,0 ,"checksum_version" ,& backup -> checksum_version ,SOURCE_FILE_STRICT },
483- {'u ' ,0 ,"stream" ,& backup -> stream ,SOURCE_FILE_STRICT },
471+ {'b ' ,0 ,"stream" ,& backup -> stream ,SOURCE_FILE_STRICT },
484472{'s' ,0 ,"status" ,& status ,SOURCE_FILE_STRICT },
485473{'s' ,0 ,"parent_backup" ,& parent_backup ,SOURCE_FILE_STRICT },
486474{0 }