You've already forked pg_probackup
mirror of
https://github.com/postgrespro/pg_probackup.git
synced 2025-07-08 06:11:55 +02:00
dir_is_empty() should be aware about MyLocation
This commit is contained in:
@ -489,7 +489,7 @@ pgBackupCreateDir(pgBackup *backup)
|
|||||||
|
|
||||||
pgBackupGetPath(backup, path, lengthof(path), NULL);
|
pgBackupGetPath(backup, path, lengthof(path), NULL);
|
||||||
|
|
||||||
if (!dir_is_empty(path))
|
if (!dir_is_empty(path, FIO_BACKUP_HOST))
|
||||||
elog(ERROR, "backup destination is not empty \"%s\"", path);
|
elog(ERROR, "backup destination is not empty \"%s\"", path);
|
||||||
|
|
||||||
fio_mkdir(path, DIR_PERMISSION, FIO_BACKUP_HOST);
|
fio_mkdir(path, DIR_PERMISSION, FIO_BACKUP_HOST);
|
||||||
|
12
src/dir.c
12
src/dir.c
@ -1277,7 +1277,7 @@ check_tablespace_mapping(pgBackup *backup)
|
|||||||
elog(ERROR, "tablespace directory is not an absolute path: %s\n",
|
elog(ERROR, "tablespace directory is not an absolute path: %s\n",
|
||||||
linked_path);
|
linked_path);
|
||||||
|
|
||||||
if (!dir_is_empty(linked_path))
|
if (!dir_is_empty(linked_path, FIO_DB_HOST))
|
||||||
elog(ERROR, "restore tablespace destination is not empty: \"%s\"",
|
elog(ERROR, "restore tablespace destination is not empty: \"%s\"",
|
||||||
linked_path);
|
linked_path);
|
||||||
}
|
}
|
||||||
@ -1619,12 +1619,12 @@ dir_read_file_list(const char *root, const char *external_prefix,
|
|||||||
* Check if directory empty.
|
* Check if directory empty.
|
||||||
*/
|
*/
|
||||||
bool
|
bool
|
||||||
dir_is_empty(const char *path)
|
dir_is_empty(const char *path, fio_location location)
|
||||||
{
|
{
|
||||||
DIR *dir;
|
DIR *dir;
|
||||||
struct dirent *dir_ent;
|
struct dirent *dir_ent;
|
||||||
|
|
||||||
dir = opendir(path);
|
dir = fio_opendir(path, location);
|
||||||
if (dir == NULL)
|
if (dir == NULL)
|
||||||
{
|
{
|
||||||
/* Directory in path doesn't exist */
|
/* Directory in path doesn't exist */
|
||||||
@ -1634,7 +1634,7 @@ dir_is_empty(const char *path)
|
|||||||
}
|
}
|
||||||
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
while ((dir_ent = readdir(dir)))
|
while ((dir_ent = fio_readdir(dir)))
|
||||||
{
|
{
|
||||||
/* Skip entries point current dir or parent dir */
|
/* Skip entries point current dir or parent dir */
|
||||||
if (strcmp(dir_ent->d_name, ".") == 0 ||
|
if (strcmp(dir_ent->d_name, ".") == 0 ||
|
||||||
@ -1642,13 +1642,13 @@ dir_is_empty(const char *path)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Directory is not empty */
|
/* Directory is not empty */
|
||||||
closedir(dir);
|
fio_closedir(dir);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (errno)
|
if (errno)
|
||||||
elog(ERROR, "cannot read directory \"%s\": %s", path, strerror(errno));
|
elog(ERROR, "cannot read directory \"%s\": %s", path, strerror(errno));
|
||||||
|
|
||||||
closedir(dir);
|
fio_closedir(dir);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -359,7 +359,7 @@ validate_wal(pgBackup *backup, const char *archivedir,
|
|||||||
* If recovery target is provided, ensure that archive files exist in
|
* If recovery target is provided, ensure that archive files exist in
|
||||||
* archive directory.
|
* archive directory.
|
||||||
*/
|
*/
|
||||||
if (dir_is_empty(archivedir))
|
if (dir_is_empty(archivedir, FIO_BACKUP_HOST))
|
||||||
elog(ERROR, "WAL archive is empty. You cannot restore backup to a recovery target without WAL archive.");
|
elog(ERROR, "WAL archive is empty. You cannot restore backup to a recovery target without WAL archive.");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -583,7 +583,7 @@ extern void makeExternalDirPathByNum(char *ret_path, const char *pattern_path,
|
|||||||
extern bool backup_contains_external(const char *dir, parray *dirs_list);
|
extern bool backup_contains_external(const char *dir, parray *dirs_list);
|
||||||
|
|
||||||
extern int dir_create_dir(const char *path, mode_t mode);
|
extern int dir_create_dir(const char *path, mode_t mode);
|
||||||
extern bool dir_is_empty(const char *path);
|
extern bool dir_is_empty(const char *path, fio_location location);
|
||||||
|
|
||||||
extern bool fileExists(const char *path, fio_location location);
|
extern bool fileExists(const char *path, fio_location location);
|
||||||
extern size_t pgFileSize(const char *path);
|
extern size_t pgFileSize(const char *path);
|
||||||
|
@ -64,7 +64,7 @@ do_restore_or_validate(time_t target_backup_id, pgRecoveryTarget *rt,
|
|||||||
elog(ERROR,
|
elog(ERROR,
|
||||||
"required parameter not specified: PGDATA (-D, --pgdata)");
|
"required parameter not specified: PGDATA (-D, --pgdata)");
|
||||||
/* Check if restore destination empty */
|
/* Check if restore destination empty */
|
||||||
if (!dir_is_empty(instance_config.pgdata))
|
if (!dir_is_empty(instance_config.pgdata, FIO_DB_HOST))
|
||||||
elog(ERROR, "restore destination is not empty: \"%s\"",
|
elog(ERROR, "restore destination is not empty: \"%s\"",
|
||||||
instance_config.pgdata);
|
instance_config.pgdata);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user