Blame SOURCES/mysql-mtr.patch

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