Re: pg_basebackup check vs Windows file path limits - Mailing list pgsql-hackers
From | Andrew Dunstan |
---|---|
Subject | Re: pg_basebackup check vs Windows file path limits |
Date | |
Msg-id | 8e3130c2-5c51-5cd5-9f0d-b0cd938bcd6b@dunslane.net Whole thread Raw |
In response to | Re: pg_basebackup check vs Windows file path limits (Andrew Dunstan <andrew@dunslane.net>) |
Responses |
Re: pg_basebackup check vs Windows file path limits
Re: pg_basebackup check vs Windows file path limits |
List | pgsql-hackers |
On 2023-07-06 Th 12:38, Andrew Dunstan wrote:
On 2023-07-06 Th 09:50, Daniel Gustafsson wrote:On 5 Jul 2023, at 14:49, Andrew Dunstan <andrew@dunslane.net> wrote: On 2023-07-04 Tu 16:54, Daniel Gustafsson wrote:On 4 Jul 2023, at 20:19, Andrew Dunstan <andrew@dunslane.net> wrote: But sadly we're kinda back where we started. fairywren is failing on REL_16_STABLE. Before the changes the failure occurred because the test script was unable to create the file with a path > 255. Now that we have a way to create the file the test for pg_basebackup to reject files with names > 100 fails, I presume because the server can't actually see the file. At this stage I'm thinking the best thing would be to skip the test altogether on windows if the path is longer than 255.That does sound like a fairly large hammer for a nail small enough that we should be able to fix it, but I don't have any other good ideas off the cuff.Not sure it's such a big hammer. Here's a patch.No objections to the patch, LGTM.
Thanks. pushed with a couple of tweaks.
Unfortunately, skipping this has now exposed a further problem in this test.
Here's the relevant log extracted from <https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=fairywren&dt=2023-07-07%2022%3A03%3A06>, starting with the skip mentioned above:
[23:29:21.661](0.002s) ok 98 # skip File path too long ### Stopping node "main" using mode fast # Running: pg_ctl -D C:\\tools\\nmsys64\\home\\pgrunner\\bf\\root\\REL_16_STABLE\\pgsql.build/testrun/pg_basebackup/010_pg_basebackup/data/t_010_pg_basebackup_main_data/pgdata -m fast stop waiting for server to shut down.... done server stopped # No postmaster PID for node "main" Junction created for C:\\tools\\nmsys64\\home\\pgrunner\\bf\\root\\REL_16_STABLE\\pgsql.build\\testrun\\pg_basebackup\\010_pg_basebackup\\data\\t_010_pg_basebackup_main_data\\pgdata\\pg_replslot <<===>> C:\\tools\\nmsys64\\home\\pgrunner\\bf\\root\\REL_16_STABLE\\pgsql.build\\testrun\\pg_basebackup\\010_pg_basebackup\\data\\tmp_test_pjj2\\pg_replslot ### Starting node "main" # Running: pg_ctl -w -D C:\\tools\\nmsys64\\home\\pgrunner\\bf\\root\\REL_16_STABLE\\pgsql.build/testrun/pg_basebackup/010_pg_basebackup/data/t_010_pg_basebackup_main_data/pgdata -l C:\\tools\\nmsys64\\home\\pgrunner\\bf\\root\\REL_16_STABLE\\pgsql.build/testrun/pg_basebackup/010_pg_basebackup/log/010_pg_basebackup_main.log -o --cluster-name=main start waiting for server to start.... done server started # Postmaster PID for node "main" is 5184 Junction created for C:\\tools\\nmsys64\\tmp\\6zkMt003MF\\tempdir <<===>> C:\\tools\\nmsys64\\home\\pgrunner\\bf\\root\\REL_16_STABLE\\pgsql.build\\testrun\\pg_basebackup\\010_pg_basebackup\\data\\tmp_test_pjj2 # Taking pg_basebackup tarbackup2 from node "main" # Running: pg_basebackup -D C:\\tools\\nmsys64\\home\\pgrunner\\bf\\root\\REL_16_STABLE\\pgsql.build/testrun/pg_basebackup/010_pg_basebackup/data/t_010_pg_basebackup_main_data/backup/tarbackup2 -h C:/tools/nmsys64/tmp/63ohSgsh21 -p 54699 --checkpoint fast --no-sync -Ft WARNING: aborting backup due to backend exiting before pg_backup_stop was called pg_basebackup: error: could not initiate base backup: ERROR: could not get junction for "./pg_replslot": More data is available. It's worth pointing out that the path for the replslot junction is almost as long as the original path. Since this test is passing on HEAD which has slightly shorter paths, I'm wondering if we should change this:
rename("$pgdata/pg_replslot", "$tempdir/pg_replslot")
or BAIL_OUT "could not move $pgdata/pg_replslot";
dir_symlink("$tempdir/pg_replslot", "$pgdata/pg_replslot")
or BAIL_OUT "could not symlink to $pgdata/pg_replslot";
to use the much shorter $sys_tempdir created a few lines below.
cheers
andrew
-- Andrew Dunstan EDB: https://www.enterprisedb.com
pgsql-hackers by date: