On Sun, Jul 03, 2022 at 07:22:11PM -0400, Tom Lane wrote:
> That path name is 3 bytes over the platform limit.  Evidently,
> "REL_15_STABLE" is just enough longer than "HEAD" to make this fail,
> whereas we didn't see the problem as long as the test case only
> ran in HEAD.

That tells enough about UNIXSOCK_PATH_BUFLEN.  It looks like test.sh
has been using for ages /tmp/pg_upgrade_check* as socket directory to
counter this issue.

> Members butterflyfish, massasauga, and myna likewise have yet to pass
> this test in REL_15_STABLE, though they're perfectly happy in HEAD.
> They are returning cut-down logs that don't allow diagnosing for
> certain, but a reasonable bet is that it's the same kind of problem.

Hmm.  That's possible.

> I think that the conversion of pg_upgrade's test script to TAP
> form missed a bet.  IIRC, we have mechanism somewhere to ensure
> that test socket path names are created under /tmp, or someplace else
> that's not subject to possibly-long paths of installation directories.
> That's evidently not being used here.

There is PostgreSQL::Test::Utils::tempdir_short for that, which is
what all the nodes created in Cluster.pm use for
unix_socket_directories.  One way to address the issue would be to
pass that to pg_upgrade with --socketdir, as of the attached.
--
Michael
diff --git a/src/bin/pg_upgrade/t/002_pg_upgrade.pl b/src/bin/pg_upgrade/t/002_pg_upgrade.pl
index 67e0be6856..8dbda0950e 100644
--- a/src/bin/pg_upgrade/t/002_pg_upgrade.pl
+++ b/src/bin/pg_upgrade/t/002_pg_upgrade.pl
@@ -216,6 +216,9 @@ chdir ${PostgreSQL::Test::Utils::tmp_check};
 # Upgrade the instance.
 $oldnode->stop;
 
+# Use a short path for socket directories.
+my $socketdir = PostgreSQL::Test::Utils::tempdir_short;
+
 # Cause a failure at the start of pg_upgrade, this should create the logging
 # directory pg_upgrade_output.d but leave it around.  Keep --check for an
 # early exit.
@@ -228,6 +231,7 @@ command_fails(
 		'-B',         $newbindir,
 		'-p',         $oldnode->port,
 		'-P',         $newnode->port,
+		'-s',         $socketdir,
 		'--check'
 	],
 	'run of pg_upgrade --check for new instance with incorrect binary path');
@@ -241,7 +245,8 @@ command_ok(
 		'pg_upgrade', '--no-sync',        '-d', $oldnode->data_dir,
 		'-D',         $newnode->data_dir, '-b', $oldbindir,
 		'-B',         $newbindir,         '-p', $oldnode->port,
-		'-P',         $newnode->port,     '--check'
+		'-P',         $newnode->port,     '-s', $socketdir,
+		'--check'
 	],
 	'run of pg_upgrade --check for new instance');
 ok(!-d $newnode->data_dir . "/pg_upgrade_output.d",
@@ -253,7 +258,7 @@ command_ok(
 		'pg_upgrade', '--no-sync',        '-d', $oldnode->data_dir,
 		'-D',         $newnode->data_dir, '-b', $oldbindir,
 		'-B',         $newbindir,         '-p', $oldnode->port,
-		'-P',         $newnode->port
+		'-P',         $newnode->port,     '-s', $socketdir,
 	],
 	'run of pg_upgrade for new instance');
 ok( !-d $newnode->data_dir . "/pg_upgrade_output.d",

Attachment: signature.asc
Description: PGP signature

Reply via email to