Re: Avoid erroring out when unable to remove or parse logical rewrite files to save checkpoint work

Поиск
Список
Период
Сортировка
От Andres Freund
Тема Re: Avoid erroring out when unable to remove or parse logical rewrite files to save checkpoint work
Дата
Msg-id 20220711202533.fbhbjy4afcnjdz5d@awork3.anarazel.de
обсуждение исходный текст
Ответ на Re: Avoid erroring out when unable to remove or parse logical rewrite files to save checkpoint work  (Nathan Bossart <nathandbossart@gmail.com>)
Ответы Re: Avoid erroring out when unable to remove or parse logical rewrite files to save checkpoint work  (Nathan Bossart <nathandbossart@gmail.com>)
Список pgsql-hackers
Hi,

On 2022-04-08 13:18:57 -0700, Nathan Bossart wrote:
> @@ -1035,32 +1036,9 @@ ParseConfigDirectory(const char *includedir,
>  
>          join_path_components(filename, directory, de->d_name);
>          canonicalize_path(filename);
> -        if (stat(filename, &st) == 0)
> +        de_type = get_dirent_type(filename, de, true, elevel);
> +        if (de_type == PGFILETYPE_ERROR)
>          {
> -            if (!S_ISDIR(st.st_mode))
> -            {
> -                /* Add file to array, increasing its size in blocks of 32 */
> -                if (num_filenames >= size_filenames)
> -                {
> -                    size_filenames += 32;
> -                    filenames = (char **) repalloc(filenames,
> -                                            size_filenames * sizeof(char *));
> -                }
> -                filenames[num_filenames] = pstrdup(filename);
> -                num_filenames++;
> -            }
> -        }
> -        else
> -        {
> -            /*
> -             * stat does not care about permissions, so the most likely reason
> -             * a file can't be accessed now is if it was removed between the
> -             * directory listing and now.
> -             */
> -            ereport(elevel,
> -                    (errcode_for_file_access(),
> -                     errmsg("could not stat file \"%s\": %m",
> -                            filename)));
>              record_config_file_error(psprintf("could not stat file \"%s\"",
>                                                filename),
>                                       calling_file, calling_lineno,
> @@ -1068,6 +1046,18 @@ ParseConfigDirectory(const char *includedir,
>              status = false;
>              goto cleanup;
>          }
> +        else if (de_type != PGFILETYPE_DIR)
> +        {
> +            /* Add file to array, increasing its size in blocks of 32 */
> +            if (num_filenames >= size_filenames)
> +            {
> +                size_filenames += 32;
> +                filenames = (char **) repalloc(filenames,
> +                                               size_filenames * sizeof(char *));
> +            }
> +            filenames[num_filenames] = pstrdup(filename);
> +            num_filenames++;
> +        }
>      }
>  
>      if (num_filenames > 0)

Seems like the diff would be easier to read if it didn't move code around as
much?

Looks pretty reasonable, I'd be happy to commit it, I think.

Greetings,

Andres Freund



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Andres Freund
Дата:
Сообщение: Re: automatically generating node support functions
Следующее
От: Andres Freund
Дата:
Сообщение: Re: automatically generating node support functions