mirror of
https://github.com/postgres/postgres.git
synced 2025-07-09 22:41:56 +03:00
Refactor pg_rewind for more clear decision making.
Deciding what to do with each file is now a separate step after all the necessary information has been gathered. It is more clear that way. Previously, the decision-making was divided between process_source_file() and process_target_file(), and it was a bit hard to piece together what the overall rules were. Reviewed-by: Kyotaro Horiguchi, Soumyadeep Chakraborty Discussion: https://www.postgresql.org/message-id/0c5b3783-af52-3ee5-f8fa-6e794061f70d%40iki.fi
This commit is contained in:
@ -126,8 +126,9 @@ void
|
||||
remove_target(file_entry_t *entry)
|
||||
{
|
||||
Assert(entry->action == FILE_ACTION_REMOVE);
|
||||
Assert(entry->target_exists);
|
||||
|
||||
switch (entry->type)
|
||||
switch (entry->target_type)
|
||||
{
|
||||
case FILE_TYPE_DIRECTORY:
|
||||
remove_target_dir(entry->path);
|
||||
@ -140,6 +141,10 @@ remove_target(file_entry_t *entry)
|
||||
case FILE_TYPE_SYMLINK:
|
||||
remove_target_symlink(entry->path);
|
||||
break;
|
||||
|
||||
case FILE_TYPE_UNDEFINED:
|
||||
pg_fatal("undefined file type for \"%s\"", entry->path);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -147,21 +152,26 @@ void
|
||||
create_target(file_entry_t *entry)
|
||||
{
|
||||
Assert(entry->action == FILE_ACTION_CREATE);
|
||||
Assert(!entry->target_exists);
|
||||
|
||||
switch (entry->type)
|
||||
switch (entry->source_type)
|
||||
{
|
||||
case FILE_TYPE_DIRECTORY:
|
||||
create_target_dir(entry->path);
|
||||
break;
|
||||
|
||||
case FILE_TYPE_SYMLINK:
|
||||
create_target_symlink(entry->path, entry->link_target);
|
||||
create_target_symlink(entry->path, entry->source_link_target);
|
||||
break;
|
||||
|
||||
case FILE_TYPE_REGULAR:
|
||||
/* can't happen. Regular files are created with open_target_file. */
|
||||
pg_fatal("invalid action (CREATE) for regular file");
|
||||
break;
|
||||
|
||||
case FILE_TYPE_UNDEFINED:
|
||||
pg_fatal("undefined file type for \"%s\"", entry->path);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user