Too-long socket paths are breaking several buildfarm members
Buildfarm member thorntail has yet to pass the pg_upgrade test
in the REL_15_STABLE branch. It looks like the problem reduces to
an overlength pathname:
2022-07-04 00:27:03.404 MSK [2212393:2] LOG: Unix-domain socket path "/home/nm/farm/sparc64_deb10_gcc_64_ubsan/REL_15_STABLE/pgsql.build/src/bin/pg_upgrade/tmp_check/.s.PGSQL.49714" is too long (maximum 107 bytes)
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.
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.
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.
regards, tom lane
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
Attachments:
upgrade-tap-shorttemp.patchtext/x-diff; charset=us-asciiDownload+7-2
Michael Paquier <michael@paquier.xyz> writes:
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.
Yeah, I just came to the same conclusion and pushed an equivalent
patch. Sorry for the duplicated effort.
regards, tom lane