Blob Blame History Raw
Avoid errors like:

|  Path length (109) is longer than maximum supported length (108) and will be truncated at /usr/lib64/perl5/vendor_perl/Socket.pm line 880, <GEN16094> line 1.
|  worker[2] mysql-test-run: *** ERROR: Socket path '/builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.s390x/usr/share/mysql-test/var/tmp/2' too long,
|  it would be  truncated and thus not possible to use for connection to  MySQL Server. Set a shorter with --tmpdir=<path> option

===

On Fedora 32:

|  $ grep -e "PATH" /usr/include/linux/limits.h
|  #define PATH_MAX        4096	/* # chars in a path name including nul */

===

Thus setting the maximum path length on Fedora to 108 characters is just too short.

BTW on the modern filesystems you can easily create path longer than PATH_MAX.
The PATH_MAX constant is unsafe.
Interesting article: https://insanecoding.blogspot.com/2007/11/pathmax-simply-isnt.html

===

The question is why haven't I encountered this issue until recently ?

After the recent tweaks to the testsuite (between 8.0.24 and 8.0.25 release), the generated --tmpdir path changed from
|  --tmpdir=/builddir/build/BUILD/mysql-8.0.24/x86_64-redhat-linux-gnu/mysql-test/var/tmp/
to
|  --tmpdir=/builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var/tmp/

===

The whole setup changed as follows:
BEFORE:

|  Installing system database
|  ### safe_path: /builddir/build/BUILD/mysql-8.0.24/x86_64-redhat-linux-gnu/runtime_output_directory///mysqltest_safe_process --verbose -- /builddir/build/BUILD/mysql-8.0.24/x86_64-redhat-linux-gnu/runtime_output_directory/mysqld --no-defaults --initialize-insecure --loose-skip-ndbcluster --tmpdir=/builddir/build/BUILD/mysql-8.0.24/x86_64-redhat-linux-gnu/mysql-test/var/tmp/ --core-file --datadir=/builddir/build/BUILD/mysql-8.0.24/x86_64-redhat-linux-gnu/mysql-test/var/data/ --secure-file-priv=/builddir/build/BUILD/mysql-8.0.24/x86_64-redhat-linux-gnu/mysql-test/var --innodb_buffer_pool_size=24M --innodb-log-file-size=5M --innodb_autoextend_increment=8 --character-sets-dir=/builddir/build/BUILD/mysql-8.0.24/share/charsets --loose-auto_generate_certs=OFF --loose-sha256_password_auto_generate_rsa_keys=OFF --loose-caching_sha2_password_auto_generate_rsa_keys=OFF --init-file=/builddir/build/BUILD/mysql-8.0.24/x86_64-redhat-linux-gnu/mysql-test/var/tmp/bootstrap.sql

AFTER:

|  Installing system database
|  ### safe_path: /builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.x86_64/usr/bin//mysqltest_safe_process --verbose -- /builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.x86_64/usr/libexec/mysqld --no-defaults --initialize-insecure --loose-skip-ndbcluster --tmpdir=/builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var/tmp/ --core-file --datadir=/builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var/data/ --secure-file-priv=/builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var --innodb_buffer_pool_size=24M --innodb-log-file-size=5M --innodb_autoextend_increment=8 --character-sets-dir=/builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.x86_64/usr/share/mysql/charsets --loose-auto_generate_certs=OFF --loose-sha256_password_auto_generate_rsa_keys=OFF --loose-caching_sha2_password_auto_generate_rsa_keys=OFF --init-file=/builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var/tmp/bootstrap.sql

===

The likely cause is the added

|  cd %{buildroot}%{_datadir}/mysql-test

which was not originally present in the SPECfile.

However the MariaDB implementation does not have this issue, even though it has the same SPECfile %check phase code.


===

In the extended log, you can see '/tmp/XfTFAis2Jl' being created and deleted short after.
Even though the script warns about the path length, tries to workaround it; it destroyes that workaround short after and use the too-long path instead.

I'm not sure whether the output is synchronous, but even if it wasn'tit still looks weird.

| + cd /builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test
| Logging: ./mysql-test-run.pl  --verbose --parallel=auto --force --retry=2 --suite-timeout=900 --testcase-timeout=30 --mysqld=--binlog-format=mixed --max-test-fail=5 --report-unstable-tests --clean-vardir --suite=main --mem --skip-test-list=platform-specific-tests.list
| Path length (109) is longer than maximum supported length (108) and will be truncated at /usr/lib64/perl5/vendor_perl/Socket.pm line 880.
| Too long tmpdir path '/builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var/tmp'  creating a shorter one
|  - Using tmpdir: '/tmp/XfTFAis2Jl'
| > Collecting: main
| > testdir: /builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/t
| > resdir: /builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/r
| > Collecting: i_main
| Removing old var directory
| > opt_vardir: /builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var
| > Removing /builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var/
| > Removing /dev/shm/var_933_jfTb
| > Removing /tmp/XfTFAis2Jl/
| Creating var directory '/builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var'
| > Creating /dev/shm/var_933_jfTb
|  - symlinking 'var' to '/dev/shm/var_933_jfTb'




--- mysql-8.0.24/mysql-test/mysql-test-run.pl	2021-05-10 04:29:44.391897891 +0200
+++ mysql-8.0.24/mysql-test/mysql-test-run.pl_patched	2021-05-10 04:38:51.031702753 +0200
@@ -3374,17 +3374,6 @@ sub setup_vardir() {
   mkpath("$opt_vardir/tmp");
   mkpath($opt_tmpdir) if ($opt_tmpdir ne "$opt_vardir/tmp");
 
-  # On some operating systems, there is a limit to the length of a
-  # UNIX domain socket's path far below PATH_MAX. Don't allow that
-  # to happen.
-  my $res =
-    check_socket_path_length("$opt_tmpdir/mysqld.NN.sock", $opt_parallel);
-  if ($res) {
-    mtr_error("Socket path '$opt_tmpdir' too long, it would be ",
-              "truncated and thus not possible to use for connection to ",
-              "MySQL Server. Set a shorter with --tmpdir=<path> option");
-  }
-
   # Copy all files from std_data into var/std_data
   # and make them world readable
   copytree("$glob_mysql_test_dir/std_data", "$opt_vardir/std_data", "0022");