3c4e52
Avoid errors like:
3c4e52
3c4e52
|  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.
3c4e52
|  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,
3c4e52
|  it would be  truncated and thus not possible to use for connection to  MySQL Server. Set a shorter with --tmpdir=<path> option
3c4e52
3c4e52
===
3c4e52
3c4e52
On Fedora 32:
3c4e52
3c4e52
|  $ grep -e "PATH" /usr/include/linux/limits.h
3c4e52
|  #define PATH_MAX        4096	/* # chars in a path name including nul */
3c4e52
3c4e52
===
3c4e52
3c4e52
Thus setting the maximum path length on Fedora to 108 characters is just too short.
3c4e52
3c4e52
BTW on the modern filesystems you can easily create path longer than PATH_MAX.
3c4e52
The PATH_MAX constant is unsafe.
3c4e52
Interesting article: https://insanecoding.blogspot.com/2007/11/pathmax-simply-isnt.html
3c4e52
3c4e52
===
3c4e52
3c4e52
The question is why haven't I encountered this issue until recently ?
3c4e52
3c4e52
After the recent tweaks to the testsuite (between 8.0.24 and 8.0.25 release), the generated --tmpdir path changed from
3c4e52
|  --tmpdir=/builddir/build/BUILD/mysql-8.0.24/x86_64-redhat-linux-gnu/mysql-test/var/tmp/
3c4e52
to
3c4e52
|  --tmpdir=/builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var/tmp/
3c4e52
3c4e52
===
3c4e52
3c4e52
The whole setup changed as follows:
3c4e52
BEFORE:
3c4e52
3c4e52
|  Installing system database
3c4e52
|  ### 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
3c4e52
3c4e52
AFTER:
3c4e52
3c4e52
|  Installing system database
3c4e52
|  ### 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
3c4e52
3c4e52
===
3c4e52
3c4e52
The likely cause is the added
3c4e52
3c4e52
|  cd %{buildroot}%{_datadir}/mysql-test
3c4e52
3c4e52
which was not originally present in the SPECfile.
3c4e52
3c4e52
However the MariaDB implementation does not have this issue, even though it has the same SPECfile %check phase code.
3c4e52
3c4e52
3c4e52
===
3c4e52
3c4e52
In the extended log, you can see '/tmp/XfTFAis2Jl' being created and deleted short after.
3c4e52
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.
3c4e52
3c4e52
I'm not sure whether the output is synchronous, but even if it wasn'tit still looks weird.
3c4e52
3c4e52
| + cd /builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test
3c4e52
| 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
3c4e52
| Path length (109) is longer than maximum supported length (108) and will be truncated at /usr/lib64/perl5/vendor_perl/Socket.pm line 880.
3c4e52
| 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
3c4e52
|  - Using tmpdir: '/tmp/XfTFAis2Jl'
3c4e52
| > Collecting: main
3c4e52
| > testdir: /builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/t
3c4e52
| > resdir: /builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/r
3c4e52
| > Collecting: i_main
3c4e52
| Removing old var directory
3c4e52
| > opt_vardir: /builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var
3c4e52
| > Removing /builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var/
3c4e52
| > Removing /dev/shm/var_933_jfTb
3c4e52
| > Removing /tmp/XfTFAis2Jl/
3c4e52
| Creating var directory '/builddir/build/BUILDROOT/mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var'
3c4e52
| > Creating /dev/shm/var_933_jfTb
3c4e52
|  - symlinking 'var' to '/dev/shm/var_933_jfTb'
3c4e52
3c4e52
3c4e52
3c4e52
3c4e52
--- mysql-8.0.24/mysql-test/mysql-test-run.pl	2021-05-10 04:29:44.391897891 +0200
3c4e52
+++ mysql-8.0.24/mysql-test/mysql-test-run.pl_patched	2021-05-10 04:38:51.031702753 +0200
3c4e52
@@ -3374,17 +3374,6 @@ sub setup_vardir() {
3c4e52
   mkpath("$opt_vardir/tmp");
3c4e52
   mkpath($opt_tmpdir) if ($opt_tmpdir ne "$opt_vardir/tmp");
3c4e52
 
3c4e52
-  # On some operating systems, there is a limit to the length of a
3c4e52
-  # UNIX domain socket's path far below PATH_MAX. Don't allow that
3c4e52
-  # to happen.
3c4e52
-  my $res =
3c4e52
-    check_socket_path_length("$opt_tmpdir/mysqld.NN.sock", $opt_parallel);
3c4e52
-  if ($res) {
3c4e52
-    mtr_error("Socket path '$opt_tmpdir' too long, it would be ",
3c4e52
-              "truncated and thus not possible to use for connection to ",
3c4e52
-              "MySQL Server. Set a shorter with --tmpdir=<path> option");
3c4e52
-  }
3c4e52
-
3c4e52
   # Copy all files from std_data into var/std_data
3c4e52
   # and make them world readable
3c4e52
   copytree("$glob_mysql_test_dir/std_data", "$opt_vardir/std_data", "0022");