pgsql: Restructure pg_upgrade output directories for better idempotence
От | Michael Paquier |
---|---|
Тема | pgsql: Restructure pg_upgrade output directories for better idempotence |
Дата | |
Msg-id | E1nyksm-003EHZ-1Q@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Restructure pg_upgrade output directories for better idempotence 38bfae3 has moved the contents written to files by pg_upgrade under a new directory called pg_upgrade_output.d/ located in the new cluster's data folder, and it used a simple structure made of two subdirectories leading to a fixed structure: log/ and dump/. This design has made weaker pg_upgrade on repeated calls, as we could get failures when creating one or more of those directories, while potentially losing the logs of a previous run (logs are retained automatically on failure, and cleaned up on success unless --retain is specified). So a user would need to clean up pg_upgrade_output.d/ as an extra step for any repeated calls of pg_upgrade. The most common scenario here is --check followed by the actual upgrade, but one could see a failure when specifying an incorrect input argument value. Removing entirely the logs would have the disadvantage of removing all the past information, even if --retain was specified at some past step. This result is annoying for a lot of users and automated upgrade flows. So, rather than requiring a manual removal of pg_upgrade_output.d/, this redesigns the set of output directories in a more dynamic way, based on a suggestion from Tom Lane and Daniel Gustafsson. pg_upgrade_output.d/ is still the base path, but a second directory level is added, mostly named after an ISO-8601-formatted timestamp (in short human-readable, with milliseconds appended to the name to avoid any conflicts). The logs and dumps are saved within the same subdirectories as previously, as of log/ and dump/, but these are located inside the subdirectory named after the timestamp. The logs of a given run are removed only after a successful run if --retain is not used, and pg_upgrade_output.d/ is kept if there are any logs from a previous run. Note that previously, pg_upgrade would have kept the logs even after a successful --check but that was inconsistent compared to the case without --check when using --retain. The code in charge of the removal of the output directories is now refactored into a single routine. Two TAP tests are added with some --check commands (one failure case and one success case), to look after the issue fixed here. Note that the tests had to be tweaked a bit to fit with the new directory structure so as it can find any logs generated on failure. This is still going to require a change in the buildfarm client for the case where pg_upgrade is tested without the TAP test, though, but I'll tackle that with a separate patch where needed. Reported-by: Tushar Ahuja Author: Michael Paquier Reviewed-by: Daniel Gustafsson, Justin Pryzby Discussion: https://postgr.es/m/77e6ecaa-2785-97aa-f229-4b6e047cbd2b@enterprisedb.com Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/4fff78f00910af0137f9de7532f8eb21d08ab1c3 Modified Files -------------- doc/src/sgml/ref/pgupgrade.sgml | 5 ++- src/bin/pg_upgrade/check.c | 2 + src/bin/pg_upgrade/pg_upgrade.c | 69 ++++++++++++++++++++++------------ src/bin/pg_upgrade/pg_upgrade.h | 14 ++++--- src/bin/pg_upgrade/t/002_pg_upgrade.pl | 49 +++++++++++++++++++++++- src/bin/pg_upgrade/util.c | 42 +++++++++++++++++++++ 6 files changed, 150 insertions(+), 31 deletions(-)
В списке pgsql-committers по дате отправления:
Предыдущее
От: David RowleyДата:
Сообщение: pgsql: Harden Memoization code against broken data types
Следующее
От: Michael PaquierДата:
Сообщение: pgsql: Fix portability issue in TAP tests of psql for locales