Fix gs_probackup doesn't clean lockfile when exit.

This commit is contained in:
totaj
2023-03-08 16:27:55 +08:00
parent cee4f486b3
commit 1752658e26
4 changed files with 14 additions and 9 deletions

View File

@ -66,7 +66,7 @@ timelineInfoFree(void *tliInfo)
/* Iterate over locked backups and delete locks files */
void
unlink_lock_atexit(void)
unlink_lock_atexit(bool fatal, void *userdata)
{
int i;

View File

@ -537,12 +537,15 @@ static int do_validate_operate()
static int do_actual_operate()
{
int res = 0;
pgut_atexit_push(unlink_lock_atexit, NULL);
switch (backup_subcmd)
{
case ADD_INSTANCE_CMD:
return do_add_instance(&instance_config);
case DELETE_INSTANCE_CMD:
return do_delete_instance();
res = do_delete_instance();
break;
case INIT_CMD:
return do_init();
case BACKUP_CMD:
@ -556,14 +559,17 @@ static int do_actual_operate()
elog(ERROR, "required parameter not specified: BACKUP_MODE "
"(-b, --backup-mode)");
return do_backup(start_time, set_backup_params, no_validate, no_sync, backup_logs, backup_replslots);
res = do_backup(start_time, set_backup_params, no_validate, no_sync, backup_logs, backup_replslots);
break;
}
case RESTORE_CMD:
return do_restore_or_validate(current.backup_id,
res = do_restore_or_validate(current.backup_id,
recovery_target_options,
restore_params, no_sync);
break;
case VALIDATE_CMD:
return do_validate_operate();
res = do_validate_operate();
break;
case SHOW_CMD:
return do_show(instance_name, current.backup_id, show_archive);
case DELETE_CMD:
@ -589,10 +595,9 @@ static int do_actual_operate()
}
on_cleanup();
unlink_lock_atexit();
release_logfile();
return 0;
return res;
}
static void parse_backup_option_to_params(char *command, char *command_name)

View File

@ -478,7 +478,7 @@ extern bool fio_is_remote_simple(fio_location location);
extern void get_header_errormsg(Page page, char **errormsg);
extern void get_checksum_errormsg(Page page, char **errormsg,
BlockNumber absolute_blkno);
extern void unlink_lock_atexit(void);
extern void unlink_lock_atexit(bool fatal, void *userdata);
extern bool
datapagemap_is_set(datapagemap_t *map, BlockNumber blkno);

View File

@ -247,7 +247,7 @@ static HeapTuple GetDatabaseTuple(const char* dbname)
char* GetDatabaseCompatibility(const char* dbname)
{
if (!dbname)
if (!dbname || dbname[0] == 0)
return NULL;
HeapTuple tuple = GetDatabaseTuple(dbname);
if (!tuple)